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" \
|
" or\n" \
|
||||||
"$ nameif -c /etc/my_mactab_file\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 \
|
#define nmeter_trivial_usage \
|
||||||
"format_string"
|
"format_string"
|
||||||
#define nmeter_full_usage "\n\n" \
|
#define nmeter_full_usage "\n\n" \
|
||||||
|
@ -17,16 +17,37 @@
|
|||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
#include "inet_common.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" \
|
#define NETSTAT_OPTS "laentuwx" \
|
||||||
IF_ROUTE( "r") \
|
IF_ROUTE( "r") \
|
||||||
IF_FEATURE_NETSTAT_WIDE("W") \
|
IF_FEATURE_NETSTAT_WIDE("W") \
|
||||||
IF_FEATURE_NETSTAT_PRG( "p")
|
IF_FEATURE_NETSTAT_PRG( "p")
|
||||||
|
|
||||||
enum {
|
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_listen = 1 << 0, // l
|
||||||
OPT_sock_all = 1 << 1, // a
|
OPT_sock_all = 1 << 1, // a
|
||||||
OPT_extended = 1 << 2, // e
|
OPT_extended = 1 << 2, // e
|
||||||
@ -35,6 +56,10 @@ enum {
|
|||||||
OPT_sock_udp = 1 << 5, // u
|
OPT_sock_udp = 1 << 5, // u
|
||||||
OPT_sock_raw = 1 << 6, // w
|
OPT_sock_raw = 1 << 6, // w
|
||||||
OPT_sock_unix = 1 << 7, // x
|
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_route = IF_ROUTE( (1 << OPTBIT_ROUTE)) + 0, // r
|
||||||
OPT_wide = IF_FEATURE_NETSTAT_WIDE((1 << OPTBIT_WIDE )) + 0, // W
|
OPT_wide = IF_FEATURE_NETSTAT_WIDE((1 << OPTBIT_WIDE )) + 0, // W
|
||||||
OPT_prg = IF_FEATURE_NETSTAT_PRG( (1 << OPTBIT_PRG )) + 0, // p
|
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,
|
static int FAST_FUNC file_act(const char *fileName,
|
||||||
struct stat *statbuf UNUSED_PARAM,
|
struct stat *statbuf UNUSED_PARAM,
|
||||||
void *userData,
|
void *pid_slash_progname,
|
||||||
int depth UNUSED_PARAM)
|
int depth UNUSED_PARAM)
|
||||||
{
|
{
|
||||||
char *linkname;
|
char *linkname;
|
||||||
@ -231,7 +256,7 @@ static int FAST_FUNC file_act(const char *fileName,
|
|||||||
inode = extract_socket_inode(linkname);
|
inode = extract_socket_inode(linkname);
|
||||||
free(linkname);
|
free(linkname);
|
||||||
if (inode >= 0)
|
if (inode >= 0)
|
||||||
prg_cache_add(inode, (char *)userData);
|
prg_cache_add(inode, (char *)pid_slash_progname);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -241,16 +266,16 @@ static int FAST_FUNC dir_act(const char *fileName,
|
|||||||
void *userData UNUSED_PARAM,
|
void *userData UNUSED_PARAM,
|
||||||
int depth)
|
int depth)
|
||||||
{
|
{
|
||||||
const char *shortName;
|
const char *pid;
|
||||||
char *p, *q;
|
char *p, *pid_slash_progname;
|
||||||
char cmdline_buf[512];
|
char cmdline_buf[512];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (depth == 0) /* "/proc" itself */
|
if (depth == 0) /* "/proc" itself */
|
||||||
return TRUE; /* continue looking one level below /proc */
|
return TRUE; /* continue looking one level below /proc */
|
||||||
|
|
||||||
shortName = fileName + sizeof("/proc/")-1; /* point after "/proc/" */
|
pid = fileName + sizeof("/proc/")-1; /* point after "/proc/" */
|
||||||
if (!isdigit(shortName[0])) /* skip /proc entries whic aren't processes */
|
if (!isdigit(pid[0])) /* skip /proc entries which aren't processes */
|
||||||
return SKIP;
|
return SKIP;
|
||||||
|
|
||||||
p = concat_path_file(fileName, "cmdline"); /* "/proc/PID/cmdline" */
|
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)
|
if (i < 0)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
cmdline_buf[i] = '\0';
|
cmdline_buf[i] = '\0';
|
||||||
q = concat_path_file(shortName, bb_basename(cmdline_buf)); /* "PID/argv0" */
|
|
||||||
|
|
||||||
/* go through all files in /proc/PID/fd */
|
/* 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");
|
p = concat_path_file(fileName, "fd");
|
||||||
i = recursive_action(p, ACTION_RECURSE | ACTION_QUIET,
|
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(p);
|
||||||
free(q);
|
free(pid_slash_progname);
|
||||||
|
|
||||||
if (!i)
|
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)
|
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 */
|
/* Option string must match NETSTAT_xxx constants */
|
||||||
opt = getopt32(argv, NETSTAT_OPTS);
|
opt = getopt32(argv, NETSTAT_OPTS);
|
||||||
if (opt & 0x1) { // -l
|
if (opt & OPT_sock_listen) { // -l
|
||||||
flags &= ~NETSTAT_CONNECTED;
|
flags &= ~NETSTAT_CONNECTED;
|
||||||
flags |= NETSTAT_LISTENING;
|
flags |= NETSTAT_LISTENING;
|
||||||
}
|
}
|
||||||
if (opt & 0x2) flags |= NETSTAT_LISTENING | NETSTAT_CONNECTED; // -a
|
if (opt & OPT_sock_all) flags |= NETSTAT_LISTENING | NETSTAT_CONNECTED; // -a
|
||||||
//if (opt & 0x4) // -e
|
//if (opt & OPT_extended) // -e
|
||||||
if (opt & 0x8) flags |= NETSTAT_NUMERIC; // -n
|
if (opt & OPT_noresolve) flags |= NETSTAT_NUMERIC; // -n
|
||||||
//if (opt & 0x10) // -t: NETSTAT_TCP
|
//if (opt & OPT_sock_tcp) // -t: NETSTAT_TCP
|
||||||
//if (opt & 0x20) // -u: NETSTAT_UDP
|
//if (opt & OPT_sock_udp) // -u: NETSTAT_UDP
|
||||||
//if (opt & 0x40) // -w: NETSTAT_RAW
|
//if (opt & OPT_sock_raw) // -w: NETSTAT_RAW
|
||||||
//if (opt & 0x80) // -x: NETSTAT_UNIX
|
//if (opt & OPT_sock_unix) // -x: NETSTAT_UNIX
|
||||||
if (opt & OPT_route) { // -r
|
|
||||||
#if ENABLE_ROUTE
|
#if ENABLE_ROUTE
|
||||||
|
if (opt & OPT_route) { // -r
|
||||||
bb_displayroutes(flags & NETSTAT_NUMERIC, !(opt & OPT_extended));
|
bb_displayroutes(flags & NETSTAT_NUMERIC, !(opt & OPT_extended));
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
|
||||||
bb_show_usage();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (opt & OPT_wide) { // -W
|
if (opt & OPT_wide) { // -W
|
||||||
net_conn_line = PRINT_NET_CONN_WIDE;
|
net_conn_line = PRINT_NET_CONN_WIDE;
|
||||||
net_conn_line_header = PRINT_NET_CONN_HEADER_WIDE;
|
net_conn_line_header = PRINT_NET_CONN_HEADER_WIDE;
|
||||||
|
@ -689,8 +689,8 @@ static void show_timerstats(void)
|
|||||||
// no ACPI power usage estimate available
|
// no ACPI power usage estimate available
|
||||||
//
|
//
|
||||||
// Top causes for wakeups:
|
// Top causes for wakeups:
|
||||||
// 32.4% ( 26.7) <interrupt> : extra timer interrupt
|
// 32.4% ( 26.7) <interrupt> : extra timer interrupt
|
||||||
// 29.0% ( 23.9) <kernel core> : hrtimer_start_range_ns (tick_sched_timer)
|
// 29.0% ( 23.9) <kernel core> : hrtimer_start_range_ns (tick_sched_timer)
|
||||||
// 9.0% ( 7.5) <kernel core> : hrtimer_start (tick_sched_timer)
|
// 9.0% ( 7.5) <kernel core> : hrtimer_start (tick_sched_timer)
|
||||||
// 6.5% ( 5.3) <interrupt> : ata_piix
|
// 6.5% ( 5.3) <interrupt> : ata_piix
|
||||||
// 5.0% ( 4.1) inetd : hrtimer_start_range_ns (hrtimer_wakeup)
|
// 5.0% ( 4.1) inetd : hrtimer_start_range_ns (hrtimer_wakeup)
|
||||||
|
@ -649,8 +649,9 @@ static void reset_term(void)
|
|||||||
static void sig_catcher(int sig UNUSED_PARAM)
|
static void sig_catcher(int sig UNUSED_PARAM)
|
||||||
{
|
{
|
||||||
reset_term();
|
reset_term();
|
||||||
exit(EXIT_FAILURE);
|
_exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* FEATURE_USE_TERMIOS */
|
#endif /* FEATURE_USE_TERMIOS */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user