diff options
author | Bernd Eckenfels <net-tools@lina.inka.de> | 2003-05-29 02:09:14 +0000 |
---|---|---|
committer | Bernd Eckenfels <net-tools@lina.inka.de> | 2003-05-29 02:09:14 +0000 |
commit | eb04ef31571f6c707eacaba6846feeebfab518e6 (patch) | |
tree | f31bc1eb2a461fb57023336766b06673aa3b5908 /lib | |
parent | added mii-tool as featured tool (diff) | |
download | net-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.c | 299 |
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"); |