summaryrefslogtreecommitdiffstats
path: root/src/plugins/nat
diff options
context:
space:
mode:
authorKlement Sekera <ksekera@cisco.com>2020-05-06 10:11:36 +0000
committerOle Tr�an <otroan@employees.org>2022-05-10 16:03:09 +0000
commitf90348bcb4afd0af2611cefc43b17ef3042b511c (patch)
tree7c400ed438be12828309f04cc5ad1481dd45dbb5 /src/plugins/nat
parentbb912f2e25b5205f0705c4b8a5bd325aed078754 (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/plugins/nat')
-rw-r--r--src/plugins/nat/lib/inlines.h22
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__ */