From patchwork Mon Oct 14 10:10:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xavier Simonart X-Patchwork-Id: 1996774 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=XeNJPeLR; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XRtKh358Rz1xvK for ; Mon, 14 Oct 2024 21:11:04 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 71082404E3; Mon, 14 Oct 2024 10:11:01 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id z99bGgNLNvOT; Mon, 14 Oct 2024 10:10:58 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org CD9BD404D5 Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=XeNJPeLR Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTPS id CD9BD404D5; Mon, 14 Oct 2024 10:10:57 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 1C24FC08A9; Mon, 14 Oct 2024 10:10:57 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3B76EC08A6 for ; Mon, 14 Oct 2024 10:10:54 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 2A2DD403D8 for ; Mon, 14 Oct 2024 10:10:54 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id zUIu2wV9TaxD for ; Mon, 14 Oct 2024 10:10:52 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=170.10.133.124; helo=us-smtp-delivery-124.mimecast.com; envelope-from=xsimonar@redhat.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp4.osuosl.org 8021D403D5 Authentication-Results: smtp4.osuosl.org; dmarc=pass (p=none dis=none) header.from=redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 8021D403D5 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp4.osuosl.org (Postfix) with ESMTPS id 8021D403D5 for ; Mon, 14 Oct 2024 10:10:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1728900651; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9XXtowKa/HKGDBxL6OIyFtWdHTgsQOP9IqxjA1vtnDk=; b=XeNJPeLRq2LvlVmKnB657zF03V2z4+UttISCMvc2/6oGvJZQjjrreSOPsa3gxUN/ZsaODS qnNBHV0xN1aRjh5tMSbexfmKzYIdL0vDkfKjBSG84Z6WY5Y91+GhkUKvSUso6wdhsjp1+W bmUdp6BgoIGh1DjuX5KAzcRQLU2iRvs= Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-540-4fpQQPghOpK18i3Lb3XKIQ-1; Mon, 14 Oct 2024 06:10:50 -0400 X-MC-Unique: 4fpQQPghOpK18i3Lb3XKIQ-1 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 38AC91953944 for ; Mon, 14 Oct 2024 10:10:49 +0000 (UTC) Received: from wsfd-netdev90.ntdv.lab.eng.bos.redhat.com (wsfd-netdev90.anl.eng.rdu2.dc.redhat.com [10.6.38.135]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 984A01955E8F; Mon, 14 Oct 2024 10:10:48 +0000 (UTC) From: Xavier Simonart To: xsimonar@redhat.com, dev@openvswitch.org Date: Mon, 14 Oct 2024 12:10:42 +0200 Message-Id: <20241014101046.3309426-2-xsimonar@redhat.com> In-Reply-To: <20241014101046.3309426-1-xsimonar@redhat.com> References: <20240830082814.1802264-3-xsimonar@redhat.com> <20241014101046.3309426-1-xsimonar@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [ovs-dev] [PATCH ovn v2 1/5] tests: Move macros to ovn-macros.at. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Move macros from ovn.at to ovn-macros.at so other tests can use them. No change done to any macros in this patch - only moving. Signed-off-by: Xavier Simonart --- tests/ovn-macros.at | 188 ++++++++++++++++++++++++++++++++++++++++++++ tests/ovn.at | 187 ------------------------------------------- 2 files changed, 188 insertions(+), 187 deletions(-) diff --git a/tests/ovn-macros.at b/tests/ovn-macros.at index 77d1515f6..0f9a3ab09 100644 --- a/tests/ovn-macros.at +++ b/tests/ovn-macros.at @@ -1,3 +1,191 @@ +# OVN_CHECK_PACKETS([PCAP], [EXPECTED]) +# +# This compares packets read from PCAP, in pcap format, to those read +# from EXPECTED, which is a text file containing packets as hex +# strings, one per line. If PCAP contains fewer packets than +# EXPECTED, it waits up to 10 seconds for more packets to appear. +# +# The implementation is an m4 macro that is mostly implemented in +# terms of a shell function. This reduces the size of the generated +# testsuite file since the shell function is only emitted once even +# when this macro is invoked many times. +m4_divert_text([PREPARE_TESTS], + [dump_diff__ () { + local rcv_pcap=$1 exp_text=$2 + rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` + echo "Expected:" + sort $exp_text + echo "Received:" + sort $rcv_text + sort $exp_text -o $exp_text.sorted + sort $rcv_text -o $rcv_text.sorted + echo "Diff:" + diff -u $exp_text.sorted $rcv_text.sorted + } + ovn_check_packets__ () { + if [[ -n "$4" ]]; then + echo "$3: checking packets in $1 against $2: using $4" + else + echo "$3: checking packets in $1 against $2:" + fi + rcv_pcap=$1 + rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` + exp_text=$2 + exp_n=`wc -l < "$exp_text"` + OVS_WAIT_UNTIL( + [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text + rcv_n=`wc -l < "$rcv_text"` + echo "rcv_n=$rcv_n exp_n=$exp_n" + test $rcv_n -ge $exp_n], + [dump_diff__ "$rcv_pcap" "$exp_text"]) + if [[ -n "$4" ]]; then + sort $exp_text | $4 > expout + cat $rcv_text | $4 > rcv_tmp + mv rcv_tmp $rcv_text + else + sort $exp_text > expout + fi + } + ovn_check_packets_remove_broadcast__ () { + echo "$3: checking packets in $1 against $2:" + rcv_pcap=$1 + rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` + exp_text=$2 + exp_n=`wc -l < "$exp_text"` + OVS_WAIT_UNTIL( + [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text + sed -i '/ffffffffffff/d' $rcv_text + rcv_n=`wc -l < "$rcv_text"` + echo "rcv_n=$rcv_n exp_n=$exp_n" + test $rcv_n -ge $exp_n], + [dump_diff__ "$rcv_pcap" "$exp_text"]) + sort $exp_text > expout + } + ovn_wait_packets__ () { + echo "$3: waiting for packets from $2 at $1:" + if [[ -n "$4" ]]; then + echo "$3: checking packets from $2 at $1: using $4" + else + echo "$3: checking packets from $2 at $1:" + fi + rcv_pcap=$1 + rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` + exp_text=$2 + if [[ -n "$4" ]]; then + cmd=$4 + else + cmd=cat + fi + OVS_WAIT_UNTIL( + [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text + sort $exp_text | $cmd > expout + test x"$(sort $rcv_text | $cmd | comm -2 -3 expout -)" = "x"], + [dump_diff__ "$rcv_pcap" "$exp_text"]) + cat $rcv_text | $cmd > rcv_tmp + mv rcv_tmp $rcv_text + } + ovn_wait_packets_uniq__ () { + echo "$3: waiting for packets from $2 at $1:" + rcv_pcap=$1 + rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` + exp_text=$2 + OVS_WAIT_UNTIL( + [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text + sort $exp_text > expout + test x"$(sort $rcv_text | uniq | comm -3 expout -)" = "x"], + [dump_diff__ "$rcv_pcap" "$exp_text"]) + } + + ovn_wait_patch_port_flows () { + for localnet in $1; do + patch_port="patch-br-int-to-$localnet" + for hv in $2; do + echo "$3: waiting for flows for $patch_port on $hv" + # Patch port might be created after ports are reported up + OVS_WAIT_UNTIL([ + test 1 = $(as $hv ovs-vsctl show | grep "Port \b$patch_port\b" | wc -l) + ]) + # Wait for a flow outputing to patch port + OVS_WAIT_UNTIL([ + hv_patch_ofport=$(as $hv ovs-vsctl --bare --columns ofport find Interface name=$patch_port) + echo "$patch_port=$hv_patch_ofport" + test 1 -le $(as $hv ovs-ofctl dump-flows br-int | grep -c "output:\b$hv_patch_ofport\b") + ]) + done + done + } + + ovn_wait_remote_output_flows () { + hv1=$1 + hv2=$2 + echo "$3: waiting for flows for remote output on $hv1" + # Wait for a flow outputing to remote output + OVS_WAIT_UNTIL([ + ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-${hv2}-0) + echo "tunnel port=$ofport" + test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "output:$ofport") + ]) + } + + ovn_wait_remote_input_flows () { + hv1=$1 + hv2=$2 + echo "$3: waiting for flows for remote input on $hv1" + # Wait for a flow outputing to remote input + OVS_WAIT_UNTIL([ + ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-${hv2}-0) + echo "tunnel port=$ofport" + test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "in_port=$ofport") + ]) + } + + # ovn_wait_for_bfd_up HV + # BFD might be quite slow. While BFD is not up, all chassis will fight to claim the port + # Wait for BFD between different chassis to be up + ovn_wait_for_bfd_up() { + for hv; do + as $hv + for chassis; do + if test $hv != $chassis; then + echo "checking bdf_status for $hv -> $chassis" + OVS_WAIT_UNTIL([ + bfd_status=$(as $hv ovs-vsctl get interface ovn-$chassis-0 bfd_status:state) + echo "bfd status = $bfd_status" + test "$bfd_status" = "up" + ]) + fi + done + done + } +]) + +m4_define([OVN_CHECK_PACKETS], + [AT_CHECK([$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $1 ], [0], [ignore]) + ovn_check_packets__ "$1" "$2" "__file__:__line__" $3 + AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1" "$2"])]) + +m4_define([OVN_CHECK_PACKETS_REMOVE_BROADCAST], + [ovn_check_packets_remove_broadcast__ "$1" "$2" "__file__:__line__" + AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1" "$2"])]) + +m4_define([OVN_CHECK_PACKETS_CONTAIN], + [ovn_wait_packets__ "$1" "$2" "__file__:__line__" $3]) + +# OVN_CHECK_PACKETS_UNIQ succeeds if some expected packets are duplicated. +# It fails if unexpected packets are received. +m4_define([OVN_CHECK_PACKETS_UNIQ], + [ovn_wait_packets_uniq__ "$1" "$2" "__file__:__line__"]) + +m4_define([OVN_WAIT_PATCH_PORT_FLOWS], + [ovn_wait_patch_port_flows "$1" "$2" "__file__:__line__"]) + +m4_define([OVN_WAIT_REMOTE_OUTPUT_FLOWS], + [ovn_wait_remote_output_flows "$1" "$2" "__file__:__line__"]) + +m4_define([OVN_WAIT_REMOTE_INPUT_FLOWS], + [ovn_wait_remote_input_flows "$1" "$2" "__file__:__line__"]) + + # OVN_CLEANUP_VSWITCH(sim) # # Gracefully terminate vswitch daemons in the diff --git a/tests/ovn.at b/tests/ovn.at index d7f01169c..e3c25be53 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -1,190 +1,3 @@ -# OVN_CHECK_PACKETS([PCAP], [EXPECTED]) -# -# This compares packets read from PCAP, in pcap format, to those read -# from EXPECTED, which is a text file containing packets as hex -# strings, one per line. If PCAP contains fewer packets than -# EXPECTED, it waits up to 10 seconds for more packets to appear. -# -# The implementation is an m4 macro that is mostly implemented in -# terms of a shell function. This reduces the size of the generated -# testsuite file since the shell function is only emitted once even -# when this macro is invoked many times. -m4_divert_text([PREPARE_TESTS], - [dump_diff__ () { - local rcv_pcap=$1 exp_text=$2 - rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` - echo "Expected:" - sort $exp_text - echo "Received:" - sort $rcv_text - sort $exp_text -o $exp_text.sorted - sort $rcv_text -o $rcv_text.sorted - echo "Diff:" - diff -u $exp_text.sorted $rcv_text.sorted - } - ovn_check_packets__ () { - if [[ -n "$4" ]]; then - echo "$3: checking packets in $1 against $2: using $4" - else - echo "$3: checking packets in $1 against $2:" - fi - rcv_pcap=$1 - rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` - exp_text=$2 - exp_n=`wc -l < "$exp_text"` - OVS_WAIT_UNTIL( - [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text - rcv_n=`wc -l < "$rcv_text"` - echo "rcv_n=$rcv_n exp_n=$exp_n" - test $rcv_n -ge $exp_n], - [dump_diff__ "$rcv_pcap" "$exp_text"]) - if [[ -n "$4" ]]; then - sort $exp_text | $4 > expout - cat $rcv_text | $4 > rcv_tmp - mv rcv_tmp $rcv_text - else - sort $exp_text > expout - fi - } - ovn_check_packets_remove_broadcast__ () { - echo "$3: checking packets in $1 against $2:" - rcv_pcap=$1 - rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` - exp_text=$2 - exp_n=`wc -l < "$exp_text"` - OVS_WAIT_UNTIL( - [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text - sed -i '/ffffffffffff/d' $rcv_text - rcv_n=`wc -l < "$rcv_text"` - echo "rcv_n=$rcv_n exp_n=$exp_n" - test $rcv_n -ge $exp_n], - [dump_diff__ "$rcv_pcap" "$exp_text"]) - sort $exp_text > expout - } - ovn_wait_packets__ () { - echo "$3: waiting for packets from $2 at $1:" - if [[ -n "$4" ]]; then - echo "$3: checking packets from $2 at $1: using $4" - else - echo "$3: checking packets from $2 at $1:" - fi - rcv_pcap=$1 - rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` - exp_text=$2 - if [[ -n "$4" ]]; then - cmd=$4 - else - cmd=cat - fi - OVS_WAIT_UNTIL( - [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text - sort $exp_text | $cmd > expout - test x"$(sort $rcv_text | $cmd | comm -2 -3 expout -)" = "x"], - [dump_diff__ "$rcv_pcap" "$exp_text"]) - cat $rcv_text | $cmd > rcv_tmp - mv rcv_tmp $rcv_text - } - ovn_wait_packets_uniq__ () { - echo "$3: waiting for packets from $2 at $1:" - rcv_pcap=$1 - rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` - exp_text=$2 - OVS_WAIT_UNTIL( - [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text - sort $exp_text > expout - test x"$(sort $rcv_text | uniq | comm -3 expout -)" = "x"], - [dump_diff__ "$rcv_pcap" "$exp_text"]) - } - - ovn_wait_patch_port_flows () { - for localnet in $1; do - patch_port="patch-br-int-to-$localnet" - for hv in $2; do - echo "$3: waiting for flows for $patch_port on $hv" - # Patch port might be created after ports are reported up - OVS_WAIT_UNTIL([ - test 1 = $(as $hv ovs-vsctl show | grep "Port \b$patch_port\b" | wc -l) - ]) - # Wait for a flow outputing to patch port - OVS_WAIT_UNTIL([ - hv_patch_ofport=$(as $hv ovs-vsctl --bare --columns ofport find Interface name=$patch_port) - echo "$patch_port=$hv_patch_ofport" - test 1 -le $(as $hv ovs-ofctl dump-flows br-int | grep -c "output:\b$hv_patch_ofport\b") - ]) - done - done - } - - ovn_wait_remote_output_flows () { - hv1=$1 - hv2=$2 - echo "$3: waiting for flows for remote output on $hv1" - # Wait for a flow outputing to remote output - OVS_WAIT_UNTIL([ - ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-${hv2}-0) - echo "tunnel port=$ofport" - test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "output:$ofport") - ]) - } - - ovn_wait_remote_input_flows () { - hv1=$1 - hv2=$2 - echo "$3: waiting for flows for remote input on $hv1" - # Wait for a flow outputing to remote input - OVS_WAIT_UNTIL([ - ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-${hv2}-0) - echo "tunnel port=$ofport" - test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "in_port=$ofport") - ]) - } - - # ovn_wait_for_bfd_up HV - # BFD might be quite slow. While BFD is not up, all chassis will fight to claim the port - # Wait for BFD between different chassis to be up - ovn_wait_for_bfd_up() { - for hv; do - as $hv - for chassis; do - if test $hv != $chassis; then - echo "checking bdf_status for $hv -> $chassis" - OVS_WAIT_UNTIL([ - bfd_status=$(as $hv ovs-vsctl get interface ovn-$chassis-0 bfd_status:state) - echo "bfd status = $bfd_status" - test "$bfd_status" = "up" - ]) - fi - done - done - } -]) - -m4_define([OVN_CHECK_PACKETS], - [AT_CHECK([$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $1 ], [0], [ignore]) - ovn_check_packets__ "$1" "$2" "__file__:__line__" $3 - AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1" "$2"])]) - -m4_define([OVN_CHECK_PACKETS_REMOVE_BROADCAST], - [ovn_check_packets_remove_broadcast__ "$1" "$2" "__file__:__line__" - AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1" "$2"])]) - -m4_define([OVN_CHECK_PACKETS_CONTAIN], - [ovn_wait_packets__ "$1" "$2" "__file__:__line__" $3]) - -# OVN_CHECK_PACKETS_UNIQ succeeds if some expected packets are duplicated. -# It fails if unexpected packets are received. -m4_define([OVN_CHECK_PACKETS_UNIQ], - [ovn_wait_packets_uniq__ "$1" "$2" "__file__:__line__"]) - -m4_define([OVN_WAIT_PATCH_PORT_FLOWS], - [ovn_wait_patch_port_flows "$1" "$2" "__file__:__line__"]) - -m4_define([OVN_WAIT_REMOTE_OUTPUT_FLOWS], - [ovn_wait_remote_output_flows "$1" "$2" "__file__:__line__"]) - -m4_define([OVN_WAIT_REMOTE_INPUT_FLOWS], - [ovn_wait_remote_input_flows "$1" "$2" "__file__:__line__"]) - AT_BANNER([OVN components]) AT_SETUP([lexer]) From patchwork Mon Oct 14 10:10:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xavier Simonart X-Patchwork-Id: 1996773 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=Djs5o6at; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::138; helo=smtp1.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XRtKb4Dtyz1xvK for ; Mon, 14 Oct 2024 21:10:59 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 8C459810B0; Mon, 14 Oct 2024 10:10:57 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id SW2MVPNumiTf; Mon, 14 Oct 2024 10:10:56 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 6A8E080F59 Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=Djs5o6at Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id 6A8E080F59; Mon, 14 Oct 2024 10:10:56 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id A08ACC08B4; Mon, 14 Oct 2024 10:10:55 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 26C97C08A3 for ; Mon, 14 Oct 2024 10:10:54 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 0961480F59 for ; Mon, 14 Oct 2024 10:10:54 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id n74N1-FGYMtb for ; Mon, 14 Oct 2024 10:10:53 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=170.10.129.124; helo=us-smtp-delivery-124.mimecast.com; envelope-from=xsimonar@redhat.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org 26B1680E76 Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=none dis=none) header.from=redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 26B1680E76 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by smtp1.osuosl.org (Postfix) with ESMTPS id 26B1680E76 for ; Mon, 14 Oct 2024 10:10:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1728900652; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=h2Vkf0ISejCuiiqHqyrzmAq7vvl3IZZG8CowbBz8EHE=; b=Djs5o6atduZAEvrPZImy9E9C6HwPcdVmcskOI7lNgu0KyHW21dGWAwGQblD0mYl/3N56Wg f7ENRb3B9fir2d+TpGCHf6adB5qkc7KcZqGDrTvOSpF2IWQmDzbSJR3OajWPW7DhvwnWhm JLiVBvdOFrVChe4i0grvbjR97CuLKZ4= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-631-4npoKKvsPAinPEm_ly-enA-1; Mon, 14 Oct 2024 06:10:50 -0400 X-MC-Unique: 4npoKKvsPAinPEm_ly-enA-1 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1F67D1955F41 for ; Mon, 14 Oct 2024 10:10:50 +0000 (UTC) Received: from wsfd-netdev90.ntdv.lab.eng.bos.redhat.com (wsfd-netdev90.anl.eng.rdu2.dc.redhat.com [10.6.38.135]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6FC8E1955E93; Mon, 14 Oct 2024 10:10:49 +0000 (UTC) From: Xavier Simonart To: xsimonar@redhat.com, dev@openvswitch.org Date: Mon, 14 Oct 2024 12:10:43 +0200 Message-Id: <20241014101046.3309426-3-xsimonar@redhat.com> In-Reply-To: <20241014101046.3309426-1-xsimonar@redhat.com> References: <20240830082814.1802264-3-xsimonar@redhat.com> <20241014101046.3309426-1-xsimonar@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [ovs-dev] [PATCH ovn v2 2/5] tests: Fix macros waiting for flows. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Those macros were, in some cases, returning before the proper flows were installed, for instance when no ofport was yet created. Hence tests might sometimes have been flaky. This also highlited an issue in a test which also got fixed. Signed-off-by: Xavier Simonart --- tests/ovn-macros.at | 6 +++--- tests/ovn.at | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/ovn-macros.at b/tests/ovn-macros.at index 0f9a3ab09..caa89ab47 100644 --- a/tests/ovn-macros.at +++ b/tests/ovn-macros.at @@ -109,7 +109,7 @@ m4_divert_text([PREPARE_TESTS], OVS_WAIT_UNTIL([ hv_patch_ofport=$(as $hv ovs-vsctl --bare --columns ofport find Interface name=$patch_port) echo "$patch_port=$hv_patch_ofport" - test 1 -le $(as $hv ovs-ofctl dump-flows br-int | grep -c "output:\b$hv_patch_ofport\b") + test -n "$hv_patch_ofport" && test 1 -le $(as $hv ovs-ofctl dump-flows br-int | grep -c "output:\b$hv_patch_ofport\b") ]) done done @@ -123,7 +123,7 @@ m4_divert_text([PREPARE_TESTS], OVS_WAIT_UNTIL([ ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-${hv2}-0) echo "tunnel port=$ofport" - test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "output:$ofport") + test -n "$ofport" && test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "output:$ofport") ]) } @@ -135,7 +135,7 @@ m4_divert_text([PREPARE_TESTS], OVS_WAIT_UNTIL([ ofport=$(as $hv1 ovs-vsctl --bare --columns ofport find Interface name=ovn-${hv2}-0) echo "tunnel port=$ofport" - test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "in_port=$ofport") + test -n "$ofport" && test 1 -le $(as $hv1 ovs-ofctl dump-flows br-int | grep -c "in_port=$ofport") ]) } diff --git a/tests/ovn.at b/tests/ovn.at index e3c25be53..a82e152b4 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -15361,8 +15361,8 @@ OVN_WAIT_PATCH_PORT_FLOWS(["public"], ["hv1"]) OVN_WAIT_PATCH_PORT_FLOWS(["public"], ["hv2"]) OVN_WAIT_REMOTE_OUTPUT_FLOWS(["hv1"],["hv2"]) OVN_WAIT_REMOTE_OUTPUT_FLOWS(["hv2"],["hv1"]) -OVN_WAIT_REMOTE_OUTPUT_FLOWS(["hv3"],[hv1"]) -OVN_WAIT_REMOTE_OUTPUT_FLOWS(["hv3"],[hv2"]) +OVN_WAIT_REMOTE_OUTPUT_FLOWS(["hv3"],["hv1"]) +OVN_WAIT_REMOTE_OUTPUT_FLOWS(["hv3"],["hv2"]) wait_column "$hv1_uuid" Port_Binding chassis logical_port=migrator wait_column "$hv1_uuid" Port_Binding requested_chassis logical_port=migrator From patchwork Mon Oct 14 10:10:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xavier Simonart X-Patchwork-Id: 1996776 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=bFfCsXJH; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XRtKk3s6Lz1xvt for ; Mon, 14 Oct 2024 21:11:06 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 775BB403D8; Mon, 14 Oct 2024 10:11:02 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id 6MKzlrN_0DlI; Mon, 14 Oct 2024 10:10:59 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=140.211.9.56; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 07BAB4054D Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=bFfCsXJH Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id 07BAB4054D; Mon, 14 Oct 2024 10:10:59 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id D8C52C08A8; Mon, 14 Oct 2024 10:10:58 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 87FA7C08A6 for ; Mon, 14 Oct 2024 10:10:55 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 46C2C60724 for ; Mon, 14 Oct 2024 10:10:55 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id nriXJO_VoQaa for ; Mon, 14 Oct 2024 10:10:54 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=170.10.133.124; helo=us-smtp-delivery-124.mimecast.com; envelope-from=xsimonar@redhat.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org 55F6F6070C Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=none dis=none) header.from=redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 55F6F6070C Authentication-Results: smtp3.osuosl.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=bFfCsXJH Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp3.osuosl.org (Postfix) with ESMTPS id 55F6F6070C for ; Mon, 14 Oct 2024 10:10:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1728900652; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qZdPpYP4Ac7kJTMvremFpYITLoxTizCNwOEzLvKepYk=; b=bFfCsXJHkQddP1vPYC5zbsnf7CtKm5nvqWI2Lx57r8xAUdYHtTRHkrAGU8RXedkLS/6Cvk 0p4A9AhHFWDkYfUIU5BGPl+SQrG4QRnhzGFyViyVH5LZHeMvIutQQmzYFWf3QLW131zMHo TFjwI8Aq5tfA3yza7vz/wP8jejHer5g= Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-454-a3pHcAzcPpKhQFfv-MlQNw-1; Mon, 14 Oct 2024 06:10:51 -0400 X-MC-Unique: a3pHcAzcPpKhQFfv-MlQNw-1 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E68D419560AD for ; Mon, 14 Oct 2024 10:10:50 +0000 (UTC) Received: from wsfd-netdev90.ntdv.lab.eng.bos.redhat.com (wsfd-netdev90.anl.eng.rdu2.dc.redhat.com [10.6.38.135]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 530DD1955E8F; Mon, 14 Oct 2024 10:10:50 +0000 (UTC) From: Xavier Simonart To: xsimonar@redhat.com, dev@openvswitch.org Date: Mon, 14 Oct 2024 12:10:44 +0200 Message-Id: <20241014101046.3309426-4-xsimonar@redhat.com> In-Reply-To: <20241014101046.3309426-1-xsimonar@redhat.com> References: <20240830082814.1802264-3-xsimonar@redhat.com> <20241014101046.3309426-1-xsimonar@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [ovs-dev] [PATCH ovn v2 3/5] tests: Update macros waiting for packets. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" - Add comments explaining what the macros do, highlighting the differences between them. - Support "command" (e.g. cut) third argument for the macros were it was not yet supported. - Cleanup. Signed-off-by: Xavier Simonart --- tests/ovn-macros.at | 82 ++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 45 deletions(-) diff --git a/tests/ovn-macros.at b/tests/ovn-macros.at index caa89ab47..35cfb2a1f 100644 --- a/tests/ovn-macros.at +++ b/tests/ovn-macros.at @@ -23,76 +23,62 @@ m4_divert_text([PREPARE_TESTS], diff -u $exp_text.sorted $rcv_text.sorted } ovn_check_packets__ () { - if [[ -n "$4" ]]; then - echo "$3: checking packets in $1 against $2: using $4" - else - echo "$3: checking packets in $1 against $2:" - fi rcv_pcap=$1 - rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` exp_text=$2 + cmd=${4-cat} + echo "$3: checking packets in $1 against $2:" + rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` exp_n=`wc -l < "$exp_text"` OVS_WAIT_UNTIL( - [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text - rcv_n=`wc -l < "$rcv_text"` + [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > rcv_tmp + rcv_n=`wc -l < rcv_tmp` echo "rcv_n=$rcv_n exp_n=$exp_n" test $rcv_n -ge $exp_n], [dump_diff__ "$rcv_pcap" "$exp_text"]) - if [[ -n "$4" ]]; then - sort $exp_text | $4 > expout - cat $rcv_text | $4 > rcv_tmp - mv rcv_tmp $rcv_text - else - sort $exp_text > expout - fi + sort $exp_text | $cmd > expout + cat rcv_tmp | $cmd > $rcv_text } ovn_check_packets_remove_broadcast__ () { - echo "$3: checking packets in $1 against $2:" rcv_pcap=$1 - rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` exp_text=$2 + cmd=${4-cat} + echo "$3: checking packets in $1 against $2:" + rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` exp_n=`wc -l < "$exp_text"` OVS_WAIT_UNTIL( - [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text - sed -i '/ffffffffffff/d' $rcv_text - rcv_n=`wc -l < "$rcv_text"` + [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > rcv_tmp + sed -i '/ffffffffffff/d' rcv_tmp + rcv_n=`wc -l < rcv_tmp` echo "rcv_n=$rcv_n exp_n=$exp_n" test $rcv_n -ge $exp_n], [dump_diff__ "$rcv_pcap" "$exp_text"]) - sort $exp_text > expout + sort $exp_text | $cmd > expout + cat rcv_tmp | $cmd > $rcv_text } ovn_wait_packets__ () { - echo "$3: waiting for packets from $2 at $1:" - if [[ -n "$4" ]]; then - echo "$3: checking packets from $2 at $1: using $4" - else - echo "$3: checking packets from $2 at $1:" - fi rcv_pcap=$1 - rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` exp_text=$2 - if [[ -n "$4" ]]; then - cmd=$4 - else - cmd=cat - fi + cmd=${4-cat} + echo "$3: waiting packets from $2 at $1:" + rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` OVS_WAIT_UNTIL( - [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text + [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > rcv_tmp sort $exp_text | $cmd > expout - test x"$(sort $rcv_text | $cmd | comm -2 -3 expout -)" = "x"], + cat rcv_tmp | $cmd > $rcv_text + test x"$(sort $rcv_text | comm -2 -3 expout -)" = "x"], [dump_diff__ "$rcv_pcap" "$exp_text"]) - cat $rcv_text | $cmd > rcv_tmp - mv rcv_tmp $rcv_text } + ovn_wait_packets_uniq__ () { - echo "$3: waiting for packets from $2 at $1:" rcv_pcap=$1 - rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` exp_text=$2 + cmd=${4-cat} + echo "$3: waiting for packets from $2 at $1:" + rcv_text=`echo "$rcv_pcap.packets" | sed 's/\.pcap//'` OVS_WAIT_UNTIL( [$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $rcv_pcap > $rcv_text - sort $exp_text > expout - test x"$(sort $rcv_text | uniq | comm -3 expout -)" = "x"], + sort $exp_text | $cmd > expout + test x"$(sort $rcv_text | $cmd | uniq | comm -3 expout -)" = "x"], [dump_diff__ "$rcv_pcap" "$exp_text"]) } @@ -159,22 +145,28 @@ m4_divert_text([PREPARE_TESTS], } ]) +# Wait to receive all packets in $2. +# Fails if any additional packet, or any duplicate packets is received, m4_define([OVN_CHECK_PACKETS], [AT_CHECK([$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" $1 ], [0], [ignore]) ovn_check_packets__ "$1" "$2" "__file__:__line__" $3 AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1" "$2"])]) +# Wait to receive all packets in $2, potentially receiving extra broadcast packets. +# Fails if any (non bcast) additional packet, or any duplicate packets is received. m4_define([OVN_CHECK_PACKETS_REMOVE_BROADCAST], - [ovn_check_packets_remove_broadcast__ "$1" "$2" "__file__:__line__" + [ovn_check_packets_remove_broadcast__ "$1" "$2" "__file__:__line__" "$3" AT_CHECK([sort $rcv_text], [0], [expout], [ignore], [dump_diff__ "$1" "$2"])]) +# Wait to receive all packets from $2. +# Any additional and duplicate packets are accepted. m4_define([OVN_CHECK_PACKETS_CONTAIN], [ovn_wait_packets__ "$1" "$2" "__file__:__line__" $3]) -# OVN_CHECK_PACKETS_UNIQ succeeds if some expected packets are duplicated. -# It fails if unexpected packets are received. +# Wait to receive all packets from $2. +# Duplicate packets are accepted, but the macro fails if unexpected packets are received. m4_define([OVN_CHECK_PACKETS_UNIQ], - [ovn_wait_packets_uniq__ "$1" "$2" "__file__:__line__"]) + [ovn_wait_packets_uniq__ "$1" "$2" "__file__:__line__" $3]) m4_define([OVN_WAIT_PATCH_PORT_FLOWS], [ovn_wait_patch_port_flows "$1" "$2" "__file__:__line__"]) From patchwork Mon Oct 14 10:10:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xavier Simonart X-Patchwork-Id: 1996775 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=HfS9Q6pl; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.138; helo=smtp1.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XRtKj5K1Kz1xvK for ; Mon, 14 Oct 2024 21:11:05 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 2F34F8114E; Mon, 14 Oct 2024 10:11:03 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id bul4RH-4vG9r; Mon, 14 Oct 2024 10:11:01 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 97E0481131 Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=HfS9Q6pl Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id 97E0481131; Mon, 14 Oct 2024 10:11:00 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4D0C6C08A8; Mon, 14 Oct 2024 10:11:00 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 33E4CC08A6 for ; Mon, 14 Oct 2024 10:10:56 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 1E452404F5 for ; Mon, 14 Oct 2024 10:10:56 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id QyHeinIUMEko for ; Mon, 14 Oct 2024 10:10:55 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=170.10.133.124; helo=us-smtp-delivery-124.mimecast.com; envelope-from=xsimonar@redhat.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org DDF9F400FB Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=none dis=none) header.from=redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org DDF9F400FB Authentication-Results: smtp2.osuosl.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=HfS9Q6pl Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp2.osuosl.org (Postfix) with ESMTPS id DDF9F400FB for ; Mon, 14 Oct 2024 10:10:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1728900653; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L2+5CkmFrxLgEf0G0b0poFCGulHlitzwfSr344roEcY=; b=HfS9Q6pl99OMdtWa4OtqinbBGylLFndTS9Wgsitf+M+8ox/dNtPkrl6L/lv+rMvvxC+Eop nFafXv3g2Zif198earREgbvqXEBSA6U7KDad7tuf//5AC5nn1LbbH+ivkcaNaIKRxF1+6R qKRowQeMQz2ztL+u8AZM1g0BoPDFT2Y= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-116-IuIL-qm7MdyLmwKKom9J0A-1; Mon, 14 Oct 2024 06:10:52 -0400 X-MC-Unique: IuIL-qm7MdyLmwKKom9J0A-1 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C98F81955E85 for ; Mon, 14 Oct 2024 10:10:51 +0000 (UTC) Received: from wsfd-netdev90.ntdv.lab.eng.bos.redhat.com (wsfd-netdev90.anl.eng.rdu2.dc.redhat.com [10.6.38.135]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 265C31955E8F; Mon, 14 Oct 2024 10:10:51 +0000 (UTC) From: Xavier Simonart To: xsimonar@redhat.com, dev@openvswitch.org Date: Mon, 14 Oct 2024 12:10:45 +0200 Message-Id: <20241014101046.3309426-5-xsimonar@redhat.com> In-Reply-To: <20241014101046.3309426-1-xsimonar@redhat.com> References: <20240830082814.1802264-3-xsimonar@redhat.com> <20241014101046.3309426-1-xsimonar@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [ovs-dev] [PATCH ovn v2 4/5] controller: Add debug/dump-peer-ports unixctl. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Signed-off-by: Xavier Simonart --- v2: - Rebased on main. - Addressed Ales' comments: - Set name to "unknown" when dumping peer ports if name not set. - Formatting. Signed-off-by: Xavier Simonart --- controller/local_data.c | 16 ++++++++++++++++ controller/local_data.h | 2 ++ controller/ovn-controller.c | 15 +++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/controller/local_data.c b/controller/local_data.c index f889fb76b..f1a7ce00e 100644 --- a/controller/local_data.c +++ b/controller/local_data.c @@ -231,6 +231,22 @@ add_local_datapath_peer_port( local_datapath_peer_port_add(peer_ld, peer, pb); } +void +local_data_dump_peer_ports(struct hmap *local_datapaths, struct ds *peer_ports) +{ + struct local_datapath *ld; + size_t i = 0; + HMAP_FOR_EACH (ld, hmap_node, local_datapaths) { + const char *name = smap_get_def(&ld->datapath->external_ids, "name", + "unknown"); + for (i = 0; i < ld->n_peer_ports; i++) { + ds_put_format(peer_ports, "dp %s : local = %s, remote = %s\n", + name, ld->peer_ports[i].local->logical_port, + ld->peer_ports[i].remote->logical_port); + } + } +} + void remove_local_datapath_peer_port(const struct sbrec_port_binding *pb, struct local_datapath *ld, diff --git a/controller/local_data.h b/controller/local_data.h index 632f34b51..ab8e789a5 100644 --- a/controller/local_data.h +++ b/controller/local_data.h @@ -173,5 +173,7 @@ void remove_local_datapath_multichassis_port(struct local_datapath *ld, char *logical_port); bool lb_is_local(const struct sbrec_load_balancer *sbrec_lb, const struct hmap *local_datapaths); +void local_data_dump_peer_ports(struct hmap *local_datapaths, + struct ds *peer_ports); #endif /* controller/local_data.h */ diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c index 7002dcdfe..e18d4c02b 100644 --- a/controller/ovn-controller.c +++ b/controller/ovn-controller.c @@ -101,6 +101,7 @@ static unixctl_cb_func debug_status_execution; static unixctl_cb_func debug_dump_local_bindings; static unixctl_cb_func debug_dump_related_lports; static unixctl_cb_func debug_dump_local_template_vars; +static unixctl_cb_func debug_dump_peer_ports; static unixctl_cb_func debug_dump_lflow_conj_ids; static unixctl_cb_func lflow_cache_flush_cmd; static unixctl_cb_func lflow_cache_show_stats_cmd; @@ -5336,6 +5337,10 @@ main(int argc, char *argv[]) debug_dump_lflow_conj_ids, &lflow_output_data->conj_ids); + unixctl_command_register("debug/dump-peer-ports", "", 0, 0, + debug_dump_peer_ports, + &runtime_data->local_datapaths); + unixctl_command_register("debug/dump-local-template-vars", "", 0, 0, debug_dump_local_template_vars, &template_vars_data->local_templates); @@ -6273,6 +6278,16 @@ debug_dump_related_lports(struct unixctl_conn *conn, int argc OVS_UNUSED, ds_destroy(&data); } +static void +debug_dump_peer_ports(struct unixctl_conn *conn, int argc OVS_UNUSED, + const char *argv[] OVS_UNUSED, void *local_datapaths) +{ + struct ds peer_ports = DS_EMPTY_INITIALIZER; + local_data_dump_peer_ports(local_datapaths, &peer_ports); + unixctl_command_reply(conn, ds_cstr(&peer_ports)); + ds_destroy(&peer_ports); +} + static void debug_dump_lflow_conj_ids(struct unixctl_conn *conn, int argc OVS_UNUSED, const char *argv[] OVS_UNUSED, void *conj_ids) From patchwork Mon Oct 14 10:10:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xavier Simonart X-Patchwork-Id: 1996777 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=IOOt1sMG; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XRtKq6vrMz1xvK for ; Mon, 14 Oct 2024 21:11:11 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 394FB60776; Mon, 14 Oct 2024 10:11:07 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id 0QoKuAvRMAgt; Mon, 14 Oct 2024 10:11:04 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=140.211.9.56; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org D1EAF60712 Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=IOOt1sMG Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id D1EAF60712; Mon, 14 Oct 2024 10:11:02 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 22055C08BC; Mon, 14 Oct 2024 10:11:02 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4B123C08B4 for ; Mon, 14 Oct 2024 10:10:57 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 250836074E for ; Mon, 14 Oct 2024 10:10:57 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id I0KkCi3BqxEK for ; Mon, 14 Oct 2024 10:10:55 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=170.10.129.124; helo=us-smtp-delivery-124.mimecast.com; envelope-from=xsimonar@redhat.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org 8CDD060724 Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=none dis=none) header.from=redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 8CDD060724 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by smtp3.osuosl.org (Postfix) with ESMTPS id 8CDD060724 for ; Mon, 14 Oct 2024 10:10:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1728900654; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fHwZDrsWy0g3dOEIK+Pd/ovPAuDjKk7ae/HEONFnqFI=; b=IOOt1sMGdu0Qgkpc9CQ3/o7FPGn5l7M4AS9SltQ9Nyjeg/Yki/kFNWIFxOuMq1T+pSE92E B+vFKTvvESVLf1DXPX2eXMqQ3hmDwanYMkSuSiP57nNJ7YwJjqhbyOMULNrkl1X61NsFes geyf9xKVS+10pL2uQ/2g9eblJJ6rsz8= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-609-lLL_1hx3O4KpW4BXYdD2-g-1; Mon, 14 Oct 2024 06:10:53 -0400 X-MC-Unique: lLL_1hx3O4KpW4BXYdD2-g-1 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 9CB6F1955D4D for ; Mon, 14 Oct 2024 10:10:52 +0000 (UTC) Received: from wsfd-netdev90.ntdv.lab.eng.bos.redhat.com (wsfd-netdev90.anl.eng.rdu2.dc.redhat.com [10.6.38.135]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 099941955E8F; Mon, 14 Oct 2024 10:10:51 +0000 (UTC) From: Xavier Simonart To: xsimonar@redhat.com, dev@openvswitch.org Date: Mon, 14 Oct 2024 12:10:46 +0200 Message-Id: <20241014101046.3309426-6-xsimonar@redhat.com> In-Reply-To: <20241014101046.3309426-1-xsimonar@redhat.com> References: <20240830082814.1802264-3-xsimonar@redhat.com> <20241014101046.3309426-1-xsimonar@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [ovs-dev] [PATCH ovn v2 5/5] local_data: Fix missing peer_ports in local dp. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Before this patch, peer ports might be missing if, at the time of adding the datapath to local the port is not yet fully claimed (i.e. pb->chassis still empty) Signed-off-by: Xavier Simonart --- v2: - Rebased on main - Addressed Ales' comment: - Updated tests - Use OVN_WAIT_PATCH_PORT_FLOWS macro). - Use check for ovn-nbctl. - Removed unused switches & leftovers. Signed-off-by: Xavier Simonart --- controller/binding.c | 48 ++++++++++++---- controller/local_data.c | 6 +- tests/system-ovn.at | 119 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 162 insertions(+), 11 deletions(-) diff --git a/controller/binding.c b/controller/binding.c index 492aef530..5b33468ab 100644 --- a/controller/binding.c +++ b/controller/binding.c @@ -1871,14 +1871,35 @@ consider_nonvif_lport_(const struct sbrec_port_binding *pb, struct binding_ctx_in *b_ctx_in, struct binding_ctx_out *b_ctx_out) { + struct local_datapath *ld = + get_local_datapath(b_ctx_out->local_datapaths, + pb->datapath->tunnel_key); + if (our_chassis) { update_local_lports(pb->logical_port, b_ctx_out); - add_local_datapath(b_ctx_in->sbrec_datapath_binding_by_key, - b_ctx_in->sbrec_port_binding_by_datapath, - b_ctx_in->sbrec_port_binding_by_name, - pb->datapath, b_ctx_in->chassis_rec, - b_ctx_out->local_datapaths, - b_ctx_out->tracked_dp_bindings); + if (!ld) { + add_local_datapath(b_ctx_in->sbrec_datapath_binding_by_key, + b_ctx_in->sbrec_port_binding_by_datapath, + b_ctx_in->sbrec_port_binding_by_name, + pb->datapath, b_ctx_in->chassis_rec, + b_ctx_out->local_datapaths, + b_ctx_out->tracked_dp_bindings); + } else { + /* Add the peer datapath to the local datapaths if it's + * not present yet. + */ + if (need_add_peer_to_local( + b_ctx_in->sbrec_port_binding_by_name, pb, + b_ctx_in->chassis_rec)) { + add_local_datapath_peer_port( + pb, b_ctx_in->chassis_rec, + b_ctx_in->sbrec_datapath_binding_by_key, + b_ctx_in->sbrec_port_binding_by_datapath, + b_ctx_in->sbrec_port_binding_by_name, + ld, b_ctx_out->local_datapaths, + b_ctx_out->tracked_dp_bindings); + } + } update_related_lport(pb, b_ctx_out); return claim_lport(pb, NULL, b_ctx_in->chassis_rec, NULL, @@ -1895,10 +1916,17 @@ consider_nonvif_lport_(const struct sbrec_port_binding *pb, || is_additional_chassis(pb, b_ctx_in->chassis_rec) || if_status_is_port_claimed(b_ctx_out->if_mgr, pb->logical_port)) { - return release_lport(pb, b_ctx_in->chassis_rec, - !b_ctx_in->ovnsb_idl_txn, - b_ctx_out->tracked_dp_bindings, - b_ctx_out->if_mgr); + if (!release_lport(pb, b_ctx_in->chassis_rec, + !b_ctx_in->ovnsb_idl_txn, + b_ctx_out->tracked_dp_bindings, + b_ctx_out->if_mgr)) { + return false; + } + + if (ld) { + remove_local_datapath_peer_port(pb, ld, + b_ctx_out->local_datapaths); + } } return true; diff --git a/controller/local_data.c b/controller/local_data.c index f1a7ce00e..e12523d61 100644 --- a/controller/local_data.c +++ b/controller/local_data.c @@ -208,7 +208,11 @@ add_local_datapath_peer_port( struct hmap *tracked_datapaths) { const struct sbrec_port_binding *peer; - peer = lport_get_peer(pb, sbrec_port_binding_by_name); + if (!strcmp(pb->type, "l3gateway")) { + peer = lport_get_l3gw_peer(pb, sbrec_port_binding_by_name); + } else { + peer = lport_get_peer(pb, sbrec_port_binding_by_name); + } if (!peer) { return; diff --git a/tests/system-ovn.at b/tests/system-ovn.at index 861b1cb99..a23471bf8 100644 --- a/tests/system-ovn.at +++ b/tests/system-ovn.at @@ -13929,3 +13929,122 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/.*error receiving.*/d /.*terminating with signal 15.*/d"]) AT_CLEANUP ]) + +OVN_FOR_EACH_NORTHD([ +AT_SETUP([IPv6 prefix delegation - l3gateway ports creation]) +AT_SKIP_IF([test $HAVE_DHCPD = no]) +AT_SKIP_IF([test $HAVE_TCPDUMP = no]) +AT_KEYWORDS([ovn-ipv6-prefix_d]) +ovn_start +OVS_TRAFFIC_VSWITCHD_START() + +ADD_BR([br-int]) +ADD_BR([br-ext]) + +ovs-vsctl set-fail-mode br-ext standalone +# Set external-ids in br-int needed for ovn-controller +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 bridge br-int fail-mode=secure other-config:disable-in-band=true + +# Start ovn-controller +start_daemon ovn-controller + +ADD_NAMESPACES(server) +ADD_VETH(s1, server, br-ext, "2001:1db8:3333::2/64", "f0:00:00:01:02:05", \ + "2001:1db8:3333::1", "nodad") + +ovn-nbctl create Logical_Router name=R1 options:chassis=hv1 + +check ovn-nbctl ls-add sw0 +check ovn-nbctl ls-add public + +# Add localnet port on public and router ports between R1 and public. +# This should create the patch ports. +# This is done early in the test as this used to cause some recomputes (due +# to runtime data handler for ovs_interface). +# Hence, we avoid such recompute later in the test, so we only rely on I+P. +AT_CHECK([ovs-vsctl set Open_vSwitch . external-ids:ovn-bridge-mappings=phynet:br-ext]) +check ovn-nbctl lsp-add public ln1 \ + -- lsp-set-addresses ln1 unknown \ + -- lsp-set-type ln1 localnet \ + -- lsp-set-options ln1 network_name=phynet + +check ovn-nbctl lrp-add R1 rp-public 00:00:02:01:02:03 172.16.1.1/24 +check ovn-nbctl lsp-add public public-rp -- set Logical_Switch_Port public-rp \ + type=router options:router-port=rp-public \ + -- lsp-set-addresses public-rp router + +# Wait for a flow outputing to patch port, so we know ovn-controller handled the patch port creation in OVS. +OVN_WAIT_PATCH_PORT_FLOWS(["ln1"], ["./"]) + +check ovn-nbctl lrp-add R1 rp-sw0 00:00:01:01:02:03 192.168.1.1/24 + +check ovn-nbctl lsp-add sw0 sw0-rp -- set Logical_Switch_Port sw0-rp \ + type=router options:router-port=rp-sw0 \ + -- lsp-set-addresses sw0-rp router +check ovn-nbctl lsp-add sw0 sw01 \ + -- lsp-set-addresses sw01 "f0:00:00:01:02:03 192.168.1.2" + +check ovn-nbctl set logical_router_port rp-public options:prefix_delegation=true +check ovn-nbctl set logical_router_port rp-public options:prefix=true +check ovn-nbctl set logical_router_port rp-sw0 options:prefix=true + +OVN_POPULATE_ARP + +check ovn-nbctl --wait=hv sync + +cat > /etc/dhcp/dhcpd.conf < dhcpd.log 2>&1], [dhcpd.pid]) +ovn-nbctl --wait=hv sync + +AT_CHECK([ovn-appctl debug/dump-peer-ports | sort], [0], [dnl +dp R1 : local = rp-public, remote = public-rp +dp R1 : local = rp-sw0, remote = sw0-rp +dp public : local = public-rp, remote = rp-public +dp sw0 : local = sw0-rp, remote = rp-sw0 +]) + +OVS_WAIT_WHILE([test "$(ovn-nbctl get logical_router_port rp-public ipv6_prefix | cut -c4-15)" = ""]) +OVS_WAIT_WHILE([test "$(ovn-nbctl get logical_router_port rp-sw0 ipv6_prefix | cut -c4-15)" = ""]) + +AT_CHECK([ovn-nbctl get logical_router_port rp-public ipv6_prefix | cut -c3-16], [0], [dnl +[2001:1db8:3333] +]) +AT_CHECK([ovn-nbctl get logical_router_port rp-sw0 ipv6_prefix | cut -c3-16], [0], [dnl +[2001:1db8:3333] +]) + +OVS_APP_EXIT_AND_WAIT([ovn-controller]) + +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(["/.*error receiving.*/d +/failed to query port patch-.*/d +/.*terminating with signal 15.*/d"]) +AT_CLEANUP +])