/**************************************************************************** * Name : amf_active_state_handler * * Description : This function is called upon receving an active state * assignment from AMF. * * Arguments : invocation - Designates a particular invocation. * cb - A pointer to the SMFD control block. * * Return Values : None * * Notes : None *****************************************************************************/ static SaAisErrorT amf_active_state_handler(smfd_cb_t * cb, SaInvocationT invocation) { SaAisErrorT rc = SA_AIS_OK; TRACE_ENTER2("HA ACTIVE request"); cb->mds_role = V_DEST_RL_ACTIVE; //Initialize the OI handle and get the selection object if (campaign_oi_init(cb) != NCSCC_RC_SUCCESS) { LOG_ER("campaign_oi_init FAIL"); rc = SA_AIS_ERR_FAILED_OPERATION; } //Read SMF configuration data and set cb data structure if (read_config_and_set_control_block(cb) != NCSCC_RC_SUCCESS) { LOG_ER("read_config_and_set_control_block FAIL"); rc = SA_AIS_ERR_FAILED_OPERATION; } //Set class implementers, recreate campaign objects and start callbackUtil thread if (campaign_oi_activate(cb) != NCSCC_RC_SUCCESS) { LOG_ER("amf_active_state_handler oi activate FAIL"); rc = SA_AIS_ERR_FAILED_OPERATION; } TRACE_LEAVE(); return rc; }
/** * Initialize smfd * * @return uns32 */ static uns32 initialize_smfd(void) { uns32 rc; TRACE_ENTER(); /* Set the behaviour of SMF-IMM interactions */ immutilWrapperProfile.errorsAreFatal = 0; /* False, no reboot when fail */ immutilWrapperProfile.nTries = 500; /* Times */ immutilWrapperProfile.retryInterval = 400; /* MS */ if (ncs_agents_startup() != NCSCC_RC_SUCCESS) { LOG_ER("ncs_agents_startup FAILED"); rc = NCSCC_RC_FAILURE; goto done; } /* Initialize smfd control block */ if (smfd_cb_init(smfd_cb) != NCSCC_RC_SUCCESS) { TRACE("smfd_cb_init FAILED"); rc = NCSCC_RC_FAILURE; goto done; } /* Create the mailbox used for communication with SMFND */ if ((rc = m_NCS_IPC_CREATE(&smfd_cb->mbx)) != NCSCC_RC_SUCCESS) { LOG_ER("m_NCS_IPC_CREATE FAILED %d", rc); goto done; } /* Attach mailbox to this thread */ if ((rc = m_NCS_IPC_ATTACH(&smfd_cb->mbx) != NCSCC_RC_SUCCESS)) { LOG_ER("m_NCS_IPC_ATTACH FAILED %d", rc); goto done; } /* Create a selection object for USR1 signal handling */ if ((rc = ncs_sel_obj_create(&smfd_cb->usr1_sel_obj)) != NCSCC_RC_SUCCESS) { LOG_ER("ncs_sel_obj_create failed"); goto done; } /* Init mds communication */ if ((rc = smfd_mds_init(smfd_cb)) != NCSCC_RC_SUCCESS) { TRACE("smfd_mds_init FAILED %d", rc); return rc; } /* Init campaign OI */ if ((rc = campaign_oi_init(smfd_cb)) != NCSCC_RC_SUCCESS) { TRACE("campaign_oi_init FAILED %d", rc); return rc; } /* Check if AMF started */ if (smfd_cb->nid_started == 0) { /* Started by AMF, so let's init AMF */ if ((rc = smfd_amf_init(smfd_cb)) != NCSCC_RC_SUCCESS) { LOG_ER("init amf failed"); goto done; } } done: TRACE_LEAVE(); return (rc); }