forked from Mirror/frr
bgpd: Using no bgp fast-external-failover prevents vrf intf moves
When using `no bgp fast-external-failover` and a interface moves from one vrf into another we would not fully process the change. Fix this code path. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
6efca3442f
commit
c19fe3c7ab
|
@ -287,6 +287,7 @@ static int bgp_interface_down(int command, struct zclient *zclient,
|
||||||
struct nbr_connected *nc;
|
struct nbr_connected *nc;
|
||||||
struct listnode *node, *nnode;
|
struct listnode *node, *nnode;
|
||||||
struct bgp *bgp;
|
struct bgp *bgp;
|
||||||
|
struct peer *peer;
|
||||||
|
|
||||||
bgp = bgp_lookup_by_vrf_id(vrf_id);
|
bgp = bgp_lookup_by_vrf_id(vrf_id);
|
||||||
if (!bgp)
|
if (!bgp)
|
||||||
|
@ -307,11 +308,7 @@ static int bgp_interface_down(int command, struct zclient *zclient,
|
||||||
bgp_nbr_connected_delete(bgp, nc, 1);
|
bgp_nbr_connected_delete(bgp, nc, 1);
|
||||||
|
|
||||||
/* Fast external-failover */
|
/* Fast external-failover */
|
||||||
{
|
if (!CHECK_FLAG(bgp->flags, BGP_FLAG_NO_FAST_EXT_FAILOVER)) {
|
||||||
struct peer *peer;
|
|
||||||
|
|
||||||
if (CHECK_FLAG(bgp->flags, BGP_FLAG_NO_FAST_EXT_FAILOVER))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
|
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
|
||||||
#if defined(HAVE_CUMULUS)
|
#if defined(HAVE_CUMULUS)
|
||||||
|
@ -474,6 +471,7 @@ static int bgp_interface_vrf_update(int command, struct zclient *zclient,
|
||||||
struct nbr_connected *nc;
|
struct nbr_connected *nc;
|
||||||
struct listnode *node, *nnode;
|
struct listnode *node, *nnode;
|
||||||
struct bgp *bgp;
|
struct bgp *bgp;
|
||||||
|
struct peer *peer;
|
||||||
|
|
||||||
ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id,
|
ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id,
|
||||||
&new_vrf_id);
|
&new_vrf_id);
|
||||||
|
@ -495,12 +493,7 @@ static int bgp_interface_vrf_update(int command, struct zclient *zclient,
|
||||||
bgp_nbr_connected_delete(bgp, nc, 1);
|
bgp_nbr_connected_delete(bgp, nc, 1);
|
||||||
|
|
||||||
/* Fast external-failover */
|
/* Fast external-failover */
|
||||||
{
|
if (!CHECK_FLAG(bgp->flags, BGP_FLAG_NO_FAST_EXT_FAILOVER)) {
|
||||||
struct peer *peer;
|
|
||||||
|
|
||||||
if (CHECK_FLAG(bgp->flags, BGP_FLAG_NO_FAST_EXT_FAILOVER))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
|
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
|
||||||
if ((peer->ttl != 1) && (peer->gtsm_hops != 1))
|
if ((peer->ttl != 1) && (peer->gtsm_hops != 1))
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in a new issue