mirror of https://gitee.com/openkylin/linux.git
mwifiex: toggle carrier state in start_ap/stop_ap.
In uap mode the carrier is not enabled until after the first STA joins. The carrier triggers the bridge to start its state machine, and if STP is enabled, it takes 4 seconds as it transitions from disabled to forwarding. During this time the bridge drops all traffic, and the EAPOL handshake times out after 3 seconds, preventing stations from joining. Follow the logic used in mac80211 and start the carrier in start_ap and disable it in stop_ap. This has a nice benefit of allowing the first station connection time to be reduced by up to 75% when STP is in use. Signed-off-by: Martin Faltesek <mfaltesek@google.com> Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
072255241d
commit
0117e78aec
|
@ -1821,6 +1821,10 @@ static int mwifiex_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (netif_carrier_ok(priv->netdev))
|
||||||
|
netif_carrier_off(priv->netdev);
|
||||||
|
mwifiex_stop_net_dev_queue(priv->netdev, priv->adapter);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1925,6 +1929,10 @@ static int mwifiex_cfg80211_start_ap(struct wiphy *wiphy,
|
||||||
if (mwifiex_set_mgmt_ies(priv, ¶ms->beacon))
|
if (mwifiex_set_mgmt_ies(priv, ¶ms->beacon))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
if (!netif_carrier_ok(priv->netdev))
|
||||||
|
netif_carrier_on(priv->netdev);
|
||||||
|
mwifiex_wake_up_net_dev_queue(priv->netdev, priv->adapter);
|
||||||
|
|
||||||
memcpy(&priv->bss_cfg, bss_cfg, sizeof(priv->bss_cfg));
|
memcpy(&priv->bss_cfg, bss_cfg, sizeof(priv->bss_cfg));
|
||||||
kfree(bss_cfg);
|
kfree(bss_cfg);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -179,19 +179,12 @@ int mwifiex_process_uap_event(struct mwifiex_private *priv)
|
||||||
case EVENT_UAP_BSS_IDLE:
|
case EVENT_UAP_BSS_IDLE:
|
||||||
priv->media_connected = false;
|
priv->media_connected = false;
|
||||||
priv->port_open = false;
|
priv->port_open = false;
|
||||||
if (netif_carrier_ok(priv->netdev))
|
|
||||||
netif_carrier_off(priv->netdev);
|
|
||||||
mwifiex_stop_net_dev_queue(priv->netdev, adapter);
|
|
||||||
|
|
||||||
mwifiex_clean_txrx(priv);
|
mwifiex_clean_txrx(priv);
|
||||||
mwifiex_del_all_sta_list(priv);
|
mwifiex_del_all_sta_list(priv);
|
||||||
break;
|
break;
|
||||||
case EVENT_UAP_BSS_ACTIVE:
|
case EVENT_UAP_BSS_ACTIVE:
|
||||||
priv->media_connected = true;
|
priv->media_connected = true;
|
||||||
priv->port_open = true;
|
priv->port_open = true;
|
||||||
if (!netif_carrier_ok(priv->netdev))
|
|
||||||
netif_carrier_on(priv->netdev);
|
|
||||||
mwifiex_wake_up_net_dev_queue(priv->netdev, adapter);
|
|
||||||
break;
|
break;
|
||||||
case EVENT_UAP_BSS_START:
|
case EVENT_UAP_BSS_START:
|
||||||
mwifiex_dbg(adapter, EVENT,
|
mwifiex_dbg(adapter, EVENT,
|
||||||
|
|
Loading…
Reference in New Issue