Previously we created an advertise_datapath_entry for each local router datapath, independently if any of its ports are bound to the current chassis or take part in dynamic-routing at all.
As ad->maintain_vrf was false and there was never a route added this did not do anything other than wasting memory. Signed-off-by: Felix Huettner <felix.huettner@stackit.cloud> --- controller/route.c | 25 +++++++++++++++---------- controller/route.h | 1 - 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/controller/route.c b/controller/route.c index 55d3e0ae3..ebb44ab53 100644 --- a/controller/route.c +++ b/controller/route.c @@ -36,7 +36,7 @@ VLOG_DEFINE_THIS_MODULE(exchange); #define PRIORITY_DEFAULT 1000 #define PRIORITY_LOCAL_BOUND 100 -bool +static bool route_exchange_relevant_port(const struct sbrec_port_binding *pb) { return pb && smap_get_bool(&pb->options, "dynamic-routing", false); @@ -161,11 +161,7 @@ route_run(struct route_ctx_in *r_ctx_in, if (!ld->n_peer_ports || ld->is_switch) { continue; } - - ad = xzalloc(sizeof(*ad)); - ad->db = ld->datapath; - hmap_init(&ad->routes); - smap_init(&ad->bound_ports); + ad = NULL; /* This is a LR datapath, find LRPs with route exchange options * that are bound locally. */ @@ -181,6 +177,13 @@ route_run(struct route_ctx_in *r_ctx_in, continue; } + if (!ad) { + ad = xzalloc(sizeof(*ad)); + ad->db = ld->datapath; + hmap_init(&ad->routes); + smap_init(&ad->bound_ports); + } + ad->maintain_vrf |= smap_get_bool(&repb->options, "dynamic-routing-maintain-vrf", @@ -223,10 +226,12 @@ route_run(struct route_ctx_in *r_ctx_in, } } - tracked_datapath_add(ld->datapath, TRACKED_RESOURCE_NEW, - r_ctx_out->tracked_re_datapaths); - - hmap_insert(r_ctx_out->announce_routes, &ad->node, ad->db->tunnel_key); + if (ad) { + tracked_datapath_add(ld->datapath, TRACKED_RESOURCE_NEW, + r_ctx_out->tracked_re_datapaths); + hmap_insert(r_ctx_out->announce_routes, &ad->node, + ad->db->tunnel_key); + } } const struct sbrec_advertised_route *route; diff --git a/controller/route.h b/controller/route.h index aee7ad302..11016d818 100644 --- a/controller/route.h +++ b/controller/route.h @@ -83,7 +83,6 @@ const struct sbrec_port_binding *route_exchange_find_port( const struct sbrec_chassis *chassis, const struct sset *active_tunnels, const struct sbrec_port_binding *pb); -bool route_exchange_relevant_port(const struct sbrec_port_binding *); uint32_t advertise_route_hash(const struct in6_addr *dst, unsigned int plen); void route_run(struct route_ctx_in *, struct route_ctx_out *); void route_cleanup(struct hmap *announce_routes); -- 2.43.0 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev