FD.io VPP
v17.10-9-gd594711
Vector Packet Processing
Main Page
Related Pages
Modules
Data Structures
Source
Files
Symbols
buffer.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
* vnet/buffer.h: vnet buffer flags
17
*
18
* Copyright (c) 2008 Eliot Dresselhaus
19
*
20
* Permission is hereby granted, free of charge, to any person obtaining
21
* a copy of this software and associated documentation files (the
22
* "Software"), to deal in the Software without restriction, including
23
* without limitation the rights to use, copy, modify, merge, publish,
24
* distribute, sublicense, and/or sell copies of the Software, and to
25
* permit persons to whom the Software is furnished to do so, subject to
26
* the following conditions:
27
*
28
* The above copyright notice and this permission notice shall be
29
* included in all copies or substantial portions of the Software.
30
*
31
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
34
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
35
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
36
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
37
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38
*/
39
40
#ifndef included_vnet_buffer_h
41
#define included_vnet_buffer_h
42
43
#include <
vlib/vlib.h
>
44
45
#define foreach_vnet_buffer_field \
46
_( 1, L4_CHECKSUM_COMPUTED) \
47
_( 2, L4_CHECKSUM_CORRECT) \
48
_( 3, VLAN_2_DEEP) \
49
_( 4, VLAN_1_DEEP) \
50
_( 8, SPAN_CLONE) \
51
_( 6, HANDOFF_NEXT_VALID) \
52
_( 7, LOCALLY_ORIGINATED) \
53
_( 8, IS_IP4) \
54
_( 9, IS_IP6) \
55
_(10, OFFLOAD_IP_CKSUM) \
56
_(11, OFFLOAD_TCP_CKSUM) \
57
_(12, OFFLOAD_UDP_CKSUM)
58
59
#define VNET_BUFFER_FLAGS_VLAN_BITS \
60
(VNET_BUFFER_F_VLAN_1_DEEP | VNET_BUFFER_F_VLAN_2_DEEP)
61
62
enum
63
{
64
#define _(bit, name) VNET_BUFFER_F_##name = (1 << LOG2_VLIB_BUFFER_FLAG_USER(bit)),
65
foreach_vnet_buffer_field
66
#undef _
67
};
68
69
enum
70
{
71
#define _(bit, name) VNET_BUFFER_F_LOG2_##name = LOG2_VLIB_BUFFER_FLAG_USER(bit),
72
foreach_vnet_buffer_field
73
#undef _
74
};
75
76
77
#define foreach_buffer_opaque_union_subtype \
78
_(ip) \
79
_(swt) \
80
_(l2) \
81
_(l2t) \
82
_(gre) \
83
_(l2_classify) \
84
_(handoff) \
85
_(policer) \
86
_(ipsec) \
87
_(map) \
88
_(map_t) \
89
_(ip_frag) \
90
_(tcp)
91
92
/*
93
* vnet stack buffer opaque array overlay structure.
94
* The vnet_buffer_opaque_t *must* be the same size as the
95
* vlib_buffer_t "opaque" structure member, 32 bytes.
96
*
97
* When adding a union type, please add a stanza to
98
* foreach_buffer_opaque_union_subtype (directly above).
99
* Code in vnet_interface_init(...) verifies the size
100
* of the union, and will announce any deviations in an
101
* impossible-to-miss manner.
102
*/
103
typedef
struct
104
{
105
u32
sw_if_index[
VLIB_N_RX_TX
];
106
i16
l2_hdr_offset
;
107
i16
l3_hdr_offset
;
108
i16
l4_hdr_offset
;
109
110
union
111
{
112
/* IP4/6 buffer opaque. */
113
struct
114
{
115
/* Adjacency from destination IP address lookup [VLIB_TX].
116
Adjacency from source IP address lookup [VLIB_RX].
117
This gets set to ~0 until source lookup is performed. */
118
u32
adj_index[
VLIB_N_RX_TX
];
119
120
union
121
{
122
struct
123
{
124
/* Flow hash value for this packet computed from IP src/dst address
125
protocol and ports. */
126
u32
flow_hash
;
127
128
/* next protocol */
129
u32
save_protocol
;
130
131
/* Rewrite length */
132
u32
save_rewrite_length
;
133
134
/* MFIB RPF ID */
135
u32
rpf_id
;
136
};
137
138
/* ICMP */
139
struct
140
{
141
u8
type
;
142
u8
code
;
143
u32
data
;
144
} icmp;
145
};
146
147
} ip;
148
149
/*
150
* MPLS:
151
* data copied from the MPLS header that was popped from the packet
152
* during the look-up.
153
*/
154
struct
155
{
156
u8
ttl
;
157
u8
exp
;
158
u8
first
;
159
} mpls;
160
161
/* ip4-in-ip6 softwire termination, only valid there */
162
struct
163
{
164
u8
swt_disable
;
165
u32
mapping_index
;
166
} swt;
167
168
/* l2 bridging path, only valid there */
169
struct
opaque_l2
170
{
171
u32
feature_bitmap
;
172
u16
bd_index
;
/* bridge-domain index */
173
u8
l2_len
;
/* ethernet header length */
174
u8
shg
;
/* split-horizon group */
175
u16
l2fib_sn
;
/* l2fib bd/int seq_num */
176
u8
bd_age
;
/* aging enabled */
177
} l2;
178
179
/* l2tpv3 softwire encap, only valid there */
180
struct
181
{
182
u32
pad
[4];
/* do not overlay w/ ip.adj_index[0,1] */
183
u8
next_index
;
184
u32
session_index
;
185
} l2t;
186
187
struct
188
{
189
u32
src
, dst;
190
} gre;
191
192
/* L2 classify */
193
struct
194
{
195
struct
opaque_l2
pad
;
196
union
197
{
198
u32
table_index
;
199
u32
opaque_index
;
200
};
201
u64
hash
;
202
} l2_classify;
203
204
/* IO - worker thread handoff */
205
struct
206
{
207
u32
next_index
;
208
} handoff;
209
210
/* vnet policer */
211
struct
212
{
213
u32
pad
[8 -
VLIB_N_RX_TX
- 1];
/* to end of opaque */
214
u32
index
;
215
} policer;
216
217
/* interface output features */
218
struct
219
{
220
u32
flags
;
221
u32
sad_index
;
222
} ipsec;
223
224
/* MAP */
225
struct
226
{
227
u16
mtu
;
228
} map;
229
230
/* MAP-T */
231
struct
232
{
233
u32
map_domain_index
;
234
struct
235
{
236
u32
saddr
, daddr;
237
u16
frag_offset
;
//Fragmentation header offset
238
u16
l4_offset
;
//L4 header overall offset
239
u8
l4_protocol
;
//The final protocol number
240
} v6;
//Used by ip6_map_t only
241
u16
checksum_offset
;
//L4 checksum overall offset
242
u16
mtu;
//Exit MTU
243
} map_t;
244
245
/* IP Fragmentation */
246
struct
247
{
248
u16
header_offset
;
249
u16
mtu;
250
u8
next_index;
251
u8
flags
;
//See ip_frag.h
252
} ip_frag;
253
254
/* COP - configurable junk filter(s) */
255
struct
256
{
257
/* Current configuration index. */
258
u32
current_config_index
;
259
} cop;
260
261
/* LISP */
262
struct
263
{
264
/* overlay address family */
265
u16
overlay_afi
;
266
} lisp;
267
268
/* Driver rx feature */
269
struct
270
{
271
u32
saved_next_index
;
/**< saved by drivers for short-cut */
272
u16
buffer_advance
;
273
} device_input_feat;
274
275
/* TCP */
276
struct
277
{
278
u32
connection_index
;
279
u32
seq_number
;
280
u32
seq_end
;
281
u32
ack_number
;
282
u16
hdr_offset
;
/**< offset relative to ip hdr */
283
u16
data_offset
;
/**< offset relative to ip hdr */
284
u16
data_len
;
/**< data len */
285
u8
flags
;
286
} tcp;
287
288
/* SNAT */
289
struct
290
{
291
u32
flags
;
292
} snat;
293
294
u32
unused[6];
295
};
296
}
vnet_buffer_opaque_t
;
297
298
/*
299
* The opaque field of the vlib_buffer_t is intepreted as a
300
* vnet_buffer_opaque_t. Hence it should be big enough to accommodate one.
301
*/
302
STATIC_ASSERT
(
sizeof
(
vnet_buffer_opaque_t
) <=
303
STRUCT_SIZE_OF
(
vlib_buffer_t
, opaque),
304
"VNET buffer meta-data too large for vlib_buffer"
);
305
306
#define vnet_buffer(b) ((vnet_buffer_opaque_t *) (b)->opaque)
307
308
/* Full cache line (64 bytes) of additional space */
309
typedef
struct
310
{
311
union
312
{
313
};
314
}
vnet_buffer_opaque2_t
;
315
316
317
318
#endif
/* included_vnet_buffer_h */
319
320
/*
321
* fd.io coding-style-patch-verification: ON
322
*
323
* Local Variables:
324
* eval: (c-set-style "gnu")
325
* End:
326
*/
vnet_buffer_opaque_t::header_offset
u16 header_offset
Definition:
buffer.h:248
vnet_buffer_opaque_t::connection_index
u32 connection_index
Definition:
buffer.h:278
pad
u8 pad[3]
log2 (size of the packing page block)
Definition:
bihash_doc.h:61
vnet_buffer_opaque_t::l2fib_sn
u16 l2fib_sn
Definition:
buffer.h:175
vnet_buffer_opaque_t::shg
u8 shg
Definition:
buffer.h:174
vnet_buffer_opaque_t::checksum_offset
u16 checksum_offset
Definition:
buffer.h:241
vnet_buffer_opaque_t::current_config_index
u32 current_config_index
Definition:
buffer.h:258
vnet_buffer_opaque_t::ack_number
u32 ack_number
Definition:
buffer.h:281
foreach_vnet_buffer_field
#define foreach_vnet_buffer_field
Definition:
buffer.h:45
vnet_buffer_opaque_t::saved_next_index
u32 saved_next_index
saved by drivers for short-cut
Definition:
buffer.h:271
vnet_buffer_opaque_t::opaque_index
u32 opaque_index
Definition:
buffer.h:199
vnet_buffer_opaque_t::session_index
u32 session_index
Definition:
buffer.h:184
vnet_buffer_opaque_t::bd_index
u16 bd_index
Definition:
buffer.h:172
vnet_buffer_opaque_t::flags
u8 flags
Definition:
buffer.h:251
vnet_buffer_opaque_t::data_offset
u16 data_offset
offset relative to ip hdr
Definition:
buffer.h:283
STATIC_ASSERT
STATIC_ASSERT(sizeof(vnet_buffer_opaque_t)<=STRUCT_SIZE_OF(vlib_buffer_t, opaque),"VNET buffer meta-data too large for vlib_buffer")
vnet_buffer_opaque_t::mtu
u16 mtu
Definition:
buffer.h:227
vnet_buffer_opaque_t::rpf_id
u32 rpf_id
Definition:
buffer.h:135
vnet_buffer_opaque_t::next_index
u8 next_index
Definition:
buffer.h:183
vnet_buffer_opaque_t::l3_hdr_offset
i16 l3_hdr_offset
Definition:
buffer.h:107
vnet_buffer_opaque_t::l2_len
u8 l2_len
Definition:
buffer.h:173
vnet_buffer_opaque_t::l2_hdr_offset
i16 l2_hdr_offset
Definition:
buffer.h:106
vnet_buffer_opaque_t::flags
u32 flags
Definition:
buffer.h:220
vnet_buffer_opaque_t::code
u8 code
Definition:
buffer.h:142
vnet_buffer_opaque_t::saddr
u32 saddr
Definition:
buffer.h:236
vnet_buffer_opaque_t::feature_bitmap
u32 feature_bitmap
Definition:
buffer.h:171
vnet_buffer_opaque_t::overlay_afi
u16 overlay_afi
Definition:
buffer.h:265
u64
unsigned long u64
Definition:
types.h:89
VLIB_N_RX_TX
Definition:
defs.h:48
vnet_buffer_opaque_t::seq_end
u32 seq_end
Definition:
buffer.h:280
vnet_buffer_opaque_t::l4_protocol
u8 l4_protocol
Definition:
buffer.h:239
vnet_buffer_opaque_t::seq_number
u32 seq_number
Definition:
buffer.h:279
vnet_buffer_opaque_t::save_rewrite_length
u32 save_rewrite_length
Definition:
buffer.h:132
vnet_buffer_opaque_t::hash
u64 hash
Definition:
buffer.h:201
vnet_buffer_opaque_t::table_index
u32 table_index
Definition:
buffer.h:198
vnet_buffer_opaque_t::src
u32 src
Definition:
buffer.h:189
vnet_buffer_opaque_t::frag_offset
u16 frag_offset
Definition:
buffer.h:237
vnet_buffer_opaque_t::mapping_index
u32 mapping_index
Definition:
buffer.h:165
vnet_buffer_opaque_t::l4_offset
u16 l4_offset
Definition:
buffer.h:238
vlib_buffer_t
Definition:
buffer.h:62
vnet_buffer_opaque_t::index
u32 index
Definition:
buffer.h:214
vlib.h
vnet_buffer_opaque_t::buffer_advance
u16 buffer_advance
Definition:
buffer.h:272
u32
unsigned int u32
Definition:
types.h:88
vnet_buffer_opaque_t::data
u32 data
Definition:
buffer.h:143
vnet_buffer_opaque_t::save_protocol
u32 save_protocol
Definition:
buffer.h:129
vnet_buffer_opaque_t::next_index
u32 next_index
Definition:
buffer.h:207
vnet_buffer_opaque_t::swt_disable
u8 swt_disable
Definition:
buffer.h:164
vnet_buffer_opaque_t::bd_age
u8 bd_age
Definition:
buffer.h:176
u16
unsigned short u16
Definition:
types.h:57
vnet_buffer_opaque_t::sad_index
u32 sad_index
Definition:
buffer.h:221
vnet_buffer_opaque2_t
Definition:
buffer.h:309
u8
unsigned char u8
Definition:
types.h:56
vnet_buffer_opaque_t::hdr_offset
u16 hdr_offset
offset relative to ip hdr
Definition:
buffer.h:282
vnet_buffer_opaque_t::exp
u8 exp
Definition:
buffer.h:157
vnet_buffer_opaque_t::ttl
u8 ttl
Definition:
buffer.h:156
i16
short i16
Definition:
types.h:46
vnet_buffer_opaque_t::type
u8 type
Definition:
buffer.h:141
STRUCT_SIZE_OF
#define STRUCT_SIZE_OF(t, f)
Definition:
clib.h:64
vnet_buffer_opaque_t::flow_hash
u32 flow_hash
Definition:
buffer.h:126
flags
u32 flags
Definition:
vhost-user.h:77
vnet_buffer_opaque_t
Definition:
buffer.h:103
vnet_buffer_opaque_t::l4_hdr_offset
i16 l4_hdr_offset
Definition:
buffer.h:108
vnet_buffer_opaque_t::data_len
u16 data_len
data len
Definition:
buffer.h:284
vnet_buffer_opaque_t::map_domain_index
u32 map_domain_index
Definition:
buffer.h:233
vnet_buffer_opaque_t::first
u8 first
Definition:
buffer.h:158
src
vnet
buffer.h
Generated on Tue Nov 14 2017 05:38:04 for FD.io VPP by
1.8.11