On Sat, Apr 25, 2015 at 01:54:20AM +0800, Chun-Yeow Yeoh wrote:
> But we have the following in mesh forwarding:
> 
> static ieee80211_rx_result
> ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
> {
> ...
>         if (!ieee80211_is_data(hdr->frame_control) ||
>             !(status->rx_flags & IEEE80211_RX_RA_MATCH))
>                 return RX_CONTINUE;
> 
> ...
> mesh forwarding
> }
> 
> So this means that even if the device in promiscuous mode (RX_RA_MATCH
> clear), the frame won't be forwarded, right?

Yes, agreed.  I still don't understand how it could happen with
intermediate nodes.

> Thomas did mention whether this is retransmit frame not ACKed by RA. I
> expect the following happen:
> 
> Node A ---> Node B ----> Node C or D ---> Node E
> 
> A transmits to B. B receives but no ACK received by A. B forwards to C.
> 
> For the same frame, A re-transmits again. (Path refresh) B now
> forwards to D instead of C. So E will receive duplicate frames from
> both C and D in mesh network.

Hmm, but B should already filter this duplicate on the basis of having
same 802.11 sequence number as one already received, in
ieee80211_rx_h_check_dup(), right?

Just to summarize the state of affairs as I understand it now for when
someone revisits this thread in 2 more years' time :)

1. On some devices the lower-level drivers do not filter on RA (addr1) by
default in mesh mode.

2. On other devices, when a monitor vif is added, same thing happens as
in 1.

Either 1 or 2 is sufficient to hear frames with a different RA but same
DA.

3. A device in a bridge will have IFF_PROMISC set, which prevents frames
not matching RA from being discarded.

4. Due to missing check in deliver_skb(), all of these frames are passed
up the stack.

I could reproduce Francois' problem on my hardware with 3 stations all
in range, and fixing mesh paths A <-> B <-> C, putting C in a bridge and
adding a monitor interface on C, then pinging from A to C.

5. Johannes Berg posted patches to remove IFF_PROMISC special cases, so going
forward, we shouldn't hit this.

6. I still don't understand how intermediate nodes might experience this
problem due to the check in the forwarding path and existing sequence number
checks.  I guess we could try to make it happen with a bunch of
simulated nodes and mac80211_hwsim/wmediumd.

-- 
Bob Copeland %% http://bobcopeland.com/
_______________________________________________
Devel mailing list
[email protected]
http://lists.open80211s.org/cgi-bin/mailman/listinfo/devel

Reply via email to