int bond_option_mode_set(struct bonding *bond, int mode) { if (!bond_mode_is_valid(mode)) { pr_err("invalid mode value %d.\n", mode); return -EINVAL; } if (bond->dev->flags & IFF_UP) { pr_err("%s: unable to update mode because interface is up.\n", bond->dev->name); return -EPERM; } if (bond_has_slaves(bond)) { pr_err("%s: unable to update mode because bond has slaves.\n", bond->dev->name); return -EPERM; } if (BOND_NO_USES_ARP(mode) && bond->params.arp_interval) { pr_info("%s: %s mode is incompatible with arp monitoring, start mii monitoring\n", bond->dev->name, bond_mode_tbl[mode].modename); /* disable arp monitoring */ bond->params.arp_interval = 0; /* set miimon to default value */ bond->params.miimon = BOND_DEFAULT_MIIMON; pr_info("%s: Setting MII monitoring interval to %d.\n", bond->dev->name, bond->params.miimon); } /* don't cache arp_validate between modes */ bond->params.arp_validate = BOND_ARP_VALIDATE_NONE; bond->params.mode = mode; return 0; }
int bond_option_mode_set(struct bonding *bond, struct bond_opt_value *newval) { if (BOND_NO_USES_ARP(newval->value) && bond->params.arp_interval) { pr_info("%s: %s mode is incompatible with arp monitoring, start mii monitoring\n", bond->dev->name, newval->string); /* disable arp monitoring */ bond->params.arp_interval = 0; /* set miimon to default value */ bond->params.miimon = BOND_DEFAULT_MIIMON; pr_info("%s: Setting MII monitoring interval to %d.\n", bond->dev->name, bond->params.miimon); } /* don't cache arp_validate between modes */ bond->params.arp_validate = BOND_ARP_VALIDATE_NONE; bond->params.mode = newval->value; return 0; }