diff options
author | Klement Sekera <ksekera@cisco.com> | 2020-05-06 10:11:36 +0000 |
---|---|---|
committer | Ole Tr�an <otroan@employees.org> | 2022-05-10 16:03:09 +0000 |
commit | f90348bcb4afd0af2611cefc43b17ef3042b511c (patch) | |
tree | 7c400ed438be12828309f04cc5ad1481dd45dbb5 /src | |
parent | bb912f2e25b5205f0705c4b8a5bd325aed078754 (diff) |
nat: improve icmp type detection performance
Replace code with branchless code.
Type: improvement
Signed-off-by: Klement Sekera <ksekera@cisco.com>
Change-Id: Ic38a20ad33483c1c26f90a927f8b963b0ead4a87
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/nat/lib/inlines.h | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/plugins/nat/lib/inlines.h b/src/plugins/nat/lib/inlines.h index 46be64d36cf..24e3ba83a5b 100644 --- a/src/plugins/nat/lib/inlines.h +++ b/src/plugins/nat/lib/inlines.h @@ -20,20 +20,18 @@ #include <vnet/ip/icmp46_packet.h> -static_always_inline u8 +static_always_inline u64 icmp_type_is_error_message (u8 icmp_type) { - switch (icmp_type) - { - case ICMP4_destination_unreachable: - case ICMP4_time_exceeded: - case ICMP4_parameter_problem: - case ICMP4_source_quench: - case ICMP4_redirect: - case ICMP4_alternate_host_address: - return 1; - } - return 0; + int bmp = 0; + bmp |= 1 << ICMP4_destination_unreachable; + bmp |= 1 << ICMP4_time_exceeded; + bmp |= 1 << ICMP4_parameter_problem; + bmp |= 1 << ICMP4_source_quench; + bmp |= 1 << ICMP4_redirect; + bmp |= 1 << ICMP4_alternate_host_address; + + return (1ULL << icmp_type) & bmp; } #endif /* included_nat_inlines_h__ */ |