PERFORCE change 134230 for review
Sam Leffler
sam at FreeBSD.org
Sun Jan 27 11:25:53 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=134230
Change 134230 by sam at sam_ebb on 2008/01/27 19:25:41
o change ieee80211_node_set_chan api to take an explicit channel
instead of using ic_bsschan and remove hack to fallback to
ic_curchan if the bss channel has not been set yet
o promote it to a public api
Affected files ...
.. //depot/projects/vap/sys/net80211/ieee80211_node.c#21 edit
.. //depot/projects/vap/sys/net80211/ieee80211_node.h#14 edit
Differences ...
==== //depot/projects/vap/sys/net80211/ieee80211_node.c#21 (text+ko) ====
@@ -200,17 +200,14 @@
* Set/change the channel. The rate set is also updated as
* to insure a consistent view by drivers.
*/
-static void
-ieee80211_node_set_chan(struct ieee80211com *ic, struct ieee80211_node *ni)
+void
+ieee80211_node_set_chan(struct ieee80211_node *ni,
+ struct ieee80211_channel *chan)
{
- struct ieee80211_channel *chan = ic->ic_bsschan;
+ struct ieee80211com *ic = ni->ni_ic;
+
+ KASSERT(chan != IEEE80211_CHAN_ANYC, ("no channel"));
-#if 0
- KASSERT(chan != IEEE80211_CHAN_ANYC, ("bss channel not setup"));
-#else
- if (chan == IEEE80211_CHAN_ANYC) /* XXX while scanning */
- chan = ic->ic_curchan;
-#endif
ni->ni_chan = chan;
if (IEEE80211_IS_CHAN_HT(chan)) {
/*
@@ -288,7 +285,7 @@
IEEE80211_IS_CHAN_CACDONE(ic->ic_bsschan))
ieee80211_dfs_cac_clear(ic, ic->ic_bsschan);
ic->ic_bsschan = chan;
- ieee80211_node_set_chan(ic, ni);
+ ieee80211_node_set_chan(ni, chan);
ic->ic_curmode = ieee80211_chan2mode(chan);
/*
* Do mode-specific setup.
@@ -987,20 +984,20 @@
IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
"%s %p<%s>\n", __func__, ni, ether_sprintf(macaddr));
+ ni->ni_table = NULL; /* NB: pedantic */
+ ni->ni_ic = ic; /* NB: needed to set channel */
+ ni->ni_vap = vap;
+
IEEE80211_ADDR_COPY(ni->ni_macaddr, macaddr);
IEEE80211_ADDR_COPY(ni->ni_bssid, vap->iv_bss->ni_bssid);
ieee80211_node_initref(ni); /* mark referenced */
/* NB: required by ieee80211_fix_rate */
- ieee80211_node_set_chan(ic, ni);
+ ieee80211_node_set_chan(ni, ic->ic_bsschan);
ni->ni_txpower = vap->iv_bss->ni_txpower;
ieee80211_crypto_resetkey(vap, &ni->ni_ucastkey,
IEEE80211_KEYIX_NONE);
/* XXX optimize away */
IEEE80211_NODE_SAVEQ_INIT(ni, "unknown");
-
- ni->ni_table = NULL; /* NB: pedantic */
- ni->ni_ic = ic;
- ni->ni_vap = vap;
} else {
/* XXX msg */
vap->iv_stats.is_rx_nodealloc++;
@@ -1024,7 +1021,7 @@
ni->ni_txpower = vap->iv_bss->ni_txpower;
ni->ni_vlan = vap->iv_bss->ni_vlan; /* XXX?? */
IEEE80211_ADDR_COPY(ni->ni_bssid, vap->iv_bss->ni_bssid);
- ieee80211_node_set_chan(ic, ni);
+ ieee80211_node_set_chan(ni, ic->ic_bsschan);
}
return ni;
}
==== //depot/projects/vap/sys/net80211/ieee80211_node.h#14 (text+ko) ====
@@ -266,6 +266,8 @@
void ieee80211_node_authorize(struct ieee80211_node *);
void ieee80211_node_unauthorize(struct ieee80211_node *);
+void ieee80211_node_set_chan(struct ieee80211_node *,
+ struct ieee80211_channel *);
void ieee80211_create_ibss(struct ieee80211vap*, struct ieee80211_channel *);
void ieee80211_reset_bss(struct ieee80211vap *);
void ieee80211_sync_curchan(struct ieee80211com *);
More information about the p4-projects
mailing list