nettrace - skip over a single hopopts or dstops ipv6 extension header am: 73896a7b70 am: acb4a0e1d1 am: 94ebfd372b am: e095a17084
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2750043
Change-Id: I0cc79e3738b4e147e0fb2e11115767b40162f867
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/bpf_progs/netd.c b/bpf_progs/netd.c
index 41a93f4..368cfca 100644
--- a/bpf_progs/netd.c
+++ b/bpf_progs/netd.c
@@ -272,6 +272,16 @@
(void)bpf_skb_load_bytes_net(skb, IP6_OFFSET(nexthdr), &proto, sizeof(proto), kver);
L4_off = sizeof(struct ipv6hdr);
ipVersion = 6;
+ // skip over a *single* HOPOPTS or DSTOPTS extension header (if present)
+ if (proto == IPPROTO_HOPOPTS || proto == IPPROTO_DSTOPTS) {
+ struct {
+ uint8_t proto, len;
+ } ext_hdr;
+ if (!bpf_skb_load_bytes_net(skb, L4_off, &ext_hdr, sizeof(ext_hdr), kver)) {
+ proto = ext_hdr.proto;
+ L4_off += (ext_hdr.len + 1) * 8;
+ }
+ }
}
uint8_t flags = 0;