diff options
-rw-r--r-- | python/vyos/ifconfig.py | 17 | ||||
-rw-r--r-- | python/vyos/interfaces.py | 8 | ||||
-rwxr-xr-x | src/completion/list_interfaces.py | 4 | ||||
-rwxr-xr-x | src/conf_mode/dynamic_dns.py | 10 | ||||
-rwxr-xr-x | src/services/vyos-http-api-server | 2 |
5 files changed, 30 insertions, 11 deletions
diff --git a/python/vyos/ifconfig.py b/python/vyos/ifconfig.py index df86e3c93..66ccc85e9 100644 --- a/python/vyos/ifconfig.py +++ b/python/vyos/ifconfig.py @@ -23,6 +23,8 @@ import time import vyos.interfaces from vyos.validate import * from vyos.config import Config +from vyos import ConfigError + from ipaddress import IPv4Network, IPv6Address from netifaces import ifaddresses, AF_INET, AF_INET6 from subprocess import Popen, PIPE, STDOUT @@ -113,6 +115,9 @@ class Interface: 'dhcpv6_temporary' : False } + # list of assigned IP addresses + self._addr = [] + def _debug_msg(self, msg): if os.path.isfile('/tmp/vyos.ifconfig.debug'): print('DEBUG/{:<6} {}'.format(self._ifname, msg)) @@ -432,6 +437,18 @@ class Interface: >>> j.get_addr() ['192.0.2.1/24', '2001:db8::ffff/64'] """ + + # cache new IP address which is assigned to interface + self._addr.append(addr) + + # we can not have both DHCP and static IPv4 addresses assigned to an interface + if 'dhcp' in self._addr: + for addr in self._addr: + # do not change below 'if' ordering esle you will get an exception as: + # ValueError: 'dhcp' does not appear to be an IPv4 or IPv6 address + if addr != 'dhcp' and is_ipv4(addr): + raise ConfigError("Can't configure both static IPv4 and DHCP address on the same interface") + if addr == 'dhcp': self._set_dhcp() elif addr == 'dhcpv6': diff --git a/python/vyos/interfaces.py b/python/vyos/interfaces.py index ecf061d17..37c093aca 100644 --- a/python/vyos/interfaces.py +++ b/python/vyos/interfaces.py @@ -59,7 +59,7 @@ def wireguard_dump(): """Dump wireguard data in a python friendly way.""" last_device=None output = {} - + # Dump wireguard connection data _f = subprocess.check_output(["wg", "show", "all", "dump"]).decode() for line in _f.split('\n'): @@ -72,14 +72,14 @@ def wireguard_dump(): # We are currently entering a new node device, private_key, public_key, listen_port, fw_mark = items last_device = device - + output[device] = { 'private_key': None if private_key == '(none)' else private_key, 'public_key': None if public_key == '(none)' else public_key, 'listen_port': int(listen_port), 'fw_mark': None if fw_mark == 'off' else int(fw_mark), 'peers': {}, - } + } else: # We are entering a peer device, public_key, preshared_key, endpoint, allowed_ips, latest_handshake, transfer_rx, transfer_tx, persistent_keepalive = items @@ -95,5 +95,5 @@ def wireguard_dump(): 'transfer_rx': int(transfer_rx), 'transfer_tx': int(transfer_tx), 'persistent_keepalive': None if persistent_keepalive == 'off' else int(persistent_keepalive), - } + } return output diff --git a/src/completion/list_interfaces.py b/src/completion/list_interfaces.py index 84d17f89f..47eeaf00c 100755 --- a/src/completion/list_interfaces.py +++ b/src/completion/list_interfaces.py @@ -16,7 +16,7 @@ args = parser.parse_args() if args.type: try: interfaces = vyos.interfaces.list_interfaces_of_type(args.type) - + except ValueError as e: print(e, file=sys.stderr) print("") @@ -35,6 +35,8 @@ elif args.bridgeable: vxlan = vyos.interfaces.list_interfaces_of_type("vxlan") wireless = vyos.interfaces.list_interfaces_of_type("wireless") tunnel = vyos.interfaces.list_interfaces_of_type("tunnel") + wireless = vyos.interfaces.list_interfaces_of_type("wireless") + interfaces = eth + bond + l2tpv3 + openvpn + vxlan + wireless + tunnel elif args.bondable: diff --git a/src/conf_mode/dynamic_dns.py b/src/conf_mode/dynamic_dns.py index 027a7f7e3..7c3b9ff6a 100755 --- a/src/conf_mode/dynamic_dns.py +++ b/src/conf_mode/dynamic_dns.py @@ -47,11 +47,11 @@ use=if, if={{ interface.interface }} {% for rfc in interface.rfc2136 -%} {% for record in rfc.record %} # RFC2136 dynamic DNS configuration for {{ record }}.{{ rfc.zone }} -server={{ rfc.server }}, -protocol=nsupdate, -password={{ rfc.keyfile }}, -ttl={{ rfc.ttl }}, -zone={{ rfc.zone }}, +server={{ rfc.server }} +protocol=nsupdate +password={{ rfc.keyfile }} +ttl={{ rfc.ttl }} +zone={{ rfc.zone }} {{ record }} {% endfor -%} {% endfor -%} diff --git a/src/services/vyos-http-api-server b/src/services/vyos-http-api-server index 571ec1258..1abaed873 100755 --- a/src/services/vyos-http-api-server +++ b/src/services/vyos-http-api-server @@ -221,7 +221,7 @@ def get_value(): elif config_format == 'raw': pass else: - return error(400, "\"{0}\" is not a valid config format") + return error(400, "\"{0}\" is not a valid config format".format(config_format)) else: return error(400, "\"{0}\" is not a valid operation".format(op)) except VyOSError as e: |