public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Dan Rue <dan.rue@linaro.org>
To: ltp@lists.linux.it
Subject: [LTP] [RFC] [PATCH] netns: Fix race in virtual interface bringup
Date: Thu,  9 Nov 2017 14:38:41 -0600	[thread overview]
Message-ID: <20171109203841.28856-1-dan.rue@linaro.org> (raw)

Symptoms (+ command, error):
    netns_comm_ip_ipv6_ioctl:
        + ip netns exec tst_net_ns1 ping6 -q -c2 -I veth1 fd00::2
        connect: Cannot assign requested address

    netns_comm_ip_ipv6_netlink:
        + ip netns exec tst_net_ns0 ping6 -q -c2 -I veth0 fd00::3
        connect: Cannot assign requested address

    netns_comm_ns_exec_ipv6_ioctl:
        + ns_exec 6689 net ping6 -q -c2 -I veth0 fd00::3
        connect: Cannot assign requested address

    netns_comm_ns_exec_ipv6_netlin:
        + ns_exec 6891 net ping6 -q -c2 -I veth0 fd00::3
        connect: Cannot assign requested address

The error is coming from ping6, which is trying to get an IP address for
veth0 (due to -I veth0), but cannot. Waiting for two seconds fixes the
test in my testcases. 1 second is not long enough.

dmesg shows the following during the test:

    [Nov 7 15:39] LTP: starting netns_comm_ip_ipv6_ioctl (netns_comm.sh ip ipv6 ioctl)
    [  +0.302401] IPv6: ADDRCONF(NETDEV_UP): veth0: link is not ready
    [  +0.048059] IPv6: ADDRCONF(NETDEV_CHANGE): veth0: link becomes ready

Signed-off-by: Dan Rue <dan.rue@linaro.org>
---

We've periodically hit this problem across many arm64 kernels and boards, and
it seems to be caused by "ping6" running before the virtual interface is
actually ready. "sleep 2" works around the issue and proves that it is a race
condition, but I would prefer something faster and deterministic. Please
suggest a better implementation.

Also, is it correct that "ifconfig veth0 up" returns before the interface is
actually ready?

See also this isolated test script:
https://gist.github.com/danrue/7b76bbcbc23a6296030b7295650b69f3

 testcases/kernel/containers/netns/netns_helper.sh | 1 +
 1 file changed, 1 insertion(+)

diff --git a/testcases/kernel/containers/netns/netns_helper.sh b/testcases/kernel/containers/netns/netns_helper.sh
index a95cdf206..99172c0c0 100755
--- a/testcases/kernel/containers/netns/netns_helper.sh
+++ b/testcases/kernel/containers/netns/netns_helper.sh
@@ -285,6 +285,7 @@ netns_set_ip()
 			tst_brkm TBROK "enabling veth1 device failed"
 		;;
 	esac
+	sleep 2
 }
 
 netns_ns_exec_cleanup()
-- 
2.13.6


             reply	other threads:[~2017-11-09 20:38 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-09 20:38 Dan Rue [this message]
2017-11-15 19:04 ` [LTP] [RFC] [PATCH] netns: Fix race in virtual interface bringup Dan Rue
2017-11-16  9:56   ` Nicolas Dichtel
2017-11-21 21:12     ` Dan Rue
2017-11-17  6:09 ` Li Wang
2017-11-17 12:08   ` Alexey Kodanev
2017-11-17 22:29     ` Dan Rue

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171109203841.28856-1-dan.rue@linaro.org \
    --to=dan.rue@linaro.org \
    --cc=ltp@lists.linux.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox