geneve.h 1.6 KB

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