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 &quot; projects&quot;
	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.
+	 */
+
 
 }