From a9137a03c96ecd53cbf2fab3f8f3a84cadabb76c Mon Sep 17 00:00:00 2001 From: Arkadiusz Miƛkiewicz Date: Sun, 5 Jul 2009 17:26:10 +0000 Subject: - drop obsolete files Changed files: net-tools-branch.diff -> 1.4 net-tools-netstat-stat.patch -> 1.2 diff --git a/net-tools-branch.diff b/net-tools-branch.diff deleted file mode 100644 index cc4e299..0000000 --- a/net-tools-branch.diff +++ /dev/null @@ -1,8742 +0,0 @@ ---- net-tools-1.60/arp.c 2001-04-08 19:05:05.000000000 +0200 -+++ net-tools/arp.c 2005-12-04 04:57:15.000000000 +0200 -@@ -8,7 +8,7 @@ - * NET-3 Networking Distribution for the LINUX operating - * system. - * -- * Version: $Id$ -+ * Version: $Id$ - * - * Maintainer: Bernd 'eckes' Eckenfels, - * -@@ -100,9 +100,10 @@ - { - char host[128]; - struct arpreq req; -- struct sockaddr sa; -+ struct sockaddr_storage ss; -+ struct sockaddr *sa; - int flags = 0; -- int err; -+ int deleted = 0; - - memset((char *) &req, 0, sizeof(req)); - -@@ -112,12 +113,13 @@ - return (-1); - } - safe_strncpy(host, *args, (sizeof host)); -- if (ap->input(0, host, &sa) < 0) { -+ sa = (struct sockaddr *)&ss; -+ if (ap->input(0, host, sa) < 0) { - ap->herror(host); - return (-1); - } - /* If a host has more than one address, use the correct one! */ -- memcpy((char *) &req.arp_pa, (char *) &sa, sizeof(struct sockaddr)); -+ memcpy((char *) &req.arp_pa, (char *) sa, sizeof(struct sockaddr)); - - if (hw_set) - req.arp_ha.sa_family = hw->type; -@@ -148,7 +150,7 @@ - continue; - } - if (!strcmp(*args, "dontpub")) { --#ifdef HAVE_ATF_DONTPUB -+#ifdef ATF_DONTPUB - req.arp_flags |= ATF_DONTPUB; - #else - ENOSUPP("arp", "ATF_DONTPUB"); -@@ -157,7 +159,7 @@ - continue; - } - if (!strcmp(*args, "auto")) { --#ifdef HAVE_ATF_MAGIC -+#ifdef ATF_MAGIC - req.arp_flags |= ATF_MAGIC; - #else - ENOSUPP("arp", "ATF_MAGIC"); -@@ -177,11 +179,11 @@ - usage(); - if (strcmp(*args, "255.255.255.255") != 0) { - strcpy(host, *args); -- if (ap->input(0, host, &sa) < 0) { -+ if (ap->input(0, host, sa) < 0) { - ap->herror(host); - return (-1); - } -- memcpy((char *) &req.arp_netmask, (char *) &sa, -+ memcpy((char *) &req.arp_netmask, (char *) sa, - sizeof(struct sockaddr)); - req.arp_flags |= ATF_NETMASK; - } -@@ -190,35 +192,41 @@ - } - usage(); - } -+ -+ // if neighter priv nor pub is given, work on both - if (flags == 0) - flags = 3; - - strcpy(req.arp_dev, device); - -- err = -1; -+ /* unfortuatelly the kernel interface does not allow us to -+ delete private entries anlone, so we need this hack -+ to avoid "not found" errors if we try both. */ -+ deleted = 0; - - /* Call the kernel. */ - if (flags & 2) { - if (opt_v) -- fprintf(stderr, "arp: SIOCDARP(nopub)\n"); -- if ((err = ioctl(sockfd, SIOCDARP, &req) < 0)) { -- if (errno == ENXIO) { -+ fprintf(stderr, "arp: SIOCDARP(dontpub)\n"); -+ if (ioctl(sockfd, SIOCDARP, &req) < 0) { -+ if ((errno == ENXIO) || (errno == ENOENT)) { - if (flags & 1) -- goto nopub; -+ goto dontpub; - printf(_("No ARP entry for %s\n"), host); - return (-1); - } -- perror("SIOCDARP(priv)"); -+ perror("SIOCDARP(dontpub)"); - return (-1); -- } -+ } else -+ deleted = 1; - } -- if ((flags & 1) && (err)) { -- nopub: -+ if (!deleted && (flags & 1)) { -+ dontpub: - req.arp_flags |= ATF_PUBL; - if (opt_v) - fprintf(stderr, "arp: SIOCDARP(pub)\n"); - if (ioctl(sockfd, SIOCDARP, &req) < 0) { -- if (errno == ENXIO) { -+ if ((errno == ENXIO) || (errno == ENOENT)) { - printf(_("No ARP entry for %s\n"), host); - return (-1); - } -@@ -260,7 +268,8 @@ - { - char host[128]; - struct arpreq req; -- struct sockaddr sa; -+ struct sockaddr_storage ss; -+ struct sockaddr *sa; - int flags; - - memset((char *) &req, 0, sizeof(req)); -@@ -271,12 +280,13 @@ - return (-1); - } - safe_strncpy(host, *args++, (sizeof host)); -- if (ap->input(0, host, &sa) < 0) { -+ sa = (struct sockaddr *)&ss; -+ if (ap->input(0, host, sa) < 0) { - ap->herror(host); - return (-1); - } - /* If a host has more than one address, use the correct one! */ -- memcpy((char *) &req.arp_pa, (char *) &sa, sizeof(struct sockaddr)); -+ memcpy((char *) &req.arp_pa, (char *) sa, sizeof(struct sockaddr)); - - /* Fetch the hardware address. */ - if (*args == NULL) { -@@ -317,7 +327,7 @@ - continue; - } - if (!strcmp(*args, "dontpub")) { --#ifdef HAVE_ATF_DONTPUB -+#ifdef ATF_DONTPUB - flags |= ATF_DONTPUB; - #else - ENOSUPP("arp", "ATF_DONTPUB"); -@@ -326,7 +336,7 @@ - continue; - } - if (!strcmp(*args, "auto")) { --#ifdef HAVE_ATF_MAGIC -+#ifdef ATF_MAGIC - flags |= ATF_MAGIC; - #else - ENOSUPP("arp", "ATF_MAGIC"); -@@ -346,11 +356,11 @@ - usage(); - if (strcmp(*args, "255.255.255.255") != 0) { - strcpy(host, *args); -- if (ap->input(0, host, &sa) < 0) { -+ if (ap->input(0, host, sa) < 0) { - ap->herror(host); - return (-1); - } -- memcpy((char *) &req.arp_netmask, (char *) &sa, -+ memcpy((char *) &req.arp_netmask, (char *) sa, - sizeof(struct sockaddr)); - flags |= ATF_NETMASK; - } -@@ -445,11 +455,11 @@ - strcat(flags, "M"); - if (arp_flags & ATF_PUBL) - strcat(flags, "P"); --#ifdef HAVE_ATF_MAGIC -+#ifdef ATF_MAGIC - if (arp_flags & ATF_MAGIC) - strcat(flags, "A"); - #endif --#ifdef HAVE_ATF_DONTPUB -+#ifdef ATF_DONTPUB - if (arp_flags & ATF_DONTPUB) - strcat(flags, "!"); - #endif -@@ -463,7 +473,7 @@ - - if (!(arp_flags & ATF_COM)) { - if (arp_flags & ATF_PUBL) -- printf("%-8.8s%-20.20s", "*", "*"); -+ printf("%-8.8s%-20.20s", "*", _("")); - else - printf("%-8.8s%-20.20s", "", _("(incomplete)")); - } else { -@@ -486,7 +496,7 @@ - - if (!(arp_flags & ATF_COM)) { - if (arp_flags & ATF_PUBL) -- printf("* "); -+ printf(" "); - else - printf(_(" ")); - } else { -@@ -499,12 +509,12 @@ - if (arp_flags & ATF_PERM) - printf("PERM "); - if (arp_flags & ATF_PUBL) -- printf("PUP "); --#ifdef HAVE_ATF_MAGIC -+ printf("PUB "); -+#ifdef ATF_MAGIC - if (arp_flags & ATF_MAGIC) - printf("AUTO "); - #endif --#ifdef HAVE_ATF_DONTPUB -+#ifdef ATF_DONTPUB - if (arp_flags & ATF_DONTPUB) - printf("DONTPUB "); - #endif -@@ -519,7 +529,8 @@ - static int arp_show(char *name) - { - char host[100]; -- struct sockaddr sa; -+ struct sockaddr_storage ss; -+ struct sockaddr *sa; - char ip[100]; - char hwa[100]; - char mask[100]; -@@ -532,14 +543,15 @@ - - host[0] = '\0'; - -+ sa = (struct sockaddr *)&ss; - if (name != NULL) { - /* Resolve the host name. */ - safe_strncpy(host, name, (sizeof host)); -- if (ap->input(0, host, &sa) < 0) { -+ if (ap->input(0, host, sa) < 0) { - ap->herror(host); - return (-1); - } -- safe_strncpy(host, ap->sprint(&sa, 1), sizeof(host)); -+ safe_strncpy(host, ap->sprint(sa, 1), sizeof(host)); - } - /* Open the PROCps kernel table. */ - if ((fp = fopen(_PATH_PROCNET_ARP, "r")) == NULL) { -@@ -575,10 +587,10 @@ - if (opt_n) - hostname = "?"; - else { -- if (ap->input(0, ip, &sa) < 0) -+ if (ap->input(0, ip, sa) < 0) - hostname = ip; - else -- hostname = ap->sprint(&sa, opt_n | 0x8000); -+ hostname = ap->sprint(sa, opt_n | 0x8000); - if (strcmp(hostname, ip) == 0) - hostname = "?"; - } -@@ -612,11 +624,10 @@ - static void usage(void) - { - fprintf(stderr, _("Usage:\n arp [-vn] [] [-i ] [-a] [] <-Display ARP cache\n")); -- fprintf(stderr, _(" arp [-v] [-i ] -d [pub][nopub] <-Delete ARP entry\n")); -- fprintf(stderr, _(" arp [-vnD] [] [-i ] -f [] <-Add entry from file\n")); -- fprintf(stderr, _(" arp [-v] [] [-i ] -s [temp][nopub] <-Add entry\n")); -- fprintf(stderr, _(" arp [-v] [] [-i ] -s [netmask ] pub <-''-\n")); -- fprintf(stderr, _(" arp [-v] [] [-i ] -Ds [netmask ] pub <-''-\n\n")); -+ fprintf(stderr, _(" arp [-v] [-i ] -d [pub] <-Delete ARP entry\n")); -+ fprintf(stderr, _(" arp [-vnD] [] [-i ] -f [] <-Add entry from file\n")); -+ fprintf(stderr, _(" arp [-v] [] [-i ] -s [temp] <-Add entry\n")); -+ fprintf(stderr, _(" arp [-v] [] [-i ] -Ds [netmask ] pub <-''-\n\n")); - - fprintf(stderr, _(" -a display (all) hosts in alternative (BSD) style\n")); - fprintf(stderr, _(" -s, --set set a new ARP entry\n")); ---- net-tools-1.60/config.in 2000-05-21 16:32:12.000000000 +0200 -+++ net-tools/config.in 2004-06-04 03:06:50.000000000 +0300 -@@ -49,16 +49,16 @@ - * - bool 'UNIX protocol family' HAVE_AFUNIX y - bool 'INET (TCP/IP) protocol family' HAVE_AFINET y --bool 'INET6 (IPv6) protocol family' HAVE_AFINET6 n -+bool 'INET6 (IPv6) protocol family' HAVE_AFINET6 y - bool 'Novell IPX/SPX protocol family' HAVE_AFIPX y - bool 'Appletalk DDP protocol family' HAVE_AFATALK y - bool 'AX25 (packet radio) protocol family' HAVE_AFAX25 y - bool 'NET/ROM (packet radio) protocol family' HAVE_AFNETROM y --bool 'Rose (packet radio) protocol family' HAVE_AFROSE n -+bool 'Rose (packet radio) protocol family' HAVE_AFROSE y - bool 'X.25 (CCITT) protocol family' HAVE_AFX25 y --bool 'Econet protocol family' HAVE_AFECONET n -+bool 'Econet protocol family' HAVE_AFECONET y - bool 'DECnet protocol family' HAVE_AFDECnet n --bool 'Ash protocol family' HAVE_AFASH n -+bool 'Ash protocol family' HAVE_AFASH y - * - * - * Device Hardware types. -@@ -71,21 +71,23 @@ - bool 'STRIP (Metricom radio) support' HAVE_HWSTRIP y - bool 'Token ring (generic) support' HAVE_HWTR y - bool 'AX25 (packet radio) support' HAVE_HWAX25 y --bool 'Rose (packet radio) support' HAVE_HWROSE n -+bool 'Rose (packet radio) support' HAVE_HWROSE y - bool 'NET/ROM (packet radio) support' HAVE_HWNETROM y - bool 'X.25 (generic) support' HAVE_HWX25 y - bool 'DLCI/FRAD (frame relay) support' HAVE_HWFR y --bool 'SIT (IPv6-in-IPv4) support' HAVE_HWSIT n --bool 'FDDI (generic) support' HAVE_HWFDDI n --bool 'HIPPI (generic) support' HAVE_HWHIPPI n --bool 'Ash hardware support' HAVE_HWASH n --bool '(Cisco)-HDLC/LAPB support' HAVE_HWHDLCLAPB n -+bool 'SIT (IPv6-in-IPv4) support' HAVE_HWSIT y -+bool 'FDDI (generic) support' HAVE_HWFDDI y -+bool 'HIPPI (generic) support' HAVE_HWHIPPI y -+bool 'Ash hardware support' HAVE_HWASH y -+bool '(Cisco)-HDLC/LAPB support' HAVE_HWHDLCLAPB y - bool 'IrDA support' HAVE_HWIRDA y --bool 'Econet hardware support' HAVE_HWEC n -+bool 'Econet hardware support' HAVE_HWEC y -+bool 'Generic EUI-64 hardware support' HAVE_HWEUI64 y -+ - * - * - * Other Features. - * --bool 'IP Masquerading support' HAVE_FW_MASQUERADE n --bool 'Build iptunnel and ipmaddr' HAVE_IP_TOOLS n --bool 'Build mii-tool' HAVE_MII n -+bool 'IP Masquerading support' HAVE_FW_MASQUERADE y -+bool 'Build iptunnel and ipmaddr' HAVE_IP_TOOLS y -+bool 'Build mii-tool' HAVE_MII y ---- net-tools-1.60/hostname.c 2001-04-08 19:04:23.000000000 +0200 -+++ net-tools/hostname.c 2003-10-12 00:08:10.000000000 +0300 -@@ -9,20 +9,19 @@ - * dnsdmoainname - * nisdomainname {name|-F file} - * -- * Version: hostname 1.96 (1996-02-18) -+ * Version: hostname 1.101 (2003-10-11) - * - * Author: Peter Tobias - * - * Changes: -- * {1.90} Peter Tobias : Added -a and -i options. -- * {1.91} Bernd Eckenfels : -v,-V rewritten, long_opts -- * (major rewrite), usage. -- *960120 {1.95} Bernd Eckenfels : -y/nisdomainname - support for get/ -- * setdomainname added -- *960218 {1.96} Bernd Eckenfels : netinet/in.h added -- *980629 {1.97} Arnaldo Carvalho de Melo : gettext instead of catgets for i18n -- *20000213 {1.99} Arnaldo Carvalho de Melo : fixed some i18n strings -+ * {1.90} Peter Tobias : Added -a and -i options. -+ * {1.91} Bernd Eckenfels : -v,-V rewritten, long_opts (major rewrite), usage. -+ *19960120 {1.95} Bernd Eckenfels : -y/nisdomainname - support for get/setdomainname added -+ *19960218 {1.96} Bernd Eckenfels : netinet/in.h added -+ *19980629 {1.97} Arnaldo Carvalho de Melo : gettext instead of catgets for i18n -+ *20000213 {1.99} Arnaldo Carvalho de Melo : fixed some i18n strings - *20010404 {1.100} Arnaldo Carvalho de Melo: use setlocale -+ *20031011 {1.101} Maik Broemme: gcc 3.x fixes (default: break) - * - * This program is free software; you can redistribute it - * and/or modify it under the terms of the GNU General -@@ -31,7 +30,9 @@ - * your option) any later version. - */ - #include -+#include - #include -+#include - #include - #include - #include -@@ -78,6 +79,7 @@ - fprintf(stderr, _("%s: name too long\n"), program_name); - break; - default: -+ break; - } - exit(1); - } -@@ -97,7 +99,6 @@ - case EINVAL: - fprintf(stderr, _("%s: name too long\n"), program_name); - break; -- default: - } - exit(1); - }; -@@ -116,7 +117,6 @@ - case EINVAL: - fprintf(stderr, _("%s: name too long\n"), program_name); - break; -- default: - } - exit(1); - }; -@@ -173,7 +173,6 @@ - *p = '\0'; - printf("%s\n", hp->h_name); - break; -- default: - } - } - -@@ -326,11 +325,12 @@ - break; - case 'V': - version(); -+ break; // not reached - case '?': - case 'h': - default: - usage(); -- -+ break; // not reached - }; - - ---- net-tools-1.60/ifconfig.c 2001-04-13 20:25:18.000000000 +0200 -+++ net-tools/ifconfig.c 2002-12-10 02:56:41.000000000 +0200 -@@ -3,7 +3,7 @@ - * that either displays or sets the characteristics of - * one or more of the system's networking interfaces. - * -- * Version: $Id$ -+ * Version: $Id$ - * - * Author: Fred N. van Kempen, - * and others. Copyright 1993 MicroWalt Corporation -@@ -88,7 +88,6 @@ - char *Release = RELEASE, *Version = "ifconfig 1.42 (2001-04-13)"; - - int opt_a = 0; /* show all interfaces */ --int opt_i = 0; /* show the statistics */ - int opt_v = 0; /* debugging output flag */ - - int addr_family = 0; /* currently selected AF */ -@@ -105,7 +104,7 @@ - int res; - - if (ife_short) -- printf(_("Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n")); -+ printf(_("Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n")); - - if (!ifname) { - res = for_all_interfaces(do_if_print, &opt_a); -@@ -127,7 +126,7 @@ - - safe_strncpy(ifr.ifr_name, ifname, IFNAMSIZ); - if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) { -- fprintf(stderr, _("%s: unknown interface: %s\n"), -+ fprintf(stderr, _("%s: ERROR while getting interface flags: %s\n"), - ifname, strerror(errno)); - return (-1); - } -@@ -159,7 +158,7 @@ - - safe_strncpy(ifr.ifr_name, ifname, IFNAMSIZ); - if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) { -- fprintf(stderr, _("%s: unknown interface: %s\n"), -+ fprintf(stderr, _("%s: ERROR while getting interface flags: %s\n"), - ifname, strerror(errno)); - return -1; - } -@@ -172,9 +171,35 @@ - return (0); - } - -+/** test is a specified flag is set */ -+static int test_flag(char *ifname, short flags) -+{ -+ struct ifreq ifr; -+ int fd; -+ -+ if (strchr(ifname, ':')) { -+ /* This is a v4 alias interface. Downing it via a socket for -+ another AF may have bad consequences. */ -+ fd = get_socket_for_af(AF_INET); -+ if (fd < 0) { -+ fprintf(stderr, _("No support for INET on this system.\n")); -+ return -1; -+ } -+ } else -+ fd = skfd; -+ -+ safe_strncpy(ifr.ifr_name, ifname, IFNAMSIZ); -+ if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) { -+ fprintf(stderr, _("%s: ERROR while testing interface flags: %s\n"), -+ ifname, strerror(errno)); -+ return -1; -+ } -+ return (ifr.ifr_flags & flags); -+} -+ - static void usage(void) - { -- fprintf(stderr, _("Usage:\n ifconfig [-a] [-i] [-v] [-s] [[]
]\n")); -+ fprintf(stderr, _("Usage:\n ifconfig [-a] [-v] [-s] [[]
]\n")); - #if HAVE_AFINET - fprintf(stderr, _(" [add
[/]]\n")); - fprintf(stderr, _(" [del
[/]]\n")); -@@ -208,7 +233,7 @@ - static void version(void) - { - fprintf(stderr, "%s\n%s\n", Release, Version); -- exit(0); -+ exit(E_USAGE); - } - - static int set_netmask(int skfd, struct ifreq *ifr, struct sockaddr *sa) -@@ -222,18 +247,19 @@ - strerror(errno)); - err = 1; - } -- return 0; -+ return err; - } - - int main(int argc, char **argv) - { - struct sockaddr sa; -+ struct sockaddr samask; - struct sockaddr_in sin; - char host[128]; - struct aftype *ap; - struct hwtype *hw; - struct ifreq ifr; -- int goterr = 0, didnetmask = 0; -+ int goterr = 0, didnetmask = 0, neednetmask=0; - char **spp; - int fd; - #if HAVE_AFINET6 -@@ -388,6 +414,8 @@ - } - if (!strcmp(*spp, "-promisc")) { - goterr |= clr_flag(ifr.ifr_name, IFF_PROMISC); -+ if (test_flag(ifr.ifr_name, IFF_PROMISC) > 0) -+ fprintf(stderr, _("Warning: Interface %s still in promisc mode... maybe other application is running?\n"), ifr.ifr_name); - spp++; - continue; - } -@@ -398,6 +426,8 @@ - } - if (!strcmp(*spp, "-multicast")) { - goterr |= clr_flag(ifr.ifr_name, IFF_MULTICAST); -+ if (test_flag(ifr.ifr_name, IFF_MULTICAST) > 0) -+ fprintf(stderr, _("Warning: Interface %s still in MULTICAST mode.\n"), ifr.ifr_name); - spp++; - continue; - } -@@ -408,6 +438,8 @@ - } - if (!strcmp(*spp, "-allmulti")) { - goterr |= clr_flag(ifr.ifr_name, IFF_ALLMULTI); -+ if (test_flag(ifr.ifr_name, IFF_MULTICAST) > 0) -+ fprintf(stderr, _("Warning: Interface %s still in ALLMULTI mode.\n"), ifr.ifr_name); - spp++; - continue; - } -@@ -430,6 +462,8 @@ - if (!strcmp(*spp, "-dynamic")) { - goterr |= clr_flag(ifr.ifr_name, IFF_DYNAMIC); - spp++; -+ if (test_flag(ifr.ifr_name, IFF_MULTICAST) > 0) -+ fprintf(stderr, _("Warning: Interface %s still in DYNAMIC mode.\n"), ifr.ifr_name); - continue; - } - #endif -@@ -486,6 +520,8 @@ - - if (!strcmp(*spp, "-broadcast")) { - goterr |= clr_flag(ifr.ifr_name, IFF_BROADCAST); -+ if (test_flag(ifr.ifr_name, IFF_MULTICAST) > 0) -+ fprintf(stderr, _("Warning: Interface %s still in BROADCAST mode.\n"), ifr.ifr_name); - spp++; - continue; - } -@@ -493,7 +529,10 @@ - if (*++spp != NULL) { - safe_strncpy(host, *spp, (sizeof host)); - if (ap->input(0, host, &sa) < 0) { -- ap->herror(host); -+ if (ap->herror) -+ ap->herror(host); -+ else -+ fprintf(stderr, _("ifconfig: Error resolving '%s' for broadcast\n"), host); - goterr = 1; - spp++; - continue; -@@ -515,7 +554,10 @@ - usage(); - safe_strncpy(host, *spp, (sizeof host)); - if (ap->input(0, host, &sa) < 0) { -- ap->herror(host); -+ if (ap->herror) -+ ap->herror(host); -+ else -+ fprintf(stderr, _("ifconfig: Error resolving '%s' for dstaddr\n"), host); - goterr = 1; - spp++; - continue; -@@ -535,13 +577,16 @@ - usage(); - safe_strncpy(host, *spp, (sizeof host)); - if (ap->input(0, host, &sa) < 0) { -- ap->herror(host); -+ if (ap->herror) -+ ap->herror(host); -+ else -+ fprintf(stderr, _("ifconfig: Error resolving '%s' for netmask\n"), host); - goterr = 1; - spp++; - continue; - } - didnetmask++; -- goterr = set_netmask(ap->fd, &ifr, &sa); -+ goterr |= set_netmask(ap->fd, &ifr, &sa); - spp++; - continue; - } -@@ -613,6 +658,8 @@ - if (!strcmp(*spp, "-pointopoint")) { - goterr |= clr_flag(ifr.ifr_name, IFF_POINTOPOINT); - spp++; -+ if (test_flag(ifr.ifr_name, IFF_MULTICAST) > 0) -+ fprintf(stderr, _("Warning: Interface %s still in POINTOPOINT mode.\n"), ifr.ifr_name); - continue; - } - if (!strcmp(*spp, "pointopoint")) { -@@ -620,7 +667,10 @@ - spp++; - safe_strncpy(host, *spp, (sizeof host)); - if (ap->input(0, host, &sa)) { -- ap->herror(host); -+ if (ap->herror) -+ ap->herror(host); -+ else -+ fprintf(stderr, _("ifconfig: Error resolving '%s' for pointopoint\n"), host); - goterr = 1; - spp++; - continue; -@@ -661,8 +711,12 @@ - memcpy((char *) &ifr.ifr_hwaddr, (char *) &sa, - sizeof(struct sockaddr)); - if (ioctl(skfd, SIOCSIFHWADDR, &ifr) < 0) { -- fprintf(stderr, "SIOCSIFHWADDR: %s\n", -- strerror(errno)); -+ if (errno == EBUSY) -+ fprintf(stderr, "SIOCSIFHWADDR: %s - you may need to down the interface\n", -+ strerror(errno)); -+ else -+ fprintf(stderr, "SIOCSIFHWADDR: %s\n", -+ strerror(errno)); - goterr = 1; - } - spp++; -@@ -681,12 +735,15 @@ - usage(); - *cp = 0; - } else { -- prefix_len = 0; -+ prefix_len = 128; - } - safe_strncpy(host, *spp, (sizeof host)); - if (inet6_aftype.input(1, host, - (struct sockaddr *) &sa6) < 0) { -- inet6_aftype.herror(host); -+ if (inet6_aftype.herror) -+ inet6_aftype.herror(host); -+ else -+ fprintf(stderr, _("ifconfig: Error resolving '%s' for add\n"), host); - goterr = 1; - spp++; - continue; -@@ -771,7 +828,7 @@ - usage(); - *cp = 0; - } else { -- prefix_len = 0; -+ prefix_len = 128; - } - safe_strncpy(host, *spp, (sizeof host)); - if (inet6_aftype.input(1, host, -@@ -800,6 +857,8 @@ - } - ifr6.ifr6_ifindex = ifr.ifr_ifindex; - ifr6.ifr6_prefixlen = prefix_len; -+ if (opt_v) -+ fprintf(stderr, "now deleting: ioctl(SIOCDIFADDR,{ifindex=%d,prefixlen=%ld})\n",ifr.ifr_ifindex,prefix_len); - if (ioctl(fd, SIOCDIFADDR, &ifr6) < 0) { - fprintf(stderr, "SIOCDIFADDR: %s\n", - strerror(errno)); -@@ -859,7 +918,7 @@ - usage(); - *cp = 0; - } else { -- prefix_len = 0; -+ prefix_len = 128; - } - safe_strncpy(host, *spp, (sizeof host)); - if (inet6_aftype.input(1, host, (struct sockaddr *) &sa6) < 0) { -@@ -903,7 +962,7 @@ - /* FIXME: sa is too small for INET6 addresses, inet6 should use that too, - broadcast is unexpected */ - if (ap->getmask) { -- switch (ap->getmask(host, &sa, NULL)) { -+ switch (ap->getmask(host, &samask, NULL)) { - case -1: - usage(); - break; -@@ -911,8 +970,8 @@ - if (didnetmask) - usage(); - -- goterr = set_netmask(skfd, &ifr, &sa); -- didnetmask++; -+ // remeber to set the netmask from samask later -+ neednetmask = 1; - break; - } - } -@@ -921,9 +980,11 @@ - exit(1); - } - if (ap->input(0, host, &sa) < 0) { -- ap->herror(host); -- fprintf(stderr, _("ifconfig: `--help' gives usage information.\n")); -- exit(1); -+ if (ap->herror) -+ ap->herror(host); -+ else -+ fprintf(stderr,_("ifconfig: error resolving '%s' to set address for af=%s\n"), host, ap->name); fprintf(stderr, -+ _("ifconfig: `--help' gives usage information.\n")); exit(1); - } - memcpy((char *) &ifr.ifr_addr, (char *) &sa, sizeof(struct sockaddr)); - { -@@ -980,6 +1041,14 @@ - spp++; - } - -+ if (neednetmask) { -+ goterr |= set_netmask(skfd, &ifr, &samask); -+ didnetmask++; -+ } -+ -+ if (opt_v && goterr) -+ fprintf(stderr, _("WARNING: at least one error occured. (%d)\n"), goterr); -+ - return (goterr); - } - ---- net-tools-1.60/include/interface.h 2001-02-10 21:24:25.000000000 +0200 -+++ net-tools/include/interface.h 2002-03-05 02:47:36.000000000 +0200 -@@ -64,13 +64,17 @@ - extern int if_fetch(struct interface *ife); - - extern int for_all_interfaces(int (*)(struct interface *, void *), void *); --extern int free_interface_list(void); -+extern int if_cache_free(void); - extern struct interface *lookup_interface(char *name); - extern int if_readlist(void); - - extern int do_if_fetch(struct interface *ife); - extern int do_if_print(struct interface *ife, void *cookie); - -+extern int procnetdev_version(char *buf); -+extern int get_dev_fields(char *bp, struct interface *ife); -+extern char * get_name(char *name, char *p); -+ - extern void ife_print(struct interface *ptr); - - extern int ife_short; ---- net-tools-1.60/include/mii.h 2000-05-21 16:21:27.000000000 +0200 -+++ net-tools/include/mii.h 2006-09-27 23:59:19.000000000 +0300 -@@ -6,11 +6,14 @@ - * Copyright (C) 2000 David A. Hinds -- dhinds@pcmcia.sourceforge.org - */ - --#ifndef _LINUX_MII_H --#define _LINUX_MII_H -+#ifndef _NETTOOL_MII_H -+#define _NETTOOLS_MII_H -+ -+#include - - /* network interface ioctl's for MII commands */ - #ifndef SIOCGMIIPHY -+#warning "SIOCGMIIPHY is not defined by your kernel source" - #define SIOCGMIIPHY (SIOCDEVPRIVATE) /* Read from current PHY */ - #define SIOCGMIIREG (SIOCDEVPRIVATE+1) /* Read any PHY register */ - #define SIOCSMIIREG (SIOCDEVPRIVATE+2) /* Write any PHY register */ -@@ -38,6 +41,7 @@ - #define MII_BMCR_RESTART 0x0200 - #define MII_BMCR_DUPLEX 0x0100 - #define MII_BMCR_COLTEST 0x0080 -+#define MII_BMCR_SPEED1000 0x0040 - - /* Basic Mode Status Register */ - #define MII_BMSR 0x01 -@@ -83,4 +87,17 @@ - #define MII_ANER_PAGE_RX 0x0002 - #define MII_ANER_LP_AN_ABLE 0x0001 - --#endif /* _LINUX_MII_H */ -+#define MII_CTRL1000 0x09 -+#define MII_BMCR2_1000FULL 0x0200 -+#define MII_BMCR2_1000HALF 0x0100 -+ -+#define MII_STAT1000 0x0a -+#define MII_LPA2_1000LOCALOK 0x2000 -+#define MII_LPA2_1000REMRXOK 0x1000 -+#define MII_LPA2_1000FULL 0x0800 -+#define MII_LPA2_1000HALF 0x0400 -+ -+/* Last register we need for show_basic_mii() */ -+#define MII_BASIC_MAX (MII_STAT1000+1) -+ -+#endif /* _NETTOOLS_MII_H */ ---- net-tools-1.60/include/util-ank.h 1999-04-21 20:38:05.000000000 +0300 -+++ net-tools/include/util-ank.h 2006-10-11 04:14:33.000000000 +0300 -@@ -75,6 +75,6 @@ - extern int do_class(int argc, char **argv); - extern int do_filter(int argc, char **argv); - --extern const char *format_host(int af, void *addr, __u8 *abuf, int alen); -+extern const char *format_host(int af, void *addr, char *abuf, int alen); - - #endif /* __UTILS_H__ */ ---- net-tools-1.60/ipmaddr.c 2001-04-08 19:04:23.000000000 +0200 -+++ net-tools/ipmaddr.c 2006-10-11 04:13:57.000000000 +0300 -@@ -291,13 +291,15 @@ - static int multiaddr_list(int argc, char **argv) - { - struct ma_info *list = NULL; -+ size_t l; - - while (argc > 0) { - if (strcmp(*argv, "dev") == 0) { - NEXT_ARG(); -- if (filter_dev[0]) -+ l = strlen(*argv); -+ if (l <= 0 || l >= sizeof(filter_dev)) - usage(); -- strcpy(filter_dev, *argv); -+ strncpy(filter_dev, *argv, sizeof (filter_dev)); - } else if (strcmp(*argv, "all") == 0) { - filter_family = AF_UNSPEC; - } else if (strcmp(*argv, "ipv4") == 0) { -@@ -307,9 +309,10 @@ - } else if (strcmp(*argv, "link") == 0) { - filter_family = AF_PACKET; - } else { -- if (filter_dev[0]) -+ l = strlen(*argv); -+ if (l <= 0 || l >= sizeof(filter_dev)) - usage(); -- strcpy(filter_dev, *argv); -+ strncpy(filter_dev, *argv, sizeof (filter_dev)); - } - argv++; argc--; - } ---- net-tools-1.60/lib/ddp_gr.c 1999-01-09 17:54:32.000000000 +0200 -+++ net-tools/lib/ddp_gr.c 2002-06-02 08:25:15.000000000 +0300 -@@ -1,3 +1,20 @@ -+/* -+ * lib/ddp_gr.c Prinbting of DDP (AppleTalk) routing table -+ * used by the NET-LIB. -+ * -+ * NET-LIB -+ * -+ * Version: $Id$ -+ * -+ * Author: Ajax -+ * -+ * Modification: -+ * 2002-06-02 integrated into main source by Bernd Eckenfels -+ * -+ */ -+ -+/* TODO: name lookups (/etc/atalk.names? NBP?) */ -+ - #include "config.h" - - #if HAVE_AFATALK -@@ -16,9 +33,61 @@ - #include "pathnames.h" - #include "intl.h" - -+/* stolen from inet_gr.c */ -+#define flags_decode(i,o) do { \ -+ o[0] = '\0'; \ -+ if (i & RTF_UP) strcat(o, "U"); \ -+ if (i & RTF_GATEWAY) strcat(o, "G"); \ -+ if (i & RTF_REJECT) strcat(o, "!"); \ -+ if (i & RTF_HOST) strcat(o, "H"); \ -+ if (i & RTF_REINSTATE) strcat(o, "R"); \ -+ if (i & RTF_DYNAMIC) strcat(o, "D"); \ -+ if (i & RTF_MODIFIED) strcat(o, "M"); \ -+ if (i & RTF_DEFAULT) strcat(o, "d"); \ -+ if (i & RTF_ALLONLINK) strcat(o, "a"); \ -+ if (i & RTF_ADDRCONF) strcat(o, "c"); \ -+ if (i & RTF_NONEXTHOP) strcat(o, "o"); \ -+ if (i & RTF_EXPIRES) strcat(o, "e"); \ -+ if (i & RTF_CACHE) strcat(o, "c"); \ -+ if (i & RTF_FLOW) strcat(o, "f"); \ -+ if (i & RTF_POLICY) strcat(o, "p"); \ -+ if (i & RTF_LOCAL) strcat(o, "l"); \ -+ if (i & RTF_MTU) strcat(o, "u"); \ -+ if (i & RTF_WINDOW) strcat(o, "w"); \ -+ if (i & RTF_IRTT) strcat(o, "i"); \ -+ if (i & RTF_NOTCACHED) strcat(o, "n"); \ -+ } while (0) -+ - int DDP_rprint(int options) - { -- fprintf(stderr, _("Routing table for `ddp' not yet supported.\n")); -- return (1); -+ FILE *fp; -+ char *dest, *gw, *dev, *flags; -+ char oflags[32]; -+ char *hdr = "Destination Gateway Device Flags"; -+ -+ fp = fopen(_PATH_PROCNET_ATALK_ROUTE, "r"); -+ -+ if (!fp) { -+ perror("Error opening " _PATH_PROCNET_ATALK_ROUTE); -+ fprintf(stderr, "DDP (AppleTalk) not configured on this system.\n"); -+ return 1; -+ } -+ -+ fscanf(fp, "%as %as %as %as\n", &dest, &gw, &flags, &dev); -+ free(dest); free(gw); free(dev); free(flags); -+ -+ printf("%s\n", hdr); -+ -+ while (fscanf(fp, "%as %as %as %as\n", &dest, &gw, &flags, &dev) == 4) { -+ int iflags = atoi(flags); -+ flags_decode(iflags, oflags); -+ printf("%-16s%-16s%-16s%-s\n", dest, gw, dev, oflags); -+ free(dest); free(gw); free(dev); free(flags); -+ } -+ -+ fclose(fp); -+ -+ return 0; -+ - } - #endif ---- net-tools-1.60/lib/ether.c 1999-11-20 23:02:53.000000000 +0200 -+++ net-tools/lib/ether.c 2002-07-30 08:17:29.000000000 +0300 -@@ -2,7 +2,7 @@ - * lib/ether.c This file contains an implementation of the "Ethernet" - * support functions. - * -- * Version: $Id$ -+ * Version: $Id$ - * - * Author: Fred N. van Kempen, - * Copyright 1993 MicroWalt Corporation -@@ -39,7 +39,7 @@ - { - static char buff[64]; - -- snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X", -+ snprintf(buff, sizeof(buff), "%02x:%02x:%02x:%02x:%02x:%02x", - (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377), - (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377) - ); ---- net-tools-1.60/lib/eui64.c 1970-01-01 03:00:00.000000000 +0300 -+++ net-tools/lib/eui64.c 2001-11-12 04:12:05.000000000 +0200 -@@ -0,0 +1,155 @@ -+/* -+ * lib/eui64.c This file contains support for generic EUI-64 hw addressing -+ * -+ * Version: $Id$ -+ * -+ * Author: Daniel Stodden -+ * Copyright 2001 Daniel Stodden -+ * -+ * blueprinted from ether.c -+ * Copyright 1993 MicroWalt Corporation -+ * -+ * This program is free software; you can redistribute it -+ * and/or modify it under the terms of the GNU General -+ * Public License as published by the Free Software -+ * Foundation; either version 2 of the License, or (at -+ * your option) any later version. -+ */ -+#include "config.h" -+ -+#if HAVE_HWEUI64 -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "net-support.h" -+#include "pathnames.h" -+#include "intl.h" -+ -+/* -+ * EUI-64 constants -+ */ -+ -+#define EUI64_ALEN 8 -+ -+#ifndef ARPHRD_EUI64 -+#define ARPHRD_EUI64 27 -+#warning "ARPHRD_EUI64 not defined in . Using private value 27" -+#endif -+ -+struct hwtype eui64_hwtype; -+ -+/* Display an EUI-64 address in readable format. */ -+static char *pr_eui64( unsigned char *ptr ) -+{ -+ static char buff[64]; -+ -+ snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", -+ (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377), (ptr[3] & 0377), -+ (ptr[4] & 0377), (ptr[5] & 0377), (ptr[6] & 0377), (ptr[7] & 0377) -+ ); -+ return (buff); -+} -+ -+/* Start the PPP encapsulation on the file descriptor. */ -+static int in_eui64( char *bufp, struct sockaddr *sap ) -+{ -+ unsigned char *ptr; -+ char c, *orig; -+ int i; -+ unsigned val; -+ -+ sap->sa_family = eui64_hwtype.type; -+ ptr = sap->sa_data; -+ -+ i = 0; -+ orig = bufp; -+ -+ while ((*bufp != '\0') && (i < EUI64_ALEN)) { -+ val = 0; -+ c = *bufp++; -+ if (isdigit(c)) -+ val = c - '0'; -+ else if (c >= 'a' && c <= 'f') -+ val = c - 'a' + 10; -+ else if (c >= 'A' && c <= 'F') -+ val = c - 'A' + 10; -+ else { -+#ifdef DEBUG -+ fprintf( stderr, _("in_eui64(%s): invalid eui64 address!\n"), -+ orig ); -+#endif -+ errno = EINVAL; -+ return (-1); -+ } -+ -+ val <<= 4; -+ c = *bufp; -+ if (isdigit(c)) -+ val |= c - '0'; -+ else if (c >= 'a' && c <= 'f') -+ val |= c - 'a' + 10; -+ else if (c >= 'A' && c <= 'F') -+ val |= c - 'A' + 10; -+ else if (c == ':' || c == 0) -+ val >>= 4; -+ else { -+#ifdef DEBUG -+ fprintf( stderr, _("in_eui64(%s): invalid eui64 address!\n"), -+ orig ); -+#endif -+ errno = EINVAL; -+ return (-1); -+ } -+ -+ if (c != 0) -+ bufp++; -+ -+ *ptr++ = (unsigned char) (val & 0377); -+ i++; -+ -+ /* We might get a semicolon here - not required. */ -+ if (*bufp == ':') { -+ if (i == EUI64_ALEN) { -+#ifdef DEBUG -+ fprintf(stderr, _("in_eui64(%s): trailing : ignored!\n"), -+ orig) -+#endif -+ ; /* nothing */ -+ } -+ bufp++; -+ } -+ } -+ -+ /* That's it. Any trailing junk? */ -+ if ((i == EUI64_ALEN) && (*bufp != '\0')) { -+#ifdef DEBUG -+ fprintf(stderr, _("in_eui64(%s): trailing junk!\n"), orig); -+ errno = EINVAL; -+ return (-1); -+#endif -+ } -+#ifdef DEBUG -+ fprintf(stderr, "in_eui64(%s): %s\n", orig, pr_eui64(sap->sa_data)); -+#endif -+ -+ return (0); -+} -+ -+struct hwtype eui64_hwtype = -+{ -+ "eui64", NULL, /*"EUI-64 addressing", */ ARPHRD_EUI64, EUI64_ALEN, -+ pr_eui64, in_eui64, NULL, 0 -+}; -+ -+ -+#endif /* HAVE_EUI64 */ ---- net-tools-1.60/lib/hw.c 2000-05-20 20:27:25.000000000 +0200 -+++ net-tools/lib/hw.c 2001-11-12 04:12:05.000000000 +0200 -@@ -2,7 +2,7 @@ - * lib/hw.c This file contains the top-level part of the hardware - * support functions module. - * -- * Version: $Id$ -+ * Version: $Id$ - * - * Maintainer: Bernd 'eckes' Eckenfels, - * -@@ -73,6 +73,8 @@ - - extern struct hwtype ec_hwtype; - -+extern struct hwtype eui64_hwtype; -+ - static struct hwtype *hwtypes[] = - { - -@@ -144,6 +146,9 @@ - #if HAVE_HWX25 - &x25_hwtype, - #endif -+#if HAVE_HWEUI64 -+ &eui64_hwtype, -+#endif - &unspec_hwtype, - NULL - }; -@@ -217,6 +222,9 @@ - #if HAVE_HWEC - ec_hwtype.title = _("Econet"); - #endif -+#if HAVE_HWEUI64 -+ eui64_hwtype.title = _("Generic EUI-64"); -+#endif - sVhwinit = 1; - } - ---- net-tools-1.60/lib/inet6.c 2000-10-28 13:04:00.000000000 +0200 -+++ net-tools/lib/inet6.c 2002-12-10 03:03:09.000000000 +0200 -@@ -3,7 +3,7 @@ - * support functions for the net-tools. - * (most of it copied from lib/inet.c 1.26). - * -- * Version: $Id$ -+ * Version: $Id$ - * - * Author: Fred N. van Kempen, - * Copyright 1993 MicroWalt Corporation -@@ -44,6 +44,21 @@ - - extern int h_errno; /* some netdb.h versions don't export this */ - -+char * fix_v4_address(char *buf, struct in6_addr *in6) -+{ -+ if (IN6_IS_ADDR_V4MAPPED(in6->s6_addr)) { -+ char *s =strchr(buf, '.'); -+ if (s) { -+ while (s > buf && *s != ':') -+ --s; -+ if (*s == ':') ++s; -+ else s = NULL; -+ } -+ if (s) return s; -+ } -+ return buf; -+} -+ - static int INET6_resolve(char *name, struct sockaddr_in6 *sin6) - { - struct addrinfo req, *ai; -@@ -83,14 +98,14 @@ - return (-1); - } - if (numeric & 0x7FFF) { -- inet_ntop(AF_INET6, &sin6->sin6_addr, name, 80); -+ inet_ntop( AF_INET6, &sin6->sin6_addr, name, 80); - return (0); - } - if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) { - if (numeric & 0x8000) - strcpy(name, "default"); - else -- strcpy(name, "*"); -+ strcpy(name, "[::]"); - return (0); - } - -@@ -109,13 +124,14 @@ - } - - -+ - /* Display an Internet socket address. */ - static char *INET6_print(unsigned char *ptr) - { - static char name[80]; - - inet_ntop(AF_INET6, (struct in6_addr *) ptr, name, 80); -- return name; -+ return fix_v4_address(name, (struct in6_addr *)ptr); - } - - -@@ -129,13 +145,14 @@ - return safe_strncpy(buff, _("[NONE SET]"), sizeof(buff)); - if (INET6_rresolve(buff, (struct sockaddr_in6 *) sap, numeric) != 0) - return safe_strncpy(buff, _("[UNKNOWN]"), sizeof(buff)); -- return (buff); -+ return (fix_v4_address(buff, &((struct sockaddr_in6 *)sap)->sin6_addr)); - } - - - static int INET6_getsock(char *bufp, struct sockaddr *sap) - { - struct sockaddr_in6 *sin6; -+ char *p; - - sin6 = (struct sockaddr_in6 *) sap; - sin6->sin6_family = AF_INET6; -@@ -143,7 +160,9 @@ - - if (inet_pton(AF_INET6, bufp, sin6->sin6_addr.s6_addr) <= 0) - return (-1); -- -+ p = fix_v4_address(bufp, &sin6->sin6_addr); -+ if (p != bufp) -+ memcpy(bufp, p, strlen(p)+1); - return 16; /* ?;) */ - } - ---- net-tools-1.60/lib/inet6_gr.c 2001-04-01 16:48:06.000000000 +0200 -+++ net-tools/lib/inet6_gr.c 2002-07-30 08:24:20.000000000 +0300 -@@ -1,4 +1,4 @@ --/* -+ /* - Modifications: - 1998-07-01 - Arnaldo Carvalho de Melo - GNU gettext instead of catgets, - snprintf instead of sprintf -@@ -71,11 +71,15 @@ - printf(_("INET6 (IPv6) not configured in this system.\n")); - return 1; - } -- printf(_("Kernel IPv6 routing table\n")); - -- printf(_("Destination " -- "Next Hop " -- "Flags Metric Ref Use Iface\n")); -+ if (numeric & RTF_CACHE) -+ printf(_("Kernel IPv6 routing cache\n")); -+ else -+ printf(_("Kernel IPv6 routing table\n")); -+ -+ printf(_("Destination " -+ "Next Hop " -+ "Flag Met Ref Use If\n")); - - while (fgets(buff, 1023, fp)) { - num = sscanf(buff, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %4s%4s%4s%4s%4s%4s%4s%4s %02x %4s%4s%4s%4s%4s%4s%4s%4s %08x %08x %08x %08x %s\n", -@@ -87,13 +91,19 @@ - &slen, - naddr6p[0], naddr6p[1], naddr6p[2], naddr6p[3], - naddr6p[4], naddr6p[5], naddr6p[6], naddr6p[7], -- &metric, &use, &refcnt, &iflags, iface); -+ &metric, &refcnt, &use, &iflags, iface); - #if 0 - if (num < 23) - continue; - #endif -- if (!(iflags & RTF_UP)) -- continue; -+ if (iflags & RTF_CACHE) { -+ if (!(numeric & RTF_CACHE)) -+ continue; -+ } else { -+ if (numeric & RTF_CACHE) -+ continue; -+ } -+ - /* Fetch and resolve the target address. */ - snprintf(addr6, sizeof(addr6), "%s:%s:%s:%s:%s:%s:%s:%s", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], -@@ -112,7 +122,12 @@ - inet6_aftype.sprint((struct sockaddr *) &snaddr6, 1)); - - /* Decode the flags. */ -- strcpy(flags, "U"); -+ -+ flags[0]=0; -+ if (iflags & RTF_UP) -+ strcat(flags, "U"); -+ if (iflags & RTF_REJECT) -+ strcat(flags, "!"); - if (iflags & RTF_GATEWAY) - strcat(flags, "G"); - if (iflags & RTF_HOST) -@@ -123,9 +138,19 @@ - strcat(flags, "A"); - if (iflags & RTF_CACHE) - strcat(flags, "C"); -+ if (iflags & RTF_ALLONLINK) -+ strcat(flags, "a"); -+ if (iflags & RTF_EXPIRES) -+ strcat(flags, "e"); -+ if (iflags & RTF_MODIFIED) -+ strcat(flags, "m"); -+ if (iflags & RTF_NONEXTHOP) -+ strcat(flags, "n"); -+ if (iflags & RTF_FLOW) -+ strcat(flags, "f"); - - /* Print the info. */ -- printf("%-43s %-39s %-5s %-6d %-2d %7d %-8s\n", -+ printf("%-30s %-26s %-4s %-3d %-1d%6d %s\n", - addr6, naddr6, flags, metric, refcnt, use, iface); - } - -@@ -144,8 +169,7 @@ - char addr6p[8][5], haddrp[6][3]; - - if (!fp) { -- ESYSNOT("nd_print", "ND Table"); -- return 1; -+ return rprint_fib6(ext, numeric | RTF_CACHE); - } - printf(_("Kernel IPv6 Neighbour Cache\n")); - ---- net-tools-1.60/lib/inet.c 2000-05-22 23:27:13.000000000 +0200 -+++ net-tools/lib/inet.c 2003-10-19 14:57:37.000000000 +0300 -@@ -3,7 +3,7 @@ - * support functions for the net-tools. - * (NET-3 base distribution). - * -- * Version: $Id$ -+ * Version: $Id$ - * - * Author: Fred N. van Kempen, - * Copyright 1993 MicroWalt Corporation -@@ -144,7 +144,7 @@ - struct hostent *ent; - struct netent *np; - struct addr *pn; -- unsigned long ad, host_ad; -+ u_int32_t ad, host_ad; - int host = 0; - - /* Grmpf. -FvK */ -@@ -155,7 +155,7 @@ - errno = EAFNOSUPPORT; - return (-1); - } -- ad = (unsigned long) sin->sin_addr.s_addr; -+ ad = sin->sin_addr.s_addr; - #ifdef DEBUG - fprintf (stderr, "rresolve: %08lx, mask %08x, num %08x \n", ad, netmask, numeric); - #endif ---- net-tools-1.60/lib/inet_sr.c 2000-02-20 23:46:45.000000000 +0200 -+++ net-tools/lib/inet_sr.c 2003-10-12 00:08:10.000000000 +0300 -@@ -3,6 +3,7 @@ - 1998-07-01 - Arnaldo Carvalho de Melo - GNU gettext instead of catgets - 1999-10-07 - Kurt Garloff - for -host and gws: prefer host names - over networks (or even reject) -+ 2003-10-11 - Maik Broemme - gcc 3.x warnign fixes (default: break;) - */ - - #include "config.h" -@@ -104,7 +105,6 @@ - isnet = 1; break; - case 2: - isnet = 0; break; -- default: - } - - /* Fill in the other fields. */ ---- net-tools-1.60/lib/interface.c 2001-02-10 21:31:15.000000000 +0200 -+++ net-tools/lib/interface.c 2005-08-24 01:46:51.000000000 +0300 -@@ -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$ -+ $Id$ - */ - - #include "config.h" -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - - #if HAVE_AFIPX - #if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) -@@ -87,14 +88,20 @@ - - int ife_short; - -+int if_list_all = 0; /* do we have requested the complete proc list, yet? */ -+ - static struct interface *int_list, *int_last; - - static int if_readlist_proc(char *); - --static struct interface *add_interface(char *name) -+static struct interface *if_cache_add(char *name) - { - struct interface *ife, **nextp, *new; - -+ 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) -@@ -104,7 +111,7 @@ - } - 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) -@@ -117,19 +124,22 @@ - - struct interface *lookup_interface(char *name) - { -- struct interface *ife = NULL; -- -- if (if_readlist_proc(name) < 0) -- return NULL; -- ife = add_interface(name); -- return ife; -+ /* if we have read all, use it */ -+ if (if_list_all) -+ return if_cache_add(name); -+ -+ /* otherwise we read a limited list */ -+ if (if_readlist_proc(name) < 0) -+ return NULL; -+ -+ return if_cache_add(name); - } - - int for_all_interfaces(int (*doit) (struct interface *, void *), void *cookie) - { - struct interface *ife; - -- if (!int_list && (if_readlist() < 0)) -+ if (!if_list_all && (if_readlist() < 0)) - return -1; - for (ife = int_list; ife; ife = ife->next) { - int err = doit(ife, cookie); -@@ -139,13 +149,15 @@ - return 0; - } - --int free_interface_list(void) -+int if_cache_free(void) - { - struct interface *ife; - while ((ife = int_list) != NULL) { - int_list = ife->next; - free(ife); - } -+ int_last = NULL; -+ if_list_all = 0; - return 0; - } - -@@ -180,7 +192,7 @@ - } - if (ifc.ifc_len == sizeof(struct ifreq) * numreqs) { - /* assume it overflowed and try again */ -- numreqs += 10; -+ numreqs *= 2; - continue; - } - break; -@@ -188,7 +200,7 @@ - - ifr = ifc.ifc_req; - for (n = 0; n < ifc.ifc_len; n += sizeof(struct ifreq)) { -- add_interface(ifr->ifr_name); -+ if_cache_add(ifr->ifr_name); - ifr++; - } - err = 0; -@@ -198,7 +210,7 @@ - return err; - } - --static char *get_name(char *name, char *p) -+char *get_name(char *name, char *p) - { - while (isspace(*p)) - p++; -@@ -206,16 +218,19 @@ - if (isspace(*p)) - break; - if (*p == ':') { /* could be an alias */ -- char *dot = p, *dotname = name; -- *name++ = *p++; -- while (isdigit(*p)) -- *name++ = *p++; -- if (*p != ':') { /* it wasn't, backup */ -- p = dot; -- name = dotname; -+ char *dot = p++; -+ while (*p && isdigit(*p)) p++; -+ if (*p == ':') { -+ /* Yes it is, backup and copy it. */ -+ p = dot; -+ *name++ = *p++; -+ while (*p && isdigit(*p)) { -+ *name++ = *p++; -+ } -+ } else { -+ /* No, it isn't */ -+ p = dot; - } -- if (*p == '\0') -- return NULL; - p++; - break; - } -@@ -225,7 +240,7 @@ - return p; - } - --static int procnetdev_version(char *buf) -+int procnetdev_version(char *buf) - { - if (strstr(buf, "compressed")) - return 3; -@@ -234,12 +249,12 @@ - return 1; - } - --static int get_dev_fields(char *bp, struct interface *ife) -+int get_dev_fields(char *bp, struct interface *ife) - { - switch (procnetdev_vsn) { - case 3: - sscanf(bp, -- "%llu %llu %lu %lu %lu %lu %lu %lu %llu %llu %lu %lu %lu %lu %lu %lu", -+ "%Lu %Lu %lu %lu %lu %lu %lu %lu %Lu %Lu %lu %lu %lu %lu %lu %lu", - &ife->stats.rx_bytes, - &ife->stats.rx_packets, - &ife->stats.rx_errors, -@@ -259,7 +274,7 @@ - &ife->stats.tx_compressed); - break; - case 2: -- sscanf(bp, "%llu %llu %lu %lu %lu %lu %llu %llu %lu %lu %lu %lu %lu", -+ sscanf(bp, "%Lu %Lu %lu %lu %lu %lu %Lu %Lu %lu %lu %lu %lu %lu", - &ife->stats.rx_bytes, - &ife->stats.rx_packets, - &ife->stats.rx_errors, -@@ -277,7 +292,7 @@ - ife->stats.rx_multicast = 0; - break; - case 1: -- sscanf(bp, "%llu %lu %lu %lu %lu %llu %lu %lu %lu %lu %lu", -+ sscanf(bp, "%Lu %lu %lu %lu %lu %Lu %lu %lu %lu %lu %lu", - &ife->stats.rx_packets, - &ife->stats.rx_errors, - &ife->stats.rx_dropped, -@@ -300,22 +315,16 @@ - - static int if_readlist_proc(char *target) - { -- static int proc_read; - FILE *fh; - char buf[512]; - struct interface *ife; - int err; - -- if (proc_read) -- return 0; -- if (!target) -- proc_read = 1; -- - fh = fopen(_PATH_PROCNET_DEV, "r"); - if (!fh) { - fprintf(stderr, _("Warning: cannot open %s (%s). Limited output.\n"), - _PATH_PROCNET_DEV, strerror(errno)); -- return if_readconf(); -+ return -2; - } - fgets(buf, sizeof buf, fh); /* eat line */ - fgets(buf, sizeof buf, fh); -@@ -350,7 +359,7 @@ - while (fgets(buf, sizeof buf, fh)) { - char *s, name[IFNAMSIZ]; - s = get_name(name, buf); -- ife = add_interface(name); -+ ife = if_cache_add(name); - get_dev_fields(s, ife); - ife->statistics_valid = 1; - if (target && !strcmp(target,name)) -@@ -359,7 +368,6 @@ - if (ferror(fh)) { - perror(_PATH_PROCNET_DEV); - err = -1; -- proc_read = 0; - } - - #if 0 -@@ -371,9 +379,16 @@ - - int if_readlist(void) - { -- int err = if_readlist_proc(NULL); -- if (!err) -- err = if_readconf(); -+ /* caller will/should check not to call this too often -+ * (i.e. only if if_list_all == 0 -+ */ -+ int err = 0; -+ -+ err |= if_readlist_proc(NULL); -+ err |= if_readconf(); -+ -+ if_list_all = 1; -+ - return err; - } - -@@ -580,10 +595,10 @@ - void ife_print_short(struct interface *ptr) - { - printf("%-5.5s ", ptr->name); -- printf("%5d %3d", ptr->mtu, ptr->metric); -+ printf("%5d %-2d ", ptr->mtu, ptr->metric); - /* If needed, display the interface statistics. */ - if (ptr->statistics_valid) { -- printf("%8llu %6lu %6lu %6lu", -+ printf("%8llu %6lu %6lu %-6lu ", - ptr->stats.rx_packets, ptr->stats.rx_errors, - ptr->stats.rx_dropped, ptr->stats.rx_fifo_errors); - printf("%8llu %6lu %6lu %6lu ", -@@ -636,9 +651,10 @@ - int hf; - int can_compress = 0; - unsigned long long rx, tx, short_rx, short_tx; -- char Rext[5]="b"; -- char Text[5]="b"; -- -+ const char *Rext = "B"; -+ const char *Text = "B"; -+ static char flags[200]; -+ - #if HAVE_AFIPX - static struct aftype *ipxtype = NULL; - #endif -@@ -670,32 +686,70 @@ - 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)); -+ } -+ if (ptr->flags & IFF_POINTOPOINT) { -+ printf(_(" destination %s"), ap->sprint(&ptr->dstaddr, 1)); - } -- printf(_(" Mask:%s\n"), ap->sprint(&ptr->netmask, 1)); -+ printf("\n"); - } - #endif - -@@ -712,29 +766,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); -@@ -747,17 +802,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 - -@@ -766,7 +821,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 - -@@ -775,53 +830,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. */ - -@@ -830,55 +862,87 @@ - * 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; -+ if (rx > 1125899906842624ull) { -+ short_rx /= 1125899906842624ull; -+ Rext = "PiB"; -+ } else if (rx > 1099511627776ull) { -+ short_rx /= 1099511627776ull; -+ Rext = "TiB"; -+ } else if (rx > 1073741824ull) { -+ short_rx /= 1073741824ull; -+ Rext = "GiB"; -+ } else if (rx > 1048576) { -+ short_rx /= 1048576; -+ Rext = "MiB"; -+ } else if (rx > 1024) { -+ short_rx /= 1024; -+ Rext = "KiB"; -+ } -+ tx = ptr->stats.tx_bytes; - short_tx = tx * 10; -- if (rx > 1048576) { short_rx /= 1048576; strcpy(Rext, "Mb"); } -- else if (rx > 1024) { short_rx /= 1024; strcpy(Rext, "Kb"); } -- if (tx > 1048576) { short_tx /= 1048576; strcpy(Text, "Mb"); } -- else if (tx > 1024) { short_tx /= 1024; strcpy(Text, "Kb"); } -- -- 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"), -+ if (tx > 1125899906842624ull) { -+ short_tx /= 1125899906842624ull; -+ Text = "PiB"; -+ } else if (tx > 1099511627776ull) { -+ short_tx /= 1099511627776ull; -+ Text = "TiB"; -+ } else if (tx > 1073741824ull) { -+ short_tx /= 1073741824ull; -+ Text = "GiB"; -+ } else if (tx > 1048576) { -+ short_tx /= 1048576; -+ Text = "MiB"; -+ } else if (tx > 1024) { -+ short_tx /= 1024; -+ Text = "KiB"; -+ } -+ -+ 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)) { -- printf(" "); -+ ptr->map.base_addr >= 0x100)) { -+ 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"); ---- net-tools-1.60/lib/ipx.c 1999-01-09 17:55:11.000000000 +0200 -+++ net-tools/lib/ipx.c 2002-07-30 08:19:29.000000000 +0300 -@@ -133,6 +133,9 @@ - char *ep; - int nbo; - -+ if (!sai) -+ return (-1); -+ - sai->sipx_family = AF_IPX; - sai->sipx_network = htonl(0); - sai->sipx_node[0] = sai->sipx_node[1] = sai->sipx_node[2] = ---- net-tools-1.60/lib/ipx_gr.c 2000-10-28 12:59:42.000000000 +0200 -+++ net-tools/lib/ipx_gr.c 2005-08-03 01:28:10.000000000 +0300 -@@ -38,21 +38,27 @@ - char net[128], router_net[128]; - char router_node[128]; - int num; -- FILE *fp = fopen(_PATH_PROCNET_IPX_ROUTE, "r"); -+ FILE *fp; - struct aftype *ap; - struct sockaddr sa; - -- if ((ap = get_afntype(AF_IPX)) == NULL) { -- EINTERN("lib/ipx_rt.c", "AF_IPX missing"); -- return (-1); -- } -+ fp = fopen(_PATH_PROCNET_IPX_ROUTE1, "r"); - - if (!fp) { -- perror(_PATH_PROCNET_IPX_ROUTE); -- printf(_("IPX not configured in this system.\n")); -+ fp = fopen(_PATH_PROCNET_IPX_ROUTE2, "r"); -+ } -+ -+ if (!fp) { -+ perror(NULL); -+ printf(_("IPX routing not in file %s or %s found.\n"), _PATH_PROCNET_IPX_ROUTE1, _PATH_PROCNET_IPX_ROUTE2); - return 1; - } - -+ if ((ap = get_afntype(AF_IPX)) == NULL) { -+ EINTERN("lib/ipx_rt.c", "AF_IPX missing"); -+ return (-1); -+ } -+ - printf(_("Kernel IPX routing table\n")); /* xxx */ - printf(_("Destination Router Net Router Node\n")); - ---- net-tools-1.60/lib/irda.c 2000-03-05 17:26:04.000000000 +0200 -+++ net-tools/lib/irda.c 2002-05-01 14:49:56.000000000 +0300 -@@ -1,13 +1,15 @@ - /********************************************************************* - * - * Filename: irda.c -- * Version: 0.1 -- * Description: A first attempt to make ifconfig understand IrDA -+ * Version: 0.2 -+ * Description: A second attempt to make ifconfig understand IrDA - * Status: Experimental. - * Author: Dag Brattli - * Created at: