geneve.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef __NET_GENEVE_H
  3. #define __NET_GENEVE_H 1
  4. #include <net/udp_tunnel.h>
  5. /* Geneve Header:
  6. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7. * |Ver| Opt Len |O|C| Rsvd. | Protocol Type |
  8. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9. * | Virtual Network Identifier (VNI) | Reserved |
  10. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  11. * | Variable Length Options |
  12. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  13. *
  14. * Option Header:
  15. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  16. * | Option Class | Type |R|R|R| Length |
  17. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  18. * | Variable Option Data |
  19. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  20. */
  21. struct geneve_opt {
  22. __be16 opt_class;
  23. u8 type;
  24. #ifdef __LITTLE_ENDIAN_BITFIELD
  25. u8 length:5;
  26. u8 r3:1;
  27. u8 r2:1;
  28. u8 r1:1;
  29. #else
  30. u8 r1:1;
  31. u8 r2:1;
  32. u8 r3:1;
  33. u8 length:5;
  34. #endif
  35. u8 opt_data[];
  36. };
  37. #define GENEVE_CRIT_OPT_TYPE (1 << 7)
  38. struct genevehdr {
  39. #ifdef __LITTLE_ENDIAN_BITFIELD
  40. u8 opt_len:6;
  41. u8 ver:2;
  42. u8 rsvd1:6;
  43. u8 critical:1;
  44. u8 oam:1;
  45. #else
  46. u8 ver:2;
  47. u8 opt_len:6;
  48. u8 oam:1;
  49. u8 critical:1;
  50. u8 rsvd1:6;
  51. #endif
  52. __be16 proto_type;
  53. u8 vni[3];
  54. u8 rsvd2;
  55. struct geneve_opt options[];
  56. };
  57. #ifdef CONFIG_INET
  58. struct net_device *geneve_dev_create_fb(struct net *net, const char *name,
  59. u8 name_assign_type, u16 dst_port);
  60. #endif /*ifdef CONFIG_INET */
  61. #endif /*ifdef__NET_GENEVE_H */