urpf: export to use it externally

Type: improvement
Change-Id: Ia70f16c92dfc153256db6dcdf23f5487d5a7b678
Signed-off-by: Maxime Peim <mpeim@cisco.com>
This commit is contained in:
Maxime Peim
2024-03-11 10:35:16 +01:00
committed by Beno�t Ganne
parent 7624083c27
commit 0720d65c7b
5 changed files with 39 additions and 22 deletions

View File

@ -22,6 +22,10 @@ add_vpp_plugin(urpf
ip4_urpf.c
ip6_urpf.c
INSTALL_HEADERS
urpf_dp.h
urpf.h
API_FILES
urpf.api
)

View File

@ -60,7 +60,17 @@ static const char *urpf_feats[N_AF][VLIB_N_DIR][URPF_N_MODES] =
urpf_data_t *urpf_cfgs[N_AF][VLIB_N_DIR];
u8 *
format_urpf_mode (u8 * s, va_list * a)
format_urpf_trace (u8 *s, va_list *va)
{
CLIB_UNUSED (vlib_main_t * vm) = va_arg (*va, vlib_main_t *);
CLIB_UNUSED (vlib_node_t * node) = va_arg (*va, vlib_node_t *);
urpf_trace_t *t = va_arg (*va, urpf_trace_t *);
return format (s, "uRPF:%d fib:%d", t->urpf, t->fib_index);
}
__clib_export u8 *
format_urpf_mode (u8 *s, va_list *a)
{
urpf_mode_t mode = va_arg (*a, int);
@ -76,8 +86,8 @@ format_urpf_mode (u8 * s, va_list * a)
return (format (s, "unknown"));
}
static uword
unformat_urpf_mode (unformat_input_t * input, va_list * args)
__clib_export uword
unformat_urpf_mode (unformat_input_t *input, va_list *args)
{
urpf_mode_t *mode = va_arg (*args, urpf_mode_t *);
@ -94,7 +104,16 @@ unformat_urpf_mode (unformat_input_t * input, va_list * args)
return 0;
}
int
__clib_export int
urpf_feature_enable_disable (ip_address_family_t af, vlib_dir_t dir,
urpf_mode_t mode, u32 sw_if_index, int enable)
{
return vnet_feature_enable_disable (urpf_feat_arcs[af][dir],
urpf_feats[af][dir][mode], sw_if_index,
enable, 0, 0);
}
__clib_export int
urpf_update (urpf_mode_t mode, u32 sw_if_index, ip_address_family_t af,
vlib_dir_t dir, u32 table_id)
{

View File

@ -32,7 +32,15 @@ typedef enum urpf_mode_t_
#define URPF_N_MODES (URPF_MODE_STRICT+1)
extern u8 *format_urpf_mode (u8 * s, va_list * a);
typedef struct
{
index_t urpf;
u32 fib_index;
} urpf_trace_t;
u8 *format_urpf_trace (u8 *s, va_list *va);
u8 *format_urpf_mode (u8 *s, va_list *a);
uword unformat_urpf_mode (unformat_input_t *input, va_list *args);
typedef struct
{
@ -43,8 +51,8 @@ typedef struct
extern urpf_data_t *urpf_cfgs[N_AF][VLIB_N_DIR];
extern int urpf_update (urpf_mode_t mode, u32 sw_if_index,
ip_address_family_t af, vlib_dir_t dir, u32 table_id);
int urpf_update (urpf_mode_t mode, u32 sw_if_index, ip_address_family_t af,
vlib_dir_t dir, u32 table_id);
#endif

View File

@ -53,21 +53,6 @@
*
* This file contains the interface unicast source check.
*/
typedef struct
{
index_t urpf;
u32 fib_index;
} urpf_trace_t;
static u8 *
format_urpf_trace (u8 * s, va_list * va)
{
CLIB_UNUSED (vlib_main_t * vm) = va_arg (*va, vlib_main_t *);
CLIB_UNUSED (vlib_node_t * node) = va_arg (*va, vlib_node_t *);
urpf_trace_t *t = va_arg (*va, urpf_trace_t *);
return format (s, "uRPF:%d fib:%d", t->urpf, t->fib_index);
}
#define foreach_urpf_error \
_(DROP, "uRPF Drop") \

View File

@ -1144,6 +1144,7 @@ list(APPEND VNET_HEADERS
fib/fib_path_list.h
fib/fib_sas.h
fib/fib_source.h
fib/fib_urpf_list.h
)
list(APPEND VNET_API_FILES