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
45 /* Next feature node indexes */
46 u32 feat_next_node_index[32];
48 /* A pool of entries */
49 l2_rw_entry_t *entries;
51 /* Config vector indexed by sw_if_index */
52 l2_rw_config_t *configs;
53 uword *configs_bitmap;
56 extern l2_rw_main_t l2_rw_main;
59 * Specifies which classify table and miss_index should be used
60 * with the given interface.
61 * Use special values ~0 in order to un-set table_index
63 * l2_rw feature is automatically enabled for the interface
64 * when table_index or miss_index is not ~0.
65 * returns 0 on success and something else on error.
67 int l2_rw_interface_set_table(u32 sw_if_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,