On 2/6/25 3:19 PM, Felix Huettner via dev wrote:
> Here we expand the previous routes-sync engine node to not only
> advertise routes to the southbound table, but also learn received routes
> from this table.
>
> These routes are then passed to the same logic that connected and static
> routes are using for flow generation.
> However we prioritize these routes lower than connected or static routes
> as information in cluster (for the same prefix length) should always be
> more correct then learned routes.
> This is also consistent with the default behaviour of phyiscal routers.
>
> Acked-by: Dumitru Ceara <[email protected]>
> Signed-off-by: Felix Huettner <[email protected]>
> ---
Hi Felix,
> v6->v7:
> * addressed review comments
> v5->v6:
> * addressed review comments
> * changed option to "dynamic-routing-redistribute"
> v4->v5: skipped
> v2->v3:
> * A lot of minor review comments.
> * Support learning routes over other address families
>
> NEWS | 4 +
> TODO.rst | 5 +
> lib/stopwatch-names.h | 1 +
> northd/automake.mk | 2 +
> northd/en-ecmp-nexthop.c | 16 +-
> northd/en-learned-route-sync.c | 208 +++++++++++++++++++++++
> northd/en-learned-route-sync.h | 32 ++++
> northd/en-lflow.c | 5 +-
> northd/inc-proc-northd.c | 14 +-
> northd/northd.c | 301 ++++++++++++++++++++-------------
> northd/northd.h | 38 ++++-
> northd/ovn-northd.c | 1 +
> tests/ovn-northd.at | 253 +++++++++++++++++++++++----
> 13 files changed, 724 insertions(+), 156 deletions(-)
> create mode 100644 northd/en-learned-route-sync.c
> create mode 100644 northd/en-learned-route-sync.h
>
[...]
> diff --git a/northd/northd.h b/northd/northd.h
> index 06314730d..1fa0d6365 100644
> --- a/northd/northd.h
> +++ b/northd/northd.h
> @@ -718,6 +718,8 @@ enum route_source {
> ROUTE_SOURCE_CONNECTED,
> /* The route is derived from a northbound static route entry. */
> ROUTE_SOURCE_STATIC,
> + /* The route is dynamically learned by an ovn-controller. */
> + ROUTE_SOURCE_LEARNED,
> };
>
> struct parsed_route {
> @@ -728,17 +730,51 @@ struct parsed_route {
> bool is_src_route;
> uint32_t route_table_id;
> uint32_t hash;
> - const struct nbrec_logical_router_static_route *route;
> bool ecmp_symmetric_reply;
> bool is_discard_route;
> const struct ovn_datapath *od;
> bool stale;
> struct sset ecmp_selection_fields;
> enum route_source source;
> + const struct ovsdb_idl_row *source_hint;
> char *lrp_addr_s;
> const struct ovn_port *out_port;
> };
>
> +/* Returns an independent clone of the provided parsed_route. The returned
> + * parsed_route will need to be freed using parsed_route_free. */
> +struct parsed_route *parsed_route_clone(const struct parsed_route *);
> +
> +/* Returns the hash to be used for a hmap of parsed_routes that are provided
> + * to the lflow engine node. */
> +size_t parsed_route_hash(const struct parsed_route *);
> +void parsed_route_free(struct parsed_route *);
> +
> +/* Adds a parsed_route to the provided routes hmap if it is not already
> + * in there.
> + * Takes ownership of the provided nexthop. All other parameters are cloned.
> + * Elements of the routes hmap need to be freed using parsed_route_free. */
Thanks for documenting these functions! However, the comments should go
in the C file.
With that addressed, my ack stands:
Acked-by: Dumitru Ceara <[email protected]>
Thanks,
Dumitru
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev