Merge branch 'master' of git+ssh://busybox.net/var/lib/git/busybox
This commit is contained in:
commit
c386aa5dcd
@ -2709,27 +2709,6 @@ INSERT
|
||||
" or\n" \
|
||||
"$ nameif -c /etc/my_mactab_file\n" \
|
||||
|
||||
#define netstat_trivial_usage \
|
||||
"[-laentuwxr"IF_FEATURE_NETSTAT_WIDE("W")IF_FEATURE_NETSTAT_PRG("p")"]"
|
||||
#define netstat_full_usage "\n\n" \
|
||||
"Display networking information\n" \
|
||||
"\nOptions:" \
|
||||
"\n -l Display listening server sockets" \
|
||||
"\n -a Display all sockets (default: connected)" \
|
||||
"\n -e Display other/more information" \
|
||||
"\n -n Don't resolve names" \
|
||||
"\n -t Tcp sockets" \
|
||||
"\n -u Udp sockets" \
|
||||
"\n -w Raw sockets" \
|
||||
"\n -x Unix sockets" \
|
||||
"\n -r Display routing table" \
|
||||
IF_FEATURE_NETSTAT_WIDE( \
|
||||
"\n -W Display with no column truncation" \
|
||||
) \
|
||||
IF_FEATURE_NETSTAT_PRG( \
|
||||
"\n -p Display PID/Program name for sockets" \
|
||||
)
|
||||
|
||||
#define nmeter_trivial_usage \
|
||||
"format_string"
|
||||
#define nmeter_full_usage "\n\n" \
|
||||
|
@ -17,16 +17,37 @@
|
||||
#include "libbb.h"
|
||||
#include "inet_common.h"
|
||||
|
||||
//usage:#define netstat_trivial_usage
|
||||
//usage: "[-"IF_ROUTE("r")"al] [-tuwx] [-en"IF_FEATURE_NETSTAT_WIDE("W")IF_FEATURE_NETSTAT_PRG("p")"]"
|
||||
//usage:#define netstat_full_usage "\n\n"
|
||||
//usage: "Display networking information\n"
|
||||
//usage: "\nOptions:"
|
||||
//usage: IF_ROUTE(
|
||||
//usage: "\n -r Routing table"
|
||||
//usage: )
|
||||
//usage: "\n -a All sockets"
|
||||
//usage: "\n -l Listening sockets"
|
||||
//usage: "\n Else: connected sockets"
|
||||
//usage: "\n -t TCP sockets"
|
||||
//usage: "\n -u UDP sockets"
|
||||
//usage: "\n -w Raw sockets"
|
||||
//usage: "\n -x Unix sockets"
|
||||
//usage: "\n Else: all socket types"
|
||||
//usage: "\n -e Other/more information"
|
||||
//usage: "\n -n Don't resolve names"
|
||||
//usage: IF_FEATURE_NETSTAT_WIDE(
|
||||
//usage: "\n -W Wide display"
|
||||
//usage: )
|
||||
//usage: IF_FEATURE_NETSTAT_PRG(
|
||||
//usage: "\n -p Show PID/program name for sockets"
|
||||
//usage: )
|
||||
|
||||
#define NETSTAT_OPTS "laentuwx" \
|
||||
IF_ROUTE( "r") \
|
||||
IF_FEATURE_NETSTAT_WIDE("W") \
|
||||
IF_FEATURE_NETSTAT_PRG( "p")
|
||||
|
||||
enum {
|
||||
OPTBIT_KEEP_OLD = 7,
|
||||
IF_ROUTE( OPTBIT_ROUTE,)
|
||||
IF_FEATURE_NETSTAT_WIDE(OPTBIT_WIDE ,)
|
||||
IF_FEATURE_NETSTAT_PRG( OPTBIT_PRG ,)
|
||||
OPT_sock_listen = 1 << 0, // l
|
||||
OPT_sock_all = 1 << 1, // a
|
||||
OPT_extended = 1 << 2, // e
|
||||
@ -35,6 +56,10 @@ enum {
|
||||
OPT_sock_udp = 1 << 5, // u
|
||||
OPT_sock_raw = 1 << 6, // w
|
||||
OPT_sock_unix = 1 << 7, // x
|
||||
OPTBIT_x = 7,
|
||||
IF_ROUTE( OPTBIT_ROUTE,)
|
||||
IF_FEATURE_NETSTAT_WIDE(OPTBIT_WIDE ,)
|
||||
IF_FEATURE_NETSTAT_PRG( OPTBIT_PRG ,)
|
||||
OPT_route = IF_ROUTE( (1 << OPTBIT_ROUTE)) + 0, // r
|
||||
OPT_wide = IF_FEATURE_NETSTAT_WIDE((1 << OPTBIT_WIDE )) + 0, // W
|
||||
OPT_prg = IF_FEATURE_NETSTAT_PRG( (1 << OPTBIT_PRG )) + 0, // p
|
||||
@ -220,7 +245,7 @@ static long extract_socket_inode(const char *lname)
|
||||
|
||||
static int FAST_FUNC file_act(const char *fileName,
|
||||
struct stat *statbuf UNUSED_PARAM,
|
||||
void *userData,
|
||||
void *pid_slash_progname,
|
||||
int depth UNUSED_PARAM)
|
||||
{
|
||||
char *linkname;
|
||||
@ -231,7 +256,7 @@ static int FAST_FUNC file_act(const char *fileName,
|
||||
inode = extract_socket_inode(linkname);
|
||||
free(linkname);
|
||||
if (inode >= 0)
|
||||
prg_cache_add(inode, (char *)userData);
|
||||
prg_cache_add(inode, (char *)pid_slash_progname);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@ -241,16 +266,16 @@ static int FAST_FUNC dir_act(const char *fileName,
|
||||
void *userData UNUSED_PARAM,
|
||||
int depth)
|
||||
{
|
||||
const char *shortName;
|
||||
char *p, *q;
|
||||
const char *pid;
|
||||
char *p, *pid_slash_progname;
|
||||
char cmdline_buf[512];
|
||||
int i;
|
||||
|
||||
if (depth == 0) /* "/proc" itself */
|
||||
return TRUE; /* continue looking one level below /proc */
|
||||
|
||||
shortName = fileName + sizeof("/proc/")-1; /* point after "/proc/" */
|
||||
if (!isdigit(shortName[0])) /* skip /proc entries whic aren't processes */
|
||||
pid = fileName + sizeof("/proc/")-1; /* point after "/proc/" */
|
||||
if (!isdigit(pid[0])) /* skip /proc entries which aren't processes */
|
||||
return SKIP;
|
||||
|
||||
p = concat_path_file(fileName, "cmdline"); /* "/proc/PID/cmdline" */
|
||||
@ -259,20 +284,19 @@ static int FAST_FUNC dir_act(const char *fileName,
|
||||
if (i < 0)
|
||||
return FALSE;
|
||||
cmdline_buf[i] = '\0';
|
||||
q = concat_path_file(shortName, bb_basename(cmdline_buf)); /* "PID/argv0" */
|
||||
|
||||
/* go through all files in /proc/PID/fd */
|
||||
pid_slash_progname = concat_path_file(pid, bb_basename(cmdline_buf)); /* "PID/argv0" */
|
||||
p = concat_path_file(fileName, "fd");
|
||||
i = recursive_action(p, ACTION_RECURSE | ACTION_QUIET,
|
||||
file_act, NULL, (void *)q, 0);
|
||||
|
||||
file_act, NULL, (void *)pid_slash_progname, 0);
|
||||
free(p);
|
||||
free(q);
|
||||
free(pid_slash_progname);
|
||||
|
||||
if (!i)
|
||||
return FALSE; /* signal permissions error to caller */
|
||||
return FALSE; /* signal permissions error to caller */
|
||||
|
||||
return SKIP; /* caller should not recurse further into this dir. */
|
||||
return SKIP; /* caller should not recurse further into this dir */
|
||||
}
|
||||
|
||||
static void prg_cache_load(void)
|
||||
@ -624,25 +648,23 @@ int netstat_main(int argc UNUSED_PARAM, char **argv)
|
||||
|
||||
/* Option string must match NETSTAT_xxx constants */
|
||||
opt = getopt32(argv, NETSTAT_OPTS);
|
||||
if (opt & 0x1) { // -l
|
||||
if (opt & OPT_sock_listen) { // -l
|
||||
flags &= ~NETSTAT_CONNECTED;
|
||||
flags |= NETSTAT_LISTENING;
|
||||
}
|
||||
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_route) { // -r
|
||||
if (opt & OPT_sock_all) flags |= NETSTAT_LISTENING | NETSTAT_CONNECTED; // -a
|
||||
//if (opt & OPT_extended) // -e
|
||||
if (opt & OPT_noresolve) flags |= NETSTAT_NUMERIC; // -n
|
||||
//if (opt & OPT_sock_tcp) // -t: NETSTAT_TCP
|
||||
//if (opt & OPT_sock_udp) // -u: NETSTAT_UDP
|
||||
//if (opt & OPT_sock_raw) // -w: NETSTAT_RAW
|
||||
//if (opt & OPT_sock_unix) // -x: NETSTAT_UNIX
|
||||
#if ENABLE_ROUTE
|
||||
if (opt & OPT_route) { // -r
|
||||
bb_displayroutes(flags & NETSTAT_NUMERIC, !(opt & OPT_extended));
|
||||
return 0;
|
||||
#else
|
||||
bb_show_usage();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
if (opt & OPT_wide) { // -W
|
||||
net_conn_line = PRINT_NET_CONN_WIDE;
|
||||
net_conn_line_header = PRINT_NET_CONN_HEADER_WIDE;
|
||||
|
@ -649,8 +649,9 @@ static void reset_term(void)
|
||||
static void sig_catcher(int sig UNUSED_PARAM)
|
||||
{
|
||||
reset_term();
|
||||
exit(EXIT_FAILURE);
|
||||
_exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
#endif /* FEATURE_USE_TERMIOS */
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user