VLAN: Fix bridge interface clean up for no tagged_interface case
authorJouni Malinen <j@w1.fi>
Thu, 15 Apr 2010 22:13:46 +0000 (01:13 +0300)
committerJouni Malinen <j@w1.fi>
Thu, 15 Apr 2010 22:13:46 +0000 (01:13 +0300)
src/ap/vlan_init.c

index d222608..e197933 100644 (file)
@@ -526,7 +526,6 @@ static void vlan_dellink(char *ifname, struct hostapd_data *hapd)
        char br_name[IFNAMSIZ];
        struct hostapd_vlan *first, *prev, *vlan = hapd->conf->vlan;
        char *tagged_interface = hapd->conf->ssid.vlan_tagged_interface;
-       int numports;
 
        wpa_printf(MSG_DEBUG, "VLAN: vlan_dellink(%s)", ifname);
 
@@ -537,19 +536,24 @@ static void vlan_dellink(char *ifname, struct hostapd_data *hapd)
                        os_snprintf(br_name, sizeof(br_name), "brvlan%d",
                                    vlan->vlan_id);
 
+                       if (vlan->clean & DVLAN_CLEAN_WLAN_PORT)
+                               br_delif(br_name, vlan->ifname);
+
                        if (tagged_interface) {
                                os_snprintf(vlan_ifname, sizeof(vlan_ifname),
                                            "vlan%d", vlan->vlan_id);
-
-                               numports = br_getnumports(br_name);
-                               if (numports == 1) {
+                               if (vlan->clean & DVLAN_CLEAN_VLAN_PORT)
                                        br_delif(br_name, vlan_ifname);
+                               ifconfig_down(vlan_ifname);
 
+                               if (vlan->clean & DVLAN_CLEAN_VLAN)
                                        vlan_rem(vlan_ifname);
+                       }
 
-                                       ifconfig_down(br_name);
-                                       br_delbr(br_name);
-                               }
+                       if ((vlan->clean & DVLAN_CLEAN_BR) &&
+                           br_getnumports(br_name) == 0) {
+                               ifconfig_down(br_name);
+                               br_delbr(br_name);
                        }
 
                        if (vlan == first) {