Module Name:    src
Committed By:   kefren
Date:           Tue Jun 21 19:42:46 UTC 2011

Modified Files:
        src/usr.bin/netstat: netstat.h route.c show.c

Log Message:
print multiple tags if exists, comma separated


To generate a diff of this commit:
cvs rdiff -u -r1.42 -r1.43 src/usr.bin/netstat/netstat.h
cvs rdiff -u -r1.77 -r1.78 src/usr.bin/netstat/route.c
cvs rdiff -u -r1.13 -r1.14 src/usr.bin/netstat/show.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/netstat/netstat.h
diff -u src/usr.bin/netstat/netstat.h:1.42 src/usr.bin/netstat/netstat.h:1.43
--- src/usr.bin/netstat/netstat.h:1.42	Tue May  3 18:28:46 2011
+++ src/usr.bin/netstat/netstat.h	Tue Jun 21 19:42:45 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: netstat.h,v 1.42 2011/05/03 18:28:46 dyoung Exp $	*/
+/*	$NetBSD: netstat.h,v 1.43 2011/06/21 19:42:45 kefren Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -175,4 +175,6 @@
 
 kvm_t *get_kvmd(void);
 
+char	*mpls_ntoa(const struct sockaddr *);
+
 #define PLEN    (LONG_BIT / 4 + 2)

Index: src/usr.bin/netstat/route.c
diff -u src/usr.bin/netstat/route.c:1.77 src/usr.bin/netstat/route.c:1.78
--- src/usr.bin/netstat/route.c:1.77	Fri Feb  4 14:31:23 2011
+++ src/usr.bin/netstat/route.c	Tue Jun 21 19:42:45 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: route.c,v 1.77 2011/02/04 14:31:23 martin Exp $	*/
+/*	$NetBSD: route.c,v 1.78 2011/06/21 19:42:45 kefren Exp $	*/
 
 /*
  * Copyright (c) 1983, 1988, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "from: @(#)route.c	8.3 (Berkeley) 3/9/94";
 #else
-__RCSID("$NetBSD: route.c,v 1.77 2011/02/04 14:31:23 martin Exp $");
+__RCSID("$NetBSD: route.c,v 1.78 2011/06/21 19:42:45 kefren Exp $");
 #endif
 #endif /* not lint */
 
@@ -270,13 +270,15 @@
 	putchar((rt->rt_rmx.rmx_locks & RTV_MTU) ? 'L' : ' ');
 	if (tagflag == 1) {
 		if (rt->rt_tag != NULL) {
-			const struct sockaddr_mpls *sampls = 
-			    (const struct sockaddr_mpls*)kgetsa(rt->rt_tag);
-			union mpls_shim shim;
-
-			if (sampls->smpls_family == AF_MPLS) {
-				shim.s_addr = ntohl(sampls->smpls_addr.s_addr);
-				printf("%7d", shim.shim.label);
+			const struct sockaddr *tagsa = kgetsa(rt->rt_tag);
+			char *tagstr;
+
+			if (tagsa->sa_family == AF_MPLS) {
+				tagstr = mpls_ntoa(tagsa);
+				if (strlen(tagstr) < 7)
+					printf("%7s", tagstr);
+				else
+					printf("%s", tagstr);
 			}
 			else
 				printf("%7s", "-");

Index: src/usr.bin/netstat/show.c
diff -u src/usr.bin/netstat/show.c:1.13 src/usr.bin/netstat/show.c:1.14
--- src/usr.bin/netstat/show.c:1.13	Fri Feb  4 14:31:23 2011
+++ src/usr.bin/netstat/show.c	Tue Jun 21 19:42:45 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: show.c,v 1.13 2011/02/04 14:31:23 martin Exp $	*/
+/*	$NetBSD: show.c,v 1.14 2011/06/21 19:42:45 kefren Exp $	*/
 /*	$OpenBSD: show.c,v 1.1 2006/05/27 19:16:37 claudio Exp $	*/
 
 /*
@@ -61,7 +61,6 @@
 
 char	*any_ntoa(const struct sockaddr *);
 char	*link_print(struct sockaddr *);
-char	*mpls_ntoa(const struct sockaddr *); 
 
 #define PFKEYV2_CHUNK sizeof(u_int64_t)
 
@@ -382,17 +381,17 @@
 static void
 p_tag(const struct sockaddr *sa)
 {
-	const struct sockaddr_mpls *sampls =
-	    (const struct sockaddr_mpls *)sa;
-	union mpls_shim mshim;
+	char *line;
 
 	if (sa == NULL || sa->sa_family != AF_MPLS) {
 		printf("%7s", "-");
 		return;
 	}
-
-	mshim.s_addr = ntohl(sampls->smpls_addr.s_addr);
-	printf("%7d", mshim.shim.label);
+	line = mpls_ntoa(sa);
+	if (strlen(line) < 7)
+		printf("%7s", line);
+	else
+		printf("%s", line);
 }
 
 static char line[MAXHOSTNAMELEN];
@@ -718,15 +717,22 @@
 char *
 mpls_ntoa(const struct sockaddr *sa)
 {
-	static char obuf[100];
-	const struct sockaddr_mpls *sm;
+	static char obuf[16];
+	const union mpls_shim *pms;
 	union mpls_shim ms;
+	int psize = sizeof(struct sockaddr_mpls);
 
-	sm = (const struct sockaddr_mpls*)sa;
-	ms.s_addr = ntohl(sm->smpls_addr.s_addr);
+	pms = &((const struct sockaddr_mpls*)sa)->smpls_addr;
+	ms.s_addr = ntohl(pms->s_addr);
 
-	snprintf(obuf, sizeof(obuf), "%u",
-	     ms.shim.label);
+	snprintf(obuf, sizeof(obuf), "%u", ms.shim.label);
 
+	while(psize < sa->sa_len) {
+		pms++;
+		ms.s_addr = ntohl(pms->s_addr);
+		snprintf(obuf, sizeof(obuf), "%s,%u", obuf,
+		    ms.shim.label);
+		psize+=sizeof(ms);
+	}
 	return obuf;
 }

Reply via email to