]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Add bgp_check_selected() helper for abstraction
authorDonatas Abraitis <donatas.abraitis@gmail.com>
Thu, 27 Jan 2022 08:12:59 +0000 (10:12 +0200)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Wed, 23 Feb 2022 19:38:23 +0000 (21:38 +0200)
Just check if the path is selected to be advertised: best path or addpath
capable.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
bgpd/bgp_conditional_adv.c
bgpd/bgp_updgrp.c
bgpd/bgp_updgrp.h
bgpd/bgp_updgrp_adv.c

index 6f729858766d9516a3c875aaf46dbea71e92038d..c0dd3d6f810b34ebed3fd55b5d9105f714d68794 100644 (file)
@@ -124,12 +124,8 @@ static void bgp_conditional_adv_routes(struct peer *peer, afi_t afi,
                        if (ret != RMAP_PERMITMATCH)
                                continue;
 
-                       if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED)
-                           || (addpath_capable
-                               && bgp_addpath_tx_path(
-                                          peer->addpath_type[afi][safi],
-                                          pi))) {
-
+                       if (bgp_check_selected(pi, peer, addpath_capable, afi,
+                                              safi)) {
                                /* Skip route-map checks in
                                 * subgroup_announce_check while executing from
                                 * the conditional advertise scanner process.
index 79433d6a5b3ee7fd3244839e79f6944756c26e76..bfcb4810d173a5cc57db35e4eda6fb0b6b7aed8b 100644 (file)
@@ -49,6 +49,7 @@
 #include "bgpd/bgp_debug.h"
 #include "bgpd/bgp_errors.h"
 #include "bgpd/bgp_fsm.h"
+#include "bgpd/bgp_addpath.h"
 #include "bgpd/bgp_advertise.h"
 #include "bgpd/bgp_packet.h"
 #include "bgpd/bgp_updgrp.h"
@@ -1931,3 +1932,11 @@ bool bgp_addpath_encode_tx(struct peer *peer, afi_t afi, safi_t safi)
                && CHECK_FLAG(peer->af_cap[afi][safi],
                              PEER_CAP_ADDPATH_AF_RX_RCV));
 }
+
+bool bgp_check_selected(struct bgp_path_info *bpi, struct peer *peer,
+                       bool addpath_capable, afi_t afi, safi_t safi)
+{
+       return (CHECK_FLAG(bpi->flags, BGP_PATH_SELECTED) ||
+               (addpath_capable &&
+                bgp_addpath_tx_path(peer->addpath_type[afi][safi], bpi)));
+}
index f00853fc6fde6802a5d3dad209628b6008d84a83..5a9bebf8fe6bb033b333f2ebd70178db6e5a89c0 100644 (file)
@@ -462,6 +462,8 @@ extern int update_group_clear_update_dbg(struct update_group *updgrp,
 
 extern void update_bgp_group_free(struct bgp *bgp);
 extern bool bgp_addpath_encode_tx(struct peer *peer, afi_t afi, safi_t safi);
+extern bool bgp_check_selected(struct bgp_path_info *bpi, struct peer *peer,
+                              bool addpath_capable, afi_t afi, safi_t safi);
 
 /*
  * Inline functions
index 806abbeba1cf788aaffa9ee7587d1c770b7b5253..2110dcb8bc40eb4c3bc22bbe6742e1604dc35725 100644 (file)
@@ -687,11 +687,8 @@ void subgroup_announce_table(struct update_subgroup *subgrp,
 
                for (ri = bgp_dest_get_bgp_path_info(dest); ri; ri = ri->next)
 
-                       if (CHECK_FLAG(ri->flags, BGP_PATH_SELECTED)
-                           || (addpath_capable
-                               && bgp_addpath_tx_path(
-                                          peer->addpath_type[afi][safi],
-                                          ri))) {
+                       if (bgp_check_selected(ri, peer, addpath_capable, afi,
+                                              safi)) {
                                if (subgroup_announce_check(dest, ri, subgrp,
                                                            dest_p, &attr,
                                                            false)) {