import net-tools-2.0-0.51.20160912git.el8
This commit is contained in:
commit
b136334bcb
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
SOURCES/net-tools-2.0.20160912git.tar.xz
|
1
.net-tools.metadata
Normal file
1
.net-tools.metadata
Normal file
@ -0,0 +1 @@
|
|||||||
|
da8a1810b0999f267208075e73a2cc0d8acaa546 SOURCES/net-tools-2.0.20160912git.tar.xz
|
14
SOURCES/arp-ethers.service
Normal file
14
SOURCES/arp-ethers.service
Normal file
@ -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
Normal file
178
SOURCES/ether-wake-interfaces.patch
Normal file
@ -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
Normal file
81
SOURCES/ether-wake.8
Normal file
@ -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
Normal file
392
SOURCES/ether-wake.c
Normal file
@ -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
Normal file
34
SOURCES/ipmaddr.8
Normal file
@ -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
Normal file
41
SOURCES/iptunnel.8
Normal file
@ -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
Normal file
160
SOURCES/mii-diag.8
Normal file
@ -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
Normal file
653
SOURCES/mii-diag.c
Normal file
@ -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
Normal file
83
SOURCES/net-tools-config.h
Normal file
@ -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
Normal file
44
SOURCES/net-tools-config.make
Normal file
@ -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
|
92
SOURCES/net-tools-covscan.patch
Normal file
92
SOURCES/net-tools-covscan.patch
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
diff --git a/ifconfig.c.old b/ifconfig.c
|
||||||
|
index 2b8cbbb..6505e07 100644
|
||||||
|
--- a/ifconfig.c.old
|
||||||
|
+++ b/ifconfig.c
|
||||||
|
@@ -967,8 +967,9 @@ int main(int argc, char **argv)
|
||||||
|
if (ap->herror)
|
||||||
|
ap->herror(host);
|
||||||
|
else
|
||||||
|
- fprintf(stderr,_("ifconfig: error resolving '%s' to set address for af=%s\n"), host, ap->name); fprintf(stderr,
|
||||||
|
- _("ifconfig: `--help' gives usage information.\n")); exit(1);
|
||||||
|
+ fprintf(stderr,_("ifconfig: error resolving '%s' to set address for af=%s\n"), host, ap->name);
|
||||||
|
+
|
||||||
|
+ fprintf(stderr,_("ifconfig: `--help' gives usage information.\n")); exit(1);
|
||||||
|
}
|
||||||
|
memcpy(&ifr.ifr_addr, sa, sizeof(struct sockaddr));
|
||||||
|
{
|
||||||
|
diff --git a/ipmaddr.c.old b/ipmaddr.c
|
||||||
|
index 2bfaf98..7a313c7 100644
|
||||||
|
--- a/ipmaddr.c.old
|
||||||
|
+++ b/ipmaddr.c
|
||||||
|
@@ -336,7 +336,7 @@ int multiaddr_modify(int cmd, int argc, char **argv)
|
||||||
|
NEXT_ARG();
|
||||||
|
if (ifr.ifr_name[0])
|
||||||
|
usage();
|
||||||
|
- strncpy(ifr.ifr_name, *argv, IFNAMSIZ);
|
||||||
|
+ strncpy(ifr.ifr_name, *argv, IFNAMSIZ-1);
|
||||||
|
} else {
|
||||||
|
if (ifr.ifr_hwaddr.sa_data[0])
|
||||||
|
usage();
|
||||||
|
diff --git a/lib/inet_gr.c.old b/lib/inet_gr.c
|
||||||
|
index b172d65..75ac240 100644
|
||||||
|
--- a/lib/inet_gr.c.old
|
||||||
|
+++ b/lib/inet_gr.c
|
||||||
|
@@ -292,6 +292,7 @@ int rprint_cache(int ext, int numeric)
|
||||||
|
printf(_("Source Destination Gateway "
|
||||||
|
"Flags Metric Ref Use Iface "
|
||||||
|
"MSS Window irtt TOS HHRef HHUptod SpecDst\n"));
|
||||||
|
+
|
||||||
|
fmt = proc_gen_fmt(_PATH_PROCNET_RTCACHE, 0, fp,
|
||||||
|
"Iface", "%15s",
|
||||||
|
"Destination", "%127s",
|
||||||
|
diff --git a/lib/ipx_gr.c.old b/lib/ipx_gr.c
|
||||||
|
index 2fa717c..b98c09c 100644
|
||||||
|
--- a/lib/ipx_gr.c.old
|
||||||
|
+++ b/lib/ipx_gr.c
|
||||||
|
@@ -57,6 +57,7 @@ int IPX_rprint(int options)
|
||||||
|
|
||||||
|
if ((ap = get_afntype(AF_IPX)) == NULL) {
|
||||||
|
EINTERN("lib/ipx_rt.c", "AF_IPX missing");
|
||||||
|
+ fclose(fp);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/lib/netrom_gr.c.old b/lib/netrom_gr.c
|
||||||
|
index ec82fe8..7c3349f 100644
|
||||||
|
--- a/lib/netrom_gr.c.old
|
||||||
|
+++ b/lib/netrom_gr.c
|
||||||
|
@@ -43,8 +43,14 @@ int NETROM_rprint(int options)
|
||||||
|
if (!f2) perror(_PATH_PROCNET_NR_NEIGH);
|
||||||
|
|
||||||
|
if (f1 == NULL || f2 == NULL) {
|
||||||
|
- printf(_("NET/ROM not configured in this system.\n"));
|
||||||
|
- return 1;
|
||||||
|
+ printf(_("NET/ROM not configured in this system.\n"));
|
||||||
|
+ if(f1 != NULL)
|
||||||
|
+ fclose(f1);
|
||||||
|
+
|
||||||
|
+ if(f2 != NULL)
|
||||||
|
+ fclose(f2);
|
||||||
|
+
|
||||||
|
+ return 1;
|
||||||
|
}
|
||||||
|
printf(_("Kernel NET/ROM routing table\n"));
|
||||||
|
printf(_("Destination Mnemonic Quality Neighbour Iface\n"));
|
||||||
|
diff --git a/statistics.c.old b/statistics.c
|
||||||
|
index 02791ed..8c2e18e 100644
|
||||||
|
--- a/statistics.c.old
|
||||||
|
+++ b/statistics.c
|
||||||
|
@@ -568,10 +568,10 @@ int parsesnmp(int flag_raw, int flag_tcp, int flag_udp, int flag_sctp)
|
||||||
|
f = proc_fopen("/proc/net/sctp/snmp");
|
||||||
|
if (f) {
|
||||||
|
process_fd2(f,"/proc/net/sctp/snmp");
|
||||||
|
- if (ferror(f)) {
|
||||||
|
+ if (ferror(f))
|
||||||
|
perror("/proc/net/sctp/snmp");
|
||||||
|
- fclose(f);
|
||||||
|
- }
|
||||||
|
+
|
||||||
|
+ fclose(f);
|
||||||
|
}
|
||||||
|
return(0);
|
||||||
|
}
|
675
SOURCES/net-tools-cycle.patch
Normal file
675
SOURCES/net-tools-cycle.patch
Normal file
@ -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
Normal file
34
SOURCES/net-tools-ifconfig-EiB.patch
Normal file
@ -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
Normal file
59
SOURCES/net-tools-interface-name-len.patch
Normal file
@ -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
Normal file
12
SOURCES/net-tools-linux48.patch
Normal file
@ -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
Normal file
136
SOURCES/net-tools-man.patch
Normal file
@ -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
|
43
SOURCES/net-tools-timer-man.patch
Normal file
43
SOURCES/net-tools-timer-man.patch
Normal file
@ -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"
|
954
SPECS/net-tools.spec
Normal file
954
SPECS/net-tools.spec
Normal file
@ -0,0 +1,954 @@
|
|||||||
|
%global checkout 20160912git
|
||||||
|
|
||||||
|
Summary: Basic networking tools
|
||||||
|
Name: net-tools
|
||||||
|
Version: 2.0
|
||||||
|
Release: 0.51.%{checkout}%{?dist}
|
||||||
|
License: GPLv2+
|
||||||
|
Group: System Environment/Base
|
||||||
|
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-covscan.patch
|
||||||
|
|
||||||
|
BuildRequires: bluez-libs-devel
|
||||||
|
BuildRequires: gettext, libselinux
|
||||||
|
BuildRequires: libselinux-devel
|
||||||
|
BuildRequires: systemd
|
||||||
|
%{?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 .covscan
|
||||||
|
|
||||||
|
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
|
||||||
|
* Wed Sep 26 2018 Michal Ruprich <mruprich@redhat.com> - 2.0-0.51.20160912git
|
||||||
|
- Resolves: #1607010 - Please review important issues found by covscan
|
||||||
|
|
||||||
|
* 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…
Reference in New Issue
Block a user