From 4648814d261ff117253e03fadc837d377f96b3ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= Date: Fri, 1 Oct 2021 00:26:01 +0200 Subject: [PATCH] nat64: Also translate DSCP and ECN fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Toke Høiland-Jørgensen --- nat64-bpf/nat64_kern.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nat64-bpf/nat64_kern.c b/nat64-bpf/nat64_kern.c index b73e724..e698867 100644 --- a/nat64-bpf/nat64_kern.c +++ b/nat64-bpf/nat64_kern.c @@ -120,6 +120,9 @@ static int nat64_handle_v4(struct __sk_buff *skb, struct hdr_cursor *nh) dst_hdr.daddr = *dst_v6; dst_hdr.nexthdr = iph->protocol; dst_hdr.hop_limit = iph->ttl; + /* weird definition in ipv6hdr */ + dst_hdr.priority = (iph->tos & 0x70) >> 4; + dst_hdr.flow_lbl[0] = iph->tos << 4; dst_hdr.payload_len = bpf_htons(bpf_ntohs(iph->tot_len) - iphdr_len); if (bpf_skb_change_proto(skb, bpf_htons(ETH_P_IPV6), 0)) @@ -333,6 +336,7 @@ static int nat64_handle_v6(struct __sk_buff *skb, struct hdr_cursor *nh) dst_hdr.saddr = bpf_htonl(v6_state->v4_addr); dst_hdr.protocol = ip6h->nexthdr; dst_hdr.ttl = ip6h->hop_limit; + dst_hdr.tos = ip6h->priority << 4 | (ip6h->flow_lbl[0] >> 4); dst_hdr.tot_len = bpf_htons(bpf_ntohs(ip6h->payload_len) + sizeof(dst_hdr)); dst_hdr.check = csum_fold_helper(bpf_csum_diff((__be32 *)&dst_hdr, 0, (__be32 *)&dst_hdr, sizeof(dst_hdr),