<div dir="ltr">Is this an ipv6 route? nh length 32 means both a global and link-local address is being set. RFC2545 section 3<div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, 19 Apr 2020 at 21:39, Donald Sharp <<a href="mailto:sharpd@cumulusnetworks.com">sharpd@cumulusnetworks.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Sebastian -<br>
<br>
I cannot speak towards bird's behavior here but I can say that FRR has<br>
fixed a couple of nexthop related issues with what we send to our<br>
peers since the 6.0 release.  I would please consider upgrading to a<br>
much later version if you can,  7.2 or 7.3 should have the fixes.<br>
<br>
thanks!<br>
<br>
donald<br>
<br>
On Sun, Apr 19, 2020 at 6:48 PM Sebastian Hahn<br>
<<a href="mailto:bird_users@sebastianhahn.net" target="_blank">bird_users@sebastianhahn.net</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> let me preface this that I very much do not know what I am doing here, and have been somewhat unsuccessful in trying to understand what's going on by searching online. I would love an explanation though!<br>
><br>
> In a bird 2.0.7 setup, I was unable to import routes from one of my peers. It is the only one using frr (version 6.02-2 on debian), most other peers use bird1 or bird2. I noticed immediately after adding the peering that I received "Invalid NEXT_HOP attribute" errors in the log. Unfortunately, no more information than that was provided in the log, so I went on a little hunt. Since the exact error is raised from many places, I added some logs to identify the GW_DIRECT case in bgp_apply_next_hop() as the culprit. Here I realized that both gw and ll are set, which means a neighbor is tried to be found which doesn't involve the ll case. I then noticed that in bgp_decode_next_hop_ip(), this can only happen if len == 32. This is where I am absolutely clueless what it means for the nh len to be 32, and thus I don't know if the patch I came up with is correct, even though it works for my testing. Only this one peer using frr causes nh len to be set to 32, so I suppose it might be !<br>
 a !<br>
>  rare configuration.<br>
><br>
> I added this simple patch:<br>
><br>
> --- bird2-2.0.7.orig/proto/bgp/packets.c<br>
> +++ bird2-2.0.7/proto/bgp/packets.c<br>
> @@ -1174,6 +1174,9 @@ bgp_decode_next_hop_ip(struct bgp_parse_<br>
><br>
>      if (ipa_is_ip4(nh[0]) || !ip6_is_link_local(nh[1]))<br>
>        nh[1] = IPA_NONE;<br>
> +<br>
> +    if (ip6_is_link_local(nh[1]))<br>
> +      nh[0] = IPA_NONE;<br>
>    }<br>
>    else<br>
>      bgp_parse_error(s, 9);<br>
> ~<br>
><br>
> which worked for me to resolve the problem.<br>
><br>
> Thanks for any consideration!<br>
><br>
> Cheers<br>
> Sebastian<br>
<br>
</blockquote></div>