<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Aptos;
        panose-1:2 11 0 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Times New Roman \(Body CS\)";
        panose-1:2 11 6 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="en-PL" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">Ondrej, does it mean that I can make statement as below?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">Statement: FRR should accept update with both global address and link-local address in NEXT_HOP without any error and put it into Adj-RIB-In. If link-local address is
 reachable (peer-to-peer link) then link-local address should be used as next hop in RIB. Otherwise, global address should be used. This logical can be reversed with FRR route-map action “set ipv6 next-hop prefer-global” which is equivalent of Bird channel
 option “next hop prefer global”.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:36.0pt;text-indent:-36.0pt"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">Would you agree with such statement? Or I miss some nuances?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div>
<div>
<div>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;color:black">Regards,</span><span style="font-size:11.0pt;color:black"><o:p></o:p></span></p>
</div>
</div>
</div>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black;mso-fareast-language:EN-US">Grzegorz</span><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-family:"Calibri",sans-serif;color:black">From:
</span></b><span style="font-family:"Calibri",sans-serif;color:black">Ondrej Zajicek <santiago@crfreenet.org><br>
<b>Date: </b>Tuesday, 28 January 2025 at 18:32<br>
<b>To: </b>"Ponikierski, Grzegorz" <gponikie@akamai.com><br>
<b>Cc: </b>bird-users <bird-users@network.cz><br>
<b>Subject: </b>Re: link-local IPv6 address in BGP.next_hop<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">!-------------------------------------------------------------------|<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  This Message Is From an External Sender<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  This message came from outside your organization.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">|-------------------------------------------------------------------!<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">On Mon, Jan 27, 2025 at 10:37:13PM +0000, Ponikierski, Grzegorz via Bird-users wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #B5C4DF 4.5pt;padding:0cm 0cm 0cm 4.0pt;margin-left:3.75pt;margin-right:0cm" id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE">
<div>
<p class="MsoNormal">Hello all!<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I have an interesting case of link-local IPv6 address in BGP.next_hop and I would like to know your opinion about that because I cannot tell with 100% confidence if it’s a bug or a feature. Existence of these link-local addresses causes
 issues of interoperability between Bird and FRR. I have separate discussion about that with FRR folks. Here I would like to now a Bird perspective. Details below.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">On single router with Bird 2.15 I have multiple IPv4 and IPv6 eBGP sessions, which receives prefixes from the Internet, and IPv4 iBGP session, which forwards these prefixes to BGP collector with FRR, which is separate server somewhere in
 the Internet many hops away in separate ASN. Session with BGP collector uses both ipv4 and ipv6 channels to send both IPv4 and IPv6 prefixes. IPv6 prefixes received via eBGP have both global IPv6 address and link-local IPv6 address like in an example below:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">On one hand, as per RFC 4271 NEXT_HOP is not changed when prefix is<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">passed from eBGP to iBGP so what we see above it expected. But on the<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">other hand, as per RFC 2545 link-local address must not be there because<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">both sides of iBGP doesn’t share the same IPv6 subnet:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Who is right here? As far I know, both documents are still current<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">standards, and both are implemented by Bird. I don’t see any clear<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">guidelines how to make a clear judgement here. Personally, I would tell<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">that RFC 4271 should be treated as general rule and RFC 2545 as more<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">specific rule so in the end link-local should be removed. After all,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">link-local addresses do not make sense for multihop sessions. However,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">these documents don’t refer to each other and I don’t know if authors of<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">these documents knew about each other statements. What do you think?<o:p></o:p></p>
</div>
</blockquote>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Hello<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">BIRD prefers to not change the NEXT_HOP when forwarded to IBGP. There are<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">some reeasons for this:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I think the condition in RFC 2545 makes sense for EBGP, but not for<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">IBGP, as IBGP sessions are usually terminated on loopback addresses, so<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">the BGP speaker cannot evaluate from session endpoints whether the peer<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">shares a common subnet with the nexthop and the speaker.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The condition specifies 'if and only if', so not sending link-local<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">next hop to a peer that shares a common subnet is contrary to the<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">condition in the same way as sending link-local next hop to a peer that<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">do not share a common subnet.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">In practice, it is worse to not send link-local next hop when it should<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">be used than send it when it should not. As the link-local next hop<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">address is associated with the global next hop address, routers that do<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">not share a common subnet would use the global next hop to resolve the<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">next hop in IGP routing table and ignore the link-local one, only the<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">routers that shares a common subnet would use the link-local address to<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">construct the route gateway.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">For example, lets assume we have routers R0, R1, and R2 on the same<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">subnet, R0 and R1 in the same AS and connected with IBGP on loopback<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">addresses, while R0 and R2 have EBGP session. Here, the R1 should clearly<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">receive link-local next hop so it could install the route to R2 with<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">link-local next hop in its routing table in the same manner as R0.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">While a route reflector may be many hops away, not sharing the common<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">subnet, and therefore clearly it should not receive link-local next hop<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">according to the condition in RFC 2545, i think it is an oversight in RFC<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">2545 to not consider route reflectors, as the RS could send the route<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">back to a router that shares a common subnet with the next hop.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Lets assume routers R0, R1, and R2 from the example above, but now<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">instead of IBGP session between R0 and R1, they will be connected through<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">IBGP sessions to a RR several hops away. One could argue that R1 should<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">get the same next hop for R2 like if it was connected directly to R0.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">OTOH, it is a question whether a common subnet can be clearly identified<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">from a global next hop address. I could imagine configurations where this<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">is not true, but that would break even when RFC 2545 condition is<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">strictly advered, together with IBGP recursive next hop resolution.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">-- <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Elen sila lumenn' omentielvo<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Ondrej 'Santiago' Zajicek (email: <a href="mailto:santiago@crfreenet.org">
santiago@crfreenet.org</a>)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">"To err is human -- to blame it on a computer is even more so."<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>