erspan.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef __LINUX_ERSPAN_H
  2. #define __LINUX_ERSPAN_H
  3. /*
  4. * GRE header for ERSPAN encapsulation (8 octets [34:41]) -- 8 bytes
  5. * 0 1 2 3
  6. * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  7. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8. * |0|0|0|1|0|00000|000000000|00000| Protocol Type for ERSPAN |
  9. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  10. * | Sequence Number (increments per packet per session) |
  11. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  12. *
  13. * Note that in the above GRE header [RFC1701] out of the C, R, K, S,
  14. * s, Recur, Flags, Version fields only S (bit 03) is set to 1. The
  15. * other fields are set to zero, so only a sequence number follows.
  16. *
  17. * ERSPAN Type II header (8 octets [42:49])
  18. * 0 1 2 3
  19. * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  20. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  21. * | Ver | VLAN | COS | En|T| Session ID |
  22. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  23. * | Reserved | Index |
  24. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  25. *
  26. * GRE proto ERSPAN type II = 0x88BE, type III = 0x22EB
  27. */
  28. #define ERSPAN_VERSION 0x1
  29. #define VER_MASK 0xf000
  30. #define VLAN_MASK 0x0fff
  31. #define COS_MASK 0xe000
  32. #define EN_MASK 0x1800
  33. #define T_MASK 0x0400
  34. #define ID_MASK 0x03ff
  35. #define INDEX_MASK 0xfffff
  36. enum erspan_encap_type {
  37. ERSPAN_ENCAP_NOVLAN = 0x0, /* originally without VLAN tag */
  38. ERSPAN_ENCAP_ISL = 0x1, /* originally ISL encapsulated */
  39. ERSPAN_ENCAP_8021Q = 0x2, /* originally 802.1Q encapsulated */
  40. ERSPAN_ENCAP_INFRAME = 0x3, /* VLAN tag perserved in frame */
  41. };
  42. struct erspan_metadata {
  43. __be32 index; /* type II */
  44. };
  45. struct erspanhdr {
  46. __be16 ver_vlan;
  47. #define VER_OFFSET 12
  48. __be16 session_id;
  49. #define COS_OFFSET 13
  50. #define EN_OFFSET 11
  51. #define T_OFFSET 10
  52. struct erspan_metadata md;
  53. };
  54. #endif