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);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to