From 0a01f81b35b1eca1fc35e467b0cce93a27674a61 Mon Sep 17 00:00:00 2001 From: Javier Cardona Date: Thu, 15 Oct 2009 18:10:51 -0700 Subject: [PATCH] --- yaml --- r: 171001 b: refs/heads/master c: 43b7b314f606b64f8645e4ec1a59df8a97a79b5a h: refs/heads/master i: 170999: caa7e4c53df329220d5feccdf612c8f9196128fd v: v3 --- [refs] | 2 +- trunk/net/mac80211/rx.c | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 66757349d908..f6bb30326457 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a9b3a9f7214b3acc56330c2257aeaa5fa85bf520 +refs/heads/master: 43b7b314f606b64f8645e4ec1a59df8a97a79b5a diff --git a/trunk/net/mac80211/rx.c b/trunk/net/mac80211/rx.c index 7170bf4565a8..5c385e3c1d1f 100644 --- a/trunk/net/mac80211/rx.c +++ b/trunk/net/mac80211/rx.c @@ -1504,19 +1504,28 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) /* illegal frame */ return RX_DROP_MONITOR; - if (!is_multicast_ether_addr(hdr->addr1) && - (mesh_hdr->flags & MESH_FLAGS_AE_A5_A6)) { + if (mesh_hdr->flags & MESH_FLAGS_AE) { struct mesh_path *mppath; + char *proxied_addr; + char *mpp_addr; + + if (is_multicast_ether_addr(hdr->addr1)) { + mpp_addr = hdr->addr3; + proxied_addr = mesh_hdr->eaddr1; + } else { + mpp_addr = hdr->addr4; + proxied_addr = mesh_hdr->eaddr2; + } rcu_read_lock(); - mppath = mpp_path_lookup(mesh_hdr->eaddr2, sdata); + mppath = mpp_path_lookup(proxied_addr, sdata); if (!mppath) { - mpp_path_add(mesh_hdr->eaddr2, hdr->addr4, sdata); + mpp_path_add(proxied_addr, mpp_addr, sdata); } else { spin_lock_bh(&mppath->state_lock); mppath->exp_time = jiffies; - if (compare_ether_addr(mppath->mpp, hdr->addr4) != 0) - memcpy(mppath->mpp, hdr->addr4, ETH_ALEN); + if (compare_ether_addr(mppath->mpp, mpp_addr) != 0) + memcpy(mppath->mpp, mpp_addr, ETH_ALEN); spin_unlock_bh(&mppath->state_lock); } rcu_read_unlock();