On Wednesday, March 30, 2016 01:37:27 Roland Volkmann wrote:
Let's have a look to the source code. The interesting part is function "static void batadv_send_outstanding_bcast_packet(struct work_struct *work)" in file "send.c". There you will find
soft_iface = forw_packet->if_incoming->soft_iface;
[...] /* rebroadcast packet */ rcu_read_lock(); list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { if (hard_iface->soft_iface != soft_iface) /* !!! */ continue;
if (forw_packet->num_packets >= hard_iface->num_bcasts) continue;
The if-Statement marked with /* !!! */ results in "true", if incoming-interface isn't identical to outgoing-interface. Because the patch is included after this line, it is relevant for resending broadcasts to the incoming interface only.
There seems to be a misunderstanding. With soft-interfaces batman-adv refers to the logic interface created for each mesh (often: bat0, bat1, etc). Consequently, the '!!!' marked if statement checks whether or not a given hard-interface (read: wlan0, eth0, etc) belongs to the same soft-interface the to be forwarded packet belongs to.
Hope that helps!
Cheers, Marek