> On Aug 1, 2025, at 11:21 AM, Dumitru Ceara <dce...@redhat.com> wrote: > > In 712fca55b3b1 ("controller: Prioritize host routes.") and later in > cd4ad2f56179 ("northd: Redistribution of NAT/LB routes.") support was > added for advertising routes for objects (logical port / NAT / LB IPs) > that are bound to a single chassis (e.g., distributed NAT) with a better > metric on the chassis where they're bound. On all other chassis, > however, the route was still advertised but only with a worse metric. > > While this works fine in deployments as described in 712fca55b3b1 > ("controller: Prioritize host routes."), this behavior actually makes > the dynamic routing feature unusable in cases when all inter-node > traffic is forwarded through the L3 fabric, e.g. spine-leaf topologies > with iBGP between leaves and spines and eBGP between OVN compute nodes > and fabric leafs: that's due to the fact that eBGP routes are usually > preferred over iBGP routes. > > Consider the following example: > +------+ +------+ > |Spine1| |Spine2| > +------+ +------+ > | \ / | > | \ / | > | \ / | > | X | > | / \ | > | / \ | > | / \ | > +-----+ +----+ > |Leaf1| |Leaf2| > +-----+ +----+ > | | > | | > +----------+ +----------+ > | Chassis1 | | Chassis2 | > +----------+ +----------+ > > An OVN distributed NAT, e.g., 42.42.42.42 "bound" to Chassis1 would be > advertised with a metric of 100 on the eBGP Chassis1 <-> Leaf1 > connection and with a metric of 1000 (worse) on the eBGP Chasssi2 <-> > Leaf2 connection. Leaf2 will also learn an iBGP route (through Spine1 > and Spine2) for the same prefix (towards Chassis1) but because eBGP > administrative distance is better than the iBGP one, Leaf2 will always > prefer the metric 1000 route. That means Leaf2 will always forward > traffic destined to 42.42.42.42 via Chassis2 which is sub-optimal. > > The main reason for advertising the (NAT) IP on both chassis was likely > to provide redundancy in case traffic hits the OVN cluster on a node > that doesn't host the NAT. But with topologies as the one depicted > above the redundancy is handled by the fabric. > > OVN didn't have a way to disable worse metric route advertisements. This > commit adds one, through a new logical router / logical router port > option, "dynamic-routing-redistribute-local-only" which, if enabled, > informs ovn-controller to not advertise routes for chassis bound IPs > (Sb.Advertised_Route.tracked_port set) on chassis where the tracked port > is not bound. By default this option is disabled. The option is > propagated by ovn-northd to the SB.Port_Binding corresponding to the > logical router port (or all router ports if configured on the router). > > Fixes: 712fca55b3b1 ("controller: Prioritize host routes.") > Fixes: cd4ad2f56179 ("northd: Redistribution of NAT/LB routes.") > Reported-at: https://issues.redhat.com/browse/FDP-1464 > Signed-off-by: Dumitru Ceara <dce...@redhat.com> > --- > NOTE: while this change adds a new configuration option, I see this as > a bug fix because there's no (not overly complex) way of using the OVN > dynamic routing feature in 25.03 with topologies as above (which are > likely common). > > This change is backport-safe because the new option is opt-in (disabled > by default) so the default behavior stays untouched. Also, there's no > restriction on update order as older ovn-northd or ovn-controllers just > ignore the new option and there's no database schema change. > > Changes in v2: > - Addressed issue with Advertised_Routes that have logical_port set to a > non chassis-redirect port (for distributed routers with DGP). > - Added system test for the case above. > --- > NEWS | 5 + > controller/route.c | 10 +- > northd/northd.c | 44 ++++--- > ovn-nb.xml | 39 ++++++ > ovn-sb.xml | 18 +++ > tests/system-ovn.at | 281 ++++++++++++++++++++++++++++++++++++++++++++ > 6 files changed, 381 insertions(+), 16 deletions(-) > > diff --git a/NEWS b/NEWS > index 0cce1790db..54d676be87 100644 > --- a/NEWS > +++ b/NEWS > @@ -41,6 +41,11 @@ Post v25.03.0 > - Added support for running tests from the 'check-kernel' system test > target > under retis by setting OVS_TEST_WITH_RETIS=yes. See the 'Testing' > section > of the documentation for more details. > + - Dynamic Routing: > + * Add the option "dynamic-routing-redistribute-local-only" to Logical > + Routers and Logical Router Ports which refines the way in which > + chassis-specific Advertised_Routes (e.g., for NAT and LB IPs) are > + advertised. > > OVN v25.03.0 - 07 Mar 2025 > -------------------------- > diff --git a/controller/route.c b/controller/route.c > index 7615f3f593..603e5749bc 100644 > --- a/controller/route.c > +++ b/controller/route.c > @@ -253,15 +253,23 @@ route_run(struct route_ctx_in *r_ctx_in, > > unsigned int priority = PRIORITY_DEFAULT; > if (route->tracked_port) { > + bool redistribute_local_bound_only = > + smap_get_bool(&route->logical_port->options, > + "dynamic-routing-redistribute-local-only", > + false); > if (lport_is_local(r_ctx_in->sbrec_port_binding_by_name, > r_ctx_in->chassis, > route->tracked_port->logical_port)) { > priority = PRIORITY_LOCAL_BOUND; > sset_add(r_ctx_out->tracked_ports_local, > route->tracked_port->logical_port); > - } else { > + } else if (!redistribute_local_bound_only) { > sset_add(r_ctx_out->tracked_ports_remote, > route->tracked_port->logical_port); > + } else { > + /* Here redistribute_local_bound_only is 'true' and > + * 'tracked_port' is not local so skip this route. */ > + continue; > } > } > > diff --git a/northd/northd.c b/northd/northd.c > index d027d5c66d..2cb69f9aa8 100644 > --- a/northd/northd.c > +++ b/northd/northd.c > @@ -3893,21 +3893,35 @@ sync_pb_for_lrp(struct ovn_port *op, > } > } > > - if ((is_cr_port(op) || chassis_name) && op->od->dynamic_routing) { > - smap_add(&new, "dynamic-routing", "true"); > - if (smap_get_bool(&op->nbrp->options, > - "dynamic-routing-maintain-vrf", false)) { > - smap_add(&new, "dynamic-routing-maintain-vrf", "true"); > - } > - const char *vrfname = smap_get(&op->od->nbr->options, > - "dynamic-routing-vrf-name"); > - if (vrfname) { > - smap_add(&new, "dynamic-routing-vrf-name", vrfname); > - } > - const char *portname = smap_get(&op->nbrp->options, > - "dynamic-routing-port-name"); > - if (portname) { > - smap_add(&new, "dynamic-routing-port-name", portname); > + if (op->od->dynamic_routing) { > + if (is_cr_port(op) || chassis_name) { > + smap_add(&new, "dynamic-routing", "true"); > + if (smap_get_bool(&op->nbrp->options, > + "dynamic-routing-maintain-vrf", false)) { > + smap_add(&new, "dynamic-routing-maintain-vrf", "true"); > + } > + const char *vrfname = smap_get(&op->od->nbr->options, > + "dynamic-routing-vrf-name"); > + if (vrfname) { > + smap_add(&new, "dynamic-routing-vrf-name", vrfname); > + } > + const char *portname = smap_get(&op->nbrp->options, > + "dynamic-routing-port-name"); > + if (portname) { > + smap_add(&new, "dynamic-routing-port-name", portname); > + } > + } > + > + const char *redistribute_local_only_name = > + "dynamic-routing-redistribute-local-only"; > + bool redistribute_local_only_val = > + smap_get_bool(&op->nbrp->options, > + redistribute_local_only_name, > + smap_get_bool(&op->od->nbr->options, > + redistribute_local_only_name, > + false)); > + if (redistribute_local_only_val) { > + smap_add(&new, redistribute_local_only_name, "true"); > } > } > > diff --git a/ovn-nb.xml b/ovn-nb.xml > index 4a75818075..cbe9c40bbe 100644 > --- a/ovn-nb.xml > +++ b/ovn-nb.xml > @@ -3192,6 +3192,22 @@ or > </p> > </column> > > + <column name="options" > + key="dynamic-routing-redistribute-local-only" > + type='{"type": "boolean"}'> > + <p> > + Only relevant if <ref column="options" key="dynamic-routing"/> > + is set to <code>true</code>. > + </p> > + > + <p> > + This controls whether <code>ovn-controller</code> will advertise > + <ref table="Advertised_Route" db="OVN_Southbound"/> records > + only on the chassis where their <code>tracked_port</code> is > + bound. Default: <code>false</code>. > + </p> > + </column> > + > <column name="options" key="dynamic-routing-vrf-name" > type='{"type": "string"}'> > <p> > @@ -4166,6 +4182,29 @@ or > > </column> > > + <column name="options" > + key="dynamic-routing-redistribute-local-only" > + type='{"type": "boolean"}'> > + <p> > + Only relevant if <ref column="options" key="dynamic-routing"/> > + is set to <code>true</code>. > + </p> > + > + <p> > + This controls whether <code>ovn-controller</code> will advertise > + <ref table="Advertised_Route" db="OVN_Southbound"/> records > + only on the chassis where their <code>tracked_port</code> is > + bound. > + </p> > + > + <p> > + If not set the value from <ref column="options" > + key="dynamic-routing-redistribute-local-only" > + table="Logical_Router"/> on the <ref table="Logical_Router"/> will > + be used. > + </p> > + </column> > + > <column name="options" key="dynamic-routing-maintain-vrf" > type='{"type": "boolean"}'> > <p> > diff --git a/ovn-sb.xml b/ovn-sb.xml > index db5faac661..395deae83d 100644 > --- a/ovn-sb.xml > +++ b/ovn-sb.xml > @@ -3908,6 +3908,24 @@ tcp.flags = RST; > </column> > </group> > > + <group title="Dynamic Routing"> > + <column name="options" > + key="dynamic-routing-redistribute-local-only" > + type='{"type": "boolean"}'> > + <p> > + Only relevant if <ref column="options" key="dynamic-routing"/> > + is set to <code>true</code>. > + </p> > + > + <p> > + This controls whether <code>ovn-controller</code> will advertise > + <ref table="Advertised_Route" db="OVN_Southbound"/> records > + only on the chassis where their <code>tracked_port</code> is > + bound. Default: <code>false</code>. > + </p> > + </column> > + </group> > + > <group title="Nested Containers"> > <p> > These columns support containers nested within a VM. Specifically, > diff --git a/tests/system-ovn.at b/tests/system-ovn.at > index e0407383af..5a5476af75 100644 > --- a/tests/system-ovn.at > +++ b/tests/system-ovn.at > @@ -16759,6 +16759,29 @@ OVN_ROUTE_EQUAL([ovnvrf$vrf], [dnl > blackhole 10.42.10.10 proto ovn metric 1000 > blackhole 172.16.1.150 proto ovn metric 1000]) > > +# Set LR/LRP.options.dynamic-routing-redistribute-local-only=true > +# and verify that lower priority routes are not advertised anymore. > +check ovn-nbctl --wait=hv set logical_router_port r1-join \ > + options:dynamic-routing-redistribute-local-only=true > + > +OVN_ROUTE_EQUAL([ovnvrf$vrf], [dnl > +blackhole 172.16.1.150 proto ovn metric 1000]) > + > +check ovn-nbctl --wait=hv remove logical_router_port r1-join \ > + options dynamic-routing-redistribute-local-only \ > + -- set logical_router R1 \ > + options:dynamic-routing-redistribute-local-only=true > + > +OVN_ROUTE_EQUAL([ovnvrf$vrf], [dnl > +blackhole 172.16.1.150 proto ovn metric 1000]) > + > +check ovn-nbctl --wait=hv remove logical_router R1 \ > + options dynamic-routing-redistribute-local-only > + > +OVN_ROUTE_EQUAL([ovnvrf$vrf], [dnl > +blackhole 10.42.10.10 proto ovn metric 1000 > +blackhole 172.16.1.150 proto ovn metric 1000]) > + > # Before cleanup of hv1 ovn-controller, trigger a recompute > # to cleanup the local datapaths. Otherwise, the test will fail. > # This is because we don't remove a datapath from > @@ -16904,6 +16927,29 @@ OVN_ROUTE_V6_EQUAL([ovnvrf$vrf], [dnl > blackhole 2001:db8:1001::150 dev lo proto ovn metric 1000 pref medium > blackhole 2001:db8:3001::150 dev lo proto ovn metric 1000 pref medium]) > > +# Set LR/LRP.options.dynamic-routing-redistribute-local-only=true > +# and verify that lower priority routes are not advertised anymore. > +check ovn-nbctl --wait=hv set logical_router_port r1-join \ > + options:dynamic-routing-redistribute-local-only=true > + > +OVN_ROUTE_V6_EQUAL([ovnvrf$vrf], [dnl > +blackhole 2001:db8:1001::150 dev lo proto ovn metric 1000 pref medium]) > + > +check ovn-nbctl --wait=hv remove logical_router_port r1-join \ > + options dynamic-routing-redistribute-local-only \ > + -- set logical_router R1 \ > + options:dynamic-routing-redistribute-local-only=true > + > +OVN_ROUTE_V6_EQUAL([ovnvrf$vrf], [dnl > +blackhole 2001:db8:1001::150 dev lo proto ovn metric 1000 pref medium]) > + > +check ovn-nbctl --wait=hv remove logical_router R1 \ > + options dynamic-routing-redistribute-local-only > + > +OVN_ROUTE_V6_EQUAL([ovnvrf$vrf], [dnl > +blackhole 2001:db8:1001::150 dev lo proto ovn metric 1000 pref medium > +blackhole 2001:db8:3001::150 dev lo proto ovn metric 1000 pref medium]) > + > # Before cleanup of hv1 ovn-controller, trigger a recompute > # to cleanup the local datapaths. Otherwise, the test will fail. > # This is because we don't remove a datapath from > @@ -17069,6 +17115,35 @@ blackhole 10.42.10.13 proto ovn metric 1000 > blackhole 172.16.1.10 proto ovn metric 1000 > blackhole 172.16.1.11 proto ovn metric 1000]) > > +# Set LR/LRP.options.dynamic-routing-redistribute-local-only=true > +# and verify that lower priority routes are not advertised anymore. > +check ovn-nbctl --wait=hv set logical_router_port r1-join \ > + options:dynamic-routing-redistribute-local-only=true > + > +OVN_ROUTE_EQUAL([ovnvrf$vrf], [dnl > +blackhole 172.16.1.10 proto ovn metric 1000 > +blackhole 172.16.1.11 proto ovn metric 1000]) > + > +check ovn-nbctl --wait=hv remove logical_router_port r1-join \ > + options dynamic-routing-redistribute-local-only \ > + -- set logical_router R1 \ > + options:dynamic-routing-redistribute-local-only=true > + > +OVN_ROUTE_EQUAL([ovnvrf$vrf], [dnl > +blackhole 172.16.1.10 proto ovn metric 1000 > +blackhole 172.16.1.11 proto ovn metric 1000]) > + > +check ovn-nbctl --wait=hv remove logical_router R1 \ > + options dynamic-routing-redistribute-local-only > + > +OVN_ROUTE_EQUAL([ovnvrf$vrf], [dnl > +blackhole 10.42.10.10 proto ovn metric 1000 > +blackhole 10.42.10.11 proto ovn metric 1000 > +blackhole 10.42.10.12 proto ovn metric 1000 > +blackhole 10.42.10.13 proto ovn metric 1000 > +blackhole 172.16.1.10 proto ovn metric 1000 > +blackhole 172.16.1.11 proto ovn metric 1000]) > + > # Add "guest" LS connected the distributed router R2 and one "VM" called > # guest1. > # Also, connect R2 to ls-join via another DGW. > @@ -17283,6 +17358,35 @@ blackhole 2001:db8:1004::151 dev lo proto ovn metric > 1000 pref medium > blackhole 2001:db8:1004::152 dev lo proto ovn metric 1000 pref medium > blackhole 2001:db8:1004::153 dev lo proto ovn metric 1000 pref medium]) > > +# Set LR/LRP.options.dynamic-routing-redistribute-local-only=true > +# and verify that lower priority routes are not advertised anymore. > +check ovn-nbctl --wait=hv set logical_router_port r1-join \ > + options:dynamic-routing-redistribute-local-only=true > + > +OVN_ROUTE_V6_EQUAL([ovnvrf$vrf], [dnl > +blackhole 2001:db8:1003::150 dev lo proto ovn metric 1000 pref medium > +blackhole 2001:db8:1003::151 dev lo proto ovn metric 1000 pref medium]) > + > +check ovn-nbctl --wait=hv remove logical_router_port r1-join \ > + options dynamic-routing-redistribute-local-only \ > + -- set logical_router R1 \ > + options:dynamic-routing-redistribute-local-only=true > + > +OVN_ROUTE_V6_EQUAL([ovnvrf$vrf], [dnl > +blackhole 2001:db8:1003::150 dev lo proto ovn metric 1000 pref medium > +blackhole 2001:db8:1003::151 dev lo proto ovn metric 1000 pref medium]) > + > +check ovn-nbctl --wait=hv remove logical_router R1 \ > + options dynamic-routing-redistribute-local-only > + > +OVN_ROUTE_V6_EQUAL([ovnvrf$vrf], [dnl > +blackhole 2001:db8:1003::150 dev lo proto ovn metric 1000 pref medium > +blackhole 2001:db8:1003::151 dev lo proto ovn metric 1000 pref medium > +blackhole 2001:db8:1004::150 dev lo proto ovn metric 1000 pref medium > +blackhole 2001:db8:1004::151 dev lo proto ovn metric 1000 pref medium > +blackhole 2001:db8:1004::152 dev lo proto ovn metric 1000 pref medium > +blackhole 2001:db8:1004::153 dev lo proto ovn metric 1000 pref medium]) > + > # Add "guest" LS connected the distributed router R2 and one "VM" called > # guest1. > # Also, connect R2 to ls-join via another DGW. > @@ -17356,6 +17460,183 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port > patch-.*/d > AT_CLEANUP > ]) > > +OVN_FOR_EACH_NORTHD([ > +AT_SETUP([dynamic-routing - NAT IPs on DGP]) > +AT_KEYWORDS([dynamic-routing]) > + > +CHECK_VRF() > +CHECK_CONNTRACK() > +CHECK_CONNTRACK_NAT() > + > +vrf=1000 > +VRF_RESERVE([$vrf]) > +ovn_start > +OVS_TRAFFIC_VSWITCHD_START() > +ADD_BR([br-int]) > +ADD_BR([br-ext], [set Bridge br-ext fail-mode=standalone]) > + > +dnl Set external-ids in br-int needed for ovn-controller. > +check ovs-vsctl \ > + -- set Open_vSwitch . external-ids:system-id=hv1 \ > + -- set Open_vSwitch . > external-ids:ovn-remote=unix:$ovs_base/ovn-sb/ovn-sb.sock \ > + -- set Open_vSwitch . external-ids:ovn-encap-type=geneve \ > + -- set Open_vSwitch . external-ids:ovn-encap-ip=169.0.0.1 \ > + -- set Open_vSwitch . external-ids:ovn-bridge-mappings=phynet:br-ext \ > + -- set bridge br-int fail-mode=secure other-config:disable-in-band=true > + > +dnl Start ovn-controller. > +start_daemon ovn-controller > + > +OVS_WAIT_WHILE([ip link | grep -q ovnvrf$vrf:.*UP]) > + > + > +dnl Logical topology: > +dnl > +dnl +----+ +----+ > +dnl |vif1| (chassis=hv1) |vif2| (chassis=hv2) > +dnl +-+--+ +-+--+ > +dnl | | > +dnl +-----------------------+ > +dnl | > +dnl +--+---+ > +dnl |LS sw0| > +dnl +--+---+ > +dnl | > +dnl +--+--+ > +dnl | LR | (distributed DNAT_AND_SNAT for vif1 and vif2) > +dnl | R1 | > +dnl +--+--+ > +dnl | > +dnl +---+------+ > +dnl |LS public1| > +dnl +---+------+ > +dnl | > +dnl +--+--+ > +dnl | LR | (dynamic-routing=true, dynamic-routing-redistribute=nat,lb) > +dnl | R2 | > +dnl +--+--+ > +dnl | > +dnl +---+------+ > +dnl |LS public2| > +dnl +----------+ > + > +ADD_NAMESPACES(vif1) > +ADD_VETH(vif1, vif1, br-int, "192.168.1.100/24", "f0:00:00:00:01:00", > "192.168.1.1") > + > +check ovn-nbctl \ > + -- lr-add R1 \ > + -- lrp-add R1 R1-S0 00:00:01:01:02:03 192.168.1.1/24 \ > + -- lrp-add R1 R1-PUB1 00:00:02:01:02:03 172.16.1.1/24 \ > + -- lrp-set-gateway-chassis R1-PUB1 hv1 > + > +check ovn-nbctl \ > + -- lr-add R2 \ > + -- set Logical_Router R2 \ > + options:requested-tnl-key=$vrf \ > + options:dynamic-routing=true \ > + options:dynamic-routing-redistribute=lb,nat \ > + -- lrp-add R2 R2-PUB1 00:02:02:01:02:03 172.16.1.2/24 \ > + -- lrp-add R2 R2-PUB2 00:03:02:01:02:03 42.42.42.1/24 \ > + -- lrp-set-options R2-PUB2 \ > + dynamic-routing-maintain-vrf=true \ > + -- lrp-set-gateway-chassis R2-PUB2 hv1 > + > +check ovn-nbctl \ > + -- ls-add S0 \ > + -- lsp-add S0 S0-R1 \ > + -- set Logical_Switch_Port S0-R1 type=router \ > + options:router-port=R1-S0 \ > + -- lsp-set-addresses S0-R1 router \ > + -- lsp-add S0 vif1 \ > + -- lsp-add S0 vif2 > + > +check ovn-nbctl \ > + -- ls-add PUB1 \ > + -- lsp-add PUB1 PUB1-R1 \ > + -- set Logical_Switch_Port PUB1-R1 type=router \ > + options:router-port=R1-PUB1 \ > + -- lsp-set-addresses PUB1-R1 router \ > + -- lsp-add PUB1 PUB1-R2 \ > + -- set Logical_Switch_Port PUB1-R2 type=router \ > + options:router-port=R2-PUB1 \ > + -- lsp-set-addresses PUB1-R2 router \ > + -- lsp-add PUB1 ln1 \ > + -- lsp-set-addresses ln1 unknown \ > + -- lsp-set-type ln1 localnet \ > + -- lsp-set-options ln1 network_name=phynet > + > +check ovn-nbctl \ > + -- ls-add PUB2 \ > + -- lsp-add PUB2 PUB2-R2 \ > + -- set Logical_Switch_Port PUB2-R2 type=router \ > + options:router-port=R2-PUB2 \ > + -- lsp-set-addresses PUB2-R2 router \ > + -- lsp-add PUB2 ln2 \ > + -- lsp-set-addresses ln2 unknown \ > + -- lsp-set-type ln2 localnet \ > + -- lsp-set-options ln2 network_name=phynet > + > +OVN_POPULATE_ARP > +check ovn-nbctl --wait=hv sync > +wait_for_ports_up vif1 > + > +AT_CHECK([test `ip route show table $vrf | wc -l` -eq 1], [1]) > +AT_CHECK([ip link | grep -q ovnvrf$vrf:.*UP]) > + > +dnl Create distributed NATs and associate them with vif1 and vif2. > +check ovn-nbctl --wait=hv > \ > + -- lr-nat-add R1 dnat_and_snat 172.16.1.100 192.168.1.100 vif1 > 00:00:00:00:00:01 \ > + -- lr-nat-add R1 dnat_and_snat 172.16.1.200 192.168.1.200 vif2 > 00:00:00:00:00:02 > + > +OVN_ROUTE_EQUAL([ovnvrf$vrf], [dnl > +blackhole 172.16.1.100 proto ovn metric 100 > +blackhole 172.16.1.200 proto ovn metric 1000]) > + > +dnl Set LR/LRP.options.dynamic-routing-redistribute-local-only=true > +dnl and verify that lower priority routes are not advertised anymore. > +check ovn-nbctl --wait=hv set logical_router_port R2-PUB1 \ > + options:dynamic-routing-redistribute-local-only=true > + > +OVN_ROUTE_EQUAL([ovnvrf$vrf], [dnl > +blackhole 172.16.1.100 proto ovn metric 100]) > + > +check ovn-nbctl --wait=hv remove logical_router_port R2-PUB1 \ > + options dynamic-routing-redistribute-local-only \ > + -- set logical_router R2 \ > + options:dynamic-routing-redistribute-local-only=true > + > +OVN_ROUTE_EQUAL([ovnvrf$vrf], [dnl > +blackhole 172.16.1.100 proto ovn metric 100]) > + > +check ovn-nbctl --wait=hv remove logical_router R2 \ > + options dynamic-routing-redistribute-local-only > + > +OVN_ROUTE_EQUAL([ovnvrf$vrf], [dnl > +blackhole 172.16.1.100 proto ovn metric 100 > +blackhole 172.16.1.200 proto ovn metric 1000]) > + > +OVN_CLEANUP_CONTROLLER([hv1]) > + > +dnl Ensure system resources are cleaned up. > +AT_CHECK([ip link | grep -q ovnvrf$vrf:.*UP], [1]) > +AT_CHECK([test `ip route show table $vrf | wc -l` -eq 1], [1]) > + > +as ovn-sb > +OVS_APP_EXIT_AND_WAIT([ovsdb-server]) > + > +as ovn-nb > +OVS_APP_EXIT_AND_WAIT([ovsdb-server]) > + > +as northd > +OVS_APP_EXIT_AND_WAIT([ovn-northd]) > + > +as > +OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port patch-.*/d > +/Failed to acquire.*/d > +/connection dropped.*/d"]) > +AT_CLEANUP > +]) > + > OVN_FOR_EACH_NORTHD([ > AT_SETUP([Mac binding aging - Probing]) > AT_KEYWORDS([mac_binding_probing]) > -- > 2.50.1 >
Tested-by: Jakub Libosvar <jlibo...@redhat.com <mailto:jlibo...@redhat.com>> _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev