626e1f7
diff -up net-tools-1.60/man/en_US/netstat.8.interface net-tools-1.60/man/en_US/netstat.8
626e1f7
--- net-tools-1.60/man/en_US/netstat.8.interface	2011-12-06 12:30:47.028302044 +0100
626e1f7
+++ net-tools-1.60/man/en_US/netstat.8	2011-12-06 12:30:47.035301954 +0100
626e1f7
@@ -46,9 +46,9 @@ netstat \- Print network connections, ro
626e1f7
 .RB [delay]
626e1f7
 .P
626e1f7
 .B netstat
626e1f7
-.RB { \-\-interfaces | \-i }
626e1f7
+.RB { \-\-interfaces | \-I | \-i }
626e1f7
 .RB [ \-\-all | \-a ]
626e1f7
-.RB [ \-\-extend | \-e  [ \-\-extend | \-e] ]
626e1f7
+.RB [ \-\-extend | \-e  ]
626e1f7
 .RB [ \-\-verbose | \-v ]
626e1f7
 .RB [ \-\-program | \-p ]
626e1f7
 .RB [ \-\-numeric | \-n ]
626e1f7
@@ -130,8 +130,8 @@ and
626e1f7
 produce the same output.
626e1f7
 .SS "\-\-groups , \-g"
626e1f7
 Display multicast group membership information for IPv4 and IPv6.
626e1f7
-.SS "\-\-interfaces, \-i"
626e1f7
-Display a table of all network interfaces.
626e1f7
+.SS "\-\-interfaces=\fIiface \fR, \fB\-I=\fIiface \fR, \fB\-i"
626e1f7
+Display a table of all network interfaces, or the specified \fIiface\fR.
626e1f7
 .SS "\-\-masquerade , \-M"
626e1f7
 Display a list of masqueraded connections.
626e1f7
 .SS "\-\-statistics , \-s"
626e1f7
diff -up net-tools-1.60/netstat.c.interface net-tools-1.60/netstat.c
626e1f7
--- net-tools-1.60/netstat.c.interface	2011-12-06 12:30:46.877303930 +0100
626e1f7
+++ net-tools-1.60/netstat.c	2011-12-06 12:32:32.845979140 +0100
626e1f7
@@ -135,6 +135,7 @@ char *Release = RELEASE, *Version = "net
cvsdist 14587f6
 #define E_IOCTL -3
cvsdist 14587f6
 
cvsdist 14587f6
 int flag_int = 0;
cvsdist 14587f6
+char *flag_int_name = NULL;
cvsdist 14587f6
 int flag_rou = 0;
cvsdist 14587f6
 int flag_mas = 0;
cvsdist 14587f6
 int flag_sta = 0;
626e1f7
@@ -1611,6 +1612,7 @@ static int ipx_info(void)
cvsdist 14587f6
 static int iface_info(void)
cvsdist 14587f6
 {
cvsdist 14587f6
     static int count=0;
cvsdist 14587f6
+    struct interface *ife = NULL;
cvsdist 14587f6
 
cvsdist 14587f6
     if (skfd < 0) {
cvsdist 14587f6
 	if ((skfd = sockets_open(0)) < 0) {
626e1f7
@@ -1625,7 +1627,11 @@ static int iface_info(void)
cvsdist 14587f6
 	    printf(_("Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
cvsdist 14587f6
     }
cvsdist 14587f6
 
cvsdist 14587f6
-    if (for_all_interfaces(do_if_print, &flag_all) < 0) {
cvsdist 14587f6
+    if (flag_int_name) {
cvsdist 14587f6
+        ife = lookup_interface(flag_int_name);
cvsdist 14587f6
+        do_if_print(ife, &flag_all);
cvsdist 14587f6
+    }
cvsdist 14587f6
+    else if (for_all_interfaces(do_if_print, &flag_all) < 0) {
cvsdist 14587f6
 	perror(_("missing interface information"));
cvsdist 14587f6
 	exit(1);
cvsdist 14587f6
     }
626e1f7
@@ -1651,9 +1657,10 @@ static void usage(void)
cvsdist 14587f6
 {
626e1f7
     fprintf(stderr, _("usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}\n"));
626e1f7
     fprintf(stderr, _("       netstat [-vWnNcaeol] [<Socket> ...]\n"));
626e1f7
-    fprintf(stderr, _("       netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]\n\n"));
626e1f7
+    fprintf(stderr, _("       netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]\n\n"));
cvsdist 14587f6
 
626e1f7
     fprintf(stderr, _("        -r, --route              display routing table\n"));
626e1f7
+    fprintf(stderr, _("        -I, --interfaces=<Iface> display interface table for <Iface>\n"));
626e1f7
     fprintf(stderr, _("        -i, --interfaces         display interface table\n"));
626e1f7
     fprintf(stderr, _("        -g, --groups             display multicast group memberships\n"));
626e1f7
     fprintf(stderr, _("        -s, --statistics         display networking statistics (like SNMP)\n"));
626e1f7
@@ -1693,7 +1700,7 @@ int main
cvsdist 14587f6
     {
cvsdist 14587f6
 	AFTRANS_OPTS,
cvsdist 14587f6
 	{"version", 0, 0, 'V'},
cvsdist 14587f6
-	{"interfaces", 0, 0, 'i'},
626e1f7
+	{"interfaces", 2, 0, 'I'},
cvsdist 14587f6
 	{"help", 0, 0, 'h'},
cvsdist 14587f6
 	{"route", 0, 0, 'r'},
cvsdist 14587f6
 #if HAVE_FW_MASQUERADE
626e1f7
@@ -1734,7 +1741,7 @@ int main
cvsdist 14587f6
     getroute_init();		/* Set up AF routing support */
cvsdist 14587f6
 
cvsdist 14587f6
     afname[0] = '\0';
626e1f7
-    while ((i = getopt_long(argc, argv, "A:CFMacdeghilnNoprsStuUvVWwx64?", longopts, &lop)) != EOF)
626e1f7
+    while ((i = getopt_long(argc, argv, "A:CFMacdeghiI::lnNoprsStuUvVWwx64?", longopts, &lop)) != EOF)
cvsdist 14587f6
 	switch (i) {
cvsdist 14587f6
 	case -1:
cvsdist 14587f6
 	    break;
626e1f7
@@ -1775,6 +1782,13 @@ int main
626e1f7
 	case 'p':
cvsdist 14587f6
 	    flag_prg++;
cvsdist 14587f6
 	    break;
626e1f7
+	case 'I':
626e1f7
+	    if (optarg && strcmp(optarg, "(null)"))
626e1f7
+		if (optarg[0] == '=') optarg++;
626e1f7
+	    if (optarg && strcmp(optarg, "(null)"))
626e1f7
+		flag_int_name = strdup(optarg);
626e1f7
+	    flag_int++;
626e1f7
+	    break;
cvsdist 14587f6
 	case 'i':
cvsdist 14587f6
 	    flag_int++;
cvsdist 14587f6
 	    break;