Unsyncable patches that are nevertheless already in upstream's CVS in the
following revisions:

* 1.57: Enable netstat -s for IPv6 (Debian Bug #453859 from Varun Chandramohan)
* 1.55: use new page aliged proc_fopen for address families

Updated on 2014/05/11 to fix #541172
 (patch by Hannes von Haugwitz <hannes@vonhaugwitz.com>).

--- a/netstat.c
+++ b/netstat.c
@@ -6,7 +6,7 @@
  *              NET-3 Networking Distribution for the LINUX operating
  *              system.
  *
- * Version:     $Id: netstat.c,v 1.54 2007/12/01 18:12:34 ecki Exp $
+ * Version:     $Id: netstat.c,v 1.55 2007/12/01 19:00:40 ecki Exp $
  *
  * Authors:     Fred Baumgarten, <dc6iq@insu1.etec.uni-karlsruhe.de>
  *              Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
@@ -94,6 +94,7 @@
 #include "sockets.h"
 #include "interface.h"
 #include "util.h"
+#include "proc.h"
 
 #define PROGNAME_WIDTH 20
 
@@ -104,6 +105,8 @@
 /* prototypes for statistics.c */
 void parsesnmp(int, int, int);
 void inittab(void);
+void parsesnmp6(int, int, int);
+void inittab6(void);
 
 typedef enum {
     SS_FREE = 0,		/* not allocated                */
@@ -153,7 +156,7 @@
 FILE *procinfo;
 
 #define INFO_GUTS1(file,name,proc)			\
-  procinfo = fopen((file), "r");			\
+  procinfo = proc_fopen((file));			\
   if (procinfo == NULL) {				\
     if (errno != ENOENT) {				\
       perror((file));					\
@@ -174,7 +177,7 @@
 #if HAVE_AFINET6
 #define INFO_GUTS2(file,proc)				\
   lnr = 0;						\
-  procinfo = fopen((file), "r");		       	\
+  procinfo = proc_fopen((file));		       	\
   if (procinfo != NULL) {				\
     do {						\
       if (fgets(buffer, sizeof(buffer), procinfo))	\
@@ -454,7 +457,7 @@
     char buffer[256], dev[16];
     int st, vs, vr, sendq, recvq, ret;
 
-    f = fopen(_PATH_PROCNET_NR, "r");
+    f = proc_fopen(_PATH_PROCNET_NR);
     if (f == NULL) {
 	if (errno != ENOENT) {
 	    perror(_PATH_PROCNET_NR);
@@ -650,7 +653,7 @@
 #if HAVE_AFX25
 static int x25_info(void)
 {
-       FILE *f=fopen(_PATH_PROCNET_X25, "r");
+       FILE *f=proc_fopen(_PATH_PROCNET_X25);
        char buffer[256],dev[16];
        int st,vs,vr,sendq,recvq,lci;
        static char *x25_state[5]=
@@ -661,7 +664,7 @@
                "ESTABLISHED",
                "RECOVERY"
        };
-       if(!(f=fopen(_PATH_PROCNET_X25, "r")))
+       if(!(f=proc_fopen(_PATH_PROCNET_X25)))
        {
                if (errno != ENOENT) {
                        perror(_PATH_PROCNET_X25);
@@ -1269,7 +1272,7 @@
 	N_("ESTABLISHED"),
 	N_("RECOVERY")
     };
-    if (!(f = fopen(_PATH_PROCNET_AX25, "r"))) {
+    if (!(f = proc_fopen(_PATH_PROCNET_AX25))) {
 	if (errno != ENOENT) {
 	    perror(_PATH_PROCNET_AX25);
 	    return (-1);
@@ -1365,13 +1368,13 @@
     unsigned sport = 0, dport = 0;
     struct stat s;
     
-    f = fopen(_PATH_PROCNET_IPX_SOCKET1, "r");
+    f = proc_fopen(_PATH_PROCNET_IPX_SOCKET1);
     if (!f) {
         if (errno != ENOENT) {
             perror(_PATH_PROCNET_IPX_SOCKET1);
             return (-1);
         }
-        f = fopen(_PATH_PROCNET_IPX_SOCKET2, "r");
+        f = proc_fopen(_PATH_PROCNET_IPX_SOCKET2);
 
         /* We need to check for directory */
         if (f) {
@@ -1728,9 +1731,30 @@
     }
 
     if (flag_sta) {
-        inittab();
-	parsesnmp(flag_raw, flag_tcp, flag_udp);
-	exit(0);
+        char *tmp1, *tmp2;
+        char buf[256];
+        if (!afname[0]) {
+            inittab();
+            parsesnmp(flag_raw, flag_tcp, flag_udp);
+        } else {
+            safe_strncpy(buf, afname, sizeof(buf));
+            tmp1 = buf;
+            if ((tmp2 = index(tmp1, ',')))
+                 printf("Multiple interface\n");
+            else if(!strncmp(buf,"inet6",5)) {
+#if HAVE_AFINET6
+                 inittab6();
+                 parsesnmp6(flag_raw, flag_tcp, flag_udp);
+#else
+                 printf("Address type not supported for stats\n");
+                 exit(1);
+#endif
+            } else {
+                 printf("Address type not supported for stats\n");
+                 exit(1);
+            }
+        }
+        exit(0);
     }
     
     if (flag_rou) {