From 94266fa822baf9b9c9e10ac03ccec8ccf3ce0c98 Mon Sep 17 00:00:00 2001 From: Joakim Tjernlund Date: Thu, 19 Nov 2009 15:27:30 +0100 Subject: ospfd: Self nbrs needs to be rebuilt when router ID changes. Some self nbrs are identified by router_id, these needs to be rebuilt instead of just resetting router ID. Possibly one could optimize for !(virtual | ptop) links by doing oi->nbr_self->router_id = router_id instead. Router ID will change once after startup config has been read and zebra reports router ID, unless router ID has been configured in ospf. --- ospfd/ospfd.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'ospfd/ospfd.c') diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c index c55bdaeb..4062d645 100644 --- a/ospfd/ospfd.c +++ b/ospfd/ospfd.c @@ -112,8 +112,15 @@ ospf_router_id_update (struct ospf *ospf) if (!IPV4_ADDR_SAME (&router_id_old, &router_id)) { for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi)) - /* Update self-neighbor's router_id. */ - oi->nbr_self->router_id = router_id; + { + /* Some nbrs are identified by router_id, these needs + * to be rebuilt. Possible optimization would be to do + * oi->nbr_self->router_id = router_id for + * !(virtual | ptop) links + */ + ospf_nbr_delete(oi->nbr_self); + ospf_nbr_add_self(oi); + } /* If AS-external-LSA is queued, then flush those LSAs. */ if (router_id_old.s_addr == 0 && ospf->external_origin) -- cgit v1.2.3