From eb04ef31571f6c707eacaba6846feeebfab518e6 Mon Sep 17 00:00:00 2001
From: Bernd Eckenfels <net-tools@lina.inka.de>
Date: Thu, 29 May 2003 02:09:14 +0000
Subject: [PATCH] added 'ull' prefix to unsigned long long constants to make
 gcc 3.3 happy

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Upstream-Status: Backport [https://sourceforge.net/p/net-tools/code/ci/eb04ef31571f6c707eacaba6846feeebfab518e6]
---
 lib/interface.c | 299 ++++++++++++++++++++++++++----------------------
 1 file changed, 161 insertions(+), 138 deletions(-)

diff -uNr net-tools-1.60.orig/lib/interface.c net-tools-1.60/lib/interface.c
--- net-tools-1.60.orig/lib/interface.c	2020-06-16 10:04:16.308411879 +0000
+++ net-tools-1.60/lib/interface.c	2020-06-16 10:05:15.697264291 +0000
@@ -23,7 +23,6 @@
 #include <string.h>
 #include <unistd.h>
 #include <ctype.h>
-#include <string.h>
 
 #if HAVE_AFIPX
 #if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1)
@@ -654,6 +653,8 @@
     const char *Rext = "B";
     const char *Text = "B";
 
+    static char flags[200];
+
 #if HAVE_AFIPX
     static struct aftype *ipxtype = NULL;
 #endif
@@ -685,32 +686,68 @@
     if (hw == NULL)
 	hw = get_hwntype(-1);
 
-    printf(_("%-9s Link encap:%s  "), ptr->name, hw->title);
-    /* For some hardware types (eg Ash, ATM) we don't print the 
-       hardware address if it's null.  */
-    if (hw->print != NULL && (! (hw_null_address(hw, ptr->hwaddr) &&
-				  hw->suppress_null_addr)))
-	printf(_("HWaddr %s  "), hw->print(ptr->hwaddr));
-#ifdef IFF_PORTSEL
-    if (ptr->flags & IFF_PORTSEL) {
-	printf(_("Media:%s"), if_port_text[ptr->map.port][0]);
-	if (ptr->flags & IFF_AUTOMEDIA)
-	    printf(_("(auto)"));
-    }
+    sprintf(flags, "flags=%d<", ptr->flags);
+    /* DONT FORGET TO ADD THE FLAGS IN ife_print_short, too */
+    if (ptr->flags == 0)
+       strcat(flags,">");
+    if (ptr->flags & IFF_UP)
+       strcat(flags,_("UP,"));
+    if (ptr->flags & IFF_BROADCAST)
+       strcat(flags,_("BROADCAST,"));
+    if (ptr->flags & IFF_DEBUG)
+       strcat(flags,_("DEBUG,"));
+    if (ptr->flags & IFF_LOOPBACK)
+       strcat(flags,_("LOOPBACK,"));
+    if (ptr->flags & IFF_POINTOPOINT)
+       strcat(flags,_("POINTOPOINT,"));
+    if (ptr->flags & IFF_NOTRAILERS)
+       strcat(flags,_("NOTRAILERS,"));
+    if (ptr->flags & IFF_RUNNING)
+       strcat(flags,_("RUNNING,"));
+    if (ptr->flags & IFF_NOARP)
+       strcat(flags,_("NOARP,"));
+    if (ptr->flags & IFF_PROMISC)
+       strcat(flags,_("PROMISC,"));
+    if (ptr->flags & IFF_ALLMULTI)
+       strcat(flags,_("ALLMULTI,"));
+    if (ptr->flags & IFF_SLAVE)
+       strcat(flags,_("SLAVE,"));
+    if (ptr->flags & IFF_MASTER)
+       strcat(flags,_("MASTER,"));
+    if (ptr->flags & IFF_MULTICAST)
+       strcat(flags,_("MULTICAST,"));
+#ifdef HAVE_DYNAMIC
+    if (ptr->flags & IFF_DYNAMIC)
+       strcat(flags,_("DYNAMIC,"));
+#endif
+    /* DONT FORGET TO ADD THE FLAGS IN ife_print_short */
+    if (flags[strlen(flags)-1] == ',')
+      flags[strlen(flags)-1] = '>';
+    else
+      flags[strlen(flags)-1] = 0;
+      
+
+    printf(_("%s: %s  mtu %d  metric %d"),
+          ptr->name, flags, ptr->mtu, ptr->metric ? ptr->metric : 1);
+#ifdef SIOCSKEEPALIVE
+    if (ptr->outfill || ptr->keepalive)
+       printf(_("  outfill %d  keepalive %d"),
+              ptr->outfill, ptr->keepalive);
 #endif
     printf("\n");
 
 #if HAVE_AFINET
     if (ptr->has_ip) {
-	printf(_("          %s addr:%s "), ap->name,
+        printf(_("        %s %s"), ap->name,
 	       ap->sprint(&ptr->addr, 1));
-	if (ptr->flags & IFF_POINTOPOINT) {
-	    printf(_(" P-t-P:%s "), ap->sprint(&ptr->dstaddr, 1));
-	}
+        printf(_("  netmask %s"), ap->sprint(&ptr->netmask, 1));
 	if (ptr->flags & IFF_BROADCAST) {
-	    printf(_(" Bcast:%s "), ap->sprint(&ptr->broadaddr, 1));
+            printf(_("  broadcast %s"), ap->sprint(&ptr->broadaddr, 1));
 	}
-	printf(_(" Mask:%s\n"), ap->sprint(&ptr->netmask, 1));
+       if (ptr->flags & IFF_POINTOPOINT) {
+           printf(_("  destination %s"), ap->sprint(&ptr->dstaddr, 1));
+       }
+       printf("\n");
     }
 #endif
 
@@ -727,29 +764,30 @@
 			addr6p[0], addr6p[1], addr6p[2], addr6p[3],
 			addr6p[4], addr6p[5], addr6p[6], addr6p[7]);
 		inet6_aftype.input(1, addr6, (struct sockaddr *) &sap);
-		printf(_("          inet6 addr: %s/%d"),
-		 inet6_aftype.sprint((struct sockaddr *) &sap, 1), plen);
-		printf(_(" Scope:"));
-		switch (scope) {
-		case 0:
-		    printf(_("Global"));
-		    break;
-		case IPV6_ADDR_LINKLOCAL:
-		    printf(_("Link"));
-		    break;
-		case IPV6_ADDR_SITELOCAL:
-		    printf(_("Site"));
-		    break;
-		case IPV6_ADDR_COMPATv4:
-		    printf(_("Compat"));
-		    break;
-		case IPV6_ADDR_LOOPBACK:
-		    printf(_("Host"));
-		    break;
-		default:
-		    printf(_("Unknown"));
+		printf(_("        %s %s  prefixlen %d"),
+			inet6_aftype.name, 
+			inet6_aftype.sprint((struct sockaddr *) &sap, 1), 
+			plen);
+		printf(_("  scopeid 0x%x"), scope);
+
+		flags[0] = '<'; flags[1] = 0;
+		if (scope & IPV6_ADDR_COMPATv4) {
+		    	strcat(flags, _("compat,"));
+		    	scope -= IPV6_ADDR_COMPATv4;
 		}
-		printf("\n");
+		if (scope == 0)
+			strcat(flags, _("global,"));
+		if (scope & IPV6_ADDR_LINKLOCAL)
+			strcat(flags, _("link,"));
+		if (scope & IPV6_ADDR_SITELOCAL)
+			strcat(flags, _("site,"));
+		if (scope & IPV6_ADDR_LOOPBACK)
+			strcat(flags, _("host,"));
+		if (flags[strlen(flags)-1] == ',')
+			flags[strlen(flags)-1] = '>';
+		else
+			flags[strlen(flags)-1] = 0;
+		printf("%s\n", flags);
 	    }
 	}
 	fclose(f);
@@ -762,17 +800,17 @@
 
     if (ipxtype != NULL) {
 	if (ptr->has_ipx_bb)
-	    printf(_("          IPX/Ethernet II addr:%s\n"),
-		   ipxtype->sprint(&ptr->ipxaddr_bb, 1));
+	    printf(_("        %s Ethernet-II   %s\n"),
+		   ipxtype->name, ipxtype->sprint(&ptr->ipxaddr_bb, 1));
 	if (ptr->has_ipx_sn)
-	    printf(_("          IPX/Ethernet SNAP addr:%s\n"),
-		   ipxtype->sprint(&ptr->ipxaddr_sn, 1));
+	    printf(_("        %s Ethernet-SNAP %s\n"),
+		   ipxtype->name, ipxtype->sprint(&ptr->ipxaddr_sn, 1));
 	if (ptr->has_ipx_e2)
-	    printf(_("          IPX/Ethernet 802.2 addr:%s\n"),
-		   ipxtype->sprint(&ptr->ipxaddr_e2, 1));
+	    printf(_("        %s Ethernet802.2 %s\n"),
+		   ipxtype->name, ipxtype->sprint(&ptr->ipxaddr_e2, 1));
 	if (ptr->has_ipx_e3)
-	    printf(_("          IPX/Ethernet 802.3 addr:%s\n"),
-		   ipxtype->sprint(&ptr->ipxaddr_e3, 1));
+	    printf(_("        %s Ethernet802.3 %s\n"),
+		   ipxtype->name, ipxtype->sprint(&ptr->ipxaddr_e3, 1));
     }
 #endif
 
@@ -781,7 +819,7 @@
 	ddptype = get_afntype(AF_APPLETALK);
     if (ddptype != NULL) {
 	if (ptr->has_ddp)
-	    printf(_("          EtherTalk Phase 2 addr:%s\n"), ddptype->sprint(&ptr->ddpaddr, 1));
+	    printf(_("        %s %s\n"), ddptype->name, ddptype->sprint(&ptr->ddpaddr, 1));
     }
 #endif
 
@@ -790,53 +828,30 @@
 	ectype = get_afntype(AF_ECONET);
     if (ectype != NULL) {
 	if (ptr->has_econet)
-	    printf(_("          econet addr:%s\n"), ectype->sprint(&ptr->ecaddr, 1));
+	    printf(_("        %s %s\n"), ectype->name, ectype->sprint(&ptr->ecaddr, 1));
     }
 #endif
 
-    printf("          ");
-    /* DONT FORGET TO ADD THE FLAGS IN ife_print_short, too */
-    if (ptr->flags == 0)
-	printf(_("[NO FLAGS] "));
-    if (ptr->flags & IFF_UP)
-	printf(_("UP "));
-    if (ptr->flags & IFF_BROADCAST)
-	printf(_("BROADCAST "));
-    if (ptr->flags & IFF_DEBUG)
-	printf(_("DEBUG "));
-    if (ptr->flags & IFF_LOOPBACK)
-	printf(_("LOOPBACK "));
-    if (ptr->flags & IFF_POINTOPOINT)
-	printf(_("POINTOPOINT "));
-    if (ptr->flags & IFF_NOTRAILERS)
-	printf(_("NOTRAILERS "));
-    if (ptr->flags & IFF_RUNNING)
-	printf(_("RUNNING "));
-    if (ptr->flags & IFF_NOARP)
-	printf(_("NOARP "));
-    if (ptr->flags & IFF_PROMISC)
-	printf(_("PROMISC "));
-    if (ptr->flags & IFF_ALLMULTI)
-	printf(_("ALLMULTI "));
-    if (ptr->flags & IFF_SLAVE)
-	printf(_("SLAVE "));
-    if (ptr->flags & IFF_MASTER)
-	printf(_("MASTER "));
-    if (ptr->flags & IFF_MULTICAST)
-	printf(_("MULTICAST "));
-#ifdef HAVE_DYNAMIC
-    if (ptr->flags & IFF_DYNAMIC)
-	printf(_("DYNAMIC "));
-#endif
-    /* DONT FORGET TO ADD THE FLAGS IN ife_print_short */
-    printf(_(" MTU:%d  Metric:%d"),
-	   ptr->mtu, ptr->metric ? ptr->metric : 1);
-#ifdef SIOCSKEEPALIVE
-    if (ptr->outfill || ptr->keepalive)
-	printf(_("  Outfill:%d  Keepalive:%d"),
-	       ptr->outfill, ptr->keepalive);
+    /* For some hardware types (eg Ash, ATM) we don't print the 
+       hardware address if it's null.  */
+    if (hw->print != NULL && (! (hw_null_address(hw, ptr->hwaddr) &&
+				  hw->suppress_null_addr)))
+	printf(_("        %s %s"), hw->name, hw->print(ptr->hwaddr));
+    else
+	printf(_("        %s"), hw->name);
+    if (ptr->tx_queue_len != -1)
+    	printf(_("  txqueuelen %d"), ptr->tx_queue_len);
+    printf("  (%s)\n", hw->title);
+
+#ifdef IFF_PORTSEL
+    if (ptr->flags & IFF_PORTSEL) {
+	printf(_("        media %s"), if_port_text[ptr->map.port][0]);
+	if (ptr->flags & IFF_AUTOMEDIA)
+	    printf(_("autoselect"));
+    	printf("\n");
+    }
 #endif
-    printf("\n");
+
 
     /* If needed, display the interface statistics. */
 
@@ -845,19 +860,9 @@
 	 *      not for the aliases, although strictly speaking they're shared
 	 *      by all addresses.
 	 */
-	printf("          ");
-
-	printf(_("RX packets:%llu errors:%lu dropped:%lu overruns:%lu frame:%lu\n"),
-	       ptr->stats.rx_packets, ptr->stats.rx_errors,
-	       ptr->stats.rx_dropped, ptr->stats.rx_fifo_errors,
-	       ptr->stats.rx_frame_errors);
-	if (can_compress)
-	    printf(_("             compressed:%lu\n"), ptr->stats.rx_compressed);
 
 	rx = ptr->stats.rx_bytes;  
-	tx = ptr->stats.tx_bytes;
 	short_rx = rx * 10;  
-	short_tx = tx * 10;
 	if (rx > 1125899906842624ull) {
 	    short_rx /= 1125899906842624ull;
 	    Rext = "PiB";
@@ -874,6 +879,8 @@
 	    short_rx /= 1024;
 	    Rext = "KiB";
 	}
+        tx = ptr->stats.tx_bytes;
+        short_tx = tx * 10;
 	if (tx > 1125899906842624ull) {
 	    short_tx /= 1125899906842624ull;
 	    Text = "PiB";
@@ -891,37 +898,50 @@
 	    Text = "KiB";
 	}
 
-	printf("          ");
-	printf(_("TX packets:%llu errors:%lu dropped:%lu overruns:%lu carrier:%lu\n"),
-	       ptr->stats.tx_packets, ptr->stats.tx_errors,
-	       ptr->stats.tx_dropped, ptr->stats.tx_fifo_errors,
-	       ptr->stats.tx_carrier_errors);
-	printf(_("          collisions:%lu "), ptr->stats.collisions);
-	if (can_compress)
-	    printf(_("compressed:%lu "), ptr->stats.tx_compressed);
-	if (ptr->tx_queue_len != -1)
-	    printf(_("txqueuelen:%d "), ptr->tx_queue_len);
-	printf("\n          ");
-	printf(_("RX bytes:%llu (%lu.%lu %s)  TX bytes:%llu (%lu.%lu %s)\n"),
+	printf("        ");
+	printf(_("RX packets %llu  bytes %llu (%lu.%lu %s)\n"), 
+		ptr->stats.rx_packets, 
 	       rx, (unsigned long)(short_rx / 10), 
-	       (unsigned long)(short_rx % 10), Rext, 
-	       tx, (unsigned long)(short_tx / 10), 
-	       (unsigned long)(short_tx % 10), Text);
+	       (unsigned long)(short_rx % 10), Rext);
+	if (can_compress) {
+  	    printf("        ");
+	    printf(_("RX compressed:%lu\n"), ptr->stats.rx_compressed);
+	}
+	printf("        ");
+	printf(_("RX errors %lu  dropped %lu  overruns %lu  frame %lu\n"),
+	       ptr->stats.rx_errors, ptr->stats.rx_dropped, 
+	       ptr->stats.rx_fifo_errors, ptr->stats.rx_frame_errors);
+
+
+	printf("        ");
+	printf(_("TX packets %llu  bytes %llu (%lu.%lu %s)\n"),
+		ptr->stats.tx_packets, 
+	        tx, (unsigned long)(short_tx / 10), 
+	        (unsigned long)(short_tx % 10), Text);
+	if (can_compress) {
+  	    printf("        ");
+	    printf(_("TX compressed %lu\n"), ptr->stats.tx_compressed);
+	}
+	printf("        ");
+	printf(_("TX errors %lu  dropped %lu overruns %lu  carrier %lu  collisions %lu\n"),
+	       ptr->stats.tx_errors,
+	       ptr->stats.tx_dropped, ptr->stats.tx_fifo_errors,
+	       ptr->stats.tx_carrier_errors, ptr->stats.collisions);
     }
 
     if ((ptr->map.irq || ptr->map.mem_start || ptr->map.dma ||
 	 ptr->map.base_addr >= 0x100)) {
-	printf("          ");
+	printf("        device ");
 	if (ptr->map.irq)
-	    printf(_("Interrupt:%d "), ptr->map.irq);
+	    printf(_("interrupt %d  "), ptr->map.irq);
 	if (ptr->map.base_addr >= 0x100)	/* Only print devices using it for 
 						   I/O maps */
-	    printf(_("Base address:0x%x "), ptr->map.base_addr);
+	    printf(_("base 0x%x  "), ptr->map.base_addr);
 	if (ptr->map.mem_start) {
-	    printf(_("Memory:%lx-%lx "), ptr->map.mem_start, ptr->map.mem_end);
+	    printf(_("memory 0x%lx-%lx  "), ptr->map.mem_start, ptr->map.mem_end);
 	}
 	if (ptr->map.dma)
-	    printf(_("DMA chan:%x "), ptr->map.dma);
+	    printf(_("  dma 0x%x"), ptr->map.dma);
 	printf("\n");
     }
     printf("\n");
