|
@@ -4977,7 +4977,8 @@ static int i802_set_sta_vlan(void *priv, const u8 *addr,
|
|
|
}
|
|
|
|
|
|
|
|
|
-static int i802_set_wds_sta(void *priv, const u8 *addr, int aid, int val)
|
|
|
+static int i802_set_wds_sta(void *priv, const u8 *addr, int aid, int val,
|
|
|
+ const char *bridge_ifname)
|
|
|
{
|
|
|
struct i802_bss *bss = priv;
|
|
|
struct wpa_driver_nl80211_data *drv = bss->drv;
|
|
@@ -4987,10 +4988,16 @@ static int i802_set_wds_sta(void *priv, const u8 *addr, int aid, int val)
|
|
|
wpa_printf(MSG_DEBUG, "nl80211: Set WDS STA addr=" MACSTR
|
|
|
" aid=%d val=%d name=%s", MAC2STR(addr), aid, val, name);
|
|
|
if (val) {
|
|
|
- if (!if_nametoindex(name) &&
|
|
|
- nl80211_create_iface(drv, name, NL80211_IFTYPE_AP_VLAN,
|
|
|
- NULL, 1) < 0)
|
|
|
- return -1;
|
|
|
+ if (!if_nametoindex(name)) {
|
|
|
+ if (nl80211_create_iface(drv, name,
|
|
|
+ NL80211_IFTYPE_AP_VLAN,
|
|
|
+ NULL, 1) < 0)
|
|
|
+ return -1;
|
|
|
+ if (bridge_ifname &&
|
|
|
+ linux_br_add_if(drv->ioctl_sock, bridge_ifname,
|
|
|
+ name) < 0)
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
linux_set_iface_flags(drv->ioctl_sock, name, 1);
|
|
|
return i802_set_sta_vlan(priv, addr, name, 0);
|
|
|
} else {
|