FD.io VPP
v21.06-3-gbb25fbf28
Vector Packet Processing
l2_rw.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
/*
17
* l2_rw is based on vnet classifier and provides a way
18
* to modify packets matching a given table.
19
*
20
* Tables must be created using vnet's classify features.
21
* Entries contained within these tables must have their
22
* opaque index set to the rewrite entry created with l2_rw_mod_entry.
23
*/
24
25
#ifndef L2_RW_H_
26
#define L2_RW_H_
27
28
#include <
vnet/l2/l2_input.h
>
29
30
/* *INDENT-OFF* */
31
typedef
CLIB_PACKED
(
struct
_l2_rw_entry {
32
u16
skip_n_vectors;
33
u16
rewrite_n_vectors;
34
u64
hit_count;
35
u32x4
*
mask
;
36
u32x4
*
value
;
37
}) l2_rw_entry_t;
38
/* *INDENT-ON* */
39
40
/* l2_rw configuration for one interface */
41
/* *INDENT-OFF* */
42
typedef
CLIB_PACKED
(
struct
_l2_rw_config {
43
u32
table_index;
/* Which classify table to use */
44
u32
miss_index;
/* Rewrite entry to use if table does not match */
45
}) l2_rw_config_t;
46
/* *INDENT-ON* */
47
48
typedef
struct
49
{
50
/* Next feature node indexes */
51
u32
feat_next_node_index[32];
52
53
/* A pool of entries */
54
l2_rw_entry_t *
entries
;
55
56
/* Config vector indexed by sw_if_index */
57
l2_rw_config_t *
configs
;
58
uword
*
configs_bitmap
;
59
}
l2_rw_main_t
;
60
61
extern
l2_rw_main_t
l2_rw_main
;
62
63
/*
64
* Specifies which classify table and miss_index should be used
65
* with the given interface.
66
* Use special values ~0 in order to un-set table_index
67
* or miss_index.
68
* l2_rw feature is automatically enabled for the interface
69
* when table_index or miss_index is not ~0.
70
* returns 0 on success and something else on error.
71
*/
72
int
l2_rw_interface_set_table
(
u32
sw_if_index
,
73
u32
table_index,
u32
miss_index);
74
75
/*
76
* Creates, modifies or delete a rewrite entry.
77
* If *index != ~0, modifies an existing entry (or simply
78
* deletes it if is_del is set).
79
* If *index == ~0, creates a new entry and the created
80
* entry index is stored in *index (Does nothing if is_del
81
* is set).
82
* returns 0 on success and something else on error.
83
*/
84
int
l2_rw_mod_entry
(
u32
*
index
,
85
u8
*
mask
,
u8
*
value
,
u32
len
,
u32
skip,
u8
is_del);
86
87
extern
vlib_node_registration_t
l2_rw_node
;
88
89
#endif
/* L2_FW_H_ */
90
91
/*
92
* fd.io coding-style-patch-verification: ON
93
*
94
* Local Variables:
95
* eval: (c-set-style "gnu")
96
* End:
97
*/
l2_rw_main_t::configs_bitmap
uword * configs_bitmap
Definition:
l2_rw.h:58
u16
unsigned short u16
Definition:
types.h:57
l2_rw_main_t
Definition:
l2_rw.h:48
l2_rw_node
vlib_node_registration_t l2_rw_node
(constructor) VLIB_REGISTER_NODE (l2_rw_node)
Definition:
l2_rw.c:647
len
u8 len
Definition:
ip_types.api:103
uword
u64 uword
Definition:
types.h:112
l2_rw_main_t::entries
l2_rw_entry_t * entries
Definition:
l2_rw.h:54
mask
vl_api_pnat_mask_t mask
Definition:
pnat.api:45
l2_rw_interface_set_table
int l2_rw_interface_set_table(u32 sw_if_index, u32 table_index, u32 miss_index)
Definition:
l2_rw.c:415
vlib_node_registration_t
struct _vlib_node_registration vlib_node_registration_t
l2_input.h
l2_rw_main
l2_rw_main_t l2_rw_main
Definition:
l2_rw.c:31
index
u32 index
Definition:
flow_types.api:221
u64
unsigned long u64
Definition:
types.h:89
u32
unsigned int u32
Definition:
types.h:88
l2_rw_main_t::configs
l2_rw_config_t * configs
Definition:
l2_rw.h:57
u32x4
unsigned long long u32x4
Definition:
ixge.c:28
value
u8 value
Definition:
qos.api:54
u8
unsigned char u8
Definition:
types.h:56
sw_if_index
vl_api_interface_index_t sw_if_index
Definition:
wireguard.api:34
l2_rw_mod_entry
int l2_rw_mod_entry(u32 *index, u8 *mask, u8 *value, u32 len, u32 skip, u8 is_del)
Definition:
l2_rw.c:310
CLIB_PACKED
typedef CLIB_PACKED(struct _l2_rw_entry { u16 skip_n_vectors;u16 rewrite_n_vectors;u64 hit_count;u32x4 *mask;u32x4 *value;}) l2_rw_entry_t
src
vnet
l2
l2_rw.h
Generated on Sat Jan 8 2022 10:05:19 for FD.io VPP by
1.8.17