diff options
Diffstat (limited to 'ospf6d/ospf6_top.c')
| -rw-r--r-- | ospf6d/ospf6_top.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c index 25d968fb68..28379458d2 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); @@ -230,6 +232,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 +294,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 +312,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); |
