Skip to content

IPv6 Unicast Interface #85604

Description

@CDirkx

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

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