Skip to content

Commit

Permalink
Staging: batman-adv: fix interface alternating and bonding reggression
Browse files Browse the repository at this point in the history
55d1666b521cbed95924c8d4775fe272c103f08c incidentally disabled bonding
of packets first entering the mesh along with also disabling interface
alternating regardless of where the packet came from. This re-enables
these options.

Signed-off-by: Chris Lang <clang@gateworks.com>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
Signed-off-by: Sven Eckelmann <sven.eckelmann@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Chris Lang authored and Greg Kroah-Hartman committed Nov 10, 2010
1 parent 31a9f47 commit f581cf2
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 11 deletions.
12 changes: 4 additions & 8 deletions drivers/staging/batman-adv/routing.c
Original file line number Diff line number Diff line change
Expand Up @@ -1000,10 +1000,10 @@ int recv_icmp_packet(struct sk_buff *skb, struct batman_if *recv_if)

/* find a suitable router for this originator, and use
* bonding if possible. */
struct neigh_node *find_router(struct orig_node *orig_node,
struct neigh_node *find_router(struct bat_priv *bat_priv,
struct orig_node *orig_node,
struct batman_if *recv_if)
{
struct bat_priv *bat_priv;
struct orig_node *primary_orig_node;
struct orig_node *router_orig;
struct neigh_node *router, *first_candidate, *best_router;
Expand All @@ -1019,13 +1019,9 @@ struct neigh_node *find_router(struct orig_node *orig_node,
/* without bonding, the first node should
* always choose the default router. */

if (!recv_if)
return orig_node->router;

bat_priv = netdev_priv(recv_if->soft_iface);
bonding_enabled = atomic_read(&bat_priv->bonding_enabled);

if (!bonding_enabled)
if ((!recv_if) && (!bonding_enabled))
return orig_node->router;

router_orig = orig_node->router->orig_node;
Expand Down Expand Up @@ -1154,7 +1150,7 @@ static int route_unicast_packet(struct sk_buff *skb,
orig_node = ((struct orig_node *)
hash_find(bat_priv->orig_hash, unicast_packet->dest));

router = find_router(orig_node, recv_if);
router = find_router(bat_priv, orig_node, recv_if);

if (!router) {
spin_unlock_irqrestore(&bat_priv->orig_hash_lock, flags);
Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/batman-adv/routing.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ int recv_ucast_frag_packet(struct sk_buff *skb, struct batman_if *recv_if);
int recv_bcast_packet(struct sk_buff *skb, struct batman_if *recv_if);
int recv_vis_packet(struct sk_buff *skb, struct batman_if *recv_if);
int recv_bat_packet(struct sk_buff *skb, struct batman_if *recv_if);
struct neigh_node *find_router(struct orig_node *orig_node,
struct batman_if *recv_if);
struct neigh_node *find_router(struct bat_priv *bat_priv,
struct orig_node *orig_node, struct batman_if *recv_if);
void update_bonding_candidates(struct bat_priv *bat_priv,
struct orig_node *orig_node);

Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/batman-adv/unicast.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ int unicast_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv)
if (!orig_node)
orig_node = transtable_search(bat_priv, ethhdr->h_dest);

router = find_router(orig_node, NULL);
router = find_router(bat_priv, orig_node, NULL);

if (!router)
goto unlock;
Expand Down

0 comments on commit f581cf2

Please sign in to comment.