Exemple #1
0
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;
}
Exemple #2
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;
}