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