|
| 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 |
0 commit comments