Skip to content

Commit

Permalink
batman-adv: enable fast client detection using unicast_4addr packets
Browse files Browse the repository at this point in the history
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@autistici.org>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
  • Loading branch information
Antonio Quartulli committed Nov 7, 2012
1 parent 4046b24 commit 9affec6
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions net/batman-adv/routing.c
Original file line number Diff line number Diff line change
Expand Up @@ -986,6 +986,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;

Expand All @@ -1005,9 +1007,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))
Expand All @@ -1017,9 +1022,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;
}

Expand Down

0 comments on commit 9affec6

Please sign in to comment.