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])