diff options
Diffstat (limited to 'drivers/net/bonding/bond_options.c')
-rw-r--r-- | drivers/net/bonding/bond_options.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c index f8c2e4f17066..698079e94e74 100644 --- a/drivers/net/bonding/bond_options.c +++ b/drivers/net/bonding/bond_options.c | |||
@@ -436,3 +436,25 @@ int bond_option_arp_ip_targets_set(struct bonding *bond, __be32 *targets, | |||
436 | write_unlock_bh(&bond->lock); | 436 | write_unlock_bh(&bond->lock); |
437 | return ret; | 437 | return ret; |
438 | } | 438 | } |
439 | |||
440 | int bond_option_arp_validate_set(struct bonding *bond, int arp_validate) | ||
441 | { | ||
442 | if (bond->params.mode != BOND_MODE_ACTIVEBACKUP) { | ||
443 | pr_err("%s: arp_validate only supported in active-backup mode.\n", | ||
444 | bond->dev->name); | ||
445 | return -EINVAL; | ||
446 | } | ||
447 | pr_info("%s: setting arp_validate to %s (%d).\n", | ||
448 | bond->dev->name, arp_validate_tbl[arp_validate].modename, | ||
449 | arp_validate); | ||
450 | |||
451 | if (bond->dev->flags & IFF_UP) { | ||
452 | if (!arp_validate) | ||
453 | bond->recv_probe = NULL; | ||
454 | else if (bond->params.arp_interval) | ||
455 | bond->recv_probe = bond_arp_rcv; | ||
456 | } | ||
457 | bond->params.arp_validate = arp_validate; | ||
458 | |||
459 | return 0; | ||
460 | } | ||