I am not a fan of this strange behaviour, where the min+max values have additional behaviours. It is too surprising, and surprising often turns into error-prone.
Alexander Bluhm <alexander.bl...@gmx.net> wrote: > On Sun, Apr 25, 2021 at 10:08:08AM -0700, Greg Steuck wrote: > > - { IPCTL_ARPQUEUED, &la_hold_total, 0, 1000 }, > > + { IPCTL_ARPQUEUED, &la_hold_total, 1, 0 }, > > > > Will make la_hold_total read-only via sysctl. > > This feature surprises me. When reading the caller, is is not clear > what it does. The between min and max sematics is quite obvious, > for min > max you have to read the callee. > > It shoud be I sysctl_bounded_arr(9) man page. A comment may also > help. > > { IPCTL_ARPQUEUED, &la_hold_total, 1, 0 }, /* read only */ > > > In the meantime, does this look OK? > > As this feature is already used elsewhere, OK bluhm@. But please > find a way to make it more obvious. When I commited my change, I > did not see, that min > max would solve my problem. > > bluhm > > > diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c > > index 7578303d544..5d43458ac88 100644 > > --- a/sys/netinet/ip_input.c > > +++ b/sys/netinet/ip_input.c > > @@ -126,6 +126,7 @@ const struct sysctl_bounded_args ipctl_vars[] = { > > { IPCTL_IPPORT_MAXQUEUE, &ip_maxqueue, 0, 10000 }, > > { IPCTL_MFORWARDING, &ipmforwarding, 0, 1 }, > > { IPCTL_MULTIPATH, &ipmultipath, 0, 1 }, > > + { IPCTL_ARPQUEUED, &la_hold_total, 1, 0 }, > > { IPCTL_ARPTIMEOUT, &arpt_keep, 0, INT_MAX }, > > { IPCTL_ARPDOWN, &arpt_down, 0, INT_MAX }, > > }; > > @@ -1643,8 +1644,6 @@ ip_sysctl(int *name, u_int namelen, void *oldp, > > size_t *oldlenp, void *newp, > > 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 > > -- > > 2.31.1 >