Seems like a reasonable addition.

OK florian@ or if someone gives me an OK I can commit it.

On Wed, Oct 10, 2018 at 03:18:51PM +0200, Daniel Hokka Zakrisson wrote:
> Hi,
> 
> While investigating packet loss through OpenBSD 6.3 firewalls I noticed
> that a lot of packets were getting dropped by pf due to congestion, but
> the net.inet.ip.ifq.drops counter wasn't increasing. After checking all
> other niqueues for drops and not finding any, I applied the following
> patch to expose the remaining ARP queue. This showed a significant
> number of drops, and after setting the maxlen to a much higher value,
> the packet loss vanished.
> 
> Please consider including this as not having the drops counter
> available certainly made debugging harder.
> 
> Best regards,
> Daniel
> 
> Index: sys/netinet/in.h
> ===================================================================
> RCS file: /cvs/src/sys/netinet/in.h,v
> retrieving revision 1.132
> diff -u -r1.132 in.h
> --- sys/netinet/in.h  11 Sep 2018 21:04:03 -0000      1.132
> +++ sys/netinet/in.h  10 Oct 2018 12:02:50 -0000
> @@ -688,7 +688,8 @@
>  #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 @@
>       { "mrtvif", CTLTYPE_STRUCT }, \
>       { "arptimeout", CTLTYPE_INT }, \
>       { "arpdown", CTLTYPE_INT }, \
> +     { "arpq", CTLTYPE_NODE }, \
>  }
>  #define      IPCTL_VARS { \
>       NULL, \
> @@ -775,6 +777,7 @@
>       NULL, \
>       &arpt_keep, \
>       &arpt_down, \
> +     NULL, \
>  }
>  
>  #endif /* __BSD_VISIBLE */
> Index: sys/netinet/ip_input.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/ip_input.c,v
> retrieving revision 1.341
> diff -u -r1.341 ip_input.c
> --- sys/netinet/ip_input.c    11 Sep 2018 21:04:03 -0000
> 1.341 +++ sys/netinet/ip_input.c      10 Oct 2018 12:02:50 -0000
> @@ -120,6 +120,8 @@
>  
>  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 @@
>  #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 @@
>       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
> 

-- 
I'm not entirely sure you are real.

Reply via email to