From 4420cb2f004b02eba2ef2055a3a67a97909d5938 Mon Sep 17 00:00:00 2001 From: gamemann Date: Fri, 18 Dec 2020 18:53:10 +0000 Subject: [PATCH] Improve ICMP matching. --- src/xdpfw_kern.c | 51 +++++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/src/xdpfw_kern.c b/src/xdpfw_kern.c index 88a1058..8747ad4 100644 --- a/src/xdpfw_kern.c +++ b/src/xdpfw_kern.c @@ -563,38 +563,35 @@ int xdp_prog_main(struct xdp_md *ctx) } else if (filter->icmpopts.enabled) { - if (!icmph) + if (icmph) { - continue; - } + // Code. + if (filter->icmpopts.do_code && filter->icmpopts.code != icmph->code) + { + continue; + } - // Code. - if (filter->icmpopts.do_code && filter->icmpopts.code != icmph->code) - { - continue; + // Type. + if (filter->icmpopts.do_type && filter->icmpopts.type != icmph->type) + { + continue; + } } + else if (icmp6h) + { + // Code. + if (filter->icmpopts.do_code && filter->icmpopts.code != icmp6h->icmp6_code) + { + continue; + } - // Type. - if (filter->icmpopts.do_type && filter->icmpopts.type != icmph->type) - { - continue; - } - } - else if (icmp6h && filter->icmpopts.enabled) - { - if (!icmp6h) - { - continue; + // Type. + if (filter->icmpopts.do_type && filter->icmpopts.type != icmp6h->icmp6_type) + { + continue; + } } - - // Code. - if (filter->icmpopts.do_code && filter->icmpopts.code != icmp6h->icmp6_code) - { - continue; - } - - // Type. - if (filter->icmpopts.do_type && filter->icmpopts.type != icmp6h->icmp6_type) + else { continue; }