return ret;
 }
 
-void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface)
+void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface,
+                                    enum batadv_hard_if_cleanup autodel)
 {
        struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface);
        struct batadv_hard_iface *primary_if = NULL;
        dev_put(hard_iface->soft_iface);
 
        /* nobody uses this interface anymore */
-       if (!bat_priv->num_ifaces)
+       if (!bat_priv->num_ifaces && autodel == BATADV_IF_CLEANUP_AUTO)
                batadv_softif_destroy(hard_iface->soft_iface);
 
        hard_iface->soft_iface = NULL;
 
        /* first deactivate interface */
        if (hard_iface->if_status != BATADV_IF_NOT_IN_USE)
-               batadv_hardif_disable_interface(hard_iface);
+               batadv_hardif_disable_interface(hard_iface,
+                                               BATADV_IF_CLEANUP_AUTO);
 
        if (hard_iface->if_status != BATADV_IF_NOT_IN_USE)
                return;
 
        BATADV_IF_I_WANT_YOU,
 };
 
+/**
+ * enum batadv_hard_if_cleanup - Cleanup modi for soft_iface after slave removal
+ * @BATADV_IF_CLEANUP_KEEP: Don't automatically delete soft-interface
+ * @BATADV_IF_CLEANUP_AUTO: Delete soft-interface after last slave was removed
+ */
+enum batadv_hard_if_cleanup {
+       BATADV_IF_CLEANUP_KEEP,
+       BATADV_IF_CLEANUP_AUTO,
+};
+
 extern struct notifier_block batadv_hard_if_notifier;
 
 struct batadv_hard_iface*
 batadv_hardif_get_by_netdev(const struct net_device *net_dev);
 int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface,
                                   const char *iface_name);
-void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface);
+void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface,
+                                    enum batadv_hard_if_cleanup autodel);
 void batadv_hardif_remove_interfaces(void);
 int batadv_hardif_min_mtu(struct net_device *soft_iface);
 void batadv_update_min_mtu(struct net_device *soft_iface);
 
        }
 
        if (status_tmp == BATADV_IF_NOT_IN_USE) {
-               batadv_hardif_disable_interface(hard_iface);
+               batadv_hardif_disable_interface(hard_iface,
+                                               BATADV_IF_CLEANUP_AUTO);
                goto unlock;
        }
 
        /* if the interface already is in use */
        if (hard_iface->if_status != BATADV_IF_NOT_IN_USE)
-               batadv_hardif_disable_interface(hard_iface);
+               batadv_hardif_disable_interface(hard_iface,
+                                               BATADV_IF_CLEANUP_AUTO);
 
        ret = batadv_hardif_enable_interface(hard_iface, buff);