examples/vhost: fix packet length
authorOuyang Changchun <changchun.ouyang@intel.com>
Wed, 5 Nov 2014 07:10:33 +0000 (15:10 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 5 Nov 2014 21:20:32 +0000 (22:20 +0100)
As HW vlan strip will reduce the packet length by minus length of vlan tag,
so it need restore the packet length by plus it.

Signed-off-by: Changchun Ouyang <changchun.ouyang@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Acked-by: Huawei Xie <huawei.xie@intel.com>
examples/vhost/main.c

index 57ef464..5ca8dce 100644 (file)
@@ -1078,7 +1078,13 @@ virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m, uint16_t vlan_tag)
                                        rte_pktmbuf_free(m);
                                        return;
                                }
-                               offset = 4;
+
+                               /*
+                                * HW vlan strip will reduce the packet length
+                                * by minus length of vlan tag, so need restore
+                                * the packet length by plus it.
+                                */
+                               offset = VLAN_HLEN;
                                vlan_tag =
                                (uint16_t)
                                vlan_tags[(uint16_t)dev_ll->vdev->dev->device_fh];
@@ -1102,8 +1108,10 @@ virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m, uint16_t vlan_tag)
        len = tx_q->len;
 
        m->ol_flags = PKT_TX_VLAN_PKT;
-       /*FIXME: offset*/
+
        m->data_len += offset;
+       m->pkt_len += offset;
+
        m->vlan_tci = vlan_tag;
 
        tx_q->m_table[len] = m;