From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: passt.top; dkim=pass (2048-bit key; secure) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.a=rsa-sha256 header.s=202410 header.b=l0UiMDxq; dkim-atps=neutral Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id BACF65A004C for ; Tue, 26 Nov 2024 04:27:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202410; t=1732591646; bh=wz8MqBMM/P+/LIqmhJHeACuJN8yaPdTLPrKDXlJhh40=; h=From:To:Cc:Subject:Date:From; b=l0UiMDxqdzbK54Kd5GIJJ82AswIqnbRLA8/5snUvd7UyOdu+O7eB/yuVG1gcWJeBE /vDtQMMXrlMIuGnHnPQI3efXhCmhtxCZK1FmqqdNG/qQ7sul4svpwlGG927a4e13M5 qvKyCPPULzUbc6M0H0a0zS0j9eoAhqnl9oTTm/fvW+Er5lmRrMQK4DKmOXZjbK7TkS EnCZ5zj8+3rNNkUjDMeAPC91kzuGy3RIx5aghAbUuyF33/VlTtZ1kkj5n5ZciVK14w V3qa83AGMvgIX4lPsVkdTDA9nBClL1i7rByCAX9fJoh69x0kFyEtTtbY5nP9oAIdUL 4qJkQ3r5i1qUw== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4Xy7L61bq3z4xfs; Tue, 26 Nov 2024 14:27:26 +1100 (AEDT) From: David Gibson To: Stefano Brivio , passt-dev@passt.top Subject: [PATCH] test: Improve logic for waiting for SLAAC & DAD to complete in NDP tests Date: Tue, 26 Nov 2024 14:27:27 +1100 Message-ID: <20241126032727.607881-1-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.47.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: ZWLMBT7OVG5E3FK27DKNWX5ZLDYNGQZA X-Message-ID-Hash: ZWLMBT7OVG5E3FK27DKNWX5ZLDYNGQZA X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Since 9a0e544f05bf the NDP tests attempt to explicitly wait for DAD to complete, rather than just having a hard coded sleep. However, the conditions we use are a bit sloppy and allow for a number of possible cases where it might not work correctly. Stefano seems to be hitting one of these (though I'm not sure which) with some later patches. - We wait for *lack* of a tentative address, so if the first check occurs before we have even a tentative address it will bypass the delay - It's not entirely clear if the permanent address will always appear as soon as the tentative address disappears - We weren't filtering on interface - We were doing the filtering with ip-address options rather than in jq. However in at least in some circumstances this seems to result in an empty .addr_info field, rather than omitting it entirely, which could cause us to get the wrong result So, instead, explicitly wait for the address we need to be present: an RA provided address on the external interface. While we're here we remove the requirement that it have global scope: the "kernel_ra" check is already sufficient to make sure this address comes from an NDP RA, not something else. If it's not the global scope address we expect, better to check it and fail, rather than keep waiting. Fixes: 9a0e544f05bf ("test: Improve test for NDP assigned prefix") Signed-off-by: David Gibson --- test/passt/ndp | 6 +++--- test/pasta/ndp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/passt/ndp b/test/passt/ndp index 56b385b..516cd6b 100644 --- a/test/passt/ndp +++ b/test/passt/ndp @@ -17,13 +17,13 @@ htools ip jq sipcalc grep cut test Interface name gout IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname' guest ip link set dev __IFNAME__ up -# Wait for DAD to complete -guest while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done +# Wait for SLAAC & DAD to complete +guest while ! ip -j -6 addr show dev __IFNAME__ | jq -e '.[].addr_info.[] | select(.protocol == "kernel_ra")'; do sleep 0.1; done hout HOST_IFNAME6 ip -j -6 route show|jq -rM '[.[] | select(.dst == "default").dev] | .[0]' check [ -n "__IFNAME__" ] test SLAAC: prefix -gout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope == "global" and .protocol == "kernel_ra") | .local + "/" + (.prefixlen | tostring)] | .[0]' +gout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.protocol == "kernel_ra") | .local + "/" + (.prefixlen | tostring)] | .[0]' gout PREFIX6 sipcalc __ADDR6__ | grep prefix | cut -d' ' -f4 hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]' hout HOST_PREFIX6 sipcalc __HOST_ADDR6__/64 | grep prefix | cut -d' ' -f4 diff --git a/test/pasta/ndp b/test/pasta/ndp index 2442ab5..952c1ea 100644 --- a/test/pasta/ndp +++ b/test/pasta/ndp @@ -18,11 +18,11 @@ test Interface name nsout IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname' check [ -n "__IFNAME__" ] ns ip link set dev __IFNAME__ up -# Wait for DAD to complete -ns while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done +# Wait for SLAAC & DAD to complete +ns while ! ip -j -6 addr show dev __IFNAME__ | jq -e '.[].addr_info.[] | select(.protocol == "kernel_ra")'; do sleep 0.1; done test SLAAC: prefix -nsout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope == "global" and .protocol == "kernel_ra") | .local + "/" + (.prefixlen | tostring)] | .[0]' +nsout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.protocol == "kernel_ra") | .local + "/" + (.prefixlen | tostring)] | .[0]' nsout PREFIX6 sipcalc __ADDR6__ | grep prefix | cut -d' ' -f4 hout HOST_ADDR6 ip -j -6 addr show|jq -rM ['.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]' hout HOST_PREFIX6 sipcalc __HOST_ADDR6__/64 | grep prefix | cut -d' ' -f4 -- 2.47.0