Author: karels
Date: Tue Nov 12 01:03:08 2019
New Revision: 354633
URL: https://svnweb.freebsd.org/changeset/base/354633

Log:
  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
  MFC after:    1 week
  Differential Revision:        https://reviews.freebsd.org/D22311

Modified:
  head/usr.bin/netstat/mroute.c

Modified: head/usr.bin/netstat/mroute.c
==============================================================================
--- head/usr.bin/netstat/mroute.c       Tue Nov 12 00:32:33 2019        
(r354632)
+++ head/usr.bin/netstat/mroute.c       Tue Nov 12 01:03:08 2019        
(r354633)
@@ -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");
 
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to