|
@@ -2584,6 +2584,30 @@ static void nl80211_cqm_event(struct wpa_driver_nl80211_data *drv,
|
|
|
}
|
|
|
|
|
|
|
|
|
+static void nl80211_new_peer_candidate(struct wpa_driver_nl80211_data *drv,
|
|
|
+ struct nlattr **tb)
|
|
|
+{
|
|
|
+ const u8 *addr;
|
|
|
+ union wpa_event_data data;
|
|
|
+
|
|
|
+ if (drv->nlmode != NL80211_IFTYPE_MESH_POINT)
|
|
|
+ return;
|
|
|
+
|
|
|
+ if (!tb[NL80211_ATTR_MAC] || !tb[NL80211_ATTR_IE])
|
|
|
+ return;
|
|
|
+
|
|
|
+ addr = nla_data(tb[NL80211_ATTR_MAC]);
|
|
|
+ wpa_printf(MSG_DEBUG, "nl80211: New peer candidate" MACSTR,
|
|
|
+ MAC2STR(addr));
|
|
|
+
|
|
|
+ os_memset(&data, 0, sizeof(data));
|
|
|
+ data.mesh_peer.peer = addr;
|
|
|
+ data.mesh_peer.ies = nla_data(tb[NL80211_ATTR_IE]);
|
|
|
+ data.mesh_peer.ie_len = nla_len(tb[NL80211_ATTR_IE]);
|
|
|
+ wpa_supplicant_event(drv->ctx, EVENT_NEW_PEER_CANDIDATE, &data);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
static void nl80211_new_station_event(struct wpa_driver_nl80211_data *drv,
|
|
|
struct nlattr **tb)
|
|
|
{
|
|
@@ -3238,6 +3262,9 @@ static void do_process_drv_event(struct i802_bss *bss, int cmd,
|
|
|
case NL80211_CMD_VENDOR:
|
|
|
nl80211_vendor_event(drv, tb);
|
|
|
break;
|
|
|
+ case NL80211_CMD_NEW_PEER_CANDIDATE:
|
|
|
+ nl80211_new_peer_candidate(drv, tb);
|
|
|
+ break;
|
|
|
default:
|
|
|
wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Ignored unknown event "
|
|
|
"(cmd=%d)", cmd);
|