[Madwifi-cvs] madwifi/net80211 ieee80211_proto.c,1.7,1.8
Status: Beta
Brought to you by:
otaku
From: Sam L. <sam...@us...> - 2004-12-29 04:30:18
|
Update of /cvsroot/madwifi/madwifi/net80211 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16393 Modified Files: ieee80211_proto.c Log Message: changed fixed rate handling: require the fixed rate be in the negotiated rate set instead of using it to constrain the rate set Index: ieee80211_proto.c =================================================================== RCS file: /cvsroot/madwifi/madwifi/net80211/ieee80211_proto.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** ieee80211_proto.c 19 Aug 2004 01:12:05 -0000 1.7 --- ieee80211_proto.c 29 Dec 2004 04:30:08 -0000 1.8 *************** *** 344,353 **** #define RV(v) ((v) & IEEE80211_RATE_VAL) int i, j, ignore, error; ! int okrate, badrate; struct ieee80211_rateset *srs, *nrs; u_int8_t r; error = 0; ! okrate = badrate = 0; srs = &ic->ic_sup_rates[ieee80211_chan2mode(ic, ni->ni_chan)]; nrs = &ni->ni_rates; --- 344,359 ---- #define RV(v) ((v) & IEEE80211_RATE_VAL) int i, j, ignore, error; ! int okrate, badrate, fixedrate; struct ieee80211_rateset *srs, *nrs; u_int8_t r; + /* + * If the fixed rate check was requested but no + * fixed has been defined then just remove it. + */ + if ((flags & IEEE80211_F_DOFRATE) && ic->ic_fixed_rate < 0) + flags &= ~IEEE80211_F_DOFRATE; error = 0; ! okrate = badrate = fixedrate = 0; srs = &ic->ic_sup_rates[ieee80211_chan2mode(ic, ni->ni_chan)]; nrs = &ni->ni_rates; *************** *** 370,384 **** if (flags & IEEE80211_F_DOFRATE) { /* ! * Apply fixed rate constraint. Note that we do ! * not apply the constraint to basic rates as ! * otherwise we may not be able to associate if ! * the rate set we submit to the AP is invalid ! * (e.g. fix rate at 36Mb/s which is not a basic ! * rate for 11a operation). */ ! if ((nrs->rs_rates[i] & IEEE80211_RATE_BASIC) == 0 && ! ic->ic_fixed_rate >= 0 && ! r != RV(srs->rs_rates[ic->ic_fixed_rate])) ! ignore++; } if (flags & IEEE80211_F_DONEGO) { --- 376,383 ---- if (flags & IEEE80211_F_DOFRATE) { /* ! * Check any fixed rate is included. */ ! if (r == RV(srs->rs_rates[ic->ic_fixed_rate])) ! fixedrate = r; } if (flags & IEEE80211_F_DONEGO) { *************** *** 430,434 **** i++; } ! if (okrate == 0 || error != 0) return badrate | IEEE80211_RATE_BASIC; else --- 429,434 ---- i++; } ! if (okrate == 0 || error != 0 || ! ((flags & IEEE80211_F_DOFRATE) && fixedrate == 0)) return badrate | IEEE80211_RATE_BASIC; else |