Thread: RE: [Ndiswrapper-general] multiple wep keys - 802.1x working
Status: Beta
Brought to you by:
pgiri
From: Toby C. <tco...@di...> - 2004-05-12 23:19:05
|
Hi, further to my earlier post, ive now got 802.1x working with ndiswrapper on the intel 2100B card. Attached is a new patch to the current cvs version of ndiswrapper with all the changes. Any one who tries this let me know how it goes Toby Collett PS... something going wrong with my webmail client so here it is in the body Index: driver/iw_ndis.c =================================================================== RCS file: /cvsroot/ndiswrapper/ndiswrapper/driver/iw_ndis.c,v retrieving revision 1.5 diff -r1.5 iw_ndis.c 24a25,31 > //initial values for wep key array > struct wep_store wep_keys = {{{sizeof(struct wep_req),0,0}, > {sizeof(struct wep_req),1,0}, > {sizeof(struct wep_req),2,0}, > {sizeof(struct wep_req),3,0}}, > 0,NDIS_ENCODE_RESTRICTED}; > 440,441c447,448 < unsigned int res, written, needed, auth_mode; < struct wep_req req; --- > unsigned int res, written, needed;//, auth_mode; > //struct wep_req req; 443a451,454 > int auth_changed = 0; > int enc_on = 0; > if (wep_keys.keys[wep_keys.active_tx].keylength > 0) > enc_on = 1; 445,446c456,461 < if ((wrqu->data.flags & IW_ENCODE_NOKEY) || < (wrqu->data.flags & IW_ENCODE_DISABLED)) --- > if ((wrqu->data.flags & IW_ENCODE_INDEX) == 0) > keyindex = wep_keys.active_tx; > else > keyindex = (wrqu->data.flags & IW_ENCODE_INDEX) -1; > > if (keyindex < 0 || keyindex > NDIS_MAX_WEP_KEYS) 448,457c463,465 < keyindex = wrqu->data.flags & IW_ENCODE_INDEX; < keyindex |= (1 << 31); < res = set_int(handle, NDIS_OID_WEP_STATUS, < NDIS_ENCODE_DISABLED); < if (res) < { < printk(KERN_INFO "%s: disabling wep failed (%08X)\n", < dev->name, res); < return -EINVAL; < } --- > printk(KERN_INFO "%s: wep index out of range (%d)\n", > dev->name, keyindex); > return -EINVAL; 459c467,508 < else --- > > > /* we should have three cases... > * 1) operation on active key, sent to driver immediately > * 2) operation on inactive key, changes wep_keys structure but not driver > * 3) change active key, updates driver but details come from wep_keys structure > * > * The operation is split into two parts, the first updates the local key store > * While the second does the actual update to the ndis driver > */ > > // Update the local key store > if (wrqu->data.flags & IW_ENCODE_DISABLED) // turn off the key > { > wep_keys.keys[keyindex].keylength = 0; > auth_changed = 1; > } > else if (wrqu->data.flags & IW_ENCODE_RESTRICTED) // set restricted > { > if (wep_keys.auth_mode != NDIS_ENCODE_RESTRICTED) > auth_changed = 1; > wep_keys.auth_mode = NDIS_ENCODE_RESTRICTED; > } > else if (wrqu->data.flags & IW_ENCODE_OPEN) > { > if (wep_keys.auth_mode != NDIS_ENCODE_OPEN) > auth_changed = 1; > wep_keys.auth_mode = NDIS_ENCODE_OPEN; > } > > if (wrqu->data.length > 0) // set new key value > { > wep_keys.keys[keyindex].len = sizeof(wep_keys.keys[keyindex]); > wep_keys.keys[keyindex].keyindex = keyindex;//Setting ndis key other than 0 doesnt seem to work as expected > wep_keys.keys[keyindex].keyindex |= (1 << 31); > wep_keys.keys[keyindex].keylength = wrqu->data.length; > memcpy(wep_keys.keys[keyindex].keymaterial, extra, > wep_keys.keys[keyindex].keylength); > } > > // Now if needed update the ndis driver > if (keyindex == wep_keys.active_tx || wrqu->data.length == 0) 461,468c510,513 < if (wrqu->data.flags & IW_ENCODE_RESTRICTED) < auth_mode = NDIS_ENCODE_RESTRICTED; < else if (wrqu->data.flags & IW_ENCODE_OPEN) < auth_mode = NDIS_ENCODE_OPEN; < else < auth_mode = NDIS_ENCODE_RESTRICTED; < res = set_int(handle, NDIS_OID_AUTH_MODE, auth_mode); < if (res) --- > // set the active tx key > wep_keys.active_tx = keyindex; > > if (wep_keys.keys[keyindex].keylength == 0) // disable wep 470,472c515,522 < printk(KERN_INFO "%s: setting authentication mode failed (%08X)\n", < dev->name, res); < return -EINVAL; --- > res = set_int(handle, NDIS_OID_WEP_STATUS, > NDIS_ENCODE_DISABLED); > if (res) > { > printk(KERN_INFO "%s: disabling wep failed (%08X)\n", > dev->name, res); > return -EINVAL; > } 474,476c524 < < /* set key only if one is given */ < if (wrqu->data.length > 0) --- > else 478,485c526,540 < req.len = sizeof(req); < req.keyindex = wrqu->data.flags & IW_ENCODE_INDEX; < req.keyindex |= (1 << 31); < req.keylength = wrqu->data.length; < memcpy(req.keymaterial, extra, < req.keylength); < res = dosetinfo(handle, NDIS_OID_ADD_WEP, (char*)&req, < sizeof(req), &written, &needed); --- > // set authentication mode first (but only if its changed) > if (auth_changed) > { > res = set_int(handle, NDIS_OID_AUTH_MODE, wep_keys.auth_mode); > if (res) > { > printk(KERN_INFO "%s: setting authentication mode failed (%08X)\n", > dev->name, res); > return -EINVAL; > } > } > > /* Now we set the key data */ > res = dosetinfo(handle, NDIS_OID_ADD_WEP, (char*)&wep_keys.keys[keyindex], > sizeof(wep_keys.keys[keyindex]), &written, &needed); 493,494c548 < memcpy(&handle->wep, &req, sizeof(req)); < } --- > memcpy(&handle->wep, &wep_keys.keys[keyindex], sizeof(wep_keys.keys[keyindex])); 496,501c550,560 < res = set_int(handle, NDIS_OID_WEP_STATUS, NDIS_ENCODE_ENABLED); < if (res) < { < printk(KERN_INFO "%s: setting wep status failed (%08X)\n", < dev->name, res); < return -EINVAL; --- > // only set enc on if it isnt already > if (wep_keys.keys[wep_keys.active_tx].keylength > 0 && enc_on == 0) > { > res = set_int(handle, NDIS_OID_WEP_STATUS, NDIS_ENCODE_ENABLED); > if (res) > { > printk(KERN_INFO "%s: setting wep status failed (%08X)\n", > dev->name, res); > return -EINVAL; > } > } 503a563,577 > /* ndis drivers want essid to be set after setting wep */ > memset(&essid_wrqu, 0, sizeof(essid_wrqu)); > essid_wrqu.essid.length = handle->essid.length; > essid_wrqu.essid.flags = handle->essid.flags; > ndis_set_essid(dev, NULL, &essid_wrqu, handle->essid.name); > } > else > { > /* set the key as an inactive key */ > wep_keys.keys[keyindex].keyindex &= ~ (1 << 31); > res = dosetinfo(handle, NDIS_OID_ADD_WEP, (char*)&wep_keys.keys[keyindex], > sizeof(wep_keys.keys[keyindex]), &written, &needed); > wep_keys.keys[keyindex].keyindex |= (1 << 31); > > 506,510d579 < /* ndis drivers want essid to be set after setting wep */ < memset(&essid_wrqu, 0, sizeof(essid_wrqu)); < essid_wrqu.essid.length = handle->essid.length; < essid_wrqu.essid.flags = handle->essid.flags; < ndis_set_essid(dev, NULL, &essid_wrqu, handle->essid.name); 540c609 < int status, res; --- > int status, res, index; 544,565d612 < res = query_int(handle, NDIS_OID_WEP_STATUS, &status); < if (res) < { < printk(KERN_INFO "%s: getting wep status failed (%08X)\n", < dev->name, res); < return -EOPNOTSUPP; < } < < if (status == NDIS_ENCODE_ENABLED) < { < wrqu->data.flags |= IW_ENCODE_ENABLED; < wrqu->data.length = handle->wep.keylength; < memcpy(extra, handle->wep.keymaterial, handle->wep.keylength); < } < else if (status == NDIS_ENCODE_DISABLED) < { < wrqu->data.flags |= IW_ENCODE_DISABLED; < wrqu->data.length = handle->wep.keylength; < memcpy(extra, handle->wep.keymaterial, handle->wep.keylength); < } < else if (status == NDIS_ENCODE_NOKEY) < wrqu->data.flags |= IW_ENCODE_NOKEY; 567,568c614,615 < res = query_int(handle, NDIS_OID_AUTH_MODE, &status); < if (res) --- > // are we looking for the current key or the list of keys > if ((wrqu->data.flags & IW_ENCODE_INDEX) == 0) 570,573c617,641 < printk(KERN_INFO "%s: getting authentication mode failed (%08X)\n", < dev->name, res); < return -EOPNOTSUPP; < } --- > // current key, so query ndis for some details > res = query_int(handle, NDIS_OID_WEP_STATUS, &status); > if (res) > { > printk(KERN_INFO "%s: getting wep status failed (%08X)\n", > dev->name, res); > return -EOPNOTSUPP; > } > > if (status == NDIS_ENCODE_ENABLED ) > { > index = (wep_keys.active_tx + 1) & IW_ENCODE_INDEX; > wrqu->data.flags |= IW_ENCODE_ENABLED | index; > wrqu->data.length = wep_keys.keys[wep_keys.active_tx].keylength; > memcpy(extra, wep_keys.keys[wep_keys.active_tx].keymaterial, wep_keys.keys[wep_keys.active_tx].keylength); > } > else if (status == NDIS_ENCODE_DISABLED) > { > index = (wep_keys.active_tx + 1) & IW_ENCODE_INDEX; > wrqu->data.flags |= IW_ENCODE_DISABLED | index; > wrqu->data.length = wep_keys.keys[wep_keys.active_tx].keylength; > memcpy(extra, wep_keys.keys[wep_keys.active_tx].keymaterial, wep_keys.keys[wep_keys.active_tx].keylength); > } > else if (status == NDIS_ENCODE_NOKEY) > wrqu->data.flags |= IW_ENCODE_NOKEY; 575,580c643,649 < if (status == NDIS_ENCODE_OPEN) < wrqu->data.flags |= IW_ENCODE_OPEN; < else if (status == NDIS_ENCODE_RESTRICTED) < wrqu->data.flags |= IW_ENCODE_RESTRICTED; < else if (status == NDIS_ENCODE_OPEN_RESTRICTED) < wrqu->data.flags |= (IW_ENCODE_OPEN | IW_ENCODE_RESTRICTED); --- > res = query_int(handle, NDIS_OID_AUTH_MODE, &status); > if (res) > { > printk(KERN_INFO "%s: getting authentication mode failed (%08X)\n", > dev->name, res); > return -EOPNOTSUPP; > } 581a651,656 > if (status == NDIS_ENCODE_OPEN) > wrqu->data.flags |= IW_ENCODE_OPEN; > else if (status == NDIS_ENCODE_RESTRICTED) > wrqu->data.flags |= IW_ENCODE_RESTRICTED; > else if (status == NDIS_ENCODE_OPEN_RESTRICTED) > wrqu->data.flags |= (IW_ENCODE_OPEN | IW_ENCODE_RESTRICTED); 582a658,683 > } > else > { > index = (wrqu->data.flags & IW_ENCODE_INDEX) -1; > if (index < 0 || index >= NDIS_MAX_WEP_KEYS) > { > printk(KERN_INFO "%s: key index out of range (%d)\n", > dev->name, index); > return -EINVAL; > } > > // looking for details from an inactive key so we can just read > // from our existing structure > if (wep_keys.keys[index].keylength != 0) > { > wrqu->data.flags |= IW_ENCODE_ENABLED; > wrqu->data.length = wep_keys.keys[index].keylength; > memcpy(extra, wep_keys.keys[index].keymaterial, wep_keys.keys[index].keylength); > } > else > { > wrqu->data.flags |= IW_ENCODE_DISABLED; > wrqu->data.length = wep_keys.keys[index].keylength; > memcpy(extra, wep_keys.keys[index].keymaterial, wep_keys.keys[index].keylength); > } > } Index: driver/iw_ndis.h =================================================================== RCS file: /cvsroot/ndiswrapper/ndiswrapper/driver/iw_ndis.h,v retrieving revision 1.2 diff -r1.2 iw_ndis.h 25a26,36 > > #define NDIS_MAX_WEP_KEYS 4 > struct wep_store > { > struct wep_req keys[NDIS_MAX_WEP_KEYS]; > int active_tx; > int auth_mode; > }; > > extern struct wep_store wep_keys; > |
From: M.H. t. B. <m.h...@st...> - 2004-05-13 13:09:16
|
Toby, Thank you very much for this patch. Although I had to apply it manually (patch didn't like it, probably due to a mail transporter mangling it somehow...), it now works! Even better than in Win98 (I have dual boot), as Windows almost continuously hangs when Tx'ing. My setup: ndiswrapper 0.7+CVS (checked out yesterday) + your patch + extra 'return' statement in the Hangcheck-fuction. xsupplicant 1.0-pre2 (current CVS version does not start the auth-procedure) realtek rtl8180 cardbus (produced by Sweex) with winXP driver 1.68 from realtek's website linux kernel 2.6.5, custom build. TTLS-PAP authentication receive key at slot [1], transmit key at slot [4]. Without the hangcheck routine continuously resetting my card the system now runs OK. Thanks, Matthijs ten Berge On Thursday 13 May 2004 01:19, Toby Collett wrote: > Hi, > further to my earlier post, ive now got 802.1x working with ndiswrapper on > the intel 2100B card. > Attached is a new patch to the current cvs version of ndiswrapper with all > the changes. > > Any one who tries this let me know how it goes > > Toby Collett > > PS... something going wrong with my webmail client so here it is in the > body |
From: Terry S. <gal...@ma...> - 2004-05-16 09:49:01
|
Hi Toby, I'd love to try this patch out with Xsupplicant, but I'm not sure how to apply it to my source tree. Typically patches are created using at least "diff -r -c". I *think* the contextual output format is required for patch to be able to properly interpret the file, and it looks like you only used -r. Would it be possible for you to send me another patch with the -c option included? I'm not an expert at patching, so if anybody has any pointers here, please let me know. Thanks! - Terry On May 12, 2004, at 5:19 PM, Toby Collett wrote: > Hi, > further to my earlier post, ive now got 802.1x working with > ndiswrapper on the intel > 2100B card. > Attached is a new patch to the current cvs version of ndiswrapper with > all the changes. > > Any one who tries this let me know how it goes > > Toby Collett > > PS... something going wrong with my webmail client so here it is in > the body > > Index: driver/iw_ndis.c > =================================================================== > RCS file: /cvsroot/ndiswrapper/ndiswrapper/driver/iw_ndis.c,v > retrieving revision 1.5 > diff -r1.5 iw_ndis.c > 24a25,31 >> //initial values for wep key array >> struct wep_store wep_keys = {{{sizeof(struct wep_req),0,0}, >> {sizeof(struct wep_req),1,0}, >> {sizeof(struct wep_req),2,0}, >> {sizeof(struct wep_req),3,0}}, >> 0,NDIS_ENCODE_RESTRICTED}; >> > 440,441c447,448 > < unsigned int res, written, needed, auth_mode; > < struct wep_req req; > --- >> unsigned int res, written, needed;//, auth_mode; >> //struct wep_req req; > 443a451,454 >> int auth_changed = 0; >> int enc_on = 0; >> if (wep_keys.keys[wep_keys.active_tx].keylength > 0) >> enc_on = 1; > 445,446c456,461 > < if ((wrqu->data.flags & IW_ENCODE_NOKEY) || > < (wrqu->data.flags & IW_ENCODE_DISABLED)) > --- >> if ((wrqu->data.flags & IW_ENCODE_INDEX) == 0) >> keyindex = wep_keys.active_tx; >> else >> keyindex = (wrqu->data.flags & IW_ENCODE_INDEX) -1; >> >> if (keyindex < 0 || keyindex > NDIS_MAX_WEP_KEYS) > 448,457c463,465 > < keyindex = wrqu->data.flags & IW_ENCODE_INDEX; > < keyindex |= (1 << 31); > < res = set_int(handle, NDIS_OID_WEP_STATUS, > < NDIS_ENCODE_DISABLED); > < if (res) > < { > < printk(KERN_INFO "%s: disabling wep failed (%08X)\n", > < dev->name, res); > < return -EINVAL; > < } > --- >> printk(KERN_INFO "%s: wep index out of range (%d)\n", >> dev->name, keyindex); >> return -EINVAL; > 459c467,508 > < else > --- >> >> >> /* we should have three cases... >> * 1) operation on active key, sent to driver immediately >> * 2) operation on inactive key, changes wep_keys structure but not >> driver >> * 3) change active key, updates driver but details come from >> wep_keys structure >> * >> * The operation is split into two parts, the first updates the >> local key store >> * While the second does the actual update to the ndis driver >> */ >> >> // Update the local key store >> if (wrqu->data.flags & IW_ENCODE_DISABLED) // turn off the key >> { >> wep_keys.keys[keyindex].keylength = 0; >> auth_changed = 1; >> } >> else if (wrqu->data.flags & IW_ENCODE_RESTRICTED) // set restricted >> { >> if (wep_keys.auth_mode != NDIS_ENCODE_RESTRICTED) >> auth_changed = 1; >> wep_keys.auth_mode = NDIS_ENCODE_RESTRICTED; >> } >> else if (wrqu->data.flags & IW_ENCODE_OPEN) >> { >> if (wep_keys.auth_mode != NDIS_ENCODE_OPEN) >> auth_changed = 1; >> wep_keys.auth_mode = NDIS_ENCODE_OPEN; >> } >> >> if (wrqu->data.length > 0) // set new key value >> { >> wep_keys.keys[keyindex].len = sizeof(wep_keys.keys[keyindex]); >> wep_keys.keys[keyindex].keyindex = keyindex;//Setting ndis key >> other than 0 > doesnt seem to work as expected >> wep_keys.keys[keyindex].keyindex |= (1 << 31); >> wep_keys.keys[keyindex].keylength = wrqu->data.length; >> memcpy(wep_keys.keys[keyindex].keymaterial, extra, >> wep_keys.keys[keyindex].keylength); >> } >> >> // Now if needed update the ndis driver >> if (keyindex == wep_keys.active_tx || wrqu->data.length == 0) > 461,468c510,513 > < if (wrqu->data.flags & IW_ENCODE_RESTRICTED) > < auth_mode = NDIS_ENCODE_RESTRICTED; > < else if (wrqu->data.flags & IW_ENCODE_OPEN) > < auth_mode = NDIS_ENCODE_OPEN; > < else > < auth_mode = NDIS_ENCODE_RESTRICTED; > < res = set_int(handle, NDIS_OID_AUTH_MODE, auth_mode); > < if (res) > --- >> // set the active tx key >> wep_keys.active_tx = keyindex; >> >> if (wep_keys.keys[keyindex].keylength == 0) // disable wep > 470,472c515,522 > < printk(KERN_INFO "%s: setting authentication mode failed > (%08X)\n", > < dev->name, res); > < return -EINVAL; > --- >> res = set_int(handle, NDIS_OID_WEP_STATUS, >> NDIS_ENCODE_DISABLED); >> if (res) >> { >> printk(KERN_INFO "%s: disabling wep failed (%08X)\n", >> dev->name, res); >> return -EINVAL; >> } > 474,476c524 > < > < /* set key only if one is given */ > < if (wrqu->data.length > 0) > --- >> else > 478,485c526,540 > < req.len = sizeof(req); > < req.keyindex = wrqu->data.flags & IW_ENCODE_INDEX; > < req.keyindex |= (1 << 31); > < req.keylength = wrqu->data.length; > < memcpy(req.keymaterial, extra, > < req.keylength); > < res = dosetinfo(handle, NDIS_OID_ADD_WEP, (char*)&req, > < sizeof(req), &written, &needed); > --- >> // set authentication mode first (but only if its changed) >> if (auth_changed) >> { >> res = set_int(handle, NDIS_OID_AUTH_MODE, wep_keys.auth_mode); >> if (res) >> { >> printk(KERN_INFO "%s: setting authentication mode failed >> (%08X)\n", >> dev->name, res); >> return -EINVAL; >> } >> } >> >> /* Now we set the key data */ >> res = dosetinfo(handle, NDIS_OID_ADD_WEP, >> (char*)&wep_keys.keys[keyindex], >> sizeof(wep_keys.keys[keyindex]), &written, &needed); > 493,494c548 > < memcpy(&handle->wep, &req, sizeof(req)); > < } > --- >> memcpy(&handle->wep, &wep_keys.keys[keyindex], >> sizeof(wep_keys.keys[keyindex])); > 496,501c550,560 > < res = set_int(handle, NDIS_OID_WEP_STATUS, NDIS_ENCODE_ENABLED); > < if (res) > < { > < printk(KERN_INFO "%s: setting wep status failed (%08X)\n", > < dev->name, res); > < return -EINVAL; > --- >> // only set enc on if it isnt already >> if (wep_keys.keys[wep_keys.active_tx].keylength > 0 && enc_on == 0) >> { >> res = set_int(handle, NDIS_OID_WEP_STATUS, NDIS_ENCODE_ENABLED); >> if (res) >> { >> printk(KERN_INFO "%s: setting wep status failed (%08X)\n", >> dev->name, res); >> return -EINVAL; >> } >> } > 503a563,577 >> /* ndis drivers want essid to be set after setting wep */ >> memset(&essid_wrqu, 0, sizeof(essid_wrqu)); >> essid_wrqu.essid.length = handle->essid.length; >> essid_wrqu.essid.flags = handle->essid.flags; >> ndis_set_essid(dev, NULL, &essid_wrqu, handle->essid.name); >> } >> else >> { >> /* set the key as an inactive key */ >> wep_keys.keys[keyindex].keyindex &= ~ (1 << 31); >> res = dosetinfo(handle, NDIS_OID_ADD_WEP, >> (char*)&wep_keys.keys[keyindex], >> sizeof(wep_keys.keys[keyindex]), &written, &needed); >> wep_keys.keys[keyindex].keyindex |= (1 << 31); >> >> > 506,510d579 > < /* ndis drivers want essid to be set after setting wep */ > < memset(&essid_wrqu, 0, sizeof(essid_wrqu)); > < essid_wrqu.essid.length = handle->essid.length; > < essid_wrqu.essid.flags = handle->essid.flags; > < ndis_set_essid(dev, NULL, &essid_wrqu, handle->essid.name); > 540c609 > < int status, res; > --- >> int status, res, index; > 544,565d612 > < res = query_int(handle, NDIS_OID_WEP_STATUS, &status); > < if (res) > < { > < printk(KERN_INFO "%s: getting wep status failed (%08X)\n", > < dev->name, res); > < return -EOPNOTSUPP; > < } > < > < if (status == NDIS_ENCODE_ENABLED) > < { > < wrqu->data.flags |= IW_ENCODE_ENABLED; > < wrqu->data.length = handle->wep.keylength; > < memcpy(extra, handle->wep.keymaterial, handle->wep.keylength); > < } > < else if (status == NDIS_ENCODE_DISABLED) > < { > < wrqu->data.flags |= IW_ENCODE_DISABLED; > < wrqu->data.length = handle->wep.keylength; > < memcpy(extra, handle->wep.keymaterial, handle->wep.keylength); > < } > < else if (status == NDIS_ENCODE_NOKEY) > < wrqu->data.flags |= IW_ENCODE_NOKEY; > 567,568c614,615 > < res = query_int(handle, NDIS_OID_AUTH_MODE, &status); > < if (res) > --- >> // are we looking for the current key or the list of keys >> if ((wrqu->data.flags & IW_ENCODE_INDEX) == 0) > 570,573c617,641 > < printk(KERN_INFO "%s: getting authentication mode failed (%08X)\n", > < dev->name, res); > < return -EOPNOTSUPP; > < } > --- >> // current key, so query ndis for some details >> res = query_int(handle, NDIS_OID_WEP_STATUS, &status); >> if (res) >> { >> printk(KERN_INFO "%s: getting wep status failed (%08X)\n", >> dev->name, res); >> return -EOPNOTSUPP; >> } >> >> if (status == NDIS_ENCODE_ENABLED ) >> { >> index = (wep_keys.active_tx + 1) & IW_ENCODE_INDEX; >> wrqu->data.flags |= IW_ENCODE_ENABLED | index; >> wrqu->data.length = wep_keys.keys[wep_keys.active_tx].keylength; >> memcpy(extra, wep_keys.keys[wep_keys.active_tx].keymaterial, > wep_keys.keys[wep_keys.active_tx].keylength); >> } >> else if (status == NDIS_ENCODE_DISABLED) >> { >> index = (wep_keys.active_tx + 1) & IW_ENCODE_INDEX; >> wrqu->data.flags |= IW_ENCODE_DISABLED | index; >> wrqu->data.length = wep_keys.keys[wep_keys.active_tx].keylength; >> memcpy(extra, wep_keys.keys[wep_keys.active_tx].keymaterial, > wep_keys.keys[wep_keys.active_tx].keylength); >> } >> else if (status == NDIS_ENCODE_NOKEY) >> wrqu->data.flags |= IW_ENCODE_NOKEY; > 575,580c643,649 > < if (status == NDIS_ENCODE_OPEN) > < wrqu->data.flags |= IW_ENCODE_OPEN; > < else if (status == NDIS_ENCODE_RESTRICTED) > < wrqu->data.flags |= IW_ENCODE_RESTRICTED; > < else if (status == NDIS_ENCODE_OPEN_RESTRICTED) > < wrqu->data.flags |= (IW_ENCODE_OPEN | IW_ENCODE_RESTRICTED); > --- >> res = query_int(handle, NDIS_OID_AUTH_MODE, &status); >> if (res) >> { >> printk(KERN_INFO "%s: getting authentication mode failed (%08X)\n", >> dev->name, res); >> return -EOPNOTSUPP; >> } > 581a651,656 >> if (status == NDIS_ENCODE_OPEN) >> wrqu->data.flags |= IW_ENCODE_OPEN; >> else if (status == NDIS_ENCODE_RESTRICTED) >> wrqu->data.flags |= IW_ENCODE_RESTRICTED; >> else if (status == NDIS_ENCODE_OPEN_RESTRICTED) >> wrqu->data.flags |= (IW_ENCODE_OPEN | IW_ENCODE_RESTRICTED); > 582a658,683 >> } >> else >> { >> index = (wrqu->data.flags & IW_ENCODE_INDEX) -1; >> if (index < 0 || index >= NDIS_MAX_WEP_KEYS) >> { >> printk(KERN_INFO "%s: key index out of range (%d)\n", >> dev->name, index); >> return -EINVAL; >> } >> >> // looking for details from an inactive key so we can just read >> // from our existing structure >> if (wep_keys.keys[index].keylength != 0) >> { >> wrqu->data.flags |= IW_ENCODE_ENABLED; >> wrqu->data.length = wep_keys.keys[index].keylength; >> memcpy(extra, wep_keys.keys[index].keymaterial, >> wep_keys.keys[index].keylength); >> } >> else >> { >> wrqu->data.flags |= IW_ENCODE_DISABLED; >> wrqu->data.length = wep_keys.keys[index].keylength; >> memcpy(extra, wep_keys.keys[index].keymaterial, >> wep_keys.keys[index].keylength); >> } >> } > Index: driver/iw_ndis.h > =================================================================== > RCS file: /cvsroot/ndiswrapper/ndiswrapper/driver/iw_ndis.h,v > retrieving revision 1.2 > diff -r1.2 iw_ndis.h > 25a26,36 >> >> #define NDIS_MAX_WEP_KEYS 4 >> struct wep_store >> { >> struct wep_req keys[NDIS_MAX_WEP_KEYS]; >> int active_tx; >> int auth_mode; >> }; >> >> extern struct wep_store wep_keys; >> > > > > ------------------------------------------------------- > This SF.Net email is sponsored by: SourceForge.net Broadband > Sign-up now for SourceForge Broadband and get the fastest > 6.0/768 connection for only $19.95/mo for the first 3 months! > http://ads.osdn.com/?ad_id=2562&alloc_id=6184&op=click > _______________________________________________ > Open1x-xsupplicant mailing list > Ope...@li... > https://lists.sourceforge.net/lists/listinfo/open1x-xsupplicant |
From: M.H. t. B. <m.h...@st...> - 2004-05-17 08:37:05
|
In my case it was also impossible to apply the patch automatically, so I applied it manually :-) It's not that much work. I guess this patch was created with the diff-function of CVS. I don't have access to the sources at this moment/location, so I cannot diff my edited version with the original, I'm sorry. Maybe I can do that later this day or tomorrow, if not yet done by someone else by then. Matthijs ----- Original Message ----- From: "Terry Simons" <gal...@ma...> To: "Toby Collett" <tco...@di...> Cc: <ndi...@li...>; <ope...@li...> Sent: Sunday, May 16, 2004 11:48 AM Subject: Re: [Open1x-xsupplicant] RE: [Ndiswrapper-general] multiple wep keys - 802.1x working > Hi Toby, > > I'd love to try this patch out with Xsupplicant, but I'm not sure how > to apply it to my source tree. > > Typically patches are created using at least "diff -r -c". I *think* > the contextual output format is required for patch to be able to > properly interpret the file, and it looks like you only used -r. > > Would it be possible for you to send me another patch with the -c > option included? > > I'm not an expert at patching, so if anybody has any pointers here, > please let me know. > > Thanks! > > - Terry |