[Differential] [Closed] D5104: hyperv/hn: Obey IFCAP_RXCSUM

Phabricator phabric-noreply at FreeBSD.org
Fri Feb 5 05:18:21 UTC 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rS295301: hyperv/hn: Obey IFCAP_RXCSUM configure (authored by sephe).

CHANGED PRIOR TO COMMIT
  https://reviews.freebsd.org/D5104?vs=12783&id=13035#toc

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D5104?vs=12783&id=13035

REVISION DETAIL
  https://reviews.freebsd.org/D5104

AFFECTED FILES
  head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c

CHANGE DETAILS
  diff --git a/head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
  --- a/head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
  +++ b/head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
  @@ -1142,7 +1142,7 @@
   	struct mbuf *m_new;
   	struct ifnet *ifp;
   	device_t dev = device_ctx->device;
  -	int size, do_lro = 0;
  +	int size, do_lro = 0, do_csum = 1;
   
   	if (sc == NULL) {
   		return (0); /* TODO: KYS how can this be! */
  @@ -1190,18 +1190,21 @@
   	}
   	m_new->m_pkthdr.rcvif = ifp;
   
  +	if (__predict_false((ifp->if_capenable & IFCAP_RXCSUM) == 0))
  +		do_csum = 0;
  +
   	/* receive side checksum offload */
   	if (csum_info != NULL) {
   		/* IP csum offload */
  -		if (csum_info->receive.ip_csum_succeeded) {
  +		if (csum_info->receive.ip_csum_succeeded && do_csum) {
   			m_new->m_pkthdr.csum_flags |=
   			    (CSUM_IP_CHECKED | CSUM_IP_VALID);
   			sc->hn_csum_ip++;
   		}
   
   		/* TCP/UDP csum offload */
  -		if (csum_info->receive.tcp_csum_succeeded ||
  -		    csum_info->receive.udp_csum_succeeded) {
  +		if ((csum_info->receive.tcp_csum_succeeded ||
  +		     csum_info->receive.udp_csum_succeeded) && do_csum) {
   			m_new->m_pkthdr.csum_flags |=
   			    (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
   			m_new->m_pkthdr.csum_data = 0xffff;
  @@ -1239,7 +1242,8 @@
   
   			pr = hn_check_iplen(m_new, hoff);
   			if (pr == IPPROTO_TCP) {
  -				if (sc->hn_trust_hcsum & HN_TRUST_HCSUM_TCP) {
  +				if (do_csum &&
  +				    (sc->hn_trust_hcsum & HN_TRUST_HCSUM_TCP)) {
   					sc->hn_csum_trusted++;
   					m_new->m_pkthdr.csum_flags |=
   					   (CSUM_IP_CHECKED | CSUM_IP_VALID |
  @@ -1249,14 +1253,15 @@
   				/* Rely on SW csum verification though... */
   				do_lro = 1;
   			} else if (pr == IPPROTO_UDP) {
  -				if (sc->hn_trust_hcsum & HN_TRUST_HCSUM_UDP) {
  +				if (do_csum &&
  +				    (sc->hn_trust_hcsum & HN_TRUST_HCSUM_UDP)) {
   					sc->hn_csum_trusted++;
   					m_new->m_pkthdr.csum_flags |=
   					   (CSUM_IP_CHECKED | CSUM_IP_VALID |
   					    CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
   					m_new->m_pkthdr.csum_data = 0xffff;
   				}
  -			} else if (pr != IPPROTO_DONE &&
  +			} else if (pr != IPPROTO_DONE && do_csum &&
   			    (sc->hn_trust_hcsum & HN_TRUST_HCSUM_IP)) {
   				sc->hn_csum_trusted++;
   				m_new->m_pkthdr.csum_flags |=

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: sepherosa_gmail.com, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com, adrian, network
Cc: freebsd-net-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D5104.13035.patch
Type: text/x-patch
Size: 2247 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-net/attachments/20160205/785533d8/attachment.bin>


More information about the freebsd-net mailing list