add DAE support (PoD/CoA) from Vladislav Bjelic
[l2tpns.git] / cli.c
diff --git a/cli.c b/cli.c
index 52397f9..dc3f1f8 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.59 2005/06/02 03:52:46 bodea Exp $";
+char const *cvs_id_cli = "$Id: cli.c,v 1.63 2005/06/28 14:48:17 bodea Exp $";
 
 #include <stdio.h>
 #include <stdarg.h>
@@ -49,15 +49,6 @@ extern struct cli_tunnel_actions *cli_tunnel_actions;
 extern tbft *filter_list;
 extern ip_filtert *ip_filters;
 
-static char *debug_levels[] = {
-       "CRIT",
-       "ERROR",
-       "WARN",
-       "INFO",
-       "CALL",
-       "DATA",
-};
-
 struct
 {
        char critical;
@@ -68,15 +59,24 @@ struct
        char data;
 } debug_flags;
 
-static int debug_session;
-static int debug_tunnel;
+#ifdef RINGBUFFER
+
 static int debug_rb_tail;
+static char *debug_levels[] = {
+       "CRIT",
+       "ERROR",
+       "WARN",
+       "INFO",
+       "CALL",
+       "DATA",
+};
+
+#endif
 
 static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int argc);
 static int cmd_show_tunnels(struct cli_def *cli, char *command, char **argv, int argc);
 static int cmd_show_users(struct cli_def *cli, char *command, char **argv, int argc);
 static int cmd_show_radius(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, int argc);
 static int cmd_show_version(struct cli_def *cli, char *command, char **argv, int argc);
 static int cmd_show_pool(struct cli_def *cli, char *command, char **argv, int argc);
 static int cmd_show_run(struct cli_def *cli, char *command, char **argv, int argc);
@@ -84,7 +84,6 @@ static int cmd_show_banana(struct cli_def *cli, char *command, char **argv, int
 static int cmd_show_plugins(struct cli_def *cli, char *command, char **argv, int argc);
 static int cmd_show_throttle(struct cli_def *cli, char *command, char **argv, int argc);
 static int cmd_write_memory(struct cli_def *cli, char *command, char **argv, int argc);
-static int cmd_clear_counters(struct cli_def *cli, char *command, char **argv, int argc);
 static int cmd_drop_user(struct cli_def *cli, char *command, char **argv, int argc);
 static int cmd_drop_tunnel(struct cli_def *cli, char *command, char **argv, int argc);
 static int cmd_drop_session(struct cli_def *cli, char *command, char **argv, int argc);
@@ -102,6 +101,11 @@ static int cmd_uptime(struct cli_def *cli, char *command, char **argv, int argc)
 static int regular_stuff(struct cli_def *cli);
 static void parsemac(char *string, char mac[6]);
 
+#ifdef STATISTICS
+static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, int argc);
+static int cmd_clear_counters(struct cli_def *cli, char *command, char **argv, int argc);
+#endif /* STATISTICS */
+
 #ifdef BGP
 #define MODE_CONFIG_BGP 8
 static int cmd_router_bgp(struct cli_def *cli, char *command, char **argv, int argc);
@@ -312,8 +316,6 @@ void cli_do(int sockfd)
                cli->users = 0;
        }
 
-       debug_session = 0;
-       debug_tunnel = 0;
 #ifdef RINGBUFFER
        debug_rb_tail = ringbuffer->tail;
 #endif
@@ -407,11 +409,11 @@ static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int
                        cli_print(cli, "\tTunnel ID:\t%d", session[s].tunnel);
                        cli_print(cli, "\tIP address:\t%s", fmtaddr(htonl(session[s].ip), 0));
                        cli_print(cli, "\tUnique SID:\t%u", session[s].unique_id);
-                       cli_print(cli, "\tOpened:\t\t%u seconds", abs(time_now - session[s].opened));
-                       cli_print(cli, "\tIdle time:\t%u seconds", abs(time_now - session[s].last_packet));
+                       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, "\tNext Recv:\t%u", session[s].nr);
                        cli_print(cli, "\tNext Send:\t%u", session[s].ns);
-                       cli_print(cli, "\tBytes In/Out:\t%u/%u", session[s].total_cout, session[s].total_cin);
+                       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);
@@ -507,8 +509,8 @@ static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int
                                (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,
+                               (unsigned long)session[i].cout,
+                               (unsigned long)session[i].cin,
                                abs(time_now - (session[i].last_packet ? session[i].last_packet : time_now)),
                                fmtaddr(htonl(tunnel[ session[i].tunnel ].ip), 1),
                                session[i].calling[0] ? session[i].calling : "*");
@@ -646,6 +648,7 @@ static int cmd_show_users(struct cli_def *cli, char *command, char **argv, int a
        return CLI_OK;
 }
 
+#ifdef STATISTICS
 static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, int argc)
 {
        if (CLI_HELP_REQUESTED)
@@ -697,7 +700,7 @@ static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, in
        cli_print(cli, "%-30s%u", "multi_read_exceeded",        GET_STAT(multi_read_exceeded));
 
 
-#ifdef STATISTICS
+#ifdef STAT_CALLS
        cli_print(cli, "\n%-30s%-10s", "Counter", "Value");
        cli_print(cli, "-----------------------------------------");
        cli_print(cli, "%-30s%u", "call_processtun",            GET_STAT(call_processtun));
@@ -731,7 +734,7 @@ static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, in
        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
+#endif /* STAT_CALLS */
 
        {
                time_t l = GET_STAT(last_reset);
@@ -746,6 +749,19 @@ static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, in
        return CLI_OK;
 }
 
+static int cmd_clear_counters(struct cli_def *cli, char *command, char **argv, int argc)
+{
+       if (CLI_HELP_REQUESTED)
+               return CLI_HELP_NO_ARGS;
+
+       memset(_statistics, 0, sizeof(struct Tstats));
+       SET_STAT(last_reset, time(NULL));
+
+       cli_print(cli, "Counters cleared");
+       return CLI_OK;
+}
+#endif /* STATISTICS */
+
 static int cmd_show_version(struct cli_def *cli, char *command, char **argv, int argc)
 {
        int tag = 0;
@@ -1134,18 +1150,6 @@ static int cmd_show_banana(struct cli_def *cli, char *command, char **argv, int
        return CLI_OK;
 }
 
-static int cmd_clear_counters(struct cli_def *cli, char *command, char **argv, int argc)
-{
-       if (CLI_HELP_REQUESTED)
-               return CLI_HELP_NO_ARGS;
-
-       memset(_statistics, 0, sizeof(struct Tstats));
-       SET_STAT(last_reset, time(NULL));
-
-       cli_print(cli, "Counters cleared");
-       return CLI_OK;
-}
-
 static int cmd_drop_user(struct cli_def *cli, char *command, char **argv, int argc)
 {
        int i;
@@ -1896,10 +1900,10 @@ static int cmd_set(struct cli_def *cli, char *command, char **argv, int argc)
 
 int regular_stuff(struct cli_def *cli)
 {
+#ifdef RINGBUFFER
        int out = 0;
        int i;
 
-#ifdef RINGBUFFER
        for (i = debug_rb_tail; i != ringbuffer->tail; i = (i + 1) % RINGBUFFER_SIZE)
        {
                char *m = ringbuffer->buffer[i].message;
@@ -2312,17 +2316,6 @@ static int cmd_restart_bgp(struct cli_def *cli, char *command, char **argv, int
 #endif /* BGP*/
 
 static int filt;
-static int find_access_list(char const *name)
-{
-       int i;
-
-       for (i = 0; i < MAXFILTER; i++)
-               if (!(*ip_filters[i].name && strcmp(ip_filters[i].name, name)))
-                       return i;
-
-       return -1;
-}
-
 static int access_list(struct cli_def *cli, char **argv, int argc, int add)
 {
        int extended;
@@ -2373,7 +2366,7 @@ static int access_list(struct cli_def *cli, char **argv, int argc, int add)
                return CLI_OK;
        }
 
-       filt = find_access_list(argv[1]);
+       filt = find_filter(argv[1], strlen(argv[1]));
        if (add)
        {
                if (filt < 0)
@@ -2966,7 +2959,7 @@ static int cmd_filter(struct cli_def *cli, char *command, char **argv, int argc)
                        return CLI_OK;
                }
 
-               v = find_access_list(argv[i+1]);
+               v = find_filter(argv[i+1], strlen(argv[i+1]));
                if (v < 0 || !*ip_filters[v].name)
                {
                        cli_error(cli, "Access-list %s not defined", argv[i+1]);
@@ -3042,7 +3035,7 @@ static int cmd_show_access_list(struct cli_def *cli, char *command, char **argv,
 
        for (i = 0; i < argc; i++)
        {
-               int f = find_access_list(argv[i]);
+               int f = find_filter(argv[i], strlen(argv[i]));
                ip_filter_rulet *rules;
 
                if (f < 0 || !*ip_filters[f].name)