* keepalived-1.1.17 released.
* Fixed low-level scheduler timer computation to take care to
monothonic computation. Select returns if timer is null!
* VRRP : Fixed vrrp script initialization to use event thread
instead of timer thread so that script no longer need to
wait until first polling timer fired.
* VRRP : Willy and I fixed MII media link failure detection
to test SIOCGMIIREG call before fetching BMSR.
* VRRP : Resurected VRRP_STATE_GOTO_FAULT. This state is
really needed to speed-up convergence and prevent against
any issue while using vrrp_sync_group.
+2009-03-05 Alexandre Cassen <acassen@linux-vs.org>
+ * keepalived-1.1.17 released.
+ * Fixed low-level scheduler timer computation to take care to
+ monothonic computation. Select returns if timer is null!
+ * VRRP : Fixed vrrp script initialization to use event thread
+ instead of timer thread so that script no longer need to
+ wait until first polling timer fired.
+ * VRRP : Willy and I fixed MII media link failure detection
+ to test SIOCGMIIREG call before fetching BMSR.
+ * VRRP : Resurected VRRP_STATE_GOTO_FAULT. This state is
+ really needed to speed-up convergence and prevent against
+ any issue while using vrrp_sync_group.
+
2009-02-15 Alexandre Cassen <acassen@linux-vs.org>
* keepalived-1.1.16 released.
* Code clean-up.
Summary: HA monitor built upon LVS, VRRP and services poller
Name: keepalived
-Version: 1.1.15
+Version: 1.1.17
Release: 5
License: GPL
Group: Applications/System
*
* Part: Checkers registration.
*
- * Version: $Id: check_api.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_api.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Healthcheckrs child process handling.
*
- * Version: $Id: check_daemon.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_daemon.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Healthcheckers dynamic data structure definition.
*
- * Version: $Id: check_data.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_data.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: WEB CHECK. Common HTTP/SSL checker primitives.
*
- * Version: $Id: check_http.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_http.c,v 1.1.17 2009/03/05 01:31:12 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 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_misc.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Eric Jarman, <ehj38230@cmsu2.cmsu.edu>
* data structure representation the conf file representing
* the loadbalanced server pool.
*
- * Version: $Id: check_parser.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_parser.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: SMTP CHECK. Check an SMTP-server.
*
- * Version: $Id: check_smtp.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_smtp.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Authors: Jeremy Rumpf, <jrumpf@heavyload.net>
* Alexandre Cassen, <acassen@linux-vs.org>
* url, compute a MD5 over this result and match it to the
* expected value.
*
- * Version: $Id: check_ssl.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_ssl.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Jan Holmberg, <jan@artech.net>
*
* Part: TCP checker.
*
- * Version: $Id: check_tcp.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_tcp.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* library to add/remove server MASQ rules to the kernel
* firewall framework.
*
- * Version: $Id: ipfwwrapper.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: ipfwwrapper.c,v 1.1.17 2009/03/05 01:31:12 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 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: ipvswrapper.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Manipulation functions for IPVS & IPFW wrappers.
*
- * Version: $Id: ipwrapper.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: ipwrapper.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Main program structure.
*
- * Version: $Id: main.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: main.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Dynamic data structure definition.
*
- * Version: $Id: global_data.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: global_data.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* data structure representation the conf file representing
* the loadbalanced server pool.
*
- * Version: $Id: global_parser.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: global_parser.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* Part: Layer4 checkers handling. Register worker threads &
* upper layer checkers.
*
- * Version: $Id: layer4.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: layer4.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Main program structure.
*
- * Version: $Id: main.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: main.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: pidfile utility.
*
- * Version: $Id: pidfile.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: pidfile.c,v 1.1.17 2009/03/05 01:31:12 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 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: smtp.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Checkers arguments structures definitions.
*
- * Version: $Id: check_api.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_api.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: check_daemon.c include file.
*
- * Version: $Id: check_daemon.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_daemon.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Healthcheckers dynamic data structure definition.
*
- * Version: $Id: check_data.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_data.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: check_http.c include file.
*
- * Version: $Id: check_http.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_http.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Jan Holmberg, <jan@artech.net>
*
* Part: check_misc.c include file.
*
- * Version: $Id: check_misc.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_misc.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
* Eric Jarman, <ehj38230@cmsu2.cmsu.edu>
*
* Part: check_parser.c include file.
*
- * Version: $Id: check_parser.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_parser.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: check_smtp.c include file.
*
- * Version: $Id: check_smtp.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_smtp.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
* Jeremy Rumpf, <jrumpf@heavyload.net>
*
* Part: check_http.c include file.
*
- * Version: $Id: check_http.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_http.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Jan Holmberg, <jan@artech.net>
*
* Part: check_tcp.c include file.
*
- * Version: $Id: check_tcp.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: check_tcp.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Configuration include file.
*
- * Version: $Id: config.h.in,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: config.h.in,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Jacob Rief, <jacob.rief@tiscover.com>
*
*
* Part: Daemon process handling.
*
- * Version: $Id: daemon.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: daemon.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Dynamic data structure definition.
*
- * Version: $Id: global_data.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: global_data.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_parser.c include file.
*
- * Version: $Id: global_parser.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: global_parser.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: ipfwwrapper.c include file.
*
- * Version: $Id: ipfwwrapper.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: ipfwwrapper.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: ipvswrapper.c include file.
*
- * Version: $Id: ipvswrapper.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: ipvswrapper.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: ipwrapper.c include file.
*
- * Version: $Id: ipwrapper.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: ipwrapper.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: layer4.c include file.
*
- * Version: $Id: layer4.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: layer4.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Main program include file.
*
- * Version: $Id: main.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: main.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: pidfile.c include file.
*
- * Version: $Id: pidfile.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: pidfile.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: smtp.c include file.
*
- * Version: $Id: smtp.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: smtp.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp.c program include file.
*
- * Version: $Id: vrrp.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
#define VRRP_STATE_FAULT 3 /* internal */
#define VRRP_STATE_GOTO_MASTER 4 /* internal */
#define VRRP_STATE_LEAVE_MASTER 5 /* internal */
+#define VRRP_STATE_GOTO_FAULT 98 /* internal */
#define VRRP_DISPATCHER 99 /* internal */
#define VRRP_MCAST_RETRY 10 /* internal */
#define VRRP_MAX_FSM_STATE 4 /* internal */
*
* Part: vrrp_arp.c include file.
*
- * Version: $Id: vrrp_arp.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_arp.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_daemon.c include file.
*
- * Version: $Id: vrrp_daemon.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_daemon.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Dynamic data structure definition.
*
- * Version: $Id: vrrp_data.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_data.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_if.c include file.
*
- * Version: $Id: vrrp_if.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_if.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_index.c include file.
*
- * Version: $Id: vrrp_index.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_index.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_ipaddress.c include file.
*
- * Version: $Id: vrrp_ipaddress.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_ipaddress.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_iproute.c include file.
*
- * Version: $Id: vrrp_iproute.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_iproute.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_ipsecah.c include file.
*
- * Version: $Id: vrrp_ipsecah.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_ipsecah.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_netlink.c include file.
*
- * Version: $Id: vrrp_netlink.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_netlink.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_notify.c include file.
*
- * Version: $Id: vrrp_notify.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_notify.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_parser.c include file.
*
- * Version: $Id: vrrp_parser.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_parser.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_scheduler.c include file.
*
- * Version: $Id: vrrp_scheduler.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_scheduler.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_sync.c include file.
*
- * Version: $Id: vrrp_sync.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_sync.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vrrp_track.c include file.
*
- * Version: $Id: vrrp_track.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_track.h,v 1.1.17 2009/03/05 01:31:12 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 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
}
/* set the new vrrp state */
- log_message(LOG_INFO, "VRRP_Instance(%s) Entering BACKUP STATE",
- vrrp->iname);
- vrrp_restore_interface(vrrp, 0);
- vrrp->state = vrrp->wantstate;
- notify_instance_exec(vrrp, VRRP_STATE_BACK);
+ switch (vrrp->wantstate) {
+ case VRRP_STATE_BACK:
+ log_message(LOG_INFO, "VRRP_Instance(%s) Entering BACKUP STATE", vrrp->iname);
+ vrrp_restore_interface(vrrp, 0);
+ vrrp->state = vrrp->wantstate;
+ notify_instance_exec(vrrp, VRRP_STATE_BACK);
+ break;
+ case VRRP_STATE_GOTO_FAULT:
+ log_message(LOG_INFO, "VRRP_Instance(%s) Entering FAULT STATE", vrrp->iname);
+ vrrp_restore_interface(vrrp, 0);
+ vrrp->state = VRRP_STATE_FAULT;
+ notify_instance_exec(vrrp, VRRP_STATE_FAULT);
+ break;
+ }
/* Set the down timer */
vrrp->ms_down_timer = 3 * vrrp->adver_int + VRRP_TIMER_SKEW(vrrp);
ipsec_ah *ah;
/* return on link failure */
- if (vrrp->wantstate == VRRP_STATE_FAULT) {
- vrrp->ms_down_timer =
- 3 * vrrp->adver_int + VRRP_TIMER_SKEW(vrrp);
+ if (vrrp->wantstate == VRRP_STATE_GOTO_FAULT) {
+ vrrp->ms_down_timer = 3 * vrrp->adver_int + VRRP_TIMER_SKEW(vrrp);
vrrp->state = VRRP_STATE_FAULT;
return 1;
}
*
* Part: ARP primitives.
*
- * Version: $Id: vrrp_arp.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_arp.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: VRRP child process handling.
*
- * Version: $Id: vrrp_daemon.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_daemon.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Dynamic data structure definition.
*
- * Version: $Id: vrrp_data.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_data.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Interfaces manipulation.
*
- * Version: $Id: vrrp_if.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_if.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
int
if_mii_probe(const char *ifname)
{
+ uint16_t *data = (uint16_t *) (&ifr.ifr_data);
+ int phy_id;
int fd = socket(AF_INET, SOCK_DGRAM, 0);
int status = 0;
return -1;
}
+ /* check if the driver reports BMSR using the MII interface, as we
+ * will need this and we already know that some don't support it.
+ */
+ phy_id = data[0]; /* save it in case it is overwritten */
+ data[1] = 1;
+ if (ioctl(fd, SIOCGMIIREG, &ifr) < 0) {
+ close(fd);
+ return -1;
+ }
+ data[0] = phy_id;
+
/* Dump the MII transceiver */
status = if_mii_status(fd);
close(fd);
}
/* Register new monitor thread */
- thread_add_timer(master, if_linkbeat_refresh_thread, ifp
- , POLLING_DELAY);
+ thread_add_timer(master, if_linkbeat_refresh_thread, ifp, POLLING_DELAY);
}
}
*
* Part: VRRP instance index table.
*
- * Version: $Id: vrrp_index.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_index.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: NETLINK IPv4 address manipulation.
*
- * Version: $Id: vrrp_ipaddress.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_ipaddress.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: NETLINK IPv4 routes manipulation.
*
- * Version: $Id: vrrp_iproute.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_iproute.c,v 1.1.17 2009/03/05 01:31:12 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 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_ipsecah.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: NETLINK kernel command channel.
*
- * Version: $Id: vrrp_netlink.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_netlink.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: VRRP state transition notification scripts handling.
*
- * Version: $Id: vrrp_notify.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_notify.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* data structure representation the conf file representing
* the loadbalanced server pool.
*
- * Version: $Id: vrrp_parser.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_parser.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Sheduling framework for vrrp code.
*
- * Version: $Id: vrrp_scheduler.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_scheduler.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
if (vscript->result == VRRP_SCRIPT_STATUS_INIT) {
vscript->result = VRRP_SCRIPT_STATUS_NONE;
- thread_add_timer(master, vrrp_script_thread,
- vscript, vscript->interval);
+ thread_add_event(master, vrrp_script_thread, vscript, vscript->interval);
} else if (vscript->result == VRRP_SCRIPT_STATUS_INIT_GOOD) {
vscript->result = VRRP_SCRIPT_STATUS_GOOD;
- thread_add_timer(master, vrrp_script_thread,
- vscript, vscript->interval);
+ thread_add_event(master, vrrp_script_thread, vscript, vscript->interval);
}
}
}
{
if (!VRRP_ISUP(vrrp)) {
vrrp_log_int_down(vrrp);
- vrrp->wantstate = VRRP_STATE_FAULT;
+ vrrp->wantstate = VRRP_STATE_GOTO_FAULT;
vrrp_state_leave_master(vrrp);
} else if (vrrp_state_master_rx(vrrp, buffer, len)) {
vrrp_state_leave_master(vrrp);
vrrp_master(vrrp_rt * vrrp)
{
/* Check if interface we are running on is UP */
- if (vrrp->wantstate != VRRP_STATE_FAULT) {
+ if (vrrp->wantstate != VRRP_STATE_GOTO_FAULT) {
if (!VRRP_ISUP(vrrp)) {
vrrp_log_int_down(vrrp);
- vrrp->wantstate = VRRP_STATE_FAULT;
+ vrrp->wantstate = VRRP_STATE_GOTO_FAULT;
}
}
/* Then perform the state transition */
- if (vrrp->wantstate == VRRP_STATE_FAULT ||
+ if (vrrp->wantstate == VRRP_STATE_GOTO_FAULT ||
vrrp->wantstate == VRRP_STATE_BACK ||
vrrp->ipsecah_counter->cycle) {
- vrrp->ms_down_timer =
- 3 * vrrp->adver_int + VRRP_TIMER_SKEW(vrrp);
+ vrrp->ms_down_timer = 3 * vrrp->adver_int + VRRP_TIMER_SKEW(vrrp);
/* handle backup state transition */
vrrp_state_leave_master(vrrp);
if (vrrp->state == VRRP_STATE_BACK)
- log_message(LOG_INFO,
- "VRRP_Instance(%s) Now in BACKUP state",
- vrrp->iname);
+ log_message(LOG_INFO, "VRRP_Instance(%s) Now in BACKUP state",
+ vrrp->iname);
if (vrrp->state == VRRP_STATE_FAULT)
log_message(LOG_INFO, "VRRP_Instance(%s) Now in FAULT state",
- vrrp->iname);
+ vrrp->iname);
} else if (vrrp->state == VRRP_STATE_MAST) {
/*
* Send the VRRP advert.
*
* Part: VRRP synchronization framework.
*
- * Version: $Id: vrrp_sync.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_sync.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
if (vrrp->state == VRRP_STATE_MAST ||
vrrp->state == VRRP_STATE_GOTO_MASTER ||
- vrrp->state == VRRP_STATE_FAULT ||
+ vrrp->state == VRRP_STATE_GOTO_FAULT ||
vrrp->wantstate == VRRP_STATE_GOTO_MASTER) {
vrrp->sands.tv_sec = time_now.tv_sec + vrrp->adver_int / TIMER_HZ;
vrrp->sands.tv_usec = time_now.tv_usec;
*/
if (isync != vrrp && isync->state != VRRP_STATE_FAULT) {
if (isync->state == VRRP_STATE_MAST)
- isync->wantstate = VRRP_STATE_FAULT;
+ isync->wantstate = VRRP_STATE_GOTO_FAULT;
if (isync->state == VRRP_STATE_BACK)
isync->state = VRRP_STATE_FAULT;
}
*
* Part: Interface tracking framework.
*
- * Version: $Id: vrrp_track.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vrrp_track.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: HTML stream parser utility functions.
*
- * Version: $Id: html.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: html.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: parser.c include file.
*
- * Version: $Id: html.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: html.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: List structure manipulation.
*
- * Version: $Id: list.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: list.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: list.c include file.
*
- * Version: $Id: list.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: list.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: logging facility.
*
- * Version: $Id: vector.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vector.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: logging facility.
*
- * Version: $Id: vector.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vector.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* Part: Memory management framework. This framework is used to
* find any memory leak.
*
- * Version: $Id: memory.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: memory.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Jan Holmberg, <jan@artech.net>
*
* Part: memory.c include file.
*
- * Version: $Id: memory.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: memory.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Authors: Alexandre Cassen, <acassen@linux-vs.org>
* Jan Holmberg, <jan@artech.net>
*
* Part: Forked system call to launch an extra script.
*
- * Version: $Id: notify.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: notify.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: notify.c include file.
*
- * Version: $Id: notify.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: notify.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* data structure representation the conf file representing
* the loadbalanced server pool.
*
- * Version: $Id: parser.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: parser.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: cfreader.c include file.
*
- * Version: $Id: parser.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: parser.h,v 1.1.17 2009/03/05 01:31:12 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 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: scheduler.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
}
}
+/* Update timer value */
+static void
+thread_update_timer(thread_list *list, TIMEVAL *timer_min)
+{
+ if (list->head) {
+ if (!TIMER_ISNULL(*timer_min)) {
+ if (timer_cmp(list->head->sands, *timer_min) <= 0) {
+ *timer_min = list->head->sands;
+ }
+ } else {
+ *timer_min = list->head->sands;
+ }
+ }
+}
+
/* Compute the wait timer. Take care of timeouted fd */
static void
thread_compute_timer(thread_master * m, TIMEVAL * timer_wait)
{
TIMEVAL timer_min;
+ /* Prepare timer */
TIMER_RESET(timer_min);
+ thread_update_timer(&m->timer, &timer_min);
+ thread_update_timer(&m->write, &timer_min);
+ thread_update_timer(&m->read, &timer_min);
+ thread_update_timer(&m->child, &timer_min);
- if (m->timer.head)
- timer_min = m->timer.head->sands;
-
- if (m->write.head) {
- if (!TIMER_ISNULL(timer_min)) {
- if (timer_cmp(m->write.head->sands, timer_min) <= 0)
- timer_min = m->write.head->sands;
- } else
- timer_min = m->write.head->sands;
- }
-
- if (m->read.head) {
- if (!TIMER_ISNULL(timer_min)) {
- if (timer_cmp(m->read.head->sands, timer_min) <= 0)
- timer_min = m->read.head->sands;
- } else
- timer_min = m->read.head->sands;
- }
-
- if (m->child.head) {
- if (!TIMER_ISNULL(timer_min)) {
- if (timer_cmp(m->child.head->sands, timer_min) <= 0)
- timer_min = m->child.head->sands;
- } else
- timer_min = m->child.head->sands;
- }
-
+ /* Take care about monothonic clock */
if (!TIMER_ISNULL(timer_min)) {
timer_min = timer_sub(timer_min, time_now);
if (timer_min.tv_sec < 0) {
- timer_wait->tv_sec = timer_wait->tv_usec = 0;
- } else {
- timer_wait->tv_sec = timer_min.tv_sec;
- timer_wait->tv_usec = timer_min.tv_usec;
+ timer_min.tv_sec = timer_min.tv_usec = 0;
+ } else if (timer_min.tv_sec >= 1) {
+ timer_min.tv_sec = 1;
+ timer_min.tv_usec = 0;
}
- return;
- }
- if (TIMER_ISNULL(*timer_wait))
+ timer_wait->tv_sec = timer_min.tv_sec;
+ timer_wait->tv_usec = timer_min.tv_usec;
+ } else {
timer_wait->tv_sec = 1;
+ timer_wait->tv_usec = 0;
+ }
}
/* Fetch next ready thread. */
signal_fd = signal_rfd();
FD_SET(signal_fd, &readfd);
- ret = select(FD_SETSIZE, &readfd, &writefd, &exceptfd,
- (TIMER_ISNULL(timer_wait)) ? NULL : &timer_wait);
+ ret = select(FD_SETSIZE, &readfd, &writefd, &exceptfd, &timer_wait);
/* we have to save errno here because the next syscalls will set it */
old_errno = errno;
*
* Part: scheduler.c include file.
*
- * Version: $Id: scheduler.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: scheduler.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Signals framework.
*
- * Version: $Id: signals.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: signals.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Kevin Lindsay, <kevinl@netnation.com>
* Alexandre Cassen, <acassen@linux-vs.org>
*
* Part: signals.c include file.
*
- * Version: $Id: signals.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: signals.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Kevin Lindsay, <kevinl@netnation.com>
* Alexandre Cassen, <acassen@linux-vs.org>
*
* Part: Timer manipulations.
*
- * Version: $Id: timer.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: timer.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
* normally return 0, unless <now> is NULL, in which case it will return -1 and
* set errno to EFAULT.
*/
-int monotonic_gettimeofday(struct timeval *now)
+int monotonic_gettimeofday(TIMEVAL *now)
{
- static struct timeval mono_date;
- static struct timeval drift; /* warning: signed seconds! */
- struct timeval sys_date, adjusted, deadline;
+ static TIMEVAL mono_date;
+ static TIMEVAL drift; /* warning: signed seconds! */
+ TIMEVAL sys_date, adjusted, deadline;
if (!now) {
errno = EFAULT;
/* compute new adjusted time by adding the drift offset */
adjusted.tv_sec = sys_date.tv_sec + drift.tv_sec;
adjusted.tv_usec = sys_date.tv_usec + drift.tv_usec;
- if (adjusted.tv_usec >= 1000000) {
- adjusted.tv_usec -= 1000000;
+ if (adjusted.tv_usec >= TIMER_HZ) {
+ adjusted.tv_usec -= TIMER_HZ;
adjusted.tv_sec++;
}
/* check for jumps too far in the future, and bound them to
* TIME_MAX_FORWARD_US microseconds.
*/
- deadline.tv_sec = mono_date.tv_sec + TIME_MAX_FORWARD_US / 1000000;
- deadline.tv_usec = mono_date.tv_usec + TIME_MAX_FORWARD_US % 1000000;
- if (deadline.tv_usec >= 1000000) {
- deadline.tv_usec -= 1000000;
+ deadline.tv_sec = mono_date.tv_sec + TIME_MAX_FORWARD_US / TIMER_HZ;
+ deadline.tv_usec = mono_date.tv_usec + TIME_MAX_FORWARD_US % TIMER_HZ;
+ if (deadline.tv_usec >= TIMER_HZ) {
+ deadline.tv_usec -= TIMER_HZ;
deadline.tv_sec++;
}
drift.tv_sec = mono_date.tv_sec - sys_date.tv_sec;
drift.tv_usec = mono_date.tv_usec - sys_date.tv_usec;
if (drift.tv_usec < 0) {
- drift.tv_usec += 1000000;
+ drift.tv_usec += TIMER_HZ;
drift.tv_sec--;
}
*now = mono_date;
*
* Part: timer.c include file.
*
- * Version: $Id: timer.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: timer.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: General program utils.
*
- * Version: $Id: utils.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: utils.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: utils.h include file.
*
- * Version: $Id: utils.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: utils.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: Vector structure manipulation.
*
- * Version: $Id: vector.c,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vector.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*
*
* Part: vector.c include file.
*
- * Version: $Id: vector.h,v 1.1.16 2009/02/14 03:25:07 acassen Exp $
+ * Version: $Id: vector.h,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
*
* Author: Alexandre Cassen, <acassen@linux-vs.org>
*