[linux-next] LinuxNextTracking branch, master, updated. next-20130513

batman at open-mesh.org batman at open-mesh.org
Tue May 14 00:17:17 CEST 2013


The following commit has been merged in the master branch:
commit 88e48d7b3340ef07b108eb8a8b3813dd093cc7f7
Author: Antonio Quartulli <ordex at autistici.org>
Date:   Thu May 9 09:35:45 2013 +0200

    batman-adv: make DAT drop ARP requests targeting local clients
    
    In the outgoing ARP request snooping routine in DAT, ARP
    Request sent by local clients which are supposed to be
    replied by other local clients can be silently dropped.
    
    The destination host will reply by itself through the LAN
    and therefore there is no need to involve DAT.
    
    Reported-by: Carlos Quijano <carlos at crqgestion.es>
    Signed-off-by: Antonio Quartulli <ordex at autistici.org>
    Tested-by: Carlos Quijano <carlos at crqgestion.es>
    Signed-off-by: Marek Lindner <lindner_marek at yahoo.de>

diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c
index 8e15d96..2399920 100644
--- a/net/batman-adv/distributed-arp-table.c
+++ b/net/batman-adv/distributed-arp-table.c
@@ -837,6 +837,19 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
 
 	dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst);
 	if (dat_entry) {
+		/* If the ARP request is destined for a local client the local
+		 * client will answer itself. DAT would only generate a
+		 * duplicate packet.
+		 *
+		 * Moreover, if the soft-interface is enslaved into a bridge, an
+		 * additional DAT answer may trigger kernel warnings about
+		 * a packet coming from the wrong port.
+		 */
+		if (batadv_is_my_client(bat_priv, dat_entry->mac_addr)) {
+			ret = true;
+			goto out;
+		}
+
 		skb_new = arp_create(ARPOP_REPLY, ETH_P_ARP, ip_src,
 				     bat_priv->soft_iface, ip_dst, hw_src,
 				     dat_entry->mac_addr, hw_src);

-- 
LinuxNextTracking


More information about the linux-merge mailing list