svn commit: r265096 - head/usr.bin/netstat

Alexander V. Chernikov melifaro at FreeBSD.org
Tue Apr 29 16:51:29 UTC 2014


Author: melifaro
Date: Tue Apr 29 16:51:28 2014
New Revision: 265096
URL: http://svnweb.freebsd.org/changeset/base/265096

Log:
  Fix "netstat -gW" behavior broken in r259638.
  netstat has two options for printing multicast tables:
  sysctl (the default one for live systems) and kvm-based one (for cores).
  It looks like kvm-based one hasn't been working since it's been introduced
  in r190012 due to absence of mfctablesize kernel symbol.
  Check for all ipv4-multicast symbols being correctly resolved was introduced
  in r259638 regardless of 'live' value leading to "No IPv4 MROUTING" error
  message.
  
  Reported by:	Olivier Cochard-Labbé
  MFC after:	1 week

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

Modified: head/usr.bin/netstat/mroute.c
==============================================================================
--- head/usr.bin/netstat/mroute.c	Tue Apr 29 15:25:57 2014	(r265095)
+++ head/usr.bin/netstat/mroute.c	Tue Apr 29 16:51:28 2014	(r265096)
@@ -236,16 +236,7 @@ mroutepr()
 	 * functionality was deprecated, as PIM does not use it.
 	 */
 	maxvif = 0;
-
-	kresolve_list(mrl);
-	pmfchashtbl = mrl[N_MFCHASHTBL].n_value;
-	pmfctablesize = mrl[N_MFCTABLESIZE].n_value;
-	pviftbl = mrl[N_VIFTABLE].n_value;
-
-	if (pmfchashtbl == 0 || pmfctablesize == 0 || pviftbl == 0) {
-		fprintf(stderr, "No IPv4 MROUTING kernel support.\n");
-		return;
-	}
+	pmfchashtbl = pmfctablesize = pviftbl = 0;
 
 	len = sizeof(viftable);
 	if (live) {
@@ -254,8 +245,19 @@ mroutepr()
 			warn("sysctl: net.inet.ip.viftable");
 			return;
 		}
-	} else
+	} else {
+		kresolve_list(mrl);
+		pmfchashtbl = mrl[N_MFCHASHTBL].n_value;
+		pmfctablesize = mrl[N_MFCTABLESIZE].n_value;
+		pviftbl = mrl[N_VIFTABLE].n_value;
+
+		if (pmfchashtbl == 0 || pmfctablesize == 0 || pviftbl == 0) {
+			fprintf(stderr, "No IPv4 MROUTING kernel support.\n");
+			return;
+		}
+
 		kread(pviftbl, (char *)viftable, sizeof(viftable));
+	}
 
 	banner_printed = 0;
 	for (vifi = 0, v = viftable; vifi < MAXVIFS; ++vifi, ++v) {


More information about the svn-src-head mailing list