Module Name:    src
Committed By:   rin
Date:           Thu Dec 13 12:13:33 UTC 2018

Modified Files:
        src/sys/net: ether_sw_offload.c

Log Message:
Fix (bridge && !inet6) build.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/net/ether_sw_offload.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/net/ether_sw_offload.c
diff -u src/sys/net/ether_sw_offload.c:1.1 src/sys/net/ether_sw_offload.c:1.2
--- src/sys/net/ether_sw_offload.c:1.1	Wed Dec 12 01:40:20 2018
+++ src/sys/net/ether_sw_offload.c	Thu Dec 13 12:13:33 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: ether_sw_offload.c,v 1.1 2018/12/12 01:40:20 rin Exp $	*/
+/*	$NetBSD: ether_sw_offload.c,v 1.2 2018/12/13 12:13:33 rin Exp $	*/
 
 /*
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -29,8 +29,12 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#ifdef _KERNEL_OPT
+#include "opt_inet.h"
+#endif
+
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ether_sw_offload.c,v 1.1 2018/12/12 01:40:20 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ether_sw_offload.c,v 1.2 2018/12/13 12:13:33 rin Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -43,12 +47,14 @@ __KERNEL_RCSID(0, "$NetBSD: ether_sw_off
 #include <netinet/in.h>
 #include <netinet/in_offload.h>
 #include <netinet/ip.h>
-#include <netinet/ip6.h>
 #include <netinet/tcp.h>
 #include <netinet/udp.h>
 
+#ifdef INET6
+#include <netinet/ip6.h>
 #include <netinet6/in6.h>
 #include <netinet6/in6_offload.h>
+#endif
 
 /*
  * Handle TX offload in software. For TSO, split the packet into
@@ -62,7 +68,7 @@ ether_sw_offload_tx(struct ifnet *ifp, s
 {
 	struct ether_header *ep;
 	int flags, ehlen;
-	bool v4;
+	bool v6;
 
 	KASSERT(m->m_flags & M_PKTHDR);
 	flags = m->m_pkthdr.csum_flags;
@@ -93,7 +99,10 @@ ether_sw_offload_tx(struct ifnet *ifp, s
 	}
 	KASSERT(m->m_pkthdr.len >= ehlen);
 
-	v4 = flags & (M_CSUM_TSOv4 | M_CSUM_IPv4 | M_CSUM_TCPv4 | M_CSUM_UDPv4);
+	v6 = flags & (M_CSUM_TSOv6 | M_CSUM_TCPv6 | M_CSUM_UDPv6);
+#ifndef INET6
+	KASSERT(!v6);
+#endif
 
 	if (flags & (M_CSUM_TSOv4 | M_CSUM_TSOv6)) {
 		/*
@@ -103,16 +112,20 @@ ether_sw_offload_tx(struct ifnet *ifp, s
 		 *
 		 * XXX Do we need some KASSERT's?
 		 */
-		if (v4)
-			return tcp4_segment(m, ehlen);
-		else
+#ifdef INET6
+		if (v6)
 			return tcp6_segment(m, ehlen);
+		else
+#endif
+			return tcp4_segment(m, ehlen);
 	}
 
-	if (v4)
-		in_undefer_cksum(m, ehlen, flags);
-	else
+#ifdef INET6
+	if (v6)
 		in6_undefer_cksum(m, ehlen, flags);
+	else
+#endif
+		in_undefer_cksum(m, ehlen, flags);
 done:
 	m->m_pkthdr.csum_flags = 0;
 	m->m_nextpkt = NULL;
@@ -134,13 +147,12 @@ ether_sw_offload_rx(struct ifnet *ifp, s
 {
 	struct ether_header *eh;
 	struct ip *ip;
-	struct ip6_hdr *ip6;
 	struct tcphdr *th;
 	struct udphdr *uh;
 	uint16_t sum, osum;
 	uint8_t proto;
 	int flags, enabled, len, ehlen, iphlen, l4offset;
-	bool v4;
+	bool v6;
 
 	flags = 0;
 
@@ -181,9 +193,46 @@ ether_sw_offload_rx(struct ifnet *ifp, s
 			return NULL;
 	}
 	ip = (void *)(mtod(m, char *) + ehlen);
-	v4 = (ip->ip_v == IPVERSION);
+	v6 = (ip->ip_v != IPVERSION);
+
+	if (v6) {
+#ifdef INET6
+		struct ip6_hdr *ip6;
+
+		KASSERT(len >= sizeof(*ip6));
+		if (m->m_len < ehlen + sizeof(*ip6)) {
+			m = m_pullup(m, ehlen + sizeof(*ip6));
+			if (m == NULL)
+				return NULL;
+		}
+		ip6 = (void *)(mtod(m, char *) + ehlen);
+		KASSERT((ip6->ip6_vfc & IPV6_VERSION_MASK) == IPV6_VERSION);
 
-	if (v4) {
+		iphlen = sizeof(*ip6);
+
+		len -= iphlen;
+
+		proto = ip6->ip6_nxt;
+		switch (proto) {
+		case IPPROTO_TCP:
+			if (!(enabled & M_CSUM_TCPv6))
+				goto done;
+			break;
+		case IPPROTO_UDP:
+			if (!(enabled & M_CSUM_UDPv6))
+				goto done;
+			break;
+		default:
+			/* XXX Extension headers are not supported. */
+			goto done;
+		}
+
+		sum = in6_cksum_phdr(&ip6->ip6_src, &ip6->ip6_dst, htonl(len),
+		    htonl(proto));
+#else
+		goto done;
+#endif
+	} else {
 		if (enabled & M_CSUM_IPv4)
 			flags |= M_CSUM_IPv4;
 
@@ -220,37 +269,6 @@ ether_sw_offload_rx(struct ifnet *ifp, s
 
 		sum = in_cksum_phdr(ip->ip_src.s_addr, ip->ip_dst.s_addr,
 		    htons((uint16_t)len + proto));
-	} else {
-		KASSERT(len >= sizeof(*ip6));
-		if (m->m_len < ehlen + sizeof(*ip6)) {
-			m = m_pullup(m, ehlen + sizeof(*ip6));
-			if (m == NULL)
-				return NULL;
-		}
-		ip6 = (void *)(mtod(m, char *) + ehlen);
-		KASSERT((ip6->ip6_vfc & IPV6_VERSION_MASK) == IPV6_VERSION);
-
-		iphlen = sizeof(*ip6);
-
-		len -= iphlen;
-
-		proto = ip6->ip6_nxt;
-		switch (proto) {
-		case IPPROTO_TCP:
-			if (!(enabled & M_CSUM_TCPv6))
-				goto done;
-			break;
-		case IPPROTO_UDP:
-			if (!(enabled & M_CSUM_UDPv6))
-				goto done;
-			break;
-		default:
-			/* XXX Extension headers are not supported. */
-			goto done;
-		}
-
-		sum = in6_cksum_phdr(&ip6->ip6_src, &ip6->ip6_dst, htonl(len),
-		    htonl(proto));
 	}
 
 	l4offset = ehlen + iphlen;
@@ -265,12 +283,15 @@ ether_sw_offload_rx(struct ifnet *ifp, s
 		th = (void *)(mtod(m, char *) + l4offset);
 		osum = th->th_sum;
 		th->th_sum = sum;
-		if (v4) {
-			flags |= M_CSUM_TCPv4;
-			sum = in4_cksum(m, 0, l4offset, len);
-		} else {
+#ifdef INET6
+		if (v6) {
 			flags |= M_CSUM_TCPv6;
 			sum = in6_cksum(m, 0, l4offset, len);
+		} else
+#endif
+		{
+			flags |= M_CSUM_TCPv4;
+			sum = in4_cksum(m, 0, l4offset, len);
 		}
 		if (sum != osum)
 			flags |= M_CSUM_TCP_UDP_BAD;
@@ -288,12 +309,15 @@ ether_sw_offload_rx(struct ifnet *ifp, s
 		if (osum == 0)
 			break;
 		uh->uh_sum = sum;
-		if (v4) {
-			flags |= M_CSUM_UDPv4;
-			sum = in4_cksum(m, 0, l4offset, len);
-		} else {
+#ifdef INET6
+		if (v6) {
 			flags |= M_CSUM_UDPv6;
 			sum = in6_cksum(m, 0, l4offset, len);
+		} else
+#endif
+		{
+			flags |= M_CSUM_UDPv4;
+			sum = in4_cksum(m, 0, l4offset, len);
 		}
 		if (sum == 0)
 			sum = 0xffff;

Reply via email to