summaryrefslogtreecommitdiffstats
path: root/vrrpd
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2019-02-27 21:56:33 +0100
committerQuentin Young <qlyoung@cumulusnetworks.com>2019-05-17 02:27:08 +0200
commit6309f71c9b20ba35b8afb3bc58f2b9555a5b42bb (patch)
tree1e4d9bcab1d3a5f3afcee943f24bbfc7240abda1 /vrrpd
parentvrrpd: be less smart about interface state (diff)
downloadfrr-6309f71c9b20ba35b8afb3bc58f2b9555a5b42bb.tar.xz
frr-6309f71c9b20ba35b8afb3bc58f2b9555a5b42bb.zip
vrrpd: log why vrouter could not be started
If we do a checkstart and cannot start the VRRP router, log the reason why for debugging purposes. Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Diffstat (limited to 'vrrpd')
-rw-r--r--vrrpd/vrrp.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/vrrpd/vrrp.c b/vrrpd/vrrp.c
index bec47a0e2..b9c7b3d2c 100644
--- a/vrrpd/vrrp.c
+++ b/vrrpd/vrrp.c
@@ -242,6 +242,7 @@ void vrrp_check_start(struct vrrp_vrouter *vr)
{
struct vrrp_router *r;
bool start;
+ const char *whynot = NULL;
if (vr->shutdown || vr->ifp == NULL)
return;
@@ -251,46 +252,62 @@ void vrrp_check_start(struct vrrp_vrouter *vr)
start = r->fsm.state == VRRP_STATE_INITIALIZE;
/* Must have a parent interface */
start = start && (vr->ifp != NULL);
+ whynot = (!start && !whynot) ? "No base interface" : NULL;
#if 0
/* Parent interface must be up */
start = start && if_is_operative(vr->ifp);
#endif
/* Parent interface must have at least one v4 */
start = start && vr->ifp->connected->count > 1;
+ whynot = (!start && !whynot) ? "No primary IPv4 address" : NULL;
/* Must have a macvlan interface */
start = start && (r->mvl_ifp != NULL);
+ whynot = (!start && !whynot) ? "No VRRP interface" : NULL;
#if 0
/* Macvlan interface must be admin up */
start = start && CHECK_FLAG(r->mvl_ifp->flags, IFF_UP);
#endif
/* Must have at least one VIP configured */
start = start && r->addrs->count > 0;
+ whynot = (!start && !whynot) ? "No Virtual IP address configured" : NULL;
if (start)
vrrp_event(r, VRRP_EVENT_STARTUP);
+ else if (whynot)
+ zlog_warn(VRRP_LOGPFX VRRP_LOGPFX_VRID
+ "Refusing to start IPv4 Virtual Router: %s",
+ vr->vrid, whynot);
r = vr->v6;
/* Must not already be started */
start = r->fsm.state == VRRP_STATE_INITIALIZE;
/* Must have a parent interface */
start = start && (vr->ifp != NULL);
+ whynot = (!start && !whynot) ? "No base interface" : NULL;
#if 0
/* Parent interface must be up */
start = start && if_is_operative(vr->ifp);
#endif
/* Must have a macvlan interface */
start = start && (r->mvl_ifp != NULL);
+ whynot = (!start && !whynot) ? "No VRRP interface" : NULL;
#if 0
/* Macvlan interface must be admin up */
start = start && CHECK_FLAG(r->mvl_ifp->flags, IFF_UP);
#endif
- /* Macvlan interface must have at least two v6 */
- start = start && (r->mvl_ifp->connected->count >= 2);
/* Macvlan interface must have a link local */
start = start && connected_get_linklocal(r->mvl_ifp);
+ whynot = (!start && !whynot) ? "No link local address configured" : NULL;
+ /* Macvlan interface must have a v6 IP besides the link local */
+ start = start && (r->mvl_ifp->connected->count >= 2);
+ whynot = (!start && !whynot) ? "No Virtual IP address configured" : NULL;
/* Must have at least one VIP configured */
start = start && r->addrs->count > 0;
if (start)
vrrp_event(r, VRRP_EVENT_STARTUP);
+ else if (whynot)
+ zlog_warn(VRRP_LOGPFX VRRP_LOGPFX_VRID
+ "Refusing to start IPv6 Virtual Router: %s",
+ vr->vrid, whynot);
}
void vrrp_set_priority(struct vrrp_vrouter *vr, uint8_t priority)