Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Mar 2019 01:13:00 +0000 (UTC)
From:      "Bjoern A. Zeeb" <bz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r344954 - in head: sys/net sys/netinet usr.bin/netstat
Message-ID:  <201903090113.x291D0oM059858@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bz
Date: Sat Mar  9 01:12:59 2019
New Revision: 344954
URL: https://svnweb.freebsd.org/changeset/base/344954

Log:
  Improve ARP logging.
  
  r344504 added an extra ARP_LOG() call in case of an if_output() failure.
  It turns out IPv4 can be noisy. In order to not spam the console by default:
  (a) add a counter for these events so people can keep better track of how
      often it happens, and
  (b) add a sysctl to select the default ARP_LOG log level and set it to
      INFO avoiding the one (the new) DEBUG level by default.
  
  Claim a spare (1st one after 10 years since the stats were added) in order
  to not break netstat from FreeBSD 12->13 updates in the future.
  
  Reviewed by:		karels
  Differential Revision:	https://reviews.freebsd.org/D19490

Modified:
  head/sys/net/if_arp.h
  head/sys/netinet/if_ether.c
  head/usr.bin/netstat/inet.c

Modified: head/sys/net/if_arp.h
==============================================================================
--- head/sys/net/if_arp.h	Sat Mar  9 00:32:00 2019	(r344953)
+++ head/sys/net/if_arp.h	Sat Mar  9 01:12:59 2019	(r344954)
@@ -105,8 +105,9 @@ struct arpstat {
 	uint64_t rxrequests;	/* # of ARP requests received by this host. */
 	uint64_t rxreplies;	/* # of ARP replies received by this host. */
 	uint64_t received;	/* # of ARP packets received by this host. */
+	uint64_t txerrors;	/* # of ARP requests failed to send. */
 
-	uint64_t arp_spares[4];	/* For either the upper or lower half. */
+	uint64_t arp_spares[3];	/* For either the upper or lower half. */
 	/* Abnormal event and error  counting: */
 	uint64_t dropped;	/* # of packets dropped waiting for a reply. */
 	uint64_t timeouts;	/* # of times with entries removed */

Modified: head/sys/netinet/if_ether.c
==============================================================================
--- head/sys/netinet/if_ether.c	Sat Mar  9 00:32:00 2019	(r344953)
+++ head/sys/netinet/if_ether.c	Sat Mar  9 01:12:59 2019	(r344954)
@@ -161,8 +161,15 @@ SYSCTL_PROC(_net_link_ether_inet, OID_AUTO, garp_rexmi
     "Number of times to retransmit GARP packets;"
     " 0 to disable, maximum of 16");
 
+VNET_DEFINE_STATIC(int, arp_log_level) = LOG_INFO;	/* Min. log(9) level. */
+#define	V_arp_log_level		VNET(arp_log_level)
+SYSCTL_INT(_net_link_ether_arp, OID_AUTO, log_level, CTLFLAG_VNET | CTLFLAG_RW,
+	&VNET_NAME(arp_log_level), 0,
+	"Minimum log(9) level for recording rate limited arp log messages. "
+	"The higher will be log more (emerg=0, info=6 (default), debug=7).");
 #define	ARP_LOG(pri, ...)	do {					\
-	if (ppsratecheck(&arp_lastlog, &arp_curpps, arp_maxpps))	\
+	if ((pri) <= V_arp_log_level &&					\
+	    ppsratecheck(&arp_lastlog, &arp_curpps, arp_maxpps))	\
 		log((pri), "arp: " __VA_ARGS__);			\
 } while (0)
 
@@ -428,9 +435,11 @@ arprequest_internal(struct ifnet *ifp, const struct in
 	m_clrprotoflags(m);	/* Avoid confusing lower layers. */
 	error = (*ifp->if_output)(ifp, m, &sa, &ro);
 	ARPSTAT_INC(txrequests);
-	if (error)
+	if (error) {
+		ARPSTAT_INC(txerrors);
 		ARP_LOG(LOG_DEBUG, "Failed to send ARP packet on %s: %d\n",
 		    if_name(ifp), error);
+	}
 	return (error);
 }
 

Modified: head/usr.bin/netstat/inet.c
==============================================================================
--- head/usr.bin/netstat/inet.c	Sat Mar  9 00:32:00 2019	(r344953)
+++ head/usr.bin/netstat/inet.c	Sat Mar  9 01:12:59 2019	(r344954)
@@ -1044,6 +1044,7 @@ arp_stats(u_long off, const char *name, int af1 __unus
 	xo_emit("\t" m, (uintmax_t)arpstat.f, pluralies(arpstat.f))
 
 	p(txrequests, "{:sent-requests/%ju} {N:/ARP request%s sent}\n");
+	p(txerrors, "{:sent-failures/%ju} {N:/ARP request%s failed to sent}\n");
 	p2(txreplies, "{:sent-replies/%ju} {N:/ARP repl%s sent}\n");
 	p(rxrequests, "{:received-requests/%ju} "
 	    "{N:/ARP request%s received}\n");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201903090113.x291D0oM059858>