diff options
-rw-r--r-- | vrrpd/vrrp.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/vrrpd/vrrp.c b/vrrpd/vrrp.c index df2376c47..eed0e8a31 100644 --- a/vrrpd/vrrp.c +++ b/vrrpd/vrrp.c @@ -281,7 +281,7 @@ void vrrp_check_start(struct vrrp_vrouter *vr) { struct vrrp_router *r; bool start; - const char *whynot; + const char *whynot = NULL; if (vr->shutdown || vr->ifp == NULL) return; @@ -289,13 +289,14 @@ void vrrp_check_start(struct vrrp_vrouter *vr) r = vr->v4; /* Must not already be started */ start = r->fsm.state == VRRP_STATE_INITIALIZE; - whynot = NULL; + whynot = (!start && !whynot) ? "Already running" : whynot; /* Must have a parent interface */ start = start && (vr->ifp != NULL); whynot = (!start && !whynot) ? "No base interface" : whynot; #if 0 /* Parent interface must be up */ start = start && if_is_operative(vr->ifp); + start = (!start && !whynot) ? "Base interface inoperative" : whynot; #endif /* Parent interface must have at least one v4 */ start = start && connected_count_by_family(vr->ifp, AF_INET) > 0; @@ -306,6 +307,7 @@ void vrrp_check_start(struct vrrp_vrouter *vr) #if 0 /* Macvlan interface must be admin up */ start = start && CHECK_FLAG(r->mvl_ifp->flags, IFF_UP); + start = (!start && !whynot) ? "Macvlan device admin down" : whynot; #endif /* Must have at least one VIP configured */ start = start && r->addrs->count > 0; @@ -318,10 +320,12 @@ void vrrp_check_start(struct vrrp_vrouter *vr) "Refusing to start Virtual Router: %s", vr->vrid, family2str(r->family), whynot); + whynot = NULL; + r = vr->v6; /* Must not already be started */ start = r->fsm.state == VRRP_STATE_INITIALIZE; - whynot = NULL; + whynot = (!start && !whynot) ? "Already running" : whynot; /* Must not be v2 */ start = start && vr->version != 2; whynot = (!start && !whynot) ? "VRRPv2 does not support v6" : whynot; @@ -331,6 +335,7 @@ void vrrp_check_start(struct vrrp_vrouter *vr) #if 0 /* Parent interface must be up */ start = start && if_is_operative(vr->ifp); + start = (!start && !whynot) ? "Base interface inoperative" : whynot; #endif /* Must have a macvlan interface */ start = start && (r->mvl_ifp != NULL); @@ -338,6 +343,7 @@ void vrrp_check_start(struct vrrp_vrouter *vr) #if 0 /* Macvlan interface must be admin up */ start = start && CHECK_FLAG(r->mvl_ifp->flags, IFF_UP); + start = (!start && !whynot) ? "Macvlan device admin down" : whynot; /* Macvlan interface must have a link local */ start = start && connected_get_linklocal(r->mvl_ifp); whynot = |