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:

committed by
Ole Tr�an

parent
bb912f2e25
commit
f90348bcb4
@ -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__ */
|
||||||
|
Reference in New Issue
Block a user