aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/bonding/bond.api
diff options
context:
space:
mode:
authorSteven Luong <sluong@cisco.com>2019-08-20 16:58:00 -0700
committerDamjan Marion <dmarion@me.com>2019-09-06 16:07:59 +0000
commita1876b84e5598fcfad1debe5abb51d152e06a66e (patch)
tree58e7d58a52b8b0beb85dc99c6071dab4a17f32e1 /src/vnet/bonding/bond.api
parentffbfe3a2d6aaf4e847a1848c29fc8ce2997ed260 (diff)
bonding: add weight support for active-backup mode
Not all interfaces have the same characteristics within the bonding group. For active-backup mode, we should do our best to select the slave that performs the best as the primary slave. We already did that by preferring the slave that is local numa. Sometimes, this is not enough. For example, when all are local numas, the selection is arbitrary. Some slave interfaces may have higher speed or better qos than the others. But this is hard to infer. One rule does not fit all. So we let the operator to optionally specify the weight for each slave interface. Our primary slave selection rule is now 1. biggest weight 2. is local numa 3. current primary slave (to avoid churn) 4. lowest sw_if_index (for deterministic behavior) This selection rule only applies to active-backup mode which only one slave is used for forwarding traffic until it becomes unreachable. At that time, the next "best" slave candidate is automatically promoted. The slaves are sorted according to the preference rule when they are up. So there is no need to find the next best candidate when the primary slave goes down. Another good thing about this rule is when the down slave comes back up, it is selected as the primary slave again unless there is indeed a "better" slave than this down slave that were added during that period. To set the weight for the slave interface, do this after the interface is enslaved set interface bond <interface-name> weight <value> Type: feature Signed-off-by: Steven Luong <sluong@cisco.com> Change-Id: I59ced6d20ce1dec532e667dbe1afd1b4243e04f9
Diffstat (limited to 'src/vnet/bonding/bond.api')
-rw-r--r--src/vnet/bonding/bond.api20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/vnet/bonding/bond.api b/src/vnet/bonding/bond.api
index e699267ccb5..5d9a0563c1a 100644
--- a/src/vnet/bonding/bond.api
+++ b/src/vnet/bonding/bond.api
@@ -19,7 +19,7 @@
the bonding device driver
*/
-option version = "1.0.1";
+option version = "1.0.2";
/** \brief Initialize a new bond interface with the given paramters
@param client_index - opaque cookie to identify the sender
@@ -154,6 +154,8 @@ define sw_interface_slave_dump
@param interface_name - name of interface
@param is_passve - interface does not initiate the lacp protocol, remote must be active speaker
@param is_long_timeout - 90 seconds vs default 3 seconds neighbor timeout
+ @param is_local_numa - the slave interface is local numa
+ @param weight - the weight for the slave interface (active-backup mode only)
*/
define sw_interface_slave_details
{
@@ -162,6 +164,22 @@ define sw_interface_slave_details
u8 interface_name[64];
u8 is_passive;
u8 is_long_timeout;
+ u8 is_local_numa;
+ u32 weight;
+};
+
+/** \brief Interface set bond weight
+ @param client_index - opaque cookie to identify the sender
+ @param context - sender context, to match reply w/ request
+ @param sw_if_index - slave interface for which to set the weight
+ @param weight - weight value to be set for the slave interface
+*/
+autoreply define sw_interface_set_bond_weight
+{
+ u32 client_index;
+ u32 context;
+ u32 sw_if_index;
+ u32 weight;
};
/*