aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBernd Eckenfels <net-tools@lina.inka.de>2003-05-29 02:09:14 +0000
committerBernd Eckenfels <net-tools@lina.inka.de>2003-05-29 02:09:14 +0000
commiteb04ef31571f6c707eacaba6846feeebfab518e6 (patch)
treef31bc1eb2a461fb57023336766b06673aa3b5908 /lib
parentadded mii-tool as featured tool (diff)
downloadnet-tools-eb04ef31571f6c707eacaba6846feeebfab518e6.tar.gz
net-tools-eb04ef31571f6c707eacaba6846feeebfab518e6.tar.bz2
net-tools-eb04ef31571f6c707eacaba6846feeebfab518e6.zip
added 'ull' prefix to unsigned long long constants to make gcc 3.3 happy
Diffstat (limited to 'lib')
-rw-r--r--lib/interface.c299
1 files changed, 161 insertions, 138 deletions
diff --git a/lib/interface.c b/lib/interface.c
index 9499370..913cca2 100644
--- a/lib/interface.c
+++ b/lib/interface.c
@@ -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");