rpl.h 854 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
  2. /*
  3. * IPv6 RPL-SR implementation
  4. *
  5. * Author:
  6. * (C) 2020 Alexander Aring <alex.aring@gmail.com>
  7. */
  8. #ifndef _LINUX_RPL_H
  9. #define _LINUX_RPL_H
  10. #include <asm/byteorder.h>
  11. #include <linux/types.h>
  12. #include <linux/in6.h>
  13. /*
  14. * RPL SR Header
  15. */
  16. struct ipv6_rpl_sr_hdr {
  17. __u8 nexthdr;
  18. __u8 hdrlen;
  19. __u8 type;
  20. __u8 segments_left;
  21. #if defined(__LITTLE_ENDIAN_BITFIELD)
  22. __u32 cmpre:4,
  23. cmpri:4,
  24. reserved:4,
  25. pad:4,
  26. reserved1:16;
  27. #elif defined(__BIG_ENDIAN_BITFIELD)
  28. __u32 cmpri:4,
  29. cmpre:4,
  30. pad:4,
  31. reserved:20;
  32. #else
  33. #error "Please fix <asm/byteorder.h>"
  34. #endif
  35. union {
  36. __DECLARE_FLEX_ARRAY(struct in6_addr, addr);
  37. __DECLARE_FLEX_ARRAY(__u8, data);
  38. } segments;
  39. } __attribute__((packed));
  40. #define rpl_segaddr segments.addr
  41. #define rpl_segdata segments.data
  42. #endif