netstat: getopt_ulflags'isation

This commit is contained in:
Denis Vlasenko 2006-09-22 16:02:40 +00:00
parent 01e88f0339
commit 754a88f7aa

View File

@ -21,13 +21,14 @@ extern void displayroutes(int noresolve, int netstatfmt);
#define NETSTAT_CONNECTED 0x01
#define NETSTAT_LISTENING 0x02
#define NETSTAT_NUMERIC 0x04
/* Must match getopt_ulflags option string */
#define NETSTAT_TCP 0x10
#define NETSTAT_UDP 0x20
#define NETSTAT_RAW 0x40
#define NETSTAT_UNIX 0x80
#define NETSTAT_ALLPROTO (NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW|NETSTAT_UNIX)
static int flags = NETSTAT_CONNECTED |
NETSTAT_TCP | NETSTAT_UDP | NETSTAT_RAW | NETSTAT_UNIX;
static int flags = NETSTAT_CONNECTED | NETSTAT_ALLPROTO;
#define PROGNAME_WIDTHs PROGNAME_WIDTH1(PROGNAME_WIDTH)
#define PROGNAME_WIDTH1(s) PROGNAME_WIDTH2(s)
@ -165,7 +166,7 @@ static void tcp_do_one(int lnr, const char *line)
}
if (num < 10) {
bb_error_msg("warning, got bogus tcp line.");
bb_error_msg("warning, got bogus tcp line");
return;
}
state_str = tcp_state[state];
@ -236,7 +237,7 @@ static void udp_do_one(int lnr, const char *line)
}
if (num < 10) {
bb_error_msg("warning, got bogus udp line.");
bb_error_msg("warning, got bogus udp line");
return;
}
switch (state) {
@ -330,7 +331,7 @@ static void raw_do_one(int lnr, const char *line)
}
if (num < 10) {
bb_error_msg("warning, got bogus raw line.");
bb_error_msg("warning, got bogus raw line");
return;
}
state_str=itoa(state);
@ -383,7 +384,7 @@ static void unix_do_one(int nr, const char *line)
num = sscanf(line, "%p: %lX %lX %lX %X %X %d %s",
&d, &refcnt, &proto, &unix_flags, &type, &state, &inode, path);
if (num < 6) {
bb_error_msg("warning, got bogus unix line.");
bb_error_msg("warning, got bogus unix line");
return;
}
if (!(has & HAS_INODE))
@ -504,7 +505,7 @@ static void do_info(const char *file, const char *name, void (*proc)(int, const
if (errno != ENOENT) {
perror(file);
} else {
bb_error_msg("no support for `%s' on this system.", name);
bb_error_msg("no support for `%s' on this system", name);
}
} else {
do {
@ -521,69 +522,53 @@ static void do_info(const char *file, const char *name, void (*proc)(int, const
int netstat_main(int argc, char **argv)
{
int opt;
int new_flags=0;
int showroute = 0, extended = 0;
enum {
OPT_extended = 0x4,
OPT_showroute = 0x100,
};
unsigned long opt;
#ifdef CONFIG_FEATURE_IPV6
int inet=1;
int inet6=1;
int inet = 1;
int inet6 = 1;
#else
# define inet 1
# define inet6 0
#endif
while ((opt = getopt(argc, argv, "laenrtuwx")) != -1)
switch (opt) {
case 'l':
/* Option string must match NETSTAT_xxx constants */
opt = bb_getopt_ulflags(argc, argv, "laentuwxr");
if (opt & 0x1) { // -l
flags &= ~NETSTAT_CONNECTED;
flags |= NETSTAT_LISTENING;
break;
case 'a':
flags |= NETSTAT_LISTENING | NETSTAT_CONNECTED;
break;
case 'n':
flags |= NETSTAT_NUMERIC;
break;
case 'r':
showroute = 1;
break;
case 'e':
extended = 1;
break;
case 't':
new_flags |= NETSTAT_TCP;
break;
case 'u':
new_flags |= NETSTAT_UDP;
break;
case 'w':
new_flags |= NETSTAT_RAW;
break;
case 'x':
new_flags |= NETSTAT_UNIX;
break;
default:
bb_show_usage();
}
if ( showroute ) {
if (opt & 0x2) flags |= NETSTAT_LISTENING | NETSTAT_CONNECTED; // -a
//if (opt & 0x4) // -e
if (opt & 0x8) flags |= NETSTAT_NUMERIC; // -n
//if (opt & 0x10) // -t: NETSTAT_TCP
//if (opt & 0x20) // -u: NETSTAT_UDP
//if (opt & 0x40) // -w: NETSTAT_RAW
//if (opt & 0x80) // -x: NETSTAT_UNIX
if (opt & OPT_showroute) { // -r
#ifdef CONFIG_ROUTE
displayroutes ( flags & NETSTAT_NUMERIC, !extended );
displayroutes(flags & NETSTAT_NUMERIC, !(opt & OPT_extended));
return 0;
#else
bb_error_msg_and_die( "-r (display routing table) is not compiled in." );
bb_error_msg_and_die("-r (display routing table) is not compiled in");
#endif
}
if (new_flags) {
flags &= ~(NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW|NETSTAT_UNIX);
flags |= new_flags;
opt &= NETSTAT_ALLPROTO;
if (opt) {
flags &= ~NETSTAT_ALLPROTO;
flags |= opt;
}
if (flags&(NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW)) {
if (flags & (NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW)) {
printf("Active Internet connections "); /* xxx */
if ((flags&(NETSTAT_LISTENING|NETSTAT_CONNECTED))==(NETSTAT_LISTENING|NETSTAT_CONNECTED))
printf("(servers and established)");
else {
if (flags&NETSTAT_LISTENING)
if (flags & NETSTAT_LISTENING)
printf("(only servers)");
else
printf("(w/o servers)");