summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorinitramfs <initramfs@initramfs.io>2022-09-01 20:51:21 +0800
committerinitramfs <initramfs@initramfs.io>2022-09-02 19:36:45 +0800
commit0f1d29ac0480dc202595b96357789e6d15d49f2c (patch)
tree54633efe405e3f12b6105debed1f4e3f38683513 /python
parentdf97b5a4130ec7763176c86295bce586e0808f72 (diff)
downloadvyos-1x-0f1d29ac0480dc202595b96357789e6d15d49f2c.tar.gz
vyos-1x-0f1d29ac0480dc202595b96357789e6d15d49f2c.zip
bonding: T4668: fix live bonding member add or remove
Fixes several bugs around bonding member interface states not matching the committed configuration, including: - Disabled removed interfaces coming back up - Newly added disabled interfaces not staying down - Newly added interfaces not showing up in the bond
Diffstat (limited to 'python')
-rw-r--r--python/vyos/ifconfig/bond.py12
1 files changed, 7 insertions, 5 deletions
diff --git a/python/vyos/ifconfig/bond.py b/python/vyos/ifconfig/bond.py
index 47e0598ab..f831551d8 100644
--- a/python/vyos/ifconfig/bond.py
+++ b/python/vyos/ifconfig/bond.py
@@ -1,4 +1,4 @@
-# Copyright 2019-2020 VyOS maintainers and contributors <maintainers@vyos.io>
+# Copyright 2019-2022 VyOS maintainers and contributors <maintainers@vyos.io>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -389,10 +389,12 @@ class BondIf(Interface):
# Remove ALL bond member interfaces
for interface in self.get_slaves():
self.del_port(interface)
- # Removing an interface from a bond will always place the underlaying
- # physical interface in admin-down state! If physical interface is
- # not disabled, re-enable it.
- if not dict_search(f'member.interface_remove.{interface}.disable', config):
+
+ # Restore correct interface status based on config
+ if dict_search(f'member.interface.{interface}.disable', config) is not None or \
+ dict_search(f'member.interface_remove.{interface}.disable', config) is not None:
+ Interface(interface).set_admin_state('down')
+ else:
Interface(interface).set_admin_state('up')
# Bonding policy/mode - default value, always present