On Wed, Sep 24, 2025 at 4:23 AM Kommula Shiva Shankar <[email protected]> wrote: > > virtio specification introduced support for outer network > header offset broadcast. > > This patch implements the needed defines and virtio header > parsing capabilities. > > Signed-off-by: Kommula Shiva Shankar <[email protected]> > --- > include/linux/virtio_net.h | 40 +++++++++++++++++++++++++++++++++ > include/uapi/linux/virtio_net.h | 8 +++++++ > 2 files changed, 48 insertions(+) > > diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h > index 20e0584db1dd..e6153e9106d3 100644 > --- a/include/linux/virtio_net.h > +++ b/include/linux/virtio_net.h > @@ -374,6 +374,46 @@ static inline int virtio_net_handle_csum_offload(struct > sk_buff *skb, > return 0; > } > > +static inline int > +virtio_net_out_net_header_to_skb(struct sk_buff *skb, > + struct > virtio_net_hdr_v1_hash_tunnel_out_net_hdr *vhdr, > + bool out_net_hdr_negotiated, > + bool little_endian) > +{ > + unsigned int out_net_hdr_off; > + > + if (!out_net_hdr_negotiated) > + return 0; > + > + if (vhdr->outer_nh_offset) { > + out_net_hdr_off = __virtio16_to_cpu(little_endian, > vhdr->outer_nh_offset); > + skb_set_network_header(skb, out_net_hdr_off); > + } > + > + return 0; > +} > + > +static inline int > +virtio_net_out_net_header_from_skb(const struct sk_buff *skb, > + struct > virtio_net_hdr_v1_hash_tunnel_out_net_hdr *vhdr, > + bool out_net_hdr_negotiated, > + bool little_endian) > +{ > + unsigned int out_net_hdr_off; > + > + if (!out_net_hdr_negotiated) { > + vhdr->outer_nh_offset = 0; > + return 0; > + } > + > + out_net_hdr_off = skb_network_offset(skb); > + if (out_net_hdr_off && skb->protocol == htons(ETH_P_IP)) > + vhdr->outer_nh_offset = __cpu_to_virtio16(little_endian, > + out_net_hdr_off);
I'd expect this to work for IPV6 as well. Thanks
