Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 May 2012 16:09:44 +0000 (UTC)
From:      Monthadar Al Jaberi <monthadar@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r234887 - head/sys/net80211
Message-ID:  <201205011609.q41G9inu033809@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: monthadar
Date: Tue May  1 16:09:44 2012
New Revision: 234887
URL: http://svn.freebsd.org/changeset/base/234887

Log:
  * PREQ acceptance criteria updated to check for proxy condition as in amendment;
  
  Approved by: adrian

Modified:
  head/sys/net80211/ieee80211_hwmp.c

Modified: head/sys/net80211/ieee80211_hwmp.c
==============================================================================
--- head/sys/net80211/ieee80211_hwmp.c	Tue May  1 16:08:46 2012	(r234886)
+++ head/sys/net80211/ieee80211_hwmp.c	Tue May  1 16:09:44 2012	(r234887)
@@ -907,13 +907,17 @@ hwmp_recv_preq(struct ieee80211vap *vap,
 	    PREQ_TADDR(0), ":");
 
 	/*
-	 * Acceptance criteria: if the PREQ is not for us or not broadcast
+	 * Acceptance criteria: (if the PREQ is not for us or not broadcast,
+	 * or an external mac address not proxied by us),
 	 * AND forwarding is disabled, discard this PREQ.
-	 * XXX: need to check PROXY
 	 */
-	if ((!IEEE80211_ADDR_EQ(vap->iv_myaddr, PREQ_TADDR(0)) ||
-	    !IEEE80211_IS_MULTICAST(PREQ_TADDR(0))) &&
-	    !(ms->ms_flags & IEEE80211_MESHFLAGS_FWD)) {
+	rttarg = ieee80211_mesh_rt_find(vap, PREQ_TADDR(0));
+	if (!(ms->ms_flags & IEEE80211_MESHFLAGS_FWD) &&
+	    (!IEEE80211_ADDR_EQ(vap->iv_myaddr, PREQ_TADDR(0)) ||
+	    !IEEE80211_IS_MULTICAST(PREQ_TADDR(0)) ||
+	    (rttarg != NULL &&
+	    rttarg->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY &&
+	    IEEE80211_ADDR_EQ(vap->iv_myaddr, rttarg->rt_mesh_gate)))) {
 		IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_HWMP,
 		    preq->preq_origaddr, NULL, "%s", "not accepting PREQ");
 		return;
@@ -922,7 +926,6 @@ hwmp_recv_preq(struct ieee80211vap *vap,
 	 * Acceptance criteria: if unicast addressed 
 	 * AND no valid forwarding for Target of PREQ, discard this PREQ.
 	 */
-	rttarg = ieee80211_mesh_rt_find(vap, PREQ_TADDR(0));
 	if(rttarg != NULL)
 		hrtarg = IEEE80211_MESH_ROUTE_PRIV(rttarg,
 		    struct ieee80211_hwmp_route);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201205011609.q41G9inu033809>