cfg80211/nl80211: Send AssocReq IEs to user space in AP mode
authorJouni Malinen <jouni@qca.qualcomm.com>
Mon, 8 Aug 2011 09:11:52 +0000 (12:11 +0300)
committerDmitry Shmidt <dimitrysh@google.com>
Tue, 24 Jan 2012 23:30:44 +0000 (15:30 -0800)
When user space SME/MLME (e.g., hostapd) is not used in AP mode, the
IEs from the (Re)Association Request frame that was processed in
firmware need to be made available for user space (e.g., RSN IE for
hostapd). Allow this to be done with cfg80211_new_sta().

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
include/net/cfg80211.h
net/wireless/nl80211.c

index 396e8fc8910e5901a8ae7e3b0c976fb3435b7e2b..69448296e4ac73bd13873b7fecdf51a69d27cbbf 100644 (file)
@@ -536,6 +536,11 @@ struct sta_bss_parameters {
  *     This number should increase every time the list of stations
  *     changes, i.e. when a station is added or removed, so that
  *     userspace can tell whether it got a consistent snapshot.
+ * @assoc_req_ies: IEs from (Re)Association Request.
+ *     This is used only when in AP mode with drivers that do not use
+ *     user space MLME/SME implementation. The information is provided for
+ *     the cfg80211_new_sta() calls to notify user space of the IEs.
+ * @assoc_req_ies_len: Length of assoc_req_ies buffer in octets.
  */
 struct station_info {
        u32 filled;
@@ -558,6 +563,9 @@ struct station_info {
        struct sta_bss_parameters bss_param;
 
        int generation;
+
+       const u8 *assoc_req_ies;
+       size_t assoc_req_ies_len;
 };
 
 /**
index 1ac9443b5265c11f1a22af4cac1e720688ba8d1a..863e502f05872e6df4c57387f525ec6b84a20534 100644 (file)
@@ -2209,6 +2209,10 @@ static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
        }
        nla_nest_end(msg, sinfoattr);
 
+       if (sinfo->assoc_req_ies)
+               NLA_PUT(msg, NL80211_ATTR_IE, sinfo->assoc_req_ies_len,
+                       sinfo->assoc_req_ies);
+
        return genlmsg_end(msg, hdr);
 
  nla_put_failure: