diff options
author | Christian Breunig <christian@breunig.cc> | 2023-12-29 13:29:02 +0100 |
---|---|---|
committer | Christian Breunig <christian@breunig.cc> | 2023-12-29 13:30:20 +0100 |
commit | cc4ce81ece57faca8ce111b8f3748389ecb40202 (patch) | |
tree | 8f64fbf00bdc137499d54152d8ec1dbd242c3d1c /python/vyos | |
parent | 78b7d110b0740dbff1c13e285a8dd7593825d902 (diff) | |
download | vyos-1x-cc4ce81ece57faca8ce111b8f3748389ecb40202.tar.gz vyos-1x-cc4ce81ece57faca8ce111b8f3748389ecb40202.zip |
vyos.template: T5869: first_host_address() does not honor RFC4291 section 2.6.1
The subnet router anycast address is predefined. Its format is as follows:
| n bits | 128-n bits |
+------------------------------------------------+----------------+
| subnet prefix | 00000000000000 |
+------------------------------------------------+----------------+
The "subnet prefix" in an anycast address is the prefix that identifies a
specific link. This anycast address is syntactically the same as a unicast
address for an interface on the link with the interface identifier set to zero.
Packets sent to the Subnet-Router anycast address will be delivered to one
router on the subnet. All routers are required to support the Subnet-Router
anycast addresses for the subnets to which they have interfaces.
The Subnet-Router anycast address is intended to be used for applications where
a node needs to communicate with any one of the set of routers.
Our code as of now returns the subnet router anycast address as the
first_host_address().
Diffstat (limited to 'python/vyos')
-rw-r--r-- | python/vyos/template.py | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/python/vyos/template.py b/python/vyos/template.py index 77b6a5ab0..29ea0889b 100644 --- a/python/vyos/template.py +++ b/python/vyos/template.py @@ -316,20 +316,15 @@ def is_ipv6(text): except: return False @register_filter('first_host_address') -def first_host_address(text): +def first_host_address(prefix): """ Return first usable (host) IP address from given prefix. Example: - 10.0.0.0/24 -> 10.0.0.1 - 2001:db8::/64 -> 2001:db8:: """ from ipaddress import ip_interface - from ipaddress import IPv4Network - from ipaddress import IPv6Network - - addr = ip_interface(text) - if addr.version == 4: - return str(addr.ip +1) - return str(addr.ip) + tmp = ip_interface(prefix).network + return str(tmp.network_address +1) @register_filter('last_host_address') def last_host_address(text): |