]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/ipv6/ip6_tunnel.c
[IPV6] IP6TUNNEL: Delete all tunnel device when unloading module.
[karo-tx-linux.git] / net / ipv6 / ip6_tunnel.c
index 84d7ebdb9d211103c678579009d6c24dc905379f..c8d4160385f6bac7221e161ab1698f77bbbf9732 100644 (file)
@@ -1149,6 +1149,20 @@ fail:
        return err;
 }
 
+static void __exit ip6ip6_destroy_tunnels(void)
+{
+       int h;
+       struct ip6_tnl *t;
+
+       for (h = 0; h < HASH_SIZE; h++) {
+               while ((t = tnls_r_l[h]) != NULL)
+                       unregister_netdevice(t->dev);
+       }
+
+       t = tnls_wc[0];
+       unregister_netdevice(t->dev);
+}
+
 /**
  * ip6_tunnel_cleanup - free resources and unregister protocol
  **/
@@ -1158,7 +1172,9 @@ static void __exit ip6_tunnel_cleanup(void)
        if (xfrm6_tunnel_deregister(&ip6ip6_handler))
                printk(KERN_INFO "ip6ip6 close: can't deregister tunnel\n");
 
-       unregister_netdev(ip6ip6_fb_tnl_dev);
+       rtnl_lock();
+       ip6ip6_destroy_tunnels();
+       rtnl_unlock();
 }
 
 module_init(ip6_tunnel_init);