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