|
@@ -99,6 +99,32 @@ u8 lbs_data_rate_to_fw_index(u32 rate)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+int lbs_set_iface_type(struct lbs_private *priv, enum nl80211_iftype type)
|
|
|
+{
|
|
|
+ int ret = 0;
|
|
|
+
|
|
|
+ switch (type) {
|
|
|
+ case NL80211_IFTYPE_MONITOR:
|
|
|
+ ret = lbs_set_monitor_mode(priv, 1);
|
|
|
+ break;
|
|
|
+ case NL80211_IFTYPE_STATION:
|
|
|
+ if (priv->wdev->iftype == NL80211_IFTYPE_MONITOR)
|
|
|
+ ret = lbs_set_monitor_mode(priv, 0);
|
|
|
+ if (!ret)
|
|
|
+ ret = lbs_set_snmp_mib(priv, SNMP_MIB_OID_BSS_TYPE, 1);
|
|
|
+ break;
|
|
|
+ case NL80211_IFTYPE_ADHOC:
|
|
|
+ if (priv->wdev->iftype == NL80211_IFTYPE_MONITOR)
|
|
|
+ ret = lbs_set_monitor_mode(priv, 0);
|
|
|
+ if (!ret)
|
|
|
+ ret = lbs_set_snmp_mib(priv, SNMP_MIB_OID_BSS_TYPE, 2);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ ret = -ENOTSUPP;
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
int lbs_start_iface(struct lbs_private *priv)
|
|
|
{
|
|
|
struct cmd_ds_802_11_mac_address cmd;
|
|
@@ -120,6 +146,12 @@ int lbs_start_iface(struct lbs_private *priv)
|
|
|
goto err;
|
|
|
}
|
|
|
|
|
|
+ ret = lbs_set_iface_type(priv, priv->wdev->iftype);
|
|
|
+ if (ret) {
|
|
|
+ lbs_deb_net("set iface type failed\n");
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
+
|
|
|
lbs_update_channel(priv);
|
|
|
|
|
|
priv->iface_running = true;
|