Commit dc3e5d18 authored by Nikolay Aleksandrov's avatar Nikolay Aleksandrov Committed by David S. Miller

bonding: make a generic sysfs option store and fix comments

Introduce a generic option store function for sysfs and remove the
specific ones. The attribute name is used to match against the option
which is to be set.
Also adjust the "name" of tlb_dynamic_lb option to match the sysfs
entry and fix the comments and comment style in bond_sysfs.c
The comments which showed obvious behaviour (i.e. behaviour that's seen
in the option's entry) are removed, the ones that explained important
points about the setting function have been moved above the respective
set function in bond_options.c

There's only 1 exception: num_unsol_na/num_grat_arp since it has 2 names

CC: Jay Vosburgh <j.vosburgh@gmail.com>
CC: Veaceslav Falico <vfalico@gmail.com>
CC: Andy Gospodarek <andy@greyhouse.net>
CC: David S. Miller <davem@davemloft.net>
Signed-off-by: default avatarNikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent be7faf71
...@@ -374,7 +374,7 @@ static const struct bond_option bond_opts[] = { ...@@ -374,7 +374,7 @@ static const struct bond_option bond_opts[] = {
}, },
[BOND_OPT_TLB_DYNAMIC_LB] = { [BOND_OPT_TLB_DYNAMIC_LB] = {
.id = BOND_OPT_TLB_DYNAMIC_LB, .id = BOND_OPT_TLB_DYNAMIC_LB,
.name = "dynamic_lb", .name = "tlb_dynamic_lb",
.desc = "Enable dynamic flow shuffling", .desc = "Enable dynamic flow shuffling",
.unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_TLB)), .unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_TLB)),
.values = bond_tlb_dynamic_lb_tbl, .values = bond_tlb_dynamic_lb_tbl,
...@@ -384,6 +384,21 @@ static const struct bond_option bond_opts[] = { ...@@ -384,6 +384,21 @@ static const struct bond_option bond_opts[] = {
{ } { }
}; };
/* Searches for an option by name */
const struct bond_option *bond_opt_get_by_name(const char *name)
{
const struct bond_option *opt;
int option;
for (option = 0; option < BOND_OPT_LAST; option++) {
opt = bond_opt_get(option);
if (opt && !strcmp(opt->name, name))
return opt;
}
return NULL;
}
/* Searches for a value in opt's values[] table */ /* Searches for a value in opt's values[] table */
const struct bond_opt_value *bond_opt_get_val(unsigned int option, u64 val) const struct bond_opt_value *bond_opt_get_val(unsigned int option, u64 val)
{ {
...@@ -762,6 +777,10 @@ static int bond_option_active_slave_set(struct bonding *bond, ...@@ -762,6 +777,10 @@ static int bond_option_active_slave_set(struct bonding *bond,
return ret; return ret;
} }
/* There are two tricky bits here. First, if MII monitoring is activated, then
* we must disable ARP monitoring. Second, if the timer isn't running, we must
* start it.
*/
static int bond_option_miimon_set(struct bonding *bond, static int bond_option_miimon_set(struct bonding *bond,
const struct bond_opt_value *newval) const struct bond_opt_value *newval)
{ {
...@@ -800,6 +819,10 @@ static int bond_option_miimon_set(struct bonding *bond, ...@@ -800,6 +819,10 @@ static int bond_option_miimon_set(struct bonding *bond,
return 0; return 0;
} }
/* Set up and down delays. These must be multiples of the
* MII monitoring value, and are stored internally as the multiplier.
* Thus, we must translate to MS for the real world.
*/
static int bond_option_updelay_set(struct bonding *bond, static int bond_option_updelay_set(struct bonding *bond,
const struct bond_opt_value *newval) const struct bond_opt_value *newval)
{ {
...@@ -858,6 +881,10 @@ static int bond_option_use_carrier_set(struct bonding *bond, ...@@ -858,6 +881,10 @@ static int bond_option_use_carrier_set(struct bonding *bond,
return 0; return 0;
} }
/* There are two tricky bits here. First, if ARP monitoring is activated, then
* we must disable MII monitoring. Second, if the ARP timer isn't running,
* we must start it.
*/
static int bond_option_arp_interval_set(struct bonding *bond, static int bond_option_arp_interval_set(struct bonding *bond,
const struct bond_opt_value *newval) const struct bond_opt_value *newval)
{ {
......
...@@ -105,6 +105,7 @@ int bond_opt_tryset_rtnl(struct bonding *bond, unsigned int option, char *buf); ...@@ -105,6 +105,7 @@ int bond_opt_tryset_rtnl(struct bonding *bond, unsigned int option, char *buf);
const struct bond_opt_value *bond_opt_parse(const struct bond_option *opt, const struct bond_opt_value *bond_opt_parse(const struct bond_option *opt,
struct bond_opt_value *val); struct bond_opt_value *val);
const struct bond_option *bond_opt_get(unsigned int option); const struct bond_option *bond_opt_get(unsigned int option);
const struct bond_option *bond_opt_get_by_name(const char *name);
const struct bond_opt_value *bond_opt_get_val(unsigned int option, u64 val); const struct bond_opt_value *bond_opt_get_val(unsigned int option, u64 val);
/* This helper is used to initialize a bond_opt_value structure for parameter /* This helper is used to initialize a bond_opt_value structure for parameter
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment