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
Previous Discussion
This issue is split out of the larger discussion around stabilization of the
ipfeature (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:
Open Problems
Behaviour of
is_unicast_link_local/is_unicast_link_local_strictConcern was raised about the need for both
is_unicast_link_localandis_unicast_link_local_strict(#66584 (comment)).is_unicast_link_localtests if an address is inFE80::/10,is_unicast_link_local_strictin the stricterFE80::/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 definesFE80::/10as the link-local unicast addresses, and that other programming languages and the linux kernel all useFE80::/10(#76098 (comment), #76098 (comment)). The conclusion seems to be that the current implementation ofis_unicast_link_localis correct and consistent with other implementations,is_unicast_link_local_strictcould be removed.Unresolved: Should
is_unicast_link_local_strictbe 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_localand already implemented inis_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_localbe removed? ShouldSiteLocalbe included in a possibleIPv6UnicastScope?Introduce
IPv6UnicastScopeIt was suggested (#76098 (comment)) to replace the existing unicast interface with an enum
IPv6UnicastScope, similar toIPv6MulticastScope:Positive reaction (#76098 (comment), #76098 (comment))
Unresolved: What would be the definition of
IPv6UnicastScope?RFCs
Previous Discussion