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
next 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