[PATCH] hostapd: make driver_devicescape set multi-BSS interfaces up

Johannes Berg johannes
Tue Nov 27 12:42:14 PST 2007


It seems that I forgot this when converting the driver to nl80211, it
should of course set IFF_UP on all secondary BSS interfaces as well.

Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
---
I'm not 100% sure this is the right thing to do.

 hostapd/driver_devicescape.c |   18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

--- hostap.orig/hostapd/driver_devicescape.c	2007-11-27 21:36:52.000000000 +0100
+++ hostap/hostapd/driver_devicescape.c	2007-11-27 21:39:12.000000000 +0100
@@ -77,7 +77,8 @@ static int i802_sta_set_flags(void *priv
 			      int total_flags, int flags_or, int flags_and);
 
 
-static int hostapd_set_iface_flags(struct i802_driver_data *drv, int dev_up)
+static int hostapd_set_iface_flags(struct i802_driver_data *drv,
+				   const char *ifname, int dev_up)
 {
 	struct ifreq ifr;
 
@@ -85,7 +86,7 @@ static int hostapd_set_iface_flags(struc
 		return -1;
 
 	memset(&ifr, 0, sizeof(ifr));
-	os_strlcpy(ifr.ifr_name, drv->iface, IFNAMSIZ);
+	os_strlcpy(ifr.ifr_name, ifname, IFNAMSIZ);
 
 	if (ioctl(drv->ioctl_sock, SIOCGIFFLAGS, &ifr) != 0) {
 		perror("ioctl[SIOCGIFFLAGS]");
@@ -854,8 +855,15 @@ static int nl80211_create_iface(struct i
 
 static int i802_bss_add(void *priv, const char *ifname, const u8 *bssid)
 {
-	if (nl80211_create_iface(priv, ifname, NL80211_IFTYPE_AP, bssid) < 0)
+	int ifidx;
+
+	ifidx = nl80211_create_iface(priv, ifname, NL80211_IFTYPE_AP, bssid);
+	if (ifidx < 0)
 		return -1;
+	if (hostapd_set_iface_flags(priv, ifname, 1)) {
+		nl80211_remove_iface(priv, ifidx);
+		return -1;
+	}
 	return 0;
 }
 
@@ -1561,7 +1569,7 @@ static int i802_init_sockets(struct i802
 		perror("ioctl[SIOCSIWMODE]");
 	}
 
-	if (hostapd_set_iface_flags(drv, 1))
+	if (hostapd_set_iface_flags(drv, drv->iface, 1))
 		return -1;
 
 	memset(&addr, 0, sizeof(addr));
@@ -1950,7 +1958,7 @@ static void i802_deinit(void *priv)
 	/* Disable management interface */
 	(void) hostap_ioctl_prism2param(drv, PRISM2_PARAM_MGMT_IF, 0);
 
-	(void) hostapd_set_iface_flags(drv, 0);
+	(void) hostapd_set_iface_flags(drv, drv->iface, 0);
 
 	if (drv->sock >= 0) {
 		eloop_unregister_read_sock(drv->sock);






More information about the Hostap mailing list