summaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-10-24 08:13:16 -0400
committerDavid S. Miller <davem@davemloft.net>2015-10-24 08:13:16 -0400
commita72c9512bf2bef12c5e66a4d910c4b348fe31d61 (patch)
treecfce1711f9a5fc1ef0774e9f2e31945600ff15e0 /include/net
parent379a80a1d048dcacfc2011d5d32e16d5c804b9f4 (diff)
parent13972adc3240ea8b18b44906b819c622941a64b6 (diff)
Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next
Johan Hedberg says: ==================== pull request: bluetooth-next 2015-10-22 Here's probably the last bluetooth-next pull request for 4.4. Among several other changes it contains the rest of the fixes & cleanups from the Bluetooth UnplugFest (that didn't need to be hurried to 4.3). - Refactoring & cleanups to 6lowpan code - New USB ids for two Atheros controllers and BCM43142A0 from Broadcom - Fix (quirk) for broken Broadcom BCM2045 controllers - Support for latest Apple controllers - Improvements to the vendor diagnostic message support Please let me know if there are any issues pulling. Thanks. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/6lowpan.h222
-rw-r--r--include/net/bluetooth/hci.h10
-rw-r--r--include/net/bluetooth/hci_core.h31
-rw-r--r--include/net/mac802154.h10
4 files changed, 110 insertions, 163 deletions
diff --git a/include/net/6lowpan.h b/include/net/6lowpan.h
index 07db532696df..cf3bc564ac03 100644
--- a/include/net/6lowpan.h
+++ b/include/net/6lowpan.h
@@ -56,85 +56,23 @@
56#include <net/ipv6.h> 56#include <net/ipv6.h>
57#include <net/net_namespace.h> 57#include <net/net_namespace.h>
58 58
59#define UIP_802154_SHORTADDR_LEN 2 /* compressed ipv6 address length */
60#define UIP_IPH_LEN 40 /* ipv6 fixed header size */
61#define UIP_PROTO_UDP 17 /* ipv6 next header value for UDP */
62#define UIP_FRAGH_LEN 8 /* ipv6 fragment header size */
63
64#define EUI64_ADDR_LEN 8 59#define EUI64_ADDR_LEN 8
65 60
66#define LOWPAN_NHC_MAX_ID_LEN 1 61#define LOWPAN_NHC_MAX_ID_LEN 1
62/* Maximum next header compression length which we currently support inclusive
63 * possible inline data.
64 */
65#define LOWPAN_NHC_MAX_HDR_LEN (sizeof(struct udphdr))
67/* Max IPHC Header len without IPv6 hdr specific inline data. 66/* Max IPHC Header len without IPv6 hdr specific inline data.
68 * Useful for getting the "extra" bytes we need at worst case compression. 67 * Useful for getting the "extra" bytes we need at worst case compression.
69 * 68 *
70 * LOWPAN_IPHC + CID + LOWPAN_NHC_MAX_ID_LEN 69 * LOWPAN_IPHC + CID + LOWPAN_NHC_MAX_ID_LEN
71 */ 70 */
72#define LOWPAN_IPHC_MAX_HEADER_LEN (2 + 1 + LOWPAN_NHC_MAX_ID_LEN) 71#define LOWPAN_IPHC_MAX_HEADER_LEN (2 + 1 + LOWPAN_NHC_MAX_ID_LEN)
73 72/* Maximum worst case IPHC header buffer size */
74/* 73#define LOWPAN_IPHC_MAX_HC_BUF_LEN (sizeof(struct ipv6hdr) + \
75 * ipv6 address based on mac 74 LOWPAN_IPHC_MAX_HEADER_LEN + \
76 * second bit-flip (Universe/Local) is done according RFC2464 75 LOWPAN_NHC_MAX_HDR_LEN)
77 */
78#define is_addr_mac_addr_based(a, m) \
79 ((((a)->s6_addr[8]) == (((m)[0]) ^ 0x02)) && \
80 (((a)->s6_addr[9]) == (m)[1]) && \
81 (((a)->s6_addr[10]) == (m)[2]) && \
82 (((a)->s6_addr[11]) == (m)[3]) && \
83 (((a)->s6_addr[12]) == (m)[4]) && \
84 (((a)->s6_addr[13]) == (m)[5]) && \
85 (((a)->s6_addr[14]) == (m)[6]) && \
86 (((a)->s6_addr[15]) == (m)[7]))
87
88/*
89 * check whether we can compress the IID to 16 bits,
90 * it's possible for unicast adresses with first 49 bits are zero only.
91 */
92#define lowpan_is_iid_16_bit_compressable(a) \
93 ((((a)->s6_addr16[4]) == 0) && \
94 (((a)->s6_addr[10]) == 0) && \
95 (((a)->s6_addr[11]) == 0xff) && \
96 (((a)->s6_addr[12]) == 0xfe) && \
97 (((a)->s6_addr[13]) == 0))
98
99/* check whether the 112-bit gid of the multicast address is mappable to: */
100
101/* 48 bits, FFXX::00XX:XXXX:XXXX */
102#define lowpan_is_mcast_addr_compressable48(a) \
103 ((((a)->s6_addr16[1]) == 0) && \
104 (((a)->s6_addr16[2]) == 0) && \
105 (((a)->s6_addr16[3]) == 0) && \
106 (((a)->s6_addr16[4]) == 0) && \
107 (((a)->s6_addr[10]) == 0))
108
109/* 32 bits, FFXX::00XX:XXXX */
110#define lowpan_is_mcast_addr_compressable32(a) \
111 ((((a)->s6_addr16[1]) == 0) && \
112 (((a)->s6_addr16[2]) == 0) && \
113 (((a)->s6_addr16[3]) == 0) && \
114 (((a)->s6_addr16[4]) == 0) && \
115 (((a)->s6_addr16[5]) == 0) && \
116 (((a)->s6_addr[12]) == 0))
117
118/* 8 bits, FF02::00XX */
119#define lowpan_is_mcast_addr_compressable8(a) \
120 ((((a)->s6_addr[1]) == 2) && \
121 (((a)->s6_addr16[1]) == 0) && \
122 (((a)->s6_addr16[2]) == 0) && \
123 (((a)->s6_addr16[3]) == 0) && \
124 (((a)->s6_addr16[4]) == 0) && \
125 (((a)->s6_addr16[5]) == 0) && \
126 (((a)->s6_addr16[6]) == 0) && \
127 (((a)->s6_addr[14]) == 0))
128
129#define lowpan_is_addr_broadcast(a) \
130 ((((a)[0]) == 0xFF) && \
131 (((a)[1]) == 0xFF) && \
132 (((a)[2]) == 0xFF) && \
133 (((a)[3]) == 0xFF) && \
134 (((a)[4]) == 0xFF) && \
135 (((a)[5]) == 0xFF) && \
136 (((a)[6]) == 0xFF) && \
137 (((a)[7]) == 0xFF))
138 76
139#define LOWPAN_DISPATCH_IPV6 0x41 /* 01000001 = 65 */ 77#define LOWPAN_DISPATCH_IPV6 0x41 /* 01000001 = 65 */
140#define LOWPAN_DISPATCH_IPHC 0x60 /* 011xxxxx = ... */ 78#define LOWPAN_DISPATCH_IPHC 0x60 /* 011xxxxx = ... */
@@ -150,69 +88,6 @@ static inline bool lowpan_is_iphc(u8 dispatch)
150 return (dispatch & LOWPAN_DISPATCH_IPHC_MASK) == LOWPAN_DISPATCH_IPHC; 88 return (dispatch & LOWPAN_DISPATCH_IPHC_MASK) == LOWPAN_DISPATCH_IPHC;
151} 89}
152 90
153#define LOWPAN_FRAG_TIMEOUT (HZ * 60) /* time-out 60 sec */
154
155#define LOWPAN_FRAG1_HEAD_SIZE 0x4
156#define LOWPAN_FRAGN_HEAD_SIZE 0x5
157
158/*
159 * Values of fields within the IPHC encoding first byte
160 * (C stands for compressed and I for inline)
161 */
162#define LOWPAN_IPHC_TF 0x18
163
164#define LOWPAN_IPHC_FL_C 0x10
165#define LOWPAN_IPHC_TC_C 0x08
166#define LOWPAN_IPHC_NH_C 0x04
167#define LOWPAN_IPHC_TTL_1 0x01
168#define LOWPAN_IPHC_TTL_64 0x02
169#define LOWPAN_IPHC_TTL_255 0x03
170#define LOWPAN_IPHC_TTL_I 0x00
171
172
173/* Values of fields within the IPHC encoding second byte */
174#define LOWPAN_IPHC_CID 0x80
175
176#define LOWPAN_IPHC_ADDR_00 0x00
177#define LOWPAN_IPHC_ADDR_01 0x01
178#define LOWPAN_IPHC_ADDR_02 0x02
179#define LOWPAN_IPHC_ADDR_03 0x03
180
181#define LOWPAN_IPHC_SAC 0x40
182#define LOWPAN_IPHC_SAM 0x30
183
184#define LOWPAN_IPHC_SAM_BIT 4
185
186#define LOWPAN_IPHC_M 0x08
187#define LOWPAN_IPHC_DAC 0x04
188#define LOWPAN_IPHC_DAM_00 0x00
189#define LOWPAN_IPHC_DAM_01 0x01
190#define LOWPAN_IPHC_DAM_10 0x02
191#define LOWPAN_IPHC_DAM_11 0x03
192
193#define LOWPAN_IPHC_DAM_BIT 0
194/*
195 * LOWPAN_UDP encoding (works together with IPHC)
196 */
197#define LOWPAN_NHC_UDP_MASK 0xF8
198#define LOWPAN_NHC_UDP_ID 0xF0
199#define LOWPAN_NHC_UDP_CHECKSUMC 0x04
200#define LOWPAN_NHC_UDP_CHECKSUMI 0x00
201
202#define LOWPAN_NHC_UDP_4BIT_PORT 0xF0B0
203#define LOWPAN_NHC_UDP_4BIT_MASK 0xFFF0
204#define LOWPAN_NHC_UDP_8BIT_PORT 0xF000
205#define LOWPAN_NHC_UDP_8BIT_MASK 0xFF00
206
207/* values for port compression, _with checksum_ ie bit 5 set to 0 */
208#define LOWPAN_NHC_UDP_CS_P_00 0xF0 /* all inline */
209#define LOWPAN_NHC_UDP_CS_P_01 0xF1 /* source 16bit inline,
210 dest = 0xF0 + 8 bit inline */
211#define LOWPAN_NHC_UDP_CS_P_10 0xF2 /* source = 0xF0 + 8bit inline,
212 dest = 16 bit inline */
213#define LOWPAN_NHC_UDP_CS_P_11 0xF3 /* source & dest = 0xF0B + 4bit inline */
214#define LOWPAN_NHC_UDP_CS_C 0x04 /* checksum elided */
215
216#define LOWPAN_PRIV_SIZE(llpriv_size) \ 91#define LOWPAN_PRIV_SIZE(llpriv_size) \
217 (sizeof(struct lowpan_priv) + llpriv_size) 92 (sizeof(struct lowpan_priv) + llpriv_size)
218 93
@@ -250,7 +125,7 @@ struct lowpan_802154_cb *lowpan_802154_cb(const struct sk_buff *skb)
250#ifdef DEBUG 125#ifdef DEBUG
251/* print data in line */ 126/* print data in line */
252static inline void raw_dump_inline(const char *caller, char *msg, 127static inline void raw_dump_inline(const char *caller, char *msg,
253 unsigned char *buf, int len) 128 const unsigned char *buf, int len)
254{ 129{
255 if (msg) 130 if (msg)
256 pr_debug("%s():%s: ", caller, msg); 131 pr_debug("%s():%s: ", caller, msg);
@@ -265,7 +140,7 @@ static inline void raw_dump_inline(const char *caller, char *msg,
265 * ... 140 * ...
266 */ 141 */
267static inline void raw_dump_table(const char *caller, char *msg, 142static inline void raw_dump_table(const char *caller, char *msg,
268 unsigned char *buf, int len) 143 const unsigned char *buf, int len)
269{ 144{
270 if (msg) 145 if (msg)
271 pr_debug("%s():%s:\n", caller, msg); 146 pr_debug("%s():%s:\n", caller, msg);
@@ -274,24 +149,25 @@ static inline void raw_dump_table(const char *caller, char *msg,
274} 149}
275#else 150#else
276static inline void raw_dump_table(const char *caller, char *msg, 151static inline void raw_dump_table(const char *caller, char *msg,
277 unsigned char *buf, int len) { } 152 const unsigned char *buf, int len) { }
278static inline void raw_dump_inline(const char *caller, char *msg, 153static inline void raw_dump_inline(const char *caller, char *msg,
279 unsigned char *buf, int len) { } 154 const unsigned char *buf, int len) { }
280#endif 155#endif
281 156
282static inline int lowpan_fetch_skb_u8(struct sk_buff *skb, u8 *val) 157/**
283{ 158 * lowpan_fetch_skb - getting inline data from 6LoWPAN header
284 if (unlikely(!pskb_may_pull(skb, 1))) 159 *
285 return -EINVAL; 160 * This function will pull data from sk buffer and put it into data to
286 161 * remove the 6LoWPAN inline data. This function returns true if the
287 *val = skb->data[0]; 162 * sk buffer is too small to pull the amount of data which is specified
288 skb_pull(skb, 1); 163 * by len.
289 164 *
290 return 0; 165 * @skb: the buffer where the inline data should be pulled from.
291} 166 * @data: destination buffer for the inline data.
292 167 * @len: amount of data which should be pulled in bytes.
293static inline bool lowpan_fetch_skb(struct sk_buff *skb, 168 */
294 void *data, const unsigned int len) 169static inline bool lowpan_fetch_skb(struct sk_buff *skb, void *data,
170 unsigned int len)
295{ 171{
296 if (unlikely(!pskb_may_pull(skb, len))) 172 if (unlikely(!pskb_may_pull(skb, len)))
297 return true; 173 return true;
@@ -311,14 +187,42 @@ static inline void lowpan_push_hc_data(u8 **hc_ptr, const void *data,
311 187
312void lowpan_netdev_setup(struct net_device *dev, enum lowpan_lltypes lltype); 188void lowpan_netdev_setup(struct net_device *dev, enum lowpan_lltypes lltype);
313 189
314int 190/**
315lowpan_header_decompress(struct sk_buff *skb, struct net_device *dev, 191 * lowpan_header_decompress - replace 6LoWPAN header with IPv6 header
316 const u8 *saddr, const u8 saddr_type, 192 *
317 const u8 saddr_len, const u8 *daddr, 193 * This function replaces the IPHC 6LoWPAN header which should be pointed at
318 const u8 daddr_type, const u8 daddr_len, 194 * skb->data and skb_network_header, with the IPv6 header.
319 u8 iphc0, u8 iphc1); 195 * It would be nice that the caller have the necessary headroom of IPv6 header
320int lowpan_header_compress(struct sk_buff *skb, struct net_device *dev, 196 * and greatest Transport layer header, this would reduce the overhead for
321 unsigned short type, const void *_daddr, 197 * reallocate headroom.
322 const void *_saddr, unsigned int len); 198 *
199 * @skb: the buffer which should be manipulate.
200 * @dev: the lowpan net device pointer.
201 * @daddr: destination lladdr of mac header which is used for compression
202 * methods.
203 * @saddr: source lladdr of mac header which is used for compression
204 * methods.
205 */
206int lowpan_header_decompress(struct sk_buff *skb, const struct net_device *dev,
207 const void *daddr, const void *saddr);
208
209/**
210 * lowpan_header_compress - replace IPv6 header with 6LoWPAN header
211 *
212 * This function replaces the IPv6 header which should be pointed at
213 * skb->data and skb_network_header, with the IPHC 6LoWPAN header.
214 * The caller need to be sure that the sk buffer is not shared and at have
215 * at least a headroom which is smaller or equal LOWPAN_IPHC_MAX_HEADER_LEN,
216 * which is the IPHC "more bytes than IPv6 header" at worst case.
217 *
218 * @skb: the buffer which should be manipulate.
219 * @dev: the lowpan net device pointer.
220 * @daddr: destination lladdr of mac header which is used for compression
221 * methods.
222 * @saddr: source lladdr of mac header which is used for compression
223 * methods.
224 */
225int lowpan_header_compress(struct sk_buff *skb, const struct net_device *dev,
226 const void *daddr, const void *saddr);
323 227
324#endif /* __6LOWPAN_H__ */ 228#endif /* __6LOWPAN_H__ */
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index a26ff28ca878..0205b80cc90b 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -46,6 +46,7 @@
46#define HCI_DEV_RESUME 6 46#define HCI_DEV_RESUME 6
47#define HCI_DEV_OPEN 7 47#define HCI_DEV_OPEN 7
48#define HCI_DEV_CLOSE 8 48#define HCI_DEV_CLOSE 8
49#define HCI_DEV_SETUP 9
49 50
50/* HCI notify events */ 51/* HCI notify events */
51#define HCI_NOTIFY_CONN_ADD 1 52#define HCI_NOTIFY_CONN_ADD 1
@@ -170,6 +171,15 @@ enum {
170 * during the hdev->setup vendor callback. 171 * during the hdev->setup vendor callback.
171 */ 172 */
172 HCI_QUIRK_SIMULTANEOUS_DISCOVERY, 173 HCI_QUIRK_SIMULTANEOUS_DISCOVERY,
174
175 /* When this quirk is set, the enabling of diagnostic mode is
176 * not persistent over HCI Reset. Every time the controller
177 * is brought up it needs to be reprogrammed.
178 *
179 * This quirk can be set before hci_register_dev is called or
180 * during the hdev->setup vendor callback.
181 */
182 HCI_QUIRK_NON_PERSISTENT_DIAG,
173}; 183};
174 184
175/* HCI device flags */ 185/* HCI device flags */
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index f28470e59682..1878d0a96333 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -398,6 +398,7 @@ struct hci_dev {
398 int (*send)(struct hci_dev *hdev, struct sk_buff *skb); 398 int (*send)(struct hci_dev *hdev, struct sk_buff *skb);
399 void (*notify)(struct hci_dev *hdev, unsigned int evt); 399 void (*notify)(struct hci_dev *hdev, unsigned int evt);
400 void (*hw_error)(struct hci_dev *hdev, u8 code); 400 void (*hw_error)(struct hci_dev *hdev, u8 code);
401 int (*post_init)(struct hci_dev *hdev);
401 int (*set_diag)(struct hci_dev *hdev, bool enable); 402 int (*set_diag)(struct hci_dev *hdev, bool enable);
402 int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr); 403 int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr);
403}; 404};
@@ -470,6 +471,7 @@ struct hci_conn {
470 struct delayed_work auto_accept_work; 471 struct delayed_work auto_accept_work;
471 struct delayed_work idle_work; 472 struct delayed_work idle_work;
472 struct delayed_work le_conn_timeout; 473 struct delayed_work le_conn_timeout;
474 struct work_struct le_scan_cleanup;
473 475
474 struct device dev; 476 struct device dev;
475 struct dentry *debugfs; 477 struct dentry *debugfs;
@@ -792,6 +794,30 @@ static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
792 return NULL; 794 return NULL;
793} 795}
794 796
797static inline struct hci_conn *hci_conn_hash_lookup_le(struct hci_dev *hdev,
798 bdaddr_t *ba,
799 __u8 ba_type)
800{
801 struct hci_conn_hash *h = &hdev->conn_hash;
802 struct hci_conn *c;
803
804 rcu_read_lock();
805
806 list_for_each_entry_rcu(c, &h->list, list) {
807 if (c->type != LE_LINK)
808 continue;
809
810 if (ba_type == c->dst_type && !bacmp(&c->dst, ba)) {
811 rcu_read_unlock();
812 return c;
813 }
814 }
815
816 rcu_read_unlock();
817
818 return NULL;
819}
820
795static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev, 821static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev,
796 __u8 type, __u16 state) 822 __u8 type, __u16 state)
797{ 823{
@@ -1016,9 +1042,6 @@ void hci_conn_params_clear_disabled(struct hci_dev *hdev);
1016struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list, 1042struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
1017 bdaddr_t *addr, 1043 bdaddr_t *addr,
1018 u8 addr_type); 1044 u8 addr_type);
1019struct hci_conn_params *hci_explicit_connect_lookup(struct hci_dev *hdev,
1020 bdaddr_t *addr,
1021 u8 addr_type);
1022 1045
1023void hci_uuids_clear(struct hci_dev *hdev); 1046void hci_uuids_clear(struct hci_dev *hdev);
1024 1047
@@ -1458,7 +1481,7 @@ void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1458void mgmt_discovering(struct hci_dev *hdev, u8 discovering); 1481void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
1459bool mgmt_powering_down(struct hci_dev *hdev); 1482bool mgmt_powering_down(struct hci_dev *hdev);
1460void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent); 1483void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent);
1461void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk); 1484void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent);
1462void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk, 1485void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
1463 bool persistent); 1486 bool persistent);
1464void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr, 1487void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
diff --git a/include/net/mac802154.h b/include/net/mac802154.h
index 5718765cbd95..da574bbdc333 100644
--- a/include/net/mac802154.h
+++ b/include/net/mac802154.h
@@ -277,6 +277,16 @@ static inline void ieee802154_le64_to_be64(void *be64_dst, const void *le64_src)
277} 277}
278 278
279/** 279/**
280 * ieee802154_le16_to_be16 - copies and convert le16 to be16
281 * @be16_dst: be16 destination pointer
282 * @le16_src: le16 source pointer
283 */
284static inline void ieee802154_le16_to_be16(void *be16_dst, const void *le16_src)
285{
286 __put_unaligned_memmove16(swab16p(le16_src), be16_dst);
287}
288
289/**
280 * ieee802154_alloc_hw - Allocate a new hardware device 290 * ieee802154_alloc_hw - Allocate a new hardware device
281 * 291 *
282 * This must be called once for each hardware device. The returned pointer 292 * This must be called once for each hardware device. The returned pointer