tun: convert to use generic xdp_frame and xdp_return_frame API
The tuntap driver invented it's own driver specific way of queuing XDP packets, by storing the xdp_buff information in the top of the XDP frame data. Convert it over to use the more generic xdp_frame structure. The main problem with the in-driver method is that the xdp_rxq_info pointer cannot be trused/used when dequeueing the frame. V3: Remove check based on feedback from Jason Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
c0048cff8a
commit
1ffcbc8537
@@ -32,6 +32,7 @@
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
#include <net/sock.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include "vhost.h"
|
||||
|
||||
@@ -181,10 +182,10 @@ static void vhost_net_buf_unproduce(struct vhost_net_virtqueue *nvq)
|
||||
|
||||
static int vhost_net_buf_peek_len(void *ptr)
|
||||
{
|
||||
if (tun_is_xdp_buff(ptr)) {
|
||||
struct xdp_buff *xdp = tun_ptr_to_xdp(ptr);
|
||||
if (tun_is_xdp_frame(ptr)) {
|
||||
struct xdp_frame *xdpf = tun_ptr_to_xdp(ptr);
|
||||
|
||||
return xdp->data_end - xdp->data;
|
||||
return xdpf->len;
|
||||
}
|
||||
|
||||
return __skb_array_len_with_tag(ptr);
|
||||
|
Reference in New Issue
Block a user