diff options
author | Christian Poessinger <christian@poessinger.com> | 2020-06-26 15:59:46 +0200 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2020-06-26 15:59:46 +0200 |
commit | 65130073eec20cdbb701b0f15a5a2e2676c96039 (patch) | |
tree | b9aac1b4d2cfa489ad51c76619ded06d0cdebd8a /python/vyos/ifconfig/interface.py | |
parent | f52f7bb85886cab81a64739b35cdaf179048e28f (diff) | |
download | vyos-1x-65130073eec20cdbb701b0f15a5a2e2676c96039.tar.gz vyos-1x-65130073eec20cdbb701b0f15a5a2e2676c96039.zip |
ifconfig: T2653: move dummy interface to get_config_dict()
This changes the dummy interface implementation to make use of get_config_dict()
and also implement a new vyos.ifconfig.Interface().update() function to gather
all the scattered calls to update common interface configuration options.
Derived classes of Interface() should extend update() to their needs for their
special interface type - e.g. bond or bridge.
Diffstat (limited to 'python/vyos/ifconfig/interface.py')
-rw-r--r-- | python/vyos/ifconfig/interface.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py index 2c2396440..19dc6e5bc 100644 --- a/python/vyos/ifconfig/interface.py +++ b/python/vyos/ifconfig/interface.py @@ -27,6 +27,7 @@ from netifaces import AF_INET from netifaces import AF_INET6 from vyos import ConfigError +from vyos.configdict import list_diff from vyos.util import mac2eui64 from vyos.validate import is_ipv4 from vyos.validate import is_ipv6 @@ -757,3 +758,41 @@ class Interface(Control): # TODO: port config (STP) return True + + def update(self, config): + """ A general helper function which works on a dictionary retrived by + get_config_dict(). It's main intention is to consolidate the scattered + interface setup code and provide a single point of entry when workin + on any interface. """ + + # Update interface description + self.set_alias(config.get('description', None)) + + # Configure assigned interface IP addresses. No longer + # configured addresses will be removed first + new_addr = config.get('address', []) + + # XXX workaround for T2636, convert IP address string to a list + # with one element + if isinstance(new_addr, str): + new_addr = [new_addr] + + # determine IP addresses which are assigned to the interface and build a + # list of addresses which are no longer in the dict so they can be removed + cur_addr = self.get_addr() + for addr in list_diff(cur_addr, new_addr): + self.del_addr(addr) + + for addr in new_addr: + self.add_addr(addr) + + # There are some items in the configuration which can only be applied + # if this instance is not bound to a bridge. This should be checked + # by the caller but better save then sorry! + if not config.get('is_bridge_member', False): + # Bind interface instance into VRF + self.set_vrf(config.get('vrf', '')) + + # Interface administrative state + state = 'down' if 'disable' in config.items() else 'up' + self.set_admin_state(state) |