On 7/7/26 3:53 PM, Xavier Simonart via dev wrote:
> Replace direct ovs-vsctl ofport queries with ovs-vsctl wait-until (when
> name is available) or OVS_WAIT_UNTIL which retry until a valid ofport is
> assigned.
> Also add "ovn-nbctl --wait=hv sync" to ensure ovn-controller has
> installed the output flows referencing that ofport before running
> any trace.
>
> Fixes: 79302556d472 ("controller: Add experimental flow-based tunnel
> support.")
> Signed-off-by: Xavier Simonart <[email protected]>
>
> ---
> v2: Updated after removal of wait_and_get_ofport.
> ---
Hi Xavier,
Thanks for the new revision!
> tests/ovn.at | 29 +++++++++++++++++++++++------
> 1 file changed, 23 insertions(+), 6 deletions(-)
>
> diff --git a/tests/ovn.at b/tests/ovn.at
> index 555222222..68bebca1f 100644
> --- a/tests/ovn.at
> +++ b/tests/ovn.at
> @@ -32109,10 +32109,17 @@ check_packet_tunnel() {
> as $hv
> echo "vif$src -> vif$dst should go through tunnel $local_encap_ip ->
> $remote_encap_ip"
> if test x$flow_based_tunnel == xtrue; then
> - tunnel_ofport=$(ovs-vsctl --bare --column=ofport list interface
> ovn-geneve)
> + AT_CHECK([ovs-vsctl wait-until interface ovn-geneve 'ofport>0'])
> + tunnel_ofport=$(ovs-vsctl get interface ovn-geneve ofport)
> else
> - tunnel_ofport=$(ovs-vsctl --bare --column=ofport find interface
> options:local_ip=$local_encap_ip options:remote_ip=$remote_encap_ip)
> + OVS_WAIT_UNTIL([
> + tunnel_ofport=$(ovs-vsctl --bare --columns ofport find Interface
> options:local_ip=$local_encap_ip options:remote_ip=$remote_encap_ip)
> + echo "ofport=$tunnel_ofport" >&2
> + test -n "$tunnel_ofport" && test "$tunnel_ofport" -ge 0])
> fi
> + # Once ofport is in ovs db, ensure ovn-controller handles it.
> + check ovn-nbctl --wait=hv sync
> +
> AT_CHECK([test $(ovs-appctl ofproto/trace br-int in_port=vif$src $packet
> | grep "output:" | awk -F ':' '{ print $2 }') == $tunnel_ofport])
> if test x$flow_based_tunnel == xtrue; then
> trace_output=$(ovs-appctl ofproto/trace br-int in_port=vif$src
> $packet)
> @@ -32215,10 +32222,16 @@ check_packet_tunnel() {
> echo "vif$src -> vif$dst should go through tunnel $local_encap_ip ->
> $remote_encap_ip"
>
> if test x$flow_based_tunnel == xtrue; then
> - tunnel_ofport=$(ovs-vsctl --bare --column=ofport list interface
> ovn-geneve)
> + AT_CHECK([ovs-vsctl wait-until interface ovn-geneve 'ofport>0'])
> + tunnel_ofport=$(ovs-vsctl get interface ovn-geneve ofport)
> else
> - tunnel_ofport=$(ovs-vsctl --bare --column=ofport find interface
> options:local_ip=$local_encap_ip options:remote_ip=$remote_encap_ip)
> + OVS_WAIT_UNTIL([
> + tunnel_ofport=$(ovs-vsctl --bare --columns ofport find Interface
> options:local_ip=$local_encap_ip options:remote_ip=$remote_encap_ip)
> + echo "ofport=$tunnel_ofport" >&2
> + test -n "$tunnel_ofport" && test "$tunnel_ofport" -ge 0])
> fi
> + check ovn-nbctl --wait=hv sync
> +
> AT_CHECK([test $(ovs-appctl ofproto/trace br-int in_port=vif$src $packet
> | grep "output:" | awk -F ':' '{ print $2 }') == $tunnel_ofport])
> if test x$flow_based_tunnel == xtrue; then
> trace_output=$(ovs-appctl ofproto/trace br-int in_port=vif$src
> $packet)
> @@ -32365,9 +32378,13 @@ check_packet_tunnel() {
> as $hv
> echo "vif$src -> vif$dst should go through tunnel $local_encap_ip ->
> $remote_encap_ip"
> if test x$flow_based_tunnel == xtrue; then
> - tunnel_ofport=$(ovs-vsctl --bare --column=ofport list interface
> ovn-geneve)
> + AT_CHECK([ovs-vsctl wait-until interface ovn-geneve 'ofport>0'])
> + tunnel_ofport=$(ovs-vsctl get interface ovn-geneve ofport)
> else
> - tunnel_ofport=$(ovs-vsctl --bare --column=ofport find interface
> options:local_ip=$local_encap_ip options:remote_ip=$remote_encap_ip)
> + OVS_WAIT_UNTIL([
> + tunnel_ofport=$(ovs-vsctl --bare --columns ofport find Interface
> options:local_ip=$local_encap_ip options:remote_ip=$remote_encap_ip)
> + echo "ofport=$tunnel_ofport" >&2
> + test -n "$tunnel_ofport" && test "$tunnel_ofport" -ge 0])
> fi
> ovs-appctl ofproto/trace br-ext in_port=vif$src $packet
This line can be removed too.
We're missing an ovn-nbctl --wait=hv sync here.
> AT_CHECK([test $(ovs-appctl ofproto/trace br-ext in_port=vif$src $packet
> | grep "output:" | awk -F ':' '{ print $2 }') == $tunnel_ofport])
Regards,
Dumitru
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev