svn commit: r355029 - stable/12/usr.bin/netstat
Mike Karels
karels at FreeBSD.org
Sat Nov 23 13:20:25 UTC 2019
Author: karels
Date: Sat Nov 23 13:20:24 2019
New Revision: 355029
URL: https://svnweb.freebsd.org/changeset/base/355029
Log:
MFC r354633:
Fix netstat -gs with ip_mroute module and/or vnet
The code for "netstat -gs -f inet" failed if the kernel namelist did not
include the _mrtstat symbol. However, that symbol is not in a standard
kernel even with the ip_mroute module loaded, where the functionality is
available. It is also not in a kernel with MROUTING but also VIMAGE, as
there can be multiple sets of stats. However, when running the command
on a live system, the symbol is not used; a sysctl is used. Go ahead
and try the sysctl in any case, and complain that IPv4 MROUTING is not
present only if the sysctl fails with ENOENT. Also fail if _mrtstat is
not defined when running on a core file; netstat doesn't know about vnets,
so can only work if MROUTING was included, and VIMAGE was not.
Reviewed by: bz
Modified:
stable/12/usr.bin/netstat/mroute.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/usr.bin/netstat/mroute.c
==============================================================================
--- stable/12/usr.bin/netstat/mroute.c Sat Nov 23 07:06:16 2019 (r355028)
+++ stable/12/usr.bin/netstat/mroute.c Sat Nov 23 13:20:24 2019 (r355029)
@@ -409,14 +409,12 @@ mrt_stats()
mstaddr = nl[N_MRTSTAT].n_value;
- if (mstaddr == 0) {
- fprintf(stderr, "No IPv4 MROUTING kernel support.\n");
- return;
- }
-
if (fetch_stats("net.inet.ip.mrtstat", mstaddr, &mrtstat,
- sizeof(mrtstat), kread_counters) != 0)
+ sizeof(mrtstat), kread_counters) != 0) {
+ if ((live && errno == ENOENT) || (!live && mstaddr == 0))
+ fprintf(stderr, "No IPv4 MROUTING kernel support.\n");
return;
+ }
xo_emit("{T:IPv4 multicast forwarding}:\n");
More information about the svn-src-all
mailing list