FD.io VPP  v16.09
Vector Packet Processing
vxlan_gpe_packet.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 /**
16  * @file
17  * @brief VXLAN GPE packet header structure
18  *
19 */
20 #ifndef included_vxlan_gpe_packet_h
21 #define included_vxlan_gpe_packet_h
22 
23 /**
24  * From draft-quinn-vxlan-gpe-03.txt
25  *
26  * 0 1 2 3
27  * 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
28  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
29  * |R|R|R|R|I|P|R|O|Ver| Reserved |Next Protocol |
30  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
31  * | VXLAN Network Identifier (VNI) | Reserved |
32  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
33  *
34  * I Bit: Flag bit 4 indicates that the VNI is valid.
35  *
36  * P Bit: Flag bit 5 is defined as the Next Protocol bit. The P bit
37  * MUST be set to 1 to indicate the presence of the 8 bit next
38  * protocol field.
39  *
40  * O Bit: Flag bit 7 is defined as the O bit. When the O bit is set to 1,
41  *
42  * the packet is an OAM packet and OAM processing MUST occur. The OAM
43  * protocol details are out of scope for this document. As with the
44  * P-bit, bit 7 is currently a reserved flag in VXLAN.
45  *
46  * VXLAN-gpe bits 8 and 9 are defined as version bits. These bits are
47  * reserved in VXLAN. The version field is used to ensure backward
48  * compatibility going forward with future VXLAN-gpe updates.
49  *
50  * The initial version for VXLAN-gpe is 0.
51  *
52  * This draft defines the following Next Protocol values:
53  *
54  * 0x1 : IPv4
55  * 0x2 : IPv6
56  * 0x3 : Ethernet
57  * 0x4 : Network Service Header [NSH]
58  */
59 
60 /**
61  * @brief VXLAN GPE support inner protocol definition.
62  * 1 - IP4
63  * 2 - IP6
64  * 3 - ETHERNET
65  * 4 - NSH
66  */
67 #define foreach_vxlan_gpe_protocol \
68 _ (0x01, IP4) \
69 _ (0x02, IP6) \
70 _ (0x03, ETHERNET) \
71 _ (0x04, NSH)
72 
73 
74 /**
75  * @brief Struct for VXLAN GPE support inner protocol definition.
76  * 1 - IP4
77  * 2 - IP6
78  * 3 - ETHERNET
79  * 4 - NSH
80  */
81 typedef enum {
82 #define _(n,f) VXLAN_GPE_PROTOCOL_##f = n,
84 #undef _
86 
87 /**
88  * @brief VXLAN GPE Header definition
89  */
90 typedef struct {
92  /** Version and Reserved */
94  /** Reserved */
96  /** see vxlan_gpe_protocol_t */
98  /** VNI and Reserved */
101 
102 #define VXLAN_GPE_FLAGS_I 0x08
103 #define VXLAN_GPE_FLAGS_P 0x04
104 #define VXLAN_GPE_FLAGS_O 0x01
105 #define VXLAN_GPE_VERSION 0x0
106 
107 #endif /* included_vxlan_gpe_packet_h */
u8 ver_res
Version and Reserved.
#define foreach_vxlan_gpe_protocol
From draft-quinn-vxlan-gpe-03.txt.
u8 protocol
see vxlan_gpe_protocol_t
unsigned int u32
Definition: types.h:88
unsigned char u8
Definition: types.h:56
VXLAN GPE Header definition.
vxlan_gpe_protocol_t
Struct for VXLAN GPE support inner protocol definition.
u32 vni_res
VNI and Reserved.