diff options
Diffstat (limited to 'src/vnet/ip/ip4_source_and_port_range_check.c')
-rw-r--r-- | src/vnet/ip/ip4_source_and_port_range_check.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/vnet/ip/ip4_source_and_port_range_check.c b/src/vnet/ip/ip4_source_and_port_range_check.c index 00ab51e2440..27b2d549ea7 100644 --- a/src/vnet/ip/ip4_source_and_port_range_check.c +++ b/src/vnet/ip/ip4_source_and_port_range_check.c @@ -99,7 +99,9 @@ static inline u32 check_adj_port_range_x1 (const protocol_port_range_dpo_t * ppr_dpo, u16 dst_port, u32 next) { +#ifdef CLIB_HAVE_VEC128 u16x8 key = u16x8_splat (dst_port); +#endif int i; if (NULL == ppr_dpo || dst_port == 0) @@ -107,9 +109,20 @@ check_adj_port_range_x1 (const protocol_port_range_dpo_t * ppr_dpo, for (i = 0; i < ppr_dpo->n_used_blocks; i++) +#ifdef CLIB_HAVE_VEC128 if (!u16x8_is_all_zero ((ppr_dpo->blocks[i].low.as_u16x8 <= key) & (ppr_dpo->blocks[i].hi.as_u16x8 >= key))) return next; +#else + { + for (int j = 0; j < 8; j++) + { + if ((ppr_dpo->blocks[i].low.as_u16[j] <= dst_port) && + (ppr_dpo->blocks[i].hi.as_u16[j] >= dst_port)) + return next; + } + }; +#endif return IP4_SOURCE_AND_PORT_RANGE_CHECK_NEXT_DROP; } @@ -550,7 +563,6 @@ ip4_source_and_port_range_check_tx (vlib_main_t * vm, if this changes can easily make new function */ -/* *INDENT-OFF* */ VLIB_REGISTER_NODE (ip4_source_port_and_range_check_rx) = { .function = ip4_source_and_port_range_check_rx, .name = "ip4-source-and-port-range-check-rx", @@ -567,9 +579,7 @@ VLIB_REGISTER_NODE (ip4_source_port_and_range_check_rx) = { .format_buffer = format_ip4_header, .format_trace = format_ip4_source_and_port_range_check_trace, }; -/* *INDENT-ON* */ -/* *INDENT-OFF* */ VLIB_REGISTER_NODE (ip4_source_port_and_range_check_tx) = { .function = ip4_source_and_port_range_check_tx, .name = "ip4-source-and-port-range-check-tx", @@ -586,7 +596,6 @@ VLIB_REGISTER_NODE (ip4_source_port_and_range_check_tx) = { .format_buffer = format_ip4_header, .format_trace = format_ip4_source_and_port_range_check_trace, }; -/* *INDENT-ON* */ int set_ip_source_and_port_range_check (vlib_main_t * vm, @@ -749,7 +758,8 @@ set_ip_source_and_port_range_check_fn (vlib_main_t * vm, * @cliexend * * Example of how to enable range checking on TX: - * @cliexcmd{set interface ip source-and-port-range-check GigabitEthernet2/0/0 udp-in-vrf 7} + * @cliexcmd{set interface ip source-and-port-range-check GigabitEthernet2/0/0 + * udp-in-vrf 7} * * Example of graph node after range checking is enabled: * @cliexstart{show vlib graph ip4-source-and-port-range-check-tx} @@ -758,7 +768,7 @@ set_ip_source_and_port_range_check_fn (vlib_main_t * vm, * interface-output [1] * @cliexend * - * Example of how to display the features enabed on an interface: + * Example of how to display the features enabled on an interface: * @cliexstart{show ip interface features GigabitEthernet2/0/0} * IP feature paths configured on GigabitEthernet2/0/0... * @@ -783,13 +793,11 @@ set_ip_source_and_port_range_check_fn (vlib_main_t * vm, * @cliexend * @endparblock ?*/ -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (set_interface_ip_source_and_port_range_check_command, static) = { .path = "set interface ip source-and-port-range-check", .function = set_ip_source_and_port_range_check_fn, .short_help = "set interface ip source-and-port-range-check <interface> [tcp-out-vrf <table-id>] [udp-out-vrf <table-id>] [tcp-in-vrf <table-id>] [udp-in-vrf <table-id>] [del]", }; -/* *INDENT-ON* */ static u8 * format_ppr_dpo (u8 * s, va_list * args) @@ -1250,14 +1258,12 @@ ip_source_and_port_range_check_command_fn (vlib_main_t * vm, * Example of how to delete an IPv4 subnet and range of ports from an IPv4 FIB table: * @cliexcmd{set ip source-and-port-range-check vrf 7 172.16.1.0/24 range 23 - 100 del} ?*/ -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (ip_source_and_port_range_check_command, static) = { .path = "set ip source-and-port-range-check", .function = ip_source_and_port_range_check_command_fn, .short_help = "set ip source-and-port-range-check vrf <table-id> <ip-addr>/<mask> {port nn | range <nn> - <nn>} [del]", }; -/* *INDENT-ON* */ static clib_error_t * @@ -1367,7 +1373,7 @@ show_source_and_port_range_check_fn (vlib_main_t * vm, * @cliexstart{show ip source-and-port-range-check vrf 7 172.16.2.0} * 172.16.2.0: 23 - 101 * @cliexend - * Example of how to test to determine of a given Pv4 address and port + * Example of how to test to determine of a given iPv4 address and port * are being validated: * @cliexstart{show ip source-and-port-range-check vrf 7 172.16.2.2 port 23} * 172.16.2.2 port 23 PASS @@ -1376,14 +1382,12 @@ show_source_and_port_range_check_fn (vlib_main_t * vm, * 172.16.2.2 port 250 FAIL * @cliexend ?*/ -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (show_source_and_port_range_check, static) = { .path = "show ip source-and-port-range-check", .function = show_source_and_port_range_check_fn, .short_help = "show ip source-and-port-range-check vrf <table-id> <ip-addr> [port <n>]", }; -/* *INDENT-ON* */ /* * fd.io coding-style-patch-verification: ON |