On Fri, May 06, 2016 at 10:58:23AM +0200, Andreas Pape wrote:
Speeding up dat address lookup is achieved by snooping all incoming ip traffic. This especially increases the propability in bla setups that a gateway into a common backbone network already has a fitting dat entry to answer incoming ARP requests directly coming from the backbone network thus further reducing ARP traffic in the mesh.
Signed-off-by: Andreas Pape apape@phoenixcontact.com
This patch looks interesting :). Currently we have quite some ARP-requests from gateways to clients left in Freifunk setups (had been asking Antonio about it just yesterday) and looks like this patch could help here.
+void batadv_dat_entry_check(struct batadv_priv *bat_priv, struct sk_buff *skb,
unsigned short vid)
+{
[...]
batadv_dat_entry_add(bat_priv, iphdr->saddr,
ethhdr->h_source, vid);
- }
+}
There is something in batadv_dat_entry_add() that makes me a little worried:
---- if (dat_entry) { if (!batadv_compare_eth(dat_entry->mac_addr, mac_addr)) ether_addr_copy(dat_entry->mac_addr, mac_addr); ----
ether_addr_copy() isn't atomic, there is a race condition between the update and any such check - like the one just above it.
This isn't really a bug of your patchset, but could make this race condition much more likely. In the worst case, a fast IP packet stream would create a constant rewrite and mostly broken dat_entry->mac_addr.