X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=bgpd%2Fbgpd.c;h=ae46efef2c13ea282e6141f7cc3a70bcceb6e122;hb=cd9d0537411d0a74cd19ae36f6d3716c8ccbb4c1;hp=0fd0dafa2232c9c5baeb52764f7dc7cce5a09c13;hpb=4b0d6b4244aff02be34c5b416b25b7259bf66350;p=mirror_frr.git diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 0fd0dafa2..ae46efef2 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -6,7 +6,7 @@ #include #include "prefix.h" -#include "thread.h" +#include "event.h" #include "buffer.h" #include "stream.h" #include "ringbuf.h" @@ -977,9 +977,10 @@ void peer_flag_inherit(struct peer *peer, uint64_t flag) COND_FLAG(peer->flags, flag, group_val); } -int peer_af_flag_check(struct peer *peer, afi_t afi, safi_t safi, uint32_t flag) +bool peer_af_flag_check(struct peer *peer, afi_t afi, safi_t safi, + uint64_t flag) { - return CHECK_FLAG(peer->af_flags[afi][safi], flag); + return !!CHECK_FLAG(peer->af_flags[afi][safi], flag); } void peer_af_flag_inherit(struct peer *peer, afi_t afi, safi_t safi, @@ -1125,9 +1126,9 @@ static void peer_free(struct peer *peer) bgp_timer_set(peer); bgp_reads_off(peer); bgp_writes_off(peer); - thread_cancel_event_ready(bm->master, peer); + event_cancel_event_ready(bm->master, peer); FOREACH_AFI_SAFI (afi, safi) - THREAD_OFF(peer->t_revalidate_all[afi][safi]); + EVENT_OFF(peer->t_revalidate_all[afi][safi]); assert(!peer->t_write); assert(!peer->t_read); BGP_EVENT_FLUSH(peer); @@ -2466,16 +2467,16 @@ void peer_nsf_stop(struct peer *peer) FOREACH_AFI_SAFI_NSF (afi, safi) { peer->nsf[afi][safi] = 0; - THREAD_OFF(peer->t_llgr_stale[afi][safi]); + EVENT_OFF(peer->t_llgr_stale[afi][safi]); } if (peer->t_gr_restart) { - THREAD_OFF(peer->t_gr_restart); + EVENT_OFF(peer->t_gr_restart); if (bgp_debug_neighbor_events(peer)) zlog_debug("%pBP graceful restart timer stopped", peer); } if (peer->t_gr_stale) { - THREAD_OFF(peer->t_gr_stale); + EVENT_OFF(peer->t_gr_stale); if (bgp_debug_neighbor_events(peer)) zlog_debug( "%pBP graceful restart stalepath timer stopped", @@ -2515,9 +2516,9 @@ int peer_delete(struct peer *peer) bgp_keepalives_off(peer); bgp_reads_off(peer); bgp_writes_off(peer); - thread_cancel_event_ready(bm->master, peer); + event_cancel_event_ready(bm->master, peer); FOREACH_AFI_SAFI (afi, safi) - THREAD_OFF(peer->t_revalidate_all[afi][safi]); + EVENT_OFF(peer->t_revalidate_all[afi][safi]); assert(!CHECK_FLAG(peer->thread_flags, PEER_THREAD_WRITES_ON)); assert(!CHECK_FLAG(peer->thread_flags, PEER_THREAD_READS_ON)); assert(!CHECK_FLAG(peer->thread_flags, PEER_THREAD_KEEPALIVES_ON)); @@ -2725,7 +2726,7 @@ struct peer_group *peer_group_get(struct bgp *bgp, const char *name) static void peer_group2peer_config_copy(struct peer_group *group, struct peer *peer) { - uint32_t flags_tmp; + uint64_t flags_tmp; struct peer *conf; bool config_node = !!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE); @@ -3196,11 +3197,11 @@ int peer_group_bind(struct bgp *bgp, union sockunion *su, struct peer *peer, return 0; } -static void bgp_startup_timer_expire(struct thread *thread) +static void bgp_startup_timer_expire(struct event *thread) { struct bgp *bgp; - bgp = THREAD_ARG(thread); + bgp = EVENT_ARG(thread); bgp->t_startup = NULL; } @@ -3354,8 +3355,8 @@ static struct bgp *bgp_create(as_t *as, const char *name, if (name) bgp->name = XSTRDUP(MTYPE_BGP, name); - thread_add_timer(bm->master, bgp_startup_timer_expire, bgp, - bgp->restart_time, &bgp->t_startup); + event_add_timer(bm->master, bgp_startup_timer_expire, bgp, + bgp->restart_time, &bgp->t_startup); /* printable name we can use in debug messages */ if (inst_type == BGP_INSTANCE_TYPE_DEFAULT) { @@ -3695,7 +3696,7 @@ void bgp_instance_down(struct bgp *bgp) /* Stop timers. */ if (bgp->t_rmap_def_originate_eval) { - THREAD_OFF(bgp->t_rmap_def_originate_eval); + EVENT_OFF(bgp->t_rmap_def_originate_eval); bgp_unlock(bgp); /* TODO - This timer is started with a lock - why? */ } @@ -3747,39 +3748,39 @@ int bgp_delete(struct bgp *bgp) hook_call(bgp_inst_delete, bgp); FOREACH_AFI_SAFI (afi, safi) - THREAD_OFF(bgp->t_revalidate[afi][safi]); + EVENT_OFF(bgp->t_revalidate[afi][safi]); - THREAD_OFF(bgp->t_condition_check); - THREAD_OFF(bgp->t_startup); - THREAD_OFF(bgp->t_maxmed_onstartup); - THREAD_OFF(bgp->t_update_delay); - THREAD_OFF(bgp->t_establish_wait); + EVENT_OFF(bgp->t_condition_check); + EVENT_OFF(bgp->t_startup); + EVENT_OFF(bgp->t_maxmed_onstartup); + EVENT_OFF(bgp->t_update_delay); + EVENT_OFF(bgp->t_establish_wait); /* Set flag indicating bgp instance delete in progress */ SET_FLAG(bgp->flags, BGP_FLAG_DELETE_IN_PROGRESS); /* Delete the graceful restart info */ FOREACH_AFI_SAFI (afi, safi) { - struct thread *t; + struct event *t; gr_info = &bgp->gr_info[afi][safi]; if (!gr_info) continue; t = gr_info->t_select_deferral; if (t) { - void *info = THREAD_ARG(t); + void *info = EVENT_ARG(t); XFREE(MTYPE_TMP, info); } - THREAD_OFF(gr_info->t_select_deferral); + EVENT_OFF(gr_info->t_select_deferral); t = gr_info->t_route_select; if (t) { - void *info = THREAD_ARG(t); + void *info = EVENT_ARG(t); XFREE(MTYPE_TMP, info); } - THREAD_OFF(gr_info->t_route_select); + EVENT_OFF(gr_info->t_route_select); } if (BGP_DEBUG(zebra, ZEBRA)) { @@ -3802,7 +3803,7 @@ int bgp_delete(struct bgp *bgp) /* Stop timers. */ if (bgp->t_rmap_def_originate_eval) { - THREAD_OFF(bgp->t_rmap_def_originate_eval); + EVENT_OFF(bgp->t_rmap_def_originate_eval); bgp_unlock(bgp); /* TODO - This timer is started with a lock - why? */ } @@ -3896,7 +3897,7 @@ int bgp_delete(struct bgp *bgp) if (bgp->process_queue) work_queue_free_and_null(&bgp->process_queue); - thread_master_free_unused(bm->master); + event_master_free_unused(bm->master); bgp_unlock(bgp); /* initial reference */ return 0; @@ -4517,7 +4518,7 @@ static int peer_flag_action_set(const struct peer_flag_action *action_list, return found; } -static void peer_flag_modify_action(struct peer *peer, uint32_t flag) +static void peer_flag_modify_action(struct peer *peer, uint64_t flag) { if (flag == PEER_FLAG_SHUTDOWN) { if (CHECK_FLAG(peer->flags, flag)) { @@ -4527,7 +4528,7 @@ static void peer_flag_modify_action(struct peer *peer, uint32_t flag) UNSET_FLAG(peer->sflags, PEER_STATUS_PREFIX_OVERFLOW); if (peer->t_pmax_restart) { - THREAD_OFF(peer->t_pmax_restart); + EVENT_OFF(peer->t_pmax_restart); if (bgp_debug_neighbor_events(peer)) zlog_debug( "%pBP Maximum-prefix restart timer canceled", @@ -6312,8 +6313,11 @@ int peer_local_as_set(struct peer *peer, as_t as, bool no_prepend, && old_replace_as == replace_as) return 0; peer->change_local_as = as; - if (as_str) + if (as_str) { + if (peer->change_local_as_pretty) + XFREE(MTYPE_BGP, peer->change_local_as_pretty); peer->change_local_as_pretty = XSTRDUP(MTYPE_BGP, as_str); + } (void)peer_sort(peer); @@ -7394,7 +7398,7 @@ static bool peer_maximum_prefix_clear_overflow(struct peer *peer) UNSET_FLAG(peer->sflags, PEER_STATUS_PREFIX_OVERFLOW); if (peer->t_pmax_restart) { - THREAD_OFF(peer->t_pmax_restart); + EVENT_OFF(peer->t_pmax_restart); if (bgp_debug_neighbor_events(peer)) zlog_debug( "%pBP Maximum-prefix restart timer cancelled", @@ -8006,7 +8010,7 @@ char *peer_uptime(time_t uptime2, char *buf, size_t len, bool use_json, return buf; } -void bgp_master_init(struct thread_master *master, const int buffer_size, +void bgp_master_init(struct event_loop *master, const int buffer_size, struct list *addresses) { qobj_init(); @@ -8272,7 +8276,7 @@ void bgp_terminate(void) if (bm->listen_sockets) list_delete(&bm->listen_sockets); - THREAD_OFF(bm->t_rmap_update); + EVENT_OFF(bm->t_rmap_update); bgp_mac_finish(); }