summaryrefslogtreecommitdiffstats
path: root/ospfd/ospf_asbr.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd/ospf_asbr.c')
-rw-r--r--ospfd/ospf_asbr.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/ospfd/ospf_asbr.c b/ospfd/ospf_asbr.c
index d13bbc43..c5d199fb 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);
@@ -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);
@@ -247,7 +250,7 @@ ospf_asbr_status_update (u_char status)
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
{
@@ -257,18 +260,19 @@ ospf_asbr_status_update (u_char status)
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 = ospf_top;
struct route_node *rn;
struct external_info *ei;
@@ -276,12 +280,12 @@ ospf_redistribute_withdraw (u_char 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);
}
}