Nest: Avoid spurious announcements triggered by filtered routes
When filtered routes (enabled by 'import keep filtered' option) are updated, they trigger announcements by rte_announce(). For regular channels (e.g. type RA_OPTIMAL or RA_ANY) such announcement is just ignored, but in case of RA_ACCEPTED (BGP peer with 'secondary' option) it just reannounces the old (and still valid) best route. The patch ensures that such no-change is ignored even for these channels.
This commit is contained in:
parent
a50d2fa65f
commit
e80156d936
1 changed files with 14 additions and 1 deletions
|
@ -1112,7 +1112,20 @@ rte_announce(rtable *tab, uint type, net *net, rte *new, rte *old,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RA_ACCEPTED:
|
case RA_ACCEPTED:
|
||||||
rt_notify_accepted(c, net, new, old, 0);
|
/*
|
||||||
|
* The (new != old) condition is problematic here, as it would break
|
||||||
|
* the second usage pattern (announcement after bulk change, used in
|
||||||
|
* rt_next_hop_update_net(), which sends both new and old as NULL).
|
||||||
|
*
|
||||||
|
* But recursive next hops do not work with sorted tables anyways,
|
||||||
|
* such configuration is forbidden in BGP and not supported in
|
||||||
|
* rt_notify_accepted().
|
||||||
|
*
|
||||||
|
* The condition is needed to eliminate spurious announcements where
|
||||||
|
* both old and new routes are not valid (so they are NULL).
|
||||||
|
*/
|
||||||
|
if (new != old)
|
||||||
|
rt_notify_accepted(c, net, new, old, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RA_MERGED:
|
case RA_MERGED:
|
||||||
|
|
Loading…
Reference in a new issue