Merge tag 'for-f2fs-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk...
[linux-2.6-block.git] / net / ieee802154 / 6lowpan / 6lowpan_i.h
CommitLineData
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
10typedef 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 19struct 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 */
28struct 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 37static 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 */
51struct lowpan_dev_info {
f4606583 52 struct net_device *wdev; /* wpan device ptr */
4662a0da
AA
53 u16 fragment_tag;
54};
55
56static inline struct
57lowpan_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
62int lowpan_frag_rcv(struct sk_buff *skb, const u8 frag_type);
63void lowpan_net_frag_exit(void);
64int lowpan_net_frag_init(void);
65
4662a0da
AA
66void lowpan_rx_init(void);
67void lowpan_rx_exit(void);
68
4dc315e2
AA
69int 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);
72netdev_tx_t lowpan_xmit(struct sk_buff *skb, struct net_device *dev);
73
72a5e6bb
AA
74int lowpan_iphc_decompress(struct sk_buff *skb);
75lowpan_rx_result lowpan_rx_h_ipv6(struct sk_buff *skb);
76
8691ee59 77#endif /* __IEEE802154_6LOWPAN_I_H__ */