//----------------------------------------------------------------------------- void send_rlc_tm_control_primitive (struct rlc_tm_entity *rlcP, module_id_t module_idP, mem_block_t *cprimitiveP) { //----------------------------------------------------------------------------- switch (((struct crlc_primitive *) cprimitiveP->data)->type) { case CRLC_CONFIG_REQ: rlcP->module_id = module_idP; switch (((struct crlc_primitive *) cprimitiveP->data)->primitive.c_config_req.parameters.tm_parameters.e_r) { case RLC_E_R_ESTABLISHMENT: if (rlc_tm_fsm_notify_event (rlcP, RLC_TM_RECEIVE_CRLC_CONFIG_REQ_ENTER_DATA_TRANSFER_READY_STATE_EVENT)) { rlc_tm_set_configured_parameters (rlcP, cprimitiveP); // the order of the calling of procedures... rlc_tm_reset_state_variables (rlcP); // ...must not ... } break; case RLC_E_R_RELEASE: if (rlc_tm_fsm_notify_event (rlcP, RLC_TM_RECEIVE_CRLC_CONFIG_REQ_ENTER_NULL_STATE_EVENT)) { rlc_tm_free_all_resources (rlcP); } break; default: msg ("[RLC_TM][ERROR] send_rlc_tm_control_primitive(CRLC_CONFIG_REQ) unknown parameter E_R\n"); } break; default: msg ("[RLC_TM %p][ERROR] send_rlc_tm_control_primitive(UNKNOWN CPRIMITIVE)\n", rlcP); } free_mem_block (cprimitiveP); }
//----------------------------------------------------------------------------- void rlc_tm_configure( const protocol_ctxt_t* const ctxt_pP, rlc_tm_entity_t * const rlcP, const boolean_t is_uplink_downlinkP) { rlcP->is_uplink_downlink = is_uplink_downlinkP; rlc_tm_reset_state_variables (ctxt_pP, rlcP); }