summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorFlorian Obser <florian@cvs.openbsd.org>2018-10-13 18:36:02 +0000
committerFlorian Obser <florian@cvs.openbsd.org>2018-10-13 18:36:02 +0000
commitb762991ec12e9c680d393b790008383903a39132 (patch)
treeef14c3fde7e36f0030e2a050d6d4e85aa0cd45d5 /sys
parentf38427f6f6febf3502e63e7c23555879c0690194 (diff)
Expose net.inet.ip.arpq.drops to help debug what's going on when a lot
of packets are being dropped but non of the other counters are increasing. From Daniel Hokka Zakrisson (daniel AT hozac DOT com), thanks! OK florian, phessler
Diffstat (limited to 'sys')
-rw-r--r--sys/netinet/in.h7
-rw-r--r--sys/netinet/ip_input.c10
2 files changed, 13 insertions, 4 deletions
diff --git a/sys/netinet/in.h b/sys/netinet/in.h
index 5f7fb9e8a8c..5190efc0206 100644
--- a/sys/netinet/in.h
+++ b/sys/netinet/in.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: in.h,v 1.132 2018/09/11 21:04:03 bluhm Exp $ */
+/* $OpenBSD: in.h,v 1.133 2018/10/13 18:36:01 florian Exp $ */
/* $NetBSD: in.h,v 1.20 1996/02/13 23:41:47 christos Exp $ */
/*
@@ -688,7 +688,8 @@ struct ip_mreq {
#define IPCTL_MRTVIF 38
#define IPCTL_ARPTIMEOUT 39
#define IPCTL_ARPDOWN 40
-#define IPCTL_MAXID 41
+#define IPCTL_ARPQUEUE 41
+#define IPCTL_MAXID 42
#define IPCTL_NAMES { \
{ 0, 0 }, \
@@ -732,6 +733,7 @@ struct ip_mreq {
{ "mrtvif", CTLTYPE_STRUCT }, \
{ "arptimeout", CTLTYPE_INT }, \
{ "arpdown", CTLTYPE_INT }, \
+ { "arpq", CTLTYPE_NODE }, \
}
#define IPCTL_VARS { \
NULL, \
@@ -775,6 +777,7 @@ struct ip_mreq {
NULL, \
&arpt_keep, \
&arpt_down, \
+ NULL, \
}
#endif /* __BSD_VISIBLE */
diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c
index ced863c761a..30e7a2c71eb 100644
--- a/sys/netinet/ip_input.c
+++ b/sys/netinet/ip_input.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_input.c,v 1.341 2018/09/11 21:04:03 bluhm Exp $ */
+/* $OpenBSD: ip_input.c,v 1.342 2018/10/13 18:36:01 florian Exp $ */
/* $NetBSD: ip_input.c,v 1.30 1996/03/16 23:53:58 christos Exp $ */
/*
@@ -120,6 +120,8 @@ int ip_sysctl_ipstat(void *, size_t *, void *);
static struct mbuf_queue ipsend_mq;
+extern struct niqueue arpinq;
+
int ip_ours(struct mbuf **, int *, int, int);
int ip_local(struct mbuf **, int *, int, int);
int ip_dooptions(struct mbuf *, struct ifnet *);
@@ -1579,7 +1581,8 @@ ip_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp,
#endif
/* Almost all sysctl names at this level are terminal. */
- if (namelen != 1 && name[0] != IPCTL_IFQUEUE)
+ if (namelen != 1 && name[0] != IPCTL_IFQUEUE &&
+ name[0] != IPCTL_ARPQUEUE)
return (ENOTDIR);
switch (name[0]) {
@@ -1639,6 +1642,9 @@ ip_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp,
case IPCTL_IFQUEUE:
return (sysctl_niq(name + 1, namelen - 1,
oldp, oldlenp, newp, newlen, &ipintrq));
+ case IPCTL_ARPQUEUE:
+ return (sysctl_niq(name + 1, namelen - 1,
+ oldp, oldlenp, newp, newlen, &arpinq));
case IPCTL_STATS:
return (ip_sysctl_ipstat(oldp, oldlenp, newp));
#ifdef MROUTING