Hi,

The variable la_hold_total contains the number of packets currently
in the arp queue.  So the sysctl net.inet.ip.arpqueued must be read
only.  In if_ether.c include the header with the decalration of
la_hold_total to ensure that the definition matches.

ok?

bluhm

Index: netinet/if_ether.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/if_ether.c,v
retrieving revision 1.243
diff -u -p -r1.243 if_ether.c
--- netinet/if_ether.c  24 Jun 2020 22:03:43 -0000      1.243
+++ netinet/if_ether.c  23 Apr 2021 17:21:04 -0000
@@ -60,6 +60,7 @@
 #include <netinet/in.h>
 #include <netinet/in_var.h>
 #include <netinet/if_ether.h>
+#include <netinet/ip_var.h>
 #if NCARP > 0
 #include <netinet/ip_carp.h>
 #endif
Index: netinet/ip_input.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/ip_input.c,v
retrieving revision 1.356
diff -u -p -r1.356 ip_input.c
--- netinet/ip_input.c  30 Mar 2021 08:37:10 -0000      1.356
+++ netinet/ip_input.c  23 Apr 2021 17:23:09 -0000
@@ -126,7 +126,6 @@ const struct sysctl_bounded_args ipctl_v
        { IPCTL_IPPORT_MAXQUEUE, &ip_maxqueue, 0, 10000 },
        { IPCTL_MFORWARDING, &ipmforwarding, 0, 1 },
        { IPCTL_MULTIPATH, &ipmultipath, 0, 1 },
-       { IPCTL_ARPQUEUED, &la_hold_total, 0, 1000 },
        { IPCTL_ARPTIMEOUT, &arpt_keep, 0, INT_MAX },
        { IPCTL_ARPDOWN, &arpt_down, 0, INT_MAX },
 };
@@ -1643,6 +1642,8 @@ ip_sysctl(int *name, u_int namelen, void
        case IPCTL_ARPQUEUE:
                return (sysctl_niq(name + 1, namelen - 1,
                    oldp, oldlenp, newp, newlen, &arpinq));
+       case IPCTL_ARPQUEUED:
+               return (sysctl_rdint(oldp, oldlenp, newp, la_hold_total));
        case IPCTL_STATS:
                return (ip_sysctl_ipstat(oldp, oldlenp, newp));
 #ifdef MROUTING

Reply via email to