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