Merge pull request #11149 from donaldsharp/update_group_debugging

Update group debugging
This commit is contained in:
Donatas Abraitis 2022-05-14 21:15:03 +03:00 committed by GitHub
commit e78ec23c02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 67 additions and 15 deletions

View File

@ -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 /* Return true if this peer is on the per_peer_list of peers to debug
* for BGP_DEBUG_TYPE * for BGP_DEBUG_TYPE
*/ */
static int bgp_debug_per_peer(char *host, unsigned long term_bgp_debug_type, static bool bgp_debug_per_peer(char *host, unsigned long term_bgp_debug_type,
unsigned int BGP_DEBUG_TYPE, unsigned int BGP_DEBUG_TYPE,
struct list *per_peer_list) struct list *per_peer_list)
{ {
struct bgp_debug_filter *filter; struct bgp_debug_filter *filter;
struct listnode *node, *nnode; 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) { if (term_bgp_debug_type & BGP_DEBUG_TYPE) {
/* We are debugging all peers so return true */ /* We are debugging all peers so return true */
if (!per_peer_list || list_isempty(per_peer_list)) if (!per_peer_list || list_isempty(per_peer_list))
return 1; return true;
else { else {
if (!host) if (!host)
return 0; return false;
for (ALL_LIST_ELEMENTS(per_peer_list, node, nnode, for (ALL_LIST_ELEMENTS(per_peer_list, node, nnode,
filter)) filter))
if (strcmp(filter->host, host) == 0) 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; char *host = NULL;
@ -2616,7 +2616,7 @@ int bgp_debug_neighbor_events(struct peer *peer)
bgp_debug_neighbor_events_peers); bgp_debug_neighbor_events_peers);
} }
int bgp_debug_keepalive(struct peer *peer) bool bgp_debug_keepalive(const struct peer *peer)
{ {
char *host = NULL; char *host = NULL;
@ -2628,7 +2628,7 @@ int bgp_debug_keepalive(struct peer *peer)
bgp_debug_keepalive_peers); 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) struct update_group *updgrp, unsigned int inbound)
{ {
char *host = NULL; char *host = NULL;

View File

@ -174,9 +174,9 @@ extern void bgp_notify_print(struct peer *peer, struct bgp_notify *bgp_notify,
const char *direct, bool hard_reset); const char *direct, bool hard_reset);
extern const struct message bgp_status_msg[]; extern const struct message bgp_status_msg[];
extern int bgp_debug_neighbor_events(struct peer *peer); extern bool bgp_debug_neighbor_events(const struct peer *peer);
extern int bgp_debug_keepalive(struct peer *peer); extern bool bgp_debug_keepalive(const struct peer *peer);
extern bool bgp_debug_update(struct peer *peer, const struct prefix *p, extern bool bgp_debug_update(const struct peer *peer, const struct prefix *p,
struct update_group *updgrp, unsigned int inbound); struct update_group *updgrp, unsigned int inbound);
extern bool bgp_debug_bestpath(struct bgp_dest *dest); extern bool bgp_debug_bestpath(struct bgp_dest *dest);
extern bool bgp_debug_zebra(const struct prefix *p); extern bool bgp_debug_zebra(const struct prefix *p);

View File

@ -398,7 +398,6 @@ static unsigned int updgrp_hash_key_make(const void *p)
key = jhash_1word( key = jhash_1word(
(peer->shared_network && peer_afi_active_nego(peer, AFI_IP6)), (peer->shared_network && peer_afi_active_nego(peer, AFI_IP6)),
key); key);
/* /*
* There are certain peers that must get their own update-group: * There are certain peers that must get their own update-group:
* - lonesoul peers * - 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 = jhash_1word(jhash(peer->host, strlen(peer->host), SEED2),
key); 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; return key;
} }