1 #ifndef __IEEE802154_6LOWPAN_I_H__
2 #define __IEEE802154_6LOWPAN_I_H__
4 #include <linux/list.h>
6 #include <net/ieee802154_netdev.h>
7 #include <net/inet_frag.h>
8 #include <net/6lowpan.h>
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)
16 #define LOWPAN_DISPATCH_FRAG1 0xc0
17 #define LOWPAN_DISPATCH_FRAGN 0xe0
19 struct lowpan_create_arg
{
22 const struct ieee802154_addr
*src
;
23 const struct ieee802154_addr
*dst
;
26 /* Equivalent of ipv4 struct ip
28 struct lowpan_frag_queue
{
29 struct inet_frag_queue q
;
33 struct ieee802154_addr saddr
;
34 struct ieee802154_addr daddr
;
37 static inline u32
ieee802154_addr_hash(const struct ieee802154_addr
*a
)
40 case IEEE802154_ADDR_LONG
:
41 return (((__force u64
)a
->extended_addr
) >> 32) ^
42 (((__force u64
)a
->extended_addr
) & 0xffffffff);
43 case IEEE802154_ADDR_SHORT
:
44 return (__force u32
)(a
->short_addr
);
50 /* private device info */
51 struct lowpan_dev_info
{
52 struct net_device
*wdev
; /* wpan device ptr */
57 lowpan_dev_info
*lowpan_dev_info(const struct net_device
*dev
)
59 return (struct lowpan_dev_info
*)lowpan_priv(dev
)->priv
;
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);
66 void lowpan_rx_init(void);
67 void lowpan_rx_exit(void);
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
);
74 int lowpan_iphc_decompress(struct sk_buff
*skb
);
75 lowpan_rx_result
lowpan_rx_h_ipv6(struct sk_buff
*skb
);
77 #endif /* __IEEE802154_6LOWPAN_I_H__ */