diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-22 16:02:40 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-22 16:02:40 +0000 |
commit | 754a88f7aa3de5979a6093c1e6c631b1e572d9c0 (patch) | |
tree | e73f6fb6ea1e7438e8f4fb8e1d020f88f5313e9b | |
parent | 01e88f033926c9b316e9667f088733feb2565c6d (diff) | |
download | busybox-w32-754a88f7aa3de5979a6093c1e6c631b1e572d9c0.tar.gz busybox-w32-754a88f7aa3de5979a6093c1e6c631b1e572d9c0.tar.bz2 busybox-w32-754a88f7aa3de5979a6093c1e6c631b1e572d9c0.zip |
netstat: getopt_ulflags'isation
-rw-r--r-- | networking/netstat.c | 107 |
1 files changed, 46 insertions, 61 deletions
diff --git a/networking/netstat.c b/networking/netstat.c index 6d91bb3f4..cadcb0e31 100644 --- a/networking/netstat.c +++ b/networking/netstat.c | |||
@@ -18,16 +18,17 @@ | |||
18 | extern void displayroutes(int noresolve, int netstatfmt); | 18 | extern void displayroutes(int noresolve, int netstatfmt); |
19 | #endif | 19 | #endif |
20 | 20 | ||
21 | #define NETSTAT_CONNECTED 0x01 | 21 | #define NETSTAT_CONNECTED 0x01 |
22 | #define NETSTAT_LISTENING 0x02 | 22 | #define NETSTAT_LISTENING 0x02 |
23 | #define NETSTAT_NUMERIC 0x04 | 23 | #define NETSTAT_NUMERIC 0x04 |
24 | #define NETSTAT_TCP 0x10 | 24 | /* Must match getopt_ulflags option string */ |
25 | #define NETSTAT_UDP 0x20 | 25 | #define NETSTAT_TCP 0x10 |
26 | #define NETSTAT_RAW 0x40 | 26 | #define NETSTAT_UDP 0x20 |
27 | #define NETSTAT_UNIX 0x80 | 27 | #define NETSTAT_RAW 0x40 |
28 | 28 | #define NETSTAT_UNIX 0x80 | |
29 | static int flags = NETSTAT_CONNECTED | | 29 | #define NETSTAT_ALLPROTO (NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW|NETSTAT_UNIX) |
30 | NETSTAT_TCP | NETSTAT_UDP | NETSTAT_RAW | NETSTAT_UNIX; | 30 | |
31 | static int flags = NETSTAT_CONNECTED | NETSTAT_ALLPROTO; | ||
31 | 32 | ||
32 | #define PROGNAME_WIDTHs PROGNAME_WIDTH1(PROGNAME_WIDTH) | 33 | #define PROGNAME_WIDTHs PROGNAME_WIDTH1(PROGNAME_WIDTH) |
33 | #define PROGNAME_WIDTH1(s) PROGNAME_WIDTH2(s) | 34 | #define PROGNAME_WIDTH1(s) PROGNAME_WIDTH2(s) |
@@ -165,7 +166,7 @@ static void tcp_do_one(int lnr, const char *line) | |||
165 | } | 166 | } |
166 | 167 | ||
167 | if (num < 10) { | 168 | if (num < 10) { |
168 | bb_error_msg("warning, got bogus tcp line."); | 169 | bb_error_msg("warning, got bogus tcp line"); |
169 | return; | 170 | return; |
170 | } | 171 | } |
171 | state_str = tcp_state[state]; | 172 | state_str = tcp_state[state]; |
@@ -236,7 +237,7 @@ static void udp_do_one(int lnr, const char *line) | |||
236 | } | 237 | } |
237 | 238 | ||
238 | if (num < 10) { | 239 | if (num < 10) { |
239 | bb_error_msg("warning, got bogus udp line."); | 240 | bb_error_msg("warning, got bogus udp line"); |
240 | return; | 241 | return; |
241 | } | 242 | } |
242 | switch (state) { | 243 | switch (state) { |
@@ -330,7 +331,7 @@ static void raw_do_one(int lnr, const char *line) | |||
330 | } | 331 | } |
331 | 332 | ||
332 | if (num < 10) { | 333 | if (num < 10) { |
333 | bb_error_msg("warning, got bogus raw line."); | 334 | bb_error_msg("warning, got bogus raw line"); |
334 | return; | 335 | return; |
335 | } | 336 | } |
336 | state_str=itoa(state); | 337 | state_str=itoa(state); |
@@ -383,7 +384,7 @@ static void unix_do_one(int nr, const char *line) | |||
383 | num = sscanf(line, "%p: %lX %lX %lX %X %X %d %s", | 384 | num = sscanf(line, "%p: %lX %lX %lX %X %X %d %s", |
384 | &d, &refcnt, &proto, &unix_flags, &type, &state, &inode, path); | 385 | &d, &refcnt, &proto, &unix_flags, &type, &state, &inode, path); |
385 | if (num < 6) { | 386 | if (num < 6) { |
386 | bb_error_msg("warning, got bogus unix line."); | 387 | bb_error_msg("warning, got bogus unix line"); |
387 | return; | 388 | return; |
388 | } | 389 | } |
389 | if (!(has & HAS_INODE)) | 390 | if (!(has & HAS_INODE)) |
@@ -504,7 +505,7 @@ static void do_info(const char *file, const char *name, void (*proc)(int, const | |||
504 | if (errno != ENOENT) { | 505 | if (errno != ENOENT) { |
505 | perror(file); | 506 | perror(file); |
506 | } else { | 507 | } else { |
507 | bb_error_msg("no support for `%s' on this system.", name); | 508 | bb_error_msg("no support for `%s' on this system", name); |
508 | } | 509 | } |
509 | } else { | 510 | } else { |
510 | do { | 511 | do { |
@@ -521,69 +522,53 @@ static void do_info(const char *file, const char *name, void (*proc)(int, const | |||
521 | 522 | ||
522 | int netstat_main(int argc, char **argv) | 523 | int netstat_main(int argc, char **argv) |
523 | { | 524 | { |
524 | int opt; | 525 | enum { |
525 | int new_flags=0; | 526 | OPT_extended = 0x4, |
526 | int showroute = 0, extended = 0; | 527 | OPT_showroute = 0x100, |
528 | }; | ||
529 | unsigned long opt; | ||
527 | #ifdef CONFIG_FEATURE_IPV6 | 530 | #ifdef CONFIG_FEATURE_IPV6 |
528 | int inet=1; | 531 | int inet = 1; |
529 | int inet6=1; | 532 | int inet6 = 1; |
530 | #else | 533 | #else |
531 | # define inet 1 | 534 | # define inet 1 |
532 | # define inet6 0 | 535 | # define inet6 0 |
533 | #endif | 536 | #endif |
534 | while ((opt = getopt(argc, argv, "laenrtuwx")) != -1) | 537 | |
535 | switch (opt) { | 538 | /* Option string must match NETSTAT_xxx constants */ |
536 | case 'l': | 539 | opt = bb_getopt_ulflags(argc, argv, "laentuwxr"); |
537 | flags &= ~NETSTAT_CONNECTED; | 540 | if (opt & 0x1) { // -l |
538 | flags |= NETSTAT_LISTENING; | 541 | flags &= ~NETSTAT_CONNECTED; |
539 | break; | 542 | flags |= NETSTAT_LISTENING; |
540 | case 'a': | 543 | } |
541 | flags |= NETSTAT_LISTENING | NETSTAT_CONNECTED; | 544 | if (opt & 0x2) flags |= NETSTAT_LISTENING | NETSTAT_CONNECTED; // -a |
542 | break; | 545 | //if (opt & 0x4) // -e |
543 | case 'n': | 546 | if (opt & 0x8) flags |= NETSTAT_NUMERIC; // -n |
544 | flags |= NETSTAT_NUMERIC; | 547 | //if (opt & 0x10) // -t: NETSTAT_TCP |
545 | break; | 548 | //if (opt & 0x20) // -u: NETSTAT_UDP |
546 | case 'r': | 549 | //if (opt & 0x40) // -w: NETSTAT_RAW |
547 | showroute = 1; | 550 | //if (opt & 0x80) // -x: NETSTAT_UNIX |
548 | break; | 551 | if (opt & OPT_showroute) { // -r |
549 | case 'e': | ||
550 | extended = 1; | ||
551 | break; | ||
552 | case 't': | ||
553 | new_flags |= NETSTAT_TCP; | ||
554 | break; | ||
555 | case 'u': | ||
556 | new_flags |= NETSTAT_UDP; | ||
557 | break; | ||
558 | case 'w': | ||
559 | new_flags |= NETSTAT_RAW; | ||
560 | break; | ||
561 | case 'x': | ||
562 | new_flags |= NETSTAT_UNIX; | ||
563 | break; | ||
564 | default: | ||
565 | bb_show_usage(); | ||
566 | } | ||
567 | if ( showroute ) { | ||
568 | #ifdef CONFIG_ROUTE | 552 | #ifdef CONFIG_ROUTE |
569 | displayroutes ( flags & NETSTAT_NUMERIC, !extended ); | 553 | displayroutes(flags & NETSTAT_NUMERIC, !(opt & OPT_extended)); |
570 | return 0; | 554 | return 0; |
571 | #else | 555 | #else |
572 | bb_error_msg_and_die( "-r (display routing table) is not compiled in." ); | 556 | bb_error_msg_and_die("-r (display routing table) is not compiled in"); |
573 | #endif | 557 | #endif |
574 | } | 558 | } |
575 | 559 | ||
576 | if (new_flags) { | 560 | opt &= NETSTAT_ALLPROTO; |
577 | flags &= ~(NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW|NETSTAT_UNIX); | 561 | if (opt) { |
578 | flags |= new_flags; | 562 | flags &= ~NETSTAT_ALLPROTO; |
563 | flags |= opt; | ||
579 | } | 564 | } |
580 | if (flags&(NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW)) { | 565 | if (flags & (NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW)) { |
581 | printf("Active Internet connections "); /* xxx */ | 566 | printf("Active Internet connections "); /* xxx */ |
582 | 567 | ||
583 | if ((flags&(NETSTAT_LISTENING|NETSTAT_CONNECTED))==(NETSTAT_LISTENING|NETSTAT_CONNECTED)) | 568 | if ((flags&(NETSTAT_LISTENING|NETSTAT_CONNECTED))==(NETSTAT_LISTENING|NETSTAT_CONNECTED)) |
584 | printf("(servers and established)"); | 569 | printf("(servers and established)"); |
585 | else { | 570 | else { |
586 | if (flags&NETSTAT_LISTENING) | 571 | if (flags & NETSTAT_LISTENING) |
587 | printf("(only servers)"); | 572 | printf("(only servers)"); |
588 | else | 573 | else |
589 | printf("(w/o servers)"); | 574 | printf("(w/o servers)"); |