diff --git a/bgpd/bgp_debug.c b/bgpd/bgp_debug.c index 57f37c173f..cd6ba00846 100644 --- a/bgpd/bgp_debug.c +++ b/bgpd/bgp_debug.c @@ -2576,9 +2576,9 @@ static int bgp_debug_per_prefix(const struct prefix *p, /* Return true if this peer is on the per_peer_list of peers to debug * for BGP_DEBUG_TYPE */ -static int bgp_debug_per_peer(char *host, unsigned long term_bgp_debug_type, - unsigned int BGP_DEBUG_TYPE, - struct list *per_peer_list) +static bool bgp_debug_per_peer(char *host, unsigned long term_bgp_debug_type, + unsigned int BGP_DEBUG_TYPE, + struct list *per_peer_list) { struct bgp_debug_filter *filter; struct listnode *node, *nnode; @@ -2586,25 +2586,25 @@ static int bgp_debug_per_peer(char *host, unsigned long term_bgp_debug_type, if (term_bgp_debug_type & BGP_DEBUG_TYPE) { /* We are debugging all peers so return true */ if (!per_peer_list || list_isempty(per_peer_list)) - return 1; + return true; else { if (!host) - return 0; + return false; for (ALL_LIST_ELEMENTS(per_peer_list, node, nnode, filter)) if (strcmp(filter->host, host) == 0) - return 1; + return true; - return 0; + return false; } } - return 0; + return false; } -int bgp_debug_neighbor_events(struct peer *peer) +bool bgp_debug_neighbor_events(const struct peer *peer) { char *host = NULL; @@ -2616,7 +2616,7 @@ int bgp_debug_neighbor_events(struct peer *peer) bgp_debug_neighbor_events_peers); } -int bgp_debug_keepalive(struct peer *peer) +bool bgp_debug_keepalive(const struct peer *peer) { char *host = NULL; @@ -2628,7 +2628,7 @@ int bgp_debug_keepalive(struct peer *peer) bgp_debug_keepalive_peers); } -bool bgp_debug_update(struct peer *peer, const struct prefix *p, +bool bgp_debug_update(const struct peer *peer, const struct prefix *p, struct update_group *updgrp, unsigned int inbound) { char *host = NULL; diff --git a/bgpd/bgp_debug.h b/bgpd/bgp_debug.h index 407a74340a..62f5340dfd 100644 --- a/bgpd/bgp_debug.h +++ b/bgpd/bgp_debug.h @@ -174,9 +174,9 @@ extern void bgp_notify_print(struct peer *peer, struct bgp_notify *bgp_notify, const char *direct, bool hard_reset); extern const struct message bgp_status_msg[]; -extern int bgp_debug_neighbor_events(struct peer *peer); -extern int bgp_debug_keepalive(struct peer *peer); -extern bool bgp_debug_update(struct peer *peer, const struct prefix *p, +extern bool bgp_debug_neighbor_events(const struct peer *peer); +extern bool bgp_debug_keepalive(const struct peer *peer); +extern bool bgp_debug_update(const struct peer *peer, const struct prefix *p, struct update_group *updgrp, unsigned int inbound); extern bool bgp_debug_bestpath(struct bgp_dest *dest); extern bool bgp_debug_zebra(const struct prefix *p); diff --git a/bgpd/bgp_updgrp.c b/bgpd/bgp_updgrp.c index fb3f9aae43..c5d049f363 100644 --- a/bgpd/bgp_updgrp.c +++ b/bgpd/bgp_updgrp.c @@ -398,7 +398,6 @@ static unsigned int updgrp_hash_key_make(const void *p) key = jhash_1word( (peer->shared_network && peer_afi_active_nego(peer, AFI_IP6)), key); - /* * There are certain peers that must get their own update-group: * - lonesoul peers @@ -413,6 +412,59 @@ static unsigned int updgrp_hash_key_make(const void *p) key = jhash_1word(jhash(peer->host, strlen(peer->host), SEED2), key); + if (bgp_debug_neighbor_events(peer)) { + zlog_debug( + "%pBP Update Group Hash: sort: %d UpdGrpFlags: %u UpdGrpAFFlags: %u", + peer, peer->sort, peer->flags & PEER_UPDGRP_FLAGS, + flags & PEER_UPDGRP_AF_FLAGS); + zlog_debug( + "%pBP Update Group Hash: addpath: %u UpdGrpCapFlag: %u UpdGrpCapAFFlag: %u route_adv: %u change local as: %u", + peer, (uint32_t)peer->addpath_type[afi][safi], + peer->cap & PEER_UPDGRP_CAP_FLAGS, + peer->af_cap[afi][safi] & PEER_UPDGRP_AF_CAP_FLAGS, + peer->v_routeadv, peer->change_local_as); + zlog_debug( + "%pBP Update Group Hash: max packet size: %u pmax_out: %u Peer Group: %s rmap out: %s", + peer, peer->max_packet_size, peer->pmax_out[afi][safi], + peer->group ? peer->group->name : "(NONE)", + ROUTE_MAP_OUT_NAME(filter) ? ROUTE_MAP_OUT_NAME(filter) + : "(NONE)"); + zlog_debug( + "%pBP Update Group Hash: dlist out: %s plist out: %s aslist out: %s usmap out: %s advmap: %s", + peer, + DISTRIBUTE_OUT_NAME(filter) + ? DISTRIBUTE_OUT_NAME(filter) + : "(NONE)", + PREFIX_LIST_OUT_NAME(filter) + ? PREFIX_LIST_OUT_NAME(filter) + : "(NONE)", + FILTER_LIST_OUT_NAME(filter) + ? FILTER_LIST_OUT_NAME(filter) + : "(NONE)", + UNSUPPRESS_MAP_NAME(filter) + ? UNSUPPRESS_MAP_NAME(filter) + : "(NONE)", + ADVERTISE_MAP_NAME(filter) ? ADVERTISE_MAP_NAME(filter) + : "(NONE)"); + zlog_debug( + "%pBP Update Group Hash: default rmap: %s shared network and afi active network: %d", + peer, + peer->default_rmap[afi][safi].name + ? peer->default_rmap[afi][safi].name + : "(NONE)", + peer->shared_network && + peer_afi_active_nego(peer, AFI_IP6)); + zlog_debug( + "%pBP Update Group Hash: Lonesoul: %u ORF prefix: %u ORF old: %u max prefix out: %u", + peer, CHECK_FLAG(peer->flags, PEER_FLAG_LONESOUL), + CHECK_FLAG(peer->af_cap[afi][safi], + PEER_CAP_ORF_PREFIX_SM_RCV), + CHECK_FLAG(peer->af_cap[afi][safi], + PEER_CAP_ORF_PREFIX_SM_OLD_RCV), + CHECK_FLAG(peer->af_flags[afi][safi], + PEER_FLAG_MAX_PREFIX_OUT)); + zlog_debug("%pBP Update Group Hash key: %u", peer, key); + } return key; }