From de2dea3fbecffc2e2be57941fabe7e1f0adbb81c Mon Sep 17 00:00:00 2001 From: Thomas Pedersen Date: Thu, 1 Sep 2011 12:32:14 -0700 Subject: [PATCH] --- yaml --- r: 265999 b: refs/heads/master c: 2157fdd6ae3f760a95c5c50072a1b4ac656eb9f5 h: refs/heads/master i: 265997: eede92c635ab5887f76fa97ee69e74ebb101b1b6 265995: 6a4074352e21805c755a33799fe6a364aff7dde1 265991: ea4c23140ad35959046d4abb25a527b1267c9c5e 265983: d5509a19279a0a29f5a8f31c5db97ab51521f41f v: v3 --- [refs] | 2 +- trunk/net/mac80211/rx.c | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index cb60c4834047..0f3e3e92b7b8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8c771244fbab51661da7dbbabfa5dceffb3e3cce +refs/heads/master: 2157fdd6ae3f760a95c5c50072a1b4ac656eb9f5 diff --git a/trunk/net/mac80211/rx.c b/trunk/net/mac80211/rx.c index f45fd2fedc24..d479d48e8d18 100644 --- a/trunk/net/mac80211/rx.c +++ b/trunk/net/mac80211/rx.c @@ -476,7 +476,6 @@ static ieee80211_rx_result ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx) { struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; - unsigned int hdrlen = ieee80211_hdrlen(hdr->frame_control); char *dev_addr = rx->sdata->vif.addr; if (ieee80211_is_data(hdr->frame_control)) { @@ -524,14 +523,6 @@ ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx) } -#define msh_h_get(h, l) ((struct ieee80211s_hdr *) ((u8 *)h + l)) - - if (ieee80211_is_data(hdr->frame_control) && - is_multicast_ether_addr(hdr->addr1) && - mesh_rmc_check(hdr->addr3, msh_h_get(hdr, hdrlen), rx->sdata)) - return RX_DROP_MONITOR; -#undef msh_h_get - return RX_CONTINUE; } @@ -1840,6 +1831,12 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) hdrlen = ieee80211_hdrlen(hdr->frame_control); mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen); + /* frame is in RMC, don't forward */ + if (ieee80211_is_data(hdr->frame_control) && + is_multicast_ether_addr(hdr->addr1) && + mesh_rmc_check(hdr->addr3, mesh_hdr, rx->sdata)) + return RX_DROP_MONITOR; + if (!ieee80211_is_data(hdr->frame_control)) return RX_CONTINUE;