[IPv6]Re: Using different router addresses (draft-link-6man-gulla) to solve the router fail-over scenario in (draft-gont-v6ops-multi-ipv6)

David 'equinox' Lamparter <equinox@diac24.net> Fri, 21 March 2025 08:58 UTC

Return-Path: <equinox@diac24.net>
X-Original-To: ipv6@mail2.ietf.org
Delivered-To: ipv6@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 476F71073524; Fri, 21 Mar 2025 01:58:25 -0700 (PDT)
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id P568TvKyLa07; Fri, 21 Mar 2025 01:58:24 -0700 (PDT)
Received: from eidolon.nox.tf (eidolon.nox.tf [IPv6:2a07:2ec0:2185::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 70125107350E; Fri, 21 Mar 2025 01:58:24 -0700 (PDT)
Received: from equinox by eidolon.nox.tf with local (Exim 4.97.1) (envelope-from <equinox@diac24.net>) id 1tvYCr-00000003llU-3uha; Fri, 21 Mar 2025 09:58:22 +0100
Date: Fri, 21 Mar 2025 09:58:21 +0100
From: David 'equinox' Lamparter <equinox@diac24.net>
To: Fernando Gont <fernando@gont.com.ar>
Message-ID: <Z90qLdBlfirXXpEP@eidolon.nox.tf>
References: <99d3b163-caeb-4029-9c6a-13f13c461491@si6networks.com> <CAFU7BAQin5ZvV_XfdSNcUahfDbUmvA=A2sp5ZzgxiBT_oJZtvA@mail.gmail.com> <bf64830a-d5ec-48c7-88ef-da75b8f89d1b@gont.com.ar>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <bf64830a-d5ec-48c7-88ef-da75b8f89d1b@gont.com.ar>
Message-ID-Hash: 2AZCW2I76NTCU5YYCHFJJPHVFWBDAKHL
X-Message-ID-Hash: 2AZCW2I76NTCU5YYCHFJJPHVFWBDAKHL
X-MailFrom: equinox@diac24.net
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-ipv6.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: V6 Ops List <v6ops@ietf.org>, 6man@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [IPv6]Re: Using different router addresses (draft-link-6man-gulla) to solve the router fail-over scenario in (draft-gont-v6ops-multi-ipv6)
List-Id: "IPv6 Maintenance Working Group (6man)" <ipv6.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/ipv6/H09NV5_iSWCuMcYnBD0w2Lnbs5U>
List-Archive: <https://mailarchive.ietf.org/arch/browse/ipv6>
List-Help: <mailto:ipv6-request@ietf.org?subject=help>
List-Owner: <mailto:ipv6-owner@ietf.org>
List-Post: <mailto:ipv6@ietf.org>
List-Subscribe: <mailto:ipv6-join@ietf.org>
List-Unsubscribe: <mailto:ipv6-leave@ietf.org>

Hi Fernando,

(reordering quotes a little bit to make a cohesive mail)

On Thu, Mar 20, 2025 at 10:10:43AM -0300, Fernando Gont wrote:
> On 20/3/25 08:06, Jen Linkova wrote:
> > On Wed, Mar 19, 2025 at 7:46 PM Fernando Gont <fgont@si6networks.com> wrote:

Let's start here:

> You don't get that without a requirement for RFC 8028. The only thing 
> that is actually "implicitly required" is that you track which router 
> advertised what, not that you are able to route based on that.

Yes, absolutely, this is a hole in RFC6724 rule 5.5 by itself.  You select a source address to go with a nexthop, but nothing makes you stay with that nexthop.

In practice, it seems to work in a lot but not all cases.  Ted has mentioned (hope I'm paraphrasing correctly -- no warranty!) that Apple OSes behave this way since 2 years ago, rule code 5.5 seems to have been added to fix Thread-related issues, and it largely works, but they're seeing some small number of remaining problems.

To do this correctly, you need to have the source address influence routing, which is the intent of RFC8028 (odd wording and errata'd abstract nonwithstanding.)

RFC8028 only asks this for default routes and puts it in specific context, but really you're doing SADR routing.  The very freshly uploaded -03 of the sourcedest draft in rtgwg now also mentions this, cf.
https://www.ietf.org/archive/id/draft-ietf-rtgwg-dst-src-routing-revive-03.html#name-improving-source-address-se

"Destination-source routing is explicitly applicable to hosts, and in the context of fully implementing [RFC6724] and [RFC8028], it is RECOMMENDED that end hosts in fact implement destination-source routing."

(That's basically the crossing-over point in terms of scope; the intent with the wording there is to acknowledge the routing side as close to the host as it gets, but no further.  I dont' want to, and don't believe it is appropriate to, go further than this in a rtgwg document.  RFC8028 was really straddling that boundary as well, from the other side.)


Now:

> > > * RFC6724 talks about "which next hop would be used if you were to
> > >     select a given source address". This means that you'd have some
> > >     NH() function that you can use to ask NH(src, Dst) to learn the next
> > >     hop for a given (src, dst) pair.

No, this isn't a valid expression/analog of rule 5.5.  It is not "which next hop would be used if you were to select a given source address."  (I hope I'm not rude here, it's only a reflection of my level of confidence in this claim, hope you can read it as such.)

The 5.5 paragraph is incredibly little wording for an incredible lot of meaning and effect.  But it is quite clear:

"Prefer addresses in a prefix advertised by the next-hop."

and

"[…] assigned by the selected next-hop that will be used to send to D […]"

Thus, rule 5.5 is to prefer if "src ∈ SRCS(NH(dst))".  (That's an "element-of" there, in case of b0rked Unicode.)

Even the destination isn't a direct input;  it's the next-hop (which of course is determined by the destination), and which must already have been selected (for this destination) at this point. (* this is also why the -03 destination-source routing draft has *two* fresh source address selection sections.  There needs to be a working route lookup before you have a source address, otherwise it's an infinite dependency loop.)

The "NH(src, dst)" you're describing is, well, destination-source routing, and it's partially (for default routes) brought in by RFC8028.  But it doesn't exist in 6724 in itself.  I've made the mistake of trying to implement rule 5.5 this way, in an earlier attempt for Linux.  It's not semantically equivalent to "flip the perspective" like this and it did not work as intended.

And this dovetails into:

> What Section 6.3.6 of RFC4861 says is: when selecting a next-hop, if you 
> have multiple options for the next-hop, and have one that is known to be 
> reachable, and one that isn't, then pick the one that is reachable.

Because you have to select the next-hop before evaluating source addresses in rule 5.5, selecting a non-working next-hop on the "NH(dst)" step is already disfavored.  It won't even get to "SRCS(NH(dst))" unless all next-hops are broken, or a more specific route for the destination applies.

(The "more specific route for the destination" case would stem from the broken router having sent a RIO before.  It's yet another tricky case to add to the pile, but I don't believe it's a showstopper.)

As a logical consequence of the above, I don't believe the rule 5.7 you're suggesting to add is needed.

Hope this helps,


equi
(David)