Author: karels
Date: Sat Nov 23 13:23:12 2019
New Revision: 355030
URL: https://svnweb.freebsd.org/changeset/base/355030

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/11/usr.bin/netstat/mroute.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/usr.bin/netstat/mroute.c
==============================================================================
--- stable/11/usr.bin/netstat/mroute.c  Sat Nov 23 13:20:24 2019        
(r355029)
+++ stable/11/usr.bin/netstat/mroute.c  Sat Nov 23 13:23:12 2019        
(r355030)
@@ -407,14 +407,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-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to