Skip to content

IPv6 Unicast Interface #85604

Open
Open
@CDirkx

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

Previous Discussion

Metadata

Assignees

No one assigned

    Labels

    C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCT-libsRelevant to the library team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions