staging: wlags49_h2: Support standard WEXT events
authorDavid Kilroy <kilroyd@googlemail.com>
Mon, 19 Sep 2011 20:08:15 +0000 (21:08 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 20 Sep 2011 19:50:58 +0000 (12:50 -0700)
... instead of using IWEVCUSTOM. Use the defined events for
michael mic failure, association request info and association
response info.

Signed-off-by: David Kilroy <kilroyd@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/wlags49_h2/wl_wext.c

index fc453a8dac0a34963219fbc25e23fa96bff5a794..917c949fe591812faf619a574a9a950647c66fa6 100644 (file)
@@ -3805,9 +3805,9 @@ void wl_wext_event_expired_sta( struct net_device *dev )
  ******************************************************************************/
 void wl_wext_event_mic_failed( struct net_device *dev )
 {
-       char               msg[512];
        union iwreq_data   wrqu;
        struct wl_private *lp = wl_priv(dev);
+       struct iw_michaelmicfailure wxmic;
        int                key_idx;
        char              *addr1;
        char              *addr2;
@@ -3829,30 +3829,17 @@ void wl_wext_event_mic_failed( struct net_device *dev )
        DBG_PRINT( "MIC FAIL - KEY USED : %d, STATUS : 0x%04x\n", key_idx,
                           hdr->status );
 
-       memset( &wrqu, 0, sizeof( wrqu ));
-       memset( msg, 0, sizeof( msg ));
-
+       memset(&wrqu, 0, sizeof(wrqu));
+       memset(&wxmic, 0, sizeof(wxmic));
 
-       /* Because MIC failures are not part of the Wireless Extensions yet, they
-          must be passed as a string using an IWEVCUSTOM event. In order for the
-          event to be effective, the string format must be known by both the
-          driver and the supplicant. The following is the string format used by the
-          hostap project's WPA supplicant, and will be used here until the Wireless
-          Extensions interface adds this support:
+       wxmic.flags = key_idx & IW_MICFAILURE_KEY_ID;
+       wxmic.flags |= (addr1[0] & 1) ?
+               IW_MICFAILURE_GROUP : IW_MICFAILURE_PAIRWISE;
+       wxmic.src_addr.sa_family = ARPHRD_ETHER;
+       memcpy(wxmic.src_addr.sa_data, addr2, ETH_ALEN);
 
-          MLME-MICHAELMICFAILURE.indication(keyid=# broadcast/unicast addr=addr2)
-   */
-
-       /* NOTE: Format of MAC address (using colons to separate bytes) may cause
-                        a problem in future versions of the supplicant, if they ever
-                        actually parse these parameters */
-#if DBG
-       sprintf(msg, "MLME-MICHAELMICFAILURE.indication(keyid=%d %scast "
-                       "addr=%pM)", key_idx, addr1[0] & 0x01 ? "broad" : "uni",
-                       addr2);
-#endif
-       wrqu.data.length = strlen( msg );
-       wireless_send_event( dev, IWEVCUSTOM, &wrqu, msg );
+       wrqu.data.length = sizeof(wxmic);
+       wireless_send_event(dev, IWEVMICHAELMICFAILURE, &wrqu, (char *)&wxmic);
 
        return;
 } // wl_wext_event_mic_failed
@@ -3882,7 +3869,6 @@ void wl_wext_event_mic_failed( struct net_device *dev )
  ******************************************************************************/
 void wl_wext_event_assoc_ie( struct net_device *dev )
 {
-       char               msg[512];
        union iwreq_data   wrqu;
        struct wl_private *lp = wl_priv(dev);
        int status;
@@ -3893,7 +3879,6 @@ void wl_wext_event_assoc_ie( struct net_device *dev )
 
 
        memset( &wrqu, 0, sizeof( wrqu ));
-       memset( msg, 0, sizeof( msg ));
 
        /* Retrieve the Association Request IE */
        lp->ltvRecord.len = 45;
@@ -3906,21 +3891,16 @@ void wl_wext_event_assoc_ie( struct net_device *dev )
                memcpy( &data.rawData, &( lp->ltvRecord.u.u8[1] ), 88 );
                wpa_ie = wl_parse_wpa_ie( &data, &length );
 
-               /* Because this event (Association WPA-IE) is not part of the Wireless
-               Extensions yet, it must be passed as a string using an IWEVCUSTOM event.
-               In order for the event to be effective, the string format must be known
-               by both the driver and the supplicant. The following is the string format
-               used by the hostap project's WPA supplicant, and will be used here until
-               the Wireless Extensions interface adds this support:
-
-               ASSOCINFO(ReqIEs=WPA-IE RespIEs=WPA-IE)
-               */
-
                if( length != 0 )
                {
-                       sprintf( msg, "ASSOCINFO(ReqIEs=%s)", wl_print_wpa_ie( wpa_ie, length ));
-                       wrqu.data.length = strlen( msg );
-                       wireless_send_event( dev, IWEVCUSTOM, &wrqu, msg );
+                       wrqu.data.length = wpa_ie[1] + 2;
+                       wireless_send_event(dev, IWEVASSOCREQIE,
+                                           &wrqu, wpa_ie);
+
+                       /* This bit is a hack. We send the respie
+                        * event at the same time */
+                       wireless_send_event(dev, IWEVASSOCRESPIE,
+                                           &wrqu, wpa_ie);
                }
        }