diff options
Diffstat (limited to 'ospf6d/ospf6_top.c')
| -rw-r--r-- | ospf6d/ospf6_top.c | 67 |
1 files changed, 46 insertions, 21 deletions
diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c index 25d968fb68..630b717fb3 100644 --- a/ospf6d/ospf6_top.c +++ b/ospf6d/ospf6_top.c @@ -53,6 +53,8 @@ DEFINE_QOBJ_TYPE(ospf6) /* global ospf6d variable */ struct ospf6 *ospf6; +static struct ospf6_master ospf6_master; +struct ospf6_master *om6; static void ospf6_disable(struct ospf6 *o); @@ -72,7 +74,7 @@ static void ospf6_top_lsdb_hook_remove(struct ospf6_lsa *lsa) { switch (ntohs(lsa->header->type)) { case OSPF6_LSTYPE_AS_EXTERNAL: - ospf6_asbr_lsa_remove(lsa); + ospf6_asbr_lsa_remove(lsa, NULL); break; default: @@ -96,11 +98,16 @@ static void ospf6_top_route_hook_remove(struct ospf6_route *route) static void ospf6_top_brouter_hook_add(struct ospf6_route *route) { if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL)) { - char buf[PREFIX2STR_BUFFER]; - - prefix2str(&route->prefix, buf, sizeof(buf)); - zlog_debug("%s: brouter %s add with nh count %u", - __PRETTY_FUNCTION__, buf, listcount(route->nh_list)); + uint32_t brouter_id; + char brouter_name[16]; + + brouter_id = ADV_ROUTER_IN_PREFIX(&route->prefix); + inet_ntop(AF_INET, &brouter_id, brouter_name, + sizeof(brouter_name)); + zlog_debug("%s: brouter %s add with adv router %x nh count %u", + __PRETTY_FUNCTION__, brouter_name, + route->path.origin.adv_router, + listcount(route->nh_list)); } ospf6_abr_examin_brouter(ADV_ROUTER_IN_PREFIX(&route->prefix)); ospf6_asbr_lsentry_add(route); @@ -110,11 +117,15 @@ static void ospf6_top_brouter_hook_add(struct ospf6_route *route) static void ospf6_top_brouter_hook_remove(struct ospf6_route *route) { if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL)) { - char buf[PREFIX2STR_BUFFER]; + uint32_t brouter_id; + char brouter_name[16]; - prefix2str(&route->prefix, buf, sizeof(buf)); + brouter_id = ADV_ROUTER_IN_PREFIX(&route->prefix); + inet_ntop(AF_INET, &brouter_id, brouter_name, + sizeof(brouter_name)); zlog_debug("%s: brouter %s del with nh count %u", - __PRETTY_FUNCTION__, buf, listcount(route->nh_list)); + __PRETTY_FUNCTION__, brouter_name, + listcount(route->nh_list)); } route->flag |= OSPF6_ROUTE_REMOVE; ospf6_abr_examin_brouter(ADV_ROUTER_IN_PREFIX(&route->prefix)); @@ -230,6 +241,13 @@ static void ospf6_disable(struct ospf6 *o) } } +void ospf6_master_init(void) +{ + memset(&ospf6_master, 0, sizeof(struct ospf6_master)); + + om6 = &ospf6_master; +} + static int ospf6_maxage_remover(struct thread *thread) { struct ospf6 *o = (struct ospf6 *)THREAD_ARG(thread); @@ -285,6 +303,17 @@ void ospf6_maxage_remove(struct ospf6 *o) &o->maxage_remover); } +void ospf6_router_id_update(void) +{ + if (!ospf6) + return; + + if (ospf6->router_id_static != 0) + ospf6->router_id = ospf6->router_id_static; + else + ospf6->router_id = om6->zebra_router_id; +} + /* start ospf6 */ DEFUN_NOSH (router_ospf6, router_ospf6_cmd, @@ -292,9 +321,11 @@ DEFUN_NOSH (router_ospf6, ROUTER_STR OSPF6_STR) { - if (ospf6 == NULL) + if (ospf6 == NULL) { ospf6 = ospf6_create(); - + if (ospf6->router_id == 0) + ospf6_router_id_update(); + } /* set current ospf point. */ VTY_PUSH_CONTEXT(OSPF6_NODE, ospf6); @@ -394,21 +425,15 @@ DEFUN(no_ospf6_router_id, #if CONFDATE > 20180828 CPP_NOTICE("ospf6: `router-id A.B.C.D` deprecated 2017/08/28") #endif -ALIAS_HIDDEN(ospf6_router_id, - ospf6_router_id_hdn_cmd, - "router-id A.B.C.D", - "Configure OSPF6 Router-ID\n" - V4NOTATION_STR) +ALIAS_HIDDEN(ospf6_router_id, ospf6_router_id_hdn_cmd, "router-id A.B.C.D", + "Configure OSPF6 Router-ID\n" V4NOTATION_STR) #if CONFDATE > 20180828 CPP_NOTICE("ospf6: `no router-id A.B.C.D` deprecated 2017/08/28") #endif -ALIAS_HIDDEN(no_ospf6_router_id, - no_ospf6_router_id_hdn_cmd, +ALIAS_HIDDEN(no_ospf6_router_id, no_ospf6_router_id_hdn_cmd, "no router-id [A.B.C.D]", - NO_STR - "Configure OSPF6 Router-ID\n" - V4NOTATION_STR) + NO_STR "Configure OSPF6 Router-ID\n" V4NOTATION_STR) DEFUN (ospf6_log_adjacency_changes, ospf6_log_adjacency_changes_cmd, |
