summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_advertise.h
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2015-04-13 09:50:00 +0200
committerDonald Sharp <sharpd@cumulusnetworks.com>2016-06-08 20:58:21 +0200
commit6b87f736187d1a40a6b4f8d4fe42716bac09e857 (patch)
tree2f8032eee91b59957713c5d8cbc7ae32678a7720 /bgpd/bgp_advertise.h
parentospfd: Remove the blocking of opaque LSAs origination & flooding 'optimisation' (diff)
downloadfrr-6b87f736187d1a40a6b4f8d4fe42716bac09e857.tar.xz
frr-6b87f736187d1a40a6b4f8d4fe42716bac09e857.zip
bgpd: speed up "no-hit" withdraws for routeservers
This accelerates handling of incoming Withdraw messages for routes that don't exist in the table to begin with. Cisco IOS 12.4(24)T4 has a bug in this regard - it sends withdraws instead of doing nothing for prefixes that are filtered. Pulling up the adj_in removal in Quagga should have no ill effect, but we can avoid the costly iteration over all rsclients if there was no adj_in entry. Performance impact of this change on routeserver with 3 buggy peers, startup/sync time: before patch: 143.12 seconds (user cpu) after patch: 7.01 seconds (user cpu) Many thanks to Nick Hilliard & INEX for providing real-world test data! Signed-off-by: David Lamparter <equinox@opensourcerouting.org> Acked-by: Paul Jakma <paul@jakma.org>
Diffstat (limited to 'bgpd/bgp_advertise.h')
-rw-r--r--bgpd/bgp_advertise.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/bgpd/bgp_advertise.h b/bgpd/bgp_advertise.h
index ae6e6bd14..86c959478 100644
--- a/bgpd/bgp_advertise.h
+++ b/bgpd/bgp_advertise.h
@@ -172,7 +172,7 @@ struct bgp_synchronize
/* Prototypes. */
extern int bgp_adj_out_lookup (struct peer *, struct bgp_node *, u_int32_t);
extern void bgp_adj_in_set (struct bgp_node *, struct peer *, struct attr *, u_int32_t);
-extern void bgp_adj_in_unset (struct bgp_node *, struct peer *, u_int32_t);
+extern int bgp_adj_in_unset (struct bgp_node *, struct peer *, u_int32_t);
extern void bgp_adj_in_remove (struct bgp_node *, struct bgp_adj_in *);
extern void bgp_sync_init (struct peer *);