ip6: fix icmp throttling error index
[vpp.git] / src / vnet / l2 / l2_rw.h
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 typedef CLIB_PACKED(struct _l2_rw_entry {
31   u16 skip_n_vectors;
32   u16 rewrite_n_vectors;
33   u64 hit_count;
34   u32x4 *mask;
35   u32x4 *value;
36 }) l2_rw_entry_t;
37
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 */
42 }) l2_rw_config_t;
43
44 typedef struct
45 {
46   /* Next feature node indexes */
47   u32 feat_next_node_index[32];
48
49   /* A pool of entries */
50   l2_rw_entry_t *entries;
51
52   /* Config vector indexed by sw_if_index */
53   l2_rw_config_t *configs;
54   uword *configs_bitmap;
55 } l2_rw_main_t;
56
57 extern l2_rw_main_t l2_rw_main;
58
59 /*
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
63  * or miss_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.
67  */
68 int l2_rw_interface_set_table (u32 sw_if_index,
69                                u32 table_index, u32 miss_index);
70
71 /*
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
77  * is set).
78  * returns 0 on success and something else on error.
79  */
80 int l2_rw_mod_entry (u32 * index,
81                      u8 * mask, u8 * value, u32 len, u32 skip, u8 is_del);
82
83 extern vlib_node_registration_t l2_rw_node;
84
85 #endif /* L2_FW_H_ */
86
87 /*
88  * fd.io coding-style-patch-verification: ON
89  *
90  * Local Variables:
91  * eval: (c-set-style "gnu")
92  * End:
93  */