diff options
author | Jorge Boncompte [DTI2] <jorge@dti2.net> | 2012-05-07 18:52:52 +0200 |
---|---|---|
committer | David Lamparter <equinox@opensourcerouting.org> | 2012-05-22 20:25:07 +0200 |
commit | 10f9bf3f2021f874e574e4ebae9413bee982ed2b (patch) | |
tree | 5102a98c91d7d60380c07c08d0aaa32aa19cdbdf /bgpd/bgp_nexthop.h | |
parent | bgpd: optimize aspath string representation and assegments handling (diff) | |
download | frr-10f9bf3f2021f874e574e4ebae9413bee982ed2b.tar.xz frr-10f9bf3f2021f874e574e4ebae9413bee982ed2b.zip |
bgpd: optimize bgp_nexthop_self()
This function scores 2nd, profiling a full internet table load. It's called
for every prefix received.
Instead of looping in the interface lists comparing addresses use a hash
to mantain them.
* bgpd.c: Init the own address hash.
* bgp_nexthop.c: Introduce methods to maintain an own address hash.
(bgp_connected_add) add addresses to the hash.
(bgp_connected_delete) delete addresses from the hash.
(bgp_nexthop_self) lookup addresses in the hash. Removed the unused afi_t
parameter.
* bgp_route.c: (bgp_update_main) Micro-optimization, rearranged condition to
not lookup the hash for bogus nexthops (0.0.0.0 or a class D/E address)
Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'bgpd/bgp_nexthop.h')
-rw-r--r-- | bgpd/bgp_nexthop.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/bgpd/bgp_nexthop.h b/bgpd/bgp_nexthop.h index 874f3bba0..6e5350ead 100644 --- a/bgpd/bgp_nexthop.h +++ b/bgpd/bgp_nexthop.h @@ -55,6 +55,7 @@ extern void bgp_connected_delete (struct connected *c); extern int bgp_multiaccess_check_v4 (struct in_addr, char *); extern int bgp_config_write_scan_time (struct vty *); extern int bgp_nexthop_onlink (afi_t, struct attr *); -extern int bgp_nexthop_self (afi_t, struct attr *); +extern int bgp_nexthop_self (struct attr *); +extern void bgp_address_init (void); #endif /* _QUAGGA_BGP_NEXTHOP_H */ |