summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroyger <royger@FreeBSD.org>2016-06-02 11:12:11 +0000
committerroyger <royger@FreeBSD.org>2016-06-02 11:12:11 +0000
commitf3b8f1a84d64e0ed1f713814abc9c8bc4cd139d4 (patch)
tree79280871bcee42770baa8cea93e2e53b4461dd77
parent52dfa92386d671063ded9d51f599e276d7a4de7f (diff)
downloadFreeBSD-src-f3b8f1a84d64e0ed1f713814abc9c8bc4cd139d4.zip
FreeBSD-src-f3b8f1a84d64e0ed1f713814abc9c8bc4cd139d4.tar.gz
xen-netfront: fix receiving TSO packets
Currently FreeBSD is not properly fetching the TSO information from the Xen PV ring, and thus the received packets didn't have all the necessary information, like the segment size or even the TSO flag set. Sponsored by: Citrix Systems R&D
-rw-r--r--sys/dev/xen/netfront/netfront.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/dev/xen/netfront/netfront.c b/sys/dev/xen/netfront/netfront.c
index 356445c..2576668 100644
--- a/sys/dev/xen/netfront/netfront.c
+++ b/sys/dev/xen/netfront/netfront.c
@@ -1253,6 +1253,13 @@ xn_rxeof(struct netfront_rxq *rxq)
| CSUM_PSEUDO_HDR);
m->m_pkthdr.csum_data = 0xffff;
}
+ if ((rx->flags & NETRXF_extra_info) != 0 &&
+ (extras[XEN_NETIF_EXTRA_TYPE_GSO - 1].type ==
+ XEN_NETIF_EXTRA_TYPE_GSO)) {
+ m->m_pkthdr.tso_segsz =
+ extras[XEN_NETIF_EXTRA_TYPE_GSO - 1].u.gso.size;
+ m->m_pkthdr.csum_flags |= CSUM_TSO;
+ }
rxq->stats.rx_packets++;
rxq->stats.rx_bytes += m->m_pkthdr.len;
OpenPOWER on IntegriCloud