Date: Wed, 8 Jul 2009 16:08:44 +0000 (UTC) From: Rui Paulo <rpaulo@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r195464 - projects/mesh11s/sys/net80211 Message-ID: <200907081608.n68G8iSW056207@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: rpaulo Date: Wed Jul 8 16:08:44 2009 New Revision: 195464 URL: http://svn.freebsd.org/changeset/base/195464 Log: Fix meshconf IE creation. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Wed Jul 8 16:04:15 2009 (r195463) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Wed Jul 8 16:08:44 2009 (r195464) @@ -2084,10 +2084,9 @@ static int mesh_verify_meshconf(struct ieee80211vap *vap, const uint8_t *ie) { static const uint8_t null[4] = IEEE80211_MESHCONF_NULL; - static const uint8_t hwmp[4] = IEEE80211_MESHCONF_HWMP; - static const uint8_t airtime[4] = IEEE80211_MESHCONF_AIRTIME; const struct ieee80211_meshconf_ie *meshconf = (const struct ieee80211_meshconf_ie *) ie; + const struct ieee80211_mesh_state *ms = vap->iv_mesh; if (meshconf == NULL) return 1; @@ -2096,14 +2095,14 @@ mesh_verify_meshconf(struct ieee80211vap "wrong mesh conf version: %d\n", meshconf->conf_ver); return 1; } - if (memcmp(meshconf->conf_pselid, hwmp, 4) != 0) { + if (memcmp(meshconf->conf_pselid, ms->ms_ppath->mpp_ie, 4) != 0) { IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH, "unknown path selection algorithm: 0x%x%x%x%x\n", meshconf->conf_pselid[0], meshconf->conf_pselid[1], meshconf->conf_pselid[2], meshconf->conf_pselid[3]); return 1; } - if (memcmp(meshconf->conf_pmetid, airtime, 4) != 0) { + if (memcmp(meshconf->conf_pmetid, ms->ms_pmetric->mpm_ie, 4) != 0) { IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH, "unknown path metric algorithm: 0x%x%x%x%x\n", meshconf->conf_pmetid[0], meshconf->conf_pmetid[1], @@ -2178,23 +2177,25 @@ uint8_t * ieee80211_add_meshconf(uint8_t *frm, struct ieee80211vap *vap) { uint8_t neighs = 0; - struct ieee80211_mesh_state *ms = vap->iv_mesh; - /* XXX needs to be changed for other protocols */ - static const struct ieee80211_meshconf_ie ie = { - .conf_ie = IEEE80211_ELEMID_MESHCONF, - .conf_len = sizeof(struct ieee80211_meshconf_ie) - 2, - .conf_ver = IEEE80211_MESHCONF_VERSION, - .conf_pselid = IEEE80211_MESHCONF_HWMP, - .conf_pmetid = IEEE80211_MESHCONF_AIRTIME, - .conf_ccid = IEEE80211_MESHCONF_NULL, - .conf_syncid = IEEE80211_MESHCONF_NULL, - .conf_authid = IEEE80211_MESHCONF_NULL, - }; + const struct ieee80211_mesh_state *ms = vap->iv_mesh; + static const uint8_t null[4] = IEEE80211_MESHCONF_NULL; KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a MBSS vap")); - memcpy(frm, &ie, sizeof(ie)); - frm += __offsetof(struct ieee80211_meshconf_ie, conf_form); + *frm++ = IEEE80211_ELEMID_MESHCONF; + *frm++ = sizeof(struct ieee80211_meshconf_ie) - 2; + *frm++ = IEEE80211_MESHCONF_VERSION; + memcpy(frm, ms->ms_ppath->mpp_ie, 4); /* path selection */ + frm += 4; + memcpy(frm, ms->ms_pmetric->mpm_ie, 4); /* link metric */ + frm += 4; + /* XXX null for now */ + memcpy(frm, null, 4); /* congestion control */ + frm += 4; + memcpy(frm, null, 4); /* sync */ + 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 */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907081608.n68G8iSW056207>