mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 16:37:27 +00:00
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:
parent
7abe1e7e0d
commit
d6927cf390
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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,8 +348,17 @@ DEFUN(ospf6_router_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
o->router_id_static = router_id;
|
o->router_id_static = router_id;
|
||||||
if (o->router_id == 0)
|
|
||||||
o->router_id = router_id;
|
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;
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user