diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index 851432d562..1c2f8eb2da 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -2957,6 +2957,8 @@ static void bgp_dynamic_capability_graceful_restart(uint8_t *pnt, int action, uint8_t *data = pnt + 3; uint8_t *end = pnt + hdr->length; size_t len = end - data; + afi_t afi; + safi_t safi; if (action == CAPABILITY_ACTION_SET) { if (len < sizeof(gr_restart_flag_time)) { @@ -3031,6 +3033,15 @@ static void bgp_dynamic_capability_graceful_restart(uint8_t *pnt, int action, data += GRACEFUL_RESTART_CAPABILITY_PER_AFI_SAFI_SIZE; } } else { + FOREACH_AFI_SAFI (afi, safi) { + UNSET_FLAG(peer->af_cap[afi][safi], + PEER_CAP_RESTART_AF_RCV); + UNSET_FLAG(peer->af_cap[afi][safi], + PEER_CAP_RESTART_AF_PRESERVE_RCV); + } + + UNSET_FLAG(peer->cap, PEER_CAP_GRACEFUL_RESTART_R_BIT_RCV); + UNSET_FLAG(peer->cap, PEER_CAP_GRACEFUL_RESTART_N_BIT_RCV); UNSET_FLAG(peer->cap, PEER_CAP_RESTART_RCV); } }