cvsdist 14587f6
--- net-tools-1.60/netstat.c.interface	2003-08-25 17:06:30.000000000 +0200
cvsdist 14587f6
+++ net-tools-1.60/netstat.c	2003-08-25 17:08:41.000000000 +0200
cvsdist 14587f6
@@ -129,6 +129,7 @@
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;
cvsdist 14587f6
@@ -1441,6 +1442,7 @@
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) {
cvsdist 14587f6
@@ -1455,7 +1457,11 @@
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
     }
cvsdist 14587f6
@@ -1481,30 +1487,31 @@
cvsdist 14587f6
 {
cvsdist 14587f6
     fprintf(stderr, _("usage: netstat [-veenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}\n"));
cvsdist 14587f6
     fprintf(stderr, _("       netstat [-vnNcaeol] [<Socket> ...]\n"));
cvsdist 14587f6
-    fprintf(stderr, _("       netstat { [-veenNac] -i | [-cnNe] -M | -s } [delay]\n\n"));
cvsdist 14587f6
+    fprintf(stderr, _("       netstat { [-veenNac] -i[<Iface>] | [-cnNe] -M | -s } [delay]\n\n"));
cvsdist 14587f6
 
cvsdist 14587f6
-    fprintf(stderr, _("        -r, --route              display routing table\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -i, --interfaces         display interface table\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -g, --groups             display multicast group memberships\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -s, --statistics         display networking statistics (like SNMP)\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -r, --route                display routing table\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -i, --interfaces=[<Iface>] display interface table\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -g, --groups               display multicast group memberships\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -s, --statistics           display networking statistics (like SNMP)\n"));
cvsdist 14587f6
 #if HAVE_FW_MASQUERADE
cvsdist 14587f6
-    fprintf(stderr, _("        -M, --masquerade         display masqueraded connections\n\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -M, --masquerade           display masqueraded connections\n\n"));
cvsdist 14587f6
 #endif
cvsdist 14587f6
-    fprintf(stderr, _("        -v, --verbose            be verbose\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -n, --numeric            don't resolve names\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        --numeric-hosts          don't resolve host names\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        --numeric-ports          don't resolve port names\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        --numeric-users          don't resolve user names\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -N, --symbolic           resolve hardware names\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -e, --extend             display other/more information\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -p, --programs           display PID/Program name for sockets\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -c, --continuous         continuous listing\n\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -l, --listening          display listening server sockets\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -a, --all, --listening   display all sockets (default: connected)\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -o, --timers             display timers\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -F, --fib                display Forwarding Information Base (default)\n"));
cvsdist 14587f6
-    fprintf(stderr, _("        -C, --cache              display routing cache instead of FIB\n\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -v, --verbose              be verbose\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -n, --numeric              don't resolve names\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        --numeric-hosts            don't resolve host names\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        --numeric-ports            don't resolve port names\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        --numeric-users            don't resolve user names\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -N, --symbolic             resolve hardware names\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -e, --extend               display other/more information\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -p, --programs             display PID/Program name for sockets\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -c, --continuous           continuous listing\n\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -l, --listening            display listening server sockets\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -a, --all, --listening     display all sockets (default: connected)\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -o, --timers               display timers\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -F, --fib                  display Forwarding Information Base (default)\n"));
cvsdist 14587f6
+    fprintf(stderr, _("        -C, --cache                display routing cache instead of FIB\n\n"));
cvsdist 14587f6
 
cvsdist 14587f6
+    fprintf(stderr, _("  <Iface>: Name of interface to monitor/list.\n"));
cvsdist 14587f6
     fprintf(stderr, _("  <Socket>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom\n"));
cvsdist 14587f6
     fprintf(stderr, _("  <AF>=Use '-A <af>' or '--<af>'; default: %s\n"), DFLT_AF);
cvsdist 14587f6
     fprintf(stderr, _("  List of possible address families (which support routing):\n"));
cvsdist 14587f6
@@ -1522,7 +1529,7 @@
cvsdist 14587f6
     {
cvsdist 14587f6
 	AFTRANS_OPTS,
cvsdist 14587f6
 	{"version", 0, 0, 'V'},
cvsdist 14587f6
-	{"interfaces", 0, 0, 'i'},
cvsdist 14587f6
+	{"interfaces", 2, 0, 'i'},
cvsdist 14587f6
 	{"help", 0, 0, 'h'},
cvsdist 14587f6
 	{"route", 0, 0, 'r'},
cvsdist 14587f6
 #if HAVE_FW_MASQUERADE
cvsdist 14587f6
@@ -1560,7 +1567,7 @@
cvsdist 14587f6
     getroute_init();		/* Set up AF routing support */
cvsdist 14587f6
 
cvsdist 14587f6
     afname[0] = '\0';
cvsdist 14587f6
-    while ((i = getopt_long(argc, argv, "MCFA:acdegphinNorstuVv?wxl", longopts, &lop)) != EOF)
cvsdist 14587f6
+    while ((i = getopt_long(argc, argv, "MCFA:acdegphi::nNorstuVv?wxl", longopts, &lop)) != EOF)
cvsdist 14587f6
 	switch (i) {
cvsdist 14587f6
 	case -1:
cvsdist 14587f6
 	    break;
cvsdist 14587f6
@@ -1602,6 +1609,8 @@
cvsdist 14587f6
 	    flag_prg++;
cvsdist 14587f6
 	    break;
cvsdist 14587f6
 	case 'i':
cvsdist 14587f6
+            if (optarg && strcmp(optarg, "(null)"))
cvsdist 14587f6
+                flag_int_name = strdup(optarg);
cvsdist 14587f6
 	    flag_int++;
cvsdist 14587f6
 	    break;
cvsdist 14587f6
 	case 'n':