mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-03 15:16:20 +00:00
vrrpd: check for v6 link-local before starting
Having a v6 link-local is a precondition for starting a v6 VRRP router; check that we do. Also add some helpful comments to the check-start function because good lord that thing is getting unwieldy. Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
parent
45505f63c5
commit
114a413efa
21
vrrpd/vrrp.c
21
vrrpd/vrrp.c
@ -245,24 +245,39 @@ void vrrp_check_start(struct vrrp_vrouter *vr)
|
||||
return;
|
||||
|
||||
r = vr->v4;
|
||||
/* Must not already be started */
|
||||
start = r->fsm.state == VRRP_STATE_INITIALIZE;
|
||||
/* Must have a parent interface */
|
||||
start = start && (vr->ifp != NULL);
|
||||
/* Parent interface must be up */
|
||||
start = start && (CHECK_FLAG(vr->ifp->flags, IFF_UP));
|
||||
start = start && vr->ifp->connected->count > 0;
|
||||
/* Parent interface must have at least one v4 */
|
||||
start = start && vr->ifp->connected->count > 1;
|
||||
/* Must have a macvlan interface */
|
||||
start = start && (r->mvl_ifp != NULL);
|
||||
/* Macvlan interface must be up */
|
||||
start = start && (CHECK_FLAG(r->mvl_ifp->flags, IFF_UP));
|
||||
/* Must have at least one VIP configured */
|
||||
start = start && r->addrs->count > 0;
|
||||
if (start)
|
||||
vrrp_event(r, VRRP_EVENT_STARTUP);
|
||||
|
||||
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);
|
||||
/* Parent interface must be up */
|
||||
start = start && (CHECK_FLAG(vr->ifp->flags, IFF_UP));
|
||||
start = start && vr->ifp->connected->count;
|
||||
/* Must have a macvlan interface */
|
||||
start = start && (r->mvl_ifp != NULL);
|
||||
/* Macvlan interface must be up */
|
||||
start = start && (CHECK_FLAG(r->mvl_ifp->flags, IFF_UP));
|
||||
start = start && (r->mvl_ifp->connected->count > 0);
|
||||
/* 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);
|
||||
/* Must have at least one VIP configured */
|
||||
start = start && r->addrs->count > 0;
|
||||
if (start)
|
||||
vrrp_event(r, VRRP_EVENT_STARTUP);
|
||||
|
Loading…
Reference in New Issue
Block a user