diff options
-rw-r--r-- | ospfd/ospfd.c | 11 |
1 files changed, 9 insertions, 2 deletions
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) |