From owner-svn-src-projects@FreeBSD.ORG Wed May 27 00:20:33 2009 Return-Path: <owner-svn-src-projects@FreeBSD.ORG> Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C67C71065677; Wed, 27 May 2009 00:20:33 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9A3558FC22; Wed, 27 May 2009 00:20:33 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4R0KXI2078316; Wed, 27 May 2009 00:20:33 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4R0KXXO078315; Wed, 27 May 2009 00:20:33 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905270020.n4R0KXXO078315@svn.freebsd.org> From: Rui Paulo <rpaulo@FreeBSD.org> Date: Wed, 27 May 2009 00:20:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192866 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" <svn-src-projects.freebsd.org> List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe> List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects> List-Post: <mailto:svn-src-projects@freebsd.org> List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help> List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, <mailto:svn-src-projects-request@freebsd.org?subject=subscribe> X-List-Received-Date: Wed, 27 May 2009 00:20:34 -0000 Author: rpaulo Date: Wed May 27 00:20:33 2009 New Revision: 192866 URL: http://svn.freebsd.org/changeset/base/192866 Log: Initial handling of PREPs. 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 Wed May 27 00:06:19 2009 (r192865) +++ projects/mesh11s/sys/net80211/ieee80211_hwmp.c Wed May 27 00:20:33 2009 (r192866) @@ -295,10 +295,8 @@ hwmp_recv_preq(struct ieee80211vap *vap, /* XXX */ prep.prep_origseq = 1; vargs.ptrarg = &prep; - ieee80211_send_action(ni, - IEEE80211_ACTION_CAT_MESHPATH, - IEEE80211_ACTION_MESHPATH_REP, - vargs); + ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPATH, + IEEE80211_ACTION_MESHPATH_REP, vargs); return; } @@ -339,6 +337,55 @@ static void hwmp_recv_prep(struct ieee80211vap *vap, struct ieee80211_node *ni, const struct ieee80211_meshprep_ie *prep) { + union ieee80211_send_action_args vargs; + + /* + * Acceptance criteria: if the PREP was not generated by us and + * forwarding is disabled, discard this PREP. + */ + if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, prep->prep_origaddr) && + !ieee80211_mesh_forwarding) + return; + + /* + * Step 1: Update the Forwarding Information. + */ + + /* + * Step 2: 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) && + prep->prep_ttl > 1) { + struct ieee80211_meshprep_ie pprep; /* propagated PREP */ + + memcpy(&pprep, prep, sizeof(pprep)); + pprep.prep_hopcount += 1; + pprep.prep_ttl -= 1; + pprep.prep_metric += ieee80211_airtime_calc(vap, ni); + IEEE80211_ADDR_COPY(pprep.prep_origaddr, vap->iv_myaddr); + pprep.prep_origseq = 1; /* XXX */ + + vargs.ptrarg = &pprep; + ieee80211_send_action(ni, IEEE80211_ACTION_CAT_MESHPATH, + IEEE80211_ACTION_MESHPATH_REQ, vargs); + + /* + * XXX: Step 5: update the precursor list. + */ + return; + } + + /* + * XXX: Step 3: 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, + * update the proxy information table. + */ + }