[LTP] [PATCH v2] netns/netns_helper.sh: Fix failure when testing ipv6 in netns
Xiao Yang
yangx.jy@cn.fujitsu.com
Fri Jan 5 03:55:56 CET 2018
Hi Alexey,
Could you help me review the v2 patch?
Thanks a lot. :-)
Thanks,
Xiao Yang
On 2017/12/21 11:22, xiao yang wrote:
> When testing ipv6 in network namespace, we got the following
> error on some distros(e.g. RHEL7.5Alpha):
> ----------------------------------------------------------------------------------
> connect: Cannot assign requested address
> netns_comm_ns_exec_ipv6_netlink 1 TFAIL: configuration and communication over veth0
> connect: Cannot assign requested address
> netns_comm_ns_exec_ipv6_netlink 2 TFAIL: configuration and communication over veth1
> -----------------------------------------------------------------------------------
>
> On a kernel with commits 35e015e1f577 and a2d3f3e33853, the global
> 'accept_dad' flag is taken into account and set to 1 by default.
> If global flag is non-zero, DAD will be enabled and trigger the
> failure on a given interface. I think it should not be considered
> as a bug, and try to fix it by setting all.accept_dad to 0 manually.
>
> The default value of all.accept_dad has been set to 0 in kernel:
> '094009531612("ipv6: set all.accept_dad to 0 by default")'
>
> Signed-off-by: xiao yang <yangx.jy@cn.fujitsu.com>
> ---
> testcases/kernel/containers/netns/netns_helper.sh | 54 +++++++++++++++++++----
> 1 file changed, 46 insertions(+), 8 deletions(-)
>
> diff --git a/testcases/kernel/containers/netns/netns_helper.sh b/testcases/kernel/containers/netns/netns_helper.sh
> index a95cdf2..8f7d3b5 100755
> --- a/testcases/kernel/containers/netns/netns_helper.sh
> +++ b/testcases/kernel/containers/netns/netns_helper.sh
> @@ -78,6 +78,42 @@ tst_check_iproute()
> fi
> }
>
> +check_ipv6_tentative()
> +{
> + local info=$($NS_EXEC $NS_HANDLE0 $NS_TYPE ip -6 address show tentative 2>&1)
> + local enabled=$($NS_EXEC $NS_HANDLE0 $NS_TYPE cat /proc/sys/net/ipv6/conf/all/accept_dad)
> +
> + # With commits 35e015e1f577 and a2d3f3e33853, the global 'accept_dad'
> + # flag is also taken into account (default value is 1). If either
> + # global or per-interface flag is non-zero, DAD will be enabled on a
> + # given interface. With commit 094009531612, all.accept_dad is set to
> + # 0 by default.
> + if [ -n "$info" -a $enabled -eq 1 ]; then
> + tst_resm TINFO "all.accept_dad was taken into account and set to 1 by default, and set it to 0 manually"
> + echo 0 | $NS_EXEC $NS_HANDLE0 $NS_TYPE \
> + tee /proc/sys/net/ipv6/conf/all/accept_dad >/dev/null
> + echo 0 | $NS_EXEC $NS_HANDLE1 $NS_TYPE \
> + tee /proc/sys/net/ipv6/conf/all/accept_dad >/dev/null
> +
> + case $USE_IFCONFIG in
> + 1)
> + $NS_EXEC $NS_HANDLE0 $NS_TYPE ifconfig veth0 down || \
> + tst_brkm TBROK "disabling veth0 device failed"
> + $NS_EXEC $NS_HANDLE1 $NS_TYPE ifconfig veth1 down || \
> + tst_brkm TBROK "disabling veth1 device failed"
> + ;;
> + *)
> + $NS_EXEC $NS_HANDLE0 $NS_TYPE ip link set veth0 down || \
> + tst_brkm TBROK "disabling veth0 device failed"
> + $NS_EXEC $NS_HANDLE1 $NS_TYPE ip link set veth1 down || \
> + tst_brkm TBROK "disabling veth1 device failed"
> + ;;
> + esac
> +
> + netns_set_ip
> + fi
> +}
> +
> ##
> # Sets up global variables which can be used in test cases (documented above),
> # creates two network namespaces and a pair of virtual ethernet devices, each
> @@ -174,6 +210,8 @@ netns_setup()
> esac
>
> netns_set_ip
> +
> + [ "$2" = "ipv6" ] && check_ipv6_tentative
> }
>
> ##
> @@ -265,23 +303,23 @@ netns_set_ip()
>
> case $USE_IFCONFIG in
> 1)
> - $NS_EXEC $NS_HANDLE0 $NS_TYPE ifconfig veth0 $IFCONF_IN6_ARG $IP0/$NETMASK ||
> + $NS_EXEC $NS_HANDLE0 $NS_TYPE ifconfig veth0 $IFCONF_IN6_ARG $IP0/$NETMASK || \
> tst_brkm TBROK "adding address to veth0 failed"
> - $NS_EXEC $NS_HANDLE1 $NS_TYPE ifconfig veth1 $IFCONF_IN6_ARG $IP1/$NETMASK ||
> + $NS_EXEC $NS_HANDLE1 $NS_TYPE ifconfig veth1 $IFCONF_IN6_ARG $IP1/$NETMASK || \
> tst_brkm TBROK "adding address to veth1 failed"
> - $NS_EXEC $NS_HANDLE0 $NS_TYPE ifconfig veth0 up ||
> + $NS_EXEC $NS_HANDLE0 $NS_TYPE ifconfig veth0 up || \
> tst_brkm TBROK "enabling veth0 device failed"
> - $NS_EXEC $NS_HANDLE1 $NS_TYPE ifconfig veth1 up ||
> + $NS_EXEC $NS_HANDLE1 $NS_TYPE ifconfig veth1 up || \
> tst_brkm TBROK "enabling veth1 device failed"
> ;;
> *)
> - $NS_EXEC $NS_HANDLE0 $NS_TYPE ip address add $IP0/$NETMASK dev veth0 ||
> + $NS_EXEC $NS_HANDLE0 $NS_TYPE ip address add $IP0/$NETMASK dev veth0 || \
> tst_brkm TBROK "adding address to veth0 failed"
> - $NS_EXEC $NS_HANDLE1 $NS_TYPE ip address add $IP1/$NETMASK dev veth1 ||
> + $NS_EXEC $NS_HANDLE1 $NS_TYPE ip address add $IP1/$NETMASK dev veth1 || \
> tst_brkm TBROK "adding address to veth1 failed"
> - $NS_EXEC $NS_HANDLE0 $NS_TYPE ip link set veth0 up ||
> + $NS_EXEC $NS_HANDLE0 $NS_TYPE ip link set veth0 up || \
> tst_brkm TBROK "enabling veth0 device failed"
> - $NS_EXEC $NS_HANDLE1 $NS_TYPE ip link set veth1 up ||
> + $NS_EXEC $NS_HANDLE1 $NS_TYPE ip link set veth1 up || \
> tst_brkm TBROK "enabling veth1 device failed"
> ;;
> esac
More information about the ltp
mailing list