-
Couldn't load subscription status.
- Fork 13.9k
Description
This issue is split out of the larger discussion around stabilization of the ip feature (tracking issue: #27709). The focus of this issue on the question of what interface Rust should provide for IPv6 unicast adresses.
The current unstable interface is as follows:
impl Ipv6Addr {
fn is_unicast_global(&self) -> bool;
fn is_unicast_link_local(&self) -> bool;
fn is_unicast_link_local_strict(&self) -> bool;
fn is_unicast_site_local(&self) -> bool;
}Open Problems
Behaviour of is_unicast_link_local/is_unicast_link_local_strict
Concern was raised about the need for both is_unicast_link_local and is_unicast_link_local_strict(#66584 (comment)). is_unicast_link_local tests if an address is in FE80::/10, is_unicast_link_local_strict in the stricter FE80::/64. For a time it was unclear which interpretation was the correct one, see #76098 (comment) for a more complete overview. However, it was mentioned (#76098 (comment)) that IETF RFC #5156 Section 2.4 defines FE80::/10 as the link-local unicast addresses, and that other programming languages and the linux kernel all use FE80::/10 (#76098 (comment), #76098 (comment)). The conclusion seems to be that the current implementation of is_unicast_link_local is correct and consistent with other implementations, is_unicast_link_local_strict could be removed.
Unresolved: Should is_unicast_link_local_strict be removed?
Deprecation of site-local addresses
Unicast site-local addresses were deprecated in IETF RFC #3879, see also RFC #4291 Section 2.5.7. Any new implementation must no longer support the special behaviour of site-local addresses. This is mentioned in the docs of is_unicast_site_local and already implemented in is_unicast_global, which considers site-local addresses to be global.
For reference; .NET has IsIPv6SiteLocal, Python has is_site_local but mentions that is has been deprecated.
Unresolved: Should is_unicast_site_local be removed? Should SiteLocal be included in a possible IPv6UnicastScope?
Introduce IPv6UnicastScope
It was suggested (#76098 (comment)) to replace the existing unicast interface with an enum IPv6UnicastScope, similar to IPv6MulticastScope:
impl Ipv6Addr {
fn unicast_scope(&self) -> Option<IPv6UnicastScope>
}Positive reaction (#76098 (comment), #76098 (comment))
Unresolved: What would be the definition of IPv6UnicastScope?
RFCs
- Unicast Adresses: IETF RFC #4291 Section 2.5
- Unique Local IPv6 Unicast Addresses: IETF RFC #4193
- Deprecating Site Local Addresses: IETF RFC #3879
- Special-Use IPv6 Addresses: IETF RFC #5156
Previous Discussion
- stabilize the "ip" feature: PR #66584
- Stabilize the "IP" feature: PR #76098
- Stabilize the "IP" feature (continued from Stabilize the "IP" feature #76098): PR #85585