FD.io VPP
v21.10.1-2-g0a485f517
Vector Packet Processing
Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
b
d
e
f
g
i
l
m
n
o
p
r
s
t
v
w
Functions
d
f
g
l
m
n
o
p
t
v
Variables
Typedefs
Enumerations
Enumerator
Data Structures
Data Structures
Data Structure Index
Class Hierarchy
Data Fields
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
z
~
Variables
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
c
e
g
h
k
m
n
o
r
s
Related Functions
c
d
e
h
i
m
o
p
r
s
v
Source
Files
Symbols
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Functions
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Variables
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Typedefs
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Enumerations
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
v
w
x
Enumerator
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
Macros
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
snap.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
* snap.h: SNAP definitions
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_snap_h
41
#define included_snap_h
42
43
#include <
vnet/vnet.h
>
44
45
#define foreach_ieee_oui \
46
_ (0x000000, ethernet) \
47
_ (0x00000c, cisco)
48
49
typedef
enum
50
{
51
#define _(n,f) IEEE_OUI_##f = n,
52
foreach_ieee_oui
53
#undef _
54
}
ieee_oui_t
;
55
56
#define foreach_snap_cisco_protocol \
57
_ (0x0102, drip) \
58
_ (0x0104, port_aggregation_protocol) \
59
_ (0x0105, mls_hello) \
60
_ (0x010b, per_vlan_spanning_tree) \
61
_ (0x010c, vlan_bridge) \
62
_ (0x0111, unidirectional_link_detection) \
63
_ (0x2000, cdp) \
64
_ (0x2001, cgmp) \
65
_ (0x2003, vtp) \
66
_ (0x2004, dtp) \
67
_ (0x200a, stp_uplink_fast)
68
69
typedef
enum
70
{
71
#define _(n,f) SNAP_cisco_##f = n,
72
foreach_snap_cisco_protocol
73
#undef _
74
}
snap_cisco_protocol_t
;
75
76
typedef
union
77
{
78
/* *INDENT-OFF* */
79
CLIB_PACKED
(
struct
{
80
/* OUI: organization unique identifier. */
81
u8
oui[3];
82
83
/* Per-OUI protocol. */
84
u16
protocol
;
85
});
86
/* *INDENT-ON* */
87
88
u8
as_u8[5];
89
}
snap_header_t
;
90
91
typedef
struct
92
{
93
u32
oui
;
94
u32
protocol
;
95
}
snap_oui_and_protocol_t
;
96
97
typedef
struct
98
{
99
/* Name vector string. */
100
u8
*
name
;
101
102
snap_oui_and_protocol_t
oui_and_protocol
;
103
104
/* Node which handles this type. */
105
u32
node_index
;
106
107
/* snap-input next index for this type. */
108
u32
next_index
;
109
}
snap_protocol_info_t
;
110
111
always_inline
void
112
snap_header_set_protocol
(
snap_header_t
*
h
,
snap_oui_and_protocol_t
* p)
113
{
114
u16
protocol
= p->
protocol
;
115
u32
oui = p->
oui
;
116
h
->protocol = clib_host_to_net_u16 (
protocol
);
117
h
->oui[0] = (oui >> 16) & 0xff;
118
h
->oui[1] = (oui >> 8) & 0xff;
119
h
->oui[2] = (oui >> 0) & 0xff;
120
}
121
122
#define foreach_snap_error \
123
_ (NONE, "no error") \
124
_ (UNKNOWN_PROTOCOL, "unknown oui/snap protocol")
125
126
typedef
enum
127
{
128
#define _(f,s) SNAP_ERROR_##f,
129
foreach_snap_error
130
#undef _
131
SNAP_N_ERROR
,
132
}
snap_error_t
;
133
134
typedef
struct
135
{
136
vlib_main_t
*
vlib_main
;
137
138
/* Vector of known SNAP oui/protocol pairs. */
139
snap_protocol_info_t
*
protocols
;
140
141
/* Hash table mapping oui/protocol to protocol index. */
142
mhash_t
protocol_hash
;
143
144
/* Hash table mapping protocol by name. */
145
uword
*
protocol_info_by_name
;
146
}
snap_main_t
;
147
148
always_inline
u32
149
snap_header_get_oui
(
snap_header_t
*
h
)
150
{
151
return
(
h
->oui[0] << 16) | (
h
->oui[1] << 8) |
h
->oui[2];
152
}
153
154
always_inline
snap_protocol_info_t
*
155
snap_get_protocol_info
(
snap_main_t
* sm,
snap_header_t
*
h
)
156
{
157
snap_oui_and_protocol_t
key
;
158
uword
*p;
159
160
key
.oui =
snap_header_get_oui
(
h
);
161
key
.protocol =
h
->protocol;
162
163
p =
mhash_get
(&sm->
protocol_hash
, &
key
);
164
return
p ?
vec_elt_at_index
(sm->
protocols
, p[0]) : 0;
165
}
166
167
extern
snap_main_t
snap_main
;
168
169
/* Register given node index to take input for given snap type. */
170
void
171
snap_register_input_protocol
(
vlib_main_t
*
vm
,
172
char
*
name
,
173
u32
ieee_oui,
u16
protocol
,
u32
node_index
);
174
175
format_function_t
format_snap_protocol
;
176
format_function_t
format_snap_header
;
177
format_function_t
format_snap_header_with_length
;
178
179
/* Parse snap protocol as 0xXXXX or protocol name. */
180
unformat_function_t
unformat_snap_protocol
;
181
182
/* Parse snap header. */
183
unformat_function_t
unformat_snap_header
;
184
unformat_function_t
unformat_pg_snap_header
;
185
186
#endif
/* included_snap_h */
187
188
/*
189
* fd.io coding-style-patch-verification: ON
190
*
191
* Local Variables:
192
* eval: (c-set-style "gnu")
193
* End:
194
*/
snap_main_t::protocol_hash
mhash_t protocol_hash
Definition:
snap.h:142
snap_header_get_oui
static u32 snap_header_get_oui(snap_header_t *h)
Definition:
snap.h:149
format_snap_protocol
format_function_t format_snap_protocol
Definition:
snap.h:175
snap_header_t
Definition:
snap.h:76
foreach_ieee_oui
#define foreach_ieee_oui
Definition:
snap.h:45
snap_oui_and_protocol_t::protocol
u32 protocol
Definition:
snap.h:94
name
string name[64]
Definition:
fib.api:25
mhash_t
Definition:
mhash.h:46
u16
unsigned short u16
Definition:
types.h:57
mhash_get
static uword * mhash_get(mhash_t *h, const void *key)
Definition:
mhash.h:110
unformat_snap_protocol
unformat_function_t unformat_snap_protocol
Definition:
snap.h:180
vm
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
Definition:
nat44_ei.c:3047
node_index
node node_index
Definition:
interface_output.c:440
unformat_pg_snap_header
unformat_function_t unformat_pg_snap_header
Definition:
snap.h:184
snap_oui_and_protocol_t
Definition:
snap.h:91
h
h
Definition:
flowhash_template.h:372
key
typedef key
Definition:
ipsec_types.api:91
snap_protocol_info_t::name
u8 * name
Definition:
snap.h:100
snap_cisco_protocol_t
snap_cisco_protocol_t
Definition:
snap.h:69
snap_main_t::vlib_main
vlib_main_t * vlib_main
Definition:
snap.h:136
snap_protocol_info_t::oui_and_protocol
snap_oui_and_protocol_t oui_and_protocol
Definition:
snap.h:102
format_snap_header
format_function_t format_snap_header
Definition:
snap.h:176
vec_elt_at_index
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
Definition:
vec_bootstrap.h:203
uword
u64 uword
Definition:
types.h:112
unformat_snap_header
unformat_function_t unformat_snap_header
Definition:
snap.h:183
snap_register_input_protocol
void snap_register_input_protocol(vlib_main_t *vm, char *name, u32 ieee_oui, u16 protocol, u32 node_index)
Definition:
node.c:317
snap_main_t::protocol_info_by_name
uword * protocol_info_by_name
Definition:
snap.h:145
format_function_t
u8 *() format_function_t(u8 *s, va_list *args)
Definition:
format.h:48
always_inline
#define always_inline
Definition:
rdma_mlx5dv.h:23
snap_header_set_protocol
static void snap_header_set_protocol(snap_header_t *h, snap_oui_and_protocol_t *p)
Definition:
snap.h:112
snap_oui_and_protocol_t::oui
u32 oui
Definition:
snap.h:93
snap_main_t
Definition:
snap.h:134
SNAP_N_ERROR
@ SNAP_N_ERROR
Definition:
snap.h:131
snap_protocol_info_t
Definition:
snap.h:97
u32
unsigned int u32
Definition:
types.h:88
snap_protocol_info_t::node_index
u32 node_index
Definition:
snap.h:105
protocol
vl_api_ip_proto_t protocol
Definition:
lb_types.api:72
foreach_snap_cisco_protocol
#define foreach_snap_cisco_protocol
Definition:
snap.h:56
unformat_function_t
uword() unformat_function_t(unformat_input_t *input, va_list *args)
Definition:
format.h:225
snap_error_t
snap_error_t
Definition:
snap.h:126
vlib_main_t
Definition:
main.h:102
foreach_snap_error
#define foreach_snap_error
Definition:
snap.h:122
u8
unsigned char u8
Definition:
types.h:56
CLIB_PACKED
#define CLIB_PACKED(x)
Definition:
clib.h:89
format_snap_header_with_length
format_function_t format_snap_header_with_length
Definition:
snap.h:177
snap_get_protocol_info
static snap_protocol_info_t * snap_get_protocol_info(snap_main_t *sm, snap_header_t *h)
Definition:
snap.h:155
snap_protocol_info_t::next_index
u32 next_index
Definition:
snap.h:108
ieee_oui_t
ieee_oui_t
Definition:
snap.h:49
vnet.h
snap_main
snap_main_t snap_main
Definition:
snap.c:45
snap_main_t::protocols
snap_protocol_info_t * protocols
Definition:
snap.h:139
src
vnet
snap
snap.h
Generated on Sat Jan 8 2022 10:36:57 for FD.io VPP by
1.8.17