handle routing properly in lone-master case

This commit is contained in:
bodea 2004-11-09 03:09:12 +00:00
parent e5b9fabb48
commit e3afcf30c0
2 changed files with 23 additions and 14 deletions

View file

@ -1,3 +1,6 @@
? Brendan O'Dea <bod@optusnet.com.au> 2.0.5
- Handle routing properly in lone-master case
* Mon Nov 8 2004 Brendan O'Dea <bod@optusnet.com.au> 2.0.4 * Mon Nov 8 2004 Brendan O'Dea <bod@optusnet.com.au> 2.0.4
- Added setrxspeed plugin - Added setrxspeed plugin
- Added peer_address config option - Added peer_address config option

View file

@ -1,6 +1,6 @@
// L2TPNS Clustering Stuff // L2TPNS Clustering Stuff
char const *cvs_id_cluster = "$Id: cluster.c,v 1.16 2004/11/05 04:55:26 bodea Exp $"; char const *cvs_id_cluster = "$Id: cluster.c,v 1.17 2004/11/09 03:09:12 bodea Exp $";
#include <stdio.h> #include <stdio.h>
#include <sys/file.h> #include <sys/file.h>
@ -188,6 +188,18 @@ static void add_type(char ** p, int type, int more, char * data, int size)
} }
} }
// advertise our presence via BGP or gratuitous ARP
static void advertise(void)
{
#ifdef BGP
if (bgp_configured)
bgp_enable_routing(1);
else
#endif /* BGP */
if (config->send_garp)
send_garp(config->bind_address); // Start taking traffic.
}
void cluster_uptodate(void) void cluster_uptodate(void)
{ {
if (config->cluster_iam_uptodate) if (config->cluster_iam_uptodate)
@ -199,14 +211,7 @@ void cluster_uptodate(void)
config->cluster_iam_uptodate = 1; config->cluster_iam_uptodate = 1;
LOG(0,0,0,0, "Now uptodate with master.\n"); LOG(0,0,0,0, "Now uptodate with master.\n");
advertise();
#ifdef BGP
if (bgp_configured)
bgp_enable_routing(1);
else
#endif /* BGP */
if (config->send_garp)
send_garp(config->bind_address); // Start taking traffic.
} }
// //
@ -456,11 +461,9 @@ void cluster_check_slaves(void)
} }
#ifdef BGP #ifdef BGP
// master lost all slaves, need to handle traffic ourself // in a cluster, withdraw/add routes when we get a peer/lose all peers
if (bgp_configured && had_peers && !have_peers) if (bgp_configured && have_peers != had_peers)
bgp_enable_routing(1); bgp_enable_routing(!have_peers);
else if (bgp_configured && !had_peers && have_peers)
bgp_enable_routing(0);
#endif /* BGP */ #endif /* BGP */
} }
@ -610,6 +613,9 @@ void cluster_check_master(void)
config->cluster_undefined_tunnels = 0; config->cluster_undefined_tunnels = 0;
config->cluster_iam_uptodate = 1; // assume all peers are up-to-date config->cluster_iam_uptodate = 1; // assume all peers are up-to-date
if (!num_peers) // lone master
advertise();
// FIXME. We need to fix up the tunnel control message // FIXME. We need to fix up the tunnel control message
// queue here! There's a number of other variables we // queue here! There's a number of other variables we
// should also update. // should also update.