diff options
author | initramfs <initramfs@initramfs.io> | 2022-09-01 20:51:21 +0800 |
---|---|---|
committer | initramfs <initramfs@initramfs.io> | 2022-09-02 19:36:45 +0800 |
commit | 0f1d29ac0480dc202595b96357789e6d15d49f2c (patch) | |
tree | 54633efe405e3f12b6105debed1f4e3f38683513 /python/vyos/ifconfig | |
parent | df97b5a4130ec7763176c86295bce586e0808f72 (diff) | |
download | vyos-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/vyos/ifconfig')
-rw-r--r-- | python/vyos/ifconfig/bond.py | 12 |
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 |