FD.io VPP
v16.06
Vector Packet Processing
Main Page
Related Pages
Data Structures
Source
Files
Symbols
vxlan.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
#ifndef included_vnet_vxlan_h
16
#define included_vnet_vxlan_h
17
18
#include <
vppinfra/error.h
>
19
#include <
vppinfra/hash.h
>
20
#include <
vnet/vnet.h
>
21
#include <
vnet/ip/ip.h
>
22
#include <
vnet/l2/l2_input.h
>
23
#include <
vnet/l2/l2_bd.h
>
24
#include <
vnet/ethernet/ethernet.h
>
25
#include <
vnet/vxlan/vxlan_packet.h
>
26
#include <
vnet/ip/ip4_packet.h
>
27
#include <
vnet/ip/ip6_packet.h
>
28
#include <
vnet/ip/udp.h
>
29
30
typedef
CLIB_PACKED
(
struct
{
31
ip4_header_t
ip4;
/* 20 bytes */
32
udp_header_t
udp;
/* 8 bytes */
33
vxlan_header_t
vxlan;
/* 8 bytes */
34
}) ip4_vxlan_header_t;
35
36
typedef
CLIB_PACKED
(
struct
{
37
ip6_header_t
ip6;
/* 40 bytes */
38
udp_header_t
udp;
/* 8 bytes */
39
vxlan_header_t
vxlan;
/* 8 bytes */
40
}) ip6_vxlan_header_t;
41
42
typedef
CLIB_PACKED
(
struct
{
43
/*
44
* Key fields: ip src and vxlan vni on incoming VXLAN packet
45
* all fields in NET byte order
46
*/
47
union
{
48
struct
{
49
u32
src;
50
u32
vni;
/* shifted left 8 bits */
51
};
52
u64
as_u64;
53
};
54
}) vxlan4_tunnel_key_t;
55
56
typedef
CLIB_PACKED
(
struct
{
57
/*
58
* Key fields: ip src and vxlan vni on incoming VXLAN packet
59
* all fields in NET byte order
60
*/
61
ip6_address_t
src;
62
u32
vni;
/* shifted left 8 bits */
63
}) vxlan6_tunnel_key_t;
64
65
typedef
struct
{
66
/* Rewrite string. $$$$ embed vnet_rewrite header */
67
u8
*
rewrite
;
68
69
/* tunnel src and dst addresses */
70
ip46_address_t
src
;
71
ip46_address_t
dst
;
72
73
/* vxlan VNI in HOST byte order */
74
u32
vni
;
75
76
/* decap next index */
77
u32
decap_next_index
;
78
79
/* L3 FIB index and L2 BD ID */
80
u16
encap_fib_index
;
/* tunnel partner IP lookup here */
81
82
/* vnet intfc hw/sw_if_index */
83
u16
hw_if_index
;
84
u32
sw_if_index
;
85
86
union
{
/* storage for the hash key */
87
vxlan4_tunnel_key_t *
key4
;
88
vxlan6_tunnel_key_t *
key6
;
89
};
90
91
/* flags */
92
u32
flags
;
93
}
vxlan_tunnel_t
;
94
95
/* Flags for vxlan_tunnel_t.flags */
96
#define VXLAN_TUNNEL_IS_IPV4 1
97
98
#define foreach_vxlan_input_next \
99
_(DROP, "error-drop") \
100
_(L2_INPUT, "l2-input") \
101
_(IP4_INPUT, "ip4-input") \
102
_(IP6_INPUT, "ip6-input")
103
104
typedef
enum
{
105
#define _(s,n) VXLAN_INPUT_NEXT_##s,
106
foreach_vxlan_input_next
107
#undef _
108
VXLAN_INPUT_N_NEXT
,
109
}
vxlan_input_next_t
;
110
111
typedef
enum
{
112
#define vxlan_error(n,s) VXLAN_ERROR_##n,
113
#include <
vnet/vxlan/vxlan_error.def
>
114
#undef vxlan_error
115
VXLAN_N_ERROR
,
116
}
vxlan_input_error_t
;
117
118
typedef
struct
{
119
/* vector of encap tunnel instances */
120
vxlan_tunnel_t
*
tunnels
;
121
122
/* lookup tunnel by key */
123
uword
*
vxlan4_tunnel_by_key
;
/* keyed on ipv4.dst + vni */
124
uword
*
vxlan6_tunnel_by_key
;
/* keyed on ipv6.dst + vni */
125
126
/* Free vlib hw_if_indices */
127
u32
*
free_vxlan_tunnel_hw_if_indices
;
128
129
/* Dummy rewrite for deleted vxlan_tunnels with hw_if_indices as above */
130
u64
dummy4_str [
sizeof
(ip4_vxlan_header_t)/
sizeof
(
u64
) + 2];
131
#define vxlan4_dummy_rewrite ((u8 *) &vxlan_main.dummy4_str[1])
132
133
u64
dummy6_str [
sizeof
(ip6_vxlan_header_t)/
sizeof
(
u64
) + 2];
134
#define vxlan6_dummy_rewrite ((u8 *) &vxlan_main.dummy6_str[1])
135
136
/* Mapping from sw_if_index to tunnel index */
137
u32
*
tunnel_index_by_sw_if_index
;
138
139
/* convenience */
140
vlib_main_t
*
vlib_main
;
141
vnet_main_t
*
vnet_main
;
142
}
vxlan_main_t
;
143
144
vxlan_main_t
vxlan_main
;
145
146
extern
vlib_node_registration_t
vxlan4_input_node
;
147
extern
vlib_node_registration_t
vxlan6_input_node
;
148
extern
vlib_node_registration_t
vxlan_encap_node
;
149
150
u8
*
format_vxlan_encap_trace
(
u8
* s, va_list * args);
151
152
typedef
struct
{
153
u8
is_add
;
154
155
/* we normally use is_ip4, but since this adds to the
156
* structure, this seems less of abreaking change */
157
u8
is_ip6
;
158
ip46_address_t
src
, dst;
159
u32
encap_fib_index
;
160
u32
decap_next_index
;
161
u32
vni
;
162
}
vnet_vxlan_add_del_tunnel_args_t
;
163
164
int
vnet_vxlan_add_del_tunnel
165
(
vnet_vxlan_add_del_tunnel_args_t
*
a
,
u32
* sw_if_indexp);
166
167
#endif
/* included_vnet_vxlan_h */
vnet_vxlan_add_del_tunnel_args_t::src
ip46_address_t src
Definition:
vxlan.h:158
vnet_vxlan_add_del_tunnel_args_t::is_ip6
u8 is_ip6
Definition:
vxlan.h:157
vnet_vxlan_add_del_tunnel_args_t::encap_fib_index
u32 encap_fib_index
Definition:
vxlan.h:159
vnet_vxlan_add_del_tunnel
int vnet_vxlan_add_del_tunnel(vnet_vxlan_add_del_tunnel_args_t *a, u32 *sw_if_indexp)
Definition:
vxlan.c:196
a
a
Definition:
bitmap.h:393
vnet_vxlan_add_del_tunnel_args_t::vni
u32 vni
Definition:
vxlan.h:161
error.h
l2_bd.h
foreach_vxlan_input_next
#define foreach_vxlan_input_next
Definition:
vxlan.h:98
vxlan_error.def
ip6_packet.h
vxlan_tunnel_t::dst
ip46_address_t dst
Definition:
vxlan.h:71
vlib_node_registration_t
struct _vlib_node_registration vlib_node_registration_t
vxlan_encap_node
vlib_node_registration_t vxlan_encap_node
(constructor) VLIB_REGISTER_NODE (vxlan_encap_node)
Definition:
encap.c:571
vxlan4_input_node
vlib_node_registration_t vxlan4_input_node
(constructor) VLIB_REGISTER_NODE (vxlan4_input_node)
Definition:
decap.c:532
vxlan_tunnel_t::key6
vxlan6_tunnel_key_t * key6
Definition:
vxlan.h:88
ip.h
udp_header_t
Definition:
udp_packet.h:43
hash.h
vxlan_tunnel_t
Definition:
vxlan.h:65
vnet_vxlan_add_del_tunnel_args_t::is_add
u8 is_add
Definition:
vxlan.h:153
format_vxlan_encap_trace
u8 * format_vxlan_encap_trace(u8 *s, va_list *args)
Definition:
encap.c:52
l2_input.h
vxlan_main_t::vnet_main
vnet_main_t * vnet_main
Definition:
vxlan.h:141
vnet_vxlan_add_del_tunnel_args_t
Definition:
vxlan.h:152
vxlan_main_t::vlib_main
vlib_main_t * vlib_main
Definition:
vxlan.h:140
u64
unsigned long u64
Definition:
types.h:89
ethernet.h
vxlan_tunnel_t::rewrite
u8 * rewrite
Definition:
vxlan.h:67
ip4_packet.h
vxlan6_input_node
vlib_node_registration_t vxlan6_input_node
(constructor) VLIB_REGISTER_NODE (vxlan6_input_node)
Definition:
decap.c:553
vxlan_main_t::vxlan4_tunnel_by_key
uword * vxlan4_tunnel_by_key
Definition:
vxlan.h:123
vxlan_tunnel_t::vni
u32 vni
Definition:
vxlan.h:74
vnet.h
vxlan_tunnel_t::encap_fib_index
u16 encap_fib_index
Definition:
vxlan.h:80
vxlan_header_t
Definition:
vxlan_packet.h:44
vxlan_tunnel_t::decap_next_index
u32 decap_next_index
Definition:
vxlan.h:77
vnet_main_t
Definition:
vnet.h:58
vxlan_input_next_t
vxlan_input_next_t
Definition:
vxlan.h:104
u32
unsigned int u32
Definition:
types.h:88
ip6_header_t
Definition:
ip6_packet.h:278
vxlan_packet.h
vxlan_main_t::vxlan6_tunnel_by_key
uword * vxlan6_tunnel_by_key
Definition:
vxlan.h:124
vxlan_tunnel_t::sw_if_index
u32 sw_if_index
Definition:
vxlan.h:84
uword
u64 uword
Definition:
types.h:112
u16
unsigned short u16
Definition:
types.h:57
u8
unsigned char u8
Definition:
types.h:56
vxlan_tunnel_t::hw_if_index
u16 hw_if_index
Definition:
vxlan.h:83
vxlan_tunnel_t::flags
u32 flags
Definition:
vxlan.h:92
vlib_main_t
Definition:
main.h:59
vxlan_main_t
Definition:
vxlan.h:118
VXLAN_INPUT_N_NEXT
Definition:
vxlan.h:108
vnet_vxlan_add_del_tunnel_args_t::decap_next_index
u32 decap_next_index
Definition:
vxlan.h:160
vxlan_main_t::tunnel_index_by_sw_if_index
u32 * tunnel_index_by_sw_if_index
Definition:
vxlan.h:137
CLIB_PACKED
typedef CLIB_PACKED(struct{ip4_header_t ip4;udp_header_t udp;vxlan_header_t vxlan;}) ip4_vxlan_header_t
vxlan_tunnel_t::key4
vxlan4_tunnel_key_t * key4
Definition:
vxlan.h:87
VXLAN_N_ERROR
Definition:
vxlan.h:115
vxlan_input_error_t
vxlan_input_error_t
Definition:
vxlan.h:111
ip4_header_t
Definition:
ip4_packet.h:104
udp.h
vxlan_main_t::tunnels
vxlan_tunnel_t * tunnels
Definition:
vxlan.h:120
vxlan_main_t::free_vxlan_tunnel_hw_if_indices
u32 * free_vxlan_tunnel_hw_if_indices
Definition:
vxlan.h:127
ip6_address_t
Definition:
ip6_packet.h:46
vxlan_tunnel_t::src
ip46_address_t src
Definition:
vxlan.h:70
vxlan_main
vxlan_main_t vxlan_main
Definition:
vxlan.h:144
vnet
vnet
vxlan
vxlan.h
Generated on Thu Sep 1 2016 09:11:49 for FD.io VPP by
1.8.11