[PATCH 1/2] supplicant: do not change iftype for static AP interface

Avinash Patil avinashapatil at gmail.com
Tue Aug 5 03:19:46 EDT 2014


Some devices have limitations which do not allow changing virtual interface
mode from AP to station or vice versa. To work around this, check if such
AP interface is not dynamic. If such an interface is enumarated,
just set ifmode to AP & avoid setting nlmode to default station mode.

Signed-off-by: Avinash Patil <avinashapatil at gmail.com>
---
 src/drivers/driver_nl80211.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index aa2cd04..0c8717f 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -238,6 +238,7 @@ struct i802_bss {
        int freq;
        int bandwidth;
        int if_dynamic;
+       u8 static_ap;

        void *ctx;
        struct nl_handle *nl_preq, *nl_mgmt;
@@ -4752,6 +4753,9 @@ wpa_driver_nl80211_finish_drv_init(struct
wpa_driver_nl80211_data *drv,
        bss->if_dynamic = bss->if_dynamic || drv->global->if_add_wdevid_set;
        drv->global->if_add_wdevid_set = 0;

+       if (!bss->if_dynamic && nl80211_get_ifmode(bss) == NL80211_IFTYPE_AP)
+               bss->static_ap = 1;
+
        if (wpa_driver_nl80211_capa(drv))
                return -1;

@@ -4767,7 +4771,7 @@ wpa_driver_nl80211_finish_drv_init(struct
wpa_driver_nl80211_data *drv,
        if (first && nl80211_get_ifmode(bss) == NL80211_IFTYPE_AP)
                drv->start_mode_ap = 1;

-       if (drv->hostapd)
+       if (drv->hostapd || (bss->static_ap))
                nlmode = NL80211_IFTYPE_AP;
        else if (bss->if_dynamic)
                nlmode = nl80211_get_ifmode(bss);
-- 
1.8.1.4


More information about the HostAP mailing list