X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/5779efc7ae3fe8b1e49593688129ca09d838e4be..99be8b127a607ddf8da0f77dcffd52d50a3b0613:/cluster.c?ds=sidebyside diff --git a/cluster.c b/cluster.c index 1f9000f..e78ed69 100644 --- a/cluster.c +++ b/cluster.c @@ -1,6 +1,6 @@ // 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.15 2004-11-02 04:35:03 bodea Exp $"; #include #include @@ -115,12 +115,12 @@ int cluster_init() 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; - 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) @@ -221,7 +221,7 @@ int peer_send_data(u32 peer, char * data, int size) if (!config->cluster_address) return 0; if (!peer) // Odd?? - return -1; + return -1; 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 -// 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 * p = buf; + char *p = buf; 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. // -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 * p = buf; + char *p = buf; 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 -// 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). -#define MAX_B_RECS (400) +#define MAX_B_RECS (600) void master_update_counts(void) { int i, c; @@ -470,7 +470,7 @@ void cluster_check_slaves(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; @@ -557,7 +557,7 @@ void cluster_check_master(void) // 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) { @@ -584,26 +584,19 @@ void cluster_check_master(void) 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. - throttle_session(i, session[i].throttle); - -// I'm unsure about this. --mo -// It's potentially a good thing, but it could send a -// LOT of packets. -// if (session[i].throttle) -// cluster_send_session(s); // Tell the slaves about the new tbf indexes. + throttle_session(i, session[i].throttle_in, session[i].throttle_out); if (session[i].tunnel != T_FREE && i > config->cluster_highest_sessionid) config->cluster_highest_sessionid = i; - } 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(); @@ -818,7 +811,7 @@ void cluster_heartbeat() 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)); @@ -1389,7 +1382,7 @@ int processcluster(char * data, int size, u32 addr) 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; }