|
@@ -2677,10 +2677,17 @@ static int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond,
|
|
|
* configuration, the ARP probe will (hopefully) travel from
|
|
|
* the active, through one switch, the router, then the other
|
|
|
* switch before reaching the backup.
|
|
|
+ *
|
|
|
+ * We 'trust' the arp requests if there is an active slave and
|
|
|
+ * it received valid arp reply(s) after it became active. This
|
|
|
+ * is done to avoid endless looping when we can't reach the
|
|
|
+ * arp_ip_target and fool ourselves with our own arp requests.
|
|
|
*/
|
|
|
if (bond_is_active_slave(slave))
|
|
|
bond_validate_arp(bond, slave, sip, tip);
|
|
|
- else
|
|
|
+ else if (bond->curr_active_slave &&
|
|
|
+ time_after(slave_last_rx(bond, bond->curr_active_slave),
|
|
|
+ bond->curr_active_slave->jiffies))
|
|
|
bond_validate_arp(bond, slave, tip, sip);
|
|
|
|
|
|
out_unlock:
|