diff options
author | Robert Griebl <griebl@gmx.de> | 2002-05-14 23:03:23 +0000 |
---|---|---|
committer | Robert Griebl <griebl@gmx.de> | 2002-05-14 23:03:23 +0000 |
commit | 820098fd61e9c2ed7836fd61b2824d2fb4b22861 (patch) | |
tree | abd7c6779d72d816a3c309fb2b70dbf5f598f1f0 | |
parent | aa385d40156d909ef51be4d52fa90b5c24081a88 (diff) | |
download | busybox-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.c | 23 | ||||
-rw-r--r-- | networking/route.c | 70 |
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 | ||
37 | extern 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 | ||
345 | static void displayroutes(int noresolve) | 345 | void 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 | ||
418 | int route_main(int argc, char **argv) | 429 | int 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 | } |