add counters for select_called, select_ready and select_processed

fix cli_print format strings
This commit is contained in:
bodea 2004-12-16 23:40:30 +00:00
parent 9504bc0efb
commit 4d7d7850b5
6 changed files with 153 additions and 132 deletions

View file

@ -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 - Better cluster master collision resolution: keep a counter of state
changes, propagated in the heartbeats; the master with the highest # changes, propagated in the heartbeats; the master with the highest #
of changes (that has kept in contact with the LAC through the of changes (that has kept in contact with the LAC through the
@ -10,6 +10,7 @@
startup-config (from Jonathan's Debian package patches). startup-config (from Jonathan's Debian package patches).
- Read multiple packets off cluster_sockfd as well as udpfd, tunfd in an - Read multiple packets off cluster_sockfd as well as udpfd, tunfd in an
attempt to avoid losing the cluster in high load (DoS) conditions. attempt to avoid losing the cluster in high load (DoS) conditions.
- Add counters for select_called, select_ready and select_processed.
- Compress logs. - Compress logs.
- Retain counters of shutdown sessions to dump once per minute. - Retain counters of shutdown sessions to dump once per minute.
- Use standard uintN_t types for portability. - Use standard uintN_t types for portability.

119
cli.c
View file

@ -2,10 +2,11 @@
// vim: sw=8 ts=8 // vim: sw=8 ts=8
char const *cvs_name = "$Name: $"; 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 <stdio.h>
#include <stdarg.h> #include <stdarg.h>
#include <unistd.h>
#include <sys/file.h> #include <sys/file.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <syslog.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/socket.h>
#include <sys/types.h> #include <sys/types.h>
#include <signal.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 "l2tpns.h"
#include "util.h" #include "util.h"
#include "cluster.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, "\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 Recv:\t%u", session[s].nr);
cli_print(cli, "\tNext Send:\t%u", session[s].ns); 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, "\tBytes In/Out:\t%u/%u", session[s].total_cout, 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, "\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, "\tMRU:\t\t%d", session[s].mru);
cli_print(cli, "\tRadius Session:\t%u", session[s].radius); 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, "\tRx Speed:\t%u", session[s].rx_connect_speed);
cli_print(cli, "\tTx Speed:\t%lu", session[s].tx_connect_speed); cli_print(cli, "\tTx Speed:\t%u", session[s].tx_connect_speed);
if (session[s].filter_in && session[s].filter_in <= 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); 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_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; return CLI_HELP_NO_ARGS;
cli_print(cli, "%-10s %-8s %-10s %-8s", "Ethernet", "Bytes", "Packets", "Errors"); 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_bytes),
GET_STAT(tun_rx_packets), GET_STAT(tun_rx_packets),
GET_STAT(tun_rx_errors)); 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_bytes),
GET_STAT(tun_tx_packets), GET_STAT(tun_tx_packets),
GET_STAT(tun_tx_errors)); GET_STAT(tun_tx_errors));
cli_print(cli, ""); cli_print(cli, "");
cli_print(cli, "%-10s %-8s %-10s %-8s %-8s", "Tunnel", "Bytes", "Packets", "Errors", "Retries"); 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_bytes),
GET_STAT(tunnel_rx_packets), GET_STAT(tunnel_rx_packets),
GET_STAT(tunnel_rx_errors), GET_STAT(tunnel_rx_errors));
0L); cli_print(cli, "%-10s %8u %8u %8u %8u", "TX",
cli_print(cli, "%-10s %8lu %8lu %8lu %8lu", "TX",
GET_STAT(tunnel_tx_bytes), GET_STAT(tunnel_tx_bytes),
GET_STAT(tunnel_tx_packets), GET_STAT(tunnel_tx_packets),
GET_STAT(tunnel_tx_errors), 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, "%-30s%-10s", "Counter", "Value");
cli_print(cli, "-----------------------------------------"); cli_print(cli, "-----------------------------------------");
cli_print(cli, "%-30s%lu", "radius_retries", GET_STAT(radius_retries)); cli_print(cli, "%-30s%u", "radius_retries", GET_STAT(radius_retries));
cli_print(cli, "%-30s%lu", "arp_sent", GET_STAT(arp_sent)); cli_print(cli, "%-30s%u", "arp_sent", GET_STAT(arp_sent));
cli_print(cli, "%-30s%lu", "packets_snooped", GET_STAT(packets_snooped)); cli_print(cli, "%-30s%u", "packets_snooped", GET_STAT(packets_snooped));
cli_print(cli, "%-30s%lu", "tunnel_created", GET_STAT(tunnel_created)); cli_print(cli, "%-30s%u", "tunnel_created", GET_STAT(tunnel_created));
cli_print(cli, "%-30s%lu", "session_created", GET_STAT(session_created)); cli_print(cli, "%-30s%u", "session_created", GET_STAT(session_created));
cli_print(cli, "%-30s%lu", "tunnel_timeout", GET_STAT(tunnel_timeout)); cli_print(cli, "%-30s%u", "tunnel_timeout", GET_STAT(tunnel_timeout));
cli_print(cli, "%-30s%lu", "session_timeout", GET_STAT(session_timeout)); cli_print(cli, "%-30s%u", "session_timeout", GET_STAT(session_timeout));
cli_print(cli, "%-30s%lu", "radius_timeout", GET_STAT(radius_timeout)); cli_print(cli, "%-30s%u", "radius_timeout", GET_STAT(radius_timeout));
cli_print(cli, "%-30s%lu", "radius_overflow", GET_STAT(radius_overflow)); cli_print(cli, "%-30s%u", "radius_overflow", GET_STAT(radius_overflow));
cli_print(cli, "%-30s%lu", "tunnel_overflow", GET_STAT(tunnel_overflow)); cli_print(cli, "%-30s%u", "tunnel_overflow", GET_STAT(tunnel_overflow));
cli_print(cli, "%-30s%lu", "session_overflow", GET_STAT(session_overflow)); cli_print(cli, "%-30s%u", "session_overflow", GET_STAT(session_overflow));
cli_print(cli, "%-30s%lu", "ip_allocated", GET_STAT(ip_allocated)); cli_print(cli, "%-30s%u", "ip_allocated", GET_STAT(ip_allocated));
cli_print(cli, "%-30s%lu", "ip_freed", GET_STAT(ip_freed)); cli_print(cli, "%-30s%u", "ip_freed", GET_STAT(ip_freed));
cli_print(cli, "%-30s%lu", "cluster_forwarded", GET_STAT(c_forwarded)); cli_print(cli, "%-30s%u", "cluster_forwarded", GET_STAT(c_forwarded));
cli_print(cli, "%-30s%lu", "recv_forward", GET_STAT(recv_forward)); 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 #ifdef STATISTICS
cli_print(cli, "\n%-30s%-10s", "Counter", "Value"); cli_print(cli, "\n%-30s%-10s", "Counter", "Value");
cli_print(cli, "-----------------------------------------"); cli_print(cli, "-----------------------------------------");
cli_print(cli, "%-30s%lu", "call_processtun", GET_STAT(call_processtun)); cli_print(cli, "%-30s%u", "call_processtun", GET_STAT(call_processtun));
cli_print(cli, "%-30s%lu", "call_processipout", GET_STAT(call_processipout)); cli_print(cli, "%-30s%u", "call_processipout", GET_STAT(call_processipout));
cli_print(cli, "%-30s%lu", "call_processudp", GET_STAT(call_processudp)); cli_print(cli, "%-30s%u", "call_processudp", GET_STAT(call_processudp));
cli_print(cli, "%-30s%lu", "call_processpap", GET_STAT(call_processpap)); cli_print(cli, "%-30s%u", "call_processpap", GET_STAT(call_processpap));
cli_print(cli, "%-30s%lu", "call_processchap", GET_STAT(call_processchap)); cli_print(cli, "%-30s%u", "call_processchap", GET_STAT(call_processchap));
cli_print(cli, "%-30s%lu", "call_processlcp", GET_STAT(call_processlcp)); cli_print(cli, "%-30s%u", "call_processlcp", GET_STAT(call_processlcp));
cli_print(cli, "%-30s%lu", "call_processipcp", GET_STAT(call_processipcp)); cli_print(cli, "%-30s%u", "call_processipcp", GET_STAT(call_processipcp));
cli_print(cli, "%-30s%lu", "call_processipin", GET_STAT(call_processipin)); cli_print(cli, "%-30s%u", "call_processipin", GET_STAT(call_processipin));
cli_print(cli, "%-30s%lu", "call_processccp", GET_STAT(call_processccp)); cli_print(cli, "%-30s%u", "call_processccp", GET_STAT(call_processccp));
cli_print(cli, "%-30s%lu", "call_processrad", GET_STAT(call_processrad)); cli_print(cli, "%-30s%u", "call_processrad", GET_STAT(call_processrad));
cli_print(cli, "%-30s%lu", "call_sendarp", GET_STAT(call_sendarp)); cli_print(cli, "%-30s%u", "call_sendarp", GET_STAT(call_sendarp));
cli_print(cli, "%-30s%lu", "call_sendipcp", GET_STAT(call_sendipcp)); cli_print(cli, "%-30s%u", "call_sendipcp", GET_STAT(call_sendipcp));
cli_print(cli, "%-30s%lu", "call_sendchap", GET_STAT(call_sendchap)); cli_print(cli, "%-30s%u", "call_sendchap", GET_STAT(call_sendchap));
cli_print(cli, "%-30s%lu", "call_sessionbyip", GET_STAT(call_sessionbyip)); cli_print(cli, "%-30s%u", "call_sessionbyip", GET_STAT(call_sessionbyip));
cli_print(cli, "%-30s%lu", "call_sessionbyuser", GET_STAT(call_sessionbyuser)); cli_print(cli, "%-30s%u", "call_sessionbyuser", GET_STAT(call_sessionbyuser));
cli_print(cli, "%-30s%lu", "call_tunnelsend", GET_STAT(call_tunnelsend)); cli_print(cli, "%-30s%u", "call_tunnelsend", GET_STAT(call_tunnelsend));
cli_print(cli, "%-30s%lu", "call_tunnelkill", GET_STAT(call_tunnelkill)); cli_print(cli, "%-30s%u", "call_tunnelkill", GET_STAT(call_tunnelkill));
cli_print(cli, "%-30s%lu", "call_tunnelshutdown", GET_STAT(call_tunnelshutdown)); cli_print(cli, "%-30s%u", "call_tunnelshutdown", GET_STAT(call_tunnelshutdown));
cli_print(cli, "%-30s%lu", "call_sessionkill", GET_STAT(call_sessionkill)); cli_print(cli, "%-30s%u", "call_sessionkill", GET_STAT(call_sessionkill));
cli_print(cli, "%-30s%lu", "call_sessionshutdown", GET_STAT(call_sessionshutdown)); cli_print(cli, "%-30s%u", "call_sessionshutdown", GET_STAT(call_sessionshutdown));
cli_print(cli, "%-30s%lu", "call_sessionsetup", GET_STAT(call_sessionsetup)); cli_print(cli, "%-30s%u", "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%u", "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%u", "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%u", "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%u", "call_radiussend", GET_STAT(call_radiussend));
cli_print(cli, "%-30s%lu", "call_radiusretry", GET_STAT(call_radiusretry)); cli_print(cli, "%-30s%u", "call_radiusretry", GET_STAT(call_radiusretry));
#endif #endif
return CLI_OK; return CLI_OK;
} }
@ -754,7 +757,7 @@ static int cmd_show_version(struct cli_def *cli, char *command, char **argv, int
p = "HEAD"; p = "HEAD";
e = strpbrk(p, " \t$"); 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) if (ip_address_pool[i].last)
cli_print(cli, "%-15s\tN %8s [%s] %ds", cli_print(cli, "%-15s\tN %8s [%s] %ds",
fmtaddr(htonl(ip_address_pool[i].address), 0), "", 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) else if (show_all)
cli_print(cli, "%-15s\tN", fmtaddr(htonl(ip_address_pool[i].address), 0)); 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], debug_levels[(int)ringbuffer->buffer[i].level],
ringbuffer->buffer[i].tunnel, ringbuffer->buffer[i].tunnel,
ringbuffer->buffer[i].session, 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].name,
bgp_peers[i].as, bgp_peers[i].as,
addr, addr,

View file

@ -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/file.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/socket.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 <string.h>
#include <malloc.h> #include <malloc.h>
#include <errno.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 "l2tpns.h"
#include "cluster.h" #include "cluster.h"
@ -62,7 +61,7 @@ static struct {
static struct { static struct {
in_addr_t peer; in_addr_t peer;
time_t basetime; uint32_t basetime;
clockt timestamp; clockt timestamp;
int uptodate; int uptodate;
} peers[CLUSTER_MAX_SIZE]; // List of all the peers we've heard from. } 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", : "Not defined",
0.1 * (TIME - config->cluster_last_hb)); 0.1 * (TIME - config->cluster_last_hb));
cli_print(cli, "Uptodate : %s", config->cluster_iam_uptodate ? "Yes" : "No"); 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, "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 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); cli_print(cli, "%d tunnels undefined of %d", config->cluster_undefined_tunnels, config->cluster_highest_tunnelid);
} else { } 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, "Next heartbeat # : %d", config->cluster_seq_number);
cli_print(cli, "Highest session : %d", config->cluster_highest_sessionid); cli_print(cli, "Highest session : %d", config->cluster_highest_sessionid);
cli_print(cli, "Highest tunnel : %d", config->cluster_highest_tunnelid); 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) if (num_peers)
cli_print(cli, "%20s %10s %8s", "Address", "Basetime", "Age"); cli_print(cli, "%20s %10s %8s", "Address", "Basetime", "Age");
for (i = 0; i < num_peers; ++i) { 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); peers[i].basetime, TIME - peers[i].timestamp);
} }
return CLI_OK; return CLI_OK;

View file

@ -4,7 +4,7 @@
// Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced // Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced
// vim: sw=8 ts=8 // 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 <arpa/inet.h>
#include <assert.h> #include <assert.h>
@ -2346,6 +2346,8 @@ static void mainloop(void)
n = select(n + 1, &r, 0, 0, &to); n = select(n + 1, &r, 0, 0, &to);
#endif /* BGP */ #endif /* BGP */
STAT(select_called);
TIME = now(); TIME = now();
if (n < 0) if (n < 0)
{ {
@ -2365,11 +2367,14 @@ static void mainloop(void)
int tun_pkts = 0; int tun_pkts = 0;
int cluster_pkts = 0; int cluster_pkts = 0;
INC_STAT(select_ready, n);
// nsctl commands // nsctl commands
if (FD_ISSET(controlfd, &r)) if (FD_ISSET(controlfd, &r))
{ {
alen = sizeof(addr); alen = sizeof(addr);
processcontrol(buf, recvfrom(controlfd, buf, sizeof(buf), MSG_WAITALL, (void *) &addr, &alen), &addr, alen); 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)) if (FD_ISSET(radfds[i], &r))
{ {
processrad(buf, recv(radfds[i], buf, sizeof(buf), 0), i); processrad(buf, recv(radfds[i], buf, sizeof(buf), 0), i);
STAT(select_processed);
n--; n--;
} }
} }
@ -2400,17 +2406,21 @@ static void mainloop(void)
else else
LOG(0, 0, 0, "accept error: %s\n", strerror(errno)); LOG(0, 0, 0, "accept error: %s\n", strerror(errno));
STAT(select_processed);
n--; n--;
} }
#ifdef BGP #ifdef BGP
for (i = 0; i < BGP_NUM_PEERS; i++) for (i = 0; i < BGP_NUM_PEERS; i++)
{ {
int isr = bgp_set[i] ? FD_ISSET(bgp_peers[i].sock, &r) : 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; 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 (isr || isw)
if (isw) n--; {
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) if ((s = recvfrom(udpfd, buf, sizeof(buf), 0, (void *) &addr, &alen)) > 0)
{ {
processudp(buf, s, &addr); processudp(buf, s, &addr);
STAT(select_processed);
udp_pkts++; udp_pkts++;
} }
else else
@ -2438,6 +2449,7 @@ static void mainloop(void)
if ((s = read(tunfd, buf, sizeof(buf))) > 0) if ((s = read(tunfd, buf, sizeof(buf))) > 0)
{ {
processtun(buf, s); processtun(buf, s);
STAT(select_processed);
tun_pkts++; tun_pkts++;
} }
else else
@ -2454,6 +2466,7 @@ static void mainloop(void)
if ((s = recvfrom(cluster_sockfd, buf, sizeof(buf), MSG_WAITALL, (void *) &addr, &alen)) > 0) if ((s = recvfrom(cluster_sockfd, buf, sizeof(buf), MSG_WAITALL, (void *) &addr, &alen)) > 0)
{ {
processcluster(buf, s, addr.sin_addr.s_addr); processcluster(buf, s, addr.sin_addr.s_addr);
STAT(select_processed);
cluster_pkts++; cluster_pkts++;
} }
else else

115
l2tpns.h
View file

@ -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__ #ifndef __L2TPNS_H__
#define __L2TPNS_H__ #define __L2TPNS_H__
@ -310,68 +310,73 @@ struct Tstats
time_t start_time; time_t start_time;
time_t last_reset; time_t last_reset;
unsigned long tun_rx_packets; uint32_t tun_rx_packets;
unsigned long tun_tx_packets; uint32_t tun_tx_packets;
unsigned long tun_rx_bytes; uint32_t tun_rx_bytes;
unsigned long tun_tx_bytes; uint32_t tun_tx_bytes;
unsigned long tun_rx_errors; uint32_t tun_rx_errors;
unsigned long tun_tx_errors; uint32_t tun_tx_errors;
unsigned long tunnel_rx_packets; uint32_t tunnel_rx_packets;
unsigned long tunnel_tx_packets; uint32_t tunnel_tx_packets;
unsigned long tunnel_rx_bytes; uint32_t tunnel_rx_bytes;
unsigned long tunnel_tx_bytes; uint32_t tunnel_tx_bytes;
unsigned long tunnel_rx_errors; uint32_t tunnel_rx_errors;
unsigned long tunnel_tx_errors; uint32_t tunnel_tx_errors;
unsigned long tunnel_retries; uint32_t tunnel_retries;
unsigned long radius_retries; uint32_t radius_retries;
unsigned long arp_sent; uint32_t arp_sent;
unsigned long packets_snooped; uint32_t packets_snooped;
unsigned long tunnel_created; uint32_t tunnel_created;
unsigned long session_created; uint32_t session_created;
unsigned long tunnel_timeout; uint32_t tunnel_timeout;
unsigned long session_timeout; uint32_t session_timeout;
unsigned long radius_timeout; uint32_t radius_timeout;
unsigned long radius_overflow; uint32_t radius_overflow;
unsigned long tunnel_overflow; uint32_t tunnel_overflow;
unsigned long session_overflow; uint32_t session_overflow;
unsigned long ip_allocated; uint32_t ip_allocated;
unsigned long ip_freed; 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
unsigned long c_forwarded;
unsigned long recv_forward;
#ifdef STATISTICS #ifdef STATISTICS
unsigned long call_processtun; uint32_t call_processtun;
unsigned long call_processipout; uint32_t call_processipout;
unsigned long call_processudp; uint32_t call_processudp;
unsigned long call_sessionbyip; uint32_t call_sessionbyip;
unsigned long call_sessionbyuser; uint32_t call_sessionbyuser;
unsigned long call_sendarp; uint32_t call_sendarp;
unsigned long call_sendipcp; uint32_t call_sendipcp;
unsigned long call_tunnelsend; uint32_t call_tunnelsend;
unsigned long call_sessionkill; uint32_t call_sessionkill;
unsigned long call_sessionshutdown; uint32_t call_sessionshutdown;
unsigned long call_tunnelkill; uint32_t call_tunnelkill;
unsigned long call_tunnelshutdown; uint32_t call_tunnelshutdown;
unsigned long call_assign_ip_address; uint32_t call_assign_ip_address;
unsigned long call_free_ip_address; uint32_t call_free_ip_address;
unsigned long call_dump_acct_info; uint32_t call_dump_acct_info;
unsigned long call_sessionsetup; uint32_t call_sessionsetup;
unsigned long call_processpap; uint32_t call_processpap;
unsigned long call_processchap; uint32_t call_processchap;
unsigned long call_processlcp; uint32_t call_processlcp;
unsigned long call_processipcp; uint32_t call_processipcp;
unsigned long call_processipin; uint32_t call_processipin;
unsigned long call_processccp; uint32_t call_processccp;
unsigned long call_sendchap; uint32_t call_sendchap;
unsigned long call_processrad; uint32_t call_processrad;
unsigned long call_radiussend; uint32_t call_radiussend;
unsigned long call_radiusretry; uint32_t call_radiusretry;
#endif #endif
}; };

View file

@ -43,5 +43,5 @@ rm -rf %{buildroot}
%attr(644,root,root) /usr/share/man/man[58]/* %attr(644,root,root) /usr/share/man/man[58]/*
%changelog %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