c10-beta
imports/c10-beta/net-tools-2.0-0.72.20160912git.el10
commit
4416403a76
@ -0,0 +1 @@
|
||||
SOURCES/net-tools-2.0.20160912git.tar.xz
|
@ -0,0 +1 @@
|
||||
da8a1810b0999f267208075e73a2cc0d8acaa546 SOURCES/net-tools-2.0.20160912git.tar.xz
|
@ -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
|
@ -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
|
@ -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).
|
@ -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).
|
@ -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
|
@ -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
|
@ -0,0 +1,529 @@
|
||||
diff --git a/arp.c b/arp.c
|
||||
index 5db71a7..30dd56d 100644
|
||||
--- a/arp.c
|
||||
+++ b/arp.c
|
||||
@@ -93,7 +93,7 @@ struct hwtype *hw; /* current hardware type */
|
||||
int sockfd = 0; /* active socket descriptor */
|
||||
int hw_set = 0; /* flag if hw-type was set (-H) */
|
||||
char device[16] = ""; /* current device */
|
||||
-static void usage(void);
|
||||
+static void usage(int rc);
|
||||
|
||||
/* Delete an entry from the ARP cache. */
|
||||
static int arp_del(char **args)
|
||||
@@ -169,14 +169,14 @@ static int arp_del(char **args)
|
||||
}
|
||||
if (!strcmp(*args, "dev")) {
|
||||
if (*++args == NULL)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
safe_strncpy(device, *args, sizeof(device));
|
||||
args++;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(*args, "netmask")) {
|
||||
if (*++args == NULL)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
if (strcmp(*args, "255.255.255.255") != 0) {
|
||||
safe_strncpy(host, *args, (sizeof host));
|
||||
if (ap->input(0, host, &ss) < 0) {
|
||||
@@ -190,7 +190,7 @@ static int arp_del(char **args)
|
||||
args++;
|
||||
continue;
|
||||
}
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
}
|
||||
|
||||
// if neighter priv nor pub is given, work on both
|
||||
@@ -346,14 +346,14 @@ static int arp_set(char **args)
|
||||
}
|
||||
if (!strcmp(*args, "dev")) {
|
||||
if (*++args == NULL)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
safe_strncpy(device, *args, sizeof(device));
|
||||
args++;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(*args, "netmask")) {
|
||||
if (*++args == NULL)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
if (strcmp(*args, "255.255.255.255") != 0) {
|
||||
safe_strncpy(host, *args, (sizeof host));
|
||||
if (ap->input(0, host, &ss) < 0) {
|
||||
@@ -367,7 +367,7 @@ static int arp_set(char **args)
|
||||
args++;
|
||||
continue;
|
||||
}
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
}
|
||||
|
||||
/* Fill in the remainder of the request. */
|
||||
@@ -621,7 +621,7 @@ static void version(void)
|
||||
exit(E_VERSION);
|
||||
}
|
||||
|
||||
-static void usage(void)
|
||||
+static void usage(int rc)
|
||||
{
|
||||
fprintf(stderr, _("Usage:\n arp [-vn] [<HW>] [-i <if>] [-a] [<hostname>] <-Display ARP cache\n"));
|
||||
fprintf(stderr, _(" arp [-v] [-i <if>] -d <host> [pub] <-Delete ARP entry\n"));
|
||||
@@ -643,7 +643,7 @@ static void usage(void)
|
||||
fprintf(stderr, _(" <HW>=Use '-H <hw>' to specify hardware address type. Default: %s\n"), DFLT_HW);
|
||||
fprintf(stderr, _(" List of possible hardware types (which support ARP):\n"));
|
||||
print_hwlist(1); /* 1 = ARPable */
|
||||
- exit(E_USAGE);
|
||||
+ exit(rc);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
@@ -745,10 +745,11 @@ int main(int argc, char **argv)
|
||||
|
||||
case 'V':
|
||||
version();
|
||||
- case '?':
|
||||
case 'h':
|
||||
+ usage(E_USAGE);
|
||||
+ case '?':
|
||||
default:
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
}
|
||||
|
||||
if (ap->af != AF_INET) {
|
||||
@@ -797,7 +798,7 @@ int main(int argc, char **argv)
|
||||
break;
|
||||
|
||||
default:
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
}
|
||||
|
||||
exit(what);
|
||||
diff --git a/ipmaddr.c b/ipmaddr.c
|
||||
index e4ed41d..c45b62a 100644
|
||||
--- a/ipmaddr.c
|
||||
+++ b/ipmaddr.c
|
||||
@@ -53,14 +53,14 @@ static void version(void)
|
||||
exit(E_VERSION);
|
||||
}
|
||||
|
||||
-static void usage(void) __attribute__((noreturn));
|
||||
+static void usage(int rc) __attribute__((noreturn));
|
||||
|
||||
-static void usage(void)
|
||||
+static void usage(int rc)
|
||||
{
|
||||
fprintf(stderr, _("Usage: ipmaddr [ add | del ] MULTIADDR dev STRING\n"));
|
||||
fprintf(stderr, _(" ipmaddr show [ dev STRING ] [ ipv4 | ipv6 | link | all ]\n"));
|
||||
fprintf(stderr, _(" ipmaddr -V | -version\n"));
|
||||
- exit(E_USAGE);
|
||||
+ exit(rc);
|
||||
}
|
||||
|
||||
static void print_lla(FILE *fp, int len, unsigned char *addr)
|
||||
@@ -294,7 +294,7 @@ static int multiaddr_list(int argc, char **argv)
|
||||
NEXT_ARG();
|
||||
l = strlen(*argv);
|
||||
if (l <= 0 || l >= sizeof(filter_dev))
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
strncpy(filter_dev, *argv, sizeof (filter_dev));
|
||||
} else if (strcmp(*argv, "all") == 0) {
|
||||
filter_family = AF_UNSPEC;
|
||||
@@ -307,7 +307,7 @@ static int multiaddr_list(int argc, char **argv)
|
||||
} else {
|
||||
l = strlen(*argv);
|
||||
if (l <= 0 || l >= sizeof(filter_dev))
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
strncpy(filter_dev, *argv, sizeof (filter_dev));
|
||||
}
|
||||
argv++; argc--;
|
||||
@@ -339,18 +339,18 @@ int multiaddr_modify(int cmd, int argc, char **argv)
|
||||
if (strcmp(*argv, "dev") == 0) {
|
||||
NEXT_ARG();
|
||||
if (ifr.ifr_name[0])
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
strncpy(ifr.ifr_name, *argv, IFNAMSIZ);
|
||||
} else {
|
||||
if (ifr.ifr_hwaddr.sa_data[0])
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
if (parse_lla(*argv, ifr.ifr_hwaddr.sa_data) < 0)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
}
|
||||
argc--; argv++;
|
||||
}
|
||||
if (ifr.ifr_name[0] == 0)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
|
||||
fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (fd < 0) {
|
||||
@@ -378,7 +378,7 @@ int do_multiaddr(int argc, char **argv)
|
||||
if (matches(*argv, "list") == 0 || matches(*argv, "show") == 0
|
||||
|| matches(*argv, "lst") == 0)
|
||||
return multiaddr_list(argc-1, argv+1);
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
}
|
||||
|
||||
int preferred_family = AF_UNSPEC;
|
||||
@@ -408,13 +408,13 @@ int main(int argc, char **argv)
|
||||
argc--;
|
||||
argv++;
|
||||
if (argc <= 1)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
if (strcmp(argv[1], "inet") == 0)
|
||||
preferred_family = AF_INET;
|
||||
else if (strcmp(argv[1], "inet6") == 0)
|
||||
preferred_family = AF_INET6;
|
||||
else
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
} else if (matches(argv[1], "-stats") == 0 ||
|
||||
matches(argv[1], "-statistics") == 0) {
|
||||
++show_stats;
|
||||
@@ -423,7 +423,7 @@ int main(int argc, char **argv)
|
||||
} else if ((matches(argv[1], "-V") == 0) || matches(argv[1], "--version") == 0) {
|
||||
version();
|
||||
} else
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
argc--; argv++;
|
||||
}
|
||||
|
||||
diff --git a/include/util-ank.h b/include/util-ank.h
|
||||
index c8fcd08..c78604a 100644
|
||||
--- a/include/util-ank.h
|
||||
+++ b/include/util-ank.h
|
||||
@@ -23,7 +23,7 @@ extern int resolve_hosts;
|
||||
#define NEXT_ARG() \
|
||||
argv++; \
|
||||
if (--argc <= 0) \
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
diff --git a/iptunnel.c b/iptunnel.c
|
||||
index 2215d68..42b2a9e 100644
|
||||
--- a/iptunnel.c
|
||||
+++ b/iptunnel.c
|
||||
@@ -76,9 +76,9 @@ static void version(void)
|
||||
exit(E_VERSION);
|
||||
}
|
||||
|
||||
-static void usage(void) __attribute__((noreturn));
|
||||
+static void usage(int rc) __attribute__((noreturn));
|
||||
|
||||
-static void usage(void)
|
||||
+static void usage(int rc)
|
||||
{
|
||||
fprintf(stderr, _("Usage: iptunnel { add | change | del | show } [ NAME ]\n"));
|
||||
fprintf(stderr, _(" [ mode { ipip | gre | sit } ] [ remote ADDR ] [ local ADDR ]\n"));
|
||||
@@ -90,7 +90,7 @@ static void usage(void)
|
||||
fprintf(stderr, _(" TOS := { NUMBER | inherit }\n"));
|
||||
fprintf(stderr, _(" TTL := { 1..255 | inherit }\n"));
|
||||
fprintf(stderr, _(" KEY := { DOTTED_QUAD | NUMBER }\n"));
|
||||
- exit(E_USAGE);
|
||||
+ exit(rc);
|
||||
}
|
||||
|
||||
static int do_ioctl_get_ifindex(char *dev)
|
||||
@@ -217,18 +217,18 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
|
||||
NEXT_ARG();
|
||||
if (strcmp(*argv, "ipip") == 0) {
|
||||
if (p->iph.protocol)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
p->iph.protocol = IPPROTO_IPIP;
|
||||
} else if (strcmp(*argv, "gre") == 0) {
|
||||
if (p->iph.protocol)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
p->iph.protocol = IPPROTO_GRE;
|
||||
} else if (strcmp(*argv, "sit") == 0) {
|
||||
if (p->iph.protocol)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
p->iph.protocol = IPPROTO_IPV6;
|
||||
} else
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
} else if (strcmp(*argv, "key") == 0) {
|
||||
unsigned uval;
|
||||
NEXT_ARG();
|
||||
@@ -238,7 +238,7 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
|
||||
p->i_key = p->o_key = get_addr32(*argv);
|
||||
else {
|
||||
if (scan_number(*argv, &uval)<0)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
p->i_key = p->o_key = htonl(uval);
|
||||
}
|
||||
} else if (strcmp(*argv, "ikey") == 0) {
|
||||
@@ -249,7 +249,7 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
|
||||
p->o_key = get_addr32(*argv);
|
||||
else {
|
||||
if (scan_number(*argv, &uval)<0)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
p->i_key = htonl(uval);
|
||||
}
|
||||
} else if (strcmp(*argv, "okey") == 0) {
|
||||
@@ -260,7 +260,7 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
|
||||
p->o_key = get_addr32(*argv);
|
||||
else {
|
||||
if (scan_number(*argv, &uval)<0)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
p->o_key = htonl(uval);
|
||||
}
|
||||
} else if (strcmp(*argv, "seq") == 0) {
|
||||
@@ -295,9 +295,9 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
|
||||
NEXT_ARG();
|
||||
if (strcmp(*argv, "inherit") != 0) {
|
||||
if (scan_number(*argv, &uval)<0)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
if (uval > 255)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
p->iph.ttl = uval;
|
||||
}
|
||||
} else if (strcmp(*argv, "tos") == 0) {
|
||||
@@ -305,15 +305,15 @@ static int parse_args(int argc, char **argv, struct ip_tunnel_parm *p)
|
||||
NEXT_ARG();
|
||||
if (strcmp(*argv, "inherit") != 0) {
|
||||
if (scan_number(*argv, &uval)<0)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
if (uval > 255)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
p->iph.tos = uval;
|
||||
} else
|
||||
p->iph.tos = 1;
|
||||
} else {
|
||||
if (p->name[0])
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
safe_strncpy(p->name, *argv, IFNAMSIZ);
|
||||
}
|
||||
argc--; argv++;
|
||||
@@ -574,7 +574,7 @@ int do_iptunnel(int argc, char **argv)
|
||||
} else
|
||||
return do_show(0, NULL);
|
||||
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
}
|
||||
|
||||
|
||||
@@ -605,13 +605,13 @@ int main(int argc, char **argv)
|
||||
argc--;
|
||||
argv++;
|
||||
if (argc <= 1)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
if (strcmp(argv[1], "inet") == 0)
|
||||
preferred_family = AF_INET;
|
||||
else if (strcmp(argv[1], "inet6") == 0)
|
||||
preferred_family = AF_INET6;
|
||||
else
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
} else if (matches(argv[1], "-stats") == 0 ||
|
||||
matches(argv[1], "-statistics") == 0) {
|
||||
++show_stats;
|
||||
@@ -620,7 +620,7 @@ int main(int argc, char **argv)
|
||||
} else if ((matches(argv[1], "-V") == 0) || (matches(argv[1], "--version") == 0)) {
|
||||
version();
|
||||
} else
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
argc--; argv++;
|
||||
}
|
||||
|
||||
diff --git a/nameif.c b/nameif.c
|
||||
index b280e59..13e3033 100644
|
||||
--- a/nameif.c
|
||||
+++ b/nameif.c
|
||||
@@ -192,10 +192,10 @@ struct option lopt[] = {
|
||||
{NULL},
|
||||
};
|
||||
|
||||
-void usage(void)
|
||||
+void usage(int rc)
|
||||
{
|
||||
fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}\n"));
|
||||
- exit(E_USAGE);
|
||||
+ exit(rc);
|
||||
}
|
||||
|
||||
int main(int ac, char **av)
|
||||
@@ -214,7 +214,7 @@ int main(int ac, char **av)
|
||||
switch (c) {
|
||||
default:
|
||||
case '?':
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
case 'c':
|
||||
fname = optarg;
|
||||
break;
|
||||
@@ -232,7 +232,7 @@ int main(int ac, char **av)
|
||||
char pos[30];
|
||||
|
||||
if ((ac-optind) & 1)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
if (strlen(av[optind])+1>IFNAMSIZ)
|
||||
complain(_("interface name `%s' too long"), av[optind]);
|
||||
safe_strncpy(ch->ifname, av[optind], sizeof(ch->ifname));
|
||||
diff --git a/plipconfig.c b/plipconfig.c
|
||||
index 86fa890..1caeed3 100644
|
||||
--- a/plipconfig.c
|
||||
+++ b/plipconfig.c
|
||||
@@ -57,12 +57,12 @@ static void version(void)
|
||||
exit(E_VERSION);
|
||||
}
|
||||
|
||||
-void usage(void)
|
||||
+void usage(int rc)
|
||||
{
|
||||
fprintf(stderr, _("Usage: plipconfig interface [nibble NN] [trigger NN]\n"));
|
||||
fprintf(stderr, _(" plipconfig -V | --version\n"));
|
||||
fprintf(stderr, _(" plipconfig -h | --help\n"));
|
||||
- exit(E_USAGE);
|
||||
+ exit(rc);
|
||||
}
|
||||
|
||||
void print_plip(void)
|
||||
@@ -89,16 +89,18 @@ int main(int argc, char **argv)
|
||||
argc--;
|
||||
argv++;
|
||||
while (argv[0] && *argv[0] == '-') {
|
||||
- if (!strcmp(*argv, "-V") || !strcmp(*argv, "--version"))
|
||||
+ if ((!strcmp(*argv, "-V") || !strcmp(*argv, "--version")) && argc==1)
|
||||
version();
|
||||
+ if ((!strcmp(*argv, "-h") || !strcmp(*argv, "--help")) && argc==1)
|
||||
+ usage(E_USAGE);
|
||||
else
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
argv++;
|
||||
argc--;
|
||||
}
|
||||
|
||||
if (argc == 0)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
|
||||
spp = argv;
|
||||
safe_strncpy(ifr.ifr_name, *spp++, IFNAMSIZ);
|
||||
@@ -117,19 +119,19 @@ int main(int argc, char **argv)
|
||||
while (*spp != (char *) NULL) {
|
||||
if (!strcmp(*spp, "nibble")) {
|
||||
if (*++spp == NULL)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
plip->nibble = atoi(*spp);
|
||||
spp++;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(*spp, "trigger")) {
|
||||
if (*++spp == NULL)
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
plip->trigger = atoi(*spp);
|
||||
spp++;
|
||||
continue;
|
||||
}
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
}
|
||||
|
||||
plip->pcmd = PLIP_SET_TIMEOUT;
|
||||
diff --git a/slattach.c b/slattach.c
|
||||
index 5c81584..dbb2658 100644
|
||||
--- a/slattach.c
|
||||
+++ b/slattach.c
|
||||
@@ -581,7 +581,7 @@ sig_catch(int sig)
|
||||
|
||||
|
||||
static void
|
||||
-usage(void)
|
||||
+usage(int rc)
|
||||
{
|
||||
char *usage_msg = "Usage: slattach [-ehlLmnqv] "
|
||||
#ifdef SIOCSKEEPALIVE
|
||||
@@ -594,7 +594,7 @@ usage(void)
|
||||
" slattach -V | --version\n";
|
||||
|
||||
fputs(usage_msg, stderr);
|
||||
- exit(E_USAGE);
|
||||
+ exit(rc);
|
||||
}
|
||||
|
||||
|
||||
@@ -691,7 +691,7 @@ main(int argc, char *argv[])
|
||||
/*NOTREACHED*/
|
||||
|
||||
default:
|
||||
- usage();
|
||||
+ usage(E_OPTERR);
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
@@ -707,7 +707,7 @@ main(int argc, char *argv[])
|
||||
opt_m++;
|
||||
|
||||
/* Is a terminal given? */
|
||||
- if (optind != (argc - 1)) usage();
|
||||
+ if (optind != (argc - 1)) usage(E_OPTERR);
|
||||
safe_strncpy(path_buf, argv[optind], sizeof(path_buf));
|
||||
if (!strcmp(path_buf, "-")) {
|
||||
opt_e = 1;
|
||||
diff --git a/netstat.c.old b/netstat.c
|
||||
index dbcba2b..d04f0ff 100644
|
||||
--- a/netstat.c.old
|
||||
+++ b/netstat.c
|
||||
@@ -2286,7 +2286,7 @@ int main
|
||||
|
||||
if(argc == optind + 1) {
|
||||
if((reptimer = atoi(argv[optind])) <= 0)
|
||||
- usage(E_USAGE);
|
||||
+ usage(E_OPTERR);
|
||||
flag_cnt++;
|
||||
}
|
||||
|
||||
diff --git a/route.c.old b/route.c
|
||||
index f86bb8e..b0a885e 100644
|
||||
--- a/route.c.old
|
||||
+++ b/route.c
|
||||
@@ -186,6 +186,7 @@ int main(int argc, char **argv)
|
||||
case 'V':
|
||||
version();
|
||||
case 'h':
|
||||
+ usage(E_USAGE);
|
||||
case '?':
|
||||
opt_h++;
|
||||
break;
|
||||
@@ -198,7 +199,7 @@ int main(int argc, char **argv)
|
||||
|
||||
if (opt_h) {
|
||||
if (!afname[0])
|
||||
- usage(E_USAGE);
|
||||
+ usage(E_OPTERR);
|
||||
else
|
||||
what = RTACTION_HELP;
|
||||
} else {
|
@ -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);
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
diff --git a/lib/interface.c.old b/lib/interface.c
|
||||
index 998830a..d35329f 100644
|
||||
--- a/lib/interface.c.old
|
||||
+++ b/lib/interface.c
|
||||
@@ -249,7 +249,10 @@ static const char *get_name(char **namep, const char *p)
|
||||
*name++ = *p++;
|
||||
count++;
|
||||
if (count == (IFNAMSIZ-1))
|
||||
+ {
|
||||
+ p++;
|
||||
break;
|
||||
+ }
|
||||
}
|
||||
*name++ = '\0';
|
||||
return p;
|
@ -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) {
|
@ -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) {
|
@ -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>
|
@ -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
|
@ -0,0 +1,10 @@
|
||||
--- a/lib/inet6_gr.c
|
||||
+++ b/lib/inet6_gr.c
|
||||
@@ -146,7 +146,7 @@
|
||||
strcat(flags, "f");
|
||||
|
||||
/* Print the info. */
|
||||
- printf("%-30s %-26s %-4s %-3d %-1d%6d %s\n",
|
||||
+ printf("%-30s %-26s %-4s %-3d %-1d %6d %s\n",
|
||||
addr6, naddr6, flags, metric, refcnt, use, iface);
|
||||
}
|
@ -0,0 +1,188 @@
|
||||
diff --git a/netstat.c b/netstat.c
|
||||
index d04f0ff..17f680a 100644
|
||||
--- a/netstat.c
|
||||
+++ b/netstat.c
|
||||
@@ -359,7 +359,7 @@ static int extract_type_1_socket_inode(const char lname[], unsigned long * inode
|
||||
if (lname[strlen(lname)-1] != ']') return(-1);
|
||||
|
||||
{
|
||||
- char inode_str[strlen(lname + 1)]; /* e.g. "12345" */
|
||||
+ char inode_str[strlen(lname) + 1]; /* e.g. "12345" */
|
||||
const int inode_str_len = strlen(lname) - PRG_SOCKET_PFXl - 1;
|
||||
char *serr;
|
||||
|
||||
diff --git a/lib/ipx_gr.c b/lib/ipx_gr.c
|
||||
index 2fa717c..fe9dd13 100644
|
||||
--- a/lib/ipx_gr.c
|
||||
+++ 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/unix.c b/lib/unix.c
|
||||
index 8e5dbd1..47a93e6 100644
|
||||
--- a/lib/unix.c
|
||||
+++ b/lib/unix.c
|
||||
@@ -39,7 +39,7 @@ static const char *UNSPEC_print(const char *ptr)
|
||||
unsigned int i;
|
||||
|
||||
pos = buff;
|
||||
- for (i = 0; i < sizeof(struct sockaddr); i++) {
|
||||
+ for (i = 0; i < sizeof(((struct sockaddr *)0)->sa_data); i++) {
|
||||
pos += sprintf(pos, "%02X-", (*ptr++ & 0377));
|
||||
}
|
||||
buff[strlen(buff) - 1] = '\0';
|
||||
diff --git a/lib/netrom.c b/lib/netrom.c
|
||||
index 6bcde2d..f76811a 100644
|
||||
--- a/lib/netrom.c
|
||||
+++ b/lib/netrom.c
|
||||
@@ -75,7 +75,7 @@ static const char *NETROM_sprint(const struct sockaddr_storage *sasp, int numeri
|
||||
{
|
||||
const struct sockaddr_ax25 *ax25_sap = (const struct sockaddr_ax25 *)sasp;
|
||||
const struct sockaddr *sap = (const struct sockaddr *)sasp;
|
||||
- char buf[64];
|
||||
+ static char buf[64];
|
||||
if (sap->sa_family == 0xFFFF || sap->sa_family == 0)
|
||||
return safe_strncpy(buf, _("[NONE SET]"), sizeof(buf));
|
||||
return NETROM_print(ax25_sap->sax25_call.ax25_call);
|
||||
diff --git a/lib/masq_info.c b/lib/masq_info.c
|
||||
index cbfb2be..4224fe1 100644
|
||||
--- a/lib/masq_info.c
|
||||
+++ b/lib/masq_info.c
|
||||
@@ -105,7 +105,7 @@ static int read_masqinfo(FILE * f, struct masq *mslist, int nmslist)
|
||||
for (nread = 0; nread < nmslist; nread++) {
|
||||
ms = &mslist[nread];
|
||||
if (has_pdelta) {
|
||||
- if ((n = fscanf(f, " %s %"PRIx32":%hX %"PRIx32":%hX %hX %lX %hd %hd %lu",
|
||||
+ if ((n = fscanf(f, " %255s %"PRIx32":%hX %"PRIx32":%hX %hX %lX %hd %hd %lu",
|
||||
buf,
|
||||
&src_addr, &ms->sport,
|
||||
&dst_addr, &ms->dport,
|
||||
@@ -115,7 +115,7 @@ static int read_masqinfo(FILE * f, struct masq *mslist, int nmslist)
|
||||
memcpy(&ms->src.sin_addr.s_addr, &src_addr, 4);
|
||||
memcpy(&ms->dst.sin_addr.s_addr, &dst_addr, 4);
|
||||
} else {
|
||||
- if ((n = fscanf(f, " %s %"PRIx32":%hX %"PRIx32":%hX %hX %lX %hd %lu",
|
||||
+ if ((n = fscanf(f, " %255s %"PRIx32":%hX %"PRIx32":%hX %hX %lX %hd %lu",
|
||||
buf,
|
||||
&src_addr, &ms->sport,
|
||||
&dst_addr, &ms->dport,
|
||||
diff --git a/ifconfig.c b/ifconfig.c
|
||||
index 2b8cbbb..9a64f9a 100644
|
||||
--- a/ifconfig.c
|
||||
+++ b/ifconfig.c
|
||||
@@ -964,12 +964,15 @@ int main(int argc, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
if (ap->input(0, host, &_sa) < 0) {
|
||||
- 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);
|
||||
+ if (ap->herror)
|
||||
+ ap->herror(host);
|
||||
+ else
|
||||
+ fprintf(stderr,_("ifconfig: error resolving '%s' to set address for af=%s\n"), host, ap->name);
|
||||
+
|
||||
+ fprintf(stderr, _("ifconfig: `--help' gives usage information.\n"));
|
||||
+ exit(1);
|
||||
}
|
||||
+
|
||||
memcpy(&ifr.ifr_addr, sa, sizeof(struct sockaddr));
|
||||
{
|
||||
int r = 0; /* to shut gcc up */
|
||||
diff --git a/lib/netrom_gr.c b/lib/netrom_gr.c
|
||||
index ec82fe8..bd532fb 100644
|
||||
--- a/lib/netrom_gr.c
|
||||
+++ 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)
|
||||
+ fclose(f1);
|
||||
+
|
||||
+ if (f2)
|
||||
+ 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 0b5a6f3..0e50f8d 100644
|
||||
--- a/statistics.c.old
|
||||
+++ b/statistics.c
|
||||
@@ -571,8 +571,12 @@ int parsesnmp(int flag_raw, int flag_tcp, int flag_udp, int flag_sctp)
|
||||
if (ferror(f)) {
|
||||
perror("/proc/net/sctp/snmp");
|
||||
fclose(f);
|
||||
+ return(1);
|
||||
}
|
||||
+
|
||||
+ fclose(f);
|
||||
}
|
||||
+
|
||||
return(0);
|
||||
}
|
||||
|
||||
diff --git a/lib/inet_gr.c b/lib/inet_gr.c
|
||||
index b172d65..5dcab82 100644
|
||||
--- a/lib/inet_gr.c
|
||||
+++ b/lib/inet_gr.c
|
||||
@@ -289,27 +289,28 @@ int rprint_cache(int ext, int numeric)
|
||||
|
||||
if (format == 2) {
|
||||
if (ext >= 3)
|
||||
- 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",
|
||||
- "Gateway", "%127s",
|
||||
- "Flags", "%X",
|
||||
- "RefCnt", "%d",
|
||||
- "Use", "%d",
|
||||
- "Metric", "%d",
|
||||
- "Source", "%127s",
|
||||
- "MTU", "%d",
|
||||
- "Window", "%d",
|
||||
- "IRTT", "%d",
|
||||
- "TOS", "%d",
|
||||
- "HHRef", "%d",
|
||||
- "HHUptod", "%d",
|
||||
- "SpecDst", "%127s",
|
||||
- NULL);
|
||||
- /* "%15s %127s %127s %X %d %d %d %127s %d %d %d %d %d %127s\n" */
|
||||
+ 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",
|
||||
+ "Gateway", "%127s",
|
||||
+ "Flags", "%X",
|
||||
+ "RefCnt", "%d",
|
||||
+ "Use", "%d",
|
||||
+ "Metric", "%d",
|
||||
+ "Source", "%127s",
|
||||
+ "MTU", "%d",
|
||||
+ "Window", "%d",
|
||||
+ "IRTT", "%d",
|
||||
+ "TOS", "%d",
|
||||
+ "HHRef", "%d",
|
||||
+ "HHUptod", "%d",
|
||||
+ "SpecDst", "%127s",
|
||||
+ NULL);
|
||||
+ /* "%15s %127s %127s %X %d %d %d %127s %d %d %d %d %d %127s\n" */
|
||||
}
|
@ -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"
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue