Home | History | Annotate | Download | only in bluetooth
      1 /*
      2  *
      3  *  BlueZ - Bluetooth protocol stack for Linux
      4  *
      5  *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk (at) qualcomm.com>
      6  *  Copyright (C) 2002-2010  Marcel Holtmann <marcel (at) holtmann.org>
      7  *
      8  *
      9  *  This program is free software; you can redistribute it and/or modify
     10  *  it under the terms of the GNU General Public License as published by
     11  *  the Free Software Foundation; either version 2 of the License, or
     12  *  (at your option) any later version.
     13  *
     14  *  This program is distributed in the hope that it will be useful,
     15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17  *  GNU General Public License for more details.
     18  *
     19  *  You should have received a copy of the GNU General Public License
     20  *  along with this program; if not, write to the Free Software
     21  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     22  *
     23  */
     24 
     25 #ifndef __BNEP_H
     26 #define __BNEP_H
     27 
     28 #ifdef __cplusplus
     29 extern "C" {
     30 #endif
     31 
     32 #include <bluetooth/bluetooth.h>
     33 
     34 #ifndef ETH_ALEN
     35 #define ETH_ALEN	6		/* from <net/ethernet.h> */
     36 #endif
     37 
     38 /* BNEP UUIDs */
     39 #define BNEP_BASE_UUID 0x0000000000001000800000805F9B34FB
     40 #define BNEP_UUID16    0x02
     41 #define BNEP_UUID32    0x04
     42 #define BNEP_UUID128   0x16
     43 
     44 #define BNEP_SVC_PANU  0x1115
     45 #define BNEP_SVC_NAP   0x1116
     46 #define BNEP_SVC_GN    0x1117
     47 
     48 /* BNEP packet types */
     49 #define BNEP_GENERAL               0x00
     50 #define BNEP_CONTROL               0x01
     51 #define BNEP_COMPRESSED            0x02
     52 #define BNEP_COMPRESSED_SRC_ONLY   0x03
     53 #define BNEP_COMPRESSED_DST_ONLY   0x04
     54 
     55 /* BNEP control types */
     56 #define BNEP_CMD_NOT_UNDERSTOOD    0x00
     57 #define BNEP_SETUP_CONN_REQ        0x01
     58 #define BNEP_SETUP_CONN_RSP        0x02
     59 #define BNEP_FILTER_NET_TYPE_SET   0x03
     60 #define BNEP_FILTER_NET_TYPE_RSP   0x04
     61 #define BNEP_FILTER_MULT_ADDR_SET  0x05
     62 #define BNEP_FILTER_MULT_ADDR_RSP  0x06
     63 
     64 /* BNEP response messages */
     65 #define BNEP_SUCCESS               0x00
     66 
     67 #define BNEP_CONN_INVALID_DST      0x01
     68 #define BNEP_CONN_INVALID_SRC      0x02
     69 #define BNEP_CONN_INVALID_SVC      0x03
     70 #define BNEP_CONN_NOT_ALLOWED      0x04
     71 
     72 #define BNEP_FILTER_UNSUPPORTED_REQ    0x01
     73 #define BNEP_FILTER_INVALID_RANGE      0x02
     74 #define BNEP_FILTER_INVALID_MCADDR     0x02
     75 #define BNEP_FILTER_LIMIT_REACHED      0x03
     76 #define BNEP_FILTER_DENIED_SECURITY    0x04
     77 
     78 /* L2CAP settings */
     79 #define BNEP_MTU         1691
     80 #define BNEP_FLUSH_TO    0xffff
     81 #define BNEP_CONNECT_TO  15
     82 #define BNEP_FILTER_TO   15
     83 
     84 #ifndef BNEP_PSM
     85 #define BNEP_PSM	 0x0f
     86 #endif
     87 
     88 /* BNEP headers */
     89 #define BNEP_TYPE_MASK	 0x7f
     90 #define BNEP_EXT_HEADER	 0x80
     91 
     92 struct bnep_setup_conn_req {
     93 	uint8_t  type;
     94 	uint8_t  ctrl;
     95 	uint8_t  uuid_size;
     96 	uint8_t  service[0];
     97 } __attribute__((packed));
     98 
     99 struct bnep_set_filter_req {
    100 	uint8_t  type;
    101 	uint8_t  ctrl;
    102 	uint16_t len;
    103 	uint8_t  list[0];
    104 } __attribute__((packed));
    105 
    106 struct bnep_control_rsp {
    107 	uint8_t  type;
    108 	uint8_t  ctrl;
    109 	uint16_t resp;
    110 } __attribute__((packed));
    111 
    112 struct bnep_ext_hdr {
    113 	uint8_t  type;
    114 	uint8_t  len;
    115 	uint8_t  data[0];
    116 } __attribute__((packed));
    117 
    118 /* BNEP ioctl defines */
    119 #define BNEPCONNADD	_IOW('B', 200, int)
    120 #define BNEPCONNDEL	_IOW('B', 201, int)
    121 #define BNEPGETCONNLIST	_IOR('B', 210, int)
    122 #define BNEPGETCONNINFO	_IOR('B', 211, int)
    123 
    124 struct bnep_connadd_req {
    125 	int      sock;		/* Connected socket */
    126 	uint32_t flags;
    127 	uint16_t role;
    128 	char     device[16];	/* Name of the Ethernet device */
    129 };
    130 
    131 struct bnep_conndel_req {
    132 	uint32_t flags;
    133 	uint8_t  dst[ETH_ALEN];
    134 };
    135 
    136 struct bnep_conninfo {
    137 	uint32_t flags;
    138 	uint16_t role;
    139 	uint16_t state;
    140 	uint8_t  dst[ETH_ALEN];
    141 	char     device[16];
    142 };
    143 
    144 struct bnep_connlist_req {
    145 	uint32_t cnum;
    146 	struct bnep_conninfo *ci;
    147 };
    148 
    149 #ifdef __cplusplus
    150 }
    151 #endif
    152 
    153 #endif /* __BNEP_H */
    154