Implement a special update generator for add-path send all.
authorclaudio <claudio@openbsd.org>
Fri, 23 Sep 2022 15:49:20 +0000 (15:49 +0000)
committerclaudio <claudio@openbsd.org>
Fri, 23 Sep 2022 15:49:20 +0000 (15:49 +0000)
commit910ddab463d090b3816d386d2ad106b2163ee620
treec207ac130d9d2a93d0e66aa52fa635f0f1c1c4e2
parent7dd170e2d8883e602b6f27d816b51118dcae8e6a
Implement a special update generator for add-path send all.

The generic add-path code up_generate_addpath() reevaluates everything
since this is the simplest way to select the announced paths. For add-path
all this is overkill since there is no dependency between prefixes and so
individual prefixes can be handled more efficently.

Extend rde_generate_updates() to pass the current newbest and oldbest
prefixes (for the selected best path) but now also include newpath and
oldpath (which is the prefix that is added/removed/modified).
If newpath or oldpath is set then a single prefix was altered and
up_generate_addpath_all() can just remove or add this prefix.
If newpath and oldpath are NULL than the full list based on newbest
needs to be inserted and any old path/prefix removed in the process.

This improves update generation performance on big route collectors using
add-path all substantially.

OK tb@
usr.sbin/bgpd/rde.c
usr.sbin/bgpd/rde.h
usr.sbin/bgpd/rde_decide.c
usr.sbin/bgpd/rde_peer.c
usr.sbin/bgpd/rde_update.c