// 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.72 2004-12-16 23:40:31 bodea Exp $";
+char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.74 2004-12-18 01:20:05 bodea Exp $";
#include <arpa/inet.h>
#include <assert.h>
CONFIG("log_file", log_filename, STRING),
CONFIG("pid_file", pid_file, STRING),
CONFIG("l2tp_secret", l2tpsecret, STRING),
- CONFIG("primary_dns", default_dns1, IP),
- CONFIG("secondary_dns", default_dns2, IP),
+ CONFIG("primary_dns", default_dns1, IPv4),
+ CONFIG("secondary_dns", default_dns2, IPv4),
CONFIG("save_state", save_state, BOOL),
- CONFIG("primary_radius", radiusserver[0], IP),
- CONFIG("secondary_radius", radiusserver[1], IP),
+ CONFIG("primary_radius", radiusserver[0], IPv4),
+ CONFIG("secondary_radius", radiusserver[1], IPv4),
CONFIG("primary_radius_port", radiusport[0], SHORT),
CONFIG("secondary_radius_port", radiusport[1], SHORT),
CONFIG("radius_accounting", radius_accounting, BOOL),
CONFIG("radius_secret", radiussecret, STRING),
- CONFIG("bind_address", bind_address, IP),
- CONFIG("peer_address", peer_address, IP),
+ CONFIG("bind_address", bind_address, IPv4),
+ CONFIG("peer_address", peer_address, IPv4),
CONFIG("send_garp", send_garp, BOOL),
CONFIG("throttle_speed", rl_rate, UNSIGNED_LONG),
CONFIG("throttle_buckets", num_tbfs, INT),
CONFIG("scheduler_fifo", scheduler_fifo, BOOL),
CONFIG("lock_pages", lock_pages, BOOL),
CONFIG("icmp_rate", icmp_rate, INT),
- CONFIG("cluster_address", cluster_address, IP),
+ CONFIG("cluster_address", cluster_address, IPv4),
CONFIG("cluster_interface", cluster_interface, STRING),
CONFIG("cluster_hb_interval", cluster_hb_interval, INT),
CONFIG("cluster_hb_timeout", cluster_hb_timeout, INT),
return;
}
- if (*(uint16_t *) (buf + 2) == htons(PKTIP)) // IP
+ if (*(uint16_t *) (buf + 2) == htons(PKTIP)) // IPv4
processipout(buf, len);
// Else discard.
}
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);
- STAT(select_processed);
n--;
}
if (FD_ISSET(radfds[i], &r))
{
processrad(buf, recv(radfds[i], buf, sizeof(buf), 0), i);
- STAT(select_processed);
n--;
}
}
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++)
{
- 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);
- if (isr || isw)
- {
- INC_STAT(select_processed, isr + isw);
- n -= (isr + isw);
- }
+ if (isr) n--;
+ if (isw) n--;
}
#endif /* BGP */
if ((s = recvfrom(udpfd, buf, sizeof(buf), 0, (void *) &addr, &alen)) > 0)
{
processudp(buf, s, &addr);
- STAT(select_processed);
udp_pkts++;
}
else
if ((s = read(tunfd, buf, sizeof(buf))) > 0)
{
processtun(buf, s);
- STAT(select_processed);
tun_pkts++;
}
else
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
}
}
+ if (udp_pkts > 1 || tun_pkts > 1 || cluster_pkts > 1)
+ STAT(multi_read_used);
+
if (c >= config->multi_read_count)
+ {
LOG(3, 0, 0, "Reached multi_read_count (%d); processed %d udp, %d tun and %d cluster packets\n",
config->multi_read_count, udp_pkts, tun_pkts, cluster_pkts);
+
+ STAT(multi_read_exceeded);
+ }
}
// Runs on every machine (master and slaves).