From a1876b84e5598fcfad1debe5abb51d152e06a66e Mon Sep 17 00:00:00 2001 From: Steven Luong Date: Tue, 20 Aug 2019 16:58:00 -0700 Subject: 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 weight Type: feature Signed-off-by: Steven Luong Change-Id: I59ced6d20ce1dec532e667dbe1afd1b4243e04f9 --- test/vpp_bond_interface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test/vpp_bond_interface.py') diff --git a/test/vpp_bond_interface.py b/test/vpp_bond_interface.py index f05a07b0ce2..0db04e135b1 100644 --- a/test/vpp_bond_interface.py +++ b/test/vpp_bond_interface.py @@ -29,8 +29,8 @@ class VppBondInterface(VppInterface): def enslave_vpp_bond_interface(self, sw_if_index, - is_passive, - is_long_timeout): + is_passive=0, + is_long_timeout=0): self.test.vapi.bond_enslave(sw_if_index, self.sw_if_index, is_passive, -- cgit 1.2.3-korg