diff options
Diffstat (limited to 'vrrpd/vrrp.c')
| -rw-r--r-- | vrrpd/vrrp.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/vrrpd/vrrp.c b/vrrpd/vrrp.c index 54089b3612..eed0e8a31a 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,16 +289,17 @@ 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 && vr->ifp->connected->count > 1; + start = start && connected_count_by_family(vr->ifp, AF_INET) > 0; whynot = (!start && !whynot) ? "No primary IPv4 address" : whynot; /* Must have a macvlan interface */ start = start && (r->mvl_ifp != NULL); @@ -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,20 +343,21 @@ 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 = - (!start && !whynot) ? "No link local address configured" : NULL; + (!start && !whynot) ? "No link local address configured" : whynot; /* Macvlan interface must have a v6 IP besides the link local */ - start = start && (r->mvl_ifp->connected->count >= 2); + start = start && (connected_count_by_family(r->mvl_ifp, AF_INET6) > 1); whynot = (!start && !whynot) - ? "No Virtual IP configured on macvlan device" - : NULL; + ? "No Virtual IPv6 address configured on macvlan device" + : whynot; #endif /* Must have at least one VIP configured */ start = start && r->addrs->count > 0; whynot = - (!start && !whynot) ? "No Virtual IP address configured" : NULL; + (!start && !whynot) ? "No Virtual IP address configured" : whynot; if (start) vrrp_event(r, VRRP_EVENT_STARTUP); else if (whynot) |
