On 07/19, Larysa Zaremba wrote: > In order to test VLAN tag and checksum XDP hints in hardware-independent > selfttests, implement newly added XDP hints in veth driver. > > Signed-off-by: Larysa Zaremba <larysa.zaremba@xxxxxxxxx> Acked-by: Stanislav Fomichev <sdf@xxxxxxxxxx> > --- > drivers/net/veth.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 46 insertions(+) > > diff --git a/drivers/net/veth.c b/drivers/net/veth.c > index 614f3e3efab0..86239549120d 100644 > --- a/drivers/net/veth.c > +++ b/drivers/net/veth.c > @@ -1732,6 +1732,50 @@ static int veth_xdp_rx_hash(const struct xdp_md *ctx, u32 *hash, > return 0; > } > > +static int veth_xdp_rx_vlan_tag(const struct xdp_md *ctx, u16 *vlan_tci, > + __be16 *vlan_proto) > +{ > + struct veth_xdp_buff *_ctx = (void *)ctx; > + struct sk_buff *skb = _ctx->skb; > + int err; > + > + if (!skb) > + return -ENODATA; > + > + err = __vlan_hwaccel_get_tag(skb, vlan_tci); > + if (err) > + return err; > + > + *vlan_proto = skb->vlan_proto; > + return err; > +} > + > +static int veth_xdp_rx_csum(const struct xdp_md *ctx, > + enum xdp_csum_status *csum_status, > + union xdp_csum_info *csum_info) > +{ > + struct veth_xdp_buff *_ctx = (void *)ctx; > + struct sk_buff *skb = _ctx->skb; > + > + if (!skb) > + return -ENODATA; > + > + if (skb->ip_summed == CHECKSUM_UNNECESSARY) { > + *csum_status = skb->csum_level + 1; > + } else if (skb->ip_summed == CHECKSUM_PARTIAL) { > + *csum_status = XDP_CHECKSUM_PARTIAL; > + csum_info->csum_start = skb_checksum_start_offset(skb); > + csum_info->csum_offset = skb->csum_offset; > + } else if (skb->ip_summed == CHECKSUM_COMPLETE) { > + *csum_status = XDP_CHECKSUM_COMPLETE; > + csum_info->checksum = skb->csum; > + } else { > + return -ENODATA; > + } > + > + return 0; > +} > + > static const struct net_device_ops veth_netdev_ops = { > .ndo_init = veth_dev_init, > .ndo_open = veth_open, > @@ -1756,6 +1800,8 @@ static const struct net_device_ops veth_netdev_ops = { > static const struct xdp_metadata_ops veth_xdp_metadata_ops = { > .xmo_rx_timestamp = veth_xdp_rx_timestamp, > .xmo_rx_hash = veth_xdp_rx_hash, > + .xmo_rx_vlan_tag = veth_xdp_rx_vlan_tag, > + .xmo_rx_csum = veth_xdp_rx_csum, > }; > > #define VETH_FEATURES (NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HW_CSUM | \ > -- > 2.41.0 >