Bug#1006889: frr / bgp failing to insert routes on boot (usually ipv6, sometimes ipv4)

2024-05-06 Thread Nick
Hi David,

No problem at all!  To be honest, I’d completely forgotten about this.

I was only setting up a test network for learning, and if what you say about 
interfaces bouncing is true then you are right not to mess with the systemd 
scripts.  If I try this again in future, I’ll go for loopback interfaces as you 
suggest.

Keep up the good work!

Kind regards,

Nick

> On 6 May 2024, at 15:16, David Lamparter  wrote:
> 
> Hi Nick,
> 
> 
> (first of all, sorry, I kinda blanked out this bug report for some time,
> see below for why)
> 
> On Mon, Mar 07, 2022 at 06:16:03PM +, Nick wrote:
> [...]
>>   Because of the above, I checked out 
>>   /etc/systemd/system/multi-user.target.wants/frr.service and found
>>   that it is set to start with 'After=network-pre.target'.  I replaced
>>   Wants= and After= with 'network-online.target' and removed Before=
>>   entirely.
>> 
>>   * What was the outcome of this action?
>> 
>>   Having modified the systemd start script, routes are always inserted
>>   on boot!
> [...]
> 
> The problem with this is that while this fixes your specific scenario,
> it also breaks other users' setups since network-online.target itself is
> on occasion made to depend on frr.service, which would now create a
> loop.
> 
> Further, the issue you're seeing is specific to your configuration with
> these two route-maps:
> 
> [...]
>> route-map RM_SET_SRC permit 10
>> set src 25.0.1.1
>> !
>> route-map RM_SET_SRC6 permit 10
>> set src :f0a1::1
> [...]
> 
> You're correct to observe that these require the interface that owns
> these IP addresses to be up and configured before they can take effect,
> and the kernel will reject them otherwise.  zebra's behavior on this
> is... call it "suboptimal" in not retrying the install;  however the
> behavior of FRR is designed against a limitation of "normal" policy
> setups.  route-maps, especially in zebra, are essentially code, and
> there are *lots* of possibilities to create edge cases or non-working
> setups.
> 
> In your specific setup, the "FRR recommended practice" would be: add
> both of these IP addresses (25.0.1.1 and XYZ:f0a1::1) as /32 / /128 to
> your loopback interface.  This will ensure they are always available.
> (This is generally recommended for a router's primary addresses.)
> 
> Alternatively, your fix in editing the dependency is also viable,
> assuming you don't need to deal with cases where the interface or
> addresses go away and come back.  I can't incorporate it into the
> package though because it is specific to your situation.
> 
> 
> Sorry, I'm not sure there is anything else I can do here,
> 
> 
> equi (David)



Bug#1006889: frr / bgp failing to insert routes on boot (usually ipv6, sometimes ipv4)

2024-05-06 Thread David Lamparter
Hi Nick,


(first of all, sorry, I kinda blanked out this bug report for some time,
see below for why)

On Mon, Mar 07, 2022 at 06:16:03PM +, Nick wrote:
[...]
>Because of the above, I checked out 
>/etc/systemd/system/multi-user.target.wants/frr.service and found
>that it is set to start with 'After=network-pre.target'.  I replaced
>Wants= and After= with 'network-online.target' and removed Before=
>entirely.
> 
>* What was the outcome of this action?
> 
>Having modified the systemd start script, routes are always inserted
>on boot!
[...]

The problem with this is that while this fixes your specific scenario,
it also breaks other users' setups since network-online.target itself is
on occasion made to depend on frr.service, which would now create a
loop.

Further, the issue you're seeing is specific to your configuration with
these two route-maps:

[...]
> route-map RM_SET_SRC permit 10
>  set src 25.0.1.1
> !
> route-map RM_SET_SRC6 permit 10
>  set src :f0a1::1
[...]

You're correct to observe that these require the interface that owns
these IP addresses to be up and configured before they can take effect,
and the kernel will reject them otherwise.  zebra's behavior on this
is... call it "suboptimal" in not retrying the install;  however the
behavior of FRR is designed against a limitation of "normal" policy
setups.  route-maps, especially in zebra, are essentially code, and
there are *lots* of possibilities to create edge cases or non-working
setups.

In your specific setup, the "FRR recommended practice" would be: add
both of these IP addresses (25.0.1.1 and XYZ:f0a1::1) as /32 / /128 to
your loopback interface.  This will ensure they are always available.
(This is generally recommended for a router's primary addresses.)

Alternatively, your fix in editing the dependency is also viable,
assuming you don't need to deal with cases where the interface or
addresses go away and come back.  I can't incorporate it into the
package though because it is specific to your situation.


Sorry, I'm not sure there is anything else I can do here,


equi (David)