]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
ebpf: slight bypass_filter optimization
authorEric Leblond <eric@regit.org>
Sun, 7 Jan 2018 20:58:09 +0000 (21:58 +0100)
committerEric Leblond <eric@regit.org>
Tue, 6 Feb 2018 15:58:19 +0000 (16:58 +0100)
ebpf/bypass_filter.c

index 23f5f32dc6f7bcd784166f70dd116898dcbecce0..aea9f8ce72f14e5c8af65cd59dfd79376b93cfc0 100644 (file)
@@ -137,15 +137,6 @@ static __always_inline int ipv6_filter(struct __sk_buff *skb)
 
     nhoff = skb->cb[0];
 
-    tuple.src[0] = load_word(skb, nhoff + offsetof(struct ipv6hdr, saddr));
-    tuple.src[1] = load_word(skb, nhoff + offsetof(struct ipv6hdr, saddr) + 4);
-    tuple.src[2] = load_word(skb, nhoff + offsetof(struct ipv6hdr, saddr) + 8);
-    tuple.src[3] = load_word(skb, nhoff + offsetof(struct ipv6hdr, saddr) + 12);
-    tuple.dst[0] = load_word(skb, nhoff + offsetof(struct ipv6hdr, daddr));
-    tuple.dst[1] = load_word(skb, nhoff + offsetof(struct ipv6hdr, daddr) + 4);
-    tuple.dst[2] = load_word(skb, nhoff + offsetof(struct ipv6hdr, daddr) + 8);
-    tuple.dst[3] = load_word(skb, nhoff + offsetof(struct ipv6hdr, daddr) + 12);
-
     /* get next header */
     nhdr = load_byte(skb, nhoff + offsetof(struct ipv6hdr, nexthdr));
 
@@ -158,6 +149,15 @@ static __always_inline int ipv6_filter(struct __sk_buff *skb)
             return -1;
     }
 
+    tuple.src[0] = load_word(skb, nhoff + offsetof(struct ipv6hdr, saddr));
+    tuple.src[1] = load_word(skb, nhoff + offsetof(struct ipv6hdr, saddr) + 4);
+    tuple.src[2] = load_word(skb, nhoff + offsetof(struct ipv6hdr, saddr) + 8);
+    tuple.src[3] = load_word(skb, nhoff + offsetof(struct ipv6hdr, saddr) + 12);
+    tuple.dst[0] = load_word(skb, nhoff + offsetof(struct ipv6hdr, daddr));
+    tuple.dst[1] = load_word(skb, nhoff + offsetof(struct ipv6hdr, daddr) + 4);
+    tuple.dst[2] = load_word(skb, nhoff + offsetof(struct ipv6hdr, daddr) + 8);
+    tuple.dst[3] = load_word(skb, nhoff + offsetof(struct ipv6hdr, daddr) + 12);
+
     /* Parse TCP */
     tuple.ports = load_word(skb, nhoff + 40 /* IPV6_HEADER_LEN */);
     port = tuple.port16[1];