Re: [PATCH bpf v3 1/2] bpf: Update transport_header when encapsulating UDP tunnel in lwt
From: Leon Hwang
Date: Mon Jun 01 2026 - 22:21:23 EST
On 2/6/26 01:03, Emil Tsalapatis wrote:
> On Mon Jun 1, 2026 at 11:02 AM EDT, Leon Hwang wrote:
[...]
>> @@ -637,6 +644,10 @@ int bpf_lwt_push_ip_encap(struct sk_buff *skb, void *hdr, u32 len, bool ingress)
>> if (ingress)
>> skb_postpush_rcsum(skb, iph, len);
>> skb_reset_network_header(skb);
>> + if (ipv4 && is_udp_tunnel)
>> + skb_set_transport_header(skb, skb_network_offset(skb) + iph->ihl * 4);
>> + else if (!ipv4 && is_udp_tunnel)
>> + skb_set_transport_header(skb, skb_network_offset(skb) + sizeof(struct ipv6hdr));
>
> Minor nit: Could we do something like
>
> if (is_udp_tunnel) {
> size_t hrdsz = ipv4 ? iph->ihl * 4 : sizeof(struct ipv6hdr);
> skb_set_transport_header(skb9, skb_network_offset(skb)) + hdrsz;
> }
>
> to make the logic clearer?
>
Make sense.
Thanks,
Leon
>> memcpy(skb_network_header(skb), hdr, len);
>> bpf_compute_data_pointers(skb);
>> skb_clear_hash(skb);
>