add counters for select_called, select_ready and select_processed
authorBrendan O'Dea <bod@optus.net>
Thu, 16 Dec 2004 23:40:30 +0000 (23:40 +0000)
committerBrendan O'Dea <bod@optus.net>
Thu, 16 Dec 2004 23:40:30 +0000 (23:40 +0000)
fix cli_print format strings

Changes
cli.c
cluster.c
l2tpns.c
l2tpns.h
l2tpns.spec

diff --git a/Changes b/Changes
index 0853325..ceabd76 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,4 +1,4 @@
-* Thu Dec 16 2004 Brendan O'Dea <bod@optusnet.com.au> 2.0.13
+* Fri Dec 17 2004 Brendan O'Dea <bod@optusnet.com.au> 2.0.13
 - Better cluster master collision resolution: keep a counter of state
   changes, propagated in the heartbeats; the master with the highest #
   of changes (that has kept in contact with the LAC through the
 - Better cluster master collision resolution: keep a counter of state
   changes, propagated in the heartbeats; the master with the highest #
   of changes (that has kept in contact with the LAC through the
@@ -10,6 +10,7 @@
   startup-config (from Jonathan's Debian package patches).
 - Read multiple packets off cluster_sockfd as well as udpfd, tunfd in an
   attempt to avoid losing the cluster in high load (DoS) conditions.
   startup-config (from Jonathan's Debian package patches).
 - Read multiple packets off cluster_sockfd as well as udpfd, tunfd in an
   attempt to avoid losing the cluster in high load (DoS) conditions.
+- Add counters for select_called, select_ready and select_processed.
 - Compress logs.
 - Retain counters of shutdown sessions to dump once per minute.
 - Use standard uintN_t types for portability.
 - Compress logs.
 - Retain counters of shutdown sessions to dump once per minute.
 - Use standard uintN_t types for portability.
diff --git a/cli.c b/cli.c
index 90c1d8f..1ca5927 100644 (file)
--- a/cli.c
+++ b/cli.c
@@ -2,10 +2,11 @@
 // vim: sw=8 ts=8
 
 char const *cvs_name = "$Name:  $";
 // vim: sw=8 ts=8
 
 char const *cvs_name = "$Name:  $";
-char const *cvs_id_cli = "$Id: cli.c,v 1.41 2004-12-16 08:49:52 bodea Exp $";
+char const *cvs_id_cli = "$Id: cli.c,v 1.42 2004-12-16 23:40:30 bodea Exp $";
 
 #include <stdio.h>
 #include <stdarg.h>
 
 #include <stdio.h>
 #include <stdarg.h>
+#include <unistd.h>
 #include <sys/file.h>
 #include <sys/stat.h>
 #include <syslog.h>
 #include <sys/file.h>
 #include <sys/stat.h>
 #include <syslog.h>
@@ -19,10 +20,10 @@ char const *cvs_id_cli = "$Id: cli.c,v 1.41 2004-12-16 08:49:52 bodea Exp $";
 #include <sys/socket.h>
 #include <sys/types.h>
 #include <signal.h>
 #include <sys/socket.h>
 #include <sys/types.h>
 #include <signal.h>
-#include <unistd.h>
 #include <dlfcn.h>
 #include <dlfcn.h>
-#include <libcli.h>
 #include <netdb.h>
 #include <netdb.h>
+#include <libcli.h>
+
 #include "l2tpns.h"
 #include "util.h"
 #include "cluster.h"
 #include "l2tpns.h"
 #include "util.h"
 #include "cluster.h"
@@ -405,12 +406,12 @@ static int cmd_show_session(struct cli_def *cli, char *command, char **argv, int
                        cli_print(cli, "\tIdle time:\t%u seconds", abs(time_now - session[s].last_packet));
                        cli_print(cli, "\tNext Recv:\t%u", session[s].nr);
                        cli_print(cli, "\tNext Send:\t%u", session[s].ns);
                        cli_print(cli, "\tIdle time:\t%u seconds", abs(time_now - session[s].last_packet));
                        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%lu/%lu", (unsigned long)session[s].total_cout, (unsigned long)session[s].total_cin);
-                       cli_print(cli, "\tPkts In/Out:\t%lu/%lu", (unsigned long)session[s].pout, (unsigned long)session[s].pin);
+                       cli_print(cli, "\tBytes In/Out:\t%u/%u", session[s].total_cout, session[s].total_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, "\tRadius Session:\t%u", session[s].radius);
                        cli_print(cli, "\tMRU:\t\t%d", session[s].mru);
                        cli_print(cli, "\tRadius Session:\t%u", session[s].radius);
-                       cli_print(cli, "\tRx Speed:\t%lu", session[s].rx_connect_speed);
-                       cli_print(cli, "\tTx Speed:\t%lu", session[s].tx_connect_speed);
+                       cli_print(cli, "\tRx Speed:\t%u", session[s].rx_connect_speed);
+                       cli_print(cli, "\tTx Speed:\t%u", session[s].tx_connect_speed);
                        if (session[s].filter_in && session[s].filter_in <= MAXFILTER)
                                cli_print(cli, "\tFilter in:\t%u (%s)", session[s].filter_in, ip_filters[session[s].filter_in - 1].name);
                        if (session[s].filter_out && session[s].filter_out <= MAXFILTER)
                        if (session[s].filter_in && session[s].filter_in <= MAXFILTER)
                                cli_print(cli, "\tFilter in:\t%u (%s)", session[s].filter_in, ip_filters[session[s].filter_in - 1].name);
                        if (session[s].filter_out && session[s].filter_out <= MAXFILTER)
@@ -645,23 +646,22 @@ static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, in
                return CLI_HELP_NO_ARGS;
 
        cli_print(cli, "%-10s %-8s %-10s %-8s", "Ethernet", "Bytes", "Packets", "Errors");
                return CLI_HELP_NO_ARGS;
 
        cli_print(cli, "%-10s %-8s %-10s %-8s", "Ethernet", "Bytes", "Packets", "Errors");
-       cli_print(cli, "%-10s %8lu %8lu %8lu", "RX",
+       cli_print(cli, "%-10s %8u %8u %8u", "RX",
                        GET_STAT(tun_rx_bytes),
                        GET_STAT(tun_rx_packets),
                        GET_STAT(tun_rx_errors));
                        GET_STAT(tun_rx_bytes),
                        GET_STAT(tun_rx_packets),
                        GET_STAT(tun_rx_errors));
-       cli_print(cli, "%-10s %8lu %8lu %8lu", "TX",
+       cli_print(cli, "%-10s %8u %8u %8u", "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");
                        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 %8lu %8lu %8lu %8lu", "RX",
+       cli_print(cli, "%-10s %8u %8u %8u", "RX",
                        GET_STAT(tunnel_rx_bytes),
                        GET_STAT(tunnel_rx_packets),
                        GET_STAT(tunnel_rx_bytes),
                        GET_STAT(tunnel_rx_packets),
-                       GET_STAT(tunnel_rx_errors),
-                       0L);
-       cli_print(cli, "%-10s %8lu %8lu %8lu %8lu", "TX",
+                       GET_STAT(tunnel_rx_errors));
+       cli_print(cli, "%-10s %8u %8u %8u %8u", "TX",
                        GET_STAT(tunnel_tx_bytes),
                        GET_STAT(tunnel_tx_packets),
                        GET_STAT(tunnel_tx_errors),
                        GET_STAT(tunnel_tx_bytes),
                        GET_STAT(tunnel_tx_packets),
                        GET_STAT(tunnel_tx_errors),
@@ -670,52 +670,55 @@ static int cmd_show_counters(struct cli_def *cli, char *command, char **argv, in
 
        cli_print(cli, "%-30s%-10s", "Counter", "Value");
        cli_print(cli, "-----------------------------------------");
 
        cli_print(cli, "%-30s%-10s", "Counter", "Value");
        cli_print(cli, "-----------------------------------------");
-       cli_print(cli, "%-30s%lu", "radius_retries",            GET_STAT(radius_retries));
-       cli_print(cli, "%-30s%lu", "arp_sent",                  GET_STAT(arp_sent));
-       cli_print(cli, "%-30s%lu", "packets_snooped",           GET_STAT(packets_snooped));
-       cli_print(cli, "%-30s%lu", "tunnel_created",            GET_STAT(tunnel_created));
-       cli_print(cli, "%-30s%lu", "session_created",           GET_STAT(session_created));
-       cli_print(cli, "%-30s%lu", "tunnel_timeout",            GET_STAT(tunnel_timeout));
-       cli_print(cli, "%-30s%lu", "session_timeout",           GET_STAT(session_timeout));
-       cli_print(cli, "%-30s%lu", "radius_timeout",            GET_STAT(radius_timeout));
-       cli_print(cli, "%-30s%lu", "radius_overflow",           GET_STAT(radius_overflow));
-       cli_print(cli, "%-30s%lu", "tunnel_overflow",           GET_STAT(tunnel_overflow));
-       cli_print(cli, "%-30s%lu", "session_overflow",          GET_STAT(session_overflow));
-       cli_print(cli, "%-30s%lu", "ip_allocated",              GET_STAT(ip_allocated));
-       cli_print(cli, "%-30s%lu", "ip_freed",                  GET_STAT(ip_freed));
-       cli_print(cli, "%-30s%lu", "cluster_forwarded",         GET_STAT(c_forwarded));
-       cli_print(cli, "%-30s%lu", "recv_forward",              GET_STAT(recv_forward));
+       cli_print(cli, "%-30s%u", "radius_retries",             GET_STAT(radius_retries));
+       cli_print(cli, "%-30s%u", "arp_sent",                   GET_STAT(arp_sent));
+       cli_print(cli, "%-30s%u", "packets_snooped",            GET_STAT(packets_snooped));
+       cli_print(cli, "%-30s%u", "tunnel_created",             GET_STAT(tunnel_created));
+       cli_print(cli, "%-30s%u", "session_created",            GET_STAT(session_created));
+       cli_print(cli, "%-30s%u", "tunnel_timeout",             GET_STAT(tunnel_timeout));
+       cli_print(cli, "%-30s%u", "session_timeout",            GET_STAT(session_timeout));
+       cli_print(cli, "%-30s%u", "radius_timeout",             GET_STAT(radius_timeout));
+       cli_print(cli, "%-30s%u", "radius_overflow",            GET_STAT(radius_overflow));
+       cli_print(cli, "%-30s%u", "tunnel_overflow",            GET_STAT(tunnel_overflow));
+       cli_print(cli, "%-30s%u", "session_overflow",           GET_STAT(session_overflow));
+       cli_print(cli, "%-30s%u", "ip_allocated",               GET_STAT(ip_allocated));
+       cli_print(cli, "%-30s%u", "ip_freed",                   GET_STAT(ip_freed));
+       cli_print(cli, "%-30s%u", "cluster_forwarded",          GET_STAT(c_forwarded));
+       cli_print(cli, "%-30s%u", "recv_forward",               GET_STAT(recv_forward));
+       cli_print(cli, "%-30s%u", "select_called",              GET_STAT(select_called));
+       cli_print(cli, "%-30s%u", "select_ready",               GET_STAT(select_ready));
+       cli_print(cli, "%-30s%u", "select_processed",           GET_STAT(select_processed));
 
 
 #ifdef STATISTICS
        cli_print(cli, "\n%-30s%-10s", "Counter", "Value");
        cli_print(cli, "-----------------------------------------");
 
 
 #ifdef STATISTICS
        cli_print(cli, "\n%-30s%-10s", "Counter", "Value");
        cli_print(cli, "-----------------------------------------");
-       cli_print(cli, "%-30s%lu", "call_processtun",           GET_STAT(call_processtun));
-       cli_print(cli, "%-30s%lu", "call_processipout",         GET_STAT(call_processipout));
-       cli_print(cli, "%-30s%lu", "call_processudp",           GET_STAT(call_processudp));
-       cli_print(cli, "%-30s%lu", "call_processpap",           GET_STAT(call_processpap));
-       cli_print(cli, "%-30s%lu", "call_processchap",          GET_STAT(call_processchap));
-       cli_print(cli, "%-30s%lu", "call_processlcp",           GET_STAT(call_processlcp));
-       cli_print(cli, "%-30s%lu", "call_processipcp",          GET_STAT(call_processipcp));
-       cli_print(cli, "%-30s%lu", "call_processipin",          GET_STAT(call_processipin));
-       cli_print(cli, "%-30s%lu", "call_processccp",           GET_STAT(call_processccp));
-       cli_print(cli, "%-30s%lu", "call_processrad",           GET_STAT(call_processrad));
-       cli_print(cli, "%-30s%lu", "call_sendarp",              GET_STAT(call_sendarp));
-       cli_print(cli, "%-30s%lu", "call_sendipcp",             GET_STAT(call_sendipcp));
-       cli_print(cli, "%-30s%lu", "call_sendchap",             GET_STAT(call_sendchap));
-       cli_print(cli, "%-30s%lu", "call_sessionbyip",          GET_STAT(call_sessionbyip));
-       cli_print(cli, "%-30s%lu", "call_sessionbyuser",        GET_STAT(call_sessionbyuser));
-       cli_print(cli, "%-30s%lu", "call_tunnelsend",           GET_STAT(call_tunnelsend));
-       cli_print(cli, "%-30s%lu", "call_tunnelkill",           GET_STAT(call_tunnelkill));
-       cli_print(cli, "%-30s%lu", "call_tunnelshutdown",       GET_STAT(call_tunnelshutdown));
-       cli_print(cli, "%-30s%lu", "call_sessionkill",          GET_STAT(call_sessionkill));
-       cli_print(cli, "%-30s%lu", "call_sessionshutdown",      GET_STAT(call_sessionshutdown));
-       cli_print(cli, "%-30s%lu", "call_sessionsetup",         GET_STAT(call_sessionsetup));
-       cli_print(cli, "%-30s%lu", "call_assign_ip_address",    GET_STAT(call_assign_ip_address));
-       cli_print(cli, "%-30s%lu", "call_free_ip_address",      GET_STAT(call_free_ip_address));
-       cli_print(cli, "%-30s%lu", "call_dump_acct_info",       GET_STAT(call_dump_acct_info));
-       cli_print(cli, "%-30s%lu", "call_radiussend",           GET_STAT(call_radiussend));
-       cli_print(cli, "%-30s%lu", "call_radiusretry",          GET_STAT(call_radiusretry));
+       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_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_processipin",           GET_STAT(call_processipin));
+       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_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));
+       cli_print(cli, "%-30s%u", "call_tunnelshutdown",        GET_STAT(call_tunnelshutdown));
+       cli_print(cli, "%-30s%u", "call_sessionkill",           GET_STAT(call_sessionkill));
+       cli_print(cli, "%-30s%u", "call_sessionshutdown",       GET_STAT(call_sessionshutdown));
+       cli_print(cli, "%-30s%u", "call_sessionsetup",          GET_STAT(call_sessionsetup));
+       cli_print(cli, "%-30s%u", "call_assign_ip_address",     GET_STAT(call_assign_ip_address));
+       cli_print(cli, "%-30s%u", "call_free_ip_address",       GET_STAT(call_free_ip_address));
+       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));
 #endif
        return CLI_OK;
 }
 #endif
        return CLI_OK;
 }
@@ -754,7 +757,7 @@ static int cmd_show_version(struct cli_def *cli, char *command, char **argv, int
                        p = "HEAD";
 
                e = strpbrk(p, " \t$");
                        p = "HEAD";
 
                e = strpbrk(p, " \t$");
-               cli_print(cli, "Tag: %.*s", e ? e - p + 1 : strlen(p), p);
+               cli_print(cli, "Tag: %.*s", (int) (e ? e - p + 1 : strlen(p)), p);
        }
        
        if (file)
        }
        
        if (file)
@@ -837,7 +840,7 @@ static int cmd_show_pool(struct cli_def *cli, char *command, char **argv, int ar
                        if (ip_address_pool[i].last)
                                cli_print(cli, "%-15s\tN %8s [%s] %ds",
                                        fmtaddr(htonl(ip_address_pool[i].address), 0), "",
                        if (ip_address_pool[i].last)
                                cli_print(cli, "%-15s\tN %8s [%s] %ds",
                                        fmtaddr(htonl(ip_address_pool[i].address), 0), "",
-                                       ip_address_pool[i].user, time_now - ip_address_pool[i].last);
+                                       ip_address_pool[i].user, (int) time_now - ip_address_pool[i].last);
 
                        else if (show_all)
                                cli_print(cli, "%-15s\tN", fmtaddr(htonl(ip_address_pool[i].address), 0));
 
                        else if (show_all)
                                cli_print(cli, "%-15s\tN", fmtaddr(htonl(ip_address_pool[i].address), 0));
@@ -1892,7 +1895,7 @@ int regular_stuff(struct cli_def *cli)
                        debug_levels[(int)ringbuffer->buffer[i].level],
                        ringbuffer->buffer[i].tunnel,
                        ringbuffer->buffer[i].session,
                        debug_levels[(int)ringbuffer->buffer[i].level],
                        ringbuffer->buffer[i].tunnel,
                        ringbuffer->buffer[i].session,
-                       p - m, m);
+                       (int) (p - m), m);
 
                out++;
        }
 
                out++;
        }
@@ -2161,7 +2164,7 @@ static int cmd_show_bgp(struct cli_def *cli, char *command, char **argv, int arg
                            "----------- ------- -------- ----- ---- ---------");
                }
 
                            "----------- ------- -------- ----- ---- ---------");
                }
 
-               cli_print(cli, "%-18.18s %5d %15s %-11s %7d %7ds %5s %4s %4d %4d",
+               cli_print(cli, "%-18.18s %5d %15s %-11s %7d %7lds %5s %4s %4d %4d",
                        bgp_peers[i].name,
                        bgp_peers[i].as,
                        addr,
                        bgp_peers[i].name,
                        bgp_peers[i].as,
                        addr,
index 29d8ca2..a452144 100644 (file)
--- a/cluster.c
+++ b/cluster.c
@@ -1,8 +1,12 @@
 // L2TPNS Clustering Stuff
 
 // L2TPNS Clustering Stuff
 
-char const *cvs_id_cluster = "$Id: cluster.c,v 1.25 2004-12-16 08:49:53 bodea Exp $";
+char const *cvs_id_cluster = "$Id: cluster.c,v 1.26 2004-12-16 23:40:31 bodea Exp $";
 
 #include <stdio.h>
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <inttypes.h>
 #include <sys/file.h>
 #include <sys/stat.h>
 #include <sys/socket.h>
 #include <sys/file.h>
 #include <sys/stat.h>
 #include <sys/socket.h>
@@ -13,12 +17,7 @@ char const *cvs_id_cluster = "$Id: cluster.c,v 1.25 2004-12-16 08:49:53 bodea Ex
 #include <string.h>
 #include <malloc.h>
 #include <errno.h>
 #include <string.h>
 #include <malloc.h>
 #include <errno.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <stdio.h>
 #include <libcli.h>
 #include <libcli.h>
-#include <inttypes.h>
 
 #include "l2tpns.h"
 #include "cluster.h"
 
 #include "l2tpns.h"
 #include "cluster.h"
@@ -62,7 +61,7 @@ static struct {
 
 static struct {
        in_addr_t peer;
 
 static struct {
        in_addr_t peer;
-       time_t basetime;
+       uint32_t basetime;
        clockt timestamp;
        int uptodate;
 } peers[CLUSTER_MAX_SIZE];     // List of all the peers we've heard from.
        clockt timestamp;
        int uptodate;
 } peers[CLUSTER_MAX_SIZE];     // List of all the peers we've heard from.
@@ -1440,12 +1439,12 @@ int cmd_show_cluster(struct cli_def *cli, char *command, char **argv, int argc)
                                : "Not defined",
                        0.1 * (TIME - config->cluster_last_hb));
                cli_print(cli, "Uptodate         : %s", config->cluster_iam_uptodate ? "Yes" : "No");
                                : "Not defined",
                        0.1 * (TIME - config->cluster_last_hb));
                cli_print(cli, "Uptodate         : %s", config->cluster_iam_uptodate ? "Yes" : "No");
-               cli_print(cli, "Table version #  : %llu", config->cluster_table_version);
+               cli_print(cli, "Table version #  : %" PRIu64, config->cluster_table_version);
                cli_print(cli, "Next sequence number expected: %d", config->cluster_seq_number);
                cli_print(cli, "%d sessions undefined of %d", config->cluster_undefined_sessions, config->cluster_highest_sessionid);
                cli_print(cli, "%d tunnels undefined of %d", config->cluster_undefined_tunnels, config->cluster_highest_tunnelid);
        } else {
                cli_print(cli, "Next sequence number expected: %d", config->cluster_seq_number);
                cli_print(cli, "%d sessions undefined of %d", config->cluster_undefined_sessions, config->cluster_highest_sessionid);
                cli_print(cli, "%d tunnels undefined of %d", config->cluster_undefined_tunnels, config->cluster_highest_tunnelid);
        } else {
-               cli_print(cli, "Table version #  : %llu", config->cluster_table_version);
+               cli_print(cli, "Table version #  : %" PRIu64, config->cluster_table_version);
                cli_print(cli, "Next heartbeat # : %d", config->cluster_seq_number);
                cli_print(cli, "Highest session  : %d", config->cluster_highest_sessionid);
                cli_print(cli, "Highest tunnel   : %d", config->cluster_highest_tunnelid);
                cli_print(cli, "Next heartbeat # : %d", config->cluster_seq_number);
                cli_print(cli, "Highest session  : %d", config->cluster_highest_sessionid);
                cli_print(cli, "Highest tunnel   : %d", config->cluster_highest_tunnelid);
@@ -1456,7 +1455,7 @@ int cmd_show_cluster(struct cli_def *cli, char *command, char **argv, int argc)
        if (num_peers)
                cli_print(cli, "%20s  %10s %8s", "Address", "Basetime", "Age");
        for (i = 0; i < num_peers; ++i) {
        if (num_peers)
                cli_print(cli, "%20s  %10s %8s", "Address", "Basetime", "Age");
        for (i = 0; i < num_peers; ++i) {
-               cli_print(cli, "%20s  %10d %8d", fmtaddr(peers[i].peer, 0),
+               cli_print(cli, "%20s  %10u %8d", fmtaddr(peers[i].peer, 0),
                        peers[i].basetime, TIME - peers[i].timestamp);
        }
        return CLI_OK;
                        peers[i].basetime, TIME - peers[i].timestamp);
        }
        return CLI_OK;
index 618caf1..e7ac01c 100644 (file)
--- a/l2tpns.c
+++ b/l2tpns.c
@@ -4,7 +4,7 @@
 // Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced
 // vim: sw=8 ts=8
 
 // Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced
 // vim: sw=8 ts=8
 
-char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.71 2004-12-16 08:54:16 bodea Exp $";
+char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.72 2004-12-16 23:40:31 bodea Exp $";
 
 #include <arpa/inet.h>
 #include <assert.h>
 
 #include <arpa/inet.h>
 #include <assert.h>
@@ -2346,6 +2346,8 @@ static void mainloop(void)
                n = select(n + 1, &r, 0, 0, &to);
 #endif /* BGP */
 
                n = select(n + 1, &r, 0, 0, &to);
 #endif /* BGP */
 
+               STAT(select_called);
+
                TIME = now();
                if (n < 0)
                {
                TIME = now();
                if (n < 0)
                {
@@ -2365,11 +2367,14 @@ static void mainloop(void)
                        int tun_pkts = 0;
                        int cluster_pkts = 0;
 
                        int tun_pkts = 0;
                        int cluster_pkts = 0;
 
+                       INC_STAT(select_ready, n);
+
                        // nsctl commands
                        if (FD_ISSET(controlfd, &r))
                        {
                                alen = sizeof(addr);
                                processcontrol(buf, recvfrom(controlfd, buf, sizeof(buf), MSG_WAITALL, (void *) &addr, &alen), &addr, alen);
                        // nsctl commands
                        if (FD_ISSET(controlfd, &r))
                        {
                                alen = sizeof(addr);
                                processcontrol(buf, recvfrom(controlfd, buf, sizeof(buf), MSG_WAITALL, (void *) &addr, &alen), &addr, alen);
+                               STAT(select_processed);
                                n--;
                        }
 
                                n--;
                        }
 
@@ -2381,6 +2386,7 @@ static void mainloop(void)
                                        if (FD_ISSET(radfds[i], &r))
                                        {
                                                processrad(buf, recv(radfds[i], buf, sizeof(buf), 0), i);
                                        if (FD_ISSET(radfds[i], &r))
                                        {
                                                processrad(buf, recv(radfds[i], buf, sizeof(buf), 0), i);
+                                               STAT(select_processed);
                                                n--;
                                        }
                                }
                                                n--;
                                        }
                                }
@@ -2400,17 +2406,21 @@ static void mainloop(void)
                                else
                                        LOG(0, 0, 0, "accept error: %s\n", strerror(errno));
 
                                else
                                        LOG(0, 0, 0, "accept error: %s\n", strerror(errno));
 
+                               STAT(select_processed);
                                n--;
                        }
 
 #ifdef BGP
                        for (i = 0; i < BGP_NUM_PEERS; i++)
                        {
                                n--;
                        }
 
 #ifdef BGP
                        for (i = 0; i < BGP_NUM_PEERS; i++)
                        {
-                               int isr = bgp_set[i] ? FD_ISSET(bgp_peers[i].sock, &r) : 0;
-                               int isw = bgp_set[i] ? FD_ISSET(bgp_peers[i].sock, &w) : 0;
+                               int isr = bgp_set[i] ? !!FD_ISSET(bgp_peers[i].sock, &r) : 0;
+                               int isw = bgp_set[i] ? !!FD_ISSET(bgp_peers[i].sock, &w) : 0;
                                bgp_process(&bgp_peers[i], isr, isw);
                                bgp_process(&bgp_peers[i], isr, isw);
-                               if (isr) n--;
-                               if (isw) n--;
+                               if (isr || isw)
+                               {
+                                       INC_STAT(select_processed, isr + isw);
+                                       n -= (isr + isw);
+                               }
                        }
 #endif /* BGP */
 
                        }
 #endif /* BGP */
 
@@ -2423,6 +2433,7 @@ static void mainloop(void)
                                        if ((s = recvfrom(udpfd, buf, sizeof(buf), 0, (void *) &addr, &alen)) > 0)
                                        {
                                                processudp(buf, s, &addr);
                                        if ((s = recvfrom(udpfd, buf, sizeof(buf), 0, (void *) &addr, &alen)) > 0)
                                        {
                                                processudp(buf, s, &addr);
+                                               STAT(select_processed);
                                                udp_pkts++;
                                        }
                                        else
                                                udp_pkts++;
                                        }
                                        else
@@ -2438,6 +2449,7 @@ static void mainloop(void)
                                        if ((s = read(tunfd, buf, sizeof(buf))) > 0)
                                        {
                                                processtun(buf, s);
                                        if ((s = read(tunfd, buf, sizeof(buf))) > 0)
                                        {
                                                processtun(buf, s);
+                                               STAT(select_processed);
                                                tun_pkts++;
                                        }
                                        else
                                                tun_pkts++;
                                        }
                                        else
@@ -2454,6 +2466,7 @@ static void mainloop(void)
                                        if ((s = recvfrom(cluster_sockfd, buf, sizeof(buf), MSG_WAITALL, (void *) &addr, &alen)) > 0)
                                        {
                                                processcluster(buf, s, addr.sin_addr.s_addr);
                                        if ((s = recvfrom(cluster_sockfd, buf, sizeof(buf), MSG_WAITALL, (void *) &addr, &alen)) > 0)
                                        {
                                                processcluster(buf, s, addr.sin_addr.s_addr);
+                                               STAT(select_processed);
                                                cluster_pkts++;
                                        }
                                        else
                                                cluster_pkts++;
                                        }
                                        else
index 8342002..1918cff 100644 (file)
--- a/l2tpns.h
+++ b/l2tpns.h
@@ -1,5 +1,5 @@
 // L2TPNS Global Stuff
 // L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.47 2004-12-16 08:49:53 bodea Exp $
+// $Id: l2tpns.h,v 1.48 2004-12-16 23:40:31 bodea Exp $
 
 #ifndef __L2TPNS_H__
 #define __L2TPNS_H__
 
 #ifndef __L2TPNS_H__
 #define __L2TPNS_H__
@@ -307,71 +307,76 @@ enum
 
 struct Tstats
 {
 
 struct Tstats
 {
-    time_t             start_time;
-    time_t             last_reset;
-
-    unsigned long      tun_rx_packets;
-    unsigned long      tun_tx_packets;
-    unsigned long      tun_rx_bytes;
-    unsigned long      tun_tx_bytes;
-    unsigned long      tun_rx_errors;
-    unsigned long      tun_tx_errors;
-
-    unsigned long      tunnel_rx_packets;
-    unsigned long      tunnel_tx_packets;
-    unsigned long      tunnel_rx_bytes;
-    unsigned long      tunnel_tx_bytes;
-    unsigned long      tunnel_rx_errors;
-    unsigned long      tunnel_tx_errors;
-
-    unsigned long      tunnel_retries;
-    unsigned long      radius_retries;
-
-    unsigned long      arp_sent;
-
-    unsigned long      packets_snooped;
-
-    unsigned long      tunnel_created;
-    unsigned long      session_created;
-    unsigned long      tunnel_timeout;
-    unsigned long      session_timeout;
-    unsigned long      radius_timeout;
-    unsigned long      radius_overflow;
-    unsigned long      tunnel_overflow;
-    unsigned long      session_overflow;
-
-    unsigned long      ip_allocated;
-    unsigned long      ip_freed;
-
-    unsigned long      c_forwarded;
-    unsigned long      recv_forward;
+    time_t     start_time;
+    time_t     last_reset;
+
+    uint32_t   tun_rx_packets;
+    uint32_t   tun_tx_packets;
+    uint32_t   tun_rx_bytes;
+    uint32_t   tun_tx_bytes;
+    uint32_t   tun_rx_errors;
+    uint32_t   tun_tx_errors;
+
+    uint32_t   tunnel_rx_packets;
+    uint32_t   tunnel_tx_packets;
+    uint32_t   tunnel_rx_bytes;
+    uint32_t   tunnel_tx_bytes;
+    uint32_t   tunnel_rx_errors;
+    uint32_t   tunnel_tx_errors;
+
+    uint32_t   tunnel_retries;
+    uint32_t   radius_retries;
+
+    uint32_t   arp_sent;
+
+    uint32_t   packets_snooped;
+
+    uint32_t   tunnel_created;
+    uint32_t   session_created;
+    uint32_t   tunnel_timeout;
+    uint32_t   session_timeout;
+    uint32_t   radius_timeout;
+    uint32_t   radius_overflow;
+    uint32_t   tunnel_overflow;
+    uint32_t   session_overflow;
+
+    uint32_t   ip_allocated;
+    uint32_t   ip_freed;
+
+    uint32_t   c_forwarded;
+    uint32_t   recv_forward;
+
+    uint32_t   select_called;          // number of times select called
+    uint32_t   select_ready;           // number of fds returned by select
+    uint32_t   select_processed;       // number of read/writes handled per select
+
 #ifdef STATISTICS
 #ifdef STATISTICS
-    unsigned long      call_processtun;
-    unsigned long      call_processipout;
-    unsigned long      call_processudp;
-    unsigned long      call_sessionbyip;
-    unsigned long      call_sessionbyuser;
-    unsigned long      call_sendarp;
-    unsigned long      call_sendipcp;
-    unsigned long      call_tunnelsend;
-    unsigned long      call_sessionkill;
-    unsigned long      call_sessionshutdown;
-    unsigned long      call_tunnelkill;
-    unsigned long      call_tunnelshutdown;
-    unsigned long      call_assign_ip_address;
-    unsigned long      call_free_ip_address;
-    unsigned long      call_dump_acct_info;
-    unsigned long      call_sessionsetup;
-    unsigned long      call_processpap;
-    unsigned long      call_processchap;
-    unsigned long      call_processlcp;
-    unsigned long      call_processipcp;
-    unsigned long      call_processipin;
-    unsigned long      call_processccp;
-    unsigned long      call_sendchap;
-    unsigned long      call_processrad;
-    unsigned long      call_radiussend;
-    unsigned long      call_radiusretry;
+    uint32_t   call_processtun;
+    uint32_t   call_processipout;
+    uint32_t   call_processudp;
+    uint32_t   call_sessionbyip;
+    uint32_t   call_sessionbyuser;
+    uint32_t   call_sendarp;
+    uint32_t   call_sendipcp;
+    uint32_t   call_tunnelsend;
+    uint32_t   call_sessionkill;
+    uint32_t   call_sessionshutdown;
+    uint32_t   call_tunnelkill;
+    uint32_t   call_tunnelshutdown;
+    uint32_t   call_assign_ip_address;
+    uint32_t   call_free_ip_address;
+    uint32_t   call_dump_acct_info;
+    uint32_t   call_sessionsetup;
+    uint32_t   call_processpap;
+    uint32_t   call_processchap;
+    uint32_t   call_processlcp;
+    uint32_t   call_processipcp;
+    uint32_t   call_processipin;
+    uint32_t   call_processccp;
+    uint32_t   call_sendchap;
+    uint32_t   call_processrad;
+    uint32_t   call_radiussend;
+    uint32_t   call_radiusretry;
 #endif
 };
 
 #endif
 };
 
index 8c70aa0..3cb0c8b 100644 (file)
@@ -43,5 +43,5 @@ rm -rf %{buildroot}
 %attr(644,root,root) /usr/share/man/man[58]/*
 
 %changelog
 %attr(644,root,root) /usr/share/man/man[58]/*
 
 %changelog
-* Thu Dec 16 2004 Brendan O'Dea <bod@optusnet.com.au> 2.0.13-1
+* Fri Dec 17 2004 Brendan O'Dea <bod@optusnet.com.au> 2.0.13-1
 - 2.0.13 release, see /usr/share/doc/l2tpns-2.0.13/Changes
 - 2.0.13 release, see /usr/share/doc/l2tpns-2.0.13/Changes