mirror of
https://github.com/torvalds/linux.git
synced 2024-12-16 16:12:52 +00:00
bonding: send arp requests even if there's no route to them
Currently we're only sending arp requests if we have a route to the target (and, thus, can find out the source ip address). There are some use cases, however, where we don't want/need to set an ip address (or set up a specific route) for bonding to use arp monitoring *for traffic generation*. We can easily send arp probes (arp requests with src ip == 0) to generate arp broadcast responses from the target ip and use them for determining if the target is up. This, obviously, won't work with arp validation - because we don't have the ip address set and, thus, will filter out the responses. So in that case - print a warning. CC: François CACHEREUL <f.cachereul@alphalink.fr> CC: Zhenjie Chen <zhchen@redhat.com> CC: Jay Vosburgh <fubar@us.ibm.com> CC: Andy Gospodarek <andy@greyhouse.net> Signed-off-by: Veaceslav Falico <vfalico@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
750f679cfc
commit
285727600f
@ -2155,8 +2155,13 @@ static void bond_arp_send_all(struct bonding *bond, struct slave *slave)
|
||||
rt = ip_route_output(dev_net(bond->dev), targets[i], 0,
|
||||
RTO_ONLINK, 0);
|
||||
if (IS_ERR(rt)) {
|
||||
pr_debug("%s: no route to arp_ip_target %pI4\n",
|
||||
bond->dev->name, &targets[i]);
|
||||
/* there's no route to target - try to send arp
|
||||
* probe to generate any traffic (arp_validate=0)
|
||||
*/
|
||||
if (bond->params.arp_validate && net_ratelimit())
|
||||
pr_warn("%s: no route to arp_ip_target %pI4 and arp_validate is set\n",
|
||||
bond->dev->name, &targets[i]);
|
||||
bond_arp_send(slave->dev, ARPOP_REQUEST, targets[i], 0, 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user