From f90348bcb4afd0af2611cefc43b17ef3042b511c Mon Sep 17 00:00:00 2001 From: Klement Sekera Date: Wed, 6 May 2020 10:11:36 +0000 Subject: nat: improve icmp type detection performance Replace code with branchless code. Type: improvement Signed-off-by: Klement Sekera Change-Id: Ic38a20ad33483c1c26f90a927f8b963b0ead4a87 --- src/plugins/nat/lib/inlines.h | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'src/plugins/nat') 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 -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__ */ -- cgit 1.2.3-korg