// L2TPNS Clustering Stuff
-char const *cvs_id_cluster = "$Id: cluster.c,v 1.53 2006/07/17 07:53:08 bodea Exp $";
+char const *cvs_id_cluster = "$Id: cluster.c,v 1.55 2009/12/08 14:49:28 bodea Exp $";
#include <stdio.h>
#include <stdlib.h>
x.ver = 1;
x.addr = config->bind_address;
- x.undef = config->cluster_undefined_sessions + config->cluster_undefined_tunnels;
+ x.undef = config->cluster_undefined_sessions + config->cluster_undefined_tunnels + config->cluster_undefined_bundles;
x.basetime = basetime;
add_type(&p, C_PING, basetime, (uint8_t *) &x, sizeof(x));
//
void cluster_check_master(void)
{
- int i, count, tcount, bcount, high_unique_id = 0;
+ int i, count, high_unique_id = 0;
int last_free = 0;
clockt t = TIME;
static int probed = 0;
// Count the highest used tunnel number as well.
//
config->cluster_highest_tunnelid = 0;
- for (i = 0, tcount = 0; i < MAXTUNNEL; ++i) {
+ for (i = 0; i < MAXTUNNEL; ++i) {
if (tunnel[i].state == TUNNELUNDEF)
tunnel[i].state = TUNNELFREE;
// Count the highest used bundle number as well.
//
config->cluster_highest_bundleid = 0;
- for (i = 0, bcount = 0; i < MAXBUNDLE; ++i) {
+ for (i = 0; i < MAXBUNDLE; ++i) {
if (bundle[i].state == BUNDLEUNDEF)
bundle[i].state = BUNDLEFREE;
if (bcount >= config->cluster_highest_bundleid)
break;
- hb_add_type(&p, C_CTUNNEL, walk_bundle_number);
- walk_tunnel_number = (1+walk_bundle_number)%(config->cluster_highest_bundleid+1); // +1 avoids divide by zero.
-
+ hb_add_type(&p, C_CBUNDLE, walk_bundle_number);
+ walk_bundle_number = (1+walk_bundle_number)%(config->cluster_highest_bundleid+1); // +1 avoids divide by zero.
++bcount;
}
return -1; // Ignore it??
}
- // Ok. It's a heartbeat packet from a cluster master!
+ if (size > sizeof(past_hearts[0].data)) {
+ LOG(0, 0, 0, "Received an oversize heartbeat from %s (%d)!\n", fmtaddr(addr, 0), size);
+ return -1;
+ }
+
if (s < sizeof(*h))
goto shortpacket;