Module Name: src Committed By: jdolecek Date: Mon May 4 08:22:45 UTC 2020
Modified Files: src/sys/arch/xen/xen: if_xennet_xenbus.c xennet_checksum.c xennetback_xenbus.c Log Message: remove IPv4 csum offloading for xennet(4) - it's not complete, and even if it was, it doesn't work with Linux Dom0 as it expects the IPv4 csum present To generate a diff of this commit: cvs rdiff -u -r1.121 -r1.122 src/sys/arch/xen/xen/if_xennet_xenbus.c cvs rdiff -u -r1.13 -r1.14 src/sys/arch/xen/xen/xennet_checksum.c cvs rdiff -u -r1.103 -r1.104 src/sys/arch/xen/xen/xennetback_xenbus.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/xen/xen/if_xennet_xenbus.c diff -u src/sys/arch/xen/xen/if_xennet_xenbus.c:1.121 src/sys/arch/xen/xen/if_xennet_xenbus.c:1.122 --- src/sys/arch/xen/xen/if_xennet_xenbus.c:1.121 Fri May 1 19:53:17 2020 +++ src/sys/arch/xen/xen/if_xennet_xenbus.c Mon May 4 08:22:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: if_xennet_xenbus.c,v 1.121 2020/05/01 19:53:17 jdolecek Exp $ */ +/* $NetBSD: if_xennet_xenbus.c,v 1.122 2020/05/04 08:22:45 jdolecek Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -81,7 +81,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.121 2020/05/01 19:53:17 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.122 2020/05/04 08:22:45 jdolecek Exp $"); #include "opt_xen.h" #include "opt_nfs_boot.h" @@ -377,15 +377,13 @@ xennet_xenbus_attach(device_t parent, de ifp->if_extflags = IFEF_MPSAFE; ifp->if_snd.ifq_maxlen = uimax(ifqmaxlen, NET_TX_RING_SIZE * 2); ifp->if_capabilities = - IFCAP_CSUM_IPv4_Rx | IFCAP_CSUM_IPv4_Tx - | IFCAP_CSUM_UDPv4_Rx | IFCAP_CSUM_UDPv4_Tx + IFCAP_CSUM_UDPv4_Rx | IFCAP_CSUM_UDPv4_Tx | IFCAP_CSUM_TCPv4_Rx | IFCAP_CSUM_TCPv4_Tx | IFCAP_CSUM_UDPv6_Rx | IFCAP_CSUM_TCPv6_Rx; -#define XN_M_CSUM_SUPPORTED ( \ - M_CSUM_TCPv4 | M_CSUM_UDPv4 | M_CSUM_IPv4 \ - | M_CSUM_TCPv6 | M_CSUM_UDPv6 \ - ) +#define XN_M_CSUM_SUPPORTED \ + (M_CSUM_TCPv4 | M_CSUM_UDPv4 | | M_CSUM_TCPv6 | M_CSUM_UDPv6) + if (sc->sc_features & FEATURE_IPV6CSUM) { /* * If backend supports IPv6 csum offloading, we can skip Index: src/sys/arch/xen/xen/xennet_checksum.c diff -u src/sys/arch/xen/xen/xennet_checksum.c:1.13 src/sys/arch/xen/xen/xennet_checksum.c:1.14 --- src/sys/arch/xen/xen/xennet_checksum.c:1.13 Sun May 3 16:10:26 2020 +++ src/sys/arch/xen/xen/xennet_checksum.c Mon May 4 08:22:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: xennet_checksum.c,v 1.13 2020/05/03 16:10:26 jdolecek Exp $ */ +/* $NetBSD: xennet_checksum.c,v 1.14 2020/05/04 08:22:45 jdolecek Exp $ */ /*- * Copyright (c)2006 YAMAMOTO Takashi, @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xennet_checksum.c,v 1.13 2020/05/03 16:10:26 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xennet_checksum.c,v 1.14 2020/05/04 08:22:45 jdolecek Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -147,7 +147,7 @@ xennet_checksum_fill(struct ifnet *ifp, switch (nxt) { case IPPROTO_UDP: if (iph) - m->m_pkthdr.csum_flags = M_CSUM_UDPv4 | M_CSUM_IPv4; + m->m_pkthdr.csum_flags = M_CSUM_UDPv4; #ifdef INET6 else m->m_pkthdr.csum_flags = M_CSUM_UDPv6; @@ -157,7 +157,7 @@ xennet_checksum_fill(struct ifnet *ifp, break; case IPPROTO_TCP: if (iph) - m->m_pkthdr.csum_flags = M_CSUM_TCPv4 | M_CSUM_IPv4; + m->m_pkthdr.csum_flags = M_CSUM_TCPv4; #ifdef INET6 else m->m_pkthdr.csum_flags = M_CSUM_TCPv6; @@ -167,10 +167,6 @@ xennet_checksum_fill(struct ifnet *ifp, break; case IPPROTO_ICMP: case IPPROTO_IGMP: - if (iph) - m->m_pkthdr.csum_flags = M_CSUM_IPv4; - m->m_pkthdr.csum_data = iphlen << 16; - break; case IPPROTO_HOPOPTS: case IPPROTO_ICMPV6: case IPPROTO_FRAGMENT: @@ -196,17 +192,9 @@ xennet_checksum_fill(struct ifnet *ifp, */ sw_csum = m->m_pkthdr.csum_flags & ~ifp->if_csum_flags_rx; - /* - * Always initialize the sum to 0! Some HW assisted - * checksumming requires this. in_undefer_cksum() - * also needs it to be zero. - */ - if (iph != NULL && (m->m_pkthdr.csum_flags & M_CSUM_IPv4)) - iph->ip_sum = 0; - - if (sw_csum & (M_CSUM_IPv4|M_CSUM_UDPv4|M_CSUM_TCPv4)) { + if (sw_csum & (M_CSUM_UDPv4|M_CSUM_TCPv4)) { in_undefer_cksum(m, ehlen, - sw_csum & (M_CSUM_IPv4|M_CSUM_UDPv4|M_CSUM_TCPv4)); + sw_csum & (M_CSUM_UDPv4|M_CSUM_TCPv4)); } #ifdef INET6 Index: src/sys/arch/xen/xen/xennetback_xenbus.c diff -u src/sys/arch/xen/xen/xennetback_xenbus.c:1.103 src/sys/arch/xen/xen/xennetback_xenbus.c:1.104 --- src/sys/arch/xen/xen/xennetback_xenbus.c:1.103 Sun May 3 17:56:19 2020 +++ src/sys/arch/xen/xen/xennetback_xenbus.c Mon May 4 08:22:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: xennetback_xenbus.c,v 1.103 2020/05/03 17:56:19 jdolecek Exp $ */ +/* $NetBSD: xennetback_xenbus.c,v 1.104 2020/05/04 08:22:45 jdolecek Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xennetback_xenbus.c,v 1.103 2020/05/03 17:56:19 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xennetback_xenbus.c,v 1.104 2020/05/04 08:22:45 jdolecek Exp $"); #include "opt_xen.h" @@ -266,15 +266,13 @@ xennetback_xenbus_create(struct xenbus_d ifp->if_snd.ifq_maxlen = uimax(ifqmaxlen, NET_TX_RING_SIZE * 2); ifp->if_capabilities = - IFCAP_CSUM_IPv4_Rx | IFCAP_CSUM_IPv4_Tx - | IFCAP_CSUM_UDPv4_Rx | IFCAP_CSUM_UDPv4_Tx + IFCAP_CSUM_UDPv4_Rx | IFCAP_CSUM_UDPv4_Tx | IFCAP_CSUM_TCPv4_Rx | IFCAP_CSUM_TCPv4_Tx | IFCAP_CSUM_UDPv6_Rx | IFCAP_CSUM_UDPv6_Tx | IFCAP_CSUM_TCPv6_Rx | IFCAP_CSUM_TCPv6_Tx; -#define XN_M_CSUM_SUPPORTED ( \ - M_CSUM_TCPv4 | M_CSUM_UDPv4 | M_CSUM_IPv4 \ - | M_CSUM_TCPv6 | M_CSUM_UDPv6 \ - ) +#define XN_M_CSUM_SUPPORTED \ + (M_CSUM_TCPv4 | M_CSUM_UDPv4 | M_CSUM_TCPv6 | M_CSUM_UDPv6) + ifp->if_ioctl = xennetback_ifioctl; ifp->if_start = xennetback_ifstart; ifp->if_watchdog = xennetback_ifwatchdog;