ospf6d: router-id change notify to restart ospf6d

Notify user to store config and restart ospf6d
as part of router-id change cli if any of
the area active.
Store zebra router-id under ospf6, when static
router-id removed restore zebra router-id, ask
to restart ospf6d.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
This commit is contained in:
Chirag Shah 2018-02-12 13:22:04 -08:00
parent 7abe1e7e0d
commit d6927cf390
5 changed files with 38 additions and 6 deletions

View File

@ -99,6 +99,8 @@ struct ospf6_area {
/* Time stamps. */ /* Time stamps. */
struct timeval ts_spf; /* SPF calculation time stamp. */ struct timeval ts_spf; /* SPF calculation time stamp. */
uint32_t full_nbrs; /* Fully adjacent neighbors. */
}; };
#define OSPF6_AREA_ENABLE 0x01 #define OSPF6_AREA_ENABLE 0x01

View File

@ -193,7 +193,11 @@ static void ospf6_neighbor_state_change(u_char next_state,
if (prev_state == OSPF6_NEIGHBOR_LOADING && if (prev_state == OSPF6_NEIGHBOR_LOADING &&
next_state == OSPF6_NEIGHBOR_FULL) { next_state == OSPF6_NEIGHBOR_FULL) {
OSPF6_AS_EXTERN_LSA_SCHEDULE(on->ospf6_if); OSPF6_AS_EXTERN_LSA_SCHEDULE(on->ospf6_if);
on->ospf6_if->area->full_nbrs++;
} }
if (prev_state == OSPF6_NEIGHBOR_FULL)
on->ospf6_if->area->full_nbrs--;
} }
if ((prev_state == OSPF6_NEIGHBOR_EXCHANGE if ((prev_state == OSPF6_NEIGHBOR_EXCHANGE

View File

@ -335,6 +335,8 @@ DEFUN(ospf6_router_id,
int ret; int ret;
const char *router_id_str; const char *router_id_str;
u_int32_t router_id; u_int32_t router_id;
struct ospf6_area *oa;
struct listnode *node;
argv_find(argv, argc, "A.B.C.D", &idx); argv_find(argv, argc, "A.B.C.D", &idx);
router_id_str = argv[idx]->arg; router_id_str = argv[idx]->arg;
@ -346,7 +348,16 @@ DEFUN(ospf6_router_id,
} }
o->router_id_static = router_id; o->router_id_static = router_id;
if (o->router_id == 0)
for (ALL_LIST_ELEMENTS_RO(o->area_list, node, oa)) {
if (oa->full_nbrs) {
vty_out(vty,
"For this router-id change to take effect,"
" save config and restart ospf6d\n");
return CMD_SUCCESS;
}
}
o->router_id = router_id; o->router_id = router_id;
return CMD_SUCCESS; return CMD_SUCCESS;
@ -360,8 +371,22 @@ DEFUN(no_ospf6_router_id,
V4NOTATION_STR) V4NOTATION_STR)
{ {
VTY_DECLVAR_CONTEXT(ospf6, o); VTY_DECLVAR_CONTEXT(ospf6, o);
struct ospf6_area *oa;
struct listnode *node;
o->router_id_static = 0; o->router_id_static = 0;
for (ALL_LIST_ELEMENTS_RO(o->area_list, node, oa)) {
if (oa->full_nbrs) {
vty_out(vty,
"For this router-id change to take effect,"
" save config and restart ospf6d\n");
return CMD_SUCCESS;
}
}
o->router_id = 0; o->router_id = 0;
if (o->router_id_zebra.s_addr)
o->router_id = (uint32_t)o->router_id_zebra.s_addr;
return CMD_SUCCESS; return CMD_SUCCESS;
} }

View File

@ -32,6 +32,8 @@ struct ospf6 {
/* static router id */ /* static router id */
u_int32_t router_id_static; u_int32_t router_id_static;
struct in_addr router_id_zebra;
/* start time */ /* start time */
struct timeval starttime; struct timeval starttime;

View File

@ -46,8 +46,6 @@ unsigned char conf_debug_ospf6_zebra = 0;
/* information about zebra. */ /* information about zebra. */
struct zclient *zclient = NULL; struct zclient *zclient = NULL;
struct in_addr router_id_zebra;
/* Router-id update message from zebra. */ /* Router-id update message from zebra. */
static int ospf6_router_id_update_zebra(int command, struct zclient *zclient, static int ospf6_router_id_update_zebra(int command, struct zclient *zclient,
zebra_size_t length, vrf_id_t vrf_id) zebra_size_t length, vrf_id_t vrf_id)
@ -56,13 +54,14 @@ static int ospf6_router_id_update_zebra(int command, struct zclient *zclient,
struct ospf6 *o = ospf6; struct ospf6 *o = ospf6;
zebra_router_id_update_read(zclient->ibuf, &router_id); zebra_router_id_update_read(zclient->ibuf, &router_id);
router_id_zebra = router_id.u.prefix4;
if (o == NULL) if (o == NULL)
return 0; return 0;
o->router_id_zebra = router_id.u.prefix4;
if (o->router_id == 0) if (o->router_id == 0)
o->router_id = (u_int32_t)router_id_zebra.s_addr; o->router_id = (uint32_t)o->router_id_zebra.s_addr;
return 0; return 0;
} }