<div dir="ltr"><br><div class="gmail_quote"><div dir="ltr"><div><div>========================================<br><br><br>Hello Everyone,<br>    I had an opportunity to make wpa_supplicant work under windows embedded compact. As part of it I'm<br>making an NDIS 5 driver work with wpa_supplicant.<br>   Following are some changes I'd to do to make for certain features to work.I hope they'll be needed by many others.<br><br>-------------------<br>[1] # NDIS_STATUS_MEDIA_SPECIFIC_INDICATION handling:<br>Issue: The data field under specific handlers are passed wrong pointers.<br>Fix  : Offset addition to current pointer.<br>File and Code changes:<br>/src/drivers/driver_ndis.c:1659<br>        case Ndis802_11StatusType_Authentication:<br>--              wpa_driver_ndis_event_auth(drv, data, data_len);<br>++        wpa_driver_ndis_event_auth(drv, (data+sizeof(NDIS_802_11_STATUS_INDICATION)), data_len);<br><br><br>/src/drivers/driver_ndis.c:1662<br>    case Ndis802_11StatusType_PMKID_CandidateList:<br>--             wpa_driver_ndis_event_pmkid(drv, data, data_len); <br>++             wpa_driver_ndis_event_pmkid(drv, (data+sizeof(NDIS_802_11_STATUS_INDICATION)), data_len);<br><br><a href="http://w1.fi/cgit/hostap/tree/src/drivers/driver_ndis.c?h=pending#n1659" target="_blank">http://w1.fi/cgit/hostap/tree/src/drivers/driver_ndis.c?h=pending#n1659</a><br><br>-------------------<br>[2] # Support for SSID SPECIFIC SCAN_REQUEST:<br>Issue: No support for SSID SPECIFIC SCAN_REQUEST<br>Fix  : Handle SSID request from UsrSpace and pass it to Miniport_Driver(i.e.Kernel space of Network device driver)<br>File and Code changes:<br>/src/drivers/driver_ndis.c:750<br>This entire function is recoded to dynamically allocate memory as needed and<br>send additional param(i.e. SSID and SSID_LENGTH) if found.<br><br>static int wpa_driver_ndis_scan_native80211(<br>    struct wpa_driver_ndis_data *drv,<br>    struct wpa_driver_scan_params *params)<br>{<br>    DOT11_SCAN_REQUEST_V2 *req;<br>    int res;<br>        int len = 0;<br><br>        len = sizeof(DOT11_SCAN_REQUEST_V2);<br>        if(params->ssids[0].ssid_len && (MAX_SSID_LEN >= params->ssids[0].ssid_len))<br>            len += sizeof(DOT11_SSID);//sizeof(int) + (params->ssids[0].ssid_len); <br><br>        wpa_printf(MSG_ERROR,"len:%d",len);<br>        if(NULL == (req = os_malloc(len))) <br>            return -1;<br><br>    os_memset(req, 0, len);<br>    req->dot11BSSType = dot11_BSS_type_any;<br>        if(!(params->ssids[0].ssid_len) || (MAX_SSID_LEN < params->ssids[0].ssid_len)){<br>    os_memset(req->dot11BSSID, 0xff, ETH_ALEN);<br>    req->dot11ScanType = dot11_scan_type_auto;<br>        } else {<br>        req->dot11ScanType = dot11_scan_type_active;<br>        req->udot11SSIDsOffset =  0;<br>        req->uNumOfdot11SSIDs = 1;<br>        *(unsigned long *)(req->ucBuffer) = params->ssids[0].ssid_len;<br>        os_memcpy((req->ucBuffer + sizeof(unsigned long)),params->ssids[0].ssid,params->ssids[0].ssid_len);<br>        }<br>        wpa_printf(MSG_ERROR,"ssid:%s",(req->ucBuffer + sizeof(unsigned long)));<br><br>    res = ndis_set_oid(drv, OID_DOT11_SCAN_REQUEST, (char *) req,len);<br>    eloop_cancel_timeout(wpa_driver_ndis_scan_timeout, drv, drv->ctx);<br>    eloop_register_timeout(7, 0, wpa_driver_ndis_scan_timeout, drv,<br>                   drv->ctx);<br>        if(req)<br>            os_free(req);<br>    return res;<br>}<br>-------------------<br><br></div>PS:This is just start of my work with (y)our wpa_supplicant and hope to <br></div>add many functionalities to it.<span class="HOEnZb"><font color="#888888"><br><div><div><br>-- <br>With gratitude,<br>Braghadeswaran T<br>Embedded System Technologist<br><br>========================================</div></div></font></span></div>
</div><br><br clear="all"><br>-- <br><div class="gmail_signature">With gratitude,<br>Braghadeswaran T<br>M.E.-Embedded System Technology</div>
</div>