Merge branch 'master' of git+ssh://busybox.net/var/lib/git/busybox

This commit is contained in:
Denys Vlasenko 2010-10-27 11:24:40 +02:00
commit c386aa5dcd
4 changed files with 54 additions and 52 deletions

View File

@ -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" \

View File

@ -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;

View File

@ -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)

View File

@ -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 */
/* /*