aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griebl <griebl@gmx.de>2002-05-14 23:03:23 +0000
committerRobert Griebl <griebl@gmx.de>2002-05-14 23:03:23 +0000
commit820098fd61e9c2ed7836fd61b2824d2fb4b22861 (patch)
treeabd7c6779d72d816a3c309fb2b70dbf5f598f1f0
parentaa385d40156d909ef51be4d52fa90b5c24081a88 (diff)
downloadbusybox-w32-820098fd61e9c2ed7836fd61b2824d2fb4b22861.tar.gz
busybox-w32-820098fd61e9c2ed7836fd61b2824d2fb4b22861.tar.bz2
busybox-w32-820098fd61e9c2ed7836fd61b2824d2fb4b22861.zip
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.
-rw-r--r--networking/netstat.c23
-rw-r--r--networking/route.c70
2 files changed, 70 insertions, 23 deletions
diff --git a/networking/netstat.c b/networking/netstat.c
index 28ae9bc32..b083b0dd4 100644
--- a/networking/netstat.c
+++ b/networking/netstat.c
@@ -33,6 +33,10 @@
33#include "inet_common.h" 33#include "inet_common.h"
34#include "busybox.h" 34#include "busybox.h"
35 35
36#ifdef CONFIG_ROUTE
37extern void displayroutes(int noresolve, int netstatfmt);
38#endif
39
36#define NETSTAT_CONNECTED 0x01 40#define NETSTAT_CONNECTED 0x01
37#define NETSTAT_LISTENING 0x02 41#define NETSTAT_LISTENING 0x02
38#define NETSTAT_NUMERIC 0x04 42#define NETSTAT_NUMERIC 0x04
@@ -462,7 +466,8 @@ int netstat_main(int argc, char **argv)
462{ 466{
463 int opt; 467 int opt;
464 int new_flags=0; 468 int new_flags=0;
465 while ((opt = getopt(argc, argv, "lantuwx")) != -1) 469 int showroute = 0, extended = 0;
470 while ((opt = getopt(argc, argv, "laenrtuwx")) != -1)
466 switch (opt) { 471 switch (opt) {
467 case 'l': 472 case 'l':
468 flags &= ~NETSTAT_CONNECTED; 473 flags &= ~NETSTAT_CONNECTED;
@@ -474,6 +479,12 @@ int netstat_main(int argc, char **argv)
474 case 'n': 479 case 'n':
475 flags |= NETSTAT_NUMERIC; 480 flags |= NETSTAT_NUMERIC;
476 break; 481 break;
482 case 'r':
483 showroute = 1;
484 break;
485 case 'e':
486 extended = 1;
487 break;
477 case 't': 488 case 't':
478 new_flags |= NETSTAT_TCP; 489 new_flags |= NETSTAT_TCP;
479 break; 490 break;
@@ -489,6 +500,16 @@ int netstat_main(int argc, char **argv)
489 default: 500 default:
490 show_usage(); 501 show_usage();
491 } 502 }
503 if ( showroute ) {
504#ifdef CONFIG_ROUTE
505 displayroutes ( flags & NETSTAT_NUMERIC, !extended );
506 return 0;
507#else
508 printf( "-r (display routing table) is not compiled in.\n" );
509 return 1;
510#endif
511 }
512
492 if (new_flags) { 513 if (new_flags) {
493 flags &= ~(NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW|NETSTAT_UNIX); 514 flags &= ~(NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW|NETSTAT_UNIX);
494 flags |= new_flags; 515 flags |= new_flags;
diff --git a/networking/route.c b/networking/route.c
index 43180296d..af630c68b 100644
--- a/networking/route.c
+++ b/networking/route.c
@@ -15,7 +15,7 @@
15 * Foundation; either version 2 of the License, or (at 15 * Foundation; either version 2 of the License, or (at
16 * your option) any later version. 16 * your option) any later version.
17 * 17 *
18 * $Id: route.c,v 1.14 2001/11/10 11:22:43 andersen Exp $ 18 * $Id: route.c,v 1.15 2002/05/14 23:03:23 sandman Exp $
19 * 19 *
20 * displayroute() code added by Vladimir N. Oleynik <dzo@simtreas.ru> 20 * displayroute() code added by Vladimir N. Oleynik <dzo@simtreas.ru>
21 * adjustments by Larry Doolittle <LRDoolittle@lbl.gov> 21 * adjustments by Larry Doolittle <LRDoolittle@lbl.gov>
@@ -342,14 +342,14 @@ INET_setroute(int action, int options, char **args)
342#define RTF_REJECT 0x0200 /* Reject route */ 342#define RTF_REJECT 0x0200 /* Reject route */
343#endif 343#endif
344 344
345static void displayroutes(int noresolve) 345void displayroutes(int noresolve, int netstatfmt)
346{ 346{
347 char buff[256]; 347 char buff[256];
348 int nl = 0 ; 348 int nl = 0 ;
349 struct in_addr dest; 349 struct in_addr dest;
350 struct in_addr gw; 350 struct in_addr gw;
351 struct in_addr mask; 351 struct in_addr mask;
352 int flgs, ref, use, metric; 352 int flgs, ref, use, metric, mtu, win, ir;
353 char flags[64]; 353 char flags[64];
354 unsigned long int d,g,m; 354 unsigned long int d,g,m;
355 355
@@ -369,14 +369,17 @@ static void displayroutes(int noresolve)
369 while(buff[ifl]!=' ' && buff[ifl]!='\t' && buff[ifl]!='\0') 369 while(buff[ifl]!=' ' && buff[ifl]!='\t' && buff[ifl]!='\0')
370 ifl++; 370 ifl++;
371 buff[ifl]=0; /* interface */ 371 buff[ifl]=0; /* interface */
372 if(sscanf(buff+ifl+1, "%lx%lx%X%d%d%d%lx", 372 if(sscanf(buff+ifl+1, "%lx%lx%X%d%d%d%lx%d%d%d",
373 &d, &g, &flgs, &ref, &use, &metric, &m)!=7) { 373 &d, &g, &flgs, &ref, &use, &metric, &m, &mtu, &win, &ir )!=10) {
374 error_msg_and_die( "Unsuported kernel route format\n"); 374 error_msg_and_die( "Unsuported kernel route format\n");
375 } 375 }
376 if(nl==1) 376 if(nl==1) {
377 printf("Kernel IP routing table\n" 377 printf("Kernel IP routing table\n");
378 "Destination Gateway Genmask Flags Metric Ref Use Iface\n"); 378 if ( netstatfmt )
379 379 printf("Destination Gateway Genmask Flags MSS Window irtt Iface\n");
380 else
381 printf("Destination Gateway Genmask Flags Metric Ref Use Iface\n");
382 }
380 ifl = 0; /* parse flags */ 383 ifl = 0; /* parse flags */
381 if(flgs&RTF_UP) { 384 if(flgs&RTF_UP) {
382 if(flgs&RTF_REJECT) 385 if(flgs&RTF_REJECT)
@@ -405,10 +408,18 @@ static void displayroutes(int noresolve)
405 numeric = noresolve | 0x4000; /* host instead of net */ 408 numeric = noresolve | 0x4000; /* host instead of net */
406 s_addr.sin_addr = gw; 409 s_addr.sin_addr = gw;
407 INET_rresolve(sgw, sizeof(sgw), &s_addr, numeric, m); 410 INET_rresolve(sgw, sizeof(sgw), &s_addr, numeric, m);
408 printf("%-16s%-16s%-16s%-6s%-6d %-2d %7d %s\n", 411 if ( netstatfmt ) {
409 sdest, sgw, 412 printf("%-16s%-16s%-16s%-6s%5d %-5d %6d %s\n",
410 inet_ntoa(mask), 413 sdest, sgw,
411 flags, metric, ref, use, buff); 414 inet_ntoa(mask),
415 flags, mtu, win, ir, buff);
416 }
417 else {
418 printf("%-16s%-16s%-16s%-6s%-6d %-2d %7d %s\n",
419 sdest, sgw,
420 inet_ntoa(mask),
421 flags, metric, ref, use, buff);
422 }
412 } 423 }
413 } 424 }
414 nl++; 425 nl++;
@@ -417,25 +428,40 @@ static void displayroutes(int noresolve)
417 428
418int route_main(int argc, char **argv) 429int route_main(int argc, char **argv)
419{ 430{
431 int opt;
420 int what = 0; 432 int what = 0;
421 433
422 argc--; 434 if ( !argv [1] || ( argv [1][0] == '-' )) {
423 argv++; 435 /* check options */
424 436 int noresolve = 0;
425 if (*argv == NULL || (*(argv+1)==NULL && strcmp(*argv, "-n")==0)) { 437 int extended = 0;
426 displayroutes(*argv != NULL); 438
439 while ((opt = getopt(argc, argv, "ne")) > 0) {
440 switch (opt) {
441 case 'n':
442 noresolve = 1;
443 break;
444 case 'e':
445 extended = 1;
446 break;
447 default:
448 show_usage ( );
449 }
450 }
451
452 displayroutes ( noresolve, extended );
427 return EXIT_SUCCESS; 453 return EXIT_SUCCESS;
428 } else { 454 } else {
429 /* check verb */ 455 /* check verb */
430 if (strcmp(*argv, "add")==0) 456 if (strcmp( argv [1], "add")==0)
431 what = RTACTION_ADD; 457 what = RTACTION_ADD;
432 else if (strcmp(*argv, "del")==0 || strcmp(*argv, "delete")==0) 458 else if (strcmp( argv [1], "del")==0 || strcmp( argv [1], "delete")==0)
433 what = RTACTION_DEL; 459 what = RTACTION_DEL;
434 else if (strcmp(*argv, "flush")==0) 460 else if (strcmp( argv [1], "flush")==0)
435 what = RTACTION_FLUSH; 461 what = RTACTION_FLUSH;
436 else 462 else
437 show_usage(); 463 show_usage();
438 } 464 }
439 465
440 return INET_setroute(what, 0, ++argv); 466 return INET_setroute(what, 0, argv+2 );
441} 467}