Commit | Line | Data |
---|---|---|
8691ee59 AA |
1 | #ifndef __IEEE802154_6LOWPAN_I_H__ |
2 | #define __IEEE802154_6LOWPAN_I_H__ | |
7240cdec | 3 | |
4662a0da AA |
4 | #include <linux/list.h> |
5 | ||
4dc315e2 | 6 | #include <net/ieee802154_netdev.h> |
7240cdec | 7 | #include <net/inet_frag.h> |
b72f6f51 | 8 | #include <net/6lowpan.h> |
7240cdec | 9 | |
72a5e6bb AA |
10 | typedef unsigned __bitwise__ lowpan_rx_result; |
11 | #define RX_CONTINUE ((__force lowpan_rx_result) 0u) | |
12 | #define RX_DROP_UNUSABLE ((__force lowpan_rx_result) 1u) | |
13 | #define RX_DROP ((__force lowpan_rx_result) 2u) | |
14 | #define RX_QUEUED ((__force lowpan_rx_result) 3u) | |
15 | ||
16 | #define LOWPAN_DISPATCH_FRAG1 0xc0 | |
17 | #define LOWPAN_DISPATCH_FRAGN 0xe0 | |
18 | ||
7240cdec | 19 | struct lowpan_create_arg { |
f870b8c6 | 20 | u16 tag; |
7240cdec | 21 | u16 d_size; |
ae531b94 PB |
22 | const struct ieee802154_addr *src; |
23 | const struct ieee802154_addr *dst; | |
7240cdec AA |
24 | }; |
25 | ||
26 | /* Equivalent of ipv4 struct ip | |
27 | */ | |
28 | struct lowpan_frag_queue { | |
29 | struct inet_frag_queue q; | |
30 | ||
f870b8c6 | 31 | u16 tag; |
7240cdec | 32 | u16 d_size; |
ae531b94 PB |
33 | struct ieee802154_addr saddr; |
34 | struct ieee802154_addr daddr; | |
7240cdec AA |
35 | }; |
36 | ||
ae531b94 | 37 | static inline u32 ieee802154_addr_hash(const struct ieee802154_addr *a) |
7240cdec | 38 | { |
ae531b94 | 39 | switch (a->mode) { |
7240cdec | 40 | case IEEE802154_ADDR_LONG: |
ae531b94 PB |
41 | return (((__force u64)a->extended_addr) >> 32) ^ |
42 | (((__force u64)a->extended_addr) & 0xffffffff); | |
7240cdec AA |
43 | case IEEE802154_ADDR_SHORT: |
44 | return (__force u32)(a->short_addr); | |
45 | default: | |
46 | return 0; | |
47 | } | |
48 | } | |
49 | ||
4662a0da AA |
50 | /* private device info */ |
51 | struct lowpan_dev_info { | |
f4606583 | 52 | struct net_device *wdev; /* wpan device ptr */ |
4662a0da AA |
53 | u16 fragment_tag; |
54 | }; | |
55 | ||
56 | static inline struct | |
57 | lowpan_dev_info *lowpan_dev_info(const struct net_device *dev) | |
58 | { | |
b72f6f51 | 59 | return (struct lowpan_dev_info *)lowpan_priv(dev)->priv; |
4662a0da AA |
60 | } |
61 | ||
7240cdec AA |
62 | int lowpan_frag_rcv(struct sk_buff *skb, const u8 frag_type); |
63 | void lowpan_net_frag_exit(void); | |
64 | int lowpan_net_frag_init(void); | |
65 | ||
4662a0da AA |
66 | void lowpan_rx_init(void); |
67 | void lowpan_rx_exit(void); | |
68 | ||
4dc315e2 AA |
69 | int lowpan_header_create(struct sk_buff *skb, struct net_device *dev, |
70 | unsigned short type, const void *_daddr, | |
71 | const void *_saddr, unsigned int len); | |
72 | netdev_tx_t lowpan_xmit(struct sk_buff *skb, struct net_device *dev); | |
73 | ||
72a5e6bb AA |
74 | int lowpan_iphc_decompress(struct sk_buff *skb); |
75 | lowpan_rx_result lowpan_rx_h_ipv6(struct sk_buff *skb); | |
76 | ||
8691ee59 | 77 | #endif /* __IEEE802154_6LOWPAN_I_H__ */ |