summaryrefslogtreecommitdiff
path: root/bgpd/bgp_addpath.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_addpath.c')
-rw-r--r--bgpd/bgp_addpath.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/bgpd/bgp_addpath.c b/bgpd/bgp_addpath.c
index 7f746541ff..de4b4a48af 100644
--- a/bgpd/bgp_addpath.c
+++ b/bgpd/bgp_addpath.c
@@ -25,7 +25,14 @@ static const struct bgp_addpath_strategy_names strat_names[BGP_ADDPATH_MAX] = {
.human_description = "Advertise bestpath per AS via addpath",
.type_json_name = "addpathTxBestpathPerAS",
.id_json_name = "addpathTxIdBestPerAS"
- }
+ },
+ {
+ .config_name = "addpath-tx-best-selected",
+ .human_name = "Best-Selected",
+ .human_description = "Advertise best N selected paths via addpath",
+ .type_json_name = "addpathTxBestSelectedPaths",
+ .id_json_name = "addpathTxIdBestSelected"
+ },
};
static const struct bgp_addpath_strategy_names unknown_names = {
@@ -161,6 +168,8 @@ bool bgp_addpath_tx_path(enum bgp_addpath_strat strat, struct bgp_path_info *pi)
return true;
else
return false;
+ case BGP_ADDPATH_BEST_SELECTED:
+ return true;
case BGP_ADDPATH_MAX:
return false;
}
@@ -356,7 +365,8 @@ void bgp_addpath_type_changed(struct bgp *bgp)
* change take effect.
*/
void bgp_addpath_set_peer_type(struct peer *peer, afi_t afi, safi_t safi,
- enum bgp_addpath_strat addpath_type)
+ enum bgp_addpath_strat addpath_type,
+ uint8_t paths)
{
struct bgp *bgp = peer->bgp;
enum bgp_addpath_strat old_type;
@@ -367,6 +377,8 @@ void bgp_addpath_set_peer_type(struct peer *peer, afi_t afi, safi_t safi,
if (safi == SAFI_LABELED_UNICAST)
safi = SAFI_UNICAST;
+ peer->addpath_best_selected[afi][safi] = paths;
+
old_type = peer->addpath_type[afi][safi];
if (addpath_type == old_type)
return;
@@ -411,10 +423,9 @@ void bgp_addpath_set_peer_type(struct peer *peer, afi_t afi, safi_t safi,
tmp_peer)) {
if (tmp_peer->addpath_type[afi][safi] ==
old_type) {
- bgp_addpath_set_peer_type(tmp_peer,
- afi,
- safi,
- addpath_type);
+ bgp_addpath_set_peer_type(
+ tmp_peer, afi, safi,
+ addpath_type, paths);
}
}
}