[Madwifi-cvs] revision 3394 committed
Status: Beta
Brought to you by:
otaku
From: Benoit P. <svn...@ma...> - 2008-03-18 13:17:35
|
Project : madwifi Revision : 3394 Author : benoit (Benoit Papillault) Date : 2008-03-18 14:17:27 +0100 (Tue, 18 Mar 2008) Log Message : Better debugging of sending/receiving CSA IE Ignored iv_csa_jiffies in some case (was causing some kernel panics) Ignored CSA IE if 802.11h support is disabled. Affected Files: * madwifi/branches/madwifi-dfs/net80211/ieee80211_input.c updated * madwifi/branches/madwifi-dfs/net80211/ieee80211_output.c updated Modified: madwifi/branches/madwifi-dfs/net80211/ieee80211_input.c =================================================================== --- madwifi/branches/madwifi-dfs/net80211/ieee80211_input.c 2008-03-17 19:37:37 UTC (rev 3393) +++ madwifi/branches/madwifi-dfs/net80211/ieee80211_input.c 2008-03-18 13:17:27 UTC (rev 3394) @@ -2794,6 +2794,13 @@ struct ieee80211_channel *c; struct ieee80211_ie_csa *csa_ie = (struct ieee80211_ie_csa *)frm; + if ((ic->ic_flags & IEEE80211_F_DOTH) == 0) { + IEEE80211_DPRINTF(vap, IEEE80211_MSG_DOTH, + "%s: Ignored CSA IE since 802.11h " + "support is disabled\n", __func__); + return 0; + } + if (!frm) { /* we had CS underway but now we got Beacon without CSA IE */ /* XXX abuse? */ @@ -2839,11 +2846,6 @@ return -1; } - IEEE80211_DPRINTF(vap, IEEE80211_MSG_DOTH, - "%s: channel switch to %u in %u tbtt (mode %u) announced\n", - __func__, csa_ie->csa_chan, csa_ie->csa_count, - csa_ie->csa_mode); - if (vap->iv_csa_jiffies) { /* CSA was received recently */ if (c != vap->iv_csa_chan) { @@ -3383,8 +3385,19 @@ ni->ni_flags &= ~IEEE80211_NODE_UAPSD; if (scan.ath != NULL) ieee80211_parse_athParams(ni, scan.ath); - if (scan.csa != NULL || vap->iv_csa_jiffies) + if (scan.csa != NULL) { + struct ieee80211_ie_csa *csa_ie = + (struct ieee80211_ie_csa *)scan.csa; + + IEEE80211_DPRINTF(vap, IEEE80211_MSG_DOTH, + "%s: Receiving beacon frame " + "with CSA IE: %u/%u/%u\n", + __func__, csa_ie->csa_mode, + csa_ie->csa_chan, + csa_ie->csa_count); + ieee80211_parse_csaie(ni, scan.csa, wh); + } if (scan.tim != NULL) { /* * Check the TIM. For now we drop out of @@ -3434,8 +3447,19 @@ /* ieee80211_parse_csaie() needs to be called in IBSS mode as * well */ if (vap->iv_opmode == IEEE80211_M_IBSS) { - if (scan.csa != NULL || vap->iv_csa_jiffies) - ieee80211_parse_csaie(ni, scan.csa, wh); + if (scan.csa != NULL) { + struct ieee80211_ie_csa *csa_ie = + (struct ieee80211_ie_csa *)scan.csa; + + IEEE80211_DPRINTF(vap, IEEE80211_MSG_DOTH, + "%s: Receiving beacon frame " + "with CSA IE: %u/%u/%u\n", + __func__, csa_ie->csa_mode, + csa_ie->csa_chan, + csa_ie->csa_count); + + ieee80211_parse_csaie(ni,scan.csa,wh); + } } /* @@ -4167,10 +4191,22 @@ case IEEE80211_ACTION_SPECTRUM_MANAGEMENT: switch (*frm ++) { case IEEE80211_ACTION_S_CHANSWITCHANN: + { + struct ieee80211_ie_csa *csa_ie = + (struct ieee80211_ie_csa *) frm; + + IEEE80211_DPRINTF(vap, IEEE80211_MSG_DOTH, + "%s: Receiving action frame " + "with CSA IE: %u/%u/%u\n", + __func__, csa_ie->csa_mode, + csa_ie->csa_chan, + csa_ie->csa_count); + ieee80211_parse_csaie(ni, frm, wh); - break; } break; + } + break; } break; Modified: madwifi/branches/madwifi-dfs/net80211/ieee80211_output.c =================================================================== --- madwifi/branches/madwifi-dfs/net80211/ieee80211_output.c 2008-03-17 19:37:37 UTC (rev 3393) +++ madwifi/branches/madwifi-dfs/net80211/ieee80211_output.c 2008-03-18 13:17:27 UTC (rev 3394) @@ -1776,7 +1776,7 @@ ieee80211_send_csa_frame(struct ieee80211vap *vap, int csa_mode, int csa_chan, - int csa_tbtt) + int csa_count) { struct ieee80211_node * ni = vap->iv_bss; struct ieee80211com *ic = ni->ni_ic; @@ -1786,7 +1786,7 @@ IEEE80211_DPRINTF(vap, IEEE80211_MSG_DOTH, "%s: Sending action frame with CSA IE: %u/%u/%u\n", - __func__, csa_mode, csa_chan, csa_tbtt); + __func__, csa_mode, csa_chan, csa_count); skb = ieee80211_getmgtframe(&frm, frm_len); if (skb == NULL) { @@ -1796,13 +1796,13 @@ return ; } - *frm ++ = 0; /* Category */ - *frm ++ = 4; /* Spectrum Management */ + *frm ++ = IEEE80211_ACTION_SPECTRUM_MANAGEMENT; /* Category */ + *frm ++ = IEEE80211_ACTION_S_CHANSWITCHANN; /* Spectrum Management */ *frm ++ = IEEE80211_ELEMID_CHANSWITCHANN; *frm ++ = 3; *frm ++ = csa_mode; *frm ++ = csa_chan; - *frm ++ = csa_tbtt; + *frm ++ = csa_count; ieee80211_mgmt_output(ieee80211_ref_node(ni), skb, IEEE80211_FC0_SUBTYPE_ACTION, |