aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2006-09-22 16:02:40 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2006-09-22 16:02:40 +0000
commit754a88f7aa3de5979a6093c1e6c631b1e572d9c0 (patch)
treee73f6fb6ea1e7438e8f4fb8e1d020f88f5313e9b
parent01e88f033926c9b316e9667f088733feb2565c6d (diff)
downloadbusybox-w32-754a88f7aa3de5979a6093c1e6c631b1e572d9c0.tar.gz
busybox-w32-754a88f7aa3de5979a6093c1e6c631b1e572d9c0.tar.bz2
busybox-w32-754a88f7aa3de5979a6093c1e6c631b1e572d9c0.zip
netstat: getopt_ulflags'isation
-rw-r--r--networking/netstat.c107
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 @@
18extern void displayroutes(int noresolve, int netstatfmt); 18extern 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
29static 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
31static 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
522int netstat_main(int argc, char **argv) 523int 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)");