added 'ull' prefix to unsigned long long constants to make gcc 3.3 happy
authorBernd Eckenfels <net-tools@lina.inka.de>
Thu, 29 May 2003 02:09:14 +0000 (02:09 +0000)
committerBernd Eckenfels <net-tools@lina.inka.de>
Thu, 29 May 2003 02:09:14 +0000 (02:09 +0000)
lib/interface.c

index 9499370..913cca2 100644 (file)
@@ -7,7 +7,7 @@
    8/2000  Andi Kleen make the list operations a bit more efficient.
    People are crazy enough to use thousands of aliases now.
 
-   $Id: interface.c,v 1.27 2002/12/10 00:56:41 ecki Exp $
+   $Id: interface.c,v 1.28 2003/05/29 02:09:14 ecki Exp $
  */
 
 #include "config.h"
@@ -23,6 +23,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <ctype.h>
+#include <string.h>
 
 #if HAVE_AFIPX
 #if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1)
@@ -100,6 +101,7 @@ static struct interface *if_cache_add(char *name)
     if (!int_list)
        int_last = NULL;
 
+    /* the cache is sorted, so if we hit a smaller if, exit */
     for (ife = int_last; ife; ife = ife->prev) {
            int n = nstrcmp(ife->name, name); 
            if (n == 0) 
@@ -109,7 +111,7 @@ static struct interface *if_cache_add(char *name)
     }
     new(new); 
     safe_strncpy(new->name, name, IFNAMSIZ); 
-    nextp = ife ? &ife->next : &int_list;
+    nextp = ife ? &ife->next : &int_list; // keep sorting
     new->prev = ife;
     new->next = *nextp; 
     if (new->next) 
@@ -652,7 +654,8 @@ void ife_print_long(struct interface *ptr)
     unsigned long long rx, tx, short_rx, short_tx;
     const char *Rext = "b";
     const char *Text = "b";
-
+    static char flags[200];
+    
 #if HAVE_AFIPX
     static struct aftype *ipxtype = NULL;
 #endif
@@ -684,32 +687,70 @@ void ife_print_long(struct interface *ptr)
     if (hw == NULL)
        hw = get_hwntype(-1);
 
-    printf(_("%-9.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
 
@@ -726,29 +767,30 @@ void ife_print_long(struct interface *ptr)
                        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);
@@ -761,17 +803,17 @@ void ife_print_long(struct interface *ptr)
 
     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
 
@@ -780,7 +822,7 @@ void ife_print_long(struct interface *ptr)
        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
 
@@ -789,53 +831,30 @@ void ife_print_long(struct interface *ptr)
        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. */
 
@@ -844,27 +863,16 @@ void ife_print_long(struct interface *ptr)
         *      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 > 1125899906842624) {
-           short_rx /= 1125899906842624;
+       if (rx > 1125899906842624ull) {
+           short_rx /= 1125899906842624ull;
            Rext = "PiB";
-       } else if (rx > 1099511627776) {
-           short_rx /= 1099511627776;
+       } else if (rx > 1099511627776ull) {
+           short_rx /= 1099511627776ull;
            Rext = "TiB";
-       } else if (rx > 1073741824) {
-           short_rx /= 1073741824;
+       } else if (rx > 1073741824ull) {
+           short_rx /= 1073741824ull;
            Rext = "GiB";
        } else if (rx > 1048576) {
            short_rx /= 1048576;
@@ -873,14 +881,16 @@ void ife_print_long(struct interface *ptr)
            short_rx /= 1024;
            Rext = "KiB";
        }
-       if (tx > 1125899906842624) {
-           short_tx /= 1125899906842624;
+       tx = ptr->stats.tx_bytes;
+       short_tx = tx * 10;
+       if (tx > 1125899906842624ull) {
+           short_tx /= 1125899906842624ull;
            Text = "PiB";
-       } else  if (tx > 1099511627776) {
-           short_tx /= 1099511627776;
+       } else  if (tx > 1099511627776ull) {
+           short_tx /= 1099511627776ull;
            Text = "TiB";
-       } else if (tx > 1073741824) {
-           short_tx /= 1073741824;
+       } else if (tx > 1073741824ull) {
+           short_tx /= 1073741824ull;
            Text = "GiB";
        } else if (tx > 1048576) {
            short_tx /= 1048576;
@@ -890,37 +900,50 @@ void ife_print_long(struct interface *ptr)
            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");