|
@@ -67,6 +67,7 @@ static char *event_descriptions[IEEE80211SOFTMAC_EVENT_LAST+1] = {
|
|
|
"authenticating failed",
|
|
|
"authenticating timed out",
|
|
|
"associating failed because no suitable network was found",
|
|
|
+ "disassociated",
|
|
|
};
|
|
|
|
|
|
|
|
@@ -128,13 +129,36 @@ void
|
|
|
ieee80211softmac_call_events_locked(struct ieee80211softmac_device *mac, int event, void *event_ctx)
|
|
|
{
|
|
|
struct ieee80211softmac_event *eventptr, *tmp;
|
|
|
- union iwreq_data wrqu;
|
|
|
- char *msg;
|
|
|
+ struct ieee80211softmac_network *network;
|
|
|
|
|
|
if (event >= 0) {
|
|
|
- msg = event_descriptions[event];
|
|
|
- wrqu.data.length = strlen(msg);
|
|
|
- wireless_send_event(mac->dev, IWEVCUSTOM, &wrqu, msg);
|
|
|
+ union iwreq_data wrqu;
|
|
|
+ int we_event;
|
|
|
+ char *msg = NULL;
|
|
|
+
|
|
|
+ switch(event) {
|
|
|
+ case IEEE80211SOFTMAC_EVENT_ASSOCIATED:
|
|
|
+ network = (struct ieee80211softmac_network *)event_ctx;
|
|
|
+ wrqu.data.length = 0;
|
|
|
+ wrqu.data.flags = 0;
|
|
|
+ memcpy(wrqu.ap_addr.sa_data, &network->bssid[0], ETH_ALEN);
|
|
|
+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
|
|
|
+ we_event = SIOCGIWAP;
|
|
|
+ break;
|
|
|
+ case IEEE80211SOFTMAC_EVENT_DISASSOCIATED:
|
|
|
+ wrqu.data.length = 0;
|
|
|
+ wrqu.data.flags = 0;
|
|
|
+ memset(&wrqu, '\0', sizeof (union iwreq_data));
|
|
|
+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
|
|
|
+ we_event = SIOCGIWAP;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ msg = event_descriptions[event];
|
|
|
+ wrqu.data.length = strlen(msg);
|
|
|
+ we_event = IWEVCUSTOM;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ wireless_send_event(mac->dev, we_event, &wrqu, msg);
|
|
|
}
|
|
|
|
|
|
if (!list_empty(&mac->events))
|