Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 15 Aug 2009 22:12:06 GMT
From:      Gabor Pali <pgj@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 167382 for review
Message-ID:  <200908152212.n7FMC6H4038243@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=167382

Change 167382 by pgj@petymeg-current on 2009/08/15 22:11:25

	Re-add a libnetstat-based version of size_cols_rtentry() to set
	the corresponding column widths properly.

Affected files ...

.. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/route.c#5 edit

Differences ...

==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/route.c#5 (text+ko) ====

@@ -43,6 +43,7 @@
 __FBSDID("$FreeBSD: src/usr.bin/netstat/route.c,v 1.93 2008/12/15 06:10:57 qingli Exp $");
 
 #include <sys/types.h>
+#include <sys/param.h>
 #include <netipx/ipx.h>
 #include <netinet/in.h>
 
@@ -88,6 +89,7 @@
 
 };
 static void size_cols(int ef, struct route_type_iterator *);
+static void size_cols_rtentry(const struct route_type *);
 static const char *fmt_flags(int f);
 static void p_rtnode(const struct routenode_type *);
 
@@ -207,8 +209,10 @@
 #endif /*INET6*/
 
 void
-size_cols(int ef, __unused struct route_type_iterator *rtip)
+size_cols(int ef, struct route_type_iterator *rtip)
 {
+	const struct route_type *rtp;
+
 	wid_dst = WID_DST_DEFAULT(ef);
 	wid_gw = WID_GW_DEFAULT(ef);
 	wid_flags = 6;
@@ -218,10 +222,47 @@
 	wid_if = WID_IF_DEFAULT(ef);
 	wid_expire = 6;
 
-/*
-	if (Wflag)
-		size_cols_tree(rtip);
-*/
+	if (!Wflag)
+		return;
+
+	for (rtp = netstat_rti_first(rtip); rtp != NULL;
+	    rtp = netstat_rti_next(rtip)) {
+		size_cols_rtentry(rtp);
+	}
+}
+
+void
+size_cols_rtentry(const struct route_type *rtp)
+{
+	const struct routeaddr_type *addr;
+	int len;
+	char buffer[100];
+
+	addr = netstat_rt_get_destination(rtp);
+	if (addr != NULL) {
+		len = strlen(netstat_rat_get_name(addr, numeric_addr));
+		wid_dst = MAX(wid_dst, len);
+	}
+	addr = netstat_rt_get_gateway(rtp);
+	if (addr != NULL) {
+		len = strlen(netstat_rat_get_name(addr, numeric_addr));
+		wid_gw = MAX(wid_gw, len);
+	}
+	len = strlen(fmt_flags(netstat_rt_get_flags(rtp)));
+	wid_flags = MAX(wid_flags, len);
+	len = snprintf(buffer, sizeof(buffer), "%ju", netstat_rt_get_refs(rtp));
+	wid_refs = MAX(wid_refs, len);
+	len = snprintf(buffer, sizeof(buffer), "%ju", netstat_rt_get_used(rtp));
+	wid_use = MAX(wid_use, len);
+	len = snprintf(buffer, sizeof(buffer), "%u", netstat_rt_get_mtu(rtp));
+	wid_mtu = MAX(wid_mtu, len);
+	len = strlen(netstat_rt_get_interface(rtp));
+	wid_if = MAX(wid_if, len);
+	if (netstat_rt_get_flags(rtp) & NETSTAT_RT_EXPIRES) {
+		len = snprintf(buffer, sizeof(buffer), "%ju",
+		    netstat_rt_get_expire(rtp));
+		wid_expire = MAX(wid_expire, len);
+	}
 }
 
 static const char *



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200908152212.n7FMC6H4038243>