Apologies for the late update and the fact that it's still RFC. I was
stuck for the longest time on trying to figure out how to best
advertise NAT/LB routes from a neighboring routers (more details in in-
line comments).

Looking forward to feedback.

Thanks,
Martin.

On Wed, 2025-02-12 at 02:43 +0100, Martin Kalcok wrote:
> This series allows to advertise routes for Load Balancer VIPs and
> NAT external addresses to the network fabric.
> 
> The reason why this is posted as an RFC is because it depends on two
> in-flight patch series in OVN:
> 
>   * OVN Fabric integration: Northd (v4)[0]
>   * OVN Fabric integration: Ovn-controller (v5)[1]
> 
> v4 -> v5:
>   * Included northd processing changes proposed by Dumitru (I will
>     add you to co-authors for the final version @dceara)
>   
>   * Added optional tracked_port member to parsed_route struct.
> 
>   * Added tracked ports for NAT routes
> 
>   * Added advertising of external NAT IPs of neighboring routers.
> 
>   * Added advertising of LBs
>     * tracked ports for LBs still missing
>     * LBs from enighboring routers are not yet advertised
> 
>   * I kept the changes from v4 in a separate commit for easier
>     review of changes.
> 
> v3 -> v4:
>   * This is just a preview to get feedback on the new design that
>     splits processing of different route types in northd engine.
>     Main goal is to avoid recomputing logical flows when NAT/LB
>     routes are changed.
> 
>   * Approach from v3 was almost completely scrapped.
> 
>   * rebased on latest dependency patches [3]
> 
>   * This being WIP, it lacks:
>     * setting "tracked_port" for routes
>     * processing of LBs
>     * tests/documentation
> 
> v2 -> v3:
>   * Actually use the install_lflow attribute of the parsed_route
>     * Fix install_lflow ddtribute not being set in parsed_route_clone
>       fuinction.
> 
>   * fix get_lb_addresses because it actually modified the behavior of
>     get_nad_addresses by unconditionally overwriting
> "central_ip_address".
>     Now it does "|=" instead of "="
> 
>   * Added unit tests for advertising NAT and LB VIPs (IPv4 and IPv6)
> 
>   * Added optimizations suggested by Felix in v2 review.
> 
> v2:
>   * rebased on latest dependency patches [2]
> 
>   * get_nat_addresses refactored to extract functionality for getting
>     LB addresses independently. The new function is called
> get_lb_addresses.
>     The original behavior of get_nat_addresses is unchanged.
> 
>   * Added 'install_lflow' bool member to 'parsed_route' struct. This
> controls
>     whether northd installs logical flows for given route (cc
> @felix.huettner)
> 
>   * Based on suggestion from dceara, "lr_stateful" input was added to
> en_routes
>     node. This allows for easier iteration over logical router's load
>     balancers.
> 
>   * Based on suggestion from fnordahl, functionality was added to
> advertise
>     NAT/LB IPs of neighboring routers, if they have have "add_route"
> option
>     set to "true".
>     * A unit test was added to test this functionality.
> 
>   * Based on the discussion about the option naming, the names were
> changed to
>     'dynamic-routing-nat' and 'dynamic-routing-lb-vips'. This will
> likely
>     change when dependency patch series gets updated to use
>     'dynamic-routing=<comma_separated_values>'
> 
> [0]
> https://patchwork.ozlabs.org/project/ovn/cover/cover.1737472971.git.felix.huettner@stackit.cloud/
> [1]
> https://patchwork.ozlabs.org/project/ovn/cover/cover.1738148851.git.felix.huettner@stackit.cloud/
> [2] https://github.com/dceara/ovn/tree/tmp-bgp-ovn-controller-v5
> [3] https://github.com/dceara/ovn/tree/tmp-bgp-v7
> 
> 
> 
> Frode Nordahl (1):
>   northd: Allow IPv6 in get_nat_addresses().
> 
> Martin Kalcok (3):
>   northd: Extract get_lb_addresses functionality.
>   WIP: Advertisement of NAT/LB addresses as routes.
>   WIP: Advertisement of NAT/LB pt.2.
> 
>  lib/stopwatch-names.h             |   1 +
>  northd/en-advertised-route-sync.c | 179 +++++++++++++----
>  northd/en-advertised-route-sync.h |   4 +
>  northd/en-learned-route-sync.c    |   3 +-
>  northd/en-northd-output.c         |   8 +
>  northd/en-northd-output.h         |   2 +
>  northd/inc-proc-northd.c          |   8 +
>  northd/northd.c                   | 319 ++++++++++++++++++++++++++--
> --
>  northd/northd.h                   |  24 ++-
>  9 files changed, 476 insertions(+), 72 deletions(-)
> 

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to