* Fri Mar 5 2004 David Parrish <david@dparrish.com> 1.1.0
- Change all strcpy() calls to strncpy() to avoid buffer overflow potential - Add ICMP host unreachable support - Logging to syslog if log_file = "syslog:facility" - Now requires libcli 1.5 - All configuration moves to a config structure - Ability to modify and write config on the fly through command-line interface - Config file support is removed, and now handled by the cli - Show hostname in cli prompt - Keep current state type for tunnels - Add uptime command do CLI, which also shows real-time bandwidth utilisation - Add goodbye command to cluster master, which forces droppping a slave - Cache IP address allocation, so that reconnecting users get the same address - Fix tunnel resend timeouts, so that dead tunnels will be cleaned up - Allocate tunnels and radius without using a linked list which had issues - Fix some off-by-one errors in tunnel and session and radius arrays - Save and reload ip address pool when dieing - Check version and size of reloaded data when restarting - Remove plugin_config support - Remove old support for TBF which didn't work anyway. HTB is required to do throttling now. - Add COPYING and Changes files
This commit is contained in:
parent
b8ae54f127
commit
b43583c01d
22 changed files with 1731 additions and 1248 deletions
|
|
@ -1,5 +1,5 @@
|
|||
// L2TPNS Cluster Master
|
||||
// $Id: cluster_slave.c,v 1.1 2003/12/16 07:07:39 fred_nerk Exp $
|
||||
// $Id: cluster_slave.c,v 1.2 2004/03/05 00:09:03 fred_nerk Exp $
|
||||
|
||||
#include <stdio.h>
|
||||
#include <netinet/in.h>
|
||||
|
|
@ -19,16 +19,13 @@
|
|||
#include "ll.h"
|
||||
#include "util.h"
|
||||
|
||||
// vim: sw=4 ts=8
|
||||
|
||||
extern int cluster_sockfd;
|
||||
extern tunnelt *tunnel;
|
||||
extern sessiont *session;
|
||||
extern uint32_t cluster_address;
|
||||
extern char hostname[1000];
|
||||
extern int debug;
|
||||
extern ippoolt *ip_address_pool;
|
||||
extern uint32_t vip_address;
|
||||
extern tunnelidt tunnelfree;
|
||||
extern sessionidt sessionfree;
|
||||
extern struct configt *config;
|
||||
|
||||
int handle_tunnel(char *buf, int l);
|
||||
int handle_session(char *buf, int l);
|
||||
|
|
@ -78,6 +75,13 @@ int handle_tunnel(char *buf, int l)
|
|||
{
|
||||
int t;
|
||||
|
||||
// Ignore tunnel message if NOSTATEFILE exists
|
||||
if (config->ignore_cluster_updates)
|
||||
{
|
||||
log(1, 0, 0, 0, "Discarding tunnel message from cluster master.\n", l, sizeof(tunnelt));
|
||||
return 0;
|
||||
}
|
||||
|
||||
t = *(int *)buf;
|
||||
log(1, 0, 0, t, "Receiving tunnel %d from cluster master (%d bytes)\n", t, l);
|
||||
buf += sizeof(int); l -= sizeof(int);
|
||||
|
|
@ -94,16 +98,6 @@ int handle_tunnel(char *buf, int l)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (t > 1)
|
||||
{
|
||||
tunnel[t-1].next = tunnel[t].next;
|
||||
}
|
||||
|
||||
if (tunnelfree == t)
|
||||
{
|
||||
tunnelfree = tunnel[t].next;
|
||||
}
|
||||
|
||||
memcpy(&tunnel[t], buf, l);
|
||||
log(3, 0, 0, t, "Cluster master sent tunnel for %s\n", tunnel[t].hostname);
|
||||
|
||||
|
|
@ -117,6 +111,13 @@ int handle_session(char *buf, int l)
|
|||
{
|
||||
int s;
|
||||
|
||||
// Ignore tunnel message if NOSTATEFILE exists
|
||||
if (config->ignore_cluster_updates)
|
||||
{
|
||||
log(1, 0, 0, 0, "Discarding session message from cluster master.\n", l, sizeof(tunnelt));
|
||||
return 0;
|
||||
}
|
||||
|
||||
s = *(int *)buf;
|
||||
log(1, 0, s, 0, "Receiving session %d from cluster master (%d bytes)\n", s, l);
|
||||
buf += sizeof(int); l -= sizeof(int);
|
||||
|
|
@ -163,6 +164,10 @@ int handle_session(char *buf, int l)
|
|||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
if (session[s].servicenet)
|
||||
servicenet_session(s, 1);
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -214,7 +219,7 @@ int cluster_send_session(int s)
|
|||
memcpy((char *)(packet + len), &session[s], sizeof(sessiont));
|
||||
len += sizeof(sessiont);
|
||||
|
||||
cluster_send_message(cluster_address, vip_address, C_SESSION, packet, len);
|
||||
cluster_send_message(config->cluster_address, vip_address, C_SESSION, packet, len);
|
||||
free(packet);
|
||||
|
||||
return 1;
|
||||
|
|
@ -241,7 +246,27 @@ int cluster_send_tunnel(int t)
|
|||
memcpy((char *)(packet + len), &tunnel[t], sizeof(tunnelt));
|
||||
len += sizeof(tunnelt);
|
||||
|
||||
cluster_send_message(cluster_address, vip_address, C_TUNNEL, packet, len);
|
||||
cluster_send_message(config->cluster_address, vip_address, C_TUNNEL, packet, len);
|
||||
free(packet);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int cluster_send_goodbye()
|
||||
{
|
||||
char *packet;
|
||||
int len = 0;
|
||||
|
||||
packet = malloc(4096);
|
||||
|
||||
log(2, 0, 0, 0, "Sending goodbye to cluster master\n");
|
||||
// Hostname
|
||||
len = strlen(hostname);
|
||||
*(char *)packet = len;
|
||||
memcpy((char *)(packet + 1), hostname, len);
|
||||
len++;
|
||||
|
||||
cluster_send_message(config->cluster_address, vip_address, C_GOODBYE, packet, len);
|
||||
free(packet);
|
||||
|
||||
return 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue