aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/mlme.c
diff options
context:
space:
mode:
authorJouni Malinen <jouni.malinen@atheros.com>2009-03-19 07:39:21 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-03-27 20:13:02 -0400
commit6039f6d23fe792d615da5449e9fa1c6b43caacf6 (patch)
treeaf94d1ad78ce1e82d76328ea9a67b351f0a9174b /net/mac80211/mlme.c
parenta299542e97ec1939fdca7db6d3d82c0aa9bf8b9a (diff)
nl80211: Event notifications for MLME events
Add new nl80211 event notifications (and a new multicast group, "mlme") for informing user space about received and processed Authentication, (Re)Association Response, Deauthentication, and Disassociation frames in station and IBSS modes (i.e., MLME SAP interface primitives MLME-AUTHENTICATE.confirm, MLME-ASSOCIATE.confirm, MLME-REASSOCIATE.confirm, MLME-DEAUTHENTICATE.indicate, and MLME-DISASSOCIATE.indication). The event data is encapsulated as the 802.11 management frame since we already have the frame in that format and it includes all the needed information. This is the initial step in providing MLME SAP interface for authentication and association with nl80211. In other words, kernel code will act as the MLME and a user space application can control it as the SME. Signed-off-by: Jouni Malinen <j@w1.fi> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r--net/mac80211/mlme.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 1f49b63d8dd2..6dc7a61bc18b 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1085,11 +1085,13 @@ static void ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata,
1085 case WLAN_AUTH_OPEN: 1085 case WLAN_AUTH_OPEN:
1086 case WLAN_AUTH_LEAP: 1086 case WLAN_AUTH_LEAP:
1087 ieee80211_auth_completed(sdata); 1087 ieee80211_auth_completed(sdata);
1088 cfg80211_send_rx_auth(sdata->dev, (u8 *) mgmt, len);
1088 break; 1089 break;
1089 case WLAN_AUTH_SHARED_KEY: 1090 case WLAN_AUTH_SHARED_KEY:
1090 if (ifmgd->auth_transaction == 4) 1091 if (ifmgd->auth_transaction == 4) {
1091 ieee80211_auth_completed(sdata); 1092 ieee80211_auth_completed(sdata);
1092 else 1093 cfg80211_send_rx_auth(sdata->dev, (u8 *) mgmt, len);
1094 } else
1093 ieee80211_auth_challenge(sdata, mgmt, len); 1095 ieee80211_auth_challenge(sdata, mgmt, len);
1094 break; 1096 break;
1095 } 1097 }
@@ -1125,6 +1127,7 @@ static void ieee80211_rx_mgmt_deauth(struct ieee80211_sub_if_data *sdata,
1125 1127
1126 ieee80211_set_disassoc(sdata, true, false, 0); 1128 ieee80211_set_disassoc(sdata, true, false, 0);
1127 ifmgd->flags &= ~IEEE80211_STA_AUTHENTICATED; 1129 ifmgd->flags &= ~IEEE80211_STA_AUTHENTICATED;
1130 cfg80211_send_rx_deauth(sdata->dev, (u8 *) mgmt, len);
1128} 1131}
1129 1132
1130 1133
@@ -1154,6 +1157,7 @@ static void ieee80211_rx_mgmt_disassoc(struct ieee80211_sub_if_data *sdata,
1154 } 1157 }
1155 1158
1156 ieee80211_set_disassoc(sdata, false, false, reason_code); 1159 ieee80211_set_disassoc(sdata, false, false, reason_code);
1160 cfg80211_send_rx_disassoc(sdata->dev, (u8 *) mgmt, len);
1157} 1161}
1158 1162
1159 1163
@@ -1370,6 +1374,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
1370 ieee80211_set_associated(sdata, changed); 1374 ieee80211_set_associated(sdata, changed);
1371 1375
1372 ieee80211_associated(sdata); 1376 ieee80211_associated(sdata);
1377 cfg80211_send_rx_assoc(sdata->dev, (u8 *) mgmt, len);
1373} 1378}
1374 1379
1375 1380