nat: improve icmp type detection performance

Replace code with branchless code.

Type: improvement

Signed-off-by: Klement Sekera <ksekera@cisco.com>
Change-Id: Ic38a20ad33483c1c26f90a927f8b963b0ead4a87
This commit is contained in:
Klement Sekera
2020-05-06 10:11:36 +00:00
committed by Ole Tr�an
parent bb912f2e25
commit f90348bcb4

View File

@ -20,20 +20,18 @@
#include <vnet/ip/icmp46_packet.h> #include <vnet/ip/icmp46_packet.h>
static_always_inline u8 static_always_inline u64
icmp_type_is_error_message (u8 icmp_type) icmp_type_is_error_message (u8 icmp_type)
{ {
switch (icmp_type) int bmp = 0;
{ bmp |= 1 << ICMP4_destination_unreachable;
case ICMP4_destination_unreachable: bmp |= 1 << ICMP4_time_exceeded;
case ICMP4_time_exceeded: bmp |= 1 << ICMP4_parameter_problem;
case ICMP4_parameter_problem: bmp |= 1 << ICMP4_source_quench;
case ICMP4_source_quench: bmp |= 1 << ICMP4_redirect;
case ICMP4_redirect: bmp |= 1 << ICMP4_alternate_host_address;
case ICMP4_alternate_host_address:
return 1; return (1ULL << icmp_type) & bmp;
}
return 0;
} }
#endif /* included_nat_inlines_h__ */ #endif /* included_nat_inlines_h__ */