diff options
author | paul <paul> | 2003-04-28 17:11:02 +0000 |
---|---|---|
committer | paul <paul> | 2003-04-28 17:11:02 +0000 |
commit | 6cbbc3cc9fc3127c6ad45e73755b4f0c3afff31a (patch) | |
tree | 4387bd7c1b0a42198ea56b5a939d96adbbc122f1 /bgpd/bgp_nexthop.c | |
parent | a2c6283126a48c915561364e8456894bf7089b2c (diff) |
Import of zebra.org 20030428-18:07 IST
Diffstat (limited to 'bgpd/bgp_nexthop.c')
-rw-r--r-- | bgpd/bgp_nexthop.c | 85 |
1 files changed, 44 insertions, 41 deletions
diff --git a/bgpd/bgp_nexthop.c b/bgpd/bgp_nexthop.c index ad932b51..77b024e5 100644 --- a/bgpd/bgp_nexthop.c +++ b/bgpd/bgp_nexthop.c @@ -1119,9 +1119,11 @@ bgp_import_check (struct prefix *p, u_int32_t *igpmetric, struct in_addr *igpnex int bgp_import (struct thread *t) { + struct bgp_master *bm; struct bgp *bgp; struct bgp_node *rn; struct bgp_static *bgp_static; + struct listnode *nn; int valid; u_int32_t metric; struct in_addr nexthop; @@ -1131,49 +1133,52 @@ bgp_import (struct thread *t) bgp_import_thread = thread_add_timer (master, bgp_import, NULL, bgp_import_interval); - bgp = bgp_get_default (); - if (! bgp) + bm = bgp_get_master (); + if (! bm) return 0; - for (afi = AFI_IP; afi < AFI_MAX; afi++) - for (safi = SAFI_UNICAST; safi < SAFI_MPLS_VPN; safi++) - for (rn = bgp_table_top (bgp->route[afi][safi]); rn; - rn = bgp_route_next (rn)) - if ((bgp_static = rn->info) != NULL) - { - if (bgp_static->backdoor) - continue; - - valid = bgp_static->valid; - metric = bgp_static->igpmetric; - nexthop = bgp_static->igpnexthop; - - if (bgp_flag_check (bgp, BGP_FLAG_IMPORT_CHECK) - && afi == AFI_IP && safi == SAFI_UNICAST) - bgp_static->valid = bgp_import_check (&rn->p, &bgp_static->igpmetric, - &bgp_static->igpnexthop); - else + LIST_LOOP (bm->bgp, bgp, nn) + { + for (afi = AFI_IP; afi < AFI_MAX; afi++) + for (safi = SAFI_UNICAST; safi < SAFI_MPLS_VPN; safi++) + for (rn = bgp_table_top (bgp->route[afi][safi]); rn; + rn = bgp_route_next (rn)) + if ((bgp_static = rn->info) != NULL) { - bgp_static->valid = 1; - bgp_static->igpmetric = 0; - bgp_static->igpnexthop.s_addr = 0; - } + if (bgp_static->backdoor) + continue; - if (bgp_static->valid != valid) - { - if (bgp_static->valid) - bgp_static_update (bgp, &rn->p, bgp_static, afi, safi); + valid = bgp_static->valid; + metric = bgp_static->igpmetric; + nexthop = bgp_static->igpnexthop; + + if (bgp_flag_check (bgp, BGP_FLAG_IMPORT_CHECK) + && afi == AFI_IP && safi == SAFI_UNICAST) + bgp_static->valid = bgp_import_check (&rn->p, &bgp_static->igpmetric, + &bgp_static->igpnexthop); else - bgp_static_withdraw (bgp, &rn->p, afi, safi); + { + bgp_static->valid = 1; + bgp_static->igpmetric = 0; + bgp_static->igpnexthop.s_addr = 0; + } + + if (bgp_static->valid != valid) + { + if (bgp_static->valid) + bgp_static_update (bgp, &rn->p, bgp_static, afi, safi); + else + bgp_static_withdraw (bgp, &rn->p, afi, safi); + } + else if (bgp_static->valid) + { + if (bgp_static->igpmetric != metric + || bgp_static->igpnexthop.s_addr != nexthop.s_addr + || bgp_static->rmap.name) + bgp_static_update (bgp, &rn->p, bgp_static, afi, safi); + } } - else if (bgp_static->valid) - { - if (bgp_static->igpmetric != metric - || bgp_static->igpnexthop.s_addr != nexthop.s_addr - || bgp_static->rmap.name) - bgp_static_update (bgp, &rn->p, bgp_static, afi, safi); - } - } + } return 0; } @@ -1197,10 +1202,6 @@ zlookup_connect (struct thread *t) if (zlookup->sock < 0) return -1; - /* Make BGP import there. */ - bgp_import_thread = - thread_add_timer (master, bgp_import, NULL, 0); - return 0; } @@ -1396,6 +1397,8 @@ bgp_scan_init () /* Make BGP scan thread. */ bgp_scan_thread = thread_add_timer (master, bgp_scan, NULL, bgp_scan_interval); + /* Make BGP import there. */ + bgp_import_thread = thread_add_timer (master, bgp_import, NULL, 0); install_element (BGP_NODE, &bgp_scan_time_cmd); install_element (BGP_NODE, &no_bgp_scan_time_cmd); |