]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_fsm.c
Merge pull request #5717 from pguibert6WIND/flowspec_issue_redistribute
[mirror_frr.git] / bgpd / bgp_fsm.c
index c5b46487a5a1275b2d701850a7f24ca8e4911006..da8e6a907bac1338f90ec5d25ce53fcce7cbeb9c 100644 (file)
@@ -646,8 +646,9 @@ static int bgp_graceful_deferral_timer_expire(struct thread *thread)
        bgp = info->bgp;
 
        if (BGP_DEBUG(update, UPDATE_OUT))
-               zlog_debug("afi %d, safi %d : graceful restart deferral timer expired",
-                               afi, safi);
+               zlog_debug(
+                       "afi %d, safi %d : graceful restart deferral timer expired",
+                       afi, safi);
 
        bgp->gr_info[afi][safi].t_select_deferral = NULL;
 
@@ -1198,28 +1199,28 @@ int bgp_stop(struct peer *peer)
                 */
                if (BGP_PEER_GRACEFUL_RESTART_CAPABLE(peer)) {
                        FOREACH_AFI_SAFI (afi, safi) {
-                               if (peer->afc_nego[afi][safi] &&
-                                   !CHECK_FLAG(peer->af_sflags[afi][safi],
-                                               PEER_STATUS_EOR_RECEIVED)) {
-                                       gr_info = &bgp->gr_info[afi][safi];
-
-                                       if (gr_info && (gr_info->eor_required))
-                                               gr_info->eor_required--;
-
-                                       if (gr_info && BGP_DEBUG(update,
-                                               UPDATE_OUT))
-                                               zlog_debug(
-                                                       "peer %s, EOR_required %d",
-                                                       peer->host,
-                                                       gr_info->eor_required);
-
-                                       /* There is no pending EOR message */
-                                       if (gr_info && gr_info->eor_required
-                                                       == 0) {
-                                               BGP_TIMER_OFF(
+                               if (!peer->afc_nego[afi][safi]
+                                   || CHECK_FLAG(peer->af_sflags[afi][safi],
+                                                 PEER_STATUS_EOR_RECEIVED))
+                                       continue;
+
+                               gr_info = &bgp->gr_info[afi][safi];
+                               if (!gr_info)
+                                       continue;
+
+                               if (gr_info->eor_required)
+                                       gr_info->eor_required--;
+
+                               if (BGP_DEBUG(update, UPDATE_OUT))
+                                       zlog_debug("peer %s, EOR_required %d",
+                                                  peer->host,
+                                                  gr_info->eor_required);
+
+                               /* There is no pending EOR message */
+                               if (gr_info->eor_required == 0) {
+                                       BGP_TIMER_OFF(
                                                gr_info->t_select_deferral);
-                                               gr_info->eor_received = 0;
-                                       }
+                                       gr_info->eor_received = 0;
                                }
                        }
                }
@@ -1677,27 +1678,14 @@ static int bgp_start_deferral_timer(struct bgp *bgp, afi_t afi, safi_t safi,
         */
        if (gr_info->eor_required == 0) {
                thread_info = XMALLOC(MTYPE_TMP, sizeof(struct afi_safi_info));
-               if (thread_info == NULL) {
-                       if (BGP_DEBUG(update, UPDATE_OUT))
-                               zlog_debug("%s : Error allocating thread info",
-                                               __func__);
-                       return -1;
-               }
 
                thread_info->afi = afi;
                thread_info->safi = safi;
                thread_info->bgp = bgp;
 
-               thread_add_timer(bm->master,
-                               bgp_graceful_deferral_timer_expire,
-                               thread_info, bgp->select_defer_time,
-                               &gr_info->t_select_deferral);
-               if (gr_info->t_select_deferral == NULL) {
-                       if (BGP_DEBUG(update, UPDATE_OUT))
-                               zlog_debug("Error starting deferral timer for %s",
-                                       get_afi_safi_str(afi, safi, false));
-                       return -1;
-               }
+               thread_add_timer(bm->master, bgp_graceful_deferral_timer_expire,
+                                thread_info, bgp->select_defer_time,
+                                &gr_info->t_select_deferral);
        }
        gr_info->eor_required++;
        /* Send message to RIB indicating route update pending */
@@ -2308,11 +2296,6 @@ int bgp_gr_lookup_n_update_all_peer(struct bgp *bgp,
                                "%s [BGP_GR] GLOBAL_INVALID",
                                __func__);
                                return BGP_ERR_GR_OPERATION_FAILED;
-                       default:
-                               zlog_debug(
-                               "%s [BGP_GR] Global unknown ERROR",
-                               __func__);
-                               return BGP_ERR_GR_OPERATION_FAILED;
                        }
                }
        }