mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 14:34:22 +00:00
pimd: Fix first DR Election
The function pim_neighbor_new caused the dr election before the addition of the neighbor to the pim_ifp->pim_neighbor_list, in pim_neighbor_add, which is needed to properly elect the correct DR. Move the dr_election and hello trigger till after the addition to the list. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
dedccda63f
commit
818a327c24
@ -347,26 +347,6 @@ static struct pim_neighbor *pim_neighbor_new(struct interface *ifp,
|
|||||||
++pim_ifp->pim_dr_num_nondrpri_neighbors;
|
++pim_ifp->pim_dr_num_nondrpri_neighbors;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
RFC 4601: 4.3.2. DR Election
|
|
||||||
|
|
||||||
A router's idea of the current DR on an interface can change when a
|
|
||||||
PIM Hello message is received, when a neighbor times out, or when a
|
|
||||||
router's own DR Priority changes.
|
|
||||||
*/
|
|
||||||
pim_if_dr_election(neigh->interface); // new neighbor -- should not trigger dr election...
|
|
||||||
|
|
||||||
/*
|
|
||||||
RFC 4601: 4.3.1. Sending Hello Messages
|
|
||||||
|
|
||||||
To allow new or rebooting routers to learn of PIM neighbors quickly,
|
|
||||||
when a Hello message is received from a new neighbor, or a Hello
|
|
||||||
message with a new GenID is received from an existing neighbor, a
|
|
||||||
new Hello message should be sent on this interface after a
|
|
||||||
randomized delay between 0 and Triggered_Hello_Delay.
|
|
||||||
*/
|
|
||||||
pim_hello_restart_triggered(neigh->interface);
|
|
||||||
|
|
||||||
return neigh;
|
return neigh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -453,6 +433,26 @@ struct pim_neighbor *pim_neighbor_add(struct interface *ifp,
|
|||||||
|
|
||||||
listnode_add(pim_ifp->pim_neighbor_list, neigh);
|
listnode_add(pim_ifp->pim_neighbor_list, neigh);
|
||||||
|
|
||||||
|
/*
|
||||||
|
RFC 4601: 4.3.2. DR Election
|
||||||
|
|
||||||
|
A router's idea of the current DR on an interface can change when a
|
||||||
|
PIM Hello message is received, when a neighbor times out, or when a
|
||||||
|
router's own DR Priority changes.
|
||||||
|
*/
|
||||||
|
pim_if_dr_election(neigh->interface); // new neighbor -- should not trigger dr election...
|
||||||
|
|
||||||
|
/*
|
||||||
|
RFC 4601: 4.3.1. Sending Hello Messages
|
||||||
|
|
||||||
|
To allow new or rebooting routers to learn of PIM neighbors quickly,
|
||||||
|
when a Hello message is received from a new neighbor, or a Hello
|
||||||
|
message with a new GenID is received from an existing neighbor, a
|
||||||
|
new Hello message should be sent on this interface after a
|
||||||
|
randomized delay between 0 and Triggered_Hello_Delay.
|
||||||
|
*/
|
||||||
|
pim_hello_restart_triggered(neigh->interface);
|
||||||
|
|
||||||
return neigh;
|
return neigh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user