Skip to content
Snippets Groups Projects
Commit 9affec6b authored by Antonio Quartulli's avatar Antonio Quartulli
Browse files

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: default avatarAntonio Quartulli <ordex@autistici.org>
Signed-off-by: default avatarMarek Lindner <lindner_marek@yahoo.de>
parent 4046b24a
No related branches found
No related tags found
No related merge requests found
...@@ -986,6 +986,8 @@ int batadv_recv_unicast_packet(struct sk_buff *skb, ...@@ -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_priv *bat_priv = netdev_priv(recv_if->soft_iface);
struct batadv_unicast_packet *unicast_packet; struct batadv_unicast_packet *unicast_packet;
struct batadv_unicast_4addr_packet *unicast_4addr_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); int hdr_size = sizeof(*unicast_packet);
bool is4addr; bool is4addr;
...@@ -1005,9 +1007,12 @@ int batadv_recv_unicast_packet(struct sk_buff *skb, ...@@ -1005,9 +1007,12 @@ int batadv_recv_unicast_packet(struct sk_buff *skb,
/* packet for me */ /* packet for me */
if (batadv_is_my_mac(unicast_packet->dest)) { if (batadv_is_my_mac(unicast_packet->dest)) {
if (is4addr) if (is4addr) {
batadv_dat_inc_counter(bat_priv, batadv_dat_inc_counter(bat_priv,
unicast_4addr_packet->subtype); 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, if (batadv_dat_snoop_incoming_arp_request(bat_priv, skb,
hdr_size)) hdr_size))
...@@ -1017,9 +1022,12 @@ int batadv_recv_unicast_packet(struct sk_buff *skb, ...@@ -1017,9 +1022,12 @@ int batadv_recv_unicast_packet(struct sk_buff *skb,
goto rx_success; goto rx_success;
batadv_interface_rx(recv_if->soft_iface, skb, recv_if, hdr_size, batadv_interface_rx(recv_if->soft_iface, skb, recv_if, hdr_size,
NULL); orig_node);
rx_success: rx_success:
if (orig_node)
batadv_orig_node_free_ref(orig_node);
return NET_RX_SUCCESS; return NET_RX_SUCCESS;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment