From 29d33bd57de1bd98b3e63b6b72467a9e471e0eef Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Tue, 12 Dec 2023 11:34:29 +0200 Subject: [PATCH 1/3] bgpd: Add sub_sort for update group debug logging When added OAD support, it's handy to know peer->sub_sort also when printing update-group debug messages. Signed-off-by: Donatas Abraitis --- bgpd/bgp_updgrp.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/bgpd/bgp_updgrp.c b/bgpd/bgp_updgrp.c index 9eb4433c55..23dafc85cf 100644 --- a/bgpd/bgp_updgrp.c +++ b/bgpd/bgp_updgrp.c @@ -448,11 +448,10 @@ static unsigned int updgrp_hash_key_make(const void *p) * STATEMENT STAYS UP TO DATE */ if (bgp_debug_neighbor_events(peer)) { - zlog_debug( - "%pBP Update Group Hash: sort: %d UpdGrpFlags: %ju UpdGrpAFFlags: %ju", - peer, peer->sort, - (intmax_t)CHECK_FLAG(peer->flags, PEER_UPDGRP_FLAGS), - (intmax_t)CHECK_FLAG(flags, PEER_UPDGRP_AF_FLAGS)); + zlog_debug("%pBP Update Group Hash: sort: %d sub_sort: %d UpdGrpFlags: %ju UpdGrpAFFlags: %ju", + peer, peer->sort, peer->sub_sort, + (intmax_t)CHECK_FLAG(peer->flags, PEER_UPDGRP_FLAGS), + (intmax_t)CHECK_FLAG(flags, PEER_UPDGRP_AF_FLAGS)); zlog_debug( "%pBP Update Group Hash: addpath: %u UpdGrpCapFlag: %u UpdGrpCapAFFlag: %u route_adv: %u change local as: %u, as_path_loop_detection: %d", peer, (uint32_t)peer->addpath_type[afi][safi], From bc53667dc73f2507a08a053dca13e2e82b80b7e5 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Tue, 12 Dec 2023 11:38:23 +0200 Subject: [PATCH 2/3] bgpd: Use sub_sort also when creating a hash key for update-groups If OAD is not set or set at least for one peer in peer-group, then split, and create a separate update-group for those peers. Signed-off-by: Donatas Abraitis --- bgpd/bgp_updgrp.c | 1 + 1 file changed, 1 insertion(+) diff --git a/bgpd/bgp_updgrp.c b/bgpd/bgp_updgrp.c index 23dafc85cf..40bc167584 100644 --- a/bgpd/bgp_updgrp.c +++ b/bgpd/bgp_updgrp.c @@ -343,6 +343,7 @@ static unsigned int updgrp_hash_key_make(const void *p) key = 0; key = jhash_1word(peer->sort, key); /* EBGP or IBGP */ + key = jhash_1word(peer->sub_sort, key); /* OAD */ key = jhash_1word((peer->flags & PEER_UPDGRP_FLAGS), key); key = jhash_1word((flags & PEER_UPDGRP_AF_FLAGS), key); key = jhash_1word((uint32_t)peer->addpath_type[afi][safi], key); From 7685ffda19303d03834760e2e5f6e8e84fe44cc8 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Tue, 12 Dec 2023 11:55:10 +0200 Subject: [PATCH 3/3] bgpd: Update sub_sort when handling doppelganger connections This is important especially for OPEN messages. Without this, we can't send software-version capability which relies on OAD too. Signed-off-by: Donatas Abraitis --- bgpd/bgpd.c | 1 + 1 file changed, 1 insertion(+) diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 051d920716..b9ba70bb83 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -1542,6 +1542,7 @@ void peer_xfer_config(struct peer *peer_dst, struct peer *peer_src) /* copy tcp_mss value */ peer_dst->tcp_mss = peer_src->tcp_mss; (void)peer_sort(peer_dst); + peer_dst->sub_sort = peer_src->sub_sort; peer_dst->rmap_type = peer_src->rmap_type; peer_dst->local_role = peer_src->local_role;