diff --git a/ebpf/bypass_filter.c b/ebpf/bypass_filter.c index 23f5f32dc6..aea9f8ce72 100644 --- a/ebpf/bypass_filter.c +++ b/ebpf/bypass_filter.c @@ -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];