Reorganize source tree to use single autotools instance
[vpp.git] / src / vnet / vxlan-gpe / vxlan_gpe_packet.h
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 _ (0x05, IOAM)
73
74
75 /**
76  * @brief Struct for VXLAN GPE support inner protocol definition.
77  * 1 - IP4
78  * 2 - IP6
79  * 3 - ETHERNET
80  * 4 - NSH
81  * 5 - IOAM
82  */
83 typedef enum {
84 #define _(n,f) VXLAN_GPE_PROTOCOL_##f = n,
85   foreach_vxlan_gpe_protocol
86 #undef _
87   VXLAN_GPE_PROTOCOL_MAX,
88 } vxlan_gpe_protocol_t;
89
90 /**
91  * @brief VXLAN GPE Header definition
92  */
93 typedef struct {
94   u8 flags;
95   /** Version and Reserved */
96   u8 ver_res;
97   /** Reserved */
98   u8 res;
99   /** see vxlan_gpe_protocol_t */
100   u8 protocol;
101   /** VNI and Reserved */
102   u32 vni_res;
103 } vxlan_gpe_header_t;
104
105 #define VXLAN_GPE_FLAGS_I 0x08
106 #define VXLAN_GPE_FLAGS_P 0x04
107 #define VXLAN_GPE_FLAGS_O 0x01
108 #define VXLAN_GPE_VERSION 0x0
109
110 #endif /* included_vxlan_gpe_packet_h */