Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/net ether: count dropped packets on input
details: https://anonhg.NetBSD.org/src/rev/bb3dc098e2c0
branches: trunk
changeset: 943164:bb3dc098e2c0
user: ozaki-r <ozaki-r%NetBSD.org@localhost>
date: Fri Aug 28 06:27:16 2020 +0000
description:
ether: count dropped packets on input
diffstat:
sys/net/if_ethersubr.c | 69 +++++++++++++++++++++----------------------------
1 files changed, 30 insertions(+), 39 deletions(-)
diffs (184 lines):
diff -r 505083ca7e8c -r bb3dc098e2c0 sys/net/if_ethersubr.c
--- a/sys/net/if_ethersubr.c Fri Aug 28 06:25:52 2020 +0000
+++ b/sys/net/if_ethersubr.c Fri Aug 28 06:27:16 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ethersubr.c,v 1.286 2020/08/28 06:25:52 ozaki-r Exp $ */
+/* $NetBSD: if_ethersubr.c,v 1.287 2020/08/28 06:27:16 ozaki-r 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.286 2020/08/28 06:25:52 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.287 2020/08/28 06:27:16 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -620,6 +620,7 @@
drop:
m_freem(m);
+ if_statinc(ifp, if_ierrors); /* XXX should have a dedicated counter? */
return;
}
#endif /* defined (LLC) || defined (NETATALK) */
@@ -644,14 +645,12 @@
KASSERT(!cpu_intr_p());
KASSERT((m->m_flags & M_PKTHDR) != 0);
- if ((ifp->if_flags & IFF_UP) == 0) {
- m_freem(m);
- return;
- }
+ if ((ifp->if_flags & IFF_UP) == 0)
+ goto drop;
if (m->m_len < sizeof(*eh)) {
m = m_pullup(m, sizeof(*eh));
if (m == NULL)
- return;
+ goto dropped;
}
#ifdef MBUFTRACE
@@ -682,9 +681,7 @@
}
mutex_exit(&bigpktpps_lock);
#endif
- if_statinc(ifp, if_iqdrops);
- m_freem(m);
- return;
+ goto drop;
}
if (ETHER_IS_MULTICAST(eh->ether_dhost)) {
@@ -695,8 +692,7 @@
if ((ifp->if_flags & IFF_SIMPLEX) == 0 &&
memcmp(CLLADDR(ifp->if_sadl), eh->ether_shost,
ETHER_ADDR_LEN) == 0) {
- m_freem(m);
- return;
+ goto drop;
}
if (memcmp(etherbroadcastaddr,
@@ -766,10 +762,10 @@
* or drop the packet.
*/
vlan_input(ifp, m);
+ return;
#else
- m_freem(m);
+ goto drop;
#endif
- return;
}
/*
@@ -800,13 +796,12 @@
* vlan_input() will either recursively call ether_input()
* or drop the packet.
*/
- if (ec->ec_nvlans != 0)
+ if (ec->ec_nvlans != 0) {
vlan_input(ifp, m);
- else
+ return;
+ } else
#endif
- m_freem(m);
-
- return;
+ goto drop;
}
#if NPPPOE > 0
@@ -822,10 +817,8 @@
case ETHERTYPE_SLOWPROTOCOLS: {
uint8_t subtype;
- if (m->m_pkthdr.len < sizeof(*eh) + sizeof(subtype)) {
- m_freem(m);
- return;
- }
+ if (m->m_pkthdr.len < sizeof(*eh) + sizeof(subtype))
+ goto drop;
m_copydata(m, sizeof(*eh), sizeof(subtype), &subtype);
switch (subtype) {
@@ -848,8 +841,7 @@
default:
if (subtype == 0 || subtype > 10) {
/* illegal value */
- m_freem(m);
- return;
+ goto drop;
}
/* unknown subtype */
break;
@@ -857,10 +849,8 @@
}
/* FALLTHROUGH */
default:
- if (m->m_flags & M_PROMISC) {
- m_freem(m);
- return;
- }
+ if (m->m_flags & M_PROMISC)
+ goto drop;
}
/* If the CRC is still on the packet, trim it off. */
@@ -876,8 +866,7 @@
ether_input_llc(ifp, m, eh);
return;
#else
- m_freem(m);
- return;
+ goto drop;
#endif
}
@@ -906,10 +895,8 @@
#ifdef INET6
case ETHERTYPE_IPV6:
- if (__predict_false(!in6_present)) {
- m_freem(m);
- return;
- }
+ if (__predict_false(!in6_present))
+ goto drop;
#ifdef GATEWAY
if (ip6flow_fastforward(&m))
return;
@@ -937,8 +924,7 @@
#endif
default:
- m_freem(m);
- return;
+ goto drop;
}
if (__predict_true(pktq)) {
@@ -955,11 +941,16 @@
if (__predict_false(!inq)) {
/* Should not happen. */
- m_freem(m);
- return;
+ goto drop;
}
IFQ_ENQUEUE_ISR(inq, m, isr);
+ return;
+
+drop:
+ m_freem(m);
+dropped:
+ if_statinc(ifp, if_ierrors); /* XXX should have a dedicated counter? */
}
/*
Home |
Main Index |
Thread Index |
Old Index