mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-29 17:36:56 +00:00
Merge pull request #13632 from LabNConsulting/chopps/mgmt-avoid-race
mgmtd: fix possible race btw read config and backend connection
This commit is contained in:
commit
7470509390
16
mgmtd/mgmt.c
16
mgmtd/mgmt.c
@ -49,20 +49,22 @@ void mgmt_init(void)
|
|||||||
/* Initialize MGMTD Transaction module */
|
/* Initialize MGMTD Transaction module */
|
||||||
mgmt_txn_init(mm, mm->master);
|
mgmt_txn_init(mm, mm->master);
|
||||||
|
|
||||||
/* Initialize the MGMTD Backend Adapter Module */
|
|
||||||
mgmt_be_adapter_init(mm->master);
|
|
||||||
|
|
||||||
/* Initialize the MGMTD Frontend Adapter Module */
|
/* Initialize the MGMTD Frontend Adapter Module */
|
||||||
mgmt_fe_adapter_init(mm->master);
|
mgmt_fe_adapter_init(mm->master);
|
||||||
|
|
||||||
/*
|
/* Initialize the CLI frontend client */
|
||||||
* Allocates some vital data structures used by peer commands in
|
|
||||||
* vty_init
|
|
||||||
*/
|
|
||||||
vty_init_mgmt_fe();
|
vty_init_mgmt_fe();
|
||||||
|
|
||||||
/* MGMTD VTY commands installation. */
|
/* MGMTD VTY commands installation. */
|
||||||
mgmt_vty_init();
|
mgmt_vty_init();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the MGMTD Backend Adapter Module
|
||||||
|
*
|
||||||
|
* We do this after the FE stuff so that we always read our config file
|
||||||
|
* prior to any BE connection.
|
||||||
|
*/
|
||||||
|
mgmt_be_adapter_init(mm->master);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mgmt_terminate(void)
|
void mgmt_terminate(void)
|
||||||
|
@ -454,44 +454,11 @@ DEFPY(debug_mgmt, debug_mgmt_cmd,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* We need an event driven file reader for reading in config files.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void mgmt_config_read_in(struct event *event)
|
static void mgmt_config_read_in(struct event *event)
|
||||||
{
|
{
|
||||||
mgmt_vty_read_configs();
|
mgmt_vty_read_configs();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
/*
|
|
||||||
* Analog of `frr_config_read_in()`, instead of our config file though we loop
|
|
||||||
* over all daemons that have transitioned to mgmtd, loading their configs
|
|
||||||
*/
|
|
||||||
static int mgmt_config_pre_hook(struct event_loop *loop)
|
|
||||||
{
|
|
||||||
FILE *confp;
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
for (uint i = 0; i < mgmt_daemons_count; i++) {
|
|
||||||
p = asprintfrr(MTYPE_TMP, "%s/%s.conf", frr_sysconfdir,
|
|
||||||
mgmt_daemons[i]);
|
|
||||||
confp = fopen(p, "r");
|
|
||||||
if (confp == NULL) {
|
|
||||||
if (errno != ENOENT)
|
|
||||||
zlog_err("%s: couldn't read config file %s: %s",
|
|
||||||
__func__, p, safe_strerror(errno));
|
|
||||||
} else {
|
|
||||||
zlog_info("mgmtd: reading daemon config from %s", p);
|
|
||||||
vty_read_file(vty_shared_candidate_config, confp);
|
|
||||||
fclose(confp);
|
|
||||||
}
|
|
||||||
XFREE(MTYPE_TMP, p);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void mgmt_vty_init(void)
|
void mgmt_vty_init(void)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -505,8 +472,6 @@ void mgmt_vty_init(void)
|
|||||||
static_vty_init();
|
static_vty_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// hook_register(frr_config_pre, mgmt_config_pre_hook);
|
|
||||||
|
|
||||||
event_add_event(mm->master, mgmt_config_read_in, NULL, 0,
|
event_add_event(mm->master, mgmt_config_read_in, NULL, 0,
|
||||||
&mgmt_daemon_info->read_in);
|
&mgmt_daemon_info->read_in);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user