diff options
-rw-r--r-- | bgpd/bgp_fsm.c | 6 | ||||
-rw-r--r-- | bgpd/bgp_route.c | 2 | ||||
-rw-r--r-- | bgpd/bgp_zebra.c | 48 | ||||
-rw-r--r-- | bgpd/bgp_zebra.h | 3 | ||||
-rw-r--r-- | lib/log.c | 20 | ||||
-rw-r--r-- | lib/log.h | 1 |
6 files changed, 62 insertions, 18 deletions
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c index 59a8fcb92..fb7b99877 100644 --- a/bgpd/bgp_fsm.c +++ b/bgpd/bgp_fsm.c @@ -2047,7 +2047,7 @@ static int bgp_start_deferral_timer(struct bgp *bgp, afi_t afi, safi_t safi, if (gr_info->af_enabled[afi][safi] == false) { gr_info->af_enabled[afi][safi] = true; /* Send message to RIB */ - bgp_zebra_update(afi, safi, bgp->vrf_id, + bgp_zebra_update(bgp, afi, safi, ZEBRA_CLIENT_ROUTE_UPDATE_PENDING); } if (BGP_DEBUG(update, UPDATE_OUT)) @@ -2194,7 +2194,7 @@ static enum bgp_fsm_state_progress bgp_establish(struct peer *peer) /* Send route processing complete message to RIB */ bgp_zebra_update( - afi, safi, peer->bgp->vrf_id, + peer->bgp, afi, safi, ZEBRA_CLIENT_ROUTE_UPDATE_COMPLETE); } } else { @@ -2206,7 +2206,7 @@ static enum bgp_fsm_state_progress bgp_establish(struct peer *peer) /* Send route processing complete message to RIB */ bgp_zebra_update( - afi, safi, peer->bgp->vrf_id, + peer->bgp, afi, safi, ZEBRA_CLIENT_ROUTE_UPDATE_COMPLETE); } } diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 56f548bfd..4320259cc 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -3405,7 +3405,7 @@ void bgp_best_path_select_defer(struct bgp *bgp, afi_t afi, safi_t safi) if (!bgp->gr_info[afi][safi].gr_deferred) { bgp_send_delayed_eor(bgp); /* Send route processing complete message to RIB */ - bgp_zebra_update(afi, safi, bgp->vrf_id, + bgp_zebra_update(bgp, afi, safi, ZEBRA_CLIENT_ROUTE_UPDATE_COMPLETE); return; } diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c index d05768da0..ada1f0d26 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c @@ -3748,16 +3748,22 @@ int bgp_zebra_send_capabilities(struct bgp *bgp, bool disable) struct zapi_cap api; int ret = BGP_GR_SUCCESS; + if (BGP_DEBUG(zebra, ZEBRA)) + zlog_debug("%s: Sending %sable for %s", __func__, + disable ? "dis" : "en", bgp->name_pretty); + if (zclient == NULL) { if (BGP_DEBUG(zebra, ZEBRA)) - zlog_debug("zclient invalid"); + zlog_debug("%s: %s zclient invalid", __func__, + bgp->name_pretty); return BGP_GR_FAILURE; } /* Check if the client is connected */ if ((zclient->sock < 0) || (zclient->t_connect)) { if (BGP_DEBUG(zebra, ZEBRA)) - zlog_debug("client not connected"); + zlog_debug("%s: %s client not connected", __func__, + bgp->name_pretty); return BGP_GR_FAILURE; } @@ -3776,7 +3782,8 @@ int bgp_zebra_send_capabilities(struct bgp *bgp, bool disable) if (zclient_capabilities_send(ZEBRA_CLIENT_CAPABILITIES, zclient, &api) == ZCLIENT_SEND_FAILURE) { - zlog_err("error sending capability"); + zlog_err("%s: %s error sending capability", __func__, + bgp->name_pretty); ret = BGP_GR_FAILURE; } else { if (disable) @@ -3785,7 +3792,8 @@ int bgp_zebra_send_capabilities(struct bgp *bgp, bool disable) bgp->present_zebra_gr_state = ZEBRA_GR_ENABLE; if (BGP_DEBUG(zebra, ZEBRA)) - zlog_debug("send capabilty success"); + zlog_debug("%s: %s send capabilty success", __func__, + bgp->name_pretty); ret = BGP_GR_SUCCESS; } return ret; @@ -3794,32 +3802,41 @@ int bgp_zebra_send_capabilities(struct bgp *bgp, bool disable) /* Send route update pesding or completed status to RIB for the * specific AFI, SAFI */ -int bgp_zebra_update(afi_t afi, safi_t safi, vrf_id_t vrf_id, int type) +int bgp_zebra_update(struct bgp *bgp, afi_t afi, safi_t safi, + enum zserv_client_capabilities type) { struct zapi_cap api = {0}; + if (BGP_DEBUG(zebra, ZEBRA)) + zlog_debug("%s: %s afi: %u safi: %u Command %s", __func__, + bgp->name_pretty, afi, safi, + zserv_gr_client_cap_string(type)); + if (zclient == NULL) { if (BGP_DEBUG(zebra, ZEBRA)) - zlog_debug("zclient == NULL, invalid"); + zlog_debug("%s: %s zclient == NULL, invalid", __func__, + bgp->name_pretty); return BGP_GR_FAILURE; } /* Check if the client is connected */ if ((zclient->sock < 0) || (zclient->t_connect)) { if (BGP_DEBUG(zebra, ZEBRA)) - zlog_debug("client not connected"); + zlog_debug("%s: %s client not connected", __func__, + bgp->name_pretty); return BGP_GR_FAILURE; } api.afi = afi; api.safi = safi; - api.vrf_id = vrf_id; + api.vrf_id = bgp->vrf_id; api.cap = type; if (zclient_capabilities_send(ZEBRA_CLIENT_CAPABILITIES, zclient, &api) == ZCLIENT_SEND_FAILURE) { if (BGP_DEBUG(zebra, ZEBRA)) - zlog_debug("error sending capability"); + zlog_debug("%s: %s error sending capability", __func__, + bgp->name_pretty); return BGP_GR_FAILURE; } return BGP_GR_SUCCESS; @@ -3831,6 +3848,10 @@ int bgp_zebra_stale_timer_update(struct bgp *bgp) { struct zapi_cap api; + if (BGP_DEBUG(zebra, ZEBRA)) + zlog_debug("%s: %s Timer Update to %u", __func__, + bgp->name_pretty, bgp->rib_stale_time); + if (zclient == NULL) { if (BGP_DEBUG(zebra, ZEBRA)) zlog_debug("zclient invalid"); @@ -3840,7 +3861,8 @@ int bgp_zebra_stale_timer_update(struct bgp *bgp) /* Check if the client is connected */ if ((zclient->sock < 0) || (zclient->t_connect)) { if (BGP_DEBUG(zebra, ZEBRA)) - zlog_debug("client not connected"); + zlog_debug("%s: %s client not connected", __func__, + bgp->name_pretty); return BGP_GR_FAILURE; } @@ -3851,11 +3873,11 @@ int bgp_zebra_stale_timer_update(struct bgp *bgp) if (zclient_capabilities_send(ZEBRA_CLIENT_CAPABILITIES, zclient, &api) == ZCLIENT_SEND_FAILURE) { if (BGP_DEBUG(zebra, ZEBRA)) - zlog_debug("error sending capability"); + zlog_debug("%s: %s error sending capability", __func__, + bgp->name_pretty); return BGP_GR_FAILURE; } - if (BGP_DEBUG(zebra, ZEBRA)) - zlog_debug("send capabilty success"); + return BGP_GR_SUCCESS; } diff --git a/bgpd/bgp_zebra.h b/bgpd/bgp_zebra.h index 8a0203c32..6f28f7b90 100644 --- a/bgpd/bgp_zebra.h +++ b/bgpd/bgp_zebra.h @@ -114,7 +114,8 @@ extern void bgp_send_pbr_iptable(struct bgp_pbr_action *pba, extern void bgp_zebra_announce_default(struct bgp *bgp, struct nexthop *nh, afi_t afi, uint32_t table_id, bool announce); extern int bgp_zebra_send_capabilities(struct bgp *bgp, bool disable); -extern int bgp_zebra_update(afi_t afi, safi_t safi, vrf_id_t vrf_id, int type); +extern int bgp_zebra_update(struct bgp *bgp, afi_t afi, safi_t safi, + enum zserv_client_capabilities); extern int bgp_zebra_stale_timer_update(struct bgp *bgp); extern int bgp_zebra_srv6_manager_get_locator_chunk(const char *name); extern int bgp_zebra_srv6_manager_release_locator_chunk(const char *name); @@ -506,6 +506,26 @@ const char *zserv_command_string(unsigned int command) return command_types[command].string; } +#define DESC_ENTRY(T) [(T)] = {(T), (#T), '\0'} +static const struct zebra_desc_table gr_client_cap_types[] = { + DESC_ENTRY(ZEBRA_CLIENT_GR_CAPABILITIES), + DESC_ENTRY(ZEBRA_CLIENT_ROUTE_UPDATE_COMPLETE), + DESC_ENTRY(ZEBRA_CLIENT_ROUTE_UPDATE_PENDING), + DESC_ENTRY(ZEBRA_CLIENT_GR_DISABLE), + DESC_ENTRY(ZEBRA_CLIENT_RIB_STALE_TIME), +}; +#undef DESC_ENTRY + +const char *zserv_gr_client_cap_string(uint32_t zcc) +{ + if (zcc >= array_size(gr_client_cap_types)) { + flog_err(EC_LIB_DEVELOPMENT, "unknown zserv command type: %u", + zcc); + return unknown.string; + } + return gr_client_cap_types[zcc].string; +} + int proto_name2num(const char *s) { unsigned i; @@ -113,6 +113,7 @@ extern int proto_name2num(const char *s); extern int proto_redistnum(int afi, const char *s); extern const char *zserv_command_string(unsigned int command); +extern const char *zserv_gr_client_cap_string(unsigned int zcc); #define OSPF_LOG(level, cond, fmt, ...) \ do { \ |