summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_hwmp.c
diff options
context:
space:
mode:
authormonthadar <monthadar@FreeBSD.org>2012-05-01 16:09:44 +0000
committermonthadar <monthadar@FreeBSD.org>2012-05-01 16:09:44 +0000
commitcedb36bb2dc9d91bbe0c0c10dec1e1807a0612f3 (patch)
treeaeb2b1087336f5e360392367d49434376fcda185 /sys/net80211/ieee80211_hwmp.c
parent85e4cd546c7bf273bdbb9c407338dd50414c2925 (diff)
downloadFreeBSD-src-cedb36bb2dc9d91bbe0c0c10dec1e1807a0612f3.zip
FreeBSD-src-cedb36bb2dc9d91bbe0c0c10dec1e1807a0612f3.tar.gz
* PREQ acceptance criteria updated to check for proxy condition as in amendment;
Approved by: adrian
Diffstat (limited to 'sys/net80211/ieee80211_hwmp.c')
-rw-r--r--sys/net80211/ieee80211_hwmp.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/sys/net80211/ieee80211_hwmp.c b/sys/net80211/ieee80211_hwmp.c
index 5d8686d..c238130 100644
--- a/sys/net80211/ieee80211_hwmp.c
+++ b/sys/net80211/ieee80211_hwmp.c
@@ -907,13 +907,17 @@ hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni,
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, struct ieee80211_node *ni,
* 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);
OpenPOWER on IntegriCloud