GNU Linux-libre 4.14.266-gnu1
[releases.git] / include / net / erspan.h
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