|
@@ -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;
|
|
|
|
|
@@ -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))
|
|
@@ -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;
|
|
|
}
|
|
|
|