Author: sephe
Date: Fri Feb  5 05:06:14 2016
New Revision: 295299
URL: https://svnweb.freebsd.org/changeset/base/295299

Log:
  hyperv/hn: Enable UDP RXCSUM
  
  Reviewed by:  adrian
  Approved by:  adrian (mentor)
  MFC after:    1 week
  Sponsored by: Microsoft OSTC
  Differential Revision:        https://reviews.freebsd.org/D5102

Modified:
  head/sys/dev/hyperv/netvsc/hv_net_vsc.h
  head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c

Modified: head/sys/dev/hyperv/netvsc/hv_net_vsc.h
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_net_vsc.h     Fri Feb  5 05:01:02 2016        
(r295298)
+++ head/sys/dev/hyperv/netvsc/hv_net_vsc.h     Fri Feb  5 05:06:14 2016        
(r295299)
@@ -1036,6 +1036,7 @@ typedef struct hn_softc {
 
        u_long          hn_csum_ip;
        u_long          hn_csum_tcp;
+       u_long          hn_csum_udp;
        u_long          hn_csum_trusted;
        u_long          hn_lro_tried;
        u_long          hn_small_pkts;

Modified: head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c  Fri Feb  5 05:01:02 
2016        (r295298)
+++ head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c  Fri Feb  5 05:06:14 
2016        (r295299)
@@ -456,6 +456,8 @@ netvsc_attach(device_t dev)
            CTLFLAG_RW, &sc->hn_csum_ip, "RXCSUM IP");
        SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "csum_tcp",
            CTLFLAG_RW, &sc->hn_csum_tcp, "RXCSUM TCP");
+       SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "csum_udp",
+           CTLFLAG_RW, &sc->hn_csum_udp, "RXCSUM UDP");
        SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "csum_trusted",
            CTLFLAG_RW, &sc->hn_csum_trusted,
            "# of TCP segements that we trust host's csum verification");
@@ -1156,7 +1158,7 @@ netvsc_recv(struct hv_device *device_ctx
        m_new->m_pkthdr.rcvif = ifp;
 
        /* receive side checksum offload */
-       if (NULL != csum_info) {
+       if (csum_info != NULL) {
                /* IP csum offload */
                if (csum_info->receive.ip_csum_succeeded) {
                        m_new->m_pkthdr.csum_flags |=
@@ -1164,12 +1166,16 @@ netvsc_recv(struct hv_device *device_ctx
                        sc->hn_csum_ip++;
                }
 
-               /* TCP csum offload */
-               if (csum_info->receive.tcp_csum_succeeded) {
+               /* TCP/UDP csum offload */
+               if (csum_info->receive.tcp_csum_succeeded ||
+                   csum_info->receive.udp_csum_succeeded) {
                        m_new->m_pkthdr.csum_flags |=
                            (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
                        m_new->m_pkthdr.csum_data = 0xffff;
-                       sc->hn_csum_tcp++;
+                       if (csum_info->receive.tcp_csum_succeeded)
+                               sc->hn_csum_tcp++;
+                       else
+                               sc->hn_csum_udp++;
                }
 
                if (csum_info->receive.ip_csum_succeeded &&
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to