Browse Source

initial package creation

Signed-off-by: Toshaan Bharvani <toshaan@powerel.org>
master
Toshaan Bharvani 2 years ago
commit
628d06cf7a
  1. 14
      SOURCES/arp-ethers.service
  2. 178
      SOURCES/ether-wake-interfaces.patch
  3. 81
      SOURCES/ether-wake.8
  4. 392
      SOURCES/ether-wake.c
  5. 34
      SOURCES/ipmaddr.8
  6. 41
      SOURCES/iptunnel.8
  7. 160
      SOURCES/mii-diag.8
  8. 653
      SOURCES/mii-diag.c
  9. 83
      SOURCES/net-tools-config.h
  10. 44
      SOURCES/net-tools-config.make
  11. 529
      SOURCES/net-tools-correct-exit-code.patch
  12. 675
      SOURCES/net-tools-cycle.patch
  13. 34
      SOURCES/net-tools-ifconfig-EiB.patch
  14. 59
      SOURCES/net-tools-interface-name-len.patch
  15. 12
      SOURCES/net-tools-linux48.patch
  16. 136
      SOURCES/net-tools-man.patch
  17. 10
      SOURCES/net-tools-route-inet6-output.patch
  18. 52
      SOURCES/net-tools-spelling-error.patch
  19. 43
      SOURCES/net-tools-timer-man.patch
  20. 993
      SPECS/net-tools.spec

14
SOURCES/arp-ethers.service

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
[Unit]
Description=Load static arp entries
Documentation=man:arp(8) man:ethers(5)
ConditionPathExists=/etc/ethers
After=network.service
Before=network.target

[Service]
Type=oneshot
ExecStart=/sbin/arp -f /etc/ethers
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

178
SOURCES/ether-wake-interfaces.patch

@ -0,0 +1,178 @@ @@ -0,0 +1,178 @@
diff -up net-tools-2.0/ether-wake.c.interfaces net-tools-2.0/ether-wake.c
--- net-tools-2.0/ether-wake.c.interfaces 2015-09-15 18:02:18.595968129 +0200
+++ net-tools-2.0/ether-wake.c 2015-09-15 18:02:18.607968095 +0200
@@ -22,7 +22,7 @@ static char usage_msg[] =
" Options:\n"
" -b Send wake-up packet to the broadcast address.\n"
" -D Increase the debug level.\n"
-" -i ifname Use interface IFNAME instead of the default 'eth0'.\n"
+" -i ifname Use interface ifname instead of sending a wake packet to all interfaces.\n"
" -p <pw> Append the four or six byte password PW to the packet.\n"
" A password is only required for a few adapter types.\n"
" The password may be specified in ethernet hex format\n"
@@ -89,6 +89,9 @@ static char usage_msg[] =
#include <netdb.h>
#include <netinet/ether.h>
+#include "interface.h"
+#include "sockets.h"
+
/* Grrr, no consistency between include versions.
Enable this if setsockopt() isn't declared with your library. */
#if 0
@@ -110,20 +113,29 @@ static int get_dest_addr(const char *arg
static int get_fill(unsigned char *pkt, struct ether_addr *eaddr);
static int get_wol_pw(const char *optarg);
+typedef struct {
+ int s;
+ int verbose;
+ int pktsize;
+} if_info;
+
+static int send_wol_packet(char *ifname, int s, int verbose, int pktsize);
+
+static int do_wake(struct interface *ife, void *cookie) {
+ if_info *info = (if_info *)cookie;
+ send_wol_packet(ife->name, info->s, info->verbose, info->pktsize);
+ return 0;
+}
+
int main(int argc, char *argv[])
{
- char *ifname = "eth0";
- int one = 1; /* True, for socket options. */
+ char *ifname = NULL;
int s; /* Raw socket */
int errflag = 0, verbose = 0, do_version = 0;
int perm_failure = 0;
- int i, c, pktsize;
-#if defined(PF_PACKET)
- struct sockaddr_ll whereto;
-#else
- struct sockaddr whereto; /* who to wake up */
-#endif
+ int c, pktsize;
struct ether_addr eaddr;
+ if_info info;
while ((c = getopt(argc, argv, "bDi:p:uvV")) != -1)
switch (c) {
@@ -131,7 +143,7 @@ int main(int argc, char *argv[])
case 'D': debug++; break;
case 'i': ifname = optarg; break;
case 'p': get_wol_pw(optarg); break;
- case 'u': printf(usage_msg); return 0;
+ case 'u': printf("%s",usage_msg); return 0;
case 'v': verbose++; break;
case 'V': do_version++; break;
case '?':
@@ -140,7 +152,7 @@ int main(int argc, char *argv[])
if (verbose || do_version)
printf("%s\n", version_msg);
if (errflag) {
- fprintf(stderr, brief_usage_msg);
+ fprintf(stderr,"%s", brief_usage_msg);
return 3;
}
@@ -177,13 +189,45 @@ int main(int argc, char *argv[])
pktsize = get_fill(outpack, &eaddr);
+ if (ifname == NULL) {
+ info.s = s;
+ info.verbose = verbose;
+ info.pktsize = pktsize;
+
+ /* Create a channel to the NET kernel. */
+ if ((sockets_open(0)) < 0) {
+ perror("socket");
+ exit(1);
+ }
+
+ return for_all_interfaces(do_wake, &info);
+ }
+
+ return send_wol_packet(ifname, s, verbose, pktsize);
+}
+
+/* Send a Wake-On-LAN (WOL) "Magic Packet" to Interface IFNAME using
+ Socket S with a packet size PKTSIZE. VERBOSE implies
+ verbosity. */
+
+static int send_wol_packet(char *ifname, int s, int verbose, int pktsize)
+{
+ int i;
+ int one = 1; /* True, for socket options. */
+#if defined(PF_PACKET)
+ struct sockaddr_ll whereto;
+#else
+ struct sockaddr whereto; /* who to wake up */
+#endif
+
/* Fill in the source address, if possible.
The code to retrieve the local station address is Linux specific. */
if (! opt_no_src_addr) {
struct ifreq if_hwaddr;
- unsigned char *hwaddr = if_hwaddr.ifr_hwaddr.sa_data;
+ const char *hwaddr = if_hwaddr.ifr_hwaddr.sa_data;
- strcpy(if_hwaddr.ifr_name, ifname);
+ strncpy(if_hwaddr.ifr_name, ifname, IFNAMSIZ);
+ if_hwaddr.ifr_name[IFNAMSIZ-1] = '\0';
if (ioctl(s, SIOCGIFHWADDR, &if_hwaddr) < 0) {
fprintf(stderr, "SIOCGIFHWADDR on %s failed: %s\n", ifname,
strerror(errno));
@@ -220,7 +264,8 @@ int main(int argc, char *argv[])
#if defined(PF_PACKET)
{
struct ifreq ifr;
- strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ ifr.ifr_name[IFNAMSIZ-1] = '\0';
if (ioctl(s, SIOCGIFINDEX, &ifr) == -1) {
fprintf(stderr, "SIOCGIFINDEX on %s failed: %s\n", ifname,
strerror(errno));
@@ -240,11 +285,14 @@ int main(int argc, char *argv[])
strcpy(whereto.sa_data, ifname);
#endif
+ char senderrmsg[IFNAMSIZ+16] = "'";
+ strcat(senderrmsg, ifname);
+ strcat(senderrmsg, "', sendto");
if ((i = sendto(s, outpack, pktsize, 0, (struct sockaddr *)&whereto,
sizeof(whereto))) < 0)
- perror("sendto");
+ perror(senderrmsg);
else if (debug)
- printf("Sendto worked ! %d.\n", i);
+ printf("'%s', Sendto worked ! %d.\n", ifname, i);
#ifdef USE_SEND
if (bind(s, (struct sockaddr *)&whereto, sizeof(whereto)) < 0)
diff -up net-tools-2.0/Makefile.interfaces net-tools-2.0/Makefile
--- net-tools-2.0/Makefile.interfaces 2015-09-15 18:02:18.608968093 +0200
+++ net-tools-2.0/Makefile 2015-09-15 18:04:06.273668275 +0200
@@ -193,6 +193,9 @@ ipmaddr: $(NET_LIB) ipmaddr.o
mii-tool: $(NET_LIB) mii-tool.o
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ mii-tool.o $(NLIB)
+ether-wake: $(NET_LIB) ether-wake.o
+ $(CC) $(CFLAGS) $(LDFLAGS) -o ether-wake ether-wake.o $(NLIB)
+
installbin:
@echo
@echo "######################################################"
diff -up net-tools-2.0/man/en_US/ether-wake.8.interfaces net-tools-2.0/man/en_US/ether-wake.8
--- net-tools-2.0/man/en_US/ether-wake.8.interfaces 2015-09-15 18:02:18.597968123 +0200
+++ net-tools-2.0/man/en_US/ether-wake.8 2015-09-15 18:02:18.608968093 +0200
@@ -49,7 +49,7 @@ Send the wake-up packet to the broadcast
Increase the Debug Level.
.TP
.B \-i ifname
-Use interface ifname instead of the default "eth0".
+Use interface ifname instead of sending a wake packet to all interfaces.
.TP
.B \-p passwd
Append a four or six byte password to the packet. Only a few adapters

81
SOURCES/ether-wake.8

@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
.\" Hey, EMACS: -*- nroff -*-
.\" 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 ETHER-WAKE 8 "March 31, 2003" "Scyld"
.\" 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
ether-wake \- A tool to send a Wake-On-LAN "Magic Packet"
.SH SYNOPSIS
.B ether-wake
.RI [ options ] " Host-ID"
.SH DESCRIPTION
This manual page documents the usage of the
.B ether-wake
command.
.PP
.\" TeX users may be more comfortable with the \fB<whatever>\fP and
.\" \fI<whatever>\fP escape sequences to invoke bold face and italics,
.\" respectively.
\fBether-wake\fP is a program that generates and transmits a Wake-On-LAN
(WOL) "Magic Packet", used for restarting machines that have been
soft-powered-down (ACPI D3-warm state). It generates the standard
AMD Magic Packet format, optionally with a password included. The
single required parameter is a station (MAC) address or a host ID that can
be translated to a MAC address by an
.BR ethers (5)
database specified in
.BR nsswitch.conf (5)
.
.SH OPTIONS
\fBether-wake\fP needs a single dash (´-´) in front of options.
A summary of options is included below.
.TP
.B \-b
Send the wake-up packet to the broadcast address.
.TP
.B \-D
Increase the Debug Level.
.TP
.B \-i ifname
Use interface ifname instead of the default "eth0".
.TP
.B \-p passwd
Append a four or six byte password to the packet. Only a few adapters
need or support this. A six byte password may be specified in Ethernet hex
format (00:22:44:66:88:aa) or four byte dotted decimal (192.168.1.1) format.
A four byte password must use the dotted decimal format.

.TP
.B \-V
Show the program version information.

.SH EXIT STATUS
This program returns 0 on success.
A permission failures (e.g. run as a non-root user) results in an exit
status of 2. Unrecognized or invalid parameters result in an exit
status of 3. Failure to retrieve network interface information or send
a packet will result in an exit status of 1.

.SH SEE ALSO
.BR arp (8).
.br
.SH SECURITY
On some non-Linux systems dropping root capability allows the process to be
dumped, traced or debugged.
If someone traces this program, they get control of a raw socket.
Linux handles this safely, but beware when porting this program.
.SH AUTHOR
The ether-wake program was written by Donald Becker at Scyld Computing
Corporation for use with the Scyld(\*(Tm) Beowulf System.

392
SOURCES/ether-wake.c

@ -0,0 +1,392 @@ @@ -0,0 +1,392 @@
/* ether-wake.c: Send a magic packet to wake up sleeping machines. */

static char version_msg[] =
"ether-wake.c: v1.09 11/12/2003 Donald Becker, http://www.scyld.com/";
static char brief_usage_msg[] =
"usage: ether-wake [-i <ifname>] [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
" Use '-u' to see the complete set of options.\n";
static char usage_msg[] =
"usage: ether-wake [-i <ifname>] [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
"\n"
" This program generates and transmits a Wake-On-LAN (WOL)\n"
" \"Magic Packet\", used for restarting machines that have been\n"
" soft-powered-down (ACPI D3-warm state).\n"
" It currently generates the standard AMD Magic Packet format, with\n"
" an optional password appended.\n"
"\n"
" The single required parameter is the Ethernet MAC (station) address\n"
" of the machine to wake or a host ID with known NSS 'ethers' entry.\n"
" The MAC address may be found with the 'arp' program while the target\n"
" machine is awake.\n"
"\n"
" Options:\n"
" -b Send wake-up packet to the broadcast address.\n"
" -D Increase the debug level.\n"
" -i ifname Use interface IFNAME instead of the default 'eth0'.\n"
" -p <pw> Append the four or six byte password PW to the packet.\n"
" A password is only required for a few adapter types.\n"
" The password may be specified in ethernet hex format\n"
" or dotted decimal (Internet address)\n"
" -p 00:22:44:66:88:aa\n"
" -p 192.168.1.1\n";

/*
This program generates and transmits a Wake-On-LAN (WOL) "Magic Packet",
used for restarting machines that have been soft-powered-down
(ACPI D3-warm state). It currently generates the standard AMD Magic Packet
format, with an optional password appended.

This software may be used and distributed according to the terms
of the GNU Public License, incorporated herein by reference.
Contact the author for use under other terms.

This source file was originally part of the network tricks package, and
is now distributed to support the Scyld Beowulf system.
Copyright 1999-2003 Donald Becker and Scyld Computing Corporation.

The author may be reached as becker@scyld, or C/O
Scyld Computing Corporation
914 Bay Ridge Road, Suite 220
Annapolis MD 21403

Notes:
On some systems dropping root capability allows the process to be
dumped, traced or debugged.
If someone traces this program, they get control of a raw socket.
Linux handles this safely, but beware when porting this program.

An alternative to needing 'root' is using a UDP broadcast socket, however
doing so only works with adapters configured for unicast+broadcast Rx
filter. That configuration consumes more power.
*/
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>

#if 0 /* Only exists on some versions. */
#include <ioctls.h>
#endif

#include <sys/socket.h>

#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/if.h>

#include <features.h>
#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
#include <netpacket/packet.h>
#include <net/ethernet.h>
#else
#include <asm/types.h>
#include <linux/if_packet.h>
#include <linux/if_ether.h>
#endif
#include <netdb.h>
#include <netinet/ether.h>

/* Grrr, no consistency between include versions.
Enable this if setsockopt() isn't declared with your library. */
#if 0
extern int setsockopt __P ((int __fd, int __level, int __optname,
__ptr_t __optval, int __optlen));
#else /* New, correct head files. */
#include <sys/socket.h>
#endif

u_char outpack[1000];
int outpack_sz = 0;
int debug = 0;
u_char wol_passwd[6];
int wol_passwd_sz = 0;

static int opt_no_src_addr = 0, opt_broadcast = 0;

static int get_dest_addr(const char *arg, struct ether_addr *eaddr);
static int get_fill(unsigned char *pkt, struct ether_addr *eaddr);
static int get_wol_pw(const char *optarg);

int main(int argc, char *argv[])
{
char *ifname = "eth0";
int one = 1; /* True, for socket options. */
int s; /* Raw socket */
int errflag = 0, verbose = 0, do_version = 0;
int perm_failure = 0;
int i, c, pktsize;
#if defined(PF_PACKET)
struct sockaddr_ll whereto;
#else
struct sockaddr whereto; /* who to wake up */
#endif
struct ether_addr eaddr;

while ((c = getopt(argc, argv, "bDi:p:uvV")) != -1)
switch (c) {
case 'b': opt_broadcast++; break;
case 'D': debug++; break;
case 'i': ifname = optarg; break;
case 'p': get_wol_pw(optarg); break;
case 'u': printf(usage_msg); return 0;
case 'v': verbose++; break;
case 'V': do_version++; break;
case '?':
errflag++;
}
if (verbose || do_version)
printf("%s\n", version_msg);
if (errflag) {
fprintf(stderr, brief_usage_msg);
return 3;
}

if (optind == argc) {
fprintf(stderr, "Specify the Ethernet address as 00:11:22:33:44:55.\n");
return 3;
}

/* Note: PF_INET, SOCK_DGRAM, IPPROTO_UDP would allow SIOCGIFHWADDR to
work as non-root, but we need SOCK_PACKET to specify the Ethernet
destination address. */
#if defined(PF_PACKET)
s = socket(PF_PACKET, SOCK_RAW, 0);
#else
s = socket(AF_INET, SOCK_PACKET, SOCK_PACKET);
#endif
if (s < 0) {
if (errno == EPERM)
fprintf(stderr, "ether-wake: This program must be run as root.\n");
else
perror("ether-wake: socket");
perm_failure++;
}
/* Don't revert if debugging allows a normal user to get the raw socket. */
setuid(getuid());

/* We look up the station address before reporting failure so that
errors may be reported even when run as a normal user.
*/
if (get_dest_addr(argv[optind], &eaddr) != 0)
return 3;
if (perm_failure && ! debug)
return 2;

pktsize = get_fill(outpack, &eaddr);

/* Fill in the source address, if possible.
The code to retrieve the local station address is Linux specific. */
if (! opt_no_src_addr) {
struct ifreq if_hwaddr;
unsigned char *hwaddr = if_hwaddr.ifr_hwaddr.sa_data;

strcpy(if_hwaddr.ifr_name, ifname);
if (ioctl(s, SIOCGIFHWADDR, &if_hwaddr) < 0) {
fprintf(stderr, "SIOCGIFHWADDR on %s failed: %s\n", ifname,
strerror(errno));
/* Magic packets still work if our source address is bogus, but
we fail just to be anal. */
return 1;
}
memcpy(outpack+6, if_hwaddr.ifr_hwaddr.sa_data, 6);

if (verbose) {
printf("The hardware address (SIOCGIFHWADDR) of %s is type %d "
"%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x.\n", ifname,
if_hwaddr.ifr_hwaddr.sa_family, hwaddr[0], hwaddr[1],
hwaddr[2], hwaddr[3], hwaddr[4], hwaddr[5]);
}
}

if (wol_passwd_sz > 0) {
memcpy(outpack+pktsize, wol_passwd, wol_passwd_sz);
pktsize += wol_passwd_sz;
}

if (verbose > 1) {
printf("The final packet is: ");
for (i = 0; i < pktsize; i++)
printf(" %2.2x", outpack[i]);
printf(".\n");
}

/* This is necessary for broadcasts to work */
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&one, sizeof(one)) < 0)
perror("setsockopt: SO_BROADCAST");

#if defined(PF_PACKET)
{
struct ifreq ifr;
strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
if (ioctl(s, SIOCGIFINDEX, &ifr) == -1) {
fprintf(stderr, "SIOCGIFINDEX on %s failed: %s\n", ifname,
strerror(errno));
return 1;
}
memset(&whereto, 0, sizeof(whereto));
whereto.sll_family = AF_PACKET;
whereto.sll_ifindex = ifr.ifr_ifindex;
/* The manual page incorrectly claims the address must be filled.
We do so because the code may change to match the docs. */
whereto.sll_halen = ETH_ALEN;
memcpy(whereto.sll_addr, outpack, ETH_ALEN);

}
#else
whereto.sa_family = 0;
strcpy(whereto.sa_data, ifname);
#endif

if ((i = sendto(s, outpack, pktsize, 0, (struct sockaddr *)&whereto,
sizeof(whereto))) < 0)
perror("sendto");
else if (debug)
printf("Sendto worked ! %d.\n", i);

#ifdef USE_SEND
if (bind(s, (struct sockaddr *)&whereto, sizeof(whereto)) < 0)
perror("bind");
else if (send(s, outpack, 100, 0) < 0)
perror("send");
#endif
#ifdef USE_SENDMSG
{
struct msghdr msghdr = { 0,};
struct iovec iovector[1];
msghdr.msg_name = &whereto;
msghdr.msg_namelen = sizeof(whereto);
msghdr.msg_iov = iovector;
msghdr.msg_iovlen = 1;
iovector[0].iov_base = outpack;
iovector[0].iov_len = pktsize;
if ((i = sendmsg(s, &msghdr, 0)) < 0)
perror("sendmsg");
else if (debug)
printf("sendmsg worked, %d (%d).\n", i, errno);
}
#endif

return 0;
}

/* Convert the host ID string to a MAC address.
The string may be a
Host name
IP address string
MAC address string
*/

static int get_dest_addr(const char *hostid, struct ether_addr *eaddr)
{
struct ether_addr *eap;

eap = ether_aton(hostid);
if (eap) {
*eaddr = *eap;
if (debug)
fprintf(stderr, "The target station address is %s.\n",
ether_ntoa(eaddr));
} else if (ether_hostton(hostid, eaddr) == 0) {
if (debug)
fprintf(stderr, "Station address for hostname %s is %s.\n",
hostid, ether_ntoa(eaddr));
} else {
(void)fprintf(stderr,
"ether-wake: The Magic Packet host address must be "
"specified as\n"
" - a station address, 00:11:22:33:44:55, or\n"
" - a hostname with a known 'ethers' entry.\n");
return -1;
}
return 0;
}


static int get_fill(unsigned char *pkt, struct ether_addr *eaddr)
{
int offset, i;
unsigned char *station_addr = eaddr->ether_addr_octet;

if (opt_broadcast)
memset(pkt+0, 0xff, 6);
else
memcpy(pkt, station_addr, 6);
memcpy(pkt+6, station_addr, 6);
pkt[12] = 0x08; /* Or 0x0806 for ARP, 0x8035 for RARP */
pkt[13] = 0x42;
offset = 14;

memset(pkt+offset, 0xff, 6);
offset += 6;

for (i = 0; i < 16; i++) {
memcpy(pkt+offset, station_addr, 6);
offset += 6;
}
if (debug) {
fprintf(stderr, "Packet is ");
for (i = 0; i < offset; i++)
fprintf(stderr, " %2.2x", pkt[i]);
fprintf(stderr, ".\n");
}
return offset;
}

static int get_wol_pw(const char *optarg)
{
int passwd[6];
int byte_cnt;
int i;

byte_cnt = sscanf(optarg, "%2x:%2x:%2x:%2x:%2x:%2x",
&passwd[0], &passwd[1], &passwd[2],
&passwd[3], &passwd[4], &passwd[5]);
if (byte_cnt < 4)
byte_cnt = sscanf(optarg, "%d.%d.%d.%d",
&passwd[0], &passwd[1], &passwd[2], &passwd[3]);
if (byte_cnt < 4) {
fprintf(stderr, "Unable to read the Wake-On-LAN password.\n");
return 0;
}
printf(" The Magic packet password is %2.2x %2.2x %2.2x %2.2x (%d).\n",
passwd[0], passwd[1], passwd[2], passwd[3], byte_cnt);
for (i = 0; i < byte_cnt; i++)
wol_passwd[i] = passwd[i];
return wol_passwd_sz = byte_cnt;
}

#if 0
{
to = (struct sockaddr_in *)&whereto;
to->sin_family = AF_INET;
if (inet_aton(target, &to->sin_addr)) {
hostname = target;
}
memset (&sa, 0, sizeof sa);
sa.sa_family = AF_INET;
strncpy (sa.sa_data, interface, sizeof sa.sa_data);
sendto (sock, buf, bufix + len, 0, &sa, sizeof sa);
strncpy (sa.sa_data, interface, sizeof sa.sa_data);
#if 1
sendto (sock, buf, bufix + len, 0, &sa, sizeof sa);
#else
bind (sock, &sa, sizeof sa);
connect();
send (sock, buf, bufix + len, 0);
#endif
}
#endif

/*
* Local variables:
* compile-command: "gcc -O -Wall -o ether-wake ether-wake.c"
* c-indent-level: 4
* c-basic-offset: 4
* c-indent-level: 4
* tab-width: 4
* End:
*/

34
SOURCES/ipmaddr.8

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
.\" Process this file with
.\" groff -man -Tascii ipmaddr.8
.\"
.TH IPMADDR 8 "SEPTEMBER 2009" "" ""
.\"
.\" Man page written by Jiri Popelka <jpopelka AT redhat DOT com>
.\"
.SH NAME
.B ipmaddr
\- adds, deletes, and displays multicast addresses
.SH SYNOPSIS
.B /usr/sbin/ipmaddr
.RB [< operation >]
.RB [< args >]

.SH NOTE
.P
This program is obsolete. For replacement check \fBip maddr\fR.

.SH DESCRIPTION
The \fBipmaddr\fR command can perform one of the following operations:

.B add
\- add a multicast address

.B del
\- delete a multicast address

.B show
\- list multicast addresses

.SH SEE ALSO
.BR ip (8).

41
SOURCES/iptunnel.8

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
.\" Process this file with
.\" groff -man -Tascii iptunnel.8
.\"
.TH IPTUNNEL 8 "SEPTEMBER 2009" "" ""
.\"
.\" Man page written by Jiri Popelka <jpopelka AT redhat DOT com>
.\"
.SH NAME
.B iptunnel
\- creates, deletes, and displays configured tunnels

.SH SYNOPSIS
.B /usr/sbin/iptunnel
.RB [< operation >]
.RB [< args >]

.SH NOTE
.P
This program is obsolete. For replacement check \fBip tunnel\fR.

.SH DESCRIPTION
The \fBiptunnel\fR
command creates configured tunnels for sending and receiving
IPV6 or IPV4 packets that are encapsulated as the payload of an IPV4
datagram.

The
.B iptunnel
command can perform one of the following operations:

.B create
\- create a tunnel interface, which you must subsequently configure.

.B delete
\- delete a tunnel interface. You must disable the tunnel before you can delete it.

.B show
\- show the tunnel attributes (name, tunnel end points, next hop for tunneled packets).

.SH SEE ALSO
.BR ip (8).

160
SOURCES/mii-diag.8

@ -0,0 +1,160 @@ @@ -0,0 +1,160 @@
.\" 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 explicit 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
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 simplified
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.

653
SOURCES/mii-diag.c

@ -0,0 +1,653 @@ @@ -0,0 +1,653 @@
/* 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");
}


/*
* 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:
*/

83
SOURCES/net-tools-config.h

@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
/*
* 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 1
#define HAVE_AFECONET 0
#define HAVE_AFDECnet 0
#define HAVE_AFASH 1
#define HAVE_AFBLUETOOTH 1

/*
*
* Device Hardware types.
*
*/
#define HAVE_HWETHER 1
#define HAVE_HWARC 1
#define HAVE_HWSLIP 1
#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 1
#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 0
#define HAVE_HWEUI64 1
#define HAVE_HWIB 1

/*
*
* Other Features.
*
*/
#define HAVE_FW_MASQUERADE 1
#define HAVE_ARP_TOOLS 1
#define HAVE_HOSTNAME_TOOLS 0
#define HAVE_HOSTNAME_SYMLINKS 0
#define HAVE_IP_TOOLS 1
#define HAVE_MII 1
#define HAVE_PLIP_TOOLS 1
#define HAVE_SERIAL_TOOLS 1
#define HAVE_SELINUX 1

44
SOURCES/net-tools-config.make

@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
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=0
# HAVE_AFDECnet=0
HAVE_AFASH=1
HAVE_AFBLUETOOTH=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=0
HAVE_HWEUI64=1
HAVE_HWIB=1
HAVE_FW_MASQUERADE=1
HAVE_ARP_TOOLS=1
# HAVE_HOSTNAME_TOOLS=0
# HAVE_HOSTNAME_SYMLINKS=0
HAVE_IP_TOOLS=1
HAVE_MII=1
HAVE_PLIP_TOOLS=1
HAVE_SERIAL_TOOLS=1
HAVE_SELINUX=1

529
SOURCES/net-tools-correct-exit-code.patch

@ -0,0 +1,529 @@ @@ -0,0 +1,529 @@
diff --git a/arp.c b/arp.c
index 5db71a7..30dd56d 100644
--- a/arp.c
+++ b/arp.c
@@ -93,7 +93,7 @@ struct hwtype *hw; /* current hardware type */
int sockfd = 0; /* active socket descriptor */
int hw_set = 0; /* flag if hw-type was set (-H) */
char device[16] = ""; /* current device */
-static void usage(void);
+static void usage(int rc);
/* Delete an entry from the ARP cache. */
static int arp_del(char **args)
@@ -169,14 +169,14 @@ static int arp_del(char **args)
}
if (!strcmp(*args, "dev")) {
if (*++args == NULL)
- usage();
+ usage(E_OPTERR);
safe_strncpy(device, *args, sizeof(device));
args++;
continue;
}
if (!strcmp(*args, "netmask")) {
if (*++args == NULL)
- usage();
+ usage(E_OPTERR);
if (strcmp(*args, "255.255.255.255") != 0) {
safe_strncpy(host, *args, (sizeof host));
if (ap->input(0, host, &ss) < 0) {
@@ -190,7 +190,7 @@ static int arp_del(char **args)
args++;
continue;
}
- usage();
+ usage(E_OPTERR);
}
// if neighter priv nor pub is given, work on both
@@ -346,14 +346,14 @@ static int arp_set(char **args)
}
if (!strcmp(*args, "dev")) {
if (*++args == NULL)
- usage();
+ usage(E_OPTERR);
safe_strncpy(device, *args, sizeof(device));
args++;
continue;
}
if (!strcmp(*args, "netmask")) {
if (*++args == NULL)
- usage();
+ usage(E_OPTERR);
if (strcmp(*args, "255.255.255.255") != 0) {
safe_strncpy(host, *args, (sizeof host));
if (ap->input(0, host, &ss) < 0) {
@@ -367,7 +367,7 @@ static int arp_set(char **args)
args++;
continue;
}
- usage();
+ usage(E_OPTERR);
}
/* Fill in the remainder of the request. */
@@ -621,7 +621,7 @@ static void version(void)
exit(E_VERSION);
}
-static void usage(void)
+static void usage(int rc)
{
fprintf(stderr, _("Usage:\n arp [-vn] [<HW>] [-i <if>] [-a] [<hostname>] <-Display ARP cache\n"));
fprintf(stderr, _(" arp [-v] [-i <if>] -d <host> [pub] <-Delete ARP entry\n"));
@@ -643,7 +643,7 @@ static void usage(void)
fprintf(stderr, _(" <HW>=Use '-H <hw>' to specify hardware address type. Default: %s\n"), DFLT_HW);
fprintf(stderr, _(" List of possible hardware types (which support ARP):\n"));
print_hwlist(1); /* 1 = ARPable */
- exit(E_USAGE);
+ exit(rc);
}
int main(int argc, char **argv)
@@ -745,10 +745,11 @@ int main(int argc, char **argv)
case 'V':
version();
- case '?':
case 'h':
+ usage(E_USAGE);
+ case '?':
default:
- usage();
+ usage(E_OPTERR);
}
if (ap->af != AF_INET) {
@@ -797,7 +798,7 @@ int main(int argc, char **argv)
break;
default:
- usage();
+ usage(E_OPTERR);
}
exit(what);
diff --git a/ipmaddr.c b/ipmaddr.c
index e4ed41d..c45b62a 100644
--- a/ipmaddr.c
+++ b/ipmaddr.c
@@ -53,14 +53,14 @@ static void version(void)
exit(E_VERSION);
}
-static void usage(void) __attribute__((noreturn));
+static void usage(int rc) __attribute__((noreturn));
-static void usage(void)
+static void usage(int rc)
{
fprintf(stderr, _("Usage: ipmaddr [ add | del ] MULTIADDR dev STRING\n"));
fprintf(stderr, _(" ipmaddr show [ dev STRING ] [ ipv4 | ipv6 | link | all ]\n"));
fprintf(stderr, _(" ipmaddr -V | -version\n"));
- exit(E_USAGE);
+ exit(rc);
}
static void print_lla(FILE *fp, int len, unsigned char *addr)
@@ -294,7 +294,7 @@ static int multiaddr_list(int argc, char **argv)
NEXT_ARG();
l = strlen(*argv);
if (l <= 0 || l >= sizeof(filter_dev))
- usage();
+ usage(E_OPTERR);
strncpy(filter_dev, *argv, sizeof (filter_dev));
} else if (strcmp(*argv, "all") == 0) {
filter_family = AF_UNSPEC;
@@ -307,7 +307,7 @@ static int multiaddr_list(int argc, char **argv)
} else {
l = strlen(*argv);
if (l <= 0 || l >= sizeof(filter_dev))
- usage();
+ usage(E_OPTERR);
strncpy(filter_dev, *argv, sizeof (filter_dev));
}
argv++; argc--;
@@ -339,18 +339,18 @@ int multiaddr_modify(int cmd, int argc, char **argv)
if (strcmp(*argv, "dev") == 0) {
NEXT_ARG();
if (ifr.ifr_name[0])
- usage();
+ usage(E_OPTERR);
strncpy(ifr.ifr_name, *argv, IFNAMSIZ);
} else {
if (ifr.ifr_hwaddr.sa_data[0])
- usage();
+ usage(E_OPTERR);
if (parse_lla(*argv, ifr.ifr_hwaddr.sa_data) < 0)
- usage();
+ usage(E_OPTERR);
}
argc--; argv++;
}
if (ifr.ifr_name[0] == 0)
- usage();
+ usage(E_OPTERR);
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
@@ -378,7 +378,7 @@ int do_multiaddr(int argc, char **argv)
if (matches(*argv, "list") == 0 || matches(*argv, "show") == 0
|| matches(*argv, "lst") == 0)
return multiaddr_list(argc-1, argv+1);
- usage();
+ usage(E_OPTERR);
}
int preferred_family = AF_UNSPEC;
@@ -408,13 +408,13 @@ int main(int argc, char **argv)
argc--;
argv++;
if (argc <= 1)
- usage();
+ usage(E_OPTERR);
if (strcmp(argv[1], "inet") == 0)
preferred_family = AF_INET;
else if (strcmp(argv[1], "inet6") == 0)
preferred_family = AF_INET6;
else
- usage();
+ usage(E_OPTERR);
} else if (matches(argv[1], "-stats") == 0 ||
matches(argv[1], "-statistics") == 0) {
++show_stats;
@@ -423,7 +423,7 @@ int main(int argc, char **argv)
} else if ((matches(argv[1], "-V") == 0) || matches(argv[1], "--version") == 0) {
version();
} else
- usage();
+ usage(E_OPTERR);
argc--; argv++;
}
diff --git a/include/util-ank.h b/include/util-ank.h
index c8fcd08..c78604a 100644
--- a/include/util-ank.h
+++ b/include/util-ank.h
@@ -23,7 +23,7 @@ extern int resolve_hosts;
#define NEXT_ARG() \
argv++; \
if (--argc <= 0) \
- usage();
+ usage(E_OPTERR);
typedef struct
{
diff --git a/iptunnel.c b/iptunnel.c
index 2215d68..42b2a9e 100644
--- a/iptunnel.c
+++ b/iptunnel.c
@@ -76,9 +76,9 @@ static void version(void)
exit(E_VERSION);
}
-static void usage(void) __attribute__((noreturn));
+static void usage(int rc) __attribute__((noreturn));
-static void usage(void)
+static void usage(int rc)
{
fprintf(stderr, _("Usage: iptunnel { add | change | del | show } [ NAME ]\n"));
fprintf(stderr, _(" [ mode { ipip | gre | sit } ] [ remote ADDR ] [ local ADDR ]\n"));
@@ -90,7 +90,7 @@ static void usage(void)
fprintf(stderr, _(" TOS := { NUMBER | inherit }\n"));
fprintf(stderr, _(" TTL := { 1..255 | inherit }\n"));
fprintf(stderr, _(" KEY := { DOTTED_QUAD | NUMBER }\n"));
- exit(E_USAGE);
+ exit(rc);
}
static int do_ioctl_get_ifindex(char *dev)
@@ -217,18 +217,18 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
NEXT_ARG();
if (strcmp(*argv, "ipip") == 0) {
if (p->iph.protocol)
- usage();
+ usage(E_OPTERR);
p->iph.protocol = IPPROTO_IPIP;
} else if (strcmp(*argv, "gre") == 0) {
if (p->iph.protocol)
- usage();
+ usage(E_OPTERR);
p->iph.protocol = IPPROTO_GRE;
} else if (strcmp(*argv, "sit") == 0) {
if (p->iph.protocol)
- usage();
+ usage(E_OPTERR);
p->iph.protocol = IPPROTO_IPV6;
} else
- usage();
+ usage(E_OPTERR);
} else if (strcmp(*argv, "key") == 0) {
unsigned uval;
NEXT_ARG();
@@ -238,7 +238,7 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
p->i_key = p->o_key = get_addr32(*argv);
else {
if (scan_number(*argv, &uval)<0)
- usage();
+ usage(E_OPTERR);
p->i_key = p->o_key = htonl(uval);
}
} else if (strcmp(*argv, "ikey") == 0) {
@@ -249,7 +249,7 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
p->o_key = get_addr32(*argv);
else {
if (scan_number(*argv, &uval)<0)
- usage();
+ usage(E_OPTERR);
p->i_key = htonl(uval);
}
} else if (strcmp(*argv, "okey") == 0) {
@@ -260,7 +260,7 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
p->o_key = get_addr32(*argv);
else {
if (scan_number(*argv, &uval)<0)
- usage();
+ usage(E_OPTERR);
p->o_key = htonl(uval);
}
} else if (strcmp(*argv, "seq") == 0) {
@@ -295,9 +295,9 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
NEXT_ARG();
if (strcmp(*argv, "inherit") != 0) {
if (scan_number(*argv, &uval)<0)
- usage();
+ usage(E_OPTERR);
if (uval > 255)
- usage();
+ usage(E_OPTERR);
p->iph.ttl = uval;
}
} else if (strcmp(*argv, "tos") == 0) {
@@ -305,15 +305,15 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
NEXT_ARG();
if (strcmp(*argv, "inherit") != 0) {
if (scan_number(*argv, &uval)<0)
- usage();
+ usage(E_OPTERR);
if (uval > 255)
- usage();
+ usage(E_OPTERR);
p->iph.tos = uval;
} else
p->iph.tos = 1;
} else {
if (p->name[0])
- usage();
+ usage(E_OPTERR);
safe_strncpy(p->name, *argv, IFNAMSIZ);
}
argc--; argv++;
@@ -574,7 +574,7 @@ int do_iptunnel(int argc, char **argv)
} else
return do_show(0, NULL);
- usage();
+ usage(E_OPTERR);
}
@@ -605,13 +605,13 @@ int main(int argc, char **argv)
argc--;
argv++;
if (argc <= 1)
- usage();
+ usage(E_OPTERR);
if (strcmp(argv[1], "inet") == 0)
preferred_family = AF_INET;
else if (strcmp(argv[1], "inet6") == 0)
preferred_family = AF_INET6;
else
- usage();
+ usage(E_OPTERR);
} else if (matches(argv[1], "-stats") == 0 ||
matches(argv[1], "-statistics") == 0) {
++show_stats;
@@ -620,7 +620,7 @@ int main(int argc, char **argv)
} else if ((matches(argv[1], "-V") == 0) || (matches(argv[1], "--version") == 0)) {
version();
} else
- usage();
+ usage(E_OPTERR);
argc--; argv++;
}
diff --git a/nameif.c b/nameif.c
index b280e59..13e3033 100644
--- a/nameif.c
+++ b/nameif.c
@@ -192,10 +192,10 @@ struct option lopt[] = {
{NULL},
};
-void usage(void)
+void usage(int rc)
{
fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}\n"));
- exit(E_USAGE);
+ exit(rc);
}
int main(int ac, char **av)
@@ -214,7 +214,7 @@ int main(int ac, char **av)
switch (c) {
default:
case '?':
- usage();
+ usage(E_OPTERR);
case 'c':
fname = optarg;
break;
@@ -232,7 +232,7 @@ int main(int ac, char **av)
char pos[30];
if ((ac-optind) & 1)
- usage();
+ usage(E_OPTERR);
if (strlen(av[optind])+1>IFNAMSIZ)
complain(_("interface name `%s' too long"), av[optind]);
safe_strncpy(ch->ifname, av[optind], sizeof(ch->ifname));
diff --git a/plipconfig.c b/plipconfig.c
index 86fa890..1caeed3 100644
--- a/plipconfig.c
+++ b/plipconfig.c
@@ -57,12 +57,12 @@ static void version(void)
exit(E_VERSION);
}
-void usage(void)
+void usage(int rc)
{
fprintf(stderr, _("Usage: plipconfig interface [nibble NN] [trigger NN]\n"));
fprintf(stderr, _(" plipconfig -V | --version\n"));
fprintf(stderr, _(" plipconfig -h | --help\n"));
- exit(E_USAGE);
+ exit(rc);
}
void print_plip(void)
@@ -89,16 +89,18 @@ int main(int argc, char **argv)
argc--;
argv++;
while (argv[0] && *argv[0] == '-') {
- if (!strcmp(*argv, "-V") || !strcmp(*argv, "--version"))
+ if ((!strcmp(*argv, "-V") || !strcmp(*argv, "--version")) && argc==1)
version();
+ if ((!strcmp(*argv, "-h") || !strcmp(*argv, "--help")) && argc==1)
+ usage(E_USAGE);
else
- usage();
+ usage(E_OPTERR);
argv++;
argc--;
}
if (argc == 0)
- usage();
+ usage(E_OPTERR);
spp = argv;
safe_strncpy(ifr.ifr_name, *spp++, IFNAMSIZ);
@@ -117,19 +119,19 @@ int main(int argc, char **argv)
while (*spp != (char *) NULL) {
if (!strcmp(*spp, "nibble")) {
if (*++spp == NULL)
- usage();
+ usage(E_OPTERR);
plip->nibble = atoi(*spp);
spp++;
continue;
}
if (!strcmp(*spp, "trigger")) {
if (*++spp == NULL)
- usage();
+ usage(E_OPTERR);
plip->trigger = atoi(*spp);
spp++;
continue;
}
- usage();
+ usage(E_OPTERR);
}
plip->pcmd = PLIP_SET_TIMEOUT;
diff --git a/slattach.c b/slattach.c
index 5c81584..dbb2658 100644
--- a/slattach.c
+++ b/slattach.c
@@ -581,7 +581,7 @@ sig_catch(int sig)
static void
-usage(void)
+usage(int rc)
{
char *usage_msg = "Usage: slattach [-ehlLmnqv] "
#ifdef SIOCSKEEPALIVE
@@ -594,7 +594,7 @@ usage(void)
" slattach -V | --version\n";
fputs(usage_msg, stderr);
- exit(E_USAGE);
+ exit(rc);
}
@@ -691,7 +691,7 @@ main(int argc, char *argv[])
/*NOTREACHED*/
default:
- usage();
+ usage(E_OPTERR);
/*NOTREACHED*/
}
@@ -707,7 +707,7 @@ main(int argc, char *argv[])
opt_m++;
/* Is a terminal given? */
- if (optind != (argc - 1)) usage();
+ if (optind != (argc - 1)) usage(E_OPTERR);
safe_strncpy(path_buf, argv[optind], sizeof(path_buf));
if (!strcmp(path_buf, "-")) {
opt_e = 1;
diff --git a/netstat.c.old b/netstat.c
index dbcba2b..d04f0ff 100644
--- a/netstat.c.old
+++ b/netstat.c
@@ -2286,7 +2286,7 @@ int main
if(argc == optind + 1) {
if((reptimer = atoi(argv[optind])) <= 0)
- usage(E_USAGE);
+ usage(E_OPTERR);
flag_cnt++;
}
diff --git a/route.c.old b/route.c
index f86bb8e..b0a885e 100644
--- a/route.c.old
+++ b/route.c
@@ -186,6 +186,7 @@ int main(int argc, char **argv)
case 'V':
version();
case 'h':
+ usage(E_USAGE);
case '?':
opt_h++;
break;
@@ -198,7 +199,7 @@ int main(int argc, char **argv)
if (opt_h) {
if (!afname[0])
- usage(E_USAGE);
+ usage(E_OPTERR);
else
what = RTACTION_HELP;
} else {

675
SOURCES/net-tools-cycle.patch

@ -0,0 +1,675 @@ @@ -0,0 +1,675 @@
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 2016-02-15 16:54:18.000000000 +0100
+++ net-tools-2.0/lib/interface.c 2016-03-30 09:58:18.247891588 +0200
@@ -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;
}
@@ -210,16 +214,24 @@ out:
return err;
}
-static const char *get_name(char *name, const char *p)
+static const char *get_name(char **namep, const char *p)
{
+ int count = 0;
while (isspace(*p))
p++;
+ char *name = *namep = p;
while (*p) {
if (isspace(*p))
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;
@@ -235,6 +247,9 @@ static const char *get_name(char *name,
break;
}
*name++ = *p++;
+ count++;
+ if (count == (IFNAMSIZ-1))
+ break;
}
*name++ = '\0';
return p;
@@ -316,9 +331,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) {
@@ -326,10 +342,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,
@@ -354,14 +371,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;
@@ -376,6 +393,51 @@ static int if_readlist_proc(const char *
#if 0
free(fmt);
#endif
+ out:
+ free(line);
+ fclose(fh);
+ return err;
+}
+
+static int if_readlist_rep(const char *target, struct interface *ife)
+{
+ FILE *fh;
+ 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();
+ }
+ if (getline(&line, &linelen, fh) == -1 /* eat line */
+ || getline(&line, &linelen, fh) == -1) { /* eat line */
+ err = -1;
+ goto out;
+ }
+
+ procnetdev_vsn = procnetdev_version(line);
+
+ err = 0;
+ while (getline(&line, &linelen, fh) != -1) {
+ char *s, *name;
+ s = get_name(&name, line);
+ get_dev_fields(s, ife);
+ if (target && !strcmp(target,name))
+ {
+ ife->statistics_valid = 1;
+ break;
+ }
+ }
+ if (ferror(fh)) {
+ perror(_PATH_PROCNET_DEV);
+ err = -1;
+ }
+
+ out:
+ free(line);
fclose(fh);
return err;
}
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 2016-02-15 16:54:18.000000000 +0100
+++ net-tools-2.0/man/en_US/netstat.8 2016-03-30 09:58:18.241891637 +0200
@@ -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,22 +46,25 @@ 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 }
+.RB { \-\-interfaces | \-I | \-i }
.RB [ \-\-all | \-a ]
-.RB [ \-\-extend | \-e [ \-\-extend | \-e] ]
+.RB [ \-\-extend | \-e ]
.RB [ \-\-verbose | \-v ]
.RB [ \-\-program | \-p ]
.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 }
@@ -128,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"
@@ -201,13 +207,18 @@ 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"
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 2016-02-15 16:54:18.000000000 +0100
+++ net-tools-2.0/netstat.c 2016-03-30 10:04:07.617171984 +0200
@@ -115,8 +115,8 @@
#endif
/* prototypes for statistics.c */
-void parsesnmp(int, int, int, int);
-void parsesnmp6(int, int, int);
+int parsesnmp(int, int, int, int);
+int parsesnmp6(int, int, int);
typedef enum {
SS_FREE = 0, /* not allocated */
@@ -142,6 +142,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;
@@ -340,10 +341,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) {
@@ -501,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[] =
{
@@ -1109,6 +1225,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, &localsas, local_port, "tcp");
addr_do_one(rem_addr, sizeof(rem_addr), 22, ap, &remsas, rem_port, "tcp");
@@ -1877,6 +1999,9 @@ 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) {
perror("socket");
@@ -1886,20 +2011,25 @@ 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) {
+ 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);
}
- if (flag_cnt)
+ if (!flag_cnt) {
if_cache_free();
- else {
close(skfd);
skfd = -1;
}
+ count++;
return 0;
}
@@ -1915,9 +2045,10 @@ static void usage(int rc)
{
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[<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"));
@@ -1957,11 +2088,12 @@ int main
(int argc, char *argv[]) {
int i;
int lop;
+ int reptimer = 1;
static struct option longopts[] =
{
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
@@ -2005,7 +2137,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;
@@ -2046,6 +2178,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;
@@ -2140,6 +2279,12 @@ int main
flag_sta++;
}
+ if(argc == optind + 1) {
+ if((reptimer = atoi(argv[optind])) <= 0)
+ usage(E_USAGE);
+ flag_cnt++;
+ }
+
if (flag_int + flag_rou + flag_mas + flag_sta > 1)
usage(E_OPTERR);
@@ -2169,7 +2314,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");
@@ -2182,15 +2327,16 @@ int main
if (!afname[0])
safe_strncpy(afname, DFLT_AF, sizeof(afname));
+ for (;;) {
if (!strcmp(afname, "inet")) {
#if HAVE_AFINET
- parsesnmp(flag_raw, flag_tcp, flag_udp, flag_sctp);
+ i = parsesnmp(flag_raw, flag_tcp, flag_udp, flag_sctp);
#else
ENOSUPP("netstat", "AF INET");
#endif
} else if(!strcmp(afname, "inet6")) {
#if HAVE_AFINET6
- parsesnmp6(flag_raw, flag_tcp, flag_udp);
+ i = parsesnmp6(flag_raw, flag_tcp, flag_udp);
#else
ENOSUPP("netstat", "AF INET6");
#endif
@@ -2198,7 +2344,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) {
@@ -2220,7 +2370,7 @@ int main
i = route_info(afname, options);
if (i || !flag_cnt)
break;
- wait_continous();
+ wait_continous(reptimer);
}
return (i);
}
@@ -2229,7 +2379,7 @@ int main
i = iface_info();
if (!flag_cnt || i)
break;
- wait_continous();
+ wait_continous(reptimer);
}
return (i);
}
@@ -2416,8 +2566,9 @@ int main
if (!flag_cnt || i)
break;
- wait_continous();
+ wait_continous(reptimer);
prg_cache_clear();
+ tcp_node_hash_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 2016-02-15 16:54:18.000000000 +0100
+++ net-tools-2.0/statistics.c 2016-03-30 09:58:18.238891661 +0200
@@ -527,7 +527,7 @@ static void process_fd2(FILE *f, const c
}
}
-void parsesnmp(int flag_raw, int flag_tcp, int flag_udp, int flag_sctp)
+int parsesnmp(int flag_raw, int flag_tcp, int flag_udp, int flag_sctp)
{
FILE *f;
@@ -536,14 +536,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);
@@ -553,8 +556,11 @@ 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);
}
@@ -567,9 +573,10 @@ void parsesnmp(int flag_raw, int flag_tc
fclose(f);
}
}
+ 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;
@@ -578,7 +585,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))
@@ -588,11 +595,14 @@ 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);
}

34
SOURCES/net-tools-ifconfig-EiB.patch

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
diff --git a/lib/interface.c.old b/lib/interface.c
index c734c83..9c49a03 100644
--- a/lib/interface.c.old
+++ b/lib/interface.c
@@ -928,10 +928,10 @@ void ife_print_long(struct interface *ptr)
*/
rx = ptr->stats.rx_bytes;
short_rx = rx * 10;
- if (rx > 1125899906842624ull) {
- if (rx > (9223372036854775807ull / 10))
- short_rx = rx / 112589990684262ull;
- else
+ if (rx > 1152921504606846976ull) {
+ short_rx = rx / 115292150460684697ull;
+ Rext = "EiB";
+ } else if (rx > 1125899906842624ull) {
short_rx /= 1125899906842624ull;
Rext = "PiB";
} else if (rx > 1099511627776ull) {
@@ -949,10 +949,10 @@ void ife_print_long(struct interface *ptr)
}
tx = ptr->stats.tx_bytes;
short_tx = tx * 10;
- if (tx > 1125899906842624ull) {
- if (tx > (9223372036854775807ull / 10))
- short_tx = tx / 112589990684262ull;
- else
+ if (tx > 1152921504606846976ull) {
+ short_tx = tx / 115292150460684697ull;
+ Text = "EiB";
+ } else if (tx > 1125899906842624ull) {
short_tx /= 1125899906842624ull;
Text = "PiB";
} else if (tx > 1099511627776ull) {

59
SOURCES/net-tools-interface-name-len.patch

@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
diff --git a/netstat.c b/netstat.c
index c084dfb..cfcfb78 100644
--- a/netstat.c
+++ b/netstat.c
@@ -743,6 +743,7 @@ static void igmp_do_one(int lnr, const char *line,const char *prot)
static int igmp6_flag = 0;
static char device[16];
int num, idx, refcnt;
+ char* offset;
if (lnr == 0) {
/* IPV6 ONLY */
@@ -794,17 +795,21 @@ static void igmp_do_one(int lnr, const char *line,const char *prot)
#if HAVE_AFINET
if (line[0] != '\t') {
if (idx_flag) {
- if ((num = sscanf( line, "%d\t%10c", &idx, device)) < 2) {
+ if ((num = sscanf( line, "%d\t%15c", &idx, device)) < 2) {
fprintf(stderr, _("warning, got bogus igmp line %d.\n"), lnr);
return;
}
} else {
- if ( (num = sscanf( line, "%10c", device )) < 1 ) {
+ if ( (num = sscanf( line, "%15c", device )) < 1 ) {
fprintf(stderr, _("warning, got bogus igmp line %d.\n"), lnr);
return;
}
}
- device[10] = '\0';
+
+ offset = strrchr(device, ':');
+ if(offset)
+ *offset = 0;
+
return;
} else if ( line[0] == '\t' ) {
if ( (num = sscanf(line, "\t%8[0-9A-Fa-f] %d", mcast_addr, &refcnt)) < 2 ) {
@@ -2037,7 +2037,7 @@ static int iface_info(void)
if (flag_exp < 2) {
ife_short = 1;
if(!(count % 8))
- printf(_("Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
+ printf(_("Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
}

if (flag_int_name) {
diff --git a/lib/interface.c b/lib/interface.c
index 3bd999f..97f3db5 100644
--- a/lib/interface.c
+++ b/lib/interface.c
@@ -655,7 +655,7 @@ int do_if_print(struct interface *ife, void *cookie)
void ife_print_short(struct interface *ptr)
{
- printf("%-8.8s ", ptr->name);
+ printf("%-15.15s ", ptr->name);
printf("%5d ", ptr->mtu);
/* If needed, display the interface statistics. */
if (ptr->statistics_valid) {

12
SOURCES/net-tools-linux48.patch

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
diff -up net-tools-2.0/iptunnel.c.linux48 net-tools-2.0/iptunnel.c
--- net-tools-2.0/iptunnel.c.linux48 2016-02-15 16:54:18.000000000 +0100
+++ net-tools-2.0/iptunnel.c 2016-10-12 09:16:57.429279406 +0200
@@ -26,7 +26,7 @@
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
-#include <netinet/ip.h>
+#include <linux/ip.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <net/if_arp.h>

136
SOURCES/net-tools-man.patch

@ -0,0 +1,136 @@ @@ -0,0 +1,136 @@
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/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

10
SOURCES/net-tools-route-inet6-output.patch

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
--- a/lib/inet6_gr.c
+++ b/lib/inet6_gr.c
@@ -146,7 +146,7 @@
strcat(flags, "f");
/* Print the info. */
- printf("%-30s %-26s %-4s %-3d %-1d%6d %s\n",
+ printf("%-30s %-26s %-4s %-3d %-1d %6d %s\n",
addr6, naddr6, flags, metric, refcnt, use, iface);
}

52
SOURCES/net-tools-spelling-error.patch

@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
diff --git a/statistics.c.old b/statistics.c
index 8c2e18e..ed5dcaf 100644
--- a/statistics.c.old
+++ b/statistics.c
@@ -215,7 +215,7 @@ static const struct entry Tcpexttab[] =
{"OfoPruned", N_("%llu packets dropped from out-of-order queue because of socket buffer overrun"), opt_number},
{"OutOfWindowIcmps", N_("%llu ICMP packets dropped because they were out-of-window"), opt_number},
{"PAWSActive", N_("%llu active connections rejected because of time stamp"), opt_number},
- {"PAWSEstab", N_("%llu packetes rejected in established connections because of timestamp"), opt_number},
+ {"PAWSEstab", N_("%llu packets rejected in established connections because of timestamp"), opt_number},
{"PAWSPassive", N_("%llu passive connections rejected because of time stamp"), opt_number},
{"PruneCalled", N_("%llu packets pruned from receive queue because of socket buffer overrun"), opt_number},
{"RcvPruned", N_("%llu packets pruned from receive queue"), opt_number},
diff --git a/po/cs.po.old b/po/cs.po
index 7fe0e17..0857a86 100644
--- a/po/cs.po.old
+++ b/po/cs.po
@@ -1960,7 +1960,7 @@ msgstr "PoÄ<EFBFBD>et odmítnutých aktivních spojení kvůli Ä<EFBFBD>asovému razítku: %u"
#: ../statistics.c:237
#, c-format
-msgid "%u packetes rejected in established connections because of timestamp"
+msgid "%u packets rejected in established connections because of timestamp"
msgstr ""
"PoÄ<EFBFBD>et odmítnutých packetů uvnitÅ™ navázaného spojení kvůli Ä<EFBFBD>asovému razítku: %"
"u"
diff --git a/po/et_EE.po.old b/po/et_EE.po
index ebc9de6..2afbaa9 100644
--- a/po/et_EE.po.old
+++ b/po/et_EE.po
@@ -1626,7 +1626,7 @@ msgstr "%u aktiivsest
#: ../statistics.c:167
#, c-format
-msgid "%u packetes rejected in established connections because of timestamp"
+msgid "%u packets rejected in established connections because of timestamp"
msgstr "%u paketist keelduti loodud ühendustes ajatempli tõttu"
#: ../statistics.c:169
diff --git a/po/net-tools.pot.old b/po/net-tools.pot
index 7496818..b81bf1a 100644
--- a/po/net-tools.pot.old
+++ b/po/net-tools.pot
@@ -1746,7 +1746,7 @@ msgstr ""
#: ../statistics.c:167
#, c-format
-msgid "%u packetes rejected in established connections because of timestamp"
+msgid "%u packets rejected in established connections because of timestamp"
msgstr ""
#: ../statistics.c:169

43
SOURCES/net-tools-timer-man.patch

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
diff --git a/man/en_US/netstat.8.old b/man/en_US/netstat.8
index f22c2c5..d78a54a 100644
--- a/man/en_US/netstat.8.old
+++ b/man/en_US/netstat.8
@@ -311,7 +311,37 @@ causes this column to be included. You will also need
privileges to see this information on sockets you don't own. This
identification information is not yet available for IPX sockets.
.SS "Timer"
-(this needs to be written)
+TCP timer associated with this socket. The format is timer(a/b/c). The timer is one of the following values:
+.TP
+.I
+off
+There is no timer set for this socket.
+.TP
+.I
+on
+The retransmission timer is active for the socket.
+.TP
+.I
+keepalive
+The keepalive timer is active for the socket.
+.TP
+.I
+timewait
+The connection is closing and the timewait timer is active for the socket.
+.P
+The values in the brackets:
+.TP
+.I
+a
+Timer value.
+.TP
+.I
+b
+Number of retransmissions sent.
+.TP
+.I
+c
+Number of keepalives sent.
.P
.SS Active UNIX domain Sockets
.SS "Proto"

993
SPECS/net-tools.spec

@ -0,0 +1,993 @@ @@ -0,0 +1,993 @@
%global checkout 20160912git

Summary: Basic networking tools
Name: net-tools
Version: 2.0
Release: 0.62.%{checkout}%{?dist}
License: GPLv2+
URL: http://sourceforge.net/projects/net-tools/

# git archive --format=tar --remote=git://git.code.sf.net/p/net-tools/code master | xz > net-tools-%%{version}.%%{checkout}.tar.xz
Source0: net-tools-%{version}.%{checkout}.tar.xz
Source1: net-tools-config.h
Source2: net-tools-config.make
Source3: ether-wake.c
Source4: ether-wake.8
Source5: mii-diag.c
Source6: mii-diag.8
Source7: iptunnel.8
Source8: ipmaddr.8
Source9: arp-ethers.service

# adds <delay> option that allows netstat to cycle printing through statistics every delay seconds.
Patch1: net-tools-cycle.patch

# various man page fixes merged into one patch
Patch2: net-tools-man.patch

# linux-4.8
Patch3: net-tools-linux48.patch

# use all interfaces instead of default (#1003875)
Patch20: ether-wake-interfaces.patch

# use all interfaces instead of default (#1003875)
Patch21: net-tools-ifconfig-EiB.patch
Patch22: net-tools-timer-man.patch
Patch23: net-tools-interface-name-len.patch
Patch24: net-tools-correct-exit-code.patch
Patch25: net-tools-spelling-error.patch
Patch26: net-tools-route-inet6-output.patch

BuildRequires: make
BuildRequires: bluez-libs-devel
BuildRequires: gettext, libselinux
BuildRequires: libselinux-devel
BuildRequires: systemd
BuildRequires: gcc
%{?systemd_requires}

%description
The net-tools package contains basic networking tools,
including ifconfig, netstat, route, and others.
Most of them are obsolete. For replacement check iproute package.

%prep
%setup -q -c
%patch1 -p1 -b .cycle
%patch2 -p1 -b .man
%patch3 -p1 -b .linux48

cp %SOURCE1 ./config.h
cp %SOURCE2 ./config.make
cp %SOURCE3 .
cp %SOURCE4 ./man/en_US
cp %SOURCE5 .
cp %SOURCE6 ./man/en_US
cp %SOURCE7 ./man/en_US
cp %SOURCE8 ./man/en_US

%patch20 -p1 -b .interfaces
%patch21 -p1 -b .ifconfig-EiB
%patch22 -p1 -b .timer-man
%patch23 -p1 -b .interface-name-len
%patch24 -p1 -b .exit-codes
%patch25 -p1 -b .spelling
%patch26 -p1 -b .route-inet6

touch ./config.h

%build
# Sparc and s390 arches need to use -fPIE
%ifarch sparcv9 sparc64 s390 s390x
export CFLAGS="${RPM_OPT_FLAGS} -fPIE"
%else
export CFLAGS="${RPM_OPT_FLAGS} -fpie"
%endif
# RHBZ #853193
export LDFLAGS="${RPM_LD_FLAGS} -pie -Wl,-z,now"

make
make ether-wake
gcc ${RPM_OPT_FLAGS} ${RPM_LD_FLAGS} -o mii-diag mii-diag.c

%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} install

# ifconfig and route are installed into /usr/bin by default
# mv them back to /usr/sbin (#1045445)
mv %{buildroot}%{_bindir}/ifconfig %{buildroot}%{_sbindir}
mv %{buildroot}%{_bindir}/route %{buildroot}%{_sbindir}

install -p -m 755 ether-wake %{buildroot}%{_sbindir}
install -p -m 755 mii-diag %{buildroot}%{_sbindir}

rm %{buildroot}%{_sbindir}/rarp
rm %{buildroot}%{_mandir}/man8/rarp.8*
rm %{buildroot}%{_mandir}/de/man8/rarp.8*
rm %{buildroot}%{_mandir}/fr/man8/rarp.8*
rm %{buildroot}%{_mandir}/pt/man8/rarp.8*

# otherwise %%find_lang finds them even they're empty
rm -rf %{buildroot}%{_mandir}/de/man1
rm -rf %{buildroot}%{_mandir}/fr/man1
rm -rf %{buildroot}%{_mandir}/man1
rm -rf %{buildroot}%{_mandir}/pt/man1
rm -rf %{buildroot}%{_mandir}/pt/man5

# install systemd unit file
install -D -p -m 644 %{SOURCE9} %{buildroot}%{_unitdir}/arp-ethers.service

%find_lang %{name} --all-name --with-man

%post
%systemd_post arp-ethers.service

%files -f %{name}.lang
%license COPYING
%{_bindir}/netstat
%{_sbindir}/ifconfig
%{_sbindir}/route
%{_sbindir}/arp
%{_sbindir}/ether-wake
%{_sbindir}/ipmaddr
%{_sbindir}/iptunnel
%{_sbindir}/mii-diag
%{_sbindir}/mii-tool
%{_sbindir}/nameif
%{_sbindir}/plipconfig
%{_sbindir}/slattach
%{_mandir}/man[58]/*

%attr(0644,root,root) %{_unitdir}/arp-ethers.service

%changelog
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 2.0-0.62.20160912git
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688

* Wed May 19 2021 Michal Ruprich <mruprich@redhat.com> - 2.0-0.61.20160912git
- Resolves: #1961792 - Missing space in 'route' tool for inet6

* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 2.0-0.60.20160912git
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937

* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.0-0.59.20160912git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild

* Thu Aug 06 2020 Michal Ruprich <mruprich@redhat.com> - 2.0-0.58.20160912git
- Resolves: #1835155 - netstat says "packetes" instead of "packets"

* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.0-0.57.20160912git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild

* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.0-0.56.20160912git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild

* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.0-0.55.20160912git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild

* Wed Mar 06 2019 Michal Ruprich <mruprich@redhat.com> - 2.0-0.54.20160912git
- Resolves: #1670779 - Exit code on wrong parameter is zero for many net-tools binaries

* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.0-0.53.20160912git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild

* Mon Jul 23 2018 Michal Ruprich <mruprich@redhat.com> - 2.0-0.52.20160912git
- Resolves: #1604937 - net-tools: FTBFS in Fedora rawhide

* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.0-0.51.20160912git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild

* Wed Apr 25 2018 Michal Ruprich <mruprich@redhat.com> - 2.0-0.50.20160912git
- Resolves: 1557470 - netstat -i cut's interface names
- Resolves: 1566084 - netstat -agn only shows 10 character interface name for IPv4 addressing

* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 2.0-0.49.20160912git
- Escape macros in %%changelog

* Thu Feb 08 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.0-0.48.20160912git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild

* Thu Feb 1 2018 Florian Weimer <fweimer@redhat.com> - 2.0-0.47.20160912git
- Link mii-diag with $RPM_LD_FLAGS

* Tue Jan 30 2018 Michal Ruprich <mruprich@redhat.com> - 2.0-0.46.20160912git
- removing dependencies on systemd-units from spec file

* Fri Nov 24 2017 Michal Ruprich <mruprich@redhat.com> - 2.0-0.45.20160912git
- Resolves: #1478868 - netstat(8) portion on Timer needs writing

* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.0-0.44.20160912git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild

* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.0-0.43.20160912git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild

* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.0-0.42.20160912git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild

* Tue Jan 24 2017 Michal Ruprich <mruprich@redhat.com> - 2.0-0.41.20160912git
- Resolves: #1414765 - ifconfig inaccurately rounds exabytes

* Wed Oct 12 2016 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.40.20160912git
- fix build on linux-4.8

* Mon Sep 12 2016 mruprich <mruprich@redhat.com> - 2.0-0.39.20160912git
- latest upstream snapshot

* Wed Mar 30 2016 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.38.20160329git
- just few nitpicks :)

* Tue Mar 29 2016 Zdenek Dohnal <zdohnal@redhat.com> - 2.0-0.37.20160329git
- latest upstream snapshot
- adding HAVE_PLIP_TOOLS=1, HAVE_SERIAL_TOOLS=1, HAVE_ARP_TOOLS=1 into net-tools-config.h and net-tools-config.make
- commenting out "%%{buildroot}%%{_mandir}/man8/rarp.8*" and its language alternatives in spec
- adding "rm -rf %%{buildroot}%%{_mandir}/pt/man5" in spec

* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 2.0-0.36.20150915git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild

* Tue Sep 15 2015 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.35.20150915git
- ether-wake: add interface into message (#1149502)
- latest upstream snapshot (ipx.patch & sctp-statistics.patch merged)

* Wed Jul 15 2015 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.34.20150715git
- latest upstream snapshot

* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.0-0.33.20150416git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild

* Thu Apr 16 2015 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.32.20150416git
- latest upstream snapshot

* Mon Nov 24 2014 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.31.20141124git
- latest upstream snapshot (#1162284)

* Thu Nov 20 2014 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.30.20141007git
- ether-wake: apply Debian's hardening patch

* Tue Oct 07 2014 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.29.20141007git
- latest upstream snapshot (#1149405)

* Fri Oct 03 2014 Lubomir Rintel <lkundrak@v3.sk> - 2.0-0.28.20140707git
- Enable bluetooth

* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.0-0.27.20140707git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild

* Fri Jul 18 2014 Tom Callaway <spot@fedoraproject.org> - 2.0-0.26.20140707git
- fix license handling

* Mon Jul 07 2014 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.25.20140707git
- latest upstream snapshot

* Tue Jun 10 2014 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.24.20131119git
- __global_ldflags -> RPM_LD_FLAGS, optflags -> RPM_OPT_FLAGS

* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.0-0.23.20131119git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild

* Mon Mar 31 2014 Jaromír Končický <jkoncick@redhat.com> - 2.0-0.22.20131119git
- output sctp endpoints without -a parameter (#1063913)

* Fri Feb 14 2014 Jaromír Končický <jkoncick@redhat.com> - 2.0-0.21.20131119git
- remake sctp-quiet.patch (#1063906#c7)

* Tue Feb 11 2014 Jaromír Končický <jkoncick@redhat.com> - 2.0-0.20.20131119git
- make sctp quiet on systems without sctp (#1063906)

* Fri Dec 20 2013 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.19.20131119git
- move ifconfig and route back to sbin (#1045445)

* Tue Dec 03 2013 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.18.20131119git
- make mii-diag compile with -Werror=format-security (#1037218)

* Tue Nov 19 2013 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.17.20131119git
- latest snapshot (#1021109)

* Fri Nov 01 2013 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.16.20131004git
- use different compiler/linker flags macros

* Thu Oct 10 2013 Jaromír Končický <jkoncick@redhat.com> - 2.0-0.15.20131004git
- install binaries into /usr/bin and /usr/sbin (#1016674)

* Fri Oct 04 2013 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.14.20131004git
- latest snapshot

* Mon Sep 23 2013 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.13.20130910git
- remove %%ifarch alpha condition from %%prep
- improve sctp-statistics.patch (#982638#c10)

* Tue Sep 10 2013 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.12.20130910git
- latest snapshot

* Wed Sep 04 2013 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.11.20130607git
- amend ether-wake-interfaces.patch

* Wed Sep 04 2013 Jaromír Končický <jkoncick@redhat.com> - 2.0-0.10.20130607git
- use all interfaces instead of default (#1003875)
- reverted all changes on ether-wake.c and put original file

* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.0-0.9.20130607git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild

* Fri Jun 07 2013 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.8.20130607git
- latest snapshot

* Thu Apr 25 2013 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.7.20130425git
- latest snapshot

* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.0-0.6.20130109git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild

* Wed Jan 09 2013 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.5.20130109git
- latest snapshot (#579855)

* Fri Nov 30 2012 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.4.20121106git
- fix URL

* Fri Nov 16 2012 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.3.20121106git
- match actual license

* Tue Nov 06 2012 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.2.20121106git
- few man page fixes

* Thu Oct 04 2012 Jiri Popelka <jpopelka@redhat.com> - 2.0-0.1.20121004git
- the git snapshot we ship is actually much more a
2.0 pre-release then 1.60 post-release

* Mon Oct 01 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-145.20120917git
- compile without STRIP (Metricom radio) support

* Mon Sep 17 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-144.20120917git
- upstream git snapshot

* Wed Sep 05 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-143.20120702git
- Sparc and s390 arches need to use -fPIE

* Wed Sep 05 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-142.20120702git
- compile with PIE and full RELRO flags (#853193)

* Wed Aug 22 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-141.20120702git
- fixed building with kernel-3.6

* Wed Aug 22 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-140.20120702git
- use new systemd-rpm macros (#850225)

* Fri Jul 20 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.60-139.20120702git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild

* Mon Jul 02 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-138.20120702git
- fixes for #834110 and #836258 merged upstream

* Wed Jun 20 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-137.20120509git
- compile without Token ring support (http://lwn.net/Articles/497397/)

* Tue Jun 19 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-136.20120509git
- better SCTP support (#826676)

* Wed May 09 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-135.20120509git
- don't require hostname package

* Fri Jan 27 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-134.20120127git
- Do not show interface metric in 'ifconfig', 'ifconfig -s' and 'netstat -i'.
Spare place is used for interface name so trim_iface.patch is no longer needed.
- No need to convert man pages to utf-8 as upstream ship them in utf-8 now.

* Thu Jan 19 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-133.20120119git
- SELinux patch merged upstream
- several page fixes merged upstream
- mark localized man pages with %%lang

* Wed Jan 11 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-132.20120111git
- 3 patches merged upstream
- removed 2digit.patch (#718610)
- removed fgets.patch (probably not needed anymore)

* Thu Jan 05 2012 Jiri Popelka <jpopelka@redhat.com> - 1.60-131.20120105git
- next 11 patches merged upstream
- removed bcast.patch (seems to be fixed upstream)
- removed netstat-p-basename.patch (upstream is not happy with it)
- netstat-leak.patch merged into duplicate-tcp.patch

* Wed Dec 07 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-130.20111207git
- removed virtualname.patch
- added back isofix.patch
- improved mii-registers.patch

* Tue Dec 06 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-129.20111206git
- upstream git snapshot
- reduced number of patches from 95 to 32
- netstat -T/--notrim option is now -W/--wide

* Tue Oct 25 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-128
- Removed HFI support.
- Improved num-ports.patch

* Thu Oct 20 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-127
- Merge all upstream fixes into net-tools-1.60-upstream.patch

* Tue Oct 18 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-126
- Upstream is migrating to Sourceforge.

* Mon Oct 03 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-125
- Fixed ether-wake(8) and mii-diag(8) man pages (#742629)

* Mon Sep 19 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-124
- Improved arp-ethers.service unit file (#735617)

* Wed Aug 24 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-123
- Improved netstat_stop_trim.patch to not truncate IPV6 UDP sockets (#732984)

* Mon Jul 04 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-122
- Update for 2 digit Linux version numbers (#718610)

* Fri Jun 17 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-121
- Added arp-ethers.service systemd unit file to run 'arp -f /etc/ethers'
on startup of system. Don't ship default /etc/ethers (#713759)

* Wed May 25 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-120
- Do not mention /proc/net/socket in ifconfig(8) (#661905)
- Merge all 'man page only fix' patches into net-tools-1.60-man.patch

* Thu Apr 28 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-119
- Fix possible problems found by static analysis of code.

* Thu Apr 21 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-118
- patch netstat to separate basename of -p only if it is absolute
path (in order to make argv[0]="sshd pty/0" display as sshd, and not as /0).

* Thu Apr 14 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-117
- plipconfig man page and usage output fixes. (#694766)

* Mon Mar 07 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-116
- Fix mii-tool/mii-diag/ether-wake to not default to eth0 because
since Fedora 15 network devices can have arbitrary names (#682367)

* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.60-115
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild

* Fri Feb 04 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-114
- Improve scanf-format.patch (#668047)

* Fri Jan 21 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-113
- Improve route(8) man page saying that 'route mss' actually sets MTU (#671321)

* Mon Jan 03 2011 Jiri Popelka <jpopelka@redhat.com> - 1.60-112
- Fix the handling of some of the HAVE_* flags ifdef vs if. (BerliOS #17812)

* Thu Dec 16 2010 Jiri Popelka <jpopelka@redhat.com> - 1.60-111
- fixed mii-diag(8) man page (#663689)
- fixed route(8) man page (#664171)

* Thu Dec 16 2010 Jiri Popelka <jpopelka@redhat.com> - 1.60-110
- fixed ifconfig(8) man page (#663469)

* Wed Nov 17 2010 Jiri Popelka <jpopelka@redhat.com> - 1.60-109
- improved netstat(8) man page (#614931)

* Mon Nov 01 2010 Jiri Popelka <jpopelka@redhat.com> - 1.60-108
- added netstat(8) support for RcvbufErrors, SndbufErrors (BerliOS #17645)

* Wed Sep 29 2010 jkeating - 1.60-107
- Rebuilt for gcc bug 634757

* Thu Sep 16 2010 Jiri Popelka <jpopelka@redhat.com> - 1.60-106
- HFI support

* Thu Sep 16 2010 Jiri Popelka <jpopelka@redhat.com> - 1.60-105
- fixed memory leak in netstat when run with -c option

* Tue Aug 10 2010 Jiri Popelka <jpopelka@redhat.com> - 1.60-104
- improved statistics-doubleword.patch (Bug #579854)

* Mon Jun 14 2010 Jiri Popelka <jpopelka@redhat.com> - 1.60-103
- updated mii-tool to support gigabit links (#539575)

* Wed Apr 7 2010 Jiri Popelka <jpopelka@redhat.com> - 1.60-102
- fixed statistics.c to use unsigned long long (instead of int) to handle 64 bit integers (Bug #579854, Debian #561161)
- fixed typo in statistics.c (Bug #579855)

* Sat Jan 2 2010 Jiri Popelka <jpopelka@redhat.com> - 1.60-101
- fixed overflow patch (#551625)
- ifconfig interface:0 del <IP> will remove the Aliased IP on IA64 (#473211)
- interface slip: cast keepalive/outfill to unsigned long to fix warnings on 64bit hosts -- no functional changes since these only have an 8bit range anyways
- interface: fix IPv6 parsing of interfaces with large indexes (> 255) (Debian #433543)

* Mon Dec 21 2009 Jiri Popelka <jpopelka@redhat.com> - 1.60-100
- Move hostname to separate package

* Thu Dec 3 2009 Jiri Popelka <jpopelka@redhat.com> - 1.60-99
- return defining of BuildRoot even it's no longer necessary
(https://fedoraproject.org/wiki/Packaging:Guidelines#BuildRoot_tag)
to silent rpmlint false warning

* Wed Nov 4 2009 Jiri Popelka <jpopelka@redhat.com> - 1.60-98
- in mii-tool.c use <linux/mii.h> instead of "mii.h" and fix Bug #491358

* Thu Oct 29 2009 Jiri Popelka <jpopelka@redhat.com> - 1.60-97
- Make "hostname -s" display host name cut at the first dot (no
matter if the host name resolves or not) (bug #531702)

* Wed Sep 30 2009 Jiri Popelka <jpopelka@redhat.com> - 1.60-96
- netplug moved to separate package
- #319981 and #322901 - minor man pages changes
- applied changes from berlios cvs, which fix: Berlios #16232, Gentoo #283759 and polish Makefile and slattach

* Tue Sep 1 2009 Jiri Popelka <jpopelka@redhat.com> - 1.60-95
- netstat - avoid name resolution for listening or established sockets (-l) by return fast.
- netstat - --continuous should flush stdout
- added missing man pages (iptunnel, ipmaddr, netplug, netplug.d, netplugd.conf)
- added note about obsolete commands to existing man pages
- let the user know that ifconfig can correctly show only first 8 bytes of Infiniband hw address

* Sat Jul 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.60-94
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild

* Wed Jul 8 2009 Jiri Popelka <jpopelka@redhat.com> - 1.60-93
- scanf format length fix (non exploitable?) from Fabian Hugelshofer <hugelshofer2006@gmx.ch>
- URL tag changed to http://net-tools.berlios.de/

* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.60-92
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild

* Thu Oct 16 2008 Zdenek Prikryl <zprikryl@redhat.com> - 1.60-91
- fixed tcp timers info in netstat (#466845)

* Thu Sep 25 2008 Zdenek Prikryl <zprikryl@redhat.com> - 1.60-90
- fixed ifconfig's man page (#454271, #432328)

* Tue Jul 15 2008 Zdenek Prikryl <zprikryl@redhat.com> - 1.60-89
- fixed man pages for arp (#446195)
- fixed netstat --interfaces option (#446187)
- fixed clearing flags in ifconfig (#450252)

* Tue Jul 8 2008 Radek Vokál <rvokal@redhat.com> - 1.60-88
- netstat displays correct sctp statistics (#445535) <zprikryl@redhat.com>

* Tue Mar 4 2008 Radek Vokál <rvokal@redhat.com> - 1.60-87
- fix buffer for newer kernels (#435554)

* Mon Feb 25 2008 Radek Vokal <rvokal@redhat.com> - 1.60-86
- fix for GCC 4.3

* Tue Feb 19 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 1.60-85
- Autorebuild for GCC 4.3

* Thu Aug 23 2007 Radek Vokál <rvokal@redhat.com> - 1.60-84
- rebuilt

* Fri Jun 8 2007 Radek Vokál <rvokal@redhat.com> - 1.60-83
- fix netplugd init script (#242919)

* Tue May 22 2007 Radek Vokál <rvokal@redhat.com> - 1.60-82
- better SELinux patch by <dwalsh@redhat.com>

* Tue Mar 27 2007 Radek Vokál <rvokal@redhat.com> - 1.60-81
- fix segfault for empty interface (#234045)

* Thu Mar 15 2007 Radek Vokál <rvokal@redhat.com> - 1.60-80
- we don't have -n/--node option (#225554)

* Thu Feb 22 2007 Radek Vokál <rvokal@redhat.com> - 1.60-79
- quiet sctp (#229232)

* Mon Feb 19 2007 Radek Vokál <rvokal@redhat.com> - 1.60-78
- spec file cleanup (#226193)

* Tue Jan 30 2007 Radek Vokál <rvokal@redhat.com> - 1.60-77
- touch /etc/ethers (#225381)

* Wed Dec 27 2006 Radek Vokál <rvokal@redhat.com> - 1.60-76
- fix arp unaligned access (#220438)

* Wed Oct 4 2006 Radek Vokal <rvokal@redhat.com> - 1.60-75
- fix nameif crash for 16char long interface names (#209120)

* Mon Oct 2 2006 Radek Vokal <rvokal@redhat.com> - 1.60-74
- fix -I option for nestat, works as -I=eth0 again.
- add dist tag

* Mon Aug 7 2006 Radek Vokal <rvokal@redhat.com> - 1.60-73
- directory entries . and .. should be skipped

* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 1.60-72.1
- rebuild

* Wed Jun 7 2006 Radek Vokal <rvokal@redhat.com> - 1.60-72
- switch --trim to --notrim .. make it less confusing

* Fri May 19 2006 Radek Vokal <rvokal@redhat.com> - 1.60-71
- BuildRequires: libselinux-devel (#191737)

* Tue May 09 2006 Radek Vokál <rvokal@redhat.com> - 1.60-70
- add netdevice.h, fix x25
- fix ifconfig crash when interface name is too long (#190703)

* Tue May 02 2006 Radek Vokál <rvokal@redhat.com> - 1.60-69
- fix arp man page to correspond to man ethers (#190425)

* Fri Apr 14 2006 Radek Vokál <rvokal@redhat.com> - 1.60-68
- display sctp connections using netstat -S <jbj@redhat.com>

* Thu Apr 13 2006 Radek Vokál <rvokal@redhat.com> - 1.60-67
- fix wrong definition of _PATH_PROCNET_X25_ROUTE (#188786)

* Thu Apr 06 2006 Radek Vokál <rvokal@redhat.com> - 1.60-66
- add note about -T to netstat

* Thu Mar 30 2006 Radek Vokál <rvokal@redhat.com> - 1.60-65
- add note to ifconfig(8) about supported format for IPv4 addresses (#176661)

* Thu Mar 16 2006 Radek Vokál <rvokal@redhat.com> - 1.60-64
- remove duplicate arp entries (#185604)

* Thu Feb 23 2006 Radek Vokál <rvokal@redhat.com> - 1.60-63
- show inodes in netstat (#180974)

* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 1.60-62.1
- bump again for double-long bug on ppc(64)

* Fri Feb 10 2006 Radek Vokál <rvokal@redhat.com> - 1.60-62
- new option for netstat - -T stops trimming remote and local addresses (#176465)

* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 1.60-61.1
- rebuilt for new gcc4.1 snapshot and glibc changes

* Mon Feb 06 2006 Radek Vokál <rvokal@redhat.com> 1.60-61
- mii-tool manpage fixed (#180055)

* Tue Jan 17 2006 Radek Vokal <rvokal@redhat.com> 1.60-60
- forget to enable the new selinux option :( - config.make changed

* Tue Jan 17 2006 Radek Vokal <rvokal@redhat.com> 1.60-59
- new option for nestat, -Z shows selinux context. Patch by <dwalsh@redhat.com>

* Mon Jan 02 2006 Radek Vokal <rvokal@redhat.com> 1.60-58
- clear static buffers in interface.c by <drepper@redhat.com> (#176714)

* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
- rebuilt

* Sat Oct 15 2005 Radek Vokal <rvokal@redhat.com> 1.60-57
- add note to hostname man page about gethostbyname() (#166581)
- don't ship any rarp man page (#170537)

* Wed Aug 03 2005 Radek Vokal <rvokal@redhat.com> 1.60-56
- fixed buffer overflow in arp (#164695)

* Wed Jul 20 2005 Radek Vokal <rvokal@redhat.com> 1.60-55
- ifconfig - fixed virtual interface dropping (#162888)

* Wed Jun 22 2005 Radek Vokal <rvokal@redhat.com> 1.60-54
- fr man pages are back (#159702)

* Mon Jun 06 2005 Radek Vokal <rvokal@redhat.com> 1.60-53
- etherwake man page changed to ether-wake (#159156)

* Tue Apr 26 2005 Radek Vokal <rvokal@redhat.com> 1.60-52
- don't show "duplicate line" warning (#143933)
- netstat has new statistcs (#133032)
- /etc/neplug is owned by net-tools (#130621)

* Tue Apr 05 2005 Radek Vokal <rvokal@redhat.com> 1.60-51
- flush output in mii-tool (#152568)

* Wed Mar 30 2005 Radek Vokal <rvokal@redhat.com> 1.60-50
- added mii-diag tool
- added newer ether-wake
- remove useless -i option from ifconfig
- stop trimming interface names (#152457)

* Wed Mar 16 2005 Elliot Lee <sopwith@redhat.com>
- rebuilt

* Tue Mar 01 2005 Radek Vokal <rvokal@redhat.com> 1.60-48
- behaviour of netstat -i option changed (#115987)
- netstat -i shows all interface, -I<Iface> only one

* Mon Feb 28 2005 Radek Vokal <rvokal@redhat.com> 1.60-47
- added RPM_OPT_FLAGS
- execshield patch for netplug <t8m@redhat.com>

* Wed Feb 16 2005 Radek Vokal <rvokal@redhat.com> 1.60-46
- small typo in german translation (#148775)

* Wed Feb 09 2005 Radek Vokal <rvokal@redhat.com> 1.60-45
- included infiniband support (#147396) <tduffy@sun.com>
- added etherwake man page

* Mon Feb 07 2005 Radek Vokal <rvokal@redhat.com> 1.60-44
- net-plug-1.2.9 - no changes, upstream included Red Hat patches
- ether-wake-1.08 - few changes in implementation (#145718)

* Mon Jan 10 2005 Radek Vokal <rvokal@redhat.com> 1.60-43
- don't report statistics for virtual devices (#143981) <kzak@redhat.com>
- fixing translation headers - content type format
- kill bitkeeper warning messages

* Fri Dec 03 2004 Radek Vokal <rvokal@redhat.com> 1.60-42
- filter out duplicate tcp entries (#139407)

* Thu Nov 25 2004 Radek Vokal <rvokal@redhat.com> 1.60-41
- added note to hostname(1) (#140239)
- fixed --num-ports option for netstat (#115100)

* Thu Nov 11 2004 Radek Vokal <rvokal@redhat.com> 1.60-40
- mii-tool(8) fixed, labeled as obsolete, added info (#138687)
- netstat crashing on i64 fixed (#138804) Patch by <Andreas.Hirstius@cern.ch>

* Thu Nov 04 2004 Radek Vokal <rvokal@redhat.com> 1.60-39
- IBM patch for netstat -s returning negative values on 64bit arch (#144064)
- broadcast calulated if only netmask provided (#60509)

* Tue Nov 02 2004 Radek Vokal <rvokal@redhat.com> 1.60-38
- fixed fail to assign the specified netmask before adress is assigned
- patch by Malita, Florin <florin.malita@glenayre.com>

* Wed Sep 29 2004 Radek Vokal <rvokal@redhat.com> 1.60-37
- spec file updated, added conversion for french and portugal man pages to UTF-8

* Mon Sep 06 2004 Radek Vokal <rvokal@redhat.com> 1.60-36
- parse error fixed (#131539)

* Fri Sep 03 2004 Radek Vokal <rvokal@redhat.com> 1.60-35
- The return value of nameif was wrong (#129032) - patch from Fujitsu QA

* Mon Aug 30 2004 Radek Vokal <rvokal@redhat.com> 1.60-34
- Trunc patch added (#128359)

* Mon Aug 30 2004 Radek Vokal <rvokal@redhat.com> 1.60-33
- Added patch for SI units by Tom "spot" Callaway <tcallawa@redhat.com> #118006

* Tue Aug 17 2004 Phil Knirsch <pknirsch@redhat.com> 1.60-32
- Fix installopts for netplug.

* Sun Aug 08 2004 Alan Cox <alan@redhat.com> 1.60-31
- Build requires gettext.

* Mon Aug 02 2004 Phil Knirsch <pknirsch@redhat.com> 1.60-30
- Update to latest netplugd version.

* Mon Jul 12 2004 Phil Knirsch <pknirsch@redhat.com> 1.60-29
- Fixed initscript patch for netplug (#127351)

* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt

* Fri May 14 2004 Phil Knirsch <pknirsch@redhat.com> 1.60-27
- Fixed compiler warning/error in netplug.
- Updated to netplug-1.2.6 for security update and fixes.

* Thu May 06 2004 Phil Knirsch <pknirsch@redhat.com> 1.60-26
- Updated netplugd to latest upstream version.
- Fixed execshield problem in main.c of netplugd.

* Thu Apr 15 2004 Phil Knirsch <pknirsch@redhat.com> 1.60-25
- Fixed several possible buffer overflows (#120343)

* Tue Mar 30 2004 Harald Hoyer <harald@redhat.com> - 1.60-24
- fixed compilation with gcc34

* Tue Mar 23 2004 Karsten Hopp <karsten@redhat.de> 1.60-23
- add chkconfig call in post and preun, fix init script (#116555)

* Thu Feb 19 2004 Phil Knirsch <pknirsch@redhat.com>
- Added netplug-1.2.1 to net-tools (FR #103419).

* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt

* Mon Aug 25 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-20.1
-rebuilt

* Mon Aug 25 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-20
- interface option now works as described in the man page (#61113).

* Tue Aug 19 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-19.1
- rebuilt

* Tue Aug 19 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-19
- Fixed trailing blank bug in hostname output (#101263).
- Remove -O2 fir alpha (#78955).
- Updated netstat statistic output, was still broken.

* Tue Jun 17 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-18.1
- rebuilt

* Tue Jun 17 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-18
- fix ether-wake.c build with gcc 3.3
- rebuilt

* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
- rebuilt

* Wed Jun 04 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-16.1
- Bumped release and rebuilt

* Fri May 23 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-16
- Fixed ether-wake usage output (#55801).

* Thu May 22 2003 Jeremy Katz <katzj@redhat.com> 1.60-15
- fix build with gcc 3.3

* Thu May 22 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-14
- Fixed wrong manpage (#55473).

* Wed May 21 2003 Phil Knirsch <pknirsch@redhat.com>
- Added inet6-lookup patch from John van Krieken (#84108).
- Fixed outdated link in ifconfig manpage (#91287).

* Tue May 20 2003 Phil Knirsch <pknirsch@redhat.com>
- Fixed incorrect address display for ipx (#46434).
- Fixed wrongly installed manpage dirs (#50664).

* Wed Mar 19 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-13
- Fixed nameif problem (#85748).

* Fri Feb 07 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-12
- Fixed -s parameter.
- Fix /proc statistics for -nic operation.
- Fixed -i operation in general.

* Mon Jan 27 2003 Phil Knirsch <pknirsch@redhat.com> 1.60-11
- Disable smp build.

* Wed Jan 22 2003 Tim Powers <timp@redhat.com> 1.60-10
- rebuilt

* Tue Dec 17 2002 Phil Knirsch <pknirsch@redhat.com> 1.60-9
- Rebuild
- Copyright -> License.

* Thu Dec 05 2002 Elliot Lee <sopwith@redhat.com> 1.60-8
- Rebuild

* Tue Aug 06 2002 Phil Knirsch <pknirsch@redhat.com>
- Added patch from Norm for a corrected output.

* Fri Jun 21 2002 Tim Powers <timp@redhat.com>
- automated rebuild

* Thu May 23 2002 Tim Powers <timp@redhat.com>
- automated rebuild

* Fri Apr 12 2002 Jeremy Katz <katzj@redhat.com>
- fix nstrcmp() to be correct in the case where there are many devices
of the same type, eg, "eth10" > "eth1" (#61436)

* Tue Jul 31 2001 Bill Nottingham <notting@redhat.com>
- do *not* use SIOCDEVPRIVATE for MII ioctls

* Fri Jun 1 2001 Preston Brown <pbrown@redhat.com>
- include wake-on-lan wakeup utility, ether-wake by Donald Becker

* Wed Apr 18 2001 Crutcher Dunnavant <crutcher@redhat.com>
- itterate to 1.60

* Sun Apr 8 2001 Preston Brown <pbrown@redhat.com>
- use find_lang macro
- less specific locale dirs for man pages

* Mon Apr 2 2001 Preston Brown <pbrown@redhat.com>
- don't use this version of rarp, doesn't work with our 2.4.

* Tue Feb 6 2001 Crutcher Dunnavant <crutcher@redhat.com>
- fixed man page typo, closing bug #25921

* Thu Feb 1 2001 Crutcher Dunnavant <crutcher@redhat.com>
- applied twaugh's patch to close bug #25474
- which was a buffer length bug.

* Wed Dec 27 2000 Jeff Johnson <jbj@redhat.com>
- locales not initialized correctly (#20570).
- arp: document -e option (#22040).

* Sat Oct 7 2000 Jeff Johnson <jbj@redhat.com>
- update to 1.57.
- MTU (and other) option(s) not parsed correctly (#9215).
- allow more granularity iwth --numeric (#9129).

* Wed Jul 12 2000 Prospector <bugzilla@redhat.com>
- automatic rebuild

* Tue Jun 6 2000 Jeff Johnson <jbj@redhat.com>
- update to 1.56.
- FHS packaging.

* Sat Apr 15 2000 Jeff Johnson <jbj@redhat.com>
- update to 1.55.

* Tue Mar 7 2000 Jeff Johnson <jbj@redhat.com>
- rebuild for sparc baud rates > 38400.

* Wed Feb 02 2000 Cristian Gafton <gafton@redhat.com>
- fix description

* Fri Jan 14 2000 Jeff Johnson <jbj@redhat.com>
- fix "netstat -ci" (#6904).
- document more netstat options (#7429).

* Thu Jan 13 2000 Jeff Johnson <jbj@redhat.com>
- update to 1.54.
- enable "everything but DECnet" including IPv6.

* Sun Aug 29 1999 Jeff Johnson <jbj@redhat.com>
- update to 1.53.

* Wed Jul 28 1999 Jeff Johnson <jbj@redhat.com>
- plug "netstat -c" fd leak (#3620).

* Thu Jun 17 1999 Jeff Johnson <jbj@redhat.com>
- plug potential buffer overruns.

* Sat Jun 12 1999 John Hardin <jhardin@wolfenet.com>
- patch to recognize ESP and GRE protocols for VPN masquerade

* Fri Apr 23 1999 Jeff Johnson <jbj@redhat.com>
- update to 1.52.

* Thu Mar 25 1999 Jeff Johnson <jbj@redhat.com>
- update interface statistics continuously (#1323)

* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com>
- auto rebuild in the new build environment (release 2)

* Fri Mar 19 1999 Jeff Johnson <jbj@redhat.com>
- update to 1.51.
- strip binaries.

* Tue Feb 2 1999 Jeff Johnson <jbj@redhat.com>
- update to 1.50.
- added slattach/plipconfig/ipmaddr/iptunnel commands.
- enabled translated man pages.

* Tue Dec 15 1998 Jakub Jelinek <jj@ultra.linux.cz>
- update to 1.49.

* Sat Dec 5 1998 Jeff Johnson <jbj@redhat.com>
- update to 1.48.

* Thu Nov 12 1998 Jeff Johnson <jbj@redhat.com>
- update to 1.47.

* Wed Sep 2 1998 Jeff Johnson <jbj@redhat.com>
- update to 1.46

* Thu Jul 9 1998 Jeff Johnson <jbj@redhat.com>
- build root
- include ethers.5

* Thu Jun 11 1998 Aron Griffis <agriffis@coat.com>
- upgraded to 1.45
- patched hostname.c to initialize buffer
- patched ax25.c to use kernel headers

* Fri May 01 1998 Prospector System <bugs@redhat.com>
- translations modified for de, fr, tr

* Fri Feb 27 1998 Jason Spangler <jasons@usemail.com>
- added config patch

* Fri Feb 27 1998 Jason Spangler <jasons@usemail.com>
- changed to net-tools 1.432
- removed old glibc 2.1 patch
* Wed Oct 22 1997 Erik Troan <ewt@redhat.com>
- added extra patches for glibc 2.1

* Tue Oct 21 1997 Erik Troan <ewt@redhat.com>
- included complete set of network protocols (some were removed for
initial glibc work)

* Wed Sep 03 1997 Erik Troan <ewt@redhat.com>
- updated glibc patch for glibc 2.0.5

* Thu Jun 19 1997 Erik Troan <ewt@redhat.com>
- built against glibc
- updated to 1.33
Loading…
Cancel
Save