X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/f9edd6a329fba36e43a86037d4404d5f73375727..b939b00afdd2a5bbef84a415243c5b0fc7d50702:/cli.c diff --git a/cli.c b/cli.c index a5f067b..1149815 100644 --- a/cli.c +++ b/cli.c @@ -1,9 +1,6 @@ // L2TPNS Command Line Interface // vim: sw=8 ts=8 -char const *cvs_name = "$Name: $"; -char const *cvs_id_cli = "$Id: cli.c,v 1.73 2006-05-05 08:10:18 bodea Exp $"; - #include #include #include @@ -100,6 +97,9 @@ static int cmd_set(struct cli_def *cli, char *command, char **argv, int argc); static int cmd_load_plugin(struct cli_def *cli, char *command, char **argv, int argc); static int cmd_remove_plugin(struct cli_def *cli, char *command, char **argv, int argc); static int cmd_uptime(struct cli_def *cli, char *command, char **argv, int argc); +static int cmd_shutdown(struct cli_def *cli, char *command, char **argv, int argc); +static int cmd_reload(struct cli_def *cli, char *command, char **argv, int argc); + static int regular_stuff(struct cli_def *cli); @@ -176,6 +176,8 @@ void init_cli(char *hostname) #endif cli_register_command(cli, NULL, "uptime", cmd_uptime, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "Show uptime and bandwidth utilisation"); + cli_register_command(cli, NULL, "shutdown", cmd_shutdown, PRIVILEGE_PRIVILEGED, MODE_EXEC, "Shutdown l2tpns daemon and exit"); + cli_register_command(cli, NULL, "reload", cmd_reload, PRIVILEGE_PRIVILEGED, MODE_EXEC, "Reload configuration"); c = cli_register_command(cli, NULL, "write", NULL, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, NULL); cli_register_command(cli, c, "memory", cmd_write_memory, PRIVILEGE_PRIVILEGED, MODE_EXEC, "Save the running config to flash"); @@ -426,15 +428,19 @@ static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int cli_print(cli, "\tUnique SID:\t%u", session[s].unique_id); cli_print(cli, "\tOpened:\t\t%u seconds", session[s].opened ? abs(time_now - session[s].opened) : 0); cli_print(cli, "\tIdle time:\t%u seconds", session[s].last_packet ? abs(time_now - session[s].last_packet) : 0); - cli_print(cli, "\tBytes In/Out:\t%u/%u", session[s].cout, session[s].cin); - if (session[s].timeout) + if (session[s].session_timeout) { - cli_print(cli, "\tRemaing time:\t%u", - (session[s].bundle && bundle[session[s].bundle].num_of_links > 1) - ? (unsigned) (session[s].timeout - bundle[session[s].bundle].online_time) - : (unsigned) (session[s].timeout - (time_now - session[s].opened))); + clockt opened = session[s].opened; + if (session[s].bundle && bundle[session[s].bundle].num_of_links > 1) + opened = bundle[session[s].bundle].online_time; + + cli_print(cli, "\tSess Timeout:\t%u seconds", session[s].session_timeout - (opened ? abs(time_now - opened) : 0)); } + if (session[s].idle_timeout) + cli_print(cli, "\tIdle Timeout:\t%u seconds", session[s].idle_timeout - (session[s].last_data ? abs(time_now - session[s].last_data) : 0)); + + cli_print(cli, "\tBytes In/Out:\t%u/%u", session[s].cout, session[s].cin); cli_print(cli, "\tPkts In/Out:\t%u/%u", session[s].pout, session[s].pin); cli_print(cli, "\tMRU:\t\t%d", session[s].mru); cli_print(cli, "\tRx Speed:\t%u", session[s].rx_connect_speed); @@ -501,7 +507,7 @@ static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int } // Show Summary - cli_print(cli, "%5s %4s %-32s %-15s %s %s %s %s %10s %10s %10s %4s %10s %-15s %s", + cli_print(cli, "%5s %4s %-32s %-15s %s %s %s %s %10s %10s %10s %4s %-15s %s", "SID", "TID", "Username", @@ -514,20 +520,13 @@ static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int "downloaded", "uploaded", "idle", - "Rem.Time", "LAC", "CLI"); for (i = 1; i < MAXSESSION; i++) { - uint32_t rem_time; if (!session[i].opened) continue; - if (session[i].bundle && bundle[session[i].bundle].num_of_links > 1) - rem_time = session[i].timeout ? (session[i].timeout - bundle[session[i].bundle].online_time) : 0; - else - rem_time = session[i].timeout ? (session[i].timeout - (time_now-session[i].opened)) : 0; - - cli_print(cli, "%5d %4d %-32s %-15s %s %s %s %s %10u %10lu %10lu %4u %10lu %-15s %s", + cli_print(cli, "%5d %4d %-32s %-15s %s %s %s %s %10u %10lu %10lu %4u %-15s %s", i, session[i].tunnel, session[i].user[0] ? session[i].user : "*", @@ -540,7 +539,6 @@ static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int (unsigned long)session[i].cout, (unsigned long)session[i].cin, abs(time_now - (session[i].last_packet ? session[i].last_packet : time_now)), - (unsigned long)(rem_time), fmtaddr(htonl(tunnel[ session[i].tunnel ].ip), 1), session[i].calling[0] ? session[i].calling : "*"); } @@ -793,72 +791,10 @@ static int cmd_clear_counters(struct cli_def *cli, char *command, char **argv, i static int cmd_show_version(struct cli_def *cli, char *command, char **argv, int argc) { - int tag = 0; - int file = 0; - int i = 0; - if (CLI_HELP_REQUESTED) - return cli_arg_help(cli, 1, - "tag", "Include CVS release tag", - "file", "Include file versions", - NULL); - - for (i = 0; i < argc; i++) - if (!strcmp(argv[i], "tag")) - tag++; - else if (!strcmp(argv[i], "file")) - file++; + return CLI_HELP_NO_ARGS; cli_print(cli, "L2TPNS %s", VERSION); - if (tag) - { - char const *p = strchr(cvs_name, ':'); - char const *e; - if (p) - { - p++; - while (isspace(*p)) - p++; - } - - if (!p || *p == '$') - p = "HEAD"; - - e = strpbrk(p, " \t$"); - cli_print(cli, "Tag: %.*s", (int) (e ? e - p + 1 : strlen(p)), p); - } - - if (file) - { - extern linked_list *loaded_plugins; - void *p; - - cli_print(cli, "Files:"); - cli_print(cli, " %s", cvs_id_arp); -#ifdef BGP - cli_print(cli, " %s", cvs_id_bgp); -#endif /* BGP */ - cli_print(cli, " %s", cvs_id_cli); - cli_print(cli, " %s", cvs_id_cluster); - cli_print(cli, " %s", cvs_id_constants); - cli_print(cli, " %s", cvs_id_control); - cli_print(cli, " %s", cvs_id_icmp); - cli_print(cli, " %s", cvs_id_l2tpns); - cli_print(cli, " %s", cvs_id_ll); - cli_print(cli, " %s", cvs_id_ppp); - cli_print(cli, " %s", cvs_id_radius); - cli_print(cli, " %s", cvs_id_tbf); - cli_print(cli, " %s", cvs_id_util); - - ll_reset(loaded_plugins); - while ((p = ll_next(loaded_plugins))) - { - char const **id = dlsym(p, "cvs_id"); - if (id) - cli_print(cli, " %s", *id); - } - } - return CLI_OK; } @@ -2033,7 +1969,7 @@ static int cmd_router_bgp_neighbour(struct cli_def *cli, char *command, char **a int keepalive; int hold; - if (CLI_HELP_REQUESTED) + if (CLI_HELP_REQUESTED) { switch (argc) { @@ -2143,14 +2079,14 @@ static int cmd_router_bgp_neighbour(struct cli_def *cli, char *command, char **a config->neighbour[i].keepalive = keepalive; config->neighbour[i].hold = hold; - return CLI_OK; + return CLI_OK; } static int cmd_router_bgp_no_neighbour(struct cli_def *cli, char *command, char **argv, int argc) { int i; - if (CLI_HELP_REQUESTED) + if (CLI_HELP_REQUESTED) return cli_arg_help(cli, argc > 0, "A.B.C.D", "BGP neighbour address", "NAME", "BGP neighbour name", @@ -2175,7 +2111,7 @@ static int cmd_router_bgp_no_neighbour(struct cli_def *cli, char *command, char } memset(&config->neighbour[i], 0, sizeof(config->neighbour[i])); - return CLI_OK; + return CLI_OK; } static int cmd_show_bgp(struct cli_def *cli, char *command, char **argv, int argc) @@ -3081,3 +3017,21 @@ static int cmd_show_access_list(struct cli_def *cli, char *command, char **argv, return CLI_OK; } + +static int cmd_shutdown(struct cli_def *cli, char *command, char **argv, int argc) +{ + if (CLI_HELP_REQUESTED) + return CLI_HELP_NO_ARGS; + + kill(getppid(), SIGQUIT); + return CLI_OK; +} + +static int cmd_reload(struct cli_def *cli, char *command, char **argv, int argc) +{ + if (CLI_HELP_REQUESTED) + return CLI_HELP_NO_ARGS; + + kill(getppid(), SIGHUP); + return CLI_OK; +}