Skip to content

Commit

Permalink
batman-adv: change interface_rx to get orig node
Browse files Browse the repository at this point in the history
In order to understand  where a broadcast packet is coming from and use
this information to detect not yet announced clients, this patch modifies the
interface_rx() function by passing a new argument: the orig node
corresponding to the node that originated the received packet (if known).
This new argument if not NULL for broadcast packets only (other packets does not
have source field).

Signed-off-by: Antonio Quartulli <ordex@autistici.org>
  • Loading branch information
Antonio Quartulli committed Aug 23, 2012
1 parent 30cfd02 commit 3713517
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 7 deletions.
10 changes: 6 additions & 4 deletions net/batman-adv/routing.c
Original file line number Diff line number Diff line change
Expand Up @@ -1012,8 +1012,9 @@ int batadv_recv_unicast_packet(struct sk_buff *skb,

/* packet for me */
if (batadv_is_my_mac(unicast_packet->dest)) {
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);

return NET_RX_SUCCESS;
}

Expand Down Expand Up @@ -1050,7 +1051,7 @@ int batadv_recv_ucast_frag_packet(struct sk_buff *skb,
return NET_RX_SUCCESS;

batadv_interface_rx(recv_if->soft_iface, new_skb, recv_if,
sizeof(struct batadv_unicast_packet));
sizeof(struct batadv_unicast_packet), NULL);
return NET_RX_SUCCESS;
}

Expand Down Expand Up @@ -1137,7 +1138,8 @@ int batadv_recv_bcast_packet(struct sk_buff *skb,
goto out;

/* broadcast for me */
batadv_interface_rx(recv_if->soft_iface, skb, recv_if, hdr_size);
batadv_interface_rx(recv_if->soft_iface, skb, recv_if, hdr_size,
orig_node);
ret = NET_RX_SUCCESS;
goto out;

Expand Down
6 changes: 5 additions & 1 deletion net/batman-adv/soft-interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ static int batadv_interface_tx(struct sk_buff *skb,

void batadv_interface_rx(struct net_device *soft_iface,
struct sk_buff *skb, struct batadv_hard_iface *recv_if,
int hdr_size)
int hdr_size, struct batadv_orig_node *orig_node)
{
struct batadv_priv *bat_priv = netdev_priv(soft_iface);
struct ethhdr *ethhdr;
Expand Down Expand Up @@ -322,6 +322,10 @@ void batadv_interface_rx(struct net_device *soft_iface,

soft_iface->last_rx = jiffies;

if (orig_node)
batadv_tt_add_temporary_global_entry(bat_priv, orig_node,
ethhdr->h_source);

if (batadv_is_ap_isolated(bat_priv, ethhdr->h_source, ethhdr->h_dest))
goto dropped;

Expand Down
5 changes: 3 additions & 2 deletions net/batman-adv/soft-interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@
#define _NET_BATMAN_ADV_SOFT_INTERFACE_H_

int batadv_skb_head_push(struct sk_buff *skb, unsigned int len);
void batadv_interface_rx(struct net_device *soft_iface, struct sk_buff *skb,
struct batadv_hard_iface *recv_if, int hdr_size);
void batadv_interface_rx(struct net_device *soft_iface,
struct sk_buff *skb, struct batadv_hard_iface *recv_if,
int hdr_size, struct batadv_orig_node *orig_node);
struct net_device *batadv_softif_create(const char *name);
void batadv_softif_destroy(struct net_device *soft_iface);
int batadv_softif_is_valid(const struct net_device *net_dev);
Expand Down

0 comments on commit 3713517

Please sign in to comment.