summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2019-12-23 08:58:55 +0100
committerChristian Poessinger <christian@poessinger.com>2019-12-23 08:58:55 +0100
commitc1993205d62033658b36e4ad4ad4bb62afc54ecc (patch)
tree7f5af03c2cf023d1261a9143e102c7d540f3e875
parent81f67ca2bcf016ca7a0e021016d8945fc2e11002 (diff)
downloadvyos-1x-c1993205d62033658b36e4ad4ad4bb62afc54ecc.tar.gz
vyos-1x-c1993205d62033658b36e4ad4ad4bb62afc54ecc.zip
lldp: T1898: support multiple management addresses
- management-address is not a <multi/> node - added new vyos.validate.is_loopback_addr() function - returns true is address passed is a looback address
-rw-r--r--interface-definitions/lldp.xml.in1
-rw-r--r--python/vyos/validate.py6
-rwxr-xr-xsrc/conf_mode/lldp.py17
3 files changed, 21 insertions, 3 deletions
diff --git a/interface-definitions/lldp.xml.in b/interface-definitions/lldp.xml.in
index b44f4baf6..774c15116 100644
--- a/interface-definitions/lldp.xml.in
+++ b/interface-definitions/lldp.xml.in
@@ -295,6 +295,7 @@
<constraint>
<validator name="ip-address"/>
</constraint>
+ <multi/>
</properties>
</leafNode>
<node name="snmp">
diff --git a/python/vyos/validate.py b/python/vyos/validate.py
index 3f3166022..1ce5a8467 100644
--- a/python/vyos/validate.py
+++ b/python/vyos/validate.py
@@ -112,6 +112,12 @@ def is_addr_assigned(addr):
return False
+def is_loopback_addr(addr):
+ """
+ Check if supplied IPv4/IPv6 address is a loopback address
+ """
+ return ipaddress.ip_address(addr).is_loopback
+
def is_subnet_connected(subnet, primary=False):
"""
Verify is the given IPv4/IPv6 subnet is connected to any interface on this
diff --git a/src/conf_mode/lldp.py b/src/conf_mode/lldp.py
index d8b8cb77e..51425aaaf 100755
--- a/src/conf_mode/lldp.py
+++ b/src/conf_mode/lldp.py
@@ -21,6 +21,7 @@ import jinja2
from copy import deepcopy
from vyos.config import Config
+from vyos.validate import is_addr_assigned,is_loopback_addr
from vyos import ConfigError
# Please be careful if you edit the template.
@@ -40,8 +41,8 @@ configure system description "VyOS {{ options.description }}"
{%- if listen_on -%}
configure system interface pattern "{{ options.listen_on | join(",") }}"
{%- endif %}
-{% if options.addr -%}
-configure system ip management pattern "{{ options.addr }}"
+{% if options.mgmt_addr -%}
+configure system ip management pattern {{ options.mgmt_addr | join(",") }}
{%- endif %}
{%- for loc in location -%}
{%- if loc.elin %}
@@ -66,7 +67,17 @@ def get_options(config):
config.set_level('service lldp')
options['listen_vlan'] = config.exists('listen-vlan')
- options['addr'] = config.return_value('management-address')
+ options['mgmt_addr'] = []
+ for addr in config.return_values('management-address'):
+ if is_addr_assigned(addr) and not is_loopback_addr(addr):
+ options['mgmt_addr'].append(addr)
+ else:
+ message = 'WARNING: LLDP management address {0} invalid - '.format(addr)
+ if is_loopback_addr(addr):
+ message += '(loopback address).'
+ else:
+ message += 'address not found.'
+ print(message)
snmp = config.exists('snmp enable')
options["snmp"] = snmp