分类: LINUX
2008-11-30 20:59:25
如果AP开的频道有DFS要求,Madwifi会在VAP_UP之前设置一个DFS WAIT等待时间。用来侦测radar信号。
ath_chan_set()
if (!(sc->sc_curchan.privFlags & CHANNEL_DFS_CLEAR)) {
sc->sc_dfs->sc_dfswait=1;
OS_SET_TIMER(&sc->sc_dfs->sc_dfswaittimer, ATH_DFS_WAIT_MS);
}
sc_dfswaittimer的处理函数是OS_TIMER_FUNC(ath_check_dfs_clear)
这个函数会清除dfswait的标志,然后把状态机切换到RUN状态。
sc->sc_dfs->sc_dfswait=0;
vap->iv_newstate(vap,IEEE80211_S_RUN, 0);
VAP切到RUN状态最终要调用ath_vap_up
scn->sc_ops->up(scn->sc_dev, avn->av_if_id, ni->ni_bssid, aid, flags);
这个函数中会检测dfswait这个标志,如果没有等待完,VAP就不会进入RUN状态。
if (sc->sc_dfs && sc->sc_dfs->sc_dfswait
&& avp->av_opmode == HAL_M_HOSTAP) {
/* push the vap to RUN state once DFS is cleared */
DPRINTF(sc, ATH_DEBUG_STATE, "%s: avp -> DFS_WAIT\n", __func__);
avp->av_dfswait_run = 1;
error = EAGAIN;
goto bad;
}
在5.255G以上的频段有DFS的要求,对应的频道从Channel 52 : 5.26 GHz开始。
前一个频道为Channel 48 : 5.24 GHz