6lowpan_i.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #ifndef __IEEE802154_6LOWPAN_I_H__
  2. #define __IEEE802154_6LOWPAN_I_H__
  3. #include <linux/list.h>
  4. #include <net/ieee802154_netdev.h>
  5. #include <net/inet_frag.h>
  6. struct lowpan_create_arg {
  7. u16 tag;
  8. u16 d_size;
  9. const struct ieee802154_addr *src;
  10. const struct ieee802154_addr *dst;
  11. };
  12. /* Equivalent of ipv4 struct ip
  13. */
  14. struct lowpan_frag_queue {
  15. struct inet_frag_queue q;
  16. u16 tag;
  17. u16 d_size;
  18. struct ieee802154_addr saddr;
  19. struct ieee802154_addr daddr;
  20. };
  21. static inline u32 ieee802154_addr_hash(const struct ieee802154_addr *a)
  22. {
  23. switch (a->mode) {
  24. case IEEE802154_ADDR_LONG:
  25. return (((__force u64)a->extended_addr) >> 32) ^
  26. (((__force u64)a->extended_addr) & 0xffffffff);
  27. case IEEE802154_ADDR_SHORT:
  28. return (__force u32)(a->short_addr);
  29. default:
  30. return 0;
  31. }
  32. }
  33. struct lowpan_dev_record {
  34. struct net_device *ldev;
  35. struct list_head list;
  36. };
  37. /* private device info */
  38. struct lowpan_dev_info {
  39. struct net_device *real_dev; /* real WPAN device ptr */
  40. struct mutex dev_list_mtx; /* mutex for list ops */
  41. u16 fragment_tag;
  42. };
  43. static inline struct
  44. lowpan_dev_info *lowpan_dev_info(const struct net_device *dev)
  45. {
  46. return netdev_priv(dev);
  47. }
  48. extern struct list_head lowpan_devices;
  49. int lowpan_frag_rcv(struct sk_buff *skb, const u8 frag_type);
  50. void lowpan_net_frag_exit(void);
  51. int lowpan_net_frag_init(void);
  52. void lowpan_rx_init(void);
  53. void lowpan_rx_exit(void);
  54. int lowpan_header_create(struct sk_buff *skb, struct net_device *dev,
  55. unsigned short type, const void *_daddr,
  56. const void *_saddr, unsigned int len);
  57. netdev_tx_t lowpan_xmit(struct sk_buff *skb, struct net_device *dev);
  58. #endif /* __IEEE802154_6LOWPAN_I_H__ */