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:
7 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 * l2_rw is based on vnet classifier and provides a way
18 * to modify packets matching a given table.
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.
28 #include <vnet/l2/l2_input.h>
30 typedef CLIB_PACKED(struct _l2_rw_entry {
32 u16 rewrite_n_vectors;
38 /* l2_rw configuration for one interface */
39 typedef CLIB_PACKED(struct _l2_rw_config {
40 u32 table_index; /* Which classify table to use */
41 u32 miss_index; /* Rewrite entry to use if table does not match */
46 /* Next feature node indexes */
47 u32 feat_next_node_index[32];
49 /* A pool of entries */
50 l2_rw_entry_t *entries;
52 /* Config vector indexed by sw_if_index */
53 l2_rw_config_t *configs;
54 uword *configs_bitmap;
57 extern l2_rw_main_t l2_rw_main;
60 * Specifies which classify table and miss_index should be used
61 * with the given interface.
62 * Use special values ~0 in order to un-set table_index
64 * l2_rw feature is automatically enabled for the interface
65 * when table_index or miss_index is not ~0.
66 * returns 0 on success and something else on error.
68 int l2_rw_interface_set_table (u32 sw_if_index,
69 u32 table_index, u32 miss_index);
72 * Creates, modifies or delete a rewrite entry.
73 * If *index != ~0, modifies an existing entry (or simply
74 * deletes it if is_del is set).
75 * If *index == ~0, creates a new entry and the created
76 * entry index is stored in *index (Does nothing if is_del
78 * returns 0 on success and something else on error.
80 int l2_rw_mod_entry (u32 * index,
81 u8 * mask, u8 * value, u32 len, u32 skip, u8 is_del);
83 extern vlib_node_registration_t l2_rw_node;
88 * fd.io coding-style-patch-verification: ON
91 * eval: (c-set-style "gnu")