summaryrefslogtreecommitdiff
path: root/lib/bnep.h
blob: 2bbfb177f82a28e736fb9af17690f6e3aafddb29 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
 *
 *  BlueZ - Bluetooth protocol stack for Linux
 *
 *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com>
 *  Copyright (C) 2002-2010  Marcel Holtmann <marcel@holtmann.org>
 *
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

#ifndef __BNEP_H
#define __BNEP_H

#ifdef __cplusplus
extern "C" {
#endif

#include <bluetooth/bluetooth.h>

#ifndef ETH_ALEN
#define ETH_ALEN	6		/* from <net/ethernet.h> */
#endif

/* BNEP UUIDs */
#define BNEP_BASE_UUID 0x0000000000001000800000805F9B34FB
#define BNEP_UUID16    0x02
#define BNEP_UUID32    0x04
#define BNEP_UUID128   0x16

#define BNEP_SVC_PANU  0x1115
#define BNEP_SVC_NAP   0x1116
#define BNEP_SVC_GN    0x1117

/* BNEP packet types */
#define BNEP_GENERAL               0x00
#define BNEP_CONTROL               0x01
#define BNEP_COMPRESSED            0x02
#define BNEP_COMPRESSED_SRC_ONLY   0x03
#define BNEP_COMPRESSED_DST_ONLY   0x04

/* BNEP control types */
#define BNEP_CMD_NOT_UNDERSTOOD    0x00
#define BNEP_SETUP_CONN_REQ        0x01
#define BNEP_SETUP_CONN_RSP        0x02
#define BNEP_FILTER_NET_TYPE_SET   0x03
#define BNEP_FILTER_NET_TYPE_RSP   0x04
#define BNEP_FILTER_MULT_ADDR_SET  0x05
#define BNEP_FILTER_MULT_ADDR_RSP  0x06

/* BNEP response messages */
#define BNEP_SUCCESS               0x00

#define BNEP_CONN_INVALID_DST      0x01
#define BNEP_CONN_INVALID_SRC      0x02
#define BNEP_CONN_INVALID_SVC      0x03
#define BNEP_CONN_NOT_ALLOWED      0x04

#define BNEP_FILTER_UNSUPPORTED_REQ    0x01
#define BNEP_FILTER_INVALID_RANGE      0x02
#define BNEP_FILTER_INVALID_MCADDR     0x02
#define BNEP_FILTER_LIMIT_REACHED      0x03
#define BNEP_FILTER_DENIED_SECURITY    0x04

/* L2CAP settings */
#define BNEP_MTU         1691
#define BNEP_FLUSH_TO    0xffff
#define BNEP_CONNECT_TO  15
#define BNEP_FILTER_TO   15

#ifndef BNEP_PSM
#define BNEP_PSM	 0x0f
#endif

/* BNEP headers */
#define BNEP_TYPE_MASK	 0x7f
#define BNEP_EXT_HEADER	 0x80

struct bnep_setup_conn_req {
	uint8_t  type;
	uint8_t  ctrl;
	uint8_t  uuid_size;
	uint8_t  service[0];
} __attribute__((packed));

struct bnep_set_filter_req {
	uint8_t  type;
	uint8_t  ctrl;
	uint16_t len;
	uint8_t  list[0];
} __attribute__((packed));

struct bnep_control_rsp {
	uint8_t  type;
	uint8_t  ctrl;
	uint16_t resp;
} __attribute__((packed));

struct bnep_ext_hdr {
	uint8_t  type;
	uint8_t  len;
	uint8_t  data[0];
} __attribute__((packed));

/* BNEP ioctl defines */
#define BNEPCONNADD	_IOW('B', 200, int)
#define BNEPCONNDEL	_IOW('B', 201, int)
#define BNEPGETCONNLIST	_IOR('B', 210, int)
#define BNEPGETCONNINFO	_IOR('B', 211, int)

struct bnep_connadd_req {
	int      sock;		/* Connected socket */
	uint32_t flags;
	uint16_t role;
	char     device[16];	/* Name of the Ethernet device */
};

struct bnep_conndel_req {
	uint32_t flags;
	uint8_t  dst[ETH_ALEN];
};

struct bnep_conninfo {
	uint32_t flags;
	uint16_t role;
	uint16_t state;
	uint8_t  dst[ETH_ALEN];
	char     device[16];
};

struct bnep_connlist_req {
	uint32_t cnum;
	struct bnep_conninfo *ci;
};

#ifdef __cplusplus
}
#endif

#endif /* __BNEP_H */