This patch adds -e (extended information) to route and -r/-e (show routing
tables/extended information) to netstat. This makes them behave (more) like their GNU counterparts.
This commit is contained in:
parent
aa385d4015
commit
820098fd61
@ -33,6 +33,10 @@
|
||||
#include "inet_common.h"
|
||||
#include "busybox.h"
|
||||
|
||||
#ifdef CONFIG_ROUTE
|
||||
extern void displayroutes(int noresolve, int netstatfmt);
|
||||
#endif
|
||||
|
||||
#define NETSTAT_CONNECTED 0x01
|
||||
#define NETSTAT_LISTENING 0x02
|
||||
#define NETSTAT_NUMERIC 0x04
|
||||
@ -462,7 +466,8 @@ int netstat_main(int argc, char **argv)
|
||||
{
|
||||
int opt;
|
||||
int new_flags=0;
|
||||
while ((opt = getopt(argc, argv, "lantuwx")) != -1)
|
||||
int showroute = 0, extended = 0;
|
||||
while ((opt = getopt(argc, argv, "laenrtuwx")) != -1)
|
||||
switch (opt) {
|
||||
case 'l':
|
||||
flags &= ~NETSTAT_CONNECTED;
|
||||
@ -474,6 +479,12 @@ int netstat_main(int argc, char **argv)
|
||||
case 'n':
|
||||
flags |= NETSTAT_NUMERIC;
|
||||
break;
|
||||
case 'r':
|
||||
showroute = 1;
|
||||
break;
|
||||
case 'e':
|
||||
extended = 1;
|
||||
break;
|
||||
case 't':
|
||||
new_flags |= NETSTAT_TCP;
|
||||
break;
|
||||
@ -489,6 +500,16 @@ int netstat_main(int argc, char **argv)
|
||||
default:
|
||||
show_usage();
|
||||
}
|
||||
if ( showroute ) {
|
||||
#ifdef CONFIG_ROUTE
|
||||
displayroutes ( flags & NETSTAT_NUMERIC, !extended );
|
||||
return 0;
|
||||
#else
|
||||
printf( "-r (display routing table) is not compiled in.\n" );
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (new_flags) {
|
||||
flags &= ~(NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW|NETSTAT_UNIX);
|
||||
flags |= new_flags;
|
||||
|
@ -15,7 +15,7 @@
|
||||
* Foundation; either version 2 of the License, or (at
|
||||
* your option) any later version.
|
||||
*
|
||||
* $Id: route.c,v 1.14 2001/11/10 11:22:43 andersen Exp $
|
||||
* $Id: route.c,v 1.15 2002/05/14 23:03:23 sandman Exp $
|
||||
*
|
||||
* displayroute() code added by Vladimir N. Oleynik <dzo@simtreas.ru>
|
||||
* adjustments by Larry Doolittle <LRDoolittle@lbl.gov>
|
||||
@ -342,14 +342,14 @@ INET_setroute(int action, int options, char **args)
|
||||
#define RTF_REJECT 0x0200 /* Reject route */
|
||||
#endif
|
||||
|
||||
static void displayroutes(int noresolve)
|
||||
void displayroutes(int noresolve, int netstatfmt)
|
||||
{
|
||||
char buff[256];
|
||||
int nl = 0 ;
|
||||
struct in_addr dest;
|
||||
struct in_addr gw;
|
||||
struct in_addr mask;
|
||||
int flgs, ref, use, metric;
|
||||
int flgs, ref, use, metric, mtu, win, ir;
|
||||
char flags[64];
|
||||
unsigned long int d,g,m;
|
||||
|
||||
@ -369,14 +369,17 @@ static void displayroutes(int noresolve)
|
||||
while(buff[ifl]!=' ' && buff[ifl]!='\t' && buff[ifl]!='\0')
|
||||
ifl++;
|
||||
buff[ifl]=0; /* interface */
|
||||
if(sscanf(buff+ifl+1, "%lx%lx%X%d%d%d%lx",
|
||||
&d, &g, &flgs, &ref, &use, &metric, &m)!=7) {
|
||||
if(sscanf(buff+ifl+1, "%lx%lx%X%d%d%d%lx%d%d%d",
|
||||
&d, &g, &flgs, &ref, &use, &metric, &m, &mtu, &win, &ir )!=10) {
|
||||
error_msg_and_die( "Unsuported kernel route format\n");
|
||||
}
|
||||
if(nl==1)
|
||||
printf("Kernel IP routing table\n"
|
||||
"Destination Gateway Genmask Flags Metric Ref Use Iface\n");
|
||||
|
||||
if(nl==1) {
|
||||
printf("Kernel IP routing table\n");
|
||||
if ( netstatfmt )
|
||||
printf("Destination Gateway Genmask Flags MSS Window irtt Iface\n");
|
||||
else
|
||||
printf("Destination Gateway Genmask Flags Metric Ref Use Iface\n");
|
||||
}
|
||||
ifl = 0; /* parse flags */
|
||||
if(flgs&RTF_UP) {
|
||||
if(flgs&RTF_REJECT)
|
||||
@ -405,10 +408,18 @@ static void displayroutes(int noresolve)
|
||||
numeric = noresolve | 0x4000; /* host instead of net */
|
||||
s_addr.sin_addr = gw;
|
||||
INET_rresolve(sgw, sizeof(sgw), &s_addr, numeric, m);
|
||||
printf("%-16s%-16s%-16s%-6s%-6d %-2d %7d %s\n",
|
||||
sdest, sgw,
|
||||
inet_ntoa(mask),
|
||||
flags, metric, ref, use, buff);
|
||||
if ( netstatfmt ) {
|
||||
printf("%-16s%-16s%-16s%-6s%5d %-5d %6d %s\n",
|
||||
sdest, sgw,
|
||||
inet_ntoa(mask),
|
||||
flags, mtu, win, ir, buff);
|
||||
}
|
||||
else {
|
||||
printf("%-16s%-16s%-16s%-6s%-6d %-2d %7d %s\n",
|
||||
sdest, sgw,
|
||||
inet_ntoa(mask),
|
||||
flags, metric, ref, use, buff);
|
||||
}
|
||||
}
|
||||
}
|
||||
nl++;
|
||||
@ -417,25 +428,40 @@ static void displayroutes(int noresolve)
|
||||
|
||||
int route_main(int argc, char **argv)
|
||||
{
|
||||
int opt;
|
||||
int what = 0;
|
||||
|
||||
argc--;
|
||||
argv++;
|
||||
|
||||
if (*argv == NULL || (*(argv+1)==NULL && strcmp(*argv, "-n")==0)) {
|
||||
displayroutes(*argv != NULL);
|
||||
if ( !argv [1] || ( argv [1][0] == '-' )) {
|
||||
/* check options */
|
||||
int noresolve = 0;
|
||||
int extended = 0;
|
||||
|
||||
while ((opt = getopt(argc, argv, "ne")) > 0) {
|
||||
switch (opt) {
|
||||
case 'n':
|
||||
noresolve = 1;
|
||||
break;
|
||||
case 'e':
|
||||
extended = 1;
|
||||
break;
|
||||
default:
|
||||
show_usage ( );
|
||||
}
|
||||
}
|
||||
|
||||
displayroutes ( noresolve, extended );
|
||||
return EXIT_SUCCESS;
|
||||
} else {
|
||||
/* check verb */
|
||||
if (strcmp(*argv, "add")==0)
|
||||
if (strcmp( argv [1], "add")==0)
|
||||
what = RTACTION_ADD;
|
||||
else if (strcmp(*argv, "del")==0 || strcmp(*argv, "delete")==0)
|
||||
else if (strcmp( argv [1], "del")==0 || strcmp( argv [1], "delete")==0)
|
||||
what = RTACTION_DEL;
|
||||
else if (strcmp(*argv, "flush")==0)
|
||||
else if (strcmp( argv [1], "flush")==0)
|
||||
what = RTACTION_FLUSH;
|
||||
else
|
||||
show_usage();
|
||||
}
|
||||
|
||||
return INET_setroute(what, 0, ++argv);
|
||||
return INET_setroute(what, 0, argv+2 );
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user