Module Name:    src
Committed By:   maxv
Date:           Mon Jan 15 11:57:27 UTC 2018

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

Log Message:
Style, make the code more readable, and add a KASSERT (we expect the mbuf
to have M_PKTHDR set).


To generate a diff of this commit:
cvs rdiff -u -r1.252 -r1.253 src/sys/net/if_ethersubr.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/if_ethersubr.c
diff -u src/sys/net/if_ethersubr.c:1.252 src/sys/net/if_ethersubr.c:1.253
--- src/sys/net/if_ethersubr.c:1.252	Mon Jan 15 10:27:51 2018
+++ src/sys/net/if_ethersubr.c	Mon Jan 15 11:57:27 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ethersubr.c,v 1.252 2018/01/15 10:27:51 maxv Exp $	*/
+/*	$NetBSD: if_ethersubr.c,v 1.253 2018/01/15 11:57:27 maxv Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.252 2018/01/15 10:27:51 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.253 2018/01/15 11:57:27 maxv Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -566,6 +566,7 @@ ether_input(struct ifnet *ifp, struct mb
 #endif
 
 	KASSERT(!cpu_intr_p());
+	KASSERT((m->m_flags & M_PKTHDR) != 0);
 
 	if ((ifp->if_flags & IFF_UP) == 0) {
 		m_freem(m);
@@ -639,7 +640,7 @@ ether_input(struct ifnet *ifp, struct mb
 		    (uint8_t *)&eh->ether_dhost, eh->ether_type) == 0)
 			return;
 	}
-#endif /* NCARP > 0 */
+#endif
 
 	if ((m->m_flags & (M_BCAST | M_MCAST | M_PROMISC)) == 0 &&
 	    (ifp->if_flags & IFF_PROMISC) != 0 &&
@@ -656,7 +657,6 @@ ether_input(struct ifnet *ifp, struct mb
 
 		eh = mtod(m, struct ether_header *);
 		etype = ntohs(eh->ether_type);
-		ehlen = sizeof(*eh);
 	}
 
 #if NAGR > 0
@@ -666,7 +666,7 @@ ether_input(struct ifnet *ifp, struct mb
 		agr_input(ifp, m);
 		return;
 	}
-#endif /* NAGR > 0 */
+#endif
 
 	/*
 	 * If VLANs are configured on the interface, check to
@@ -693,48 +693,52 @@ ether_input(struct ifnet *ifp, struct mb
 	switch (etype) {
 	case ETHERTYPE_VLAN: {
 		struct ether_vlan_header *evl = (void *)eh;
+
 		/*
 		 * If there is a tag of 0, then the VLAN header was probably
 		 * just being used to store the priority.  Extract the ether
 		 * type, and if IP or IPV6, let them deal with it.
 		 */
-		if (m->m_len <= sizeof(*evl)
-		    && EVL_VLANOFTAG(evl->evl_tag) == 0) {
+		if (m->m_len <= sizeof(*evl) &&
+		    EVL_VLANOFTAG(evl->evl_tag) == 0) {
 			etype = ntohs(evl->evl_proto);
 			ehlen = sizeof(*evl);
-			if ((m->m_flags & M_PROMISC) == 0
-			    && (etype == ETHERTYPE_IP
-				|| etype == ETHERTYPE_IPV6))
+			if ((m->m_flags & M_PROMISC) == 0 &&
+			    (etype == ETHERTYPE_IP ||
+			     etype == ETHERTYPE_IPV6))
 				break;
 		}
+
 #if NVLAN > 0
 		/*
 		 * vlan_input() will either recursively call ether_input()
 		 * or drop the packet.
 		 */
-		if (((struct ethercom *)ifp)->ec_nvlans != 0)
+		if (ec->ec_nvlans != 0)
 			vlan_input(ifp, m);
 		else
-#endif /* NVLAN > 0 */
+#endif
 			m_freem(m);
+
 		return;
 	}
+
 #if NPPPOE > 0
 	case ETHERTYPE_PPPOEDISC:
 		pppoedisc_input(ifp, m);
 		return;
+
 	case ETHERTYPE_PPPOE:
 		pppoe_input(ifp, m);
 		return;
-#endif /* NPPPOE > 0 */
+#endif
+
 	case ETHERTYPE_SLOWPROTOCOLS: {
 		uint8_t subtype;
 
-#if defined(DIAGNOSTIC)
-		if (m->m_pkthdr.len < sizeof(*eh) + sizeof(subtype)) {
-			panic("ether_input: too short slow protocol packet");
-		}
-#endif
+		KASSERTMSG((m->m_pkthdr.len < sizeof(*eh) + sizeof(subtype)),
+			"too short slow protocol packet");
+
 		m_copydata(m, sizeof(*eh), sizeof(subtype), &subtype);
 		switch (subtype) {
 #if NAGR > 0
@@ -752,6 +756,7 @@ ether_input(struct ifnet *ifp, struct mb
 			}
 			break;
 #endif /* NAGR > 0 */
+
 		default:
 			if (subtype == 0 || subtype > 10) {
 				/* illegal value */
@@ -763,6 +768,7 @@ ether_input(struct ifnet *ifp, struct mb
 		}
 		/* FALLTHROUGH */
 	}
+
 	default:
 		if (m->m_flags & M_PROMISC) {
 			m_freem(m);
@@ -776,7 +782,7 @@ ether_input(struct ifnet *ifp, struct mb
 		m->m_flags &= ~M_HASFCS;
 	}
 
-	if (etype > ETHERMTU + sizeof (struct ether_header)) {
+	if (etype > ETHERMTU + sizeof(struct ether_header)) {
 		/* Strip off the Ethernet header. */
 		m_adj(m, ehlen);
 
@@ -799,6 +805,7 @@ ether_input(struct ifnet *ifp, struct mb
 			revarpinput(m);	/* XXX queue? */
 			return;
 #endif
+
 #ifdef INET6
 		case ETHERTYPE_IPV6:
 			if (__predict_false(!in6_present)) {
@@ -812,22 +819,25 @@ ether_input(struct ifnet *ifp, struct mb
 			pktq = ip6_pktq;
 			break;
 #endif
+
 #ifdef NETATALK
 		case ETHERTYPE_ATALK:
 			isr = NETISR_ATALK;
 			inq = &atintrq1;
 			break;
+
 		case ETHERTYPE_AARP:
-			/* probably this should be done with a NETISR as well */
-			aarpinput(ifp, m); /* XXX */
+			aarpinput(ifp, m); /* XXX queue? */
 			return;
-#endif /* NETATALK */
+#endif
+
 #ifdef MPLS
 		case ETHERTYPE_MPLS:
 			isr = NETISR_MPLS;
 			inq = &mplsintrq;
 			break;
 #endif
+
 		default:
 			m_freem(m);
 			return;
@@ -1013,6 +1023,7 @@ ether_ifdetach(struct ifnet *ifp)
 	ETHER_UNLOCK(ec);
 
 	mutex_obj_free(ec->ec_lock);
+	ec->ec_lock = NULL;
 
 	ifp->if_mowner = NULL;
 	MOWNER_DETACH(&ec->ec_rx_mowner);

Reply via email to