diff options
Diffstat (limited to 'ospfd/ospf_asbr.c')
-rw-r--r-- | ospfd/ospf_asbr.c | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/ospfd/ospf_asbr.c b/ospfd/ospf_asbr.c index d13bbc43..71093d95 100644 --- a/ospfd/ospf_asbr.c +++ b/ospfd/ospf_asbr.c @@ -43,15 +43,16 @@ #include "ospfd/ospf_route.h" #include "ospfd/ospf_zebra.h" #include "ospfd/ospf_dump.h" + /* Remove external route. */ void -ospf_external_route_remove (struct prefix_ipv4 *p) +ospf_external_route_remove (struct ospf *ospf, struct prefix_ipv4 *p) { struct route_node *rn; struct ospf_route *or; - rn = route_node_lookup (ospf_top->old_external_route, (struct prefix *) p); + rn = route_node_lookup (ospf->old_external_route, (struct prefix *) p); if (rn) if ((or = rn->info)) { @@ -76,11 +77,12 @@ ospf_external_route_remove (struct prefix_ipv4 *p) /* Lookup external route. */ struct ospf_route * -ospf_external_route_lookup (struct prefix_ipv4 *p) +ospf_external_route_lookup (struct ospf *ospf, + struct prefix_ipv4 *p) { struct route_node *rn; - rn = route_node_lookup (ospf_top->old_external_route, (struct prefix *) p); + rn = route_node_lookup (ospf->old_external_route, (struct prefix *) p); if (rn) { route_unlock_node (rn); @@ -166,7 +168,7 @@ ospf_external_info_add (u_char type, struct prefix_ipv4 p, rn->info = new; if (IS_DEBUG_OSPF (lsa, LSA_GENERATE)) - zlog_info ("Redistribute[%s]: %s/%d external info created.", + zlog_debug ("Redistribute[%s]: %s/%d external info created.", LOOKUP (ospf_redistributed_proto, type), inet_ntoa (p.prefix), p.prefixlen); return new; @@ -203,14 +205,15 @@ ospf_external_info_lookup (u_char type, struct prefix_ipv4 *p) } struct ospf_lsa * -ospf_external_info_find_lsa (struct prefix_ipv4 *p) +ospf_external_info_find_lsa (struct ospf *ospf, + struct prefix_ipv4 *p) { struct ospf_lsa *lsa; struct as_external_lsa *al; struct in_addr mask, id; - lsa = ospf_lsdb_lookup_by_id (ospf_top->lsdb, OSPF_AS_EXTERNAL_LSA, - p->prefix, ospf_top->router_id); + lsa = ospf_lsdb_lookup_by_id (ospf->lsdb, OSPF_AS_EXTERNAL_LSA, + p->prefix, ospf->router_id); if (!lsa) return NULL; @@ -222,8 +225,8 @@ ospf_external_info_find_lsa (struct prefix_ipv4 *p) if (mask.s_addr != al->mask.s_addr) { id.s_addr = p->prefix.s_addr | (~mask.s_addr); - lsa = ospf_lsdb_lookup_by_id (ospf_top->lsdb, OSPF_AS_EXTERNAL_LSA, - id, ospf_top->router_id); + lsa = ospf_lsdb_lookup_by_id (ospf->lsdb, OSPF_AS_EXTERNAL_LSA, + id, ospf->router_id); if (!lsa) return NULL; } @@ -234,7 +237,7 @@ ospf_external_info_find_lsa (struct prefix_ipv4 *p) /* Update ASBR status. */ void -ospf_asbr_status_update (u_char status) +ospf_asbr_status_update (struct ospf *ospf, u_char status) { zlog_info ("ASBR[Status:%d]: Update", status); @@ -242,46 +245,49 @@ ospf_asbr_status_update (u_char status) if (status) { /* Already ASBR. */ - if (OSPF_IS_ASBR) + if (IS_OSPF_ASBR (ospf)) { zlog_info ("ASBR[Status:%d]: Already ASBR", status); return; } - SET_FLAG (ospf_top->flags, OSPF_FLAG_ASBR); + SET_FLAG (ospf->flags, OSPF_FLAG_ASBR); } else { /* Already non ASBR. */ - if (! OSPF_IS_ASBR) + if (! IS_OSPF_ASBR (ospf)) { zlog_info ("ASBR[Status:%d]: Already non ASBR", status); return; } - UNSET_FLAG (ospf_top->flags, OSPF_FLAG_ASBR); + UNSET_FLAG (ospf->flags, OSPF_FLAG_ASBR); } /* Transition from/to status ASBR, schedule timer. */ - ospf_spf_calculate_schedule (); - OSPF_TIMER_ON (ospf_top->t_router_lsa_update, + ospf_spf_calculate_schedule (ospf); + OSPF_TIMER_ON (ospf->t_router_lsa_update, ospf_router_lsa_update_timer, OSPF_LSA_UPDATE_DELAY); } void ospf_redistribute_withdraw (u_char type) { + struct ospf *ospf; struct route_node *rn; struct external_info *ei; + ospf = ospf_lookup (); + /* Delete external info for specified type. */ if (EXTERNAL_INFO (type)) for (rn = route_top (EXTERNAL_INFO (type)); rn; rn = route_next (rn)) if ((ei = rn->info)) - if (ospf_external_info_find_lsa (&ei->p)) + if (ospf_external_info_find_lsa (ospf, &ei->p)) { if (is_prefix_default (&ei->p) && - ospf_top->default_originate != DEFAULT_ORIGINATE_NONE) + ospf->default_originate != DEFAULT_ORIGINATE_NONE) continue; - ospf_external_lsa_flush (type, &ei->p, ei->ifindex, ei->nexthop); + ospf_external_lsa_flush (ospf, type, &ei->p, ei->ifindex, ei->nexthop); ospf_external_info_delete (type, ei->p); } } |