Re: [Madwifi-devel] sta association problem with latest revision (r1518)
Status: Beta
Brought to you by:
otaku
From: Daniel W. <dy...@gm...> - 2006-04-23 16:35:13
|
here's a new patch, to try, instead of allowing the setparam to not run int= o the state machine (i think that's whats happening previously), we should make it scan for the AP again, and associate that way. Care to try and test it ? Index: net80211/ieee80211_wireless.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- net80211/ieee80211_wireless.c (revision 1521) +++ net80211/ieee80211_wireless.c (working copy) @@ -371,7 +371,7 @@ retv =3D ifmedia_ioctl(vap->iv_dev, &ifr, &vap->iv_media, SIOCSIFMEDIA= ); if (retv =3D=3D ENETRESET) - retv =3D IS_UP_AUTO(vap) ? ieee80211_open(vap->iv_dev) : 0; + retv =3D IS_UP_AUTO(vap) ? -ieee80211_init(vap->iv_dev, 0) : 0; return -retv; } @@ -2320,12 +2321,12 @@ */ if (!vap->iv_xrvap || (vap->iv_xrvap && !(vap->iv_flags & IEEE80211_F_XR))) { if (retv =3D=3D ENETRESET) - retv =3D IS_UP_AUTO(vap) ? ieee80211_open(vap->iv_dev) : 0; + retv =3D IS_UP_AUTO(vap) ? -ieee80211_init(vap->iv_dev, RESCAN= ) : 0; } #else /* XXX should any of these cause a rescan? */ if (retv =3D=3D ENETRESET) - retv =3D IS_UP_AUTO(vap) ? ieee80211_open(vap->iv_dev) : 0; + retv =3D IS_UP_AUTO(vap) ? -ieee80211_init(vap->iv_dev, RESCAN) : = 0; #endif return -retv; } Index: net80211/ieee80211_proto.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- net80211/ieee80211_proto.c (revision 1521) +++ net80211/ieee80211_proto.c (working copy) @@ -967,9 +967,9 @@ * real soon now, so we don't muck with the state * machine. */ - if (forcescan) + if (vap->iv_state !=3D IEEE80211_S_RUN || forcescan) ieee80211_new_state(vap, IEEE80211_S_SCAN, 0); - else if (vap->iv_state =3D=3D IEEE80211_S_RUN) + else ieee80211_new_state(vap, IEEE80211_S_ASSOC, 1); } else { /* On 4/20/06, Brian Eaton <eat...@gm...> wrote: > > On 4/20/06, Daniel Wu <dy...@gm...> wrote: > > Here's a patch to try, I'm not sure if it'll work, but i think it > should. > > Try two scenarios. > > One with ifconfig down first then set the setparam stuff. > > > > The other is to have ifconfig up then set the setparam stuff. > > I gave that patch a spin. It worked OK for the manual configuration > case, but when I tried to use it with wpa_supplicant my machine hung. > The problem didn't look like a kernel panic, there were no blinking > caps lock lights. I think the driver and wpa_supplicant may have > gotten themselves into a nice tight loop somehow. > > I tried r1518 without the patch, and that worked fine for the > wpa_supplicant case, but was broken for the manual configuration case. > So the good news is that you aren't the only one who can see this > problem. I'll meditate on the mysteries of the state machine a bit > this weekend, to see if I can understand what is going on here. > > At this point I'm leaning towards breaking ieee80211_ioctl_setparam up > into some smaller pieces and avoiding the call to ieee80211_open. If > nothing else I think it will make the state machine transitions easier > to debug. > > Regards, > Brian > |