<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Jun 6, 2018 at 3:39 PM, Ondrej Zajicek <span dir="ltr"><<a href="mailto:santiago@crfreenet.org" target="_blank">santiago@crfreenet.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-">On Wed, Jun 06, 2018 at 03:17:37PM +0100, Thomás S. Bregolin wrote:<br>
> On Wed, Jun 6, 2018 at 2:25 PM, Ondrej Zajicek <<a href="mailto:santiago@crfreenet.org">santiago@crfreenet.org</a>><br>
> wrote:<br>
> <br>
> > On Wed, Jun 06, 2018 at 01:33:53PM +0100, Thomás S. Bregolin wrote:<br>
> > [...]<br>
> > > I've attached a modified version of the test-withdraw script showing the<br>
> > > issue. It seems my problem is related to the "start delay time" option.<br>
> > > When I set it to 1, sometimes the withdrawal is sent, and sometimes it<br>
> > > isn't. However, when it *isn't* sent, it is *never* sent, no matter how<br>
> > > long I wait. The problem is solved by setting the timeout to a higher<br>
> > > value, or using the default 5 seconds.<br>
> ><br>
> > Hello<br>
> ><br>
> > Note that in the modified version no protocols are removed, both testproto<br>
> > and testproto2 are still configured and running. Just the BGP export<br>
> > filter was changed, and because 'configure soft' was used, then it was<br>
> > not reloaded. That is expected.<br>
> ><br>
> > But it is likely that if both changes happen simultaneously, i.e. a<br>
> > static protocol is removed and a BGP export filter is changed to no<br>
> > longer allow routes from that protocol, then withdraws are not sent. This<br>
> > is likely a bug, could be avoided by not doing both protocol removal and<br>
> > export filter change at the same time.<br>
> ><br>
> <br>
> Oh, interesting! Indeed, if I remove just the filter or both the filter and<br>
> route, the withdrawals are not sent. However, if I remove only the route,<br>
> the withdrawal is sent.<br>
<br>
</span>If you remove just the filter, then withdrawal is not sent, because you<br>
used 'configure soft' and not 'configure'. That is expected and will be<br>
fixed when you use 'reload' command.<br>
<br>
The problem is only when a route is removed during such interval, as then<br>
during 'reload' BIRD no longer knows about it and therefore does not send<br>
a withdrawal.<br>
<br>
Also note that when both sides has BGP with 'enhanced route refresh', the<br>
issue should not be problem. As in such case 'reload out' is delimited by<br>
Begin-RR and End-RR messages and received should remove all routes that<br>
were not received during that interval.<br>
<br>
As BIRD has this feature for a long time, not sure why it does not happen<br>
in your case. Do you have something different than BIRD on the other side?<br>
What is reported in 'Neighbor caps' in 'show protocols all' for BGP session?<span class="gmail-"><br></span></blockquote><div><br></div><div>I see. It's not BIRD on the other side. In this instance I'm using a QFX with JUNOS 15. But I believe I've seen the issue with Cisco and Arista routers, too. Will have to confirm, though.<br></div><div><br></div><div>I have this in neighboor caps:</div><div><br></div><div>Neighbor caps:    refresh restart-aware AS4</div><div><br></div><div><br></div><div>I'll check about the enhanced route refresh.<br></div></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">- Thomás<br></div></div>