svn commit: r195320 - projects/mesh11s/sys/net80211

Sam Leffler sam at FreeBSD.org
Fri Jul 3 18:31:15 UTC 2009


Author: sam
Date: Fri Jul  3 18:31:14 2009
New Revision: 195320
URL: http://svn.freebsd.org/changeset/base/195320

Log:
  Move mesh internal work out of the node area:
  o add ieee80211_mesh_node_init to setup mesh state in a node
  o add ieee80211_mesh_node_cleanup to cleanup mesh state in a node
  o add ieee80211_mesh_init_neighbor to init mesh state on neighbor discovery
  
  Reviewed by:	rpaulo

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.c
  projects/mesh11s/sys/net80211/ieee80211_mesh.h
  projects/mesh11s/sys/net80211/ieee80211_node.c

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Fri Jul  3 17:58:45 2009	(r195319)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Fri Jul  3 18:31:14 2009	(r195320)
@@ -2019,6 +2019,36 @@ ieee80211_add_meshlmetric(uint8_t *frm, 
 #undef ADDSHORT
 #undef ADDWORD
 
+/*
+ * Initialize any mesh-specific node state.
+ */
+void
+ieee80211_mesh_node_init(struct ieee80211vap *vap, struct ieee80211_node *ni)
+{
+	callout_init(&ni->ni_mltimer, CALLOUT_MPSAFE);
+}
+
+/*
+ * Cleanup any mesh-specific node state.
+ */
+void
+ieee80211_mesh_node_cleanup(struct ieee80211_node *ni)
+{
+	/* XXX stop/drain timer? */
+}
+
+/*
+ * Setup mesh-specific node state on neighbor discovery.
+ */
+void
+ieee80211_mesh_init_neighbor(struct ieee80211_node *ni,
+	const struct ieee80211_frame *wh,
+	const struct ieee80211_scanparams *sp)
+{
+	ni->ni_meshidlen = sp->meshid[1];
+	memcpy(ni->ni_meshid, sp->meshid + 2, sp->meshid[1]);
+}
+
 void
 ieee80211_create_mbss(struct ieee80211vap *vap, struct ieee80211_channel *chan)
 {

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.h	Fri Jul  3 17:58:45 2009	(r195319)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.h	Fri Jul  3 18:31:14 2009	(r195320)
@@ -417,6 +417,14 @@ uint8_t *	ieee80211_add_meshpeer(uint8_t
 		    uint16_t);
 uint32_t	ieee80211_airtime_calc(struct ieee80211_node *);
 uint8_t *	ieee80211_add_meshlmetric(uint8_t *, uint32_t);
+
+void		ieee80211_mesh_node_init(struct ieee80211vap *,
+		    struct ieee80211_node *);
+void		ieee80211_mesh_node_cleanup(struct ieee80211_node *);
+struct ieee80211_scanparams;
+void		ieee80211_mesh_init_neighbor(struct ieee80211_node *,
+		   const struct ieee80211_frame *,
+		   const struct ieee80211_scanparams *);
 void		ieee80211_create_mbss(struct ieee80211vap *, struct
 		    ieee80211_channel *);
 #endif /* _KERNEL */

Modified: projects/mesh11s/sys/net80211/ieee80211_node.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_node.c	Fri Jul  3 17:58:45 2009	(r195319)
+++ projects/mesh11s/sys/net80211/ieee80211_node.c	Fri Jul  3 18:31:14 2009	(r195320)
@@ -962,6 +962,11 @@ node_cleanup(struct ieee80211_node *ni)
 		ieee80211_ff_node_cleanup(ni);
 #endif
 	/*
+	 * Cleanup any mesh-related state.
+	 */
+	if (vap->iv_opmode == IEEE80211_M_MBSS)
+		ieee80211_mesh_node_cleanup(ni);
+	/*
 	 * Clear any staging queue entries.
 	 */
 	ieee80211_ageq_drain_node(&ic->ic_stageq, ni);
@@ -1100,6 +1105,8 @@ ieee80211_alloc_node(struct ieee80211_no
 	ni->ni_inact = ni->ni_inact_reload;
 	ni->ni_ath_defkeyix = 0x7fff;
 	ieee80211_psq_init(&ni->ni_psq, "unknown");
+	if (vap->iv_opmode == IEEE80211_M_MBSS)
+		ieee80211_mesh_node_init(vap, ni);
 
 	IEEE80211_NODE_LOCK(nt);
 	TAILQ_INSERT_TAIL(&nt->nt_node, ni, ni_list);
@@ -1403,11 +1410,8 @@ ieee80211_init_neighbor(struct ieee80211
 	ni->ni_fhindex = sp->fhindex;
 	ni->ni_erp = sp->erp;
 	ni->ni_timoff = sp->timoff;
-	if (vap->iv_opmode == IEEE80211_M_MBSS) {	
-		ni->ni_meshidlen = sp->meshid[1];
-		memcpy(ni->ni_meshid, sp->meshid + 2, sp->meshid[1]);
-		callout_init(&ni->ni_mltimer, CALLOUT_MPSAFE);
-	}
+	if (vap->iv_opmode == IEEE80211_M_MBSS)
+		ieee80211_mesh_init_neighbor(ni, wh, sp);
 
 	if (ieee80211_ies_init(&ni->ni_ies, sp->ies, sp->ies_len)) {
 		ieee80211_ies_expand(&ni->ni_ies);


More information about the svn-src-projects mailing list