virtio-net: unbreak csumed packets for XDP_PASS
authorJason Wang <jasowang@redhat.com>
Fri, 23 Dec 2016 14:37:28 +0000 (22:37 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 23 Dec 2016 18:48:54 +0000 (13:48 -0500)
We drop csumed packet when do XDP for packets. This breaks
XDP_PASS when GUEST_CSUM is supported. Fix this by allowing csum flag
to be set. With this patch, simple TCP works for XDP_PASS.

Cc: John Fastabend <john.r.fastabend@intel.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Acked-by: John Fastabend <john.r.fastabend@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/virtio_net.c

index 470293e2b84d4cf6bf168943ed1f0f0baabae363..0778dc88597e1e91abcf879ea3c2bf07ccbfcc69 100644 (file)
@@ -440,7 +440,7 @@ static struct sk_buff *receive_big(struct net_device *dev,
                struct virtio_net_hdr_mrg_rxbuf *hdr = buf;
                u32 act;
 
-               if (unlikely(hdr->hdr.gso_type || hdr->hdr.flags))
+               if (unlikely(hdr->hdr.gso_type))
                        goto err_xdp;
                act = do_xdp_prog(vi, rq, xdp_prog, page, 0, len);
                switch (act) {
@@ -572,7 +572,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
                 * the receive path after XDP is loaded. In practice I
                 * was not able to create this condition.
                 */
-               if (unlikely(hdr->hdr.gso_type || hdr->hdr.flags))
+               if (unlikely(hdr->hdr.gso_type))
                        goto err_xdp;
 
                act = do_xdp_prog(vi, rq, xdp_prog, xdp_page, offset, len);