/* NSF delete stale route */
for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_RESERVED_3 ; safi++)
+ for (safi = SAFI_UNICAST ; safi < SAFI_RESERVED_4 ; safi++)
if (peer->nsf[afi][safi])
bgp_clear_stale_route (peer, afi, safi);
/* NSF delete stale route */
for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_RESERVED_3 ; safi++)
+ for (safi = SAFI_UNICAST ; safi < SAFI_RESERVED_4 ; safi++)
if (peer->nsf[afi][safi])
bgp_clear_stale_route (peer, afi, safi);
UNSET_FLAG (peer->sflags, PEER_STATUS_NSF_MODE);
for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_RESERVED_3 ; safi++)
+ for (safi = SAFI_UNICAST ; safi < SAFI_RESERVED_4 ; safi++)
peer->nsf[afi][safi] = 0;
}
/* graceful restart */
UNSET_FLAG (peer->sflags, PEER_STATUS_NSF_WAIT);
for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_RESERVED_3 ; safi++)
+ for (safi = SAFI_UNICAST ; safi < SAFI_RESERVED_4 ; safi++)
{
if (peer->afc_nego[afi][safi]
&& CHECK_FLAG (peer->cap, PEER_CAP_RESTART_ADV)
struct bgp_info *ri;
struct bgp_table *table;
- table = peer->bgp->rib[afi][safi];
+ if ( safi == SAFI_MPLS_VPN)
+ {
+ for (rn = bgp_table_top (peer->bgp->rib[afi][safi]); rn; rn = bgp_route_next (rn))
+ {
+ struct bgp_node *rm;
+ struct bgp_info *ri;
- for (rn = bgp_table_top (table); rn; rn = bgp_route_next (rn))
+ /* look for neighbor in tables */
+ if ((table = rn->info) != NULL)
+ {
+ for (rm = bgp_table_top (table); rm; rm = bgp_route_next (rm))
+ for (ri = rm->info; ri; ri = ri->next)
+ if (ri->peer == peer)
+ {
+ if (CHECK_FLAG (ri->flags, BGP_INFO_STALE))
+ bgp_rib_remove (rm, ri, peer, afi, safi);
+ break;
+ }
+ }
+ }
+ }
+ else
{
- for (ri = rn->info; ri; ri = ri->next)
- if (ri->peer == peer)
- {
- if (CHECK_FLAG (ri->flags, BGP_INFO_STALE))
- bgp_rib_remove (rn, ri, peer, afi, safi);
- break;
- }
+ for (rn = bgp_table_top (peer->bgp->rib[afi][safi]); rn; rn = bgp_route_next (rn))
+ for (ri = rn->info; ri; ri = ri->next)
+ if (ri->peer == peer)
+ {
+ if (CHECK_FLAG (ri->flags, BGP_INFO_STALE))
+ bgp_rib_remove (rn, ri, peer, afi, safi);
+ break;
+ }
}
}
UNSET_FLAG (peer->sflags, PEER_STATUS_NSF_MODE);
for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_RESERVED_3 ; safi++)
+ for (safi = SAFI_UNICAST ; safi < SAFI_RESERVED_4 ; safi++)
peer->nsf[afi][safi] = 0;
if (peer->t_gr_restart)
#define SAFI_MPLS_VPN 3
#define SAFI_RESERVED_4 4
#define SAFI_ENCAP 7 /* per IANA */
+#define SAFI_RESERVED_5 5
#define SAFI_MAX 8
/* Default Administrative Distance of each protocol. */