diff options
Diffstat (limited to 'ncserver/module/nms_ifupdownng.py')
-rw-r--r-- | ncserver/module/nms_ifupdownng.py | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/ncserver/module/nms_ifupdownng.py b/ncserver/module/nms_ifupdownng.py index a607215..76f7c32 100644 --- a/ncserver/module/nms_ifupdownng.py +++ b/ncserver/module/nms_ifupdownng.py @@ -756,21 +756,22 @@ def add_address(iface: str, _type, addr: str, prefix): LOGGER.error(_("unknown address type %r"), _type) return - addr = None - iface = ipaddress.IPv6Interface + ip_addr = None + ctor = ipaddress.IPv6Interface if _type == socket.AF_INET: - iface = ipaddress.IPv4Interface + ctor = ipaddress.IPv4Interface try: - addr = iface("{a}/{p}".format(a=addr, p=prefix)) + ip_addr = ctor("{a}/{p}".format(a=addr, p=prefix)) except Exception as err: raise ValueError("IP address is not valid") from err - s_addr = str(addr) - - if s_addr in list_addresses(iface): - raise RuntimeError("Duplicate address attempt") + for candidate in list_addresses(iface): + cand_addr = candidate.split('/')[0] + if addr == cand_addr: + raise RuntimeError("Duplicate address attempt") + s_addr = str(ip_addr) _add_one_to_list(iface, 'address', s_addr) |