Patchwork [PATCHv2,01/21] bridge: give bridge name in per-bss configuration

login
register
mail settings
Submitter michael-dev@fami-braun.de
Date May 17, 2013, 7:30 a.m.
Message ID <c00e34da4193dc95a5792ff2597aec3bfc2003d9.1370512966.git.michael-dev@fami-braun.de>
Download mbox | patch
Permalink /patch/249360/
State Accepted
Commit 2aaeedfa07594ada51cb9672041679cfe58a2729
Headers show

Comments

michael-dev@fami-braun.de - May 17, 2013, 7:30 a.m.
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>
Jouni Malinen - June 25, 2013, 8:10 a.m.
On Fri, May 17, 2013 at 09:30:13AM +0200, Michael Braun wrote:

> 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.

Thanks, applied.

Patch

diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 231b0f9..cd9c7ca 100644
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -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));
diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf
index be15b86..d9f4c9d 100644
--- a/hostapd/hostapd.conf
+++ b/hostapd/hostapd.conf
@@ -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
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index 7c9ea90..5cb951f 100644
--- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h
@@ -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;
diff --git a/src/ap/vlan_init.c b/src/ap/vlan_init.c
index 6390e8b..e9ebcdd 100644
--- a/src/ap/vlan_init.c
+++ b/src/ap/vlan_init.c
@@ -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);