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>
31 typedef CLIB_PACKED(struct _l2_rw_entry {
33 u16 rewrite_n_vectors;
40 /* l2_rw configuration for one interface */
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 */
50 /* Next feature node indexes */
51 u32 feat_next_node_index[32];
53 /* A pool of entries */
54 l2_rw_entry_t *entries;
56 /* Config vector indexed by sw_if_index */
57 l2_rw_config_t *configs;
58 uword *configs_bitmap;
61 extern l2_rw_main_t l2_rw_main;
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
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.
72 int l2_rw_interface_set_table (u32 sw_if_index,
73 u32 table_index, u32 miss_index);
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
82 * returns 0 on success and something else on error.
84 int l2_rw_mod_entry (u32 * index,
85 u8 * mask, u8 * value, u32 len, u32 skip, u8 is_del);
90 * fd.io coding-style-patch-verification: ON
93 * eval: (c-set-style "gnu")