* keepalived-0.5.6 released.
* VRRP : Review in "GOTO_MASTER_STATE" the IP address handling.
send protocol adverts before registering IP address to the interface.
* VRRP : Review the "LEAVE_MASTER_STATE" to only handle state transition
if wanted states are BACKUP or FAULT.
* VRRP : Review the BACKUP state to force new protocol election if
receiving a lower priority advert.
* VRRP : Fixed a BACKUP to MASTER state transition only if interface is
reported UP.
* VRRP : Fake the "ipvs_syncd_cmd" function if running LVS using a Kernel
2.2.
+2002-04-13 Alexandre Cassen <acassen@linux-vs.org>
+ * keepalived-0.5.6 released.
+ * VRRP : Review in "GOTO_MASTER_STATE" the IP address handling.
+ send protocol adverts before registering IP address to the interface.
+ * VRRP : Review the "LEAVE_MASTER_STATE" to only handle state transition
+ if wanted states are BACKUP or FAULT.
+ * VRRP : Review the BACKUP state to force new protocol election if
+ receiving a lower priority advert.
+ * VRRP : Fixed a BACKUP to MASTER state transition only if interface is
+ reported UP.
+ * VRRP : Fake the "ipvs_syncd_cmd" function if running LVS using a Kernel
+ 2.2.
+
2002-04-10 Alexandre Cassen <acassen@linux-vs.org>
* keepalived-0.5.5 released.
* Fixed a gratuitous ARP porting bug.
*
* Part: Checkers registration.
*
- * Version: $Id: check_api.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: check_api.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Checkers arguments structures definitions.
*
- * Version: $Id: check_api.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: check_api.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: WEB CHECK. Common HTTP/SSL checker primitives.
*
- * Version: $Id: check_http.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: check_http.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Jan Holmberg, <jan@artech.net>
*
* Part: check_http.c include file.
*
- * Version: $Id: check_http.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: check_http.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Jan Holmberg, <jan@artech.net>
* Part: MISC CHECK. Perform a system call to run an extra
* system prog or script.
*
- * Version: $Id: check_misc.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: check_misc.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Eric Jarman, <ehj38230@cmsu2.cmsu.edu>
*
* Part: check_misc.c include file.
*
- * Version: $Id: check_misc.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: check_misc.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
* Eric Jarman, <ehj38230@cmsu2.cmsu.edu>
* url, compute a MD5 over this result and match it to the
* expected value.
*
- * Version: $Id: check_ssl.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: check_ssl.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Jan Holmberg, <jan@artech.net>
*
* Part: check_http.c include file.
*
- * Version: $Id: check_http.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: check_http.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Jan Holmberg, <jan@artech.net>
*
* Part: TCP checker.
*
- * Version: $Id: check_tcp.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: check_tcp.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: check_tcp.c include file.
*
- * Version: $Id: check_tcp.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: check_tcp.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Main program structure.
*
- * Version: $Id: main.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: main.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Daemon process handling.
*
- * Version: $Id: daemon.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: daemon.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Dynamic data structure definition.
*
- * Version: $Id: data.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: data.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Dynamic data structure definition.
*
- * Version: $Id: data.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: data.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
+++ /dev/null
-# Generated automatically from Makefile.in by configure.
-# Makefile
-#
-# Keepalived OpenSource project.
-#
-# Copyright (C) 2001, 2002 Alexandre Cassen, <acassen@linux-vs.org>
-
-EXEC = genhash
-
-prefix = /usr/local
-exec_prefix = ${prefix}
-bindir = ${exec_prefix}/bin
-
-CC = gcc
-CFLAGS = -g -O2 -Wall -Wunused -Wstrict-prototypes
-LDFLAGS = -lpopt -lssl -lcrypto
-
-OBJS = main.o client.o common.o
-
-all: $(EXEC)
- strip $(EXEC)
- @echo ""
- @echo "Make complete"
-
-$(EXEC): $(OBJS)
- $(CC) $(OBJS) -o $(EXEC) $(LDFLAGS)
-
-clean:
- rm -f core *.o $(EXEC)
-
-clean-dist:
- rm -f $(bindir)/$(EXEC)
-
-install:
- install -m 755 $(EXEC) $(bindir)/
* library to add/remove server MASQ rules to the kernel
* firewall framework.
*
- * Version: $Id: ipfwwrapper.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: ipfwwrapper.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: ipfwwrapper.c include file.
*
- * Version: $Id: ipfwwrapper.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: ipfwwrapper.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* Part: IPVS Kernel wrapper. Use setsockopt call to add/remove
* server to/from the loadbalanced server pool.
*
- * Version: $Id: ipvswrapper.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: ipvswrapper.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: ipvswrapper.c include file.
*
- * Version: $Id: ipvswrapper.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: ipvswrapper.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
#define IPVS_SUCCESS 1
#define IPVS_CMD_DELAY 3
-#define IPVS_STARTDAEMON IP_VS_SO_SET_STARTDAEMON
-#define IPVS_STOPDAEMON IP_VS_SO_SET_STOPDAEMON
-#define IPVS_MASTER IP_VS_STATE_MASTER
-#define IPVS_BACKUP IP_VS_STATE_BACKUP
+#ifdef _KRNL_2_2_
+ #define IPVS_STARTDAEMON 1
+ #define IPVS_STOPDAEMON 2
+ #define IPVS_MASTER 3
+ #define IPVS_BACKUP 4
+#else
+ #define IPVS_STARTDAEMON IP_VS_SO_SET_STARTDAEMON
+ #define IPVS_STOPDAEMON IP_VS_SO_SET_STOPDAEMON
+ #define IPVS_MASTER IP_VS_STATE_MASTER
+ #define IPVS_BACKUP IP_VS_STATE_BACKUP
+#endif
extern thread_master *master;
*
* Part: Manipulation functions for IPVS & IPFW wrappers.
*
- * Version: $id: ipwrapper.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $id: ipwrapper.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: ipwrapper.c include file.
*
- * Version: $Id: ipwrapper.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: ipwrapper.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* Part: Layer4 checkers handling. Register worker threads &
* upper layer checkers.
*
- * Version: $Id: layer4.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: layer4.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: layer4.c include file.
*
- * Version: $Id: layer4.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: layer4.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: List structure manipulation.
*
- * Version: $Id: list.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: list.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: list.c include file.
*
- * Version: $Id: list.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: list.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Main program structure.
*
- * Version: $Id: main.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: main.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Main program include file.
*
- * Version: $Id: main.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: main.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
/* Build version */
#define PROG "Keepalived"
-#define VERSION_CODE 0x000505
-#define DATE_CODE 0x0a0402
+#define VERSION_CODE 0x000506
+#define DATE_CODE 0x0d0402
#define KEEPALIVED_VERSION(version) \
(version >> 16) & 0xFF, \
* Part: Memory management framework. This framework is used to
* find any memory leak.
*
- * Version: $Id: memory.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: memory.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Jan Holmberg, <jan@artech.net>
*
* Part: memory.c include file.
*
- * Version: $Id: memory.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: memory.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Jan Holmberg, <jan@artech.net>
* data structure representation the conf file representing
* the loadbalanced server pool.
*
- * Version: $Id: parser.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: parser.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: cfreader.c include file.
*
- * Version: $Id: parser.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: parser.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: pidfile utility.
*
- * Version: $Id: pidfile.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: pidfile.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: pidfile.c include file.
*
- * Version: $Id: pidfile.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: pidfile.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* the thread management routine (thread.c) present in the
* very nice zebra project (http://www.zebra.org).
*
- * Version: $Id: scheduler.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: scheduler.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: scheduler.c include file.
*
- * Version: $Id: scheduler.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: scheduler.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* using the smtp protocol according to the RFC 821. A non blocking
* timeouted connection is used to handle smtp protocol.
*
- * Version: $Id: smtp.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: smtp.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: smtp.c include file.
*
- * Version: $Id: smtp.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: smtp.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Timer manipulations.
*
- * Version: $Id: timer.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: timer.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: timer.c include file.
*
- * Version: $Id: timer.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: timer.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: General program utils.
*
- * Version: $Id: utils.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: utils.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: utils.h include file.
*
- * Version: $Id: utils.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: utils.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Vector structure manipulation.
*
- * Version: $Id: vector.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vector.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vector.c include file.
*
- * Version: $Id: vector.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vector.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* master fails, a backup server takes over.
* The original implementation has been made by jerome etienne.
*
- * Version: $Id: vrrp.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
}
/* send VRRP advertissement */
-static int vrrp_send_adv(vrrp_rt *vrrp, int prio)
+int vrrp_send_adv(vrrp_rt *vrrp, int prio)
{
int buflen, ret;
char *buffer;
/* becoming master */
void vrrp_state_goto_master(vrrp_rt *vrrp)
{
- /* add the ip addresses */
- vrrp_handle_ipaddress(vrrp, VRRP_IPADDRESS_ADD);
-
/* send an advertisement */
vrrp_send_adv(vrrp, vrrp->priority);
+ /* add the ip addresses */
+ vrrp_handle_ipaddress(vrrp, VRRP_IPADDRESS_ADD);
+
/* remotes arp tables update */
syslog(LOG_INFO, "Sending gratuitous ARP on %s"
, IF_NAME(vrrp->ifp));
void vrrp_state_leave_master(vrrp_rt *vrrp)
{
- /* Remove VIPs */
- vrrp_restore_interface(vrrp, 0);
-
- if (vrrp->wantstate == VRRP_STATE_BACK)
- syslog(LOG_INFO, "VRRP_Instance(%s) Entering BACKUP STATE"
- , vrrp->iname);
- if (vrrp->wantstate == VRRP_STATE_GOTO_FAULT)
- syslog(LOG_INFO, "VRRP_Instance(%s) Entering FAULT STATE"
- , vrrp->iname);
-
/* Check if notify is needed */
if (vrrp->notify_exec) {
if (vrrp->wantstate == VRRP_STATE_BACK)
/* set the new vrrp state */
switch (vrrp->wantstate) {
case VRRP_STATE_BACK:
+ syslog(LOG_INFO, "VRRP_Instance(%s) Entering BACKUP STATE"
+ , vrrp->iname);
+ vrrp_restore_interface(vrrp, 0);
vrrp->state = vrrp->wantstate;
break;
case VRRP_STATE_GOTO_FAULT:
+ syslog(LOG_INFO, "VRRP_Instance(%s) Entering FAULT STATE"
+ , vrrp->iname);
+ vrrp_restore_interface(vrrp, 0);
vrrp->state = VRRP_STATE_FAULT;
break;
}
/* BACKUP state processing */
void vrrp_state_backup(vrrp_rt *vrrp, char *buf, int buflen)
{
- int ret = 0;
- struct iphdr *iph = (struct iphdr *)buf;
- vrrp_pkt *hd = NULL;
+ struct iphdr *iph = (struct iphdr *)buf;
+ vrrp_pkt *hd = NULL;
+ int ret = 0;
/* Fill the VRRP header */
switch (iph->protocol) {
vrrp->ms_down_timer = 3 * vrrp->adver_int + VRRP_TIMER_SKEW(vrrp);
} else if (hd->priority == 0) {
vrrp->ms_down_timer = VRRP_TIMER_SKEW(vrrp);
- } else if( !vrrp->preempt || hd->priority >= vrrp->priority ) {
+ } else if (!vrrp->preempt || hd->priority >= vrrp->priority) {
vrrp->ms_down_timer = 3 * vrrp->adver_int + VRRP_TIMER_SKEW(vrrp);
+ } else if (hd->priority < vrrp->priority) {
+ vrrp->wantstate = VRRP_STATE_GOTO_MASTER;
}
}
ntohl(iph->saddr) > IF_ADDR(vrrp->ifp))) {
syslog(LOG_INFO, "VRRP_Instance(%s) Received higher prio advert"
, vrrp->iname);
- syslog(LOG_INFO, "VRRP_Instance(%s) Entering BACKUP state"
- , vrrp->iname);
vrrp->ms_down_timer = 3 * vrrp->adver_int + VRRP_TIMER_SKEW(vrrp);
vrrp->state = VRRP_STATE_BACK;
return 1;
hd->priority == VRRP_PRIO_OWNER)
return 1;
-printf("Local prio: %d, remote prio: %d\n", vrrp->priority, hd->priority);
-
return 0;
}
*
* Part: vrrp.c program include file.
*
- * Version: $Id: vrrp.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
* Based on the Jerome Etienne, <jetienne@arobas.net> code.
extern void new_vrrp_socket(vrrp_rt *vrrp);
extern void close_vrrp_socket(vrrp_rt *vrrp);
extern void vrrp_send_gratuitous_arp(vrrp_rt *vrrp);
+extern int vrrp_send_adv(vrrp_rt *vrrp, int prio);
extern int vrrp_state_fault_rx(vrrp_rt *vrrp, char *buf, int buflen);
extern int vrrp_state_master_rx(vrrp_rt *vrrp, char *buf, int buflen);
extern void vrrp_state_master_tx(vrrp_rt *vrrp, const int prio);
*
* Part: Interfaces manipulation.
*
- * Version: $Id: vrrp_if.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp_if.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
{
if (!LIST_ISEMPTY(if_queue))
free_list(if_queue);
+ netlink_close(&nl_kernel);
}
void init_interface_queue(void)
{
*
* Part: vrrp_if.c include file.
*
- * Version: $Id: vrrp_if.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp_if.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: NETLINK IPv4 address manipulation.
*
- * Version: $Id: vrrp_ipaddress.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp_ipaddress.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
/* local include */
#include "vrrp_ipaddress.h"
#include "vrrp_netlink.h"
-
-/* Check if interface is UP */
-
+#include "utils.h"
/* Add/Delete IP address to a specific interface */
int netlink_address_ipv4(int ifindex, uint32_t addr, int cmd)
req.ifa.ifa_family = AF_INET;
req.ifa.ifa_index = ifindex;
req.ifa.ifa_prefixlen = 32;
-
+
addr = htonl(addr);
addattr_l(&req.n, sizeof(req), IFA_LOCAL, &addr, sizeof(addr));
*
* Part: vrrp_ipaddress.c include file.
*
- * Version: $Id: vrrp_ipaddress.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp_ipaddress.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* authentication data encryption using HMAC MD5 according to
* RFCs 2085 & 2104.
*
- * Version: $Id: vrrp_ipsecah.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp_ipsecah.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_ipsecah.c include file.
*
- * Version: $Id: vrrp_ipsecah.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp_ipsecah.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: NETLINK kernel command channel.
*
- * Version: $Id: vrrp_netlink.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp_netlink.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_netlink.c include file.
*
- * Version: $Id: vrrp_netlink.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp_netlink.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Sheduling framework for vrrp code.
*
- * Version: $Id: vrrp_scheduler.c,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp_scheduler.c,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
syslog(LOG_INFO, "Kernel is reporting: interface %s DOWN"
, IF_NAME(vrrp->ifp));
vrrp->wantstate = VRRP_STATE_GOTO_FAULT;
- } else if (vrrp_state_master_rx(vrrp, vrrp_buffer, len))
+ vrrp_state_leave_master(vrrp);
+ } else if (vrrp_state_master_rx(vrrp, vrrp_buffer, len)) {
vrrp->wantstate = VRRP_STATE_BACK;
-
- vrrp_state_leave_master(vrrp);
+ vrrp_state_leave_master(vrrp);
+ }
}
static void vrrp_handle_leave_fault(vrrp_rt *vrrp
static void vrrp_handle_goto_master(vrrp_rt *vrrp)
{
-// if (!IF_ISUP(vrrp->ifp)) {
-// syslog(LOG_INFO, "Kernel is reporting: interface %s DOWN"
-// , IF_NAME(vrrp->ifp));
-// vrrp->state = VRRP_STATE_FAULT;
-// } else {
+ if (!IF_ISUP(vrrp->ifp)) {
+ syslog(LOG_INFO, "Kernel is reporting: interface %s DOWN"
+ , IF_NAME(vrrp->ifp));
+ vrrp->state = VRRP_STATE_FAULT;
+ } else {
/* If becoming MASTER in IPSEC AH AUTH, we reset the anti-replay */
if (vrrp->ipsecah_counter->cycle) {
vrrp->ipsecah_counter->cycle = 0;
/* handle master state transition */
vrrp_state_goto_master(vrrp);
-// }
+ }
}
static void vrrp_handle_master(vrrp_rt *vrrp)
}
/*
+ * Handle wanted transition to MASTER state.
+ * When Instance not in FAULT state received a remote
+ * lower priotity advert => For a new VRRP election.
+ */
+ if (vrrp->state == VRRP_STATE_BACK &&
+ vrrp->wantstate == VRRP_STATE_GOTO_MASTER &&
+ vrrp->isync) {
+ vrrp_isync = vrrp_search_instance_isync(vrrp->isync);
+
+ if (vrrp_isync->state != VRRP_STATE_FAULT) {
+ /* Force a new protocol master election */
+ syslog(LOG_INFO, "VRRP_Instance(%s) forcing a new MASTER election"
+ , vrrp->iname);
+ vrrp_send_adv(vrrp, vrrp->priority);
+ }
+ }
+
+
+ /*
* Refresh sands only if found matching instance.
* Otherwize the packet is simply ignored...
*
*
* Part: vrrp_scheduler.c include file.
*
- * Version: $Id: vrrp_scheduler.h,v 0.5.5 2002/04/10 02:34:23 acassen Exp $
+ * Version: $Id: vrrp_scheduler.h,v 0.5.6 2002/04/13 06:21:33 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*