Util: Normalize address family value before getting prefix length

Some address family values (e.g. "ipv4" or "ipv6") should not be
considered as bogus value if they can be normalized into
`socket.AF_INET` or `socket.AF_INET6`, it is more tolerant but also
still preserving the capability for rejecting the utterly bogus address
family values.

Signed-off-by: Wen Liang <liangwen12year@gmail.com>
This commit is contained in:
Wen Liang 2022-03-31 14:19:42 -04:00 committed by Fernando Fernández Mancera
parent 0234fb3b5a
commit 512d840fc4

View file

@ -328,13 +328,30 @@ class Util:
else:
return 64
@staticmethod
def addr_family_norm(addr_family):
if addr_family in [socket.AF_INET, socket.AF_INET6]:
return addr_family
if addr_family is None or addr_family == socket.AF_UNSPEC:
return None
if addr_family in ["4", "inet", "ip4", "ipv4", "IPv4"]:
return socket.AF_INET
if addr_family in ["6", "inet6", "ip6", "ipv6", "IPv6"]:
return socket.AF_INET6
Util.addr_family_check(addr_family)
@staticmethod
def addr_family_prefix_length(family):
addr_family = Util.addr_family_norm(family)
if addr_family == socket.AF_INET:
return 32
if addr_family == socket.AF_INET6:
return 128
Util.addr_family_check(addr_family)
@staticmethod
def addr_family_valid_prefix(family, prefix):
Util.addr_family_check(family)
if family == socket.AF_INET:
m = 32
else:
m = 128
m = Util.addr_family_prefix_length(family)
return prefix >= 0 and prefix <= m
@staticmethod