[commits] [batman-adv] master: batman-adv: enable fast client detection using unicast_4addr packets (d7cc20f)

postmaster at open-mesh.org postmaster at open-mesh.org
Sun Oct 14 20:02:56 CEST 2012


Repository : ssh://git@open-mesh.org/batman-adv

On branch  : master

>---------------------------------------------------------------

commit d7cc20fc1442893fd60d00c4f4540aecb3f5ba01
Author: Antonio Quartulli <ordex at autistici.org>
Date:   Sun Oct 14 17:19:19 2012 +0200

    batman-adv: enable fast client detection using unicast_4addr packets
    
    The "early client detection mechanism" can be extended to find new clients by
    means of unicast_4addr packets.
    
    The unicast_4addr packet contains as well as the broadcast packet (which is
    currently used in this mechanism) the address of the originating node and can
    therefore be used to install new entries in the Global Translation Table
    
    Signed-off-by: Antonio Quartulli <ordex at autistici.org>
    Signed-off-by: Marek Lindner <lindner_marek at yahoo.de>


>---------------------------------------------------------------

d7cc20fc1442893fd60d00c4f4540aecb3f5ba01
 routing.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/routing.c b/routing.c
index 96375c5..c2c4de3 100644
--- a/routing.c
+++ b/routing.c
@@ -1042,6 +1042,8 @@ int batadv_recv_unicast_packet(struct sk_buff *skb,
 	struct batadv_priv *bat_priv = netdev_priv(recv_if->soft_iface);
 	struct batadv_unicast_packet *unicast_packet;
 	struct batadv_unicast_4addr_packet *unicast_4addr_packet;
+	uint8_t *orig_addr;
+	struct batadv_orig_node *orig_node = NULL;
 	int hdr_size = sizeof(*unicast_packet);
 	bool is4addr;
 
@@ -1061,9 +1063,12 @@ int batadv_recv_unicast_packet(struct sk_buff *skb,
 
 	/* packet for me */
 	if (batadv_is_my_mac(unicast_packet->dest)) {
-		if (is4addr)
+		if (is4addr) {
 			batadv_dat_inc_counter(bat_priv,
 					       unicast_4addr_packet->subtype);
+			orig_addr = unicast_4addr_packet->src;
+			orig_node = batadv_orig_hash_find(bat_priv, orig_addr);
+		}
 
 		if (batadv_dat_snoop_incoming_arp_request(bat_priv, skb,
 							  hdr_size))
@@ -1073,9 +1078,12 @@ int batadv_recv_unicast_packet(struct sk_buff *skb,
 			goto rx_success;
 
 		batadv_interface_rx(recv_if->soft_iface, skb, recv_if, hdr_size,
-				    NULL);
+				    orig_node);
 
 rx_success:
+		if (orig_node)
+			batadv_orig_node_free_ref(orig_node);
+
 		return NET_RX_SUCCESS;
 	}
 



More information about the commits mailing list