urpf: export to use it externally 97/40497/10
authorMaxime Peim <[email protected]>
Mon, 11 Mar 2024 09:35:16 +0000 (10:35 +0100)
committerBeno�t Ganne <[email protected]>
Tue, 28 May 2024 11:56:46 +0000 (11:56 +0000)
Type: improvement
Change-Id: Ia70f16c92dfc153256db6dcdf23f5487d5a7b678
Signed-off-by: Maxime Peim <[email protected]>
src/plugins/urpf/CMakeLists.txt
src/plugins/urpf/urpf.c
src/plugins/urpf/urpf.h
src/plugins/urpf/urpf_dp.h
src/vnet/CMakeLists.txt

index 2f44e3b..f665d30 100644 (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
 )
index e5209ca..1e7d6c0 100644 (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)
 {
index 6983a2b..a40a25d 100644 (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
 
index bca4186..b17fed7 100644 (file)
  *
  * 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")                     \
index ad5f448..eb74f5d 100644 (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