diff --git a/radio/fhi_72/mplane/config-mplane.c b/radio/fhi_72/mplane/config-mplane.c index 7a66c6ec7a..94d3bbe49e 100644 --- a/radio/fhi_72/mplane/config-mplane.c +++ b/radio/fhi_72/mplane/config-mplane.c @@ -68,3 +68,26 @@ bool edit_config_mplane(ru_session_t *ru_session, const char *buffer, const open return true; } + +bool validate_config_mplane(ru_session_t *ru_session) +{ + int timeout = CLI_RPC_REPLY_TIMEOUT; + struct nc_rpc *rpc; + NC_WD_MODE wd = NC_WD_ALL; + NC_PARAMTYPE param = NC_PARAMTYPE_CONST; + char *src_start = NULL; + NC_DATASTORE source = NC_DATASTORE_CANDIDATE; + + MP_LOG_I("RPC request to RU \"%s\" = candidate datastore.\n", ru_session->ru_ip_add); + rpc = nc_rpc_validate(source, src_start, param); + AssertError(rpc != NULL, return false, "[MPLANE] RPC creation failed.\n"); + + bool success = rpc_send_recv((struct nc_session *)ru_session->session, rpc, wd, timeout, NULL); + AssertError(success, return false, "[MPLANE] Failed to validate candidate datastore.\n"); + + MP_LOG_I("Successfully validated candidate datastore for RU \"%s\".\n", ru_session->ru_ip_add); + + nc_rpc_free(rpc); + + return true; +} diff --git a/radio/fhi_72/mplane/config-mplane.h b/radio/fhi_72/mplane/config-mplane.h index aecf8dc348..ba3c926954 100644 --- a/radio/fhi_72/mplane/config-mplane.h +++ b/radio/fhi_72/mplane/config-mplane.h @@ -27,4 +27,6 @@ bool edit_config_mplane(ru_session_t *ru_session, const char *buffer, const openair0_config_t *oai, const size_t num_rus); +bool validate_config_mplane(ru_session_t *ru_session); + #endif /* CONFIGURE_MPLANE_H */ diff --git a/radio/fhi_72/mplane/init-mplane.c b/radio/fhi_72/mplane/init-mplane.c index 5966012945..f3560850fe 100644 --- a/radio/fhi_72/mplane/init-mplane.c +++ b/radio/fhi_72/mplane/init-mplane.c @@ -178,6 +178,9 @@ bool manage_ru(ru_session_t *ru_session, const openair0_config_t *oai, const siz if (ru_session->ru_notif.ptp_state) { success = edit_config_mplane(ru_session, operational_ds, oai, num_rus); AssertError(success, return false, "[MPLANE] Unable to edit the RU configuration.\n"); + + success = validate_config_mplane(ru_session); + AssertError(success, return false, "[MPLANE] Unable to validate the RU configuration.\n"); } free(operational_ds);