]> git.ipfire.org Git - people/pmueller/ipfire-3.x.git/commitdiff
net-tools: Drop package
authorStefan Schantl <stefan.schantl@ipfire.org>
Mon, 20 Feb 2023 17:49:39 +0000 (18:49 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 21 Feb 2023 10:05:46 +0000 (10:05 +0000)
The net-tools package is deprecated and was used
by us to ship the "netstat" binary.

The successor of "netstat" is the "ss" command from
the iproute2.

Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
14 files changed:
net-tools/config.h [deleted file]
net-tools/config.make [deleted file]
net-tools/mii-diag.8 [deleted file]
net-tools/mii-diag.c [deleted file]
net-tools/net-tools.nm [deleted file]
net-tools/patches/001-net-tools-cycle.patch [deleted file]
net-tools/patches/002-net-tools-ipx.patch [deleted file]
net-tools/patches/003-net-tools-man.patch [deleted file]
net-tools/patches/004-net-tools-interface.patch [deleted file]
net-tools/patches/005-net-tools-duplicate-tcp.patch [deleted file]
net-tools/patches/006-net-tools-statalias.patch [deleted file]
net-tools/patches/007-net-tools-interface_stack.patch [deleted file]
net-tools/patches/008-net-tools-sctp-statistics.patch [deleted file]
net-tools/patches/009-net-tools-ifconfig-long-iface-crasher.patch [deleted file]

diff --git a/net-tools/config.h b/net-tools/config.h
deleted file mode 100644 (file)
index f63aecb..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-* config.h     Automatically generated configuration includefile
-*
-* NET-TOOLS    A collection of programs that form the base set of the
-*              NET-3 Networking Distribution for the LINUX operating
-*              system.
-*
-*              DO  NOT  EDIT  DIRECTLY
-*
-*/
-
-/* 
- * 
- * Internationalization
- * 
- * The net-tools package has currently been translated to French,
- * German and Brazilian Portugese.  Other translations are, of
- * course, welcome.  Answer `n' here if you have no support for
- * internationalization on your system.
- * 
- */
-#define I18N 1
-
-/* 
- * 
- * Protocol Families.
- * 
- */
-#define HAVE_AFUNIX 1
-#define HAVE_AFINET 1
-#define HAVE_AFINET6 1
-#define HAVE_AFIPX 1
-#define HAVE_AFATALK 1
-#define HAVE_AFAX25 1
-#define HAVE_AFNETROM 1
-#define HAVE_AFROSE 1
-#define HAVE_AFX25 0
-#define HAVE_AFECONET 1
-#define HAVE_AFDECnet 0
-#define HAVE_AFASH 1
-
-/* 
- * 
- * Device Hardware types.
- * 
- */
-#define HAVE_HWETHER 1
-#define HAVE_HWARC 1
-#define HAVE_HWSLIP 0
-#define HAVE_HWPPP 1
-#define HAVE_HWTUNNEL 1
-#define HAVE_HWSTRIP 0
-#define HAVE_HWTR 0
-#define HAVE_HWAX25 1
-#define HAVE_HWROSE 1
-#define HAVE_HWNETROM 1
-#define HAVE_HWX25 0
-#define HAVE_HWFR 1
-#define HAVE_HWSIT 1
-#define HAVE_HWFDDI 1
-#define HAVE_HWHIPPI 1
-#define HAVE_HWASH 1
-#define HAVE_HWHDLCLAPB 1
-#define HAVE_HWIRDA 1
-#define HAVE_HWEC 1
-#define HAVE_HWIB 1
-
-/* 
- * 
- * Other Features.
- * 
- */
-#define HAVE_FW_MASQUERADE 1
-#define HAVE_IP_TOOLS 1
-#define HAVE_MII 1
diff --git a/net-tools/config.make b/net-tools/config.make
deleted file mode 100644 (file)
index 18907a5..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-I18N=1
-HAVE_AFUNIX=1
-HAVE_AFINET=1
-HAVE_AFINET6=1
-HAVE_AFIPX=1
-HAVE_AFATALK=1
-HAVE_AFAX25=1
-HAVE_AFNETROM=1
-HAVE_AFROSE=1
-HAVE_AFX25=1
-HAVE_AFECONET=1
-# HAVE_AFDECnet=0
-HAVE_AFASH=1
-HAVE_HWETHER=1
-HAVE_HWARC=1
-HAVE_HWSLIP=1
-HAVE_HWPPP=1
-HAVE_HWTUNNEL=1
-HAVE_HWSTRIP=0
-HAVE_HWTR=0
-HAVE_HWAX25=1
-HAVE_HWROSE=1
-HAVE_HWNETROM=1
-HAVE_HWX25=1
-HAVE_HWFR=1
-HAVE_HWSIT=1
-HAVE_HWFDDI=1
-HAVE_HWHIPPI=1
-HAVE_HWASH=1
-HAVE_HWHDLCLAPB=1
-HAVE_HWIRDA=1
-HAVE_HWEC=1
-HAVE_HWIB=1
-HAVE_FW_MASQUERADE=1
-HAVE_IP_TOOLS=1
-HAVE_MII=1
-HAVE_SELINUX=0
diff --git a/net-tools/mii-diag.8 b/net-tools/mii-diag.8
deleted file mode 100644 (file)
index aa0dc0b..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-.\"                                      Hey, EMACS: -*- nroff -*-
-.\" $Revision: 1.1 $ $Date: 2003/09/06 17:20:17 $
-.\" First parameter, NAME, should be all caps
-.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
-.\" other parameters are allowed: see man(7), man(1)
-.TH MII-DIAG 8 "September 9, 2003" "Scyld Beowulf\*(Tm"
-.\" Please adjust this date whenever revising the manpage.
-.\"
-.\" Some roff macros, for reference:
-.\" .nh        disable hyphenation
-.\" .hy        enable hyphenation
-.\" .ad l      left justify
-.\" .ad b      justify to both left and right margins
-.\" .nf        disable filling
-.\" .fi        enable filling
-.\" .br        insert line break
-.\" .sp <n>    insert n+1 empty lines
-.\" for manpage-specific macros, see man(7)
-.SH NAME
-mii-diag \- Network adapter control and monitoring
-.SH SYNOPSIS
-.B mii-diag
-.RI [ options ] <interface>
-.SH DESCRIPTION
-This manual page documents briefly the
-.B mii-diag
-network adapter control and monitoring command.
-Addition documentation is available from http://scyld.com/diag/index.html.
-
-.\" TeX users may be more comfortable with the \fB<whatever>\fP and
-.\" \fI<whatever>\fP escape sequences to invoke bold face and italics, 
-.\" respectively.
-.PP
-This \fBmii-diag\fP command configures, controls and monitors the
-transceiver management registers for network interfaces, and configures
-driver operational parameters.  For transceiver control \fBmii-diag\fP
-uses the Media Independent Interface (MII) standard (thus the command name).
-It also has additional Linux-specific controls to communicate parameters
-such as message enable settings and buffer sizes to the underlying device
-driver.
-.PP
-The MII standard defines registers that control and report network
-transceiver capabilities, link settings and errors.  Examples are link
-speed, duplex, capabilities advertised to the link partner, status LED
-indications and link error counters.
-
-.SH OPTIONS
-The \fBmii-diag\fP command supports both single character and long
-option names.  Short options use a single dash (´-´) in front of the option
-character.  For options without parameters, multiple options may be
-concatenated after a single dash.  Long options are prefixed by two
-dashes (´--´), and may be abbreviated with a unique prefix.
-A long option may take a parameter of the form --arg=param or --arg param.
-
-.PP
-A summary of options is as follows.
-
-.TP
-.B \-A, --advertise <speed|setting>
-.BR
-.B \-F, --fixed-speed <speed|setting>
-
-Speed is one of: 100baseT4, 100baseTx, 100baseTx-FD, 100baseTx-HD, 10baseT,
-10baseT-FD, 10baseT-HD.  For more precise control an explict numeric
-register setting is also allowed.
-
-
-.TP
-.B \-a, \--all-interfaces
-Show the status of all interfaces.  This option is not recommended with
-any other option, especially ones that change settings.
-
-.TP
-.B \-s,\--status
-Return exit status 2 if there is no link beat.
-
-.TP
-.B \-D
-Increase the debugging level.  This may be used to understand the
-actions the command is taking.
-
-.TP
-.B \-g, \--read-parameters
-Show driver-specific parameters.
-
-.TP
-.B \-G, \--set-parameters value[,value...]
-Set driver-specific parameters.
-Set a adapter-specific parameters.
-Parameters are comma separated, with missing elements retaining the
-existing value.
-
-.TP
-.B \-v
-Increase the verbosity level.  Additional "-v" options increase the
-level further.
-
-.TP
-.B \-V
-Show the program version information.
-
-.TP
-.B \-w, \--watch
-Continuously monitor the transceiver and report changes.
-
-.TP
-.B \-?
-Emit usage information.
-
-.SH DESCRIPTION
-
-.PP
-Calling the command with just the interface name (which defaults to
-'eth0' if missing) produces extensive output describing the transceiver
-capabilities, configuration and current status.
-
-.PP
-The '--monitor' option allows scripting link beat changes.
-.PP
-This option is similar to --watch, but with lower overhead and simplifed
-output.  It polls the interface only once a second and the output format
-is a single line per link change with three fixed words
-  <unknown|down||negotiating|up> <STATUS> <PARTNER-CAP>
-.PP
-Example output:  mii-diag --monitor eth0
-   down         0x7809 0x0000
-   negotiating  0x7829 0x45e1
-   up           0x782d 0x45e1
-   down         0x7809 0x0000
-
-.PP
-This may be used as
-  mii-diag --monitor eth0 |
-    while read linkstatus bmsr linkpar; do
-     case $linkstatus in
-        up)   ifup eth0 ;;
-        down) ifdown eth0 ;;
-     esac
-    done
-
-.PP
-It may be useful to shorten the DHCP client daemon timeout if it does
-not receive an address by adding the following setting to
-/etc/sysconfig/network:
-DHCPCDARGS="-t 3"
-
-.SH SEE ALSO
-.BR ether-wake (8), net-diag (8), mii-tool (8).
-.br
-Addition documentation is available from http://scyld.com/diag/index.html.
-
-.SH KNOWN BUGS
-The --all-interfaces option is quirky.  There are very few settings that
-are usefully applied to all interfaces.
-
-.SH AUTHOR
-The manual pages, diagnostic commands, and many of the underlying Linux
-network drivers were written by Donald Becker for the Scyld
-Beowulf(\*(Tm) cluster system.
-
diff --git a/net-tools/mii-diag.c b/net-tools/mii-diag.c
deleted file mode 100644 (file)
index 69ebd0b..0000000
+++ /dev/null
@@ -1,653 +0,0 @@
-/* Mode: C;
- * mii-diag.c: Examine and set the MII registers of a network interfaces.
-
-       Usage:  mii-diag [-vw] interface.
-
-       This program reads and writes the Media Independent Interface (MII)
-       management registers on network transceivers.  The registers control
-       and report network link settings and errors.  Examples are link speed,
-       duplex, capabilities advertised to the link partner, status LED
-       indications and link error counters.
-
-       Notes:
-       The compile-command is at the end of this source file.
-       This program works with drivers that implement MII ioctl() calls.
-
-       Written/copyright 1997-2003 by Donald Becker <becker@scyld.com>
-
-       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.
-
-       The author may be reached as becker@scyld.com, or C/O
-        Scyld Computing Corporation
-        914 Bay Ridge Road, Suite 220
-        Annapolis MD 21403
-
-       References
-       http://scyld.com/expert/mii-status.html
-       http://scyld.com/expert/NWay.html
-       http://www.national.com/pf/DP/DP83840.html
-*/
-
-static char version[] =
-"mii-diag.c:v2.11 3/21/2005 Donald Becker (becker@scyld.com)\n"
-" http://www.scyld.com/diag/index.html\n";
-
-static const char usage_msg[] =
-"Usage: %s [--help] [-aDfrRvVw] [-AF <speed+duplex>] [--watch] <interface>\n";
-static const char long_usage_msg[] =
-"Usage: %s [-aDfrRvVw] [-AF <speed+duplex>] [--watch] <interface>\n\
-\n\
-  This program configures and monitors the transceiver management registers\n\
-  for network interfaces.  It uses the Media Independent Interface (MII)\n\
-  standard with additional Linux-specific controls to communicate with the\n\
-  underlying device driver.  The MII registers control and report network\n\
-  link settings and errors.  Examples are link speed, duplex, capabilities\n\
-  advertised to the link partner, status LED indications and link error\n\
-  counters.\n\
-\n\
-   The common usage is\n\
-      mii-diag eth0\n\
-\n\
- Frequently used options are\n\
-   -A  --advertise <speed|setting>\n\
-   -F  --fixed-speed <speed>\n\
-       Speed is one of: 100baseT4, 100baseTx, 100baseTx-FD, 100baseTx-HD,\n\
-                        10baseT, 10baseT-FD, 10baseT-HD\n\
-   -s  --status     Return exit status 2 if there is no link beat.\n\
-\n\
- Less frequently used options are\n\
-   -a  --all-interfaces  Show the status all interfaces\n\
-              (Not recommended with options that change settings.)\n\
-   -D  --debug\n\
-   -g  --read-parameters       Get driver-specific parameters.\n\
-   -G  --set-parameters PARMS  Set driver-specific parameters.\n\
-       Parameters are comma separated, missing parameters retain\n\
-       their previous values.\n\
-   -M  --msg-level LEVEL       Set the driver message bit map.\n\
-   -p  --phy ADDR              Set the PHY (MII address) to report.\n\
-   -r  --restart       Restart the link autonegotiation.\n\
-   -R  --reset         Reset the transceiver.\n\
-   -v  --verbose       Report each action taken.\n\
-   -V  --version       Emit version information.\n\
-   -w  --watch         Continuously monitor the transceiver and report changes.\n\
-\n\
-   This command returns success (zero) if the interface information can be\n\
-   read.  If the --status option is passed, a zero return means that the\n\
-   interface has link beat.\n\
-";
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <getopt.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <net/if.h>
-#ifdef use_linux_libc5
-#include <linux/if_arp.h>
-#include <linux/if_ether.h>
-#endif
-
-typedef u_int32_t u32;
-typedef u_int16_t u16;
-typedef u_int8_t u8;
-
-#if defined(SIOCGPARAMS)  && SIOCGPARAMS != SIOCDEVPRIVATE+3
-#error Changed definition for SIOCGPARAMS
-#else
-#define SIOCGPARAMS (SIOCDEVPRIVATE+3)                 /* Read operational parameters. */
-#define SIOCSPARAMS (SIOCDEVPRIVATE+4)                 /* Set operational parameters. */
-#endif
-
-const char shortopts[] = "aA:C:DfF:gG:hmM:p:rRsvVw?";
-struct option longopts[] = {
- /* { name  has_arg  *flag  val } */
-    {"all-interfaces", 0, 0, 'a'},     /* Show all interfaces. */
-       {"advertise",   1, 0, 'A'},             /* Change the capabilities advertised. */
-       {"BMCR",                1, 0, 'C'},             /* Set the control register. */
-    {"debug",       0, 0, 'D'},                /* Increase the debug level. */
-    {"force",       0, 0, 'f'},                /* Force the operation. */
-    {"fixed-speed", 1, 0, 'F'},                /* Fixed speed name. */
-    {"read-parameters", 0, 0, 'g'}, /* Show general settings values. */
-    {"set-parameters",  1, 0, 'G'},    /* Write general settings values. */
-    {"help",           0, 0, 'h'},             /* Print a long usage message. */
-    {"monitor",                0, 0, 'm'},             /* Monitor status register. */
-    {"msg-level",      1, 0, 'M'},             /* Set the driver message level. */
-    {"phy",                    1, 0, 'p'},             /* Set the PHY (MII address) to report. */
-    {"restart",                0, 0, 'r'},             /* Restart the link negotiation */
-    {"reset",          0, 0, 'R'},             /* Reset the transceiver. */
-    {"status",         0, 0, 's'},             /* Non-zero exit status w/ no link beat. */
-    {"verbose",        0, 0, 'v'},             /* Report each action taken.  */
-    {"version",        0, 0, 'V'},             /* Emit version information.  */
-    {"watch",          0, 0, 'w'},             /* Constantly monitor the port.  */
-    {"error",          0, 0, '?'},             /* Return the error message. */
-    { 0, 0, 0, 0 }
-};
-
-/* Usually in libmii.c, but trivial substitions are below. */
-extern int  show_mii_details(long ioaddr, int phy_id);
-extern void monitor_mii(long ioaddr, int phy_id);
-int  show_mii_details(long ioaddr, int phy_id) __attribute__((weak));
-void monitor_mii(long ioaddr, int phy_id) __attribute__((weak));
-
-
-/* Command-line flags. */
-unsigned int opt_a = 0,                                        /* Show-all-interfaces flag. */
-       opt_f = 0,                                      /* Force the operation. */
-       opt_g = 0,
-       opt_G = 0,
-       verbose = 0,                            /* Verbose flag. */
-       debug = 0,
-       opt_version = 0,
-       opt_restart = 0,
-       opt_reset = 0,
-       opt_status = 0,
-       opt_watch = 0;
-static int msg_level = -1;
-static int set_BMCR = -1;
-static int nway_advertise = 0;
-static int fixed_speed = -1;
-static int override_phy = -1;
-char *opt_G_string = NULL;
-
-/* Internal values. */
-int new_ioctl_nums;
-int skfd = -1;                                 /* AF_INET socket for ioctl() calls.    */
-struct ifreq ifr;
-
-int do_one_xcvr(int skfd);
-int show_basic_mii(long ioaddr, int phy_id);
-int mdio_read(int skfd, int phy_id, int location);
-void mdio_write(int skfd, int phy_id, int location, int value);
-static int parse_advertise(const char *capabilities);
-static void monitor_status(long ioaddr, int phy_id);
-
-
-int
-main(int argc, char **argv)
-{
-       int c, errflag = 0;
-       char **spp, *ifname;
-    char *progname = rindex(argv[0], '/') ? rindex(argv[0], '/')+1 : argv[0];
-
-       while ((c = getopt_long(argc, argv, shortopts, longopts, 0)) != EOF)
-               switch (c) {
-               case 'a': opt_a++; break;
-               case 'A': nway_advertise |= parse_advertise(optarg);
-                       if (nway_advertise == -1) errflag++;
-                       break;
-               case 'C': set_BMCR = strtoul(optarg, NULL, 16); break;
-               case 'D': debug++;                      break;
-               case 'f': opt_f++; break;
-               case 'F': fixed_speed = parse_advertise(optarg);
-                       if (fixed_speed == -1) errflag++;
-                       break;
-               case 'g': opt_g++; break;
-               case 'G': opt_G++; opt_G_string = strdup(optarg); break;
-               case 'm': opt_watch++; opt_status++; break;
-               case 'M': msg_level = strtoul(optarg, NULL, 0); break;
-               case 'h': fprintf(stderr, long_usage_msg, progname); return 0;
-               case 'p': override_phy = atoi(optarg); break;
-               case 'r': opt_restart++;        break;
-               case 'R': opt_reset++;          break;
-               case 's': opt_status++;         break;
-               case 'v': verbose++;            break;
-               case 'V': opt_version++;        break;
-               case 'w': opt_watch++;          break;
-               case '?': errflag++;            break;
-               }
-       if (errflag) {
-               fprintf(stderr, usage_msg, progname);
-               return 2;
-       }
-
-       if (verbose || opt_version)
-               printf("%s", version);
-
-       /* Open a basic socket. */
-       if ((skfd = socket(AF_INET, SOCK_DGRAM,0)) < 0) {
-               perror("socket");
-               return 1;
-       }
-
-       if (debug)
-               fprintf(stderr, "DEBUG: argc=%d, optind=%d and argv[optind] is %s.\n",
-                               argc, optind, argv[optind]);
-
-       /* No remaining args means interface wasn't specified. */
-       if (optind == argc) {
-               fprintf(stderr, "No interface specified.\n");
-               fprintf(stderr, usage_msg, progname);
-               (void) close(skfd);
-               return 2;
-       } else {
-               /* Copy the interface name. */
-               spp = argv + optind;
-               ifname = *spp++;
-       }
-
-       if (ifname == NULL) {
-               fprintf(stderr, "No ifname.\n");
-               (void) close(skfd);
-               return -1;
-       }
-
-       /* Verify that the interface supports the ioctl(), and if
-          it is using the new or old SIOCGMIIPHY value (grrr...).
-        */
-       {
-               u16 *data = (u16 *)(&ifr.ifr_data);
-
-               strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
-               ifr.ifr_name[IFNAMSIZ-1] = '\0';
-               data[0] = 0;
-
-               if (ioctl(skfd, 0x8947, &ifr) >= 0) {
-                       new_ioctl_nums = 1;
-               } else if (ioctl(skfd, SIOCDEVPRIVATE, &ifr) >= 0) {
-                       new_ioctl_nums = 0;
-               } else {
-                       fprintf(stderr, "SIOCGMIIPHY on %s failed: %s\n", ifname,
-                                       strerror(errno));
-                       (void) close(skfd);
-                       return 1;
-               }
-               if (verbose)
-                       printf("  Using the %s SIOCGMIIPHY value on PHY %d "
-                                  "(BMCR 0x%4.4x).\n",
-                                  new_ioctl_nums ? "new" : "old", data[0], data[3]);
-       }
-
-       do_one_xcvr(skfd);
-
-       (void) close(skfd);
-       return 0;
-}
-
-int do_one_xcvr(int skfd)
-{
-       u16 *data = (u16 *)(&ifr.ifr_data);
-       u32 *data32 = (u32 *)(&ifr.ifr_data);
-       unsigned phy_id = data[0];
-
-       if (override_phy >= 0) {
-               printf("Using the specified MII PHY index %d.\n", override_phy);
-               phy_id = override_phy;
-       }
-
-       if (opt_g || opt_G || msg_level >= 0) {
-               if (ioctl(skfd, SIOCGPARAMS, &ifr) < 0) {
-                       fprintf(stderr, "SIOCGPARAMS on %s failed: %s\n", ifr.ifr_name,
-                                       strerror(errno));
-                       return -1;
-               }
-       }
-       if (opt_g) {
-               int i;
-               printf("Driver general parameter settings:");
-               for (i = 0; i*sizeof(u32) < sizeof(ifr.ifr_ifru); i++) {
-                       printf(" %d", data32[i]);
-               }
-               printf(".\n");
-       }
-       if (opt_G) {
-               /* Set up to four arbitrary driver parameters from the -G parameter.
-                  The format is comma separated integers, with a missing element
-                  retaining the previous value.
-               */
-               char *str = opt_G_string;
-               int i;
-               for (i = 0; str && i < 4; i++) {
-                       char *endstr;
-                       u32 newval = strtol(str, &endstr, 0);
-                       if (debug)
-                               printf(" parse string '%s'  value %d end '%s'.\n",
-                                          str, newval, endstr);
-                       if (str == endstr) {
-                               if (endstr[0] == ',') /* No parameter */
-                                       str = endstr+1;
-                               else {
-                                       fprintf(stderr, "Invalid driver parameter '%s'.\n", str);
-                                       str = index(str, ',');
-                               }
-                       } else if (endstr[0] == ',') {
-                               data32[i] = newval;
-                               str = endstr + 1;
-                       } else if (endstr[0] == 0) {
-                               data32[i] = newval;
-                               break;
-                       }
-               }
-               printf("Setting new driver general parameters:");
-               for (i = 0; i*sizeof(u32) < sizeof(ifr.ifr_ifru); i++) {
-                       printf(" %d", data32[i]);
-               }
-               printf(".\n");
-               if (ioctl(skfd, SIOCSPARAMS, &ifr) < 0) {
-                       fprintf(stderr, "SIOCSPARAMS on %s failed: %s\n", ifr.ifr_name,
-                                       strerror(errno));
-                       return -1;
-               }
-       }
-       if (msg_level >= 0) {
-               data32[0] = msg_level;
-               if (ioctl(skfd, SIOCSPARAMS, &ifr) < 0) {
-                       fprintf(stderr, "SIOCSPARAMS on %s failed: %s\n", ifr.ifr_name,
-                                       strerror(errno));
-                       return -1;
-               }
-       }
-
-       if (opt_reset) {
-               printf("Resetting the transceiver...\n");
-               mdio_write(skfd, phy_id, 0, 0x8000);
-       }
-       /* Note: PHY addresses > 32 are pseudo-MII devices, usually built-in. */
-       if (phy_id < 64  &&  nway_advertise > 0) {
-               printf(" Setting the media capability advertisement register of "
-                          "PHY #%d to 0x%4.4x.\n", phy_id, nway_advertise | 1);
-               mdio_write(skfd, phy_id, 4, nway_advertise | 1);
-               mdio_write(skfd, phy_id, 0, 0x1000);
-       }
-
-       if (opt_restart) {
-               printf("Restarting negotiation...\n");
-               mdio_write(skfd, phy_id, 0, 0x0000);
-               mdio_write(skfd, phy_id, 0, 0x1200);
-       }
-       /* To force 100baseTx-HD do  mdio_write(skfd, phy_id, 0, 0x2000); */
-       if (fixed_speed >= 0) {
-               int reg0_val = 0;
-               if (fixed_speed & 0x0180)               /* 100mpbs */
-                       reg0_val |=  0x2000;
-               if ((fixed_speed & 0x0140) &&           /* A full duplex type and */
-                       ! (fixed_speed & 0x0820))               /* no half duplex types. */
-                       reg0_val |= 0x0100;
-               printf("Setting the speed to \"fixed\", Control register %4.4x.\n",
-                          reg0_val);
-               mdio_write(skfd, phy_id, 0, reg0_val);
-       }
-       if (set_BMCR >= 0) {
-               printf("Setting the Basic Mode Control Register to 0x%4.4x.\n",
-                          set_BMCR);
-               mdio_write(skfd, phy_id, 0, set_BMCR);
-       }
-
-       if (opt_watch && opt_status)
-               monitor_status(skfd, phy_id);
-
-       show_basic_mii(skfd, phy_id);
-#ifdef LIBMII
-       if (verbose)
-               show_mii_details(skfd, phy_id);
-#else
-       if (verbose || debug) {
-               int mii_reg, mii_val;
-               printf(" MII PHY #%d transceiver registers:", phy_id);
-               for (mii_reg = 0; mii_reg < 32; mii_reg++) {
-                       mii_val = mdio_read(skfd, phy_id, mii_reg);
-                       printf("%s %4.4x", (mii_reg % 8) == 0 ? "\n  " : "",
-                                  mii_val);
-               }
-               printf("\n");
-       }
-#endif
-
-       if (opt_watch)
-               monitor_mii(skfd, phy_id);
-       if (opt_status &&
-               (mdio_read(skfd, phy_id, 1) & 0x0004) == 0)
-               exit(2);
-       return 0;
-}
-
-int mdio_read(int skfd, int phy_id, int location)
-{
-       u16 *data = (u16 *)(&ifr.ifr_data);
-
-       data[0] = phy_id;
-       data[1] = location;
-
-       if (ioctl(skfd, new_ioctl_nums ? 0x8948 : SIOCDEVPRIVATE+1, &ifr) < 0) {
-               fprintf(stderr, "SIOCGMIIREG on %s failed: %s\n", ifr.ifr_name,
-                               strerror(errno));
-               return -1;
-       }
-       return data[3];
-}
-
-void mdio_write(int skfd, int phy_id, int location, int value)
-{
-       u16 *data = (u16 *)(&ifr.ifr_data);
-
-       data[0] = phy_id;
-       data[1] = location;
-       data[2] = value;
-
-       if (ioctl(skfd, new_ioctl_nums ? 0x8949 : SIOCDEVPRIVATE+2, &ifr) < 0) {
-               fprintf(stderr, "SIOCSMIIREG on %s failed: %s\n", ifr.ifr_name,
-                               strerror(errno));
-       }
-}
-
-/* Parse the command line argument for advertised capabilities. */
-static int parse_advertise(const char *capabilities)
-{
-       const char *mtypes[] = {
-               "100baseT4", "100baseTx", "100baseTx-FD", "100baseTx-HD",
-               "10baseT", "10baseT-FD", "10baseT-HD", 0,
-       };
-       char *endptr;
-       int cap_map[] = { 0x0200, 0x0180, 0x0100, 0x0080, 0x0060, 0x0040, 0x0020,};
-       int i;
-       if ( ! capabilities) {
-               fprintf(stderr, "You passed -A 'NULL'.  You must provide a media"
-                               " list to advertise!\n");
-               return -1;
-       }
-       if (debug)
-               fprintf(stderr, "Advertise string is '%s'.\n", capabilities);
-       for (i = 0; mtypes[i]; i++)
-               if (strcasecmp(mtypes[i], capabilities) == 0)
-                       return cap_map[i];
-       if ((i = strtol(capabilities, &endptr, 16)) <= 0xffff  &&  endptr[0] == 0)
-               return i;
-       fprintf(stderr, "Invalid media advertisement value '%s'.\n"
-                       "  Either pass a numeric value or one of the following names:\n",
-                       capabilities);
-       for (i = 0; mtypes[i]; i++)
-               fprintf(stderr, "   %-14s %3.3x\n", mtypes[i], cap_map[i]);
-       return -1;
-}
-
-/* Trivial versions if we don't link against libmii.c */
-static const char *media_names[] = {
-       "10baseT", "10baseT-FD", "100baseTx", "100baseTx-FD", "100baseT4",
-       "Flow-control", 0,
-};
-/* Various non-good bits in the command register. */
-static const char *bmcr_bits[] = {
-       "  Internal Collision-Test enabled!\n", "",             /* 0x0080,0x0100 */
-       "  Restarted auto-negotiation in progress!\n",
-       "  Transceiver isolated from the MII!\n",
-       "  Transceiver powered down!\n", "", "",
-       "  Transceiver in loopback mode!\n",
-       "  Transceiver currently being reset!\n",
-};
-
-int show_basic_mii(long ioaddr, int phy_id)
-{
-       int mii_reg, i;
-       u16 mii_val[32];
-       u16 bmcr, bmsr, new_bmsr, nway_advert, lkpar;
-
-       for (mii_reg = 0; mii_reg < 8; mii_reg++)
-               mii_val[mii_reg] = mdio_read(ioaddr, phy_id, mii_reg);
-       if ( ! verbose) {
-               printf("Basic registers of MII PHY #%d: ", phy_id);
-               for (mii_reg = 0; mii_reg < 8; mii_reg++)
-                       printf(" %4.4x", mii_val[mii_reg]);
-               printf(".\n");
-       }
-
-       if (mii_val[0] == 0xffff  ||  mii_val[1] == 0x0000) {
-               printf("  No MII transceiver present!.\n");
-               if (! opt_f) {
-                       printf("  Use '--force' to view the information anyway.\n");
-                       return -1;
-               }
-       }
-       /* Descriptive rename. */
-       bmcr = mii_val[0];
-       bmsr = mii_val[1];
-       nway_advert = mii_val[4];
-       lkpar = mii_val[5];
-
-       if (lkpar & 0x4000) {
-               int negotiated = nway_advert & lkpar & 0x3e0;
-               int max_capability = 0;
-               /* Scan for the highest negotiated capability, highest priority
-                  (100baseTx-FDX) to lowest (10baseT-HDX). */
-               int media_priority[] = {8, 9, 7, 6, 5};         /* media_names[i-5] */
-               printf(" The autonegotiated capability is %4.4x.\n", negotiated);
-               for (i = 0; media_priority[i]; i++)
-                       if (negotiated & (1 << media_priority[i])) {
-                               max_capability = media_priority[i];
-                               break;
-                       }
-               if (max_capability)
-                       printf("The autonegotiated media type is %s.\n",
-                                  media_names[max_capability - 5]);
-               else
-                       printf("No common media type was autonegotiated!\n"
-                                  "This is extremely unusual and typically indicates a "
-                                  "configuration error.\n" "Perhaps the advertised "
-                                  "capability set was intentionally limited.\n");
-       }
-       printf(" Basic mode control register 0x%4.4x:", bmcr);
-       if (bmcr & 0x1000)
-               printf(" Auto-negotiation enabled.\n");
-       else
-               printf(" Auto-negotiation disabled, with\n"
-                          " Speed fixed at 10%s mbps, %s-duplex.\n",
-                          bmcr & 0x2000 ? "0" : "",
-                          bmcr & 0x0100 ? "full":"half");
-       for (i = 0; i < 9; i++)
-               if (bmcr & (0x0080<<i))
-                       printf("%s", bmcr_bits[i]);
-
-       new_bmsr = mdio_read(ioaddr, phy_id, 1);
-       if ((bmsr & 0x0016) == 0x0004)
-               printf( " You have link beat, and everything is working OK.\n");
-       else
-               printf(" Basic mode status register 0x%4.4x ... %4.4x.\n"
-                          "   Link status: %sestablished.\n",
-                          bmsr, new_bmsr,
-                          bmsr & 0x0004 ? "" :
-                          (new_bmsr & 0x0004) ? "previously broken, but now re" : "not ");
-       if (verbose) {
-               printf("   This transceiver is capable of ");
-               if (bmsr & 0xF800) {
-                       for (i = 15; i >= 11; i--)
-                               if (bmsr & (1<<i))
-                                       printf(" %s", media_names[i-11]);
-               } else
-                       printf("<Warning! No media capabilities>");
-               printf(".\n");
-               printf("   %s to perform Auto-negotiation, negotiation %scomplete.\n",
-                          bmsr & 0x0008 ? "Able" : "Unable",
-                          bmsr & 0x0020 ? "" : "not ");
-       }
-
-       if (bmsr & 0x0010)
-               printf(" Remote fault detected!\n");
-       if (bmsr & 0x0002)
-               printf("   *** Link Jabber! ***\n");
-
-       if (lkpar & 0x4000) {
-               printf(" Your link partner advertised %4.4x:",
-                          lkpar);
-               for (i = 5; i >= 0; i--)
-                       if (lkpar & (0x20<<i))
-                               printf(" %s", media_names[i]);
-               printf("%s.\n", lkpar & 0x0400 ? ", w/ 802.3X flow control" : "");
-       } else if (lkpar & 0x00A0)
-               printf(" Your link partner is generating %s link beat  (no"
-                          " autonegotiation).\n",
-                          lkpar & 0x0080 ? "100baseTx" : "10baseT");
-       else if ( ! (bmcr & 0x1000))
-               printf(" Link partner information is not exchanged when in"
-                          " fixed speed mode.\n");
-       else if ( ! (new_bmsr & 0x004))
-                                                       ;       /* If no partner, do not report status. */
-       else if (lkpar == 0x0001  ||  lkpar == 0x0000) {
-               printf(" Your link partner does not do autonegotiation, and this "
-                          "transceiver type\n  does not report the sensed link "
-                          "speed.\n");
-       } else
-               printf(" Your link partner is strange, status %4.4x.\n", lkpar);
-
-       printf("   End of basic transceiver information.\n\n");
-       return 0;
-}
-
-static void monitor_status(long ioaddr, int phy_id)
-{
-       unsigned int baseline_1 = 0x55555555;   /* Always show initial status. */
-
-       while (1) {
-               unsigned int new_1 = mdio_read(ioaddr, phy_id, 1);
-               if (new_1 != baseline_1) {
-                       printf("%-12s 0x%4.4x 0x%4.4x\n",
-                                  new_1 & 0x04 ? (new_1==0xffff ? "unknown" : "up") :
-                                  new_1 & 0x20 ? "negotiating" : "down",
-                                  new_1, mdio_read(ioaddr, phy_id, 5));
-                       fflush(stdout);
-                       baseline_1 = new_1;
-               }
-               sleep(1);
-       }
-}
-
-int  show_mii_details(long ioaddr, int phy_id)
-{
-       int mii_reg, mii_val;
-       printf(" MII PHY #%d transceiver registers:", phy_id);
-       for (mii_reg = 0; mii_reg < 32; mii_reg++) {
-               mii_val = mdio_read(skfd, phy_id, mii_reg);
-               printf("%s %4.4x", (mii_reg % 8) == 0 ? "\n  " : "",
-                          mii_val);
-       }
-       printf("\nThis version of 'mii-diag' has not been linked with "
-                       "the libmii.c library.\n"
-                       "  That library provides extended transceiver status reports.\n");
-       return 0;
-}
-
-void monitor_mii(long ioaddr, int phy_id)
-{
-       fprintf(stderr, "\nThis version of 'mii-diag' has not been linked with "
-                       "the libmii.c library \n"
-                       "  required for the media monitor option.\n");
-}
-
-
-\f
-/*
- * Local variables:
- *  version-control: t
- *  kept-new-versions: 5
- *  c-indent-level: 4
- *  c-basic-offset: 4
- *  tab-width: 4
- *  compile-command: "gcc -Wall -Wstrict-prototypes -O mii-diag.c -DLIBMII libmii.c -o mii-diag"
- *  simple-compile-command: "gcc mii-diag.c -o mii-diag"
- * End:
- */
diff --git a/net-tools/net-tools.nm b/net-tools/net-tools.nm
deleted file mode 100644 (file)
index 24ae372..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# IPFire.org    - An Open Source Firewall Solution                            #
-# Copyright (C) - IPFire Development Team <info@ipfire.org>                   #
-###############################################################################
-
-name       = net-tools
-version    = 2.0
-git_rev    = e5f1be13
-release    = 2.%{git_rev}
-
-groups     = System/Base
-url        = http://net-tools.berlios.de/
-license    = GPL+
-summary    = Basic networking tools.
-
-description
-       The net-tools package contains basic networking tools,
-       including ifconfig, netstat, route, and others.
-end
-
-source_dl  =
-sources    = %{thisapp}-%{git_rev}.tar.xz
-
-build
-       requires
-               gettext
-       end
-
-       prepare_cmds
-               # Copy config files
-               cp  %{DIR_SOURCE}/config.h %{DIR_APP}
-               cp  %{DIR_SOURCE}/config.make %{DIR_APP}
-
-               # Copy additional man pages
-               mkdir -pv %{DIR_APP}/man/en_US
-               cp %{DIR_SOURCE}/*.8 %{DIR_APP}/man/en_US
-
-               # Copy source for mii-diag
-               cp %{DIR_SOURCE}/mii-diag.c %{DIR_APP}
-       end
-
-       make_build_targets += \
-                CC=gcc
-
-       # Compiling in parallel mode is unsafe for this pkg.
-       PARALLELISMFLAGS =
-
-       build_cmds
-               # Compile mii-diag
-               make mii-diag
-       end
-
-       install
-               mv man/de_DE man/de
-               mv man/fr_FR man/fr
-               mv man/pt_BR man/pt
-
-               make BASEDIR=%{BUILDROOT} BINDIR=%{bindir} \
-                       SBINDIR=%{sbindir} mandir=%{mandir} install
-
-               # Install mii-diag
-               install -m 755 %{DIR_APP}/mii-diag %{BUILDROOT}%{sbindir}
-
-               # Remove tools we do not want
-               rm -rvf \
-                       %{BUILDROOT}%{prefix}/{,*}/{arp,ifconfig,ip,nameif,plipconfig,rarp,route,slattach}* \
-                       %{BUILDROOT}%{mandir}/{,*}/man*/{arp,ifconfig,ip,nameif,plipconfig,rarp,route,slattach}*
-
-               # Remove hostname (has its own package)
-               rm -rvf \
-                       %{BUILDROOT}%{bindir}/{dnsdomainname,domainname,hostname,nisdomainname,ypdomainname}* \
-                       %{BUILDROOT}%{mandir}/{,*}/man*/{dnsdomainname,domainname,hostname,nisdomainname,ypdomainname}*
-       end
-end
-
-packages
-       package %{name}
-               groups += Base
-       end
-
-       package %{name}-debuginfo
-               template DEBUGINFO
-       end
-end
diff --git a/net-tools/patches/001-net-tools-cycle.patch b/net-tools/patches/001-net-tools-cycle.patch
deleted file mode 100644 (file)
index 7d58dbb..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-diff -up net-tools-2.0/lib/interface.c.cycle net-tools-2.0/lib/interface.c
---- net-tools-2.0/lib/interface.c.cycle        2014-11-11 14:38:03.000000000 +0100
-+++ net-tools-2.0/lib/interface.c      2014-11-24 14:45:46.128480980 +0100
-@@ -93,6 +93,7 @@ int if_list_all = 0; /* do we have reque
- static struct interface *int_list, *int_last;
- static int if_readlist_proc(const char *);
-+static int if_readlist_rep(const char *, struct interface *);
- static struct interface *if_cache_add(const char *name)
- {
-@@ -138,11 +139,14 @@ struct interface *lookup_interface(const
- int for_all_interfaces(int (*doit) (struct interface *, void *), void *cookie)
- {
-     struct interface *ife;
-+    int err;
-     if (!if_list_all && (if_readlist() < 0))
-       return -1;
-     for (ife = int_list; ife; ife = ife->next) {
--      int err = doit(ife, cookie);
-+      if_readlist_rep(ife->name, ife);
-+      err = doit(ife, cookie);
-+
-       if (err)
-           return err;
-     }
-@@ -379,6 +383,41 @@ static int if_readlist_proc(const char *
-     fclose(fh);
-     return err;
- }
-+
-+static int if_readlist_rep(const char *target, struct interface *ife)
-+{
-+    FILE *fh;
-+    char buf[512];
-+    int err;
-+
-+    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();
-+      }       
-+    fgets(buf, sizeof buf, fh);       /* eat line */
-+    fgets(buf, sizeof buf, fh);
-+
-+    procnetdev_vsn = procnetdev_version(buf);
-+
-+    err = 0;
-+    while (fgets(buf, sizeof buf, fh)) {
-+      char *s, name[IFNAMSIZ];
-+      s = get_name(name, buf);    
-+      get_dev_fields(s, ife);
-+      ife->statistics_valid = 1;
-+      if (target && !strcmp(target,name))
-+              break;
-+    }
-+    if (ferror(fh)) {
-+      perror(_PATH_PROCNET_DEV);
-+      err = -1;
-+    }
-+
-+    fclose(fh);
-+    return err;
-+}
- int if_readlist(void)
- {
-diff -up net-tools-2.0/man/en_US/netstat.8.cycle net-tools-2.0/man/en_US/netstat.8
---- net-tools-2.0/man/en_US/netstat.8.cycle    2014-11-11 14:38:03.000000000 +0100
-+++ net-tools-2.0/man/en_US/netstat.8  2014-11-24 14:47:36.140944944 +0100
-@@ -36,6 +36,7 @@ netstat \- Print network connections, ro
- .RB [ \-\-verbose | \-v ]
- .RB [ \-\-continuous | \-c]
- .RB [ \-\-wide | \-W ]
-+.RB [delay]
- .P
- .B netstat 
- .RB { \-\-route | \-r }
-@@ -45,6 +46,7 @@ netstat \- Print network connections, ro
- .RB [ \-\-numeric | \-n ]
- .RB [ \-\-numeric\-hosts "] [" \-\-numeric\-ports "] [" \-\-numeric\-users ]
- .RB [ \-\-continuous | \-c ]
-+.RB [delay]
- .P
- .B netstat
- .RB { \-\-interfaces | \-i }
-@@ -55,12 +57,14 @@ netstat \- Print network connections, ro
- .RB [ \-\-numeric | \-n ]
- .RB [ \-\-numeric-hosts "] [" \-\-numeric-ports "] [" \-\-numeric-users ]
- .RB [ \-\-continuous | \-c ]
-+.RB [delay]
- .P
- .B netstat
- .RB { \-\-groups | \-g }
- .RB [ \-\-numeric | \-n ]
- .RB [ \-\-numeric\-hosts "] [" \-\-numeric\-ports "] [" \-\-numeric\-users ]
- .RB [ \-\-continuous | \-c ]
-+.RB [delay]
- .P
- .B netstat
- .RB { \-\-masquerade | \-M }
-@@ -68,6 +72,7 @@ netstat \- Print network connections, ro
- .RB [ \-\-numeric | \-n ]
- .RB [ \-\-numeric\-hosts "] [" \-\-numeric\-ports "] [" \-\-numeric\-users ]
- .RB [ \-\-continuous | \-c ]
-+.RB [delay]
- .P
- .B netstat
- .RB { \-\-statistics | -s }
-@@ -76,6 +81,7 @@ netstat \- Print network connections, ro
- .RB [ \-\-udplite | \-U ]
- .RB [ \-\-sctp | \-S ]
- .RB [ \-\-raw | \-w ]
-+.RB [delay]
- .P
- .B netstat 
- .RB { \-\-version | \-V }
-@@ -208,6 +214,10 @@ option, show interfaces that are not up
- Print routing information from the FIB.  (This is the default.)
- .SS "\-C"
- Print routing information from the route cache.
-+.SS delay
-+Netstat will cycle printing through statistics every 
-+.B delay 
-+seconds.
- .P
- .SH OUTPUT
- .P
-diff -up net-tools-2.0/netstat.c.cycle net-tools-2.0/netstat.c
---- net-tools-2.0/netstat.c.cycle      2014-11-11 14:38:03.000000000 +0100
-+++ net-tools-2.0/netstat.c    2014-11-24 14:44:24.948614445 +0100
-@@ -115,9 +115,9 @@
- #endif
- /* prototypes for statistics.c */
--void parsesnmp(int, int, int);
-+int parsesnmp(int, int, int);
- void inittab(void);
--void parsesnmp6(int, int, int);
-+int parsesnmp6(int, int, int);
- void inittab6(void);
- typedef enum {
-@@ -342,10 +342,10 @@ static void prg_cache_clear(void)
-     prg_cache_loaded = 0;
- }
--static void wait_continous(void)
-+static void wait_continous(int reptimer)
- {
-     fflush(stdout);
--    sleep(1);
-+    sleep(reptimer);
- }
- static int extract_type_1_socket_inode(const char lname[], unsigned long * inode_p) {
-@@ -1787,6 +1787,8 @@ static int rfcomm_info(void)
- static int iface_info(void)
- {
-+    static int count=0;
-+
-     if (skfd < 0) {
-       if ((skfd = sockets_open(0)) < 0) {
-           perror("socket");
-@@ -1796,20 +1798,21 @@ static int iface_info(void)
-     }
-     if (flag_exp < 2) {
-       ife_short = 1;
--      printf(_("Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
-+      if(!(count % 8))
-+          printf(_("Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
-     }
-     if (for_all_interfaces(do_if_print, &flag_all) < 0) {
-       perror(_("missing interface information"));
-       exit(1);
-     }
--    if (flag_cnt)
-+    if (!flag_cnt) {
-       if_cache_free();
--    else {
-       close(skfd);
-       skfd = -1;
-     }
-+    count++;
-     return 0;
- }
-@@ -1825,7 +1828,7 @@ static void usage(void)
- {
-     fprintf(stderr, _("usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}\n"));
-     fprintf(stderr, _("       netstat [-vWnNcaeol] [<Socket> ...]\n"));
--    fprintf(stderr, _("       netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }\n\n"));
-+    fprintf(stderr, _("       netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]\n\n"));
-     fprintf(stderr, _("        -r, --route              display routing table\n"));
-     fprintf(stderr, _("        -i, --interfaces         display interface table\n"));
-@@ -1867,6 +1870,7 @@ int main
-  (int argc, char *argv[]) {
-     int i;
-     int lop;
-+    int reptimer = 1;
-     static struct option longopts[] =
-     {
-       AFTRANS_OPTS,
-@@ -2049,6 +2053,12 @@ int main
-           flag_sta++;
-       }
-+    if(argc == optind + 1) {
-+      if((reptimer = atoi(argv[optind])) <= 0)
-+      usage();
-+      flag_cnt++;
-+    }
-+    
-     if (flag_int + flag_rou + flag_mas + flag_sta > 1)
-       usage();
-@@ -2078,7 +2088,7 @@ int main
-                            flag_not & FLAG_NUM_PORT, flag_exp);
-           if (i || !flag_cnt)
-               break;
--          wait_continous();
-+          wait_continous(reptimer);
-       }
- #else
-       ENOSUPP("netstat", "FW_MASQUERADE");
-@@ -2091,17 +2101,18 @@ int main
-         if (!afname[0])
-             safe_strncpy(afname, DFLT_AF, sizeof(afname));
-+        for (;;) {
-         if (!strcmp(afname, "inet")) {
- #if HAVE_AFINET
-             inittab();
--            parsesnmp(flag_raw, flag_tcp, flag_udp);
-+            i = parsesnmp(flag_raw, flag_tcp, flag_udp);
- #else
-             ENOSUPP("netstat", "AF INET");
- #endif
-         } else if(!strcmp(afname, "inet6")) {
- #if HAVE_AFINET6
-             inittab6();
--            parsesnmp6(flag_raw, flag_tcp, flag_udp);
-+            i = parsesnmp6(flag_raw, flag_tcp, flag_udp);
- #else
-             ENOSUPP("netstat", "AF INET6");
- #endif
-@@ -2109,7 +2120,11 @@ int main
-           printf(_("netstat: No statistics support for specified address family: %s\n"), afname);
-           exit(1);
-         }
--        exit(0);
-+      if(i || !flag_cnt)
-+        break;
-+      sleep(reptimer);
-+        }
-+        return (i);
-     }
-     if (flag_rou) {
-@@ -2131,7 +2146,7 @@ int main
-           i = route_info(afname, options);
-           if (i || !flag_cnt)
-               break;
--            wait_continous();
-+            wait_continous(reptimer);
-       }
-       return (i);
-     }
-@@ -2140,7 +2155,7 @@ int main
-           i = iface_info();
-           if (!flag_cnt || i)
-               break;
--            wait_continous();
-+            wait_continous(reptimer);
-       }
-       return (i);
-     }
-@@ -2327,7 +2342,7 @@ int main
-       if (!flag_cnt || i)
-           break;
--        wait_continous();
-+        wait_continous(reptimer);
-       prg_cache_clear();
-     }
-     return (i);
-diff -up net-tools-2.0/statistics.c.cycle net-tools-2.0/statistics.c
---- net-tools-2.0/statistics.c.cycle   2014-11-11 14:38:03.000000000 +0100
-+++ net-tools-2.0/statistics.c 2014-11-24 14:44:24.949614431 +0100
-@@ -502,7 +502,7 @@ void process6_fd(FILE *f)
- }
--void parsesnmp(int flag_raw, int flag_tcp, int flag_udp)
-+int parsesnmp(int flag_raw, int flag_tcp, int flag_udp)
- {
-     FILE *f;
-@@ -511,14 +511,17 @@ void parsesnmp(int flag_raw, int flag_tc
-     f = proc_fopen("/proc/net/snmp");
-     if (!f) {
-       perror(_("cannot open /proc/net/snmp"));
--      return;
-+      return(1);
-     }
-     if (process_fd(f, 1, NULL) < 0)
-       fprintf(stderr, _("Problem while parsing /proc/net/snmp\n"));
--    if (ferror(f))
-+    if (ferror(f)) {
-       perror("/proc/net/snmp");
-+      fclose(f);
-+      return(1);
-+    }
-     fclose(f);
-@@ -528,15 +531,18 @@ void parsesnmp(int flag_raw, int flag_tc
-       if (process_fd(f, 1, NULL) <0)
-           fprintf(stderr, _("Problem while parsing /proc/net/netstat\n"));
--        if (ferror(f))
--          perror("/proc/net/netstat");
-+        if (ferror(f)) {
-+        perror("/proc/net/netstat");
-+        fclose(f);
-+        return(1);
-+        }
-         fclose(f);
-     }
--    return;
-+    return(0);
- }
--void parsesnmp6(int flag_raw, int flag_tcp, int flag_udp)
-+int parsesnmp6(int flag_raw, int flag_tcp, int flag_udp)
- {
-     FILE *f;
-@@ -545,7 +551,7 @@ void parsesnmp6(int flag_raw, int flag_t
-     f = fopen("/proc/net/snmp6", "r");
-     if (!f) {
-         perror(_("cannot open /proc/net/snmp6"));
--        return;
-+        return(1);
-     }
-     process6_fd(f);
-     if (ferror(f))
-@@ -555,13 +561,16 @@ void parsesnmp6(int flag_raw, int flag_t
-     f = fopen("/proc/net/snmp", "r");
-     if (!f) {
-         perror(_("cannot open /proc/net/snmp"));
--        return;
-+        return(1);
-     }
-     process_fd(f, 0, "Tcp");
--    if (ferror(f))
-+    if (ferror(f)) {
-         perror("/proc/net/snmp");
-+        return(1);
-+    }
-     fclose(f);
-+    return(0);
- }
- void inittab(void)
diff --git a/net-tools/patches/002-net-tools-ipx.patch b/net-tools/patches/002-net-tools-ipx.patch
deleted file mode 100644 (file)
index ec78145..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-diff -up net-tools-2.0/lib/ipx_gr.c.ipx net-tools-2.0/lib/ipx_gr.c
---- net-tools-2.0/lib/ipx_gr.c.ipx     2013-09-10 12:33:52.494047907 +0200
-+++ net-tools-2.0/lib/ipx_gr.c 2013-09-10 12:34:28.531561603 +0200
-@@ -72,7 +72,7 @@ int IPX_rprint(int options)
-           continue;
-       /* Fetch and resolve the Destination */
--      (void) ap->input(5, net, &sa);
-+      (void) ap->input(1, net, &sa);
-       safe_strncpy(net, ap->sprint(&sa, numeric), sizeof(net));
-       /* Fetch and resolve the Router Net */
-diff -up net-tools-2.0/netstat.c.ipx net-tools-2.0/netstat.c
---- net-tools-2.0/netstat.c.ipx        2013-09-10 12:33:52.491047948 +0200
-+++ net-tools-2.0/netstat.c    2013-09-10 12:33:52.495047894 +0200
-@@ -1643,13 +1643,13 @@ static int ipx_info(void)
-       }
-       /* Fetch and resolve the Source */
--      (void) ap->input(4, sad, &sa);
-+      (void) ap->input(0, sad, &sa);
-       safe_strncpy(buf, ap->sprint(&sa, flag_not & FLAG_NUM_HOST), sizeof(buf));
-       snprintf(sad, sizeof(sad), "%s:%04X", buf, sport);
-       if (!nc) {
-           /* Fetch and resolve the Destination */
--          (void) ap->input(4, dad, &sa);
-+          (void) ap->input(0, dad, &sa);
-           safe_strncpy(buf, ap->sprint(&sa, flag_not & FLAG_NUM_HOST), sizeof(buf));
-           snprintf(dad, sizeof(dad), "%s:%04X", buf, dport);
-       } else
diff --git a/net-tools/patches/003-net-tools-man.patch b/net-tools/patches/003-net-tools-man.patch
deleted file mode 100644 (file)
index 1a33a1e..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-diff -up net-tools-2.0/man/en_US/arp.8.man net-tools-2.0/man/en_US/arp.8
---- net-tools-2.0/man/en_US/arp.8.man  2014-04-26 02:45:16.000000000 +0200
-+++ net-tools-2.0/man/en_US/arp.8      2014-07-07 14:51:31.378459439 +0200
-@@ -63,6 +63,10 @@ arp \- manipulate the system ARP cache
- .B \-f
- .RI [ filename ]
-+.SH NOTE
-+.P
-+This program is obsolete. For replacement check \fBip neigh\fR.
-+
- .SH DESCRIPTION
- .B Arp
- manipulates or displays the kernel's IPv4 network neighbour cache. It can add
-@@ -219,6 +223,6 @@ published proxy ARP entries and permanen
- .br
- .I /etc/ethers
- .SH SEE ALSO
--rarp(8), route(8), ifconfig(8), netstat(8)
-+.BR ip(8)
- .SH AUTHORS
- Fred N. van Kempen <waltje@uwalt.nl.mugnet.org>, Bernd Eckenfels <net\-tools@lina.inka.de>.
-diff -up net-tools-2.0/man/en_US/ethers.5.man net-tools-2.0/man/en_US/ethers.5
---- net-tools-2.0/man/en_US/ethers.5.man       2014-04-26 02:45:16.000000000 +0200
-+++ net-tools-2.0/man/en_US/ethers.5   2014-07-07 14:51:31.378459439 +0200
-@@ -26,6 +26,3 @@ can be resolved by DNS or a dot separate
- .SH FILES \"{{{
- /etc/ethers
- .\"}}}
--.SH "SEE ALSO" \"{{{
--rarp(8)
--.\"}}}
-diff -up net-tools-2.0/man/en_US/ifconfig.8.man net-tools-2.0/man/en_US/ifconfig.8
---- net-tools-2.0/man/en_US/ifconfig.8.man     2014-04-26 02:45:16.000000000 +0200
-+++ net-tools-2.0/man/en_US/ifconfig.8 2014-07-07 14:51:31.379459422 +0200
-@@ -5,6 +5,13 @@ ifconfig \- configure a network interfac
- .B "ifconfig [-v] [-a] [-s] [interface]"
- .br
- .B "ifconfig [-v] interface [aftype] options | address ..."
-+
-+.SH NOTE
-+.P 
-+This program is obsolete!
-+For replacement check \fBip addr\fR and \fBip link\fR.
-+For statistics use \fBip -s link\fR.
-+
- .SH DESCRIPTION
- .B Ifconfig
- is used to configure the kernel-resident network interfaces.  It is
-@@ -222,7 +229,8 @@ package to display link layer informatio
- While appletalk DDP and IPX addresses will be displayed they cannot be
- altered by this command.
- .SH SEE ALSO
--route(8), netstat(8), arp(8), rarp(8), iptables(8), ifup(8), interfaces(5).
-+.BR ip(8),
-+.BR iptables(8)
- .br
- http://physics.nist.gov/cuu/Units/binary.html - Prefixes for binary multiples
- .SH AUTHORS
-diff -up net-tools-2.0/man/en_US/mii-tool.8.man net-tools-2.0/man/en_US/mii-tool.8
---- net-tools-2.0/man/en_US/mii-tool.8.man     2014-04-26 02:45:16.000000000 +0200
-+++ net-tools-2.0/man/en_US/mii-tool.8 2014-07-07 14:51:31.379459422 +0200
-@@ -18,6 +18,10 @@ mii\-tool \- view, manipulate media-inde
- [\fB\-p\fR, \fB\-\-phy=\fIaddr\fR]
- .RI "interface\ ..."
-+.SH NOTE
-+.P 
-+This program is obsolete. For replacement check \fBethtool\fB.
-+
- .SH DESCRIPTION
- This utility checks or sets the status of a network interface's Media
- Independent Interface (MII) unit.  Most fast ethernet adapters use an
-@@ -93,6 +97,9 @@ SIOCGMIIPHY on 'eth?' failed: Operation
- The interface in question does not support MII queries. Most likely, it does not have 
- MII transceivers, at all.
-+.SH SEE ALSO
-+ethtool(8)
-+
- .SH AUTHORS
- David Hinds \- dhinds@pcmcia.sourceforge.org
- .br
-diff -up net-tools-2.0/man/en_US/nameif.8.man net-tools-2.0/man/en_US/nameif.8
---- net-tools-2.0/man/en_US/nameif.8.man       2014-04-26 02:45:16.000000000 +0200
-+++ net-tools-2.0/man/en_US/nameif.8   2014-07-07 14:51:31.379459422 +0200
-@@ -5,6 +5,12 @@ nameif \- name network interfaces based
- .B "nameif [\-c configfile] [\-s]"
- .br
- .B "nameif [\-c configfile] [\-s] {interface macaddress}"
-+
-+.SH NOTE
-+.P 
-+This program is obsolete. For replacement check \fBip link\fR.
-+This functionality is also much better provided by udev methods.
-+
- .SH DESCRIPTION
- .B nameif 
- renames network interfaces based on mac addresses. When no arguments are
-@@ -31,5 +37,10 @@ should be run before the interface is up
- .SH FILES
- /etc/mactab
-+
-+.SH SEE ALSO
-+.BR ip(8),
-+.BR udev(7)
-+
- .SH BUGS
- Only works for Ethernet currently.
-diff -up net-tools-2.0/man/en_US/netstat.8.man net-tools-2.0/man/en_US/netstat.8
---- net-tools-2.0/man/en_US/netstat.8.man      2014-07-07 14:51:31.370459575 +0200
-+++ net-tools-2.0/man/en_US/netstat.8  2014-07-07 14:51:31.380459405 +0200
-@@ -198,7 +198,8 @@ Show the PID and name of the program to
- .SS "\-l, \-\-listening"
- Show only listening sockets.  (These are omitted by default.)
- .SS "\-a, \-\-all"
--Show both listening and non-listening sockets.  With the
-+Show both listening and non-listening (for TCP this means established
-+connections) sockets.  With the
- .B \-\-interfaces
- option, show interfaces that are not up
- .SS "\-F"
-diff -up net-tools-2.0/man/en_US/route.8.man net-tools-2.0/man/en_US/route.8
---- net-tools-2.0/man/en_US/route.8.man        2014-04-26 02:45:16.000000000 +0200
-+++ net-tools-2.0/man/en_US/route.8    2014-07-07 14:52:58.766977905 +0200
-@@ -57,6 +57,11 @@ family
- .RB [ \-\-version ]
- .RB [ \-h ]
- .RB [ \-\-help ]
-+
-+.SH NOTE
-+.P 
-+This program is obsolete. For replacement check \fBip route\fR.
-+
- .SH DESCRIPTION
- .B Route
- manipulates the kernel's IP routing tables.  Its primary use is to set
-@@ -330,10 +335,6 @@ Whether or not the hardware address for
- .I /proc/net/rt_cache
- .LP
- .SH "SEE ALSO"
--.IR ifconfig (8),
--.IR netstat (8), 
--.IR arp (8), 
--.IR rarp (8),
- .IR ip (8)
- .LP
- .SH HISTORY
diff --git a/net-tools/patches/004-net-tools-interface.patch b/net-tools/patches/004-net-tools-interface.patch
deleted file mode 100644 (file)
index abbc0ba..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-diff -up net-tools-2.0/man/en_US/netstat.8.interface net-tools-2.0/man/en_US/netstat.8
---- net-tools-2.0/man/en_US/netstat.8.interface        2014-11-24 14:52:45.648623478 +0100
-+++ net-tools-2.0/man/en_US/netstat.8  2014-11-24 14:53:32.294972184 +0100
-@@ -49,9 +49,9 @@ netstat \- Print network connections, ro
- .RB [delay]
- .P
- .B netstat
--.RB { \-\-interfaces | \-i }
-+.RB { \-\-interfaces | \-I | \-i }
- .RB [ \-\-all | \-a ]
--.RB [ \-\-extend | \-e  [ \-\-extend | \-e] ]
-+.RB [ \-\-extend | \-e  ]
- .RB [ \-\-verbose | \-v ]
- .RB [ \-\-program | \-p ]
- .RB [ \-\-numeric | \-n ]
-@@ -134,8 +134,8 @@ and
- produce the same output.
- .SS "\-\-groups, \-g"
- Display multicast group membership information for IPv4 and IPv6.
--.SS "\-\-interfaces, \-i"
--Display a table of all network interfaces.
-+.SS "\-\-interfaces=\fIiface \fR, \fB\-I=\fIiface \fR, \fB\-i"
-+Display a table of all network interfaces, or the specified \fIiface\fR.
- .SS "\-\-masquerade, \-M"
- Display a list of masqueraded connections.
- .SS "\-\-statistics, \-s"
-diff -up net-tools-2.0/netstat.c.interface net-tools-2.0/netstat.c
---- net-tools-2.0/netstat.c.interface  2014-11-24 14:52:45.644623534 +0100
-+++ net-tools-2.0/netstat.c    2014-11-24 14:52:45.652623422 +0100
-@@ -144,6 +144,7 @@ static char *Release = RELEASE, *Signatu
- #define E_IOCTL -3
- int flag_int = 0;
-+char *flag_int_name = NULL;
- int flag_rou = 0;
- int flag_mas = 0;
- int flag_sta = 0;
-@@ -1788,6 +1789,7 @@ static int rfcomm_info(void)
- static int iface_info(void)
- {
-     static int count=0;
-+    struct interface *ife = NULL;
-     if (skfd < 0) {
-       if ((skfd = sockets_open(0)) < 0) {
-@@ -1802,7 +1804,11 @@ static int iface_info(void)
-           printf(_("Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
-     }
--    if (for_all_interfaces(do_if_print, &flag_all) < 0) {
-+    if (flag_int_name) {
-+        ife = lookup_interface(flag_int_name);
-+        do_if_print(ife, &flag_all);
-+    }
-+    else if (for_all_interfaces(do_if_print, &flag_all) < 0) {
-       perror(_("missing interface information"));
-       exit(1);
-     }
-@@ -1828,9 +1834,10 @@ static void usage(void)
- {
-     fprintf(stderr, _("usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}\n"));
-     fprintf(stderr, _("       netstat [-vWnNcaeol] [<Socket> ...]\n"));
--    fprintf(stderr, _("       netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]\n\n"));
-+    fprintf(stderr, _("       netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]\n\n"));
-     fprintf(stderr, _("        -r, --route              display routing table\n"));
-+    fprintf(stderr, _("        -I, --interfaces=<Iface> display interface table for <Iface>\n"));
-     fprintf(stderr, _("        -i, --interfaces         display interface table\n"));
-     fprintf(stderr, _("        -g, --groups             display multicast group memberships\n"));
-     fprintf(stderr, _("        -s, --statistics         display networking statistics (like SNMP)\n"));
-@@ -1875,7 +1882,7 @@ int main
-     {
-       AFTRANS_OPTS,
-       {"version", 0, 0, 'V'},
--      {"interfaces", 0, 0, 'i'},
-+      {"interfaces", 2, 0, 'I'},
-       {"help", 0, 0, 'h'},
-       {"route", 0, 0, 'r'},
- #if HAVE_FW_MASQUERADE
-@@ -1919,7 +1926,7 @@ int main
-     getroute_init();          /* Set up AF routing support */
-     afname[0] = '\0';
--    while ((i = getopt_long(argc, argv, "A:CFMacdeghilnNoprsStuUvVWw2fx64?Z", longopts, &lop)) != EOF)
-+    while ((i = getopt_long(argc, argv, "A:CFMacdeghiI::lnNoprsStuUvVWw2fx64?Z", longopts, &lop)) != EOF)
-       switch (i) {
-       case -1:
-           break;
-@@ -1960,6 +1967,13 @@ int main
-       case 'p':
-           flag_prg++;
-           break;
-+      case 'I':
-+          if (optarg && strcmp(optarg, "(null)"))
-+              if (optarg[0] == '=') optarg++;
-+          if (optarg && strcmp(optarg, "(null)"))
-+              flag_int_name = strdup(optarg);
-+          flag_int++;
-+          break;
-       case 'i':
-           flag_int++;
-           break;
diff --git a/net-tools/patches/005-net-tools-duplicate-tcp.patch b/net-tools/patches/005-net-tools-duplicate-tcp.patch
deleted file mode 100644 (file)
index 393d272..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-diff -up net-tools-2.0/netstat.c.dup-tcp net-tools-2.0/netstat.c
---- net-tools-2.0/netstat.c.dup-tcp    2012-10-04 11:32:01.437729086 +0200
-+++ net-tools-2.0/netstat.c    2012-10-04 11:32:01.441729032 +0200
-@@ -502,6 +502,121 @@ static void prg_cache_load(void)
-                        " will not be shown, you would have to be root to see it all.)\n"));
- }
-+#define TCP_HASH_SIZE 1009
-+
-+static struct tcp_node {
-+  struct tcp_node *next;
-+  char            *socket_pair;
-+} *tcp_node_hash[TCP_HASH_SIZE];
-+
-+static unsigned int tcp_node_compute_string_hash(const char *p)
-+{
-+  unsigned int h = *p;
-+
-+  if (h)
-+    for (p += 1; *p != '\0'; p++)
-+      h = (h << 5) - h + *p;
-+
-+  return h;
-+}
-+
-+#define TCP_NODE_HASH_STRING(x) \
-+  (tcp_node_compute_string_hash(x) % TCP_HASH_SIZE)
-+
-+static void tcp_node_hash_clear(void)
-+{
-+  int i;
-+  struct tcp_node *next_node;
-+  struct tcp_node *tmp_node;
-+  for (i=0; i < TCP_HASH_SIZE; i++) {
-+    if (tcp_node_hash[i]) {
-+      /* free the children of this hash bucket */
-+      next_node = tcp_node_hash[i]->next;
-+      while (next_node) {
-+      tmp_node = next_node;
-+      next_node = next_node->next;
-+      free(tmp_node->socket_pair);
-+      free(tmp_node);
-+      }
-+
-+      /* free the bucket itself */
-+      free(tcp_node_hash[i]->socket_pair);
-+      free(tcp_node_hash[i]);
-+      tcp_node_hash[i] = NULL;
-+    }
-+  }
-+}
-+
-+/* This function takes a socket pair string.  If it already exists in
-+   the hash it returns -1, otherwise it returns 0. */
-+
-+static int tcp_node_hash_check_and_append(const char *local_addr,
-+                                        int local_port,
-+                                        const char *rem_addr,
-+                                        int rem_port)
-+{
-+  unsigned int hash_val;
-+  struct tcp_node *tmp_node;
-+  int   tmp_string_len;
-+  char *tmp_string;;
-+
-+  /* Size of the string is the size of the two lengths of the address
-+     strings plus enough sizes for the colons and the ports. */
-+  tmp_string_len = strlen(local_addr) + strlen(rem_addr) + 32;
-+  tmp_string = malloc(tmp_string_len);
-+  if (!tmp_string)
-+    return 0;
-+
-+  if (snprintf(tmp_string, tmp_string_len - 1, "%s:%d:%s:%d",
-+             local_addr, local_port, rem_addr, rem_port) < 0) {
-+    free(tmp_string);
-+    return 0;
-+  }
-+
-+  hash_val = TCP_NODE_HASH_STRING(tmp_string);
-+
-+  /* See if we have to allocate this node */
-+  if (!tcp_node_hash[hash_val]) {
-+    tcp_node_hash[hash_val] = malloc(sizeof(struct tcp_node));
-+    if (!tcp_node_hash[hash_val]) {
-+      free(tmp_string);
-+      return 0;
-+    }
-+
-+    memset(tcp_node_hash[hash_val], 0, sizeof(struct tcp_node));
-+
-+    /* Stuff this new value into the hash bucket and return early */
-+    tcp_node_hash[hash_val]->socket_pair = tmp_string;
-+    return 0;
-+  }
-+
-+  /* Try to find the value in the hash bucket. */
-+  tmp_node = tcp_node_hash[hash_val];
-+  while (tmp_node) {
-+    if (!strcmp(tmp_node->socket_pair, tmp_string)) {
-+      free(tmp_string);
-+      return -1;
-+    }
-+    tmp_node = tmp_node->next;
-+  }
-+
-+  /* If we got this far it means that it isn't in the hash bucket.
-+     Add it to the front since it's faster that way. */
-+  tmp_node = tcp_node_hash[hash_val];
-+
-+  tcp_node_hash[hash_val] = malloc(sizeof(struct tcp_node));
-+  if (!tcp_node_hash[hash_val]) {
-+    free(tmp_string);
-+    tcp_node_hash[hash_val] = tmp_node;
-+    return 0;
-+  }
-+
-+  tcp_node_hash[hash_val]->socket_pair = tmp_string;
-+  tcp_node_hash[hash_val]->next = tmp_node;
-+
-+  return 0;
-+}
-+
- #if HAVE_AFNETROM
- static const char *netrom_state[] =
- {
-@@ -1018,6 +1133,12 @@ static void tcp_do_one(int lnr, const ch
-       return;
-     }
-+    /* make sure that we haven't seen this socket pair before */
-+    if (tcp_node_hash_check_and_append(local_addr, local_port, rem_addr, rem_port) < 0) {
-+      /*  fprintf(stderr, _("warning, got duplicate tcp line.\n")); */
-+      return;
-+    }
-+
-       addr_do_one(local_addr, sizeof(local_addr), 22, ap, &localaddr, local_port, "tcp");
-       addr_do_one(rem_addr, sizeof(rem_addr), 22, ap, &remaddr, rem_port, "tcp");
-@@ -2355,6 +2476,7 @@ int main
-           break;
-         wait_continous(reptimer);
-       prg_cache_clear();
-+      tcp_node_hash_clear();
-     }
-     return (i);
- }
diff --git a/net-tools/patches/006-net-tools-statalias.patch b/net-tools/patches/006-net-tools-statalias.patch
deleted file mode 100644 (file)
index b544ff4..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -up net-tools-2.0/lib/interface.c.statalias net-tools-2.0/lib/interface.c
---- net-tools-2.0/lib/interface.c.statalias    2012-10-04 11:33:05.490889090 +0200
-+++ net-tools-2.0/lib/interface.c      2012-10-04 11:33:05.513888785 +0200
-@@ -405,9 +405,11 @@ static int if_readlist_rep(char *target,
-       char *s, name[IFNAMSIZ];
-       s = get_name(name, buf);    
-       get_dev_fields(s, ife);
--      ife->statistics_valid = 1;
-       if (target && !strcmp(target,name))
-+      {
-+              ife->statistics_valid = 1;
-               break;
-+      }
-     }
-     if (ferror(fh)) {
-       perror(_PATH_PROCNET_DEV);
diff --git a/net-tools/patches/007-net-tools-interface_stack.patch b/net-tools/patches/007-net-tools-interface_stack.patch
deleted file mode 100644 (file)
index 6a93e67..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-diff -up net-tools-2.0/include/interface.h.stack net-tools-2.0/include/interface.h
-diff -up net-tools-2.0/lib/interface.c.stack net-tools-2.0/lib/interface.c
---- net-tools-2.0/lib/interface.c.stack        2014-11-24 14:54:32.293134466 +0100
-+++ net-tools-2.0/lib/interface.c      2014-11-24 15:07:58.434764441 +0100
-@@ -214,10 +214,11 @@ out:
-     return err;
- }
--static const char *get_name(char *name, const char *p)
-+static const char *get_name(char **namep, const char *p)
- {
-     while (isspace(*p))
-       p++;
-+    char *name = *namep = p;
-     while (*p) {
-       if (isspace(*p))
-           break;
-@@ -320,9 +321,10 @@ static int get_dev_fields(const char *bp
- static int if_readlist_proc(const char *target)
- {
-     FILE *fh;
--    char buf[512];
-     struct interface *ife;
-     int err;
-+    char *line = NULL;
-+    size_t linelen = 0;  
-     fh = fopen(_PATH_PROCNET_DEV, "r");
-     if (!fh) {
-@@ -330,10 +332,11 @@ static int if_readlist_proc(const char *
-                       _PATH_PROCNET_DEV, strerror(errno));
-               return -2;
-       }
--    if (fgets(buf, sizeof buf, fh))
--              /* eat line */;
--    if (fgets(buf, sizeof buf, fh))
--              /* eat line */;
-+    if (getline(&line, &linelen, fh) == -1 /* eat line */
-+      || getline(&line, &linelen, fh) == -1) { /* eat line */
-+              err = -1;
-+              goto out;
-+      }
- #if 0                         /* pretty, but can't cope with missing fields */
-     fmt = proc_gen_fmt(_PATH_PROCNET_DEV, 1, fh,
-@@ -358,14 +361,14 @@ static int if_readlist_proc(const char *
-     if (!fmt)
-       return -1;
- #else
--    procnetdev_vsn = procnetdev_version(buf);
-+    procnetdev_vsn = procnetdev_version(line);
- #endif
-     err = 0;
--    while (fgets(buf, sizeof buf, fh)) {
-+    while (getline(&line, &linelen, fh) != -1) {
-       const char *s;
--      char name[IFNAMSIZ];
--      s = get_name(name, buf);
-+      char *name;
-+      s = get_name(&name, line);    
-       ife = if_cache_add(name);
-       get_dev_fields(s, ife);
-       ife->statistics_valid = 1;
-@@ -380,6 +383,8 @@ static int if_readlist_proc(const char *
- #if 0
-     free(fmt);
- #endif
-+  out:
-+    free(line);
-     fclose(fh);
-     return err;
- }
-@@ -387,24 +392,28 @@ static int if_readlist_proc(const char *
- static int if_readlist_rep(const char *target, struct interface *ife)
- {
-     FILE *fh;
--    char buf[512];
-     int err;
-+    char *line = NULL;
-+    size_t linelen = 0;
-     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();
--      }       
--    fgets(buf, sizeof buf, fh);       /* eat line */
--    fgets(buf, sizeof buf, fh);
-+      }
-+    if (getline(&line, &linelen, fh) == -1 /* eat line */
-+      || getline(&line, &linelen, fh) == -1) { /* eat line */
-+              err = -1;
-+              goto out;
-+      }
--    procnetdev_vsn = procnetdev_version(buf);
-+    procnetdev_vsn = procnetdev_version(line);
-     err = 0;
--    while (fgets(buf, sizeof buf, fh)) {
--      char *s, name[IFNAMSIZ];
--      s = get_name(name, buf);    
-+    while (getline(&line, &linelen, fh) != -1) {
-+      char *s, *name;
-+      s = get_name(&name, line);    
-       get_dev_fields(s, ife);
-       if (target && !strcmp(target,name))
-       {
-@@ -417,6 +426,8 @@ static int if_readlist_rep(const char *t
-       err = -1;
-     }
-+  out:
-+    free(line);
-     fclose(fh);
-     return err;
- }
diff --git a/net-tools/patches/008-net-tools-sctp-statistics.patch b/net-tools/patches/008-net-tools-sctp-statistics.patch
deleted file mode 100644 (file)
index b84b8aa..0000000
+++ /dev/null
@@ -1,534 +0,0 @@
-diff -up net-tools-2.0/netstat.c.sctp net-tools-2.0/netstat.c
---- net-tools-2.0/netstat.c.sctp       2013-09-23 15:14:59.524866201 +0200
-+++ net-tools-2.0/netstat.c    2013-09-23 15:24:20.259143969 +0200
-@@ -115,7 +115,7 @@
- #endif
- /* prototypes for statistics.c */
--int parsesnmp(int, int, int);
-+int parsesnmp(int, int, int, int);
- void inittab(void);
- int parsesnmp6(int, int, int);
- void inittab6(void);
-@@ -888,159 +888,269 @@ static int igmp_info(void)
-              igmp_do_one, "igmp", "igmp6");
- }
--static int ip_parse_dots(uint32_t *addr, char const *src) {
--  unsigned  a, b, c, d;
--  unsigned  ret = 4-sscanf(src, "%u.%u.%u.%u", &a, &b, &c, &d);
--  *addr = htonl((a << 24)|(b << 16)|(c << 8)|d);
--  return  ret;
--}
--
--static void print_ip_service(struct sockaddr_in *addr, char const *protname,
--                           char *buf, unsigned size) {
--  struct aftype *ap;
--
--  if(size == 0)  return;
--
--  /* print host */
--  if((ap = get_afntype(addr->sin_family)) == NULL) {
--    fprintf(stderr, _("netstat: unsupported address family %d !\n"),
--          addr->sin_family);
--    return;
--  }
--  safe_strncpy(buf, ap->sprint((struct sockaddr*)addr, flag_not), size);
--
--  /* print service */
--  if(flag_all || (flag_lst && !addr->sin_port) || (!flag_lst && addr->sin_port)) {
--    char  bfs[32];
--
--    snprintf(bfs, sizeof(bfs), "%s",
--           get_sname(addr->sin_port, (char*)protname, flag_not & FLAG_NUM_PORT));
--
--    /* check if we must cut on host and/or service name */
--    {
--      unsigned const  bufl = strlen(buf);
--      unsigned const  bfsl = strlen(bfs);
--
--      if(bufl+bfsl+2 > size) {
--      unsigned const  half = (size-2)>>1;
--      if(bufl > half) {
--        if(bfsl > half) {
--          buf[size-2-half] = '\0';
--          bfs[half+1]      = '\0';
--        }
--        else  buf[size-2-bfsl] = '\0';
--      }
--      else  bfs[size-2-bufl] = '\0';
--      }
-+static const char *sctp_socket_state_str(int state)
-+{
-+    if(state>=0 && state<=10)
-+        return tcp_state[state];
-+    else {
-+      static char state_str_buf[64];
-+      sprintf(state_str_buf,"UNKNOWN(%d)",state);
-+      return state_str_buf;
-     }
--    strcat(buf, ":");
--    strcat(buf, bfs);
--  }
- }
--/* process single SCTP endpoint */
--static void sctp_do_ept(int lnr, char const *line, const char *prot)
-+static struct aftype *process_sctp_addr_str(const char *addr_str, struct sockaddr *sa)
- {
--  struct sockaddr_in  laddr, raddr;
--  unsigned            uid, inode;
--
--  char        l_addr[23], r_addr[23];
--
--  /* fill sockaddr_in structures */
--  {
--    unsigned  lport;
--    unsigned  ate;
--
--    if(lnr == 0)  return;
--    if(sscanf(line, "%*X %*X %*u %*u %*u %u %u %u %n",
--            &lport, &uid, &inode, &ate) < 3)  goto err;
--
--    /* decode IP address */
--    if(ip_parse_dots(&laddr.sin_addr.s_addr, line+ate))  goto err;
--    raddr.sin_addr.s_addr = htonl(0);
--    laddr.sin_family = raddr.sin_family = AF_INET;
--    laddr.sin_port = htons(lport);
--    raddr.sin_port = htons(0);
--  }
-+    if (strchr(addr_str,':')) {
-+#if HAVE_AFINET6
-+      extern struct aftype inet6_aftype;
-+      /* Demangle what the kernel gives us */
-+      struct in6_addr in6;
-+      char addr6_str[INET6_ADDRSTRLEN];
-+      unsigned u0,u1,u2,u3,u4,u5,u6,u7;
-+      sscanf(addr_str, "%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",
-+             &u0, &u1, &u2, &u3, &u4, &u5, &u6, &u7);
-+      in6.s6_addr16[0] = htons(u0);
-+      in6.s6_addr16[1] = htons(u1);
-+      in6.s6_addr16[2] = htons(u2);
-+      in6.s6_addr16[3] = htons(u3);
-+      in6.s6_addr16[4] = htons(u4);
-+      in6.s6_addr16[5] = htons(u5);
-+      in6.s6_addr16[6] = htons(u6);
-+      in6.s6_addr16[7] = htons(u7);
-+
-+      inet_ntop(AF_INET6, &in6, addr6_str, sizeof(addr6_str));
-+      inet6_aftype.input(1, addr6_str, sa);
-+      sa->sa_family = AF_INET6;
-+#endif
-+    } else {
-+      ((struct sockaddr_in*)sa)->sin_addr.s_addr = inet_addr(addr_str);
-+      sa->sa_family = AF_INET;
-+    }
-+    return get_afntype(sa->sa_family);
-+}
--  /* print IP:service to l_addr and r_addr */
--  print_ip_service(&laddr, prot, l_addr, sizeof(l_addr));
--  print_ip_service(&raddr, prot, r_addr, sizeof(r_addr));
--
--  /* Print line */
--  printf("%-4s  %6d %6d %-*s %-*s %-11s",
--       prot, 0, 0,
--       (int)netmax(23,strlen(l_addr)), l_addr,
--       (int)netmax(23,strlen(r_addr)), r_addr,
--       _(tcp_state[TCP_LISTEN]));
--  finish_this_one(uid, inode, "");
--  return;
-- err:
--  fprintf(stderr, "SCTP error in line: %d\n", lnr);
--}
--
--/* process single SCTP association */
--static void sctp_do_assoc(int lnr, char const *line, const char *prot)
--{
--  struct sockaddr_in  laddr, raddr;
--  unsigned long       rxq, txq;
--  unsigned            uid, inode;
--
--  char        l_addr[23], r_addr[23];
--
--  /* fill sockaddr_in structures */
--  {
--    unsigned    lport, rport;
--    unsigned    ate;
--    char const *addr;
--
--    if(lnr == 0)  return;
--    if(sscanf(line, "%*X %*X %*u %*u %*u %*u %*u %lu %lu %u %u %u %u %n",
--            &txq, &rxq, &uid, &inode, &lport, &rport, &ate) < 6)  goto err;
--
--    /* decode IP addresses */
--    addr = strchr(line+ate, '*');
--    if(addr == 0)  goto err;
--    if(ip_parse_dots(&laddr.sin_addr.s_addr, ++addr))  goto err;
--    addr = strchr(addr, '*');
--    if(addr == 0)  goto err;
--    if(ip_parse_dots(&raddr.sin_addr.s_addr, ++addr))  goto err;
--
--    /* complete sockaddr_in structures */
--    laddr.sin_family = raddr.sin_family = AF_INET;
--    laddr.sin_port = htons(lport);
--    raddr.sin_port = htons(rport);
--  }
-+static void sctp_eps_do_one(int lnr, char *line, const char *proto)
-+{
-+    char buffer[1024];
-+    int state, port;
-+    int uid;
-+    unsigned long inode;
-+    struct aftype *ap;
-+#if HAVE_AFINET6
-+    struct sockaddr_in6 localaddr;
-+#else
-+    struct sockaddr_in localaddr;
-+#endif
-+    const char *sst_str;
-+    const char *lport_str;
-+    const char *uid_str;
-+    const char *inode_str;
-+    char *laddrs_str;
-+
-+    if(lnr == 0) {
-+        /* ENDPT     SOCK   STY SST HBKT LPORT   UID INODE LADDRS */
-+        return;
-+    }
-+    strtok(line," \t\n"); /*skip endpt*/
-+    strtok(0," \t\n");    /*skip sock*/
-+    strtok(0," \t\n");    /*skp sty*/
-+    sst_str = strtok(0," \t\n");
-+    strtok(0," \t\n"); /*skip hash bucket*/
-+    lport_str=strtok(0," \t\n");
-+    uid_str = strtok(0," \t\n");
-+    inode_str = strtok(0," \t\n");
-+    laddrs_str=strtok(0,"\t\n");
-+
-+    if (!sst_str || !lport_str || !uid_str || !inode_str) {
-+        fprintf(stderr, _("warning, got bogus sctp eps line.\n"));
-+        return;
-+    }
-+    state = atoi(sst_str);
-+    port = atoi(lport_str);
-+    uid = atoi(uid_str);
-+    inode = strtoul(inode_str,0,0);
-+
-+    const char *this_local_addr;
-+    int first=1;
-+    char local_port[16];
-+    snprintf(local_port, sizeof(local_port), "%s",
-+        get_sname(htons(port), proto, flag_not & FLAG_NUM_PORT));
-+    for(this_local_addr=strtok(laddrs_str," \t\n");
-+        this_local_addr;
-+        this_local_addr=strtok(0," \t\n"))
-+    {
-+        char local_addr[64];
-+        ap = process_sctp_addr_str(this_local_addr, (struct sockaddr*)&localaddr);
-+        if(ap)
-+            safe_strncpy(local_addr,
-+                ap->sprint((struct sockaddr *) &localaddr, flag_not),
-+                sizeof(local_addr));
-+        else
-+            sprintf(local_addr,_("unsupported address family %d"), ((struct sockaddr*)&localaddr)->sa_family);
-+
-+        if(!first) printf("\n");
-+        if(first)
-+            printf("sctp                ");
-+        else
-+            printf("                    ");
-+        sprintf(buffer,"%s:%s", local_addr, local_port);
-+        printf("%-47s", buffer);
-+        printf(" %-11s", first?sctp_socket_state_str(state):"");
-+        first = 0;
-+    }
-+    finish_this_one(uid,inode,"");
-+}
-+
-+static void sctp_assoc_do_one(int lnr, char *line, const char *proto)
-+{
-+    char buffer[1024];
-+    int state, lport,rport;
-+    int uid;
-+    unsigned rxqueue,txqueue;
-+    unsigned long inode;
-+ 
-+    struct aftype *ap;
-+#if HAVE_AFINET6
-+    struct sockaddr_in6 localaddr,remoteaddr;
-+#else
-+    struct sockaddr_in localaddr,remoteaddr;
-+#endif
-+    const char *sst_str;
-+    const char *txqueue_str;
-+    const char *rxqueue_str;
-+    const char *lport_str,*rport_str;
-+    const char *uid_str;
-+    const char *inode_str;
-+    char *laddrs_str;
-+    char *raddrs_str;
-+
-+    if(lnr == 0) {
-+      /* ASSOC     SOCK   STY SST ST HBKT ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT RPORT LADDRS <-> RADDRS */
-+      return;
-+    }
-+
-+    strtok(line," \t\n"); /*skip assoc*/
-+    strtok(0," \t\n");    /*skip sock*/
-+    strtok(0," \t\n");    /*skp sty*/
-+    sst_str = strtok(0," \t\n");
-+    strtok(0," \t\n");
-+    strtok(0," \t\n"); /*skip hash bucket*/
-+    strtok(0," \t\n"); /*skip hash assoc-id*/
-+    txqueue_str =  strtok(0," \t\n");
-+    rxqueue_str =  strtok(0," \t\n");
-+    uid_str = strtok(0," \t\n");
-+    inode_str = strtok(0," \t\n");
-+    lport_str=strtok(0," \t\n");
-+    rport_str=strtok(0," \t\n");
-+    laddrs_str = strtok(0,"<->\t\n");
-+    raddrs_str = strtok(0,"<->\t\n");
-+
-+    if (!sst_str || !txqueue_str || !rxqueue_str || !uid_str ||
-+        !inode_str || !lport_str || !rport_str) {
-+        fprintf(stderr, _("warning, got bogus sctp assoc line.\n"));
-+        return;
-+    }
-+
-+    state = atoi(sst_str);
-+    txqueue = atoi(txqueue_str);
-+    rxqueue = atoi(rxqueue_str);
-+    uid = atoi(uid_str);
-+    inode = strtoul(inode_str,0,0);
-+    lport = atoi(lport_str);
-+    rport = atoi(rport_str);
-+
-+    /*print all addresses*/
-+    const char *this_local_addr;
-+    const char *this_remote_addr;
-+    char *ss1,*ss2;
-+    int first=1;
-+    char local_port[16];
-+    char remote_port[16];
-+    snprintf(local_port, sizeof(local_port), "%s",
-+             get_sname(htons(lport), proto,
-+             flag_not & FLAG_NUM_PORT));
-+    snprintf(remote_port, sizeof(remote_port), "%s",
-+             get_sname(htons(rport), proto,
-+             flag_not & FLAG_NUM_PORT));
-+
-+    this_local_addr=strtok_r(laddrs_str," \t\n",&ss1);
-+    this_remote_addr=strtok_r(raddrs_str," \t\n",&ss2);
-+    while(this_local_addr || this_remote_addr) {
-+        char local_addr[64];
-+        char remote_addr[64];
-+
-+        if(this_local_addr) {
-+            if (this_local_addr[0] == '*') {
-+                /* skip * */
-+                this_local_addr++;
-+            }
-+            ap = process_sctp_addr_str(this_local_addr, (struct sockaddr*)&localaddr);
-+            if(ap)
-+                safe_strncpy(local_addr,
-+                    ap->sprint((struct sockaddr *) &localaddr, flag_not), sizeof(local_addr));
-+              else
-+                    sprintf(local_addr,_("unsupported address family %d"), ((struct sockaddr*)&localaddr)->sa_family);
-+        }
-+      if(this_remote_addr) {
-+            if (this_remote_addr[0] == '*') {
-+                /* skip * */
-+                this_remote_addr++;
-+            }
-+            ap = process_sctp_addr_str(this_remote_addr, (struct sockaddr*)&remoteaddr);
-+            if(ap)
-+                safe_strncpy(remote_addr,
-+                    ap->sprint((struct sockaddr *) &remoteaddr, flag_not), sizeof(remote_addr));
-+              else
-+                    sprintf(remote_addr,_("unsupported address family %d"), ((struct sockaddr*)&remoteaddr)->sa_family);
-+       }
--  /* print IP:service to l_addr and r_addr */
--  print_ip_service(&laddr, prot, l_addr, sizeof(l_addr));
--  print_ip_service(&raddr, prot, r_addr, sizeof(r_addr));
--
--  /* Print line */
--  printf("%-4s  %6ld %6ld %-*s %-*s %-11s",
--       prot, rxq, txq,
--       (int)netmax(23,strlen(l_addr)), l_addr,
--       (int)netmax(23,strlen(r_addr)), r_addr,
--       _(tcp_state[TCP_ESTABLISHED]));
--  finish_this_one(uid, inode, "");
--  return;
-- err:
--  fprintf(stderr, "SCTP error in line: %d\n", lnr);
-+       if(!first) printf("\n");
-+       if(first)
-+           printf("sctp  %6u %6u ", rxqueue, txqueue);
-+       else
-+           printf("                    ");
-+       if(this_local_addr) {
-+           if(first)
-+               sprintf(buffer,"%s:%s", local_addr, local_port);
-+           else
-+               sprintf(buffer,"%s", local_addr);
-+           printf("%-23s", buffer);
-+       } else
-+           printf("%-23s", "");
-+       printf(" ");
-+       if(this_remote_addr) {
-+           if(first)
-+               sprintf(buffer,"%s:%s", remote_addr, remote_port);
-+           else
-+               sprintf(buffer,"%s", remote_addr);
-+           printf("%-23s", buffer);
-+       } else
-+       printf("%-23s", "");
-+
-+       printf(" %-11s", first?sctp_socket_state_str(state):"");
-+
-+       first = 0;
-+       this_local_addr=strtok_r(0," \t\n",&ss1);
-+       this_remote_addr=strtok_r(0," \t\n",&ss2);
-+    }
-+    finish_this_one(uid,inode,"");
- }
--static int sctp_info_epts(void) {
-+static int sctp_info_eps(void)
-+{
-   INFO_GUTS6(_PATH_PROCNET_SCTPEPTS, _PATH_PROCNET_SCTP6EPTS, "AF INET (sctp)",
--           sctp_do_ept, "sctp", "sctp6");
-+            sctp_eps_do_one, "sctp", "sctp6");
- }
- static int sctp_info_assocs(void) {
-   INFO_GUTS6(_PATH_PROCNET_SCTPASSOCS, _PATH_PROCNET_SCTP6ASSOCS, "AF INET (sctp)",
--           sctp_do_assoc, "sctp", "sctp6");
-+            sctp_assoc_do_one, "sctp", "sctp6");
- }
- static int sctp_info(void) {
-   int  res;
--  res = sctp_info_epts();
-+  res = sctp_info_eps();
-   if(res)  return  res;
-   return  sctp_info_assocs();
- }
-@@ -2234,7 +2344,7 @@ int main
-         if (!strcmp(afname, "inet")) {
- #if HAVE_AFINET
-             inittab();
--            i = parsesnmp(flag_raw, flag_tcp, flag_udp);
-+            i = parsesnmp(flag_raw, flag_tcp, flag_udp, flag_sctp);
- #else
-             ENOSUPP("netstat", "AF INET");
- #endif
-diff -up net-tools-2.0/statistics.c.sctp net-tools-2.0/statistics.c
---- net-tools-2.0/statistics.c.sctp    2013-09-23 15:14:59.501866518 +0200
-+++ net-tools-2.0/statistics.c 2013-09-23 15:14:59.534866063 +0200
-@@ -21,7 +21,7 @@
- #define UFWARN(x)
- #endif
--int print_static,f_raw,f_tcp,f_udp,f_unknown = 1;
-+int print_static,f_raw,f_tcp,f_udp,f_sctp,f_unknown = 1;
- enum State {
-     number = 0, opt_number, i_forward, i_inp_icmp, i_outp_icmp, i_rto_alg,
-@@ -299,6 +299,27 @@ struct entry Tcpexttab[] =
-     { "TCPRenoRecoveryFail", N_("%llu classic Reno fast retransmits failed"), opt_number },
- };
-+struct entry Sctptab[] =
-+{
-+    {"SctpCurrEstab", N_("%llu Current Associations"), number},
-+    {"SctpActiveEstabs", N_("%llu Active Associations"), number},
-+    {"SctpPassiveEstabs", N_("%llu Passive Associations"), number},
-+    {"SctpAborteds", N_("%llu Number of Aborteds "), number},
-+    {"SctpShutdowns", N_("%llu Number of Graceful Terminations"), number},
-+    {"SctpOutOfBlues", N_("%llu Number of Out of Blue packets"), number},
-+    {"SctpChecksumErrors", N_("%llu Number of Packets with invalid Checksum"), number},
-+    {"SctpOutCtrlChunks", N_("%llu Number of control chunks sent"), number},
-+    {"SctpOutOrderChunks", N_("%llu Number of ordered chunks sent"), number},
-+    {"SctpOutUnorderChunks", N_("%llu Number of Unordered chunks sent"), number},
-+    {"SctpInCtrlChunks", N_("%llu Number of control chunks received"), number},
-+    {"SctpInOrderChunks", N_("%llu Number of ordered chunks received"), number},
-+    {"SctpInUnorderChunks", N_("%llu Number of Unordered chunks received"), number},
-+    {"SctpFragUsrMsgs", N_("%llu Number of messages fragmented"), number},
-+    {"SctpReasmUsrMsgs", N_("%llu Number of messages reassembled "), number},
-+    {"SctpOutSCTPPacks", N_("%llu Number of SCTP packets sent"), number},
-+    {"SctpInSCTPPacks", N_("%llu Number of SCTP packets received"), number},
-+};
-+
- struct tabtab {
-     char *title;
-     struct entry *tab;
-@@ -312,6 +333,7 @@ struct tabtab snmptabs[] =
-     {"Icmp", Icmptab, sizeof(Icmptab), &f_raw},
-     {"Tcp", Tcptab, sizeof(Tcptab), &f_tcp},
-     {"Udp", Udptab, sizeof(Udptab), &f_udp},
-+    {"Sctp", Sctptab, sizeof(Sctptab), &f_sctp},
-     {"TcpExt", Tcpexttab, sizeof(Tcpexttab), &f_tcp},
-     {NULL}
- };
-@@ -502,11 +524,38 @@ void process6_fd(FILE *f)
- }
--int parsesnmp(int flag_raw, int flag_tcp, int flag_udp)
-+/* Process a file with name-value lines (like /proc/net/sctp/snmp) */
-+void process_fd2(FILE *f, const char *filename)
-+{
-+    char buf1[1024];
-+    char *sp;
-+    struct tabtab *tab;
-+    
-+    tab = newtable(snmptabs, "Sctp");
-+    
-+    while (fgets(buf1, sizeof buf1, f)) {
-+      sp = buf1 + strcspn(buf1, " \t\n");
-+      if (!sp) {
-+          fprintf(stderr,_("error parsing %s\n"), filename);
-+          return;
-+      }
-+      *sp = '\0';
-+      sp++;
-+
-+      sp += strspn(sp, " \t\n"); 
-+
-+      if (*sp != '\0' && *(tab->flag))        
-+          printval(tab, buf1, strtoul(sp, 0, 10));
-+    }
-+    return;
-+}
-+
-+int parsesnmp(int flag_raw, int flag_tcp, int flag_udp, int flag_sctp)
-+
- {
-     FILE *f;
--    f_raw = flag_raw; f_tcp = flag_tcp; f_udp = flag_udp;
-+    f_raw = flag_raw; f_tcp = flag_tcp; f_udp = flag_udp; f_sctp = flag_sctp;
-     f = proc_fopen("/proc/net/snmp");
-     if (!f) {
-@@ -539,6 +588,17 @@ int parsesnmp(int flag_raw, int flag_tcp
-         fclose(f);
-     }
-+
-+    f = proc_fopen("/proc/net/sctp/snmp");
-+    if (f) {
-+      process_fd2(f,"/proc/net/sctp/snmp");
-+      if (ferror(f)) {
-+          perror("/proc/net/sctp/snmp");
-+          fclose(f);
-+          return(1);
-+      }
-+    }
-+
-     return(0);
- }
diff --git a/net-tools/patches/009-net-tools-ifconfig-long-iface-crasher.patch b/net-tools/patches/009-net-tools-ifconfig-long-iface-crasher.patch
deleted file mode 100644 (file)
index d1ba077..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-diff -up net-tools-2.0/lib/interface.c.long_iface net-tools-2.0/lib/interface.c
---- net-tools-2.0/lib/interface.c.long_iface   2014-11-24 15:09:45.130254503 +0100
-+++ net-tools-2.0/lib/interface.c      2014-11-24 15:10:54.662270496 +0100
-@@ -216,6 +216,7 @@ out:
- static const char *get_name(char **namep, const char *p)
- {
-+    int count = 0;
-     while (isspace(*p))
-       p++;
-     char *name = *namep = p;
-@@ -224,7 +225,13 @@ static const char *get_name(char **namep
-           break;
-       if (*p == ':') {        /* could be an alias */
-               const char *dot = p++;
--              while (*p && isdigit(*p)) p++;
-+              count++;
-+              while (*p && isdigit(*p)) {
-+                  p++;
-+                  count++;
-+                  if (count == (IFNAMSIZ-1))
-+                      break;
-+              }
-               if (*p == ':') {
-                       /* Yes it is, backup and copy it. */
-                       p = dot;
-@@ -240,6 +247,9 @@ static const char *get_name(char **namep
-           break;
-       }
-       *name++ = *p++;
-+      count++;
-+      if (count == (IFNAMSIZ-1))
-+            break;
-     }
-     *name++ = '\0';
-     return p;