Date: Thu, 18 Jun 2009 11:15:49 +0000 (UTC) From: Rui Paulo <rpaulo@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r194434 - projects/mesh11s/sys/net80211 Message-ID: <200906181115.n5IBFnwg009841@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: rpaulo Date: Thu Jun 18 11:15:49 2009 New Revision: 194434 URL: http://svn.freebsd.org/changeset/base/194434 Log: Flush the HWMP routing table upon SCAN state. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_hwmp.c projects/mesh11s/sys/net80211/ieee80211_hwmp.h projects/mesh11s/sys/net80211/ieee80211_mesh.c Modified: projects/mesh11s/sys/net80211/ieee80211_hwmp.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_hwmp.c Thu Jun 18 11:12:11 2009 (r194433) +++ projects/mesh11s/sys/net80211/ieee80211_hwmp.c Thu Jun 18 11:15:49 2009 (r194434) @@ -173,6 +173,35 @@ ieee80211_hwmp_vdetach(struct ieee80211v } mtx_destroy(&hs->hs_lock); free(vap->iv_hwmp, M_80211_HWMP); +} + +int +ieee80211_hwmp_newstate(struct ieee80211vap *vap, enum ieee80211_state ostate, int arg) +{ + enum ieee80211_state nstate = vap->iv_state; + struct ieee80211_hwmp_state *hs = vap->iv_hwmp; + struct ieee80211_hwmp_fi *fi, *next; + + switch (nstate) { + case IEEE80211_S_SCAN: + switch (ostate) { + case IEEE80211_S_INIT: + /* + * Flush the HWMP routing table + */ + if (hs == NULL) + return 0; + TAILQ_FOREACH_SAFE(fi, &hs->hs_head, fi_next, next) { + TAILQ_REMOVE(&hs->hs_head, fi, fi_next); + free(fi, M_80211_HWMP); + } + break; + default: + break; + } + default: + break; + } } void @@ -195,6 +224,10 @@ ieee80211_hwmp_recv_action(struct ieee80 KASSERT(ia->ia_category == IEEE80211_ACTION_CAT_MESHPATH, ("wrong category")); + if (ni == vap->iv_bss || + ni->ni_mlstate != IEEE80211_NODE_MESH_ESTABLISHED) + return; + while (efrm - frm > 1) { /*IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2, return);*/ switch (*frm) { Modified: projects/mesh11s/sys/net80211/ieee80211_hwmp.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_hwmp.h Thu Jun 18 11:12:11 2009 (r194433) +++ projects/mesh11s/sys/net80211/ieee80211_hwmp.h Thu Jun 18 11:15:49 2009 (r194434) @@ -66,6 +66,7 @@ struct ieee80211_hwmp_state { void ieee80211_hwmp_vattach(struct ieee80211vap *); void ieee80211_hwmp_vdetach(struct ieee80211vap *); +int ieee80211_hwmp_newstate(struct ieee80211vap *, enum ieee80211_state, int); void ieee80211_hwmp_recv_action(struct ieee80211vap *, struct ieee80211_node *, struct mbuf *); struct ieee80211_node * Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Thu Jun 18 11:12:11 2009 (r194433) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Thu Jun 18 11:15:49 2009 (r194434) @@ -170,12 +170,12 @@ mesh_newstate(struct ieee80211vap *vap, if (vap->iv_des_chan != IEEE80211_CHAN_ANYC && !IEEE80211_IS_CHAN_RADAR(vap->iv_des_chan) && vap->iv_meshidlen != 0) { - /* - * Already have a channel and a mesh ID; bypass the - * scan and startup immediately. - */ - ieee80211_create_mbss(vap, vap->iv_des_chan); - break; + /* + * Already have a channel and a mesh ID; bypass + * the * scan and startup immediately. + */ + ieee80211_create_mbss(vap, vap->iv_des_chan); + break; } /* * Initiate a scan. We can come here as a result @@ -208,6 +208,9 @@ mesh_newstate(struct ieee80211vap *vap, break; } + /* NB: ostate not nstate */ + ieee80211_hwmp_newstate(vap, ostate, arg); + return 0; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906181115.n5IBFnwg009841>