On Wed, Jan 24, 2024 at 7:04 PM Heng Qi <hengqi@xxxxxxxxxxxxxxxxx> wrote: > > > > 在 2024/1/24 下午4:57, Liang Chen 写道: > > For the XDP_PASS scenario of the XDP path, the skb constructed with > > xdp_buff does not include the virtio header. Adding the virtio header > > information back when creating the skb. > > > > Signed-off-by: Liang Chen <liangchen.linux@xxxxxxxxx> > > --- > > drivers/net/virtio_net.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > index b56828804e5f..2de46eb4c661 100644 > > --- a/drivers/net/virtio_net.c > > +++ b/drivers/net/virtio_net.c > > @@ -1270,6 +1270,9 @@ static struct sk_buff *receive_small_xdp(struct net_device *dev, > > if (unlikely(!skb)) > > goto err; > > > > + /* Store the original virtio header for subsequent use by the driver. */ > > + memcpy(skb_vnet_common_hdr(skb), &virtnet_xdp.hdr, vi->hdr_len); > > If xdp push or xdp pull modifies xdp_buff, will the original header > still apply to the modified data? > No, it would be an issue then. Anyway, this patch will be dropped in v3. Thanks. > Thanks, > Heng > > > + > > if (metasize) > > skb_metadata_set(skb, metasize); > > > > @@ -1635,6 +1638,9 @@ static struct sk_buff *receive_mergeable_xdp(struct net_device *dev, > > head_skb = build_skb_from_xdp_buff(dev, vi, xdp, xdp_frags_truesz); > > if (unlikely(!head_skb)) > > break; > > + /* Store the original virtio header for subsequent use by the driver. */ > > + memcpy(skb_vnet_common_hdr(head_skb), &virtnet_xdp.hdr, vi->hdr_len); > > + > > return head_skb; > > > > case XDP_TX: >