diff options
-rw-r--r-- | python/vyos/ifconfig.py | 12 | ||||
-rwxr-xr-x | src/conf_mode/interfaces-bonding.py | 9 |
2 files changed, 16 insertions, 5 deletions
diff --git a/python/vyos/ifconfig.py b/python/vyos/ifconfig.py index b1f512785..b3683dc57 100644 --- a/python/vyos/ifconfig.py +++ b/python/vyos/ifconfig.py @@ -1538,9 +1538,15 @@ class BondIf(VLANIf): >>> BondIf('bond0').get_slaves() ['eth1', 'eth2'] """ - slaves = self._read_sysfs('/sys/class/net/{}/bonding/slaves' - .format(self._ifname)) - return list(map(str, slaves.split())) + enslaved_ifs = [] + # retrieve real enslaved interfaces from OS kernel + sysfs_bond = '/sys/class/net/{}'.format(self._ifname) + if os.path.isdir(sysfs_bond): + for directory in os.listdir(): + if 'lower_' in directory: + enslaved_ifs.append(directory.replace('lower_','')) + + return enslaved_ifs def set_primary(self, interface): diff --git a/src/conf_mode/interfaces-bonding.py b/src/conf_mode/interfaces-bonding.py index 81574515f..6cdfb764c 100755 --- a/src/conf_mode/interfaces-bonding.py +++ b/src/conf_mode/interfaces-bonding.py @@ -208,8 +208,13 @@ def get_config(): # determine bond member interfaces (currently configured) if conf.exists('member interface'): bond['member'] = conf.return_values('member interface') - eff_member = conf.return_effective_values('member interface') - if not (bond['member'] == eff_member): + + # We can not call conf.return_effective_values() as it would not work + # on reboots. Reboots/First boot will return that running config and + # saved config is the same, thus on a reboot the bond members will + # not be added all (https://phabricator.vyos.net/T2030) + live_members = BondIf(bond['intf']).get_slaves() + if not (bond['member'] == live_members): bond['shutdown_required'] = True # Primary device interface |