add throttle_buckets
[l2tpns.git] / cluster.c
index 4348b5a..2c8da60 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.10 2004/08/02 06:06:28 fred_nerk Exp $";
+char const *cvs_id_cluster = "$Id: cluster.c,v 1.13 2004/10/29 04:25:40 bodea Exp $";
 
 #include <stdio.h>
 #include <sys/file.h>
 
 #include <stdio.h>
 #include <sys/file.h>
@@ -115,12 +115,12 @@ int cluster_init()
        memcpy(&interface_addr, &ifr.ifr_addr, sizeof(interface_addr));
        my_address = interface_addr.sin_addr.s_addr;
 
        memcpy(&interface_addr, &ifr.ifr_addr, sizeof(interface_addr));
        my_address = interface_addr.sin_addr.s_addr;
 
-                               // Join multicast group.
+       // Join multicast group.
        mreq.imr_multiaddr.s_addr = config->cluster_address;
        mreq.imr_interface = interface_addr.sin_addr;
 
 
        mreq.imr_multiaddr.s_addr = config->cluster_address;
        mreq.imr_interface = interface_addr.sin_addr;
 
 
-       opt = 0;                // Turn off multicast loopback.
+       opt = 0;        // Turn off multicast loopback.
        setsockopt(cluster_sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &opt, sizeof(opt));
 
        if (setsockopt(cluster_sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0)
        setsockopt(cluster_sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &opt, sizeof(opt));
 
        if (setsockopt(cluster_sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0)
@@ -221,7 +221,7 @@ int peer_send_data(u32 peer, char * data, int size)
        if (!config->cluster_address) return 0;
 
        if (!peer)      // Odd??
        if (!config->cluster_address) return 0;
 
        if (!peer)      // Odd??
-       return -1;
+               return -1;
 
        addr.sin_addr.s_addr = peer;
        addr.sin_port = htons(CLUSTERPORT);
 
        addr.sin_addr.s_addr = peer;
        addr.sin_port = htons(CLUSTERPORT);
@@ -256,12 +256,12 @@ int peer_send_message(u32 peer, int type, int more, char * data, int size)
 // Forward a state changing packet to the master.
 //
 // The master just processes the payload as if it had
 // Forward a state changing packet to the master.
 //
 // The master just processes the payload as if it had
-// received it off the tap device.
+// received it off the tun device.
 //
 //
-int master_forward_packet(char * data, int size, u32 addr, int port)
+int master_forward_packet(char *data, int size, u32 addr, int port)
 {
        char buf[65536];        // Vast overkill.
 {
        char buf[65536];        // Vast overkill.
-       char * p = buf;
+       char *p = buf;
 
        if (!config->cluster_master_address) // No election has been held yet. Just skip it.
                return -1;
 
        if (!config->cluster_master_address) // No election has been held yet. Just skip it.
                return -1;
@@ -284,10 +284,10 @@ int master_forward_packet(char * data, int size, u32 addr, int port)
 // token bucket queue, and lets normal processing take care
 // of it.
 //
 // token bucket queue, and lets normal processing take care
 // of it.
 //
-int master_throttle_packet(int tbfid, char * data, int size)
+int master_throttle_packet(int tbfid, char *data, int size)
 {
        char buf[65536];        // Vast overkill.
 {
        char buf[65536];        // Vast overkill.
-       char * p = buf;
+       char *p = buf;
 
        if (!config->cluster_master_address) // No election has been held yet. Just skip it.
                return -1;
 
        if (!config->cluster_master_address) // No election has been held yet. Just skip it.
                return -1;
@@ -371,12 +371,12 @@ void cluster_send_ping(time_t basetime)
 
 //
 // Walk the session counters looking for non-zero ones to send
 
 //
 // Walk the session counters looking for non-zero ones to send
-// to the master. We send up to 100 of them at one time.
-// We examine a maximum of 2000 sessions.
+// to the master. We send up to 600 of them at one time.
+// We examine a maximum of 3000 sessions.
 // (50k max session should mean that we normally
 // examine the entire session table every 25 seconds).
 
 // (50k max session should mean that we normally
 // examine the entire session table every 25 seconds).
 
-#define MAX_B_RECS (400)
+#define MAX_B_RECS (600)
 void master_update_counts(void)
 {
        int i, c;
 void master_update_counts(void)
 {
        int i, c;
@@ -470,7 +470,7 @@ void cluster_check_slaves(void)
 //
 void cluster_check_master(void)
 {
 //
 void cluster_check_master(void)
 {
-       int i, count, tcount, high_sid = 0;
+       int i, count, tcount, 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;
@@ -557,7 +557,7 @@ void cluster_check_master(void)
                // Re-string the free list.
                // Find the ID of the highest session.
        last_free = 0;
                // Re-string the free list.
                // Find the ID of the highest session.
        last_free = 0;
-       high_sid = 0;
+       high_unique_id = 0;
        config->cluster_highest_sessionid = 0;
        for (i = 0, count = 0; i < MAXSESSION; ++i) {
                if (session[i].tunnel == T_UNDEF) {
        config->cluster_highest_sessionid = 0;
        for (i = 0, count = 0; i < MAXSESSION; ++i) {
                if (session[i].tunnel == T_UNDEF) {
@@ -584,8 +584,8 @@ void cluster_check_master(void)
 
                session[i].radius = 0;  // Reset authentication as the radius blocks aren't up to date.
 
 
                session[i].radius = 0;  // Reset authentication as the radius blocks aren't up to date.
 
-               if (session[i].sid >= high_sid) // This is different to the index into the session table!!!
-                       high_sid = session[i].sid+1;
+               if (session[i].unique_id >= high_unique_id)     // This is different to the index into the session table!!!
+                       high_unique_id = session[i].unique_id+1;
 
 
                session[i].tbf_in = session[i].tbf_out = 0; // Remove stale pointers from old master.
 
 
                session[i].tbf_in = session[i].tbf_out = 0; // Remove stale pointers from old master.
@@ -603,7 +603,7 @@ void cluster_check_master(void)
        }
 
        session[last_free].next = 0;    // End of chain.
        }
 
        session[last_free].next = 0;    // End of chain.
-       last_sid = high_sid;            // Keep track of the highest used session ID.
+       last_id = high_unique_id;               // Keep track of the highest used session ID.
 
        become_master();
 
 
        become_master();
 
@@ -818,7 +818,7 @@ void cluster_heartbeat()
                exit(1);
        }
 
                exit(1);
        }
 
-       log(3,0,0,0, "Sending heartbeat #%d with %d changes (%d x-sess, %d x-tunnels, %d highsess, %d hightun size %d)\n",
+       log(3,0,0,0, "Sending heartbeat #%d with %d changes (%d x-sess, %d x-tunnels, %d highsess, %d hightun, size %d)\n",
                        h.seq, config->cluster_num_changes, count, tcount, config->cluster_highest_sessionid,
                        config->cluster_highest_tunnelid, (p-buff));
 
                        h.seq, config->cluster_num_changes, count, tcount, config->cluster_highest_sessionid,
                        config->cluster_highest_tunnelid, (p-buff));
 
@@ -1389,7 +1389,7 @@ int processcluster(char * data, int size, u32 addr)
        return 0;
 
 shortpacket:
        return 0;
 
 shortpacket:
-       log(0,0,0,0, "I got an cluster heartbeat packet! This means I'm probably out of sync!!\n");
+       log(0,0,0,0, "I got a _short_ cluster heartbeat packet! This means I'm probably out of sync!!\n");
        return -1;
 }
 
        return -1;
 }