Date: Thu, 4 Jun 2009 18:27:17 +0000 (UTC) From: Rui Paulo <rpaulo@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r193450 - projects/mesh11s/sys/net80211 Message-ID: <200906041827.n54IRHq1000432@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: rpaulo Date: Thu Jun 4 18:27:17 2009 New Revision: 193450 URL: http://svn.freebsd.org/changeset/base/193450 Log: Add more allocation handling code. Remove 'Step XX' from the comments. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_hwmp.c Modified: projects/mesh11s/sys/net80211/ieee80211_hwmp.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_hwmp.c Thu Jun 4 18:25:39 2009 (r193449) +++ projects/mesh11s/sys/net80211/ieee80211_hwmp.c Thu Jun 4 18:27:17 2009 (r193450) @@ -125,6 +125,8 @@ static const uint8_t proactiveaddr[IEEE8 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; static const uint8_t broadcastaddr[IEEE80211_ADDR_LEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; +static const uint8_t invalidaddr[IEEE80211_ADDR_LEN] = + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; SYSCTL_NODE(_net_wlan, OID_AUTO, hwmp, CTLFLAG_RD, 0, "IEEE 802.11s HWMP parameters"); @@ -495,15 +497,24 @@ hwmp_recv_preq(struct ieee80211vap *vap, mtx_unlock(&hs->hs_lock); /* - * Step 1. Record the PREQ ID and the originator MAC address. - */ - - /* - * Step 2. + * Record the PREQ ID and the originator MAC address. */ + if (fi == NULL) { + fi = malloc(sizeof(struct ieee80211_hwmp_fi), M_80211_VAP, + M_NOWAIT | M_ZERO); + memset(fi, 0, sizeof(*fi)); + IEEE80211_ADDR_COPY(fi->fi_dest, preq->preq_origaddr); + fi->fi_seq = preq->preq_origseq; + fi->fi_metric = preq->preq_metric; + fi->fi_lifetime = preq->preq_lifetime; + mtx_lock(&hs->hs_lock); + TAILQ_INSERT_TAIL(&hs->hs_head, fi, fi_next); + mtx_unlock(&hs->hs_lock); + } + fi->fi_preqid = preq->preq_id; /* - * Step 3. Check if the PREQ is addressed to us. + * Check if the PREQ is addressed to us. * XXX: check if this is part of a proxy address. */ if (IEEE80211_ADDR_EQ(vap->iv_myaddr, PREQ_TADDR(0))) { @@ -526,19 +537,26 @@ hwmp_recv_preq(struct ieee80211vap *vap, prep.prep_origseq = hs->hs_seq++; /* XXX addr1 = next hop */ hwmp_send_prep(ni, vap->iv_myaddr, preq->preq_origaddr, &prep); + /* + * Build the reverse path, if we don't have it already. + */ + if (fi == NULL || + memcmp(fi->fi_nexthop, invalidaddr, IEEE80211_ADDR_LEN)) { + ieee80211_hwmp_discover(vap, fi->fi_dest); + } + return; } - /* XXX: Step 4. Check for AE bit and update proxy information */ + /* XXX missing. Check for AE bit and update proxy information */ /* - * Step 5. Intermediate reply for PREQs with 1 target. + * Intermediate reply for PREQs with 1 target. */ if (preq->preq_ttl > 1 && preq->preq_tcount == 1 && !(PREQ_TFLAGS(0) & IEEE80211_MESHPREQ_TFLAGS_TO)) { struct ieee80211_meshpreq_ie ppreq; /* propagated PREQ */ - memcpy(&ppreq, preq, sizeof(ppreq)); /* * Can we do an intermediate path reply? @@ -597,14 +615,14 @@ hwmp_recv_preq(struct ieee80211vap *vap, &ppreq); } /* - * XXX: Step 6. Update the percursor table + * XXX: Update the percursor table */ return; } /* - * XXX: Step 8. Proactive PREQ: reply with a proactive PREP to the + * XXX: Proactive PREQ: reply with a proactive PREP to the * root STA if requested. */ if (IEEE80211_ADDR_EQ(PREQ_TADDR(0), proactiveaddr) && @@ -658,12 +676,12 @@ hwmp_recv_prep(struct ieee80211vap *vap, return; /* - * Step 1: Update the Forwarding Information. + * Update the Forwarding Information. */ /* - * Step 2: If it's NOT for us, propagate the PREP if TTL is + * If it's NOT for us, propagate the PREP if TTL is * greater than 1. */ if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, prep->prep_targetaddr) && @@ -677,18 +695,18 @@ hwmp_recv_prep(struct ieee80211vap *vap, IEEE80211_ADDR_COPY(pprep.prep_origaddr, vap->iv_myaddr); hwmp_send_prep(ni, vap->iv_myaddr, broadcastaddr, &pprep); /* - * XXX: Step 5: update the precursor list. + * XXX: update the precursor list. */ return; } /* - * XXX: Step 3: If it's for us and the AE bit is set, update the + * XXX: If it's for us and the AE bit is set, update the * proxy information table. */ /* - * XXX: Step 4: If it's NOT for us and the AE bit is set, + * XXX: If it's NOT for us and the AE bit is set, * update the proxy information table. */ @@ -917,7 +935,7 @@ ieee80211_hwmp_discover(struct ieee80211 hwmp_send_preq(vap->iv_bss, vap->iv_myaddr, broadcastaddr, &preq); } else - return ieee80211_find_txnode(vap, fi->fi_nexthop); + return vap->iv_bss; //ieee80211_find_txnode(vap, fi->fi_nexthop); return vap->iv_bss; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906041827.n54IRHq1000432>