diff options
author | royger <royger@FreeBSD.org> | 2016-06-02 11:12:11 +0000 |
---|---|---|
committer | royger <royger@FreeBSD.org> | 2016-06-02 11:12:11 +0000 |
commit | f3b8f1a84d64e0ed1f713814abc9c8bc4cd139d4 (patch) | |
tree | 79280871bcee42770baa8cea93e2e53b4461dd77 | |
parent | 52dfa92386d671063ded9d51f599e276d7a4de7f (diff) | |
download | FreeBSD-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.c | 7 |
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; |