summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwhu <whu@FreeBSD.org>2015-07-28 05:46:37 +0000
committerwhu <whu@FreeBSD.org>2015-07-28 05:46:37 +0000
commitc78f4c18f7d5ae61d7b911fdb6d33e0948b7d81f (patch)
treecd0c2660b51dbb0e4fcd9958a34045f51d739e95
parentbc6d158afc7845c103f6a499035f41effc1ba6ca (diff)
downloadFreeBSD-src-c78f4c18f7d5ae61d7b911fdb6d33e0948b7d81f.zip
FreeBSD-src-c78f4c18f7d5ae61d7b911fdb6d33e0948b7d81f.tar.gz
MFC r285785 Do not enable UDP checksum offloading when running on the
Hyper-V on Windows Server 2012 and earlier hosts. Submitted by: whu Reviewed by: royger Approved by: royger Relnotes: No Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D3217
-rw-r--r--sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
index 4590081..5502d1b 100644
--- a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
+++ b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
@@ -343,7 +343,15 @@ netvsc_attach(device_t dev)
IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_TSO;
ifp->if_capenable |=
IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_TSO;
- ifp->if_hwassist = CSUM_TCP | CSUM_UDP | CSUM_TSO;
+ /*
+ * Only enable UDP checksum offloading when it is on 2012R2 or
+ * later. UDP checksum offloading doesn't work on earlier
+ * Windows releases.
+ */
+ if (hv_vmbus_protocal_version >= HV_VMBUS_VERSION_WIN8_1)
+ ifp->if_hwassist = CSUM_TCP | CSUM_UDP | CSUM_TSO;
+ else
+ ifp->if_hwassist = CSUM_TCP | CSUM_TSO;
ret = hv_rf_on_device_add(device_ctx, &device_info);
if (ret != 0) {
@@ -1110,7 +1118,17 @@ hn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
ifp->if_hwassist &= ~(CSUM_TCP | CSUM_UDP);
} else {
ifp->if_capenable |= IFCAP_TXCSUM;
- ifp->if_hwassist |= (CSUM_TCP | CSUM_UDP);
+ /*
+ * Only enable UDP checksum offloading on
+ * Windows Server 2012R2 or later releases.
+ */
+ if (hv_vmbus_protocal_version >=
+ HV_VMBUS_VERSION_WIN8_1) {
+ ifp->if_hwassist |=
+ (CSUM_TCP | CSUM_UDP);
+ } else {
+ ifp->if_hwassist |= CSUM_TCP;
+ }
}
}
OpenPOWER on IntegriCloud