Source VRF Select
[vpp.git] / src / plugins / svs / svs.h
1 /*
2  * Copyright (c) 2018 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  * Source VRF Selection matches against a packet's source address to set
18  * the VRF in which the subsequnet destination IP address lookup is done.
19  * If no match for the source address is found, then the RX interface's
20  * table/VRF is used.
21  */
22 #ifndef __SVS_H__
23 #define __SVS_H__
24
25 #include <vnet/fib/fib_types.h>
26
27 #define SVS_PLUGIN_VERSION_MAJOR 1
28 #define SVS_PLUGIN_VERSION_MINOR 0
29
30 extern int svs_table_add (fib_protocol_t fproto, u32 table_id);
31 extern int svs_table_delete (fib_protocol_t fproto, u32 table_id);
32
33 extern int svs_route_add (u32 table_id,
34                           const fib_prefix_t * pfx, u32 source_table_id);
35 extern int svs_route_delete (u32 table_id, const fib_prefix_t * pfx);
36
37 extern int svs_enable (fib_protocol_t fproto, u32 table_id, u32 sw_if_index);
38 extern int svs_disable (fib_protocol_t fproto, u32 table_id, u32 sw_if_index);
39
40 typedef walk_rc_t (*svs_walk_fn_t) (fib_protocol_t fproto, u32 table_id,
41                                     u32 sw_if_index, void *ctx);
42
43 extern void svs_walk (svs_walk_fn_t fn, void *ctx);
44
45 /*
46  * fd.io coding-style-patch-verification: ON
47  *
48  * Local Variables:
49  * eval: (c-set-style "gnu")
50  * End:
51  */
52
53 #endif