bonding: Implement user key part of port_key in an AD system.
The port key has three components - user-key, speed-part, and duplex-part. The LSBit is for the duplex-part, next 5 bits are for the speed while the remaining 10 bits are the user defined key bits. Get these 10 bits from the user-space (through the SysFs interface) and use it to form the admin port-key. Allowed range for the user-key is 0 - 1023 (10 bits). If it is not provided then use zero for the user-key-bits (default). It can set using following example code - # modprobe bonding mode=4 # usr_port_key=$(( RANDOM & 0x3FF )) # echo $usr_port_key > /sys/class/net/bond0/bonding/ad_user_port_key # echo +eth1 > /sys/class/net/bond0/bonding/slaves ... # ip link set bond0 up Signed-off-by: Mahesh Bandewar <maheshb@google.com> Reviewed-by: Nikolay Aleksandrov <nikolay@redhat.com> [jt: * fixed up style issues reported by checkpatch * fixed up context from change in ad_actor_sys_prio patch] Signed-off-by: Jonathan Toppins <jtoppins@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
7451495755
commit
d22a5fc0c3
@@ -4141,6 +4141,7 @@ static int bond_check_params(struct bond_params *params)
|
||||
const struct bond_opt_value *valptr;
|
||||
int arp_all_targets_value;
|
||||
u16 ad_actor_sys_prio = 0;
|
||||
u16 ad_user_port_key = 0;
|
||||
|
||||
/* Convert string parameters. */
|
||||
if (mode) {
|
||||
@@ -4445,6 +4446,14 @@ static int bond_check_params(struct bond_params *params)
|
||||
}
|
||||
ad_actor_sys_prio = valptr->value;
|
||||
|
||||
valptr = bond_opt_parse(bond_opt_get(BOND_OPT_AD_USER_PORT_KEY),
|
||||
&newval);
|
||||
if (!valptr) {
|
||||
pr_err("Error: No ad_user_port_key default value");
|
||||
return -EINVAL;
|
||||
}
|
||||
ad_user_port_key = valptr->value;
|
||||
|
||||
if (lp_interval == 0) {
|
||||
pr_warn("Warning: ip_interval must be between 1 and %d, so it was reset to %d\n",
|
||||
INT_MAX, BOND_ALB_DEFAULT_LP_INTERVAL);
|
||||
@@ -4475,6 +4484,7 @@ static int bond_check_params(struct bond_params *params)
|
||||
params->tlb_dynamic_lb = 1; /* Default value */
|
||||
params->ad_actor_sys_prio = ad_actor_sys_prio;
|
||||
eth_zero_addr(params->ad_actor_system);
|
||||
params->ad_user_port_key = ad_user_port_key;
|
||||
if (packets_per_slave > 0) {
|
||||
params->reciprocal_packets_per_slave =
|
||||
reciprocal_value(packets_per_slave);
|
||||
|
Reference in New Issue
Block a user