Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 341638
b: refs/heads/master
c: 567b871
h: refs/heads/master
v: v3
  • Loading branch information
zheng.li authored and David S. Miller committed Nov 30, 2012
1 parent 39873c1 commit 449d57c
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e7165030db8e932a9a968f7015cd3b2e984f8e7c
refs/heads/master: 567b871e503316b0927e54a3d7c86d50b722d955
6 changes: 6 additions & 0 deletions trunk/drivers/net/bonding/bond_alb.c
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,12 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)
struct arp_pkt *arp = arp_pkt(skb);
struct slave *tx_slave = NULL;

/* Don't modify or load balance ARPs that do not originate locally
* (e.g.,arrive via a bridge).
*/
if (!bond_slave_has_mac(bond, arp->mac_src))
return NULL;

if (arp->op_code == htons(ARPOP_REPLY)) {
/* the arp must be sent on the selected
* rx channel
Expand Down
13 changes: 13 additions & 0 deletions trunk/drivers/net/bonding/bonding.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include <linux/in6.h>
#include <linux/netpoll.h>
#include <linux/inetdevice.h>
#include <linux/etherdevice.h>
#include "bond_3ad.h"
#include "bond_alb.h"

Expand Down Expand Up @@ -450,6 +451,18 @@ static inline void bond_destroy_proc_dir(struct bond_net *bn)
}
#endif

static inline struct slave *bond_slave_has_mac(struct bonding *bond,
const u8 *mac)
{
int i = 0;
struct slave *tmp;

bond_for_each_slave(bond, tmp, i)
if (ether_addr_equal_64bits(mac, tmp->dev->dev_addr))
return tmp;

return NULL;
}

/* exported from bond_main.c */
extern int bond_net_id;
Expand Down

0 comments on commit 449d57c

Please sign in to comment.