reset .die on master takeover
[l2tpns.git] / cli.c
diff --git a/cli.c b/cli.c
index e90b2a6..62e6d05 100644 (file)
--- a/cli.c
+++ b/cli.c
@@ -2,7 +2,7 @@
 // vim: sw=8 ts=8
 
 char const *cvs_name = "$Name:  $";
-char const *cvs_id_cli = "$Id: cli.c,v 1.44 2004/12/18 01:20:05 bodea Exp $";
+char const *cvs_id_cli = "$Id: cli.c,v 1.53 2005/02/08 01:20:38 bodea Exp $";
 
 #include <stdio.h>
 #include <stdarg.h>
@@ -290,8 +290,9 @@ void cli_do(int sockfd)
        if (fork_and_close()) return;
        if (getpeername(sockfd, (struct sockaddr *)&addr, &l) == 0)
        {
-               LOG(3, 0, 0, "Accepted connection to CLI from %s\n", fmtaddr(addr.sin_addr.s_addr, 0));
                require_auth = addr.sin_addr.s_addr != inet_addr("127.0.0.1");
+               LOG(require_auth ? 3 : 4, 0, 0, "Accepted connection to CLI from %s\n",
+                       fmtaddr(addr.sin_addr.s_addr, 0));
        }
        else
                LOG(0, 0, 0, "getpeername() failed on cli socket.  Requiring authentication: %s\n", strerror(errno));
@@ -322,7 +323,9 @@ void cli_do(int sockfd)
        cli_loop(cli, sockfd);
 
        close(sockfd);
-       LOG(3, 0, 0, "Closed CLI connection from %s\n", fmtaddr(addr.sin_addr.s_addr, 0));
+       LOG(require_auth ? 3 : 4, 0, 0, "Closed CLI connection from %s\n",
+               fmtaddr(addr.sin_addr.s_addr, 0));
+
        exit(0);
 }
 
@@ -475,7 +478,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 %10s %10s %10s %4s %-15s %s",
+       cli_print(cli, "%5s %4s %-32s %-15s %s %s %s %s %10s %10s %10s %4s %-15s %s",
                        "SID",
                        "TID",
                        "Username",
@@ -483,6 +486,7 @@ static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int
                        "I",
                        "T",
                        "G",
+                       "6",
                        "opened",
                        "downloaded",
                        "uploaded",
@@ -493,7 +497,7 @@ static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int
        for (i = 1; i < MAXSESSION; i++)
        {
                if (!session[i].opened) continue;
-               cli_print(cli, "%5d %4d %-32s %-15s %s %s %s %10u %10lu %10lu %4u %-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 : "*",
@@ -501,6 +505,7 @@ static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int
                                (session[i].snoop_ip && session[i].snoop_port) ? "Y" : "N",
                                (session[i].throttle_in || session[i].throttle_out) ? "Y" : "N",
                                (session[i].walled_garden) ? "Y" : "N",
+                               (session[i].flags & SF_IPV6CP_ACKED) ? "Y" : "N",
                                abs(time_now - (unsigned long)session[i].opened),
                                (unsigned long)session[i].total_cout,
                                (unsigned long)session[i].total_cin,
@@ -646,23 +651,24 @@ static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, in
        if (CLI_HELP_REQUESTED)
                return CLI_HELP_NO_ARGS;
 
-       cli_print(cli, "%-10s %-8s %-10s %-8s", "Ethernet", "Bytes", "Packets", "Errors");
-       cli_print(cli, "%-10s %8u %8u %8u", "RX",
+       cli_print(cli, "%-10s %10s %10s %10s %10s", "Ethernet", "Bytes", "Packets", "Errors", "Dropped");
+       cli_print(cli, "%-10s %10u %10u %10u %10u", "RX",
                        GET_STAT(tun_rx_bytes),
                        GET_STAT(tun_rx_packets),
-                       GET_STAT(tun_rx_errors));
-       cli_print(cli, "%-10s %8u %8u %8u", "TX",
+                       GET_STAT(tun_rx_errors),
+                       GET_STAT(tun_rx_dropped));
+       cli_print(cli, "%-10s %10u %10u %10u", "TX",
                        GET_STAT(tun_tx_bytes),
                        GET_STAT(tun_tx_packets),
                        GET_STAT(tun_tx_errors));
        cli_print(cli, "");
 
-       cli_print(cli, "%-10s %-8s %-10s %-8s %-8s", "Tunnel", "Bytes", "Packets", "Errors", "Retries");
-       cli_print(cli, "%-10s %8u %8u %8u", "RX",
+       cli_print(cli, "%-10s %10s %10s %10s %10s", "Tunnel", "Bytes", "Packets", "Errors", "Retries");
+       cli_print(cli, "%-10s %10u %10u %10u", "RX",
                        GET_STAT(tunnel_rx_bytes),
                        GET_STAT(tunnel_rx_packets),
                        GET_STAT(tunnel_rx_errors));
-       cli_print(cli, "%-10s %8u %8u %8u %8u", "TX",
+       cli_print(cli, "%-10s %10u %10u %10u %10u", "TX",
                        GET_STAT(tunnel_tx_bytes),
                        GET_STAT(tunnel_tx_packets),
                        GET_STAT(tunnel_tx_errors),
@@ -696,18 +702,22 @@ static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, in
        cli_print(cli, "-----------------------------------------");
        cli_print(cli, "%-30s%u", "call_processtun",            GET_STAT(call_processtun));
        cli_print(cli, "%-30s%u", "call_processipout",          GET_STAT(call_processipout));
+       cli_print(cli, "%-30s%u", "call_processipv6out",        GET_STAT(call_processipv6out));
        cli_print(cli, "%-30s%u", "call_processudp",            GET_STAT(call_processudp));
        cli_print(cli, "%-30s%u", "call_processpap",            GET_STAT(call_processpap));
        cli_print(cli, "%-30s%u", "call_processchap",           GET_STAT(call_processchap));
        cli_print(cli, "%-30s%u", "call_processlcp",            GET_STAT(call_processlcp));
        cli_print(cli, "%-30s%u", "call_processipcp",           GET_STAT(call_processipcp));
+       cli_print(cli, "%-30s%u", "call_processipv6cp",         GET_STAT(call_processipv6cp));
        cli_print(cli, "%-30s%u", "call_processipin",           GET_STAT(call_processipin));
+       cli_print(cli, "%-30s%u", "call_processipv6in",         GET_STAT(call_processipv6in));
        cli_print(cli, "%-30s%u", "call_processccp",            GET_STAT(call_processccp));
        cli_print(cli, "%-30s%u", "call_processrad",            GET_STAT(call_processrad));
        cli_print(cli, "%-30s%u", "call_sendarp",               GET_STAT(call_sendarp));
        cli_print(cli, "%-30s%u", "call_sendipcp",              GET_STAT(call_sendipcp));
        cli_print(cli, "%-30s%u", "call_sendchap",              GET_STAT(call_sendchap));
        cli_print(cli, "%-30s%u", "call_sessionbyip",           GET_STAT(call_sessionbyip));
+       cli_print(cli, "%-30s%u", "call_sessionbyipv6",         GET_STAT(call_sessionbyipv6));
        cli_print(cli, "%-30s%u", "call_sessionbyuser",         GET_STAT(call_sessionbyuser));
        cli_print(cli, "%-30s%u", "call_tunnelsend",            GET_STAT(call_tunnelsend));
        cli_print(cli, "%-30s%u", "call_tunnelkill",            GET_STAT(call_tunnelkill));
@@ -720,7 +730,19 @@ static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, in
        cli_print(cli, "%-30s%u", "call_dump_acct_info",        GET_STAT(call_dump_acct_info));
        cli_print(cli, "%-30s%u", "call_radiussend",            GET_STAT(call_radiussend));
        cli_print(cli, "%-30s%u", "call_radiusretry",           GET_STAT(call_radiusretry));
+       cli_print(cli, "%-30s%u", "call_random_data",           GET_STAT(call_random_data));
 #endif
+
+       {
+               time_t l = GET_STAT(last_reset);
+               char *t = ctime(&l);
+               char *p = strchr(t, '\n');
+               if (p) *p = 0;
+
+               cli_print(cli, "");
+               cli_print(cli, "Last counter reset %s", t);
+       }
+
        return CLI_OK;
 }
 
@@ -1116,8 +1138,10 @@ static int cmd_clear_counters(struct cli_def *cli, char *command, char **argv, i
        if (CLI_HELP_REQUESTED)
                return CLI_HELP_NO_ARGS;
 
-       cli_print(cli, "Counters cleared");
+       memset(_statistics, 0, sizeof(struct Tstats));
        SET_STAT(last_reset, time(NULL));
+
+       cli_print(cli, "Counters cleared");
        return CLI_OK;
 }
 
@@ -1822,7 +1846,7 @@ static int cmd_set(struct cli_def *cli, char *command, char **argv, int argc)
 
        for (i = 0; config_values[i].key; i++)
        {
-               void *value = ((void *)config) + config_values[i].offset;
+               void *value = ((void *) config) + config_values[i].offset;
                if (strcmp(config_values[i].key, argv[0]) == 0)
                {
                        // Found a value to set
@@ -1830,7 +1854,7 @@ static int cmd_set(struct cli_def *cli, char *command, char **argv, int argc)
                        switch (config_values[i].type)
                        {
                        case STRING:
-                               strncpy((char *) value, argv[1], config_values[i].size - 1);
+                               snprintf((char *) value, config_values[i].size, "%s", argv[1]);
                                break;
                        case INT:
                                *(int *) value = atoi(argv[1]);
@@ -2052,7 +2076,7 @@ static int cmd_router_bgp_neighbour(struct cli_def *cli, char *command, char **a
 
                if (!config->neighbour[i].name[0])
                {
-                       snprintf(config->neighbour[i].name, sizeof(config->neighbour[i].name), argv[0]);
+                       snprintf(config->neighbour[i].name, sizeof(config->neighbour[i].name), "%s", argv[0]);
                        config->neighbour[i].keepalive = -1;
                        config->neighbour[i].hold = -1;
                }
@@ -2484,7 +2508,7 @@ static char const *show_access_list_rule(int extended, ip_filter_rulet *rule)
        return buf;
 }
 
-ip_filter_rulet *access_list_rule_ext(struct cli_def *cli, char *command, char **argv, int argc)
+static ip_filter_rulet *access_list_rule_ext(struct cli_def *cli, char *command, char **argv, int argc)
 {
        static ip_filter_rulet rule;
        struct in_addr addr;
@@ -2719,7 +2743,7 @@ ip_filter_rulet *access_list_rule_ext(struct cli_def *cli, char *command, char *
        return &rule;
 }
 
-ip_filter_rulet *access_list_rule_std(struct cli_def *cli, char *command, char **argv, int argc)
+static ip_filter_rulet *access_list_rule_std(struct cli_def *cli, char *command, char **argv, int argc)
 {
        static ip_filter_rulet rule;
        struct in_addr addr;