testsuite: remove gre kmods if the test loads them

The tunnel test leaves behind link devices created by the GRE kernel
modules:

$ ip -br link
...
gre0@NONE    DOWN 0.0.0.0 <NOARP>
gretap0@NONE DOWN 00:00:00:00:00:00 <BROADCAST,MULTICAST>
erspan0@NONE DOWN 00:00:00:00:00:00 <BROADCAST,MULTICAST>
ip6tnl0@NONE DOWN :: <NOARP>
ip6gre0@NONE DOWN 00:00:00:00:

$ lsmod | grep gre
ip6_gre      40960  0
ip6_tunnel   40960  1 ip6_gre
ip_gre       32768  0
ip_tunnel    24576  1 ip_gre
gre          16384  2 ip6_gre,ip_gre

Check beforehand if the gre kernel module is loaded, and if not unload
them all at the end of the test. This should avoid causing problems if
a user is already using GRE for other purposes.

Signed-off-by: Luca Boccassi <bluca@debian.org>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Tested-by: Petr Vorel <pvorel@suse.cz>
Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
This commit is contained in:
Luca Boccassi 2018-12-16 20:55:40 +00:00 committed by Stephen Hemminger
parent eaed928b64
commit 85bcb524a2
1 changed files with 13 additions and 0 deletions

View File

@ -3,6 +3,16 @@
. lib/generic.sh
TUNNEL_NAME="tunnel_test_ip"
KMODS="ip6_gre ip6_tunnel ip_gre ip_tunnel gre"
# unload kernel modules to remove dummy interfaces only if they were not in use beforehand
kmods_remove=
# note that checkbashism reports command -v, but dash supports it and it's POSIX 2008 compliant
if command -v lsmod >/dev/null 2>&1 && command -v rmmod >/dev/null 2>&1; then
for i in $KMODS; do
lsmod | grep -q "^$i" || kmods_remove="$kmods_remove $i";
done
fi
ts_log "[Testing add/del tunnels]"
@ -12,3 +22,6 @@ ts_ip "$0" "Del GRE tunnel over IPv4" tunnel del $TUNNEL_NAME
ts_ip "$0" "Add GRE tunnel over IPv6" tunnel add name $TUNNEL_NAME mode ip6gre local dead:beef::1 remote dead:beef::2
ts_ip "$0" "Del GRE tunnel over IPv6" tunnel del $TUNNEL_NAME
for mod in $kmods_remove; do
sudo rmmod "$mod"
done