diff options
author | hedi bouattour <hedibouattour2010@gmail.com> | 2022-09-14 12:39:23 +0000 |
---|---|---|
committer | Neale Ranns <neale@graphiant.com> | 2022-10-07 04:18:54 +0000 |
commit | b3605eab5ad6b8acb758caf7ce04c39d91f9e969 (patch) | |
tree | 4be488ba1f2f8c466f83b4f5f5aa35b98deeee07 /src/plugins/urpf/urpf_api.c | |
parent | 9260b8861e62fb9bb0c9dfb5a89c9636ef9a05e2 (diff) |
urpf: add mode for specific fib index lookup
this patch adds a mode to urpf in order to perform the lookup in a specified vrf instead of the interface vrf
Type: feature
Change-Id: Ieb91de6ccdfbf32b6939364f3bebeecd2d57af19
Signed-off-by: hedi bouattour <hedibouattour2010@gmail.com>
Diffstat (limited to 'src/plugins/urpf/urpf_api.c')
-rw-r--r-- | src/plugins/urpf/urpf_api.c | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/src/plugins/urpf/urpf_api.c b/src/plugins/urpf/urpf_api.c index ad060399347..472f0e4a7ff 100644 --- a/src/plugins/urpf/urpf_api.c +++ b/src/plugins/urpf/urpf_api.c @@ -26,6 +26,8 @@ #include <vnet/format_fns.h> #include <urpf/urpf.api_enum.h> #include <urpf/urpf.api_types.h> +#include <vnet/fib/fib_table.h> +#include <vnet/ip/ip_types.h> /** * Base message ID fot the plugin @@ -62,7 +64,34 @@ vl_api_urpf_update_t_handler (vl_api_urpf_update_t * mp) VALIDATE_SW_IF_INDEX (mp); rv = urpf_mode_decode (mp->mode, &mode); + if (rv) + goto done; + + rv = ip_address_family_decode (mp->af, &af); + if (rv) + goto done; + + rv = urpf_update (mode, htonl (mp->sw_if_index), af, + (mp->is_input ? VLIB_RX : VLIB_TX), 0); + if (rv) + goto done; + + BAD_SW_IF_INDEX_LABEL; +done: + REPLY_MACRO (VL_API_URPF_UPDATE_REPLY); +} +static void +vl_api_urpf_update_v2_t_handler (vl_api_urpf_update_v2_t *mp) +{ + vl_api_urpf_update_reply_t *rmp; + ip_address_family_t af; + urpf_mode_t mode; + int rv = 0; + + VALIDATE_SW_IF_INDEX (mp); + + rv = urpf_mode_decode (mp->mode, &mode); if (rv) goto done; @@ -71,12 +100,15 @@ vl_api_urpf_update_t_handler (vl_api_urpf_update_t * mp) if (rv) goto done; - urpf_update (mode, htonl (mp->sw_if_index), af, - (mp->is_input ? VLIB_RX : VLIB_TX)); + rv = urpf_update (mode, htonl (mp->sw_if_index), af, + (mp->is_input ? VLIB_RX : VLIB_TX), ntohl (mp->table_id)); + + if (rv) + goto done; BAD_SW_IF_INDEX_LABEL; done: - REPLY_MACRO (VL_API_URPF_UPDATE_REPLY); + REPLY_MACRO (VL_API_URPF_UPDATE_V2_REPLY); } #include <urpf/urpf.api.c> |