diff options
Diffstat (limited to 'ospfd')
-rw-r--r-- | ospfd/ChangeLog | 7 | ||||
-rw-r--r-- | ospfd/ospf_zebra.c | 37 | ||||
-rw-r--r-- | ospfd/ospfd.c | 30 |
3 files changed, 32 insertions, 42 deletions
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index 6e1a8646..2043ad61 100644 --- a/ospfd/ChangeLog +++ b/ospfd/ChangeLog @@ -1,3 +1,10 @@ +2004-10-03 James R. Leu <jleu at mindspring.com> + + * ospf_zebra.c: Read router id related messages from zebra daemon. + Schedule router-id update thread if it's changed. + * ospfd.c: Remove own router-id selection function. Use router id from + zebra daemon if it isn't manually overriden in configuration. + 2004-09-27 Paul Jakma <paul@dishone.st> * ospf_dump.c: (ospf_ip_header_dump) Use HAVE_IP_HDRINCL_BSD_ORDER diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c index 6a675a59..3172ebc5 100644 --- a/ospfd/ospf_zebra.c +++ b/ospfd/ospf_zebra.c @@ -54,6 +54,28 @@ struct zclient *zclient = NULL; /* For registering threads. */ extern struct thread_master *master; +struct in_addr router_id_zebra; + +/* Router-id update message from zebra. */ +int +ospf_router_id_update_zebra (int command, struct zclient *zclient, + zebra_size_t length) +{ + struct ospf *ospf; + struct prefix router_id; + zebra_router_id_update_read(zclient->ibuf,&router_id); + + router_id_zebra = router_id.u.prefix4; + + ospf = ospf_lookup (); + if (ospf != NULL) + { + if (ospf->t_router_id_update == NULL) + OSPF_TIMER_ON (ospf->t_router_id_update, ospf_router_id_update_timer, + OSPF_ROUTER_ID_UPDATE_DELAY); + } + return 0; +} /* Inteface addition message from zebra. */ int @@ -148,20 +170,6 @@ zebra_interface_if_lookup (struct stream *s) return ifp; } -void -zebra_interface_if_set_value (struct stream *s, struct interface *ifp) -{ - /* Read interface's index. */ - ifp->ifindex = stream_getl (s); - - /* Read interface's value. */ - ifp->status = stream_getc (s); - ifp->flags = stream_getl (s); - ifp->metric = stream_getl (s); - ifp->mtu = stream_getl (s); - ifp->bandwidth = stream_getl (s); -} - int ospf_interface_state_up (int command, struct zclient *zclient, zebra_size_t length) @@ -1248,6 +1256,7 @@ ospf_zebra_init () /* Allocate zebra structure. */ zclient = zclient_new (); zclient_init (zclient, ZEBRA_ROUTE_OSPF); + zclient->router_id_update = ospf_router_id_update_zebra; zclient->interface_add = ospf_interface_add; zclient->interface_delete = ospf_interface_delete; zclient->interface_up = ospf_interface_state_up; diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c index bfde503d..6c6dd8de 100644 --- a/ospfd/ospfd.c +++ b/ospfd/ospfd.c @@ -61,6 +61,7 @@ static struct ospf_master ospf_master; struct ospf_master *om; extern struct zclient *zclient; +extern struct in_addr router_id_zebra; void ospf_remove_vls_through_area (struct ospf *, struct ospf_area *); @@ -68,33 +69,6 @@ void ospf_network_free (struct ospf *, struct ospf_network *); void ospf_area_free (struct ospf_area *); void ospf_network_run (struct ospf *, struct prefix *, struct ospf_area *); -/* Get Router ID from ospf interface list. */ -struct in_addr -ospf_router_id_get (struct list *if_list) -{ - struct listnode *node; - struct in_addr router_id; - - memset (&router_id, 0, sizeof (struct in_addr)); - - for (node = listhead (if_list); node; nextnode (node)) - { - struct ospf_interface *oi = getdata (node); - - if (!if_is_up (oi->ifp) || - OSPF_IF_PARAM (oi, passive_interface) == OSPF_IF_PASSIVE) - continue; - - /* Ignore virtual link interface. */ - if (oi->type != OSPF_IFTYPE_VIRTUALLINK && - oi->type != OSPF_IFTYPE_LOOPBACK) - if (IPV4_ADDR_CMP (&router_id, &oi->address->u.prefix4) < 0) - router_id = oi->address->u.prefix4; - } - - return router_id; -} - #define OSPF_EXTERNAL_LSA_ORIGINATE_DELAY 1 void @@ -111,7 +85,7 @@ ospf_router_id_update (struct ospf *ospf) if (ospf->router_id_static.s_addr != 0) router_id = ospf->router_id_static; else - router_id = ospf_router_id_get (ospf->oiflist); + router_id = router_id_zebra; ospf->router_id = router_id; |