[LTP] [PATCH] containers/netns/netns_sysfs.sh:load dummy module before collecting sysfs interface
Jiri Jaburek
jjaburek@redhat.com
Fri Nov 6 18:16:23 CET 2015
On 10/30/2015 09:57 AM, shuang.qiu@oracle.com wrote:
> From: Shuang Qiu <shuang.qiu@oracle.com>
>
> If dummy is compiled as module in kernel,it is loaded dynamically when
> adding dummy device.And it will also create a default dummy interface.So
> the sysfs_after will have one more interface than sysfs_before which
> makes testcase #3 failed.Loading dummy module before collecting sysfs
> interface to workaround such issue.
I cannot reproduce this on any RHEL or Fedora system, but I can
reproduce it on Debian (Jessie). If we accounted only for the module
version of 'dummy', it could be countered by adding
options dummy numdummies=0
to any /etc/modprobe.d/* config (temporarily), however for the built-in
version of the module, such option would need to be passed via kernel
cmdline.
We could check [ -d /sys/module/dummy ] and if it exists, presume that
no extra setup is necessary, because
1) if it's a module, our creation of additional dummy interface won't
affect existing interfaces as dummy0 is created only on insmod
(dummy_init_one() is called during __init with numdummies=1)
2) if it's built in, well .. see (1)
otherwise we can try modprobing it and if it fails, end with CONF.
However - wouldn't it be simply easier to add an exception for dummy0
during the comparison check? The test operates with iface names other
than dummy0, so a possible namespace bug would be found anyway.
(See attached diff.)
However the (quite possibly) best solution would be a one which cleans
up after itself, so maybe the [ -d /sys/module/dummy ] solution with
explicit modprobe / modprobe -r would work better.
Your choice. :)
Jiri
> Signed-off-by: Shuang Qiu <shuang.qiu@oracle.com>
> ---
> testcases/kernel/containers/netns/netns_sysfs.sh | 4 ++++
> 1 files changed, 4 insertions(+), 0 deletions(-)
>
> diff --git a/testcases/kernel/containers/netns/netns_sysfs.sh b/testcases/kernel/containers/netns/netns_sysfs.sh
> index 7dea52b..b5791bd 100755
> --- a/testcases/kernel/containers/netns/netns_sysfs.sh
> +++ b/testcases/kernel/containers/netns/netns_sysfs.sh
> @@ -47,6 +47,10 @@ if [ $? -eq 1 ]; then
> tst_brkm TBROK "unable to create a new network namespace"
> fi
> TST_CLEANUP=cleanup
> +
> +#Load dummy module before collecting sysfs interface
> +lsmod | grep dummy || modprobe dummy
> +[ $? -eq 0 ] || tst_brkm TBROK "failed to load dummy module"
> ls /sys/class/net >sysfs_before
>
> ns_exec $NS_HANDLE $NS_TYPE mount --make-rprivate /sys
>
-------------- next part --------------
diff --git a/testcases/kernel/containers/netns/netns_sysfs.sh b/testcases/kernel/containers/netns/netns_sysfs.sh
index 7dea52b..e725a50 100755
--- a/testcases/kernel/containers/netns/netns_sysfs.sh
+++ b/testcases/kernel/containers/netns/netns_sysfs.sh
@@ -47,7 +47,10 @@ if [ $? -eq 1 ]; then
tst_brkm TBROK "unable to create a new network namespace"
fi
TST_CLEANUP=cleanup
-ls /sys/class/net >sysfs_before
+
+# exclude dummy0 from comparison as it gets automatically created by the
+# dummy device driver upon insmod/modprobe (during ip link add)
+ls /sys/class/net | grep -v dummy0 >sysfs_before
ns_exec $NS_HANDLE $NS_TYPE mount --make-rprivate /sys
ns_exec $NS_HANDLE $NS_TYPE ip link add $DUMMYDEV type dummy || \
@@ -84,7 +87,7 @@ fi
# TEST CASE #3
-ls /sys/class/net >sysfs_after
+ls /sys/class/net | grep -v dummy0 >sysfs_after
diff sysfs_before sysfs_after
if [ $? -eq 0 ]; then
tst_resm TPASS "sysfs not affected by a separate namespace"
More information about the Ltp
mailing list