Fix whitespace errors in ppp.c and radius.c
[l2tpns.git] / cluster.c
index abe2a63..f5e6de8 100644 (file)
--- a/cluster.c
+++ b/cluster.c
@@ -1,6 +1,6 @@
 // L2TPNS Clustering Stuff
 
 // L2TPNS Clustering Stuff
 
-char const *cvs_id_cluster = "$Id: cluster.c,v 1.51 2006/04/27 09:53:49 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>
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -402,7 +402,7 @@ void cluster_send_ping(time_t basetime)
 
        x.ver = 1;
        x.addr = config->bind_address;
 
        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));
        x.basetime = basetime;
 
        add_type(&p, C_PING, basetime, (uint8_t *) &x, sizeof(x));
@@ -522,7 +522,7 @@ void cluster_check_slaves(void)
 //
 void cluster_check_master(void)
 {
 //
 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;
        int last_free = 0;
        clockt t = TIME;
        static int probed = 0;
@@ -608,7 +608,7 @@ void cluster_check_master(void)
                // Count the highest used tunnel number as well.
                //
        config->cluster_highest_tunnelid = 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;
 
                if (tunnel[i].state == TUNNELUNDEF)
                        tunnel[i].state = TUNNELFREE;
 
@@ -621,7 +621,7 @@ void cluster_check_master(void)
                 // Count the highest used bundle number as well.
                 //
         config->cluster_highest_bundleid = 0;
                 // 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 (bundle[i].state == BUNDLEUNDEF)
                         bundle[i].state = BUNDLEFREE;
 
@@ -654,7 +654,7 @@ void cluster_check_master(void)
                }
 
                        // Reset idle timeouts..
                }
 
                        // Reset idle timeouts..
-               session[i].last_packet = time_now;
+               session[i].last_packet = session[i].last_data = time_now;
 
                        // Reset die relative to our uptime rather than the old master's
                if (session[i].die) session[i].die = TIME;
 
                        // Reset die relative to our uptime rather than the old master's
                if (session[i].die) session[i].die = TIME;
@@ -940,9 +940,8 @@ void cluster_heartbeat()
                if (bcount >= config->cluster_highest_bundleid)
                        break;
 
                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;
         }
 
                ++bcount;
         }
 
@@ -1214,7 +1213,9 @@ static int cluster_handle_bytes(uint8_t *data, int size)
                session[b->sid].cout_delta += b->cout;
 
                if (b->cin)
                session[b->sid].cout_delta += b->cout;
 
                if (b->cin)
-                       session[b->sid].last_packet = time_now; // Reset idle timer!
+                       session[b->sid].last_packet = session[b->sid].last_data = time_now;
+               else if (b->cout)
+                       session[b->sid].last_data = time_now;
 
                size -= sizeof(*b);
                ++b;
 
                size -= sizeof(*b);
                ++b;
@@ -1451,7 +1452,11 @@ static int cluster_process_heartbeat(uint8_t *data, int size, int more, uint8_t
                return -1; // Ignore it??
        }
 
                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;
 
        if (s < sizeof(*h))
                goto shortpacket;
 
@@ -1768,7 +1773,7 @@ int processcluster(uint8_t *data, int size, in_addr_t addr)
        case C_FORWARD_DAE: // Forwarded DAE packet. pass off to processdae.
                if (!config->cluster_iam_master)
                {
        case C_FORWARD_DAE: // Forwarded DAE packet. pass off to processdae.
                if (!config->cluster_iam_master)
                {
-                       LOG(0, 0, 0, "I'm not the master, but I got a C_FORWARD_%s from %s?\n",
+                       LOG(0, 0, 0, "I'm not the master, but I got a C_FORWARD%s from %s?\n",
                                type == C_FORWARD_DAE ? "_DAE" : "", fmtaddr(addr, 0));
 
                        return -1;
                                type == C_FORWARD_DAE ? "_DAE" : "", fmtaddr(addr, 0));
 
                        return -1;