Skip to contentSkip to conversation

containers/netns/netns_sysfs.sh: add kernel version check

PATCH New Guangwen Feng 3 participants 9 messages Aug 30, 2016 – Nov 1, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 containers/netns/netns_sysfs.sh: add kernel version check

Sysfs is not mount namespace aware until applying following kernel patches in mainline kernel v2.6.35:

a1b3f59 net: Expose all network devices in a namespaces in sysfs 417daa1 hotplug: netns aware uevent_helper
d6523dd net/sysfs: Fix the bitrot in network device kobject namespace support 608b4b9 netns: Teach network device kobjects which namespace they are in

---
 testcases/kernel/containers/netns/netns_sysfs.sh | 5 +++++
 1 file changed, 5 insertions(+)
testcases/kernel/containers/netns/netns_sysfs.sh +5 -0
index 290cef8..b3a87ed 100644
@@ -29,6 +29,11 @@ DUMMYDEV_HOST="dummy_test0"
 DUMMYDEV="dummy_test1"
 . test.sh
 
+tst_kvercmp 2 6 35
+if [ $? -eq 0 ]; then
+	tst_brkm TCONF "sysfs is not mount namespace aware for kernels older than 2.6.35"
+fi
+
 setns_check
 if [ $? -eq 32 ]; then
 	tst_brkm TCONF "setns not supported"
Signature · 1 line
1.8.4.2
#1 lore raw

PATCH 1/1 containers/netns/netns_sysfs.sh: add kernel version check

Hi!

Ping, thanks!

Regards,
Guangwen Feng

Quoted 31 lines · Guangwen Feng

Sysfs is not mount namespace aware until applying following kernel patches in mainline kernel v2.6.35:

a1b3f59 net: Expose all network devices in a namespaces in sysfs 417daa1 hotplug: netns aware uevent_helper
d6523dd net/sysfs: Fix the bitrot in network device kobject namespace support 608b4b9 netns: Teach network device kobjects which namespace they are in

---
 testcases/kernel/containers/netns/netns_sysfs.sh | 5 +++++
 1 file changed, 5 insertions(+)
testcases/kernel/containers/netns/netns_sysfs.sh +5 -0
index 290cef8..b3a87ed 100644
@@ -29,6 +29,11 @@ DUMMYDEV_HOST="dummy_test0"
 DUMMYDEV="dummy_test1"
 . test.sh
 
+tst_kvercmp 2 6 35
+if [ $? -eq 0 ]; then
+	tst_brkm TCONF "sysfs is not mount namespace aware for kernels older than 2.6.35"
+fi
+
 setns_check
 if [ $? -eq 32 ]; then
 	tst_brkm TCONF "setns not supported"
#2 lore raw

PATCH 1/1 containers/netns/netns_sysfs.sh: add kernel version check

In reply to Guangwen Feng
Quoted 19 lines · Guangwen Feng

Sysfs is not mount namespace aware until applying following kernel patches in mainline kernel v2.6.35:

a1b3f59 net: Expose all network devices in a namespaces in sysfs 417daa1 hotplug: netns aware uevent_helper
d6523dd net/sysfs: Fix the bitrot in network device kobject namespace support 608b4b9 netns: Teach network device kobjects which namespace they are in

---
 testcases/kernel/containers/netns/netns_sysfs.sh | 5 +++++
 1 file changed, 5 insertions(+)
testcases/kernel/containers/netns/netns_sysfs.sh +0 -0
index 290cef8..b3a87ed 100644

testcases/kernel/containers/netns/netns_sysfs.sh DUMMYDEV_HOST="dummy_test0" · line 33

Quoted 5 lines
testcases/kernel/containers/netns/netns_sysfs.sh +2 -0
@@ -29,6 +29,11 @@ DUMMYDEV_HOST="dummy_test0"
 DUMMYDEV="dummy_test1"
 . test.sh
 
+tst_kvercmp 2 6 35
+if [ $? -eq 0 ]; then

Just out of curiosity - I see this used on more places, but can't understand why would you use this instead of simply

if tst_kvercmp 2 6 35; then

Any reason behind that? Am I missing a test writing rule?

Thanks.

Quoted 7 lines
testcases/kernel/containers/netns/netns_sysfs.sh +3 -0
+	tst_brkm TCONF "sysfs is not mount namespace aware for kernels older than 2.6.35"
+fi
+
 setns_check
 if [ $? -eq 32 ]; then
 	tst_brkm TCONF "setns not supported"
#3 lore raw

PATCH 1/1 containers/netns/netns_sysfs.sh: add kernel version check

Hi!

Quoted 23 lines · Jiri Jaburek
Quoted 22 lines · Guangwen Feng

Sysfs is not mount namespace aware until applying following kernel patches in mainline kernel v2.6.35:

a1b3f59 net: Expose all network devices in a namespaces in sysfs 417daa1 hotplug: netns aware uevent_helper
d6523dd net/sysfs: Fix the bitrot in network device kobject namespace support 608b4b9 netns: Teach network device kobjects which namespace they are in

---
 testcases/kernel/containers/netns/netns_sysfs.sh | 5 +++++
 1 file changed, 5 insertions(+)
testcases/kernel/containers/netns/netns_sysfs.sh +0 -0
index 290cef8..b3a87ed 100644
@@ -29,6 +29,11 @@ DUMMYDEV_HOST="dummy_test0"
 DUMMYDEV="dummy_test1"
 . test.sh
 
Quoted 7 lines

testcases/kernel/containers/netns/netns_sysfs.sh DUMMYDEV_HOST="dummy_test0" · line 33

Quoted 2 lines
testcases/kernel/containers/netns/netns_sysfs.sh +2 -0
+tst_kvercmp 2 6 35
+if [ $? -eq 0 ]; then

Just out of curiosity - I see this used on more places, but can't understand why would you use this instead of simply

if tst_kvercmp 2 6 35; then

Sure, this is simpler.
Thanks for reminding.

Quoted 2 lines

Any reason behind that? Am I missing a test writing rule?

There is no reason to me, I am just used to this.
Sorry, I am not sure whether there is a test writing rule about it either.

Best Regards,
Guangwen Feng

Quoted 10 lines

Thanks.

Quoted 7 lines
testcases/kernel/containers/netns/netns_sysfs.sh +3 -0
+	tst_brkm TCONF "sysfs is not mount namespace aware for kernels older than 2.6.35"
+fi
+
 setns_check
 if [ $? -eq 32 ]; then
 	tst_brkm TCONF "setns not supported"
#4 lore raw

PATCH 1/1 containers/netns/netns_sysfs.sh: add kernel version check

In reply to Jiri Jaburek

Hi!

Quoted 9 lines

testcases/kernel/containers/netns/netns_sysfs.sh DUMMYDEV_HOST="dummy_test0" · line 33

Quoted 2 lines
testcases/kernel/containers/netns/netns_sysfs.sh +2 -0
+tst_kvercmp 2 6 35
+if [ $? -eq 0 ]; then

Just out of curiosity - I see this used on more places, but can't understand why would you use this instead of simply

if tst_kvercmp 2 6 35; then

Any reason behind that? Am I missing a test writing rule?

The most probable reason would be that the tst_kvercmp actually returns ternary result (older than, equal or newer is mapped to 0, 1, 2) so if you want to anything else than "kernel is older" check you have to examine the $?.

Maybe I sould write a new tst_kvercmp for the new shell library that would work similar to the test shell buildin so that we can do something as:

if tst_kvercmp -nq "2.6.35" -o "3.8"; then

	...

fi

where the modifiers would stand for:

n newer
nq newer or equal
o older
oq older or equal

Signature · 2 lines
Cyril Hrubis
[email protected]
#5 lore raw

PATCH 1/1 containers/netns/netns_sysfs.sh: add kernel version check

Quoted 22 lines · Cyril Hrubis

Hi!

Quoted 9 lines

testcases/kernel/containers/netns/netns_sysfs.sh DUMMYDEV_HOST="dummy_test0" · line 33

Quoted 2 lines
testcases/kernel/containers/netns/netns_sysfs.sh +2 -0
+tst_kvercmp 2 6 35
+if [ $? -eq 0 ]; then

Just out of curiosity - I see this used on more places, but can't understand why would you use this instead of simply

if tst_kvercmp 2 6 35; then

Any reason behind that? Am I missing a test writing rule?

The most probable reason would be that the tst_kvercmp actually returns ternary result (older than, equal or newer is mapped to 0, 1, 2) so if you want to anything else than "kernel is older" check you have to examine the $?.

Maybe I sould write a new tst_kvercmp for the new shell library that would work similar to the test shell buildin so that we can do something as:

if tst_kvercmp -nq "2.6.35" -o "3.8"; then

	...
Quoted 8 lines

fi

where the modifiers would stand for:

n newer
nq newer or equal
o older
oq older or equal

If you're going to use letters for this, I suggest re-using what the 'test' a.k.a. '[' command has: -eq, -lt, -ge, -ne, etc.

If multiple options (like in your example) are supported, re-using the logic from 'test' could also be a good idea: -a (and), -o (or), although shell-based && or || might be more obvious.

if tst_kvercmp -ge "2.6.35" -a -lt "3.8"; then ...

if tst_kvercmp -ge "2.6.35" && tst_kvercmp -lt "3.8"; then ...

Quoted 1 line
#6 lore raw

PATCH 1/1 containers/netns/netns_sysfs.sh: add kernel version check

Hi!

Quoted 10 lines
Quoted 6 lines

where the modifiers would stand for:

n newer
nq newer or equal
o older
oq older or equal

If you're going to use letters for this, I suggest re-using what the 'test' a.k.a. '[' command has: -eq, -lt, -ge, -ne, etc.

Quoted 7 lines

If multiple options (like in your example) are supported, re-using the logic from 'test' could also be a good idea: -a (and), -o (or), although shell-based && or || might be more obvious.

if tst_kvercmp -ge "2.6.35" -a -lt "3.8"; then ...

if tst_kvercmp -ge "2.6.35" && tst_kvercmp -lt "3.8"; then ...

Sounds good. I will look into this.

Signature · 2 lines
Cyril Hrubis
[email protected]
#7 lore raw

PATCH 1/1 containers/netns/netns_sysfs.sh: add kernel version check

In reply to Jiri Jaburek

Hi!

Quoted 10 lines

If you're going to use letters for this, I suggest re-using what the 'test' a.k.a. '[' command has: -eq, -lt, -ge, -ne, etc.

If multiple options (like in your example) are supported, re-using the logic from 'test' could also be a good idea: -a (and), -o (or), although shell-based && or || might be more obvious.

if tst_kvercmp -ge "2.6.35" -a -lt "3.8"; then ...

if tst_kvercmp -ge "2.6.35" && tst_kvercmp -lt "3.8"; then ...

FYI:

https://github.com/metan-ucw/ltp/commit/f18331dd1e2ff0772c71abf4c444de6487dbce87

Signature · 2 lines
Cyril Hrubis
[email protected]