From owner-svn-src-all@freebsd.org  Sat Mar  9 01:13:01 2019
Return-Path: <owner-svn-src-all@freebsd.org>
Delivered-To: svn-src-all@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id F18D415306BE;
 Sat,  9 Mar 2019 01:13:00 +0000 (UTC) (envelope-from bz@FreeBSD.org)
Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org
 [IPv6:2610:1c1:1:606c::19:3])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 server-signature RSA-PSS (4096 bits)
 client-signature RSA-PSS (4096 bits) client-digest SHA256)
 (Client CN "mxrelay.nyi.freebsd.org",
 Issuer "Let's Encrypt Authority X3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 97D1A95372;
 Sat,  9 Mar 2019 01:13:00 +0000 (UTC) (envelope-from bz@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8C40F38B1;
 Sat,  9 Mar 2019 01:13:00 +0000 (UTC) (envelope-from bz@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x291D0O3059860;
 Sat, 9 Mar 2019 01:13:00 GMT (envelope-from bz@FreeBSD.org)
Received: (from bz@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id x291D0oM059858;
 Sat, 9 Mar 2019 01:13:00 GMT (envelope-from bz@FreeBSD.org)
Message-Id: <201903090113.x291D0oM059858@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: bz set sender to bz@FreeBSD.org
 using -f
From: "Bjoern A. Zeeb" <bz@FreeBSD.org>
Date: Sat, 9 Mar 2019 01:13:00 +0000 (UTC)
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
X-SVN-Group: head
X-SVN-Commit-Author: bz
X-SVN-Commit-Paths: in head: sys/net sys/netinet usr.bin/netstat
X-SVN-Commit-Revision: 344954
X-SVN-Commit-Repository: base
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Rspamd-Queue-Id: 97D1A95372
X-Spamd-Bar: --
Authentication-Results: mx1.freebsd.org
X-Spamd-Result: default: False [-2.98 / 15.00];
 local_wl_from(0.00)[FreeBSD.org];
 NEURAL_HAM_MEDIUM(-1.00)[-1.000,0];
 NEURAL_HAM_LONG(-1.00)[-1.000,0];
 NEURAL_HAM_SHORT(-0.98)[-0.979,0];
 ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]
X-BeenThere: svn-src-all@freebsd.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "SVN commit messages for the entire src tree \(except for &quot;
 user&quot; and &quot; projects&quot; \)" <svn-src-all.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-all>,
 <mailto:svn-src-all-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-all/>
List-Post: <mailto:svn-src-all@freebsd.org>
List-Help: <mailto:svn-src-all-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-all>,
 <mailto:svn-src-all-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 09 Mar 2019 01:13:01 -0000

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");