bridge: Give bridge name in per-bss configuration
authorMichael Braun <michael-dev@fami-braun.de>
Tue, 25 Jun 2013 08:09:01 +0000 (11:09 +0300)
committerJouni Malinen <j@w1.fi>
Tue, 25 Jun 2013 08:09:01 +0000 (11:09 +0300)
Currently, when different BSS using different tagged vlan
interfaces, they are forced to share the bridge brvlan#,
which is not desirable.

This patch fixes this by making the bridge name configurable.

Signed-hostap: Michael Braun <michael-dev@fami-braun.de>

hostapd/config_file.c
hostapd/hostapd.conf
src/ap/ap_config.h
src/ap/vlan_init.c

index 231b0f9..cd9c7ca 100644 (file)
@@ -1689,6 +1689,9 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                                   sizeof(conf->bss[0].iface));
                } else if (os_strcmp(buf, "bridge") == 0) {
                        os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
+               } else if (os_strcmp(buf, "vlan_bridge") == 0) {
+                       os_strlcpy(bss->vlan_bridge, pos,
+                                  sizeof(bss->vlan_bridge));
                } else if (os_strcmp(buf, "wds_bridge") == 0) {
                        os_strlcpy(bss->wds_bridge, pos,
                                   sizeof(bss->wds_bridge));
index be15b86..df83092 100644 (file)
@@ -844,6 +844,10 @@ own_ip_addr=127.0.0.1
 # to the bridge.
 #vlan_tagged_interface=eth0
 
+# Bridge (prefix) to add the wifi and the tagged interface to. This gets the
+# VLAN ID appended.
+#vlan_bridge=brvlan
+
 # When hostapd creates a VLAN interface on vlan_tagged_interfaces, it needs
 # to know how to name it.
 # 0 = vlan<XXX>, e.g., vlan1
index 7c9ea90..5cb951f 100644 (file)
@@ -180,6 +180,7 @@ struct hostapd_nai_realm_data {
 struct hostapd_bss_config {
        char iface[IFNAMSIZ + 1];
        char bridge[IFNAMSIZ + 1];
+       char vlan_bridge[IFNAMSIZ + 1];
        char wds_bridge[IFNAMSIZ + 1];
 
        enum hostapd_logger_level logger_syslog_level, logger_stdout_level;
index 6390e8b..e9ebcdd 100644 (file)
@@ -493,8 +493,14 @@ static void vlan_newlink(char *ifname, struct hostapd_data *hapd)
        while (vlan) {
                if (os_strcmp(ifname, vlan->ifname) == 0) {
 
-                       os_snprintf(br_name, sizeof(br_name), "brvlan%d",
-                                   vlan->vlan_id);
+                       if (hapd->conf->vlan_bridge[0]) {
+                               os_snprintf(br_name, sizeof(br_name), "%s%d",
+                                           hapd->conf->vlan_bridge,
+                                           vlan->vlan_id);
+                       } else {
+                               os_snprintf(br_name, sizeof(br_name),
+                                           "brvlan%d", vlan->vlan_id);
+                       }
 
                        if (!br_addbr(br_name))
                                vlan->clean |= DVLAN_CLEAN_BR;
@@ -550,8 +556,14 @@ static void vlan_dellink(char *ifname, struct hostapd_data *hapd)
 
        while (vlan) {
                if (os_strcmp(ifname, vlan->ifname) == 0) {
-                       os_snprintf(br_name, sizeof(br_name), "brvlan%d",
-                                   vlan->vlan_id);
+                       if (hapd->conf->vlan_bridge[0]) {
+                               os_snprintf(br_name, sizeof(br_name), "%s%d",
+                                           hapd->conf->vlan_bridge,
+                                           vlan->vlan_id);
+                       } else {
+                               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);