Date: Fri, 10 Jul 2009 17:22:41 +0000 (UTC) From: Sam Leffler <sam@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r195572 - projects/mesh11s/sys/net80211 Message-ID: <200907101722.n6AHMf0v026873@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: sam Date: Fri Jul 10 17:22:41 2009 New Revision: 195572 URL: http://svn.freebsd.org/changeset/base/195572 Log: o track the number of established neighbors o use the neighbor count when forming the meshconf ie instead of walking the sta table Reviewed by: rpaulo Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c projects/mesh11s/sys/net80211/ieee80211_mesh.h Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Fri Jul 10 16:44:19 2009 (r195571) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Fri Jul 10 17:22:41 2009 (r195572) @@ -588,7 +588,7 @@ mesh_newstate(struct ieee80211vap *vap, /* * Helper function to note the Mesh Peer Link FSM change. */ -static __inline void +static void mesh_linkchange(struct ieee80211_node *ni, enum ieee80211_mesh_mlstate state) { struct ieee80211vap *vap = ni->ni_vap; @@ -603,10 +603,21 @@ mesh_linkchange(struct ieee80211_node *n [IEEE80211_NODE_MESH_HOLDING] = "HOLDING" }; #endif - ni->ni_mlstate = state; IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, - ni, "peer link: switching to state %s", - meshlinkstates[ni->ni_mlstate]); + ni, "peer link: %s -> %s", + meshlinkstates[ni->ni_mlstate], meshlinkstates[state]); + + /* track neighbor count */ + if (state == IEEE80211_NODE_MESH_ESTABLISHED && + ni->ni_mlstate != IEEE80211_NODE_MESH_ESTABLISHED) { + KASSERT(ms->ms_neighbors < 65535, ("neighbor count overflow")); + ms->ms_neighbors++; + } else if (ni->ni_mlstate == IEEE80211_NODE_MESH_ESTABLISHED && + state != IEEE80211_NODE_MESH_ESTABLISHED) { + KASSERT(ms->ms_neighbors > 0, ("neighbor count 0")); + ms->ms_neighbors--; + } + ni->ni_mlstate = state; if (state == IEEE80211_NODE_MESH_HOLDING) ms->ms_ppath->mpp_peerdown(ni); } @@ -2152,20 +2163,6 @@ ieee80211_add_meshid(uint8_t *frm, struc } /* - * Helper function to find the number of mesh neighbors. - */ -static void -meshconf_neighbors(void *arg, struct ieee80211_node *ni) -{ - uint8_t *neighbors = arg; - - /* NB: avoid overflow */ - if (*neighbors < 15 && - ni->ni_mlstate == IEEE80211_NODE_MESH_ESTABLISHED) - (*neighbors)++; -} - -/* * Add a Mesh Configuration IE to a frame. * For now just use HWMP routing, Airtime link metric, Null Congestion * Signaling, Null Sync Protocol and Null Authentication. @@ -2173,7 +2170,6 @@ meshconf_neighbors(void *arg, struct iee uint8_t * ieee80211_add_meshconf(uint8_t *frm, struct ieee80211vap *vap) { - uint8_t neighs = 0; const struct ieee80211_mesh_state *ms = vap->iv_mesh; static const uint8_t null[4] = IEEE80211_MESHCONF_NULL; @@ -2193,10 +2189,8 @@ ieee80211_add_meshconf(uint8_t *frm, str frm += 4; memcpy(frm, null, 4); /* auth */ frm += 4; - ieee80211_iterate_nodes(&vap->iv_ic->ic_sta, meshconf_neighbors, - &neighs); /* NB: set the number of neighbors before the rest */ - *frm = neighs << 1; + *frm = (ms->ms_neighbors > 15 ? 15 : ms->ms_neighbors) << 1; if (ms->ms_flags & IEEE80211_MESHFLAGS_PORTAL) *frm |= IEEE80211_MESHCONF_FORM_MP; frm += 1; Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.h Fri Jul 10 16:44:19 2009 (r195571) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.h Fri Jul 10 17:22:41 2009 (r195572) @@ -447,6 +447,7 @@ struct ieee80211_mesh_state { int ms_idlen; uint8_t ms_id[IEEE80211_MESHID_LEN]; ieee80211_mesh_seq ms_seq; /* seq no for meshcntl */ + uint16_t ms_neighbors; uint8_t ms_ttl; /* mesh ttl set in packets */ #define IEEE80211_MESHFLAGS_AP 0x01 /* accept peers */ #define IEEE80211_MESHFLAGS_PORTAL 0x02 /* mesh portal role */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907101722.n6AHMf0v026873>