|
@@ -7877,6 +7877,33 @@ static u32 sta_flags_nl80211(int flags)
|
|
|
}
|
|
|
|
|
|
|
|
|
+#ifdef CONFIG_MESH
|
|
|
+static u32 sta_plink_state_nl80211(enum mesh_plink_state state)
|
|
|
+{
|
|
|
+ switch (state) {
|
|
|
+ case PLINK_LISTEN:
|
|
|
+ return NL80211_PLINK_LISTEN;
|
|
|
+ case PLINK_OPEN_SENT:
|
|
|
+ return NL80211_PLINK_OPN_SNT;
|
|
|
+ case PLINK_OPEN_RCVD:
|
|
|
+ return NL80211_PLINK_OPN_RCVD;
|
|
|
+ case PLINK_CNF_RCVD:
|
|
|
+ return NL80211_PLINK_CNF_RCVD;
|
|
|
+ case PLINK_ESTAB:
|
|
|
+ return NL80211_PLINK_ESTAB;
|
|
|
+ case PLINK_HOLDING:
|
|
|
+ return NL80211_PLINK_HOLDING;
|
|
|
+ case PLINK_BLOCKED:
|
|
|
+ return NL80211_PLINK_BLOCKED;
|
|
|
+ default:
|
|
|
+ wpa_printf(MSG_ERROR, "nl80211: Invalid mesh plink state %d",
|
|
|
+ state);
|
|
|
+ }
|
|
|
+ return -1;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
static int wpa_driver_nl80211_sta_add(void *priv,
|
|
|
struct hostapd_sta_add_params *params)
|
|
|
{
|
|
@@ -7983,6 +8010,12 @@ static int wpa_driver_nl80211_sta_add(void *priv,
|
|
|
upd.set, upd.mask);
|
|
|
NLA_PUT(msg, NL80211_ATTR_STA_FLAGS2, sizeof(upd), &upd);
|
|
|
|
|
|
+#ifdef CONFIG_MESH
|
|
|
+ if (params->plink_state)
|
|
|
+ NLA_PUT_U8(msg, NL80211_ATTR_STA_PLINK_STATE,
|
|
|
+ sta_plink_state_nl80211(params->plink_state));
|
|
|
+#endif
|
|
|
+
|
|
|
if (params->flags & WPA_STA_WMM) {
|
|
|
struct nlattr *wme = nla_nest_start(msg, NL80211_ATTR_STA_WME);
|
|
|
|