fembms: code cleanup
Signed-off-by: Javier Morgade <javier.morgade@ieee.org>
This commit is contained in:
@@ -921,7 +921,7 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
|
||||
((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xFF;
|
||||
msi_pmch_stop=0;
|
||||
}
|
||||
LOG_I(MAC,"frameP %d, subframeP %d LCID %ld rlc_status.bytes_in_buffer %d stop_sf_LSB %d stop_sf_MSB %d msi_pmch_stop %d sf_AllocEnd_r9 %ld, msi_length %d\n",frameP,subframeP,((MSI_ELEMENT *) msi_ptr)->lcid,rlc_status.bytes_in_buffer,((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB,((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB, msi_pmch_stop,cc->pmch_Config[mbms_mch_i]->sf_AllocEnd_r9, msi_length);
|
||||
LOG_I(MAC,"frameP %d, subframeP %d LCID %d rlc_status.bytes_in_buffer %d stop_sf_LSB %d stop_sf_MSB %d msi_pmch_stop %d sf_AllocEnd_r9 %ld, msi_length %d\n",frameP,subframeP,((MSI_ELEMENT *) msi_ptr)->lcid,rlc_status.bytes_in_buffer,((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB,((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB, msi_pmch_stop,cc->pmch_Config[mbms_mch_i]->sf_AllocEnd_r9, msi_length);
|
||||
}
|
||||
|
||||
memcpy((char*)buffer_pointer,
|
||||
|
||||
@@ -74,7 +74,7 @@ extern module_id_t next_Mod_id;
|
||||
|
||||
int mbms_rab_id=2047;//[8] = {2047,2047,2047,2047,2047,2047,2047,2047};
|
||||
static int mbms_mch_i=0;
|
||||
static int num_msi_per_CSA[28];
|
||||
//static int num_msi_per_CSA[28];
|
||||
|
||||
|
||||
/*
|
||||
@@ -995,14 +995,14 @@ int ue_query_p_mch_info(module_id_t module_idP, uint32_t frameP, uint32_t subfra
|
||||
//static int common_num_sf_alloc=0;
|
||||
//static int x=0;
|
||||
int ue_query_mch_fembms(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_t subframe, uint8_t eNB_index,uint8_t *sync_area, uint8_t *mcch_active) {
|
||||
int i = 0, j = 0,/* ii = 0,*/ msi_pos = -1, mcch_mcs = -1, mtch_mcs = -1, l=0,ii=0;
|
||||
int i = 0, j = 0,/* ii = 0,*/ msi_pos = -1, mcch_mcs = -1, mtch_mcs = -1, l=0/*,ii=0*/;
|
||||
int mcch_flag = 0, mtch_flag = 0, msi_flag = 0;
|
||||
int alloc_offset=0;
|
||||
uint32_t period;
|
||||
//uint16_t num_non_mbsfn_SubframeConfig=0;
|
||||
long mch_scheduling_period = -1;
|
||||
uint8_t mch_lcid = 0;
|
||||
int first_pos=0;
|
||||
//int first_pos=0;
|
||||
|
||||
if(UE_mac_inst[module_idP].non_mbsfn_SubframeConfig == NULL )
|
||||
return -1;
|
||||
|
||||
@@ -521,6 +521,7 @@ int MCE_send_MBMS_SCHEDULING_INFORMATION(instance_t instance, /*uint32_t assoc_i
|
||||
mbsfn_subframe_configuration->radioframeAllocationPeriod = m2ap_mbms_scheduling_information->mbms_area_config_list[i].mbms_sf_config_list[j].radioframe_allocation_period;
|
||||
mbsfn_subframe_configuration->radioframeAllocationOffset = m2ap_mbms_scheduling_information->mbms_area_config_list[i].mbms_sf_config_list[j].radioframe_allocation_offset;
|
||||
if(m2ap_mbms_scheduling_information->mbms_area_config_list[i].mbms_sf_config_list[j].is_four_sf){
|
||||
LOG_I(M2AP,"is_four_sf\n");
|
||||
mbsfn_subframe_configuration->subframeAllocation.present = M2AP_MBSFN_Subframe_Configuration__subframeAllocation_PR_fourFrames;
|
||||
mbsfn_subframe_configuration->subframeAllocation.choice.oneFrame.buf = MALLOC(3);
|
||||
mbsfn_subframe_configuration->subframeAllocation.choice.oneFrame.buf[2] = ((m2ap_mbms_scheduling_information->mbms_area_config_list[i].mbms_sf_config_list[j].subframe_allocation) & 0xFF);
|
||||
@@ -530,6 +531,7 @@ int MCE_send_MBMS_SCHEDULING_INFORMATION(instance_t instance, /*uint32_t assoc_i
|
||||
mbsfn_subframe_configuration->subframeAllocation.choice.oneFrame.bits_unused = 0;
|
||||
|
||||
}else{
|
||||
LOG_I(M2AP,"is_one_sf\n");
|
||||
mbsfn_subframe_configuration->subframeAllocation.present = M2AP_MBSFN_Subframe_Configuration__subframeAllocation_PR_oneFrame;
|
||||
mbsfn_subframe_configuration->subframeAllocation.choice.oneFrame.buf = MALLOC(1);
|
||||
mbsfn_subframe_configuration->subframeAllocation.choice.oneFrame.size = 1;
|
||||
@@ -1357,11 +1359,10 @@ int MCE_handle_MBMS_SESSION_UPDATE_RESPONSE(instance_t instance,
|
||||
|
||||
|
||||
|
||||
int MCE_handle_MBMS_SESSION_UPDATE_FAILURE(instance_t instance,
|
||||
uint32_t assoc_id,
|
||||
uint32_t stream,
|
||||
M2AP_M2AP_PDU_t *pdu){
|
||||
int MCE_handle_MBMS_SESSION_UPDATE_FAILURE(instance_t instance,module_id_t du_mod_idP){
|
||||
|
||||
AssertFatal(1==0,"Not implemented yet\n");
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1378,16 +1379,138 @@ int MCE_handle_MBMS_SERVICE_COUNTING_RESPONSE(instance_t instance,
|
||||
uint32_t assoc_id,
|
||||
uint32_t stream,
|
||||
M2AP_M2AP_PDU_t *pdu){
|
||||
AssertFatal(1==0,"Not implemented yet\n");
|
||||
//int i;
|
||||
//AssertFatal(1==0,"Not implemented yet\n");
|
||||
LOG_D(M2AP, "MCE_handle_MBMS_SERVICE_COUNTING_RESPONSE\n");
|
||||
|
||||
AssertFatal(pdu->present == M2AP_M2AP_PDU_PR_successfulOutcome,
|
||||
"pdu->present != M2AP_M2AP_PDU_PR_successfulOutcome\n");
|
||||
AssertFatal(pdu->choice.successfulOutcome.procedureCode == M2AP_ProcedureCode_id_mbmsServiceCounting,
|
||||
"pdu->choice.successfulOutcome->procedureCode != M2AP_ProcedureCode_id_mbmsServiceCounting\n");
|
||||
AssertFatal(pdu->choice.successfulOutcome.criticality == M2AP_Criticality_reject,
|
||||
"pdu->choice.successfulOutcome->criticality != M2AP_Criticality_reject\n");
|
||||
AssertFatal(pdu->choice.successfulOutcome.value.present == M2AP_SuccessfulOutcome__value_PR_MbmsServiceCountingResponse,
|
||||
"pdu->choice.successfulOutcome.value.present != M2AP_SuccessfulOutcome__value_PR_MbmsServiceCountingResponse\n");
|
||||
|
||||
|
||||
M2AP_MbmsServiceCountingResponse_t *in = &pdu->choice.successfulOutcome.value.choice.MbmsServiceCountingResponse;
|
||||
//M2AP_MbmsServiceCountingResponse_Ies_t *ie;
|
||||
//int MCE_MBMS_M2AP_ID=-1;
|
||||
//int ENB_MBMS_M2AP_ID=-1;
|
||||
|
||||
|
||||
MessageDef *msg_g = itti_alloc_new_message(TASK_M2AP_MCE,M2AP_MBMS_SERVICE_COUNTING_RESP); //TODO
|
||||
|
||||
LOG_D(M2AP, "M2AP: MbmsServiceCounting-Resp: protocolIEs.list.count %d\n",
|
||||
in->protocolIEs.list.count);
|
||||
for (int i=0;i < in->protocolIEs.list.count; i++) {
|
||||
//ie = in->protocolIEs.list.array[i];
|
||||
// switch (ie->id) {
|
||||
// case M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID:
|
||||
// AssertFatal(ie->criticality == M2AP_Criticality_reject,
|
||||
// "ie->criticality != M2AP_Criticality_reject\n");
|
||||
// AssertFatal(ie->value.present == M2AP_SessionStartResponse_Ies__value_PR_MCE_MBMS_M2AP_ID,
|
||||
// "ie->value.present != M2AP_sessionStartResponse_IEs__value_PR_MCE_MBMS_M2AP_ID\n");
|
||||
// MCE_MBMS_M2AP_ID=ie->value.choice.MCE_MBMS_M2AP_ID;
|
||||
// LOG_D(M2AP, "M2AP: SessionStart-Resp: MCE_MBMS_M2AP_ID %d\n",
|
||||
// MCE_MBMS_M2AP_ID);
|
||||
// break;
|
||||
// case M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID:
|
||||
// AssertFatal(ie->criticality == M2AP_Criticality_reject,
|
||||
// "ie->criticality != M2AP_Criticality_reject\n");
|
||||
// AssertFatal(ie->value.present == M2AP_SessionStartResponse_Ies__value_PR_ENB_MBMS_M2AP_ID,
|
||||
// "ie->value.present != M2AP_sessionStartResponse_Ies__value_PR_ENB_MBMS_M2AP_ID\n");
|
||||
// ENB_MBMS_M2AP_ID=ie->value.choice.ENB_MBMS_M2AP_ID;
|
||||
// LOG_D(M2AP, "M2AP: SessionStart-Resp: ENB_MBMS_M2AP_ID %d\n",
|
||||
// ENB_MBMS_M2AP_ID);
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
|
||||
//AssertFatal(MCE_MBMS_M2AP_ID!=-1,"MCE_MBMS_M2AP_ID was not sent\n");
|
||||
//AssertFatal(ENB_MBMS_M2AP_ID!=-1,"ENB_MBMS_M2AP_ID was not sent\n");
|
||||
//M2AP_SESSION_START_RESP(msg_p).
|
||||
// MSC_LOG_RX_MESSAGE(
|
||||
// MSC_M2AP_MCE,
|
||||
// MSC_M2AP_ENB,
|
||||
//return 0;
|
||||
// 0,
|
||||
// 0,
|
||||
// MSC_AS_TIME_FMT" MCE_handle_M2_SESSION_START_RESPONSE successfulOutcome assoc_id %d",
|
||||
// 0,0,//MSC_AS_TIME_ARGS(ctxt_pP),
|
||||
// assoc_id);
|
||||
//
|
||||
//LOG_D(M2AP, "Sending ITTI message to ENB_APP with assoc_id (%d->%d)\n",
|
||||
//assoc_id,ENB_MODULE_ID_TO_INSTANCE(assoc_id));
|
||||
|
||||
itti_send_msg_to_task(TASK_MCE_APP, ENB_MODULE_ID_TO_INSTANCE(assoc_id), msg_g);
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
int MCE_handle_MBMS_SESSION_COUNTING_FAILURE(instance_t instance,
|
||||
uint32_t assoc_id,
|
||||
uint32_t stream,
|
||||
M2AP_M2AP_PDU_t *pdu){
|
||||
AssertFatal(1==0,"Not implemented yet\n");
|
||||
int MCE_handle_MBMS_SESSION_COUNTING_FAILURE(instance_t instance, module_id_t du_mod_idP){
|
||||
|
||||
M2AP_M2AP_PDU_t pdu;
|
||||
M2AP_MbmsServiceCountingRequest_t *out;
|
||||
M2AP_MbmsServiceCountingRequest_Ies_t *ie;
|
||||
|
||||
uint8_t *buffer;
|
||||
uint32_t len;
|
||||
//int i=0;
|
||||
//int j=0;
|
||||
|
||||
/* Create */
|
||||
/* 0. pdu Type */
|
||||
memset(&pdu, 0, sizeof(pdu));
|
||||
pdu.present = M2AP_M2AP_PDU_PR_initiatingMessage;
|
||||
//pdu.choice.initiatingMessage = (M2AP_InitiatingMessage_t *)calloc(1, sizeof(M2AP_InitiatingMessage_t));
|
||||
pdu.choice.initiatingMessage.procedureCode = M2AP_ProcedureCode_id_mbmsServiceCounting;
|
||||
pdu.choice.initiatingMessage.criticality = M2AP_Criticality_reject;
|
||||
pdu.choice.initiatingMessage.value.present = M2AP_InitiatingMessage__value_PR_MbmsServiceCountingRequest;
|
||||
out = &pdu.choice.initiatingMessage.value.choice.MbmsServiceCountingRequest;
|
||||
|
||||
/* mandatory */
|
||||
/* c1. MCCH_Update_Time */ //long
|
||||
ie=(M2AP_MbmsServiceCountingRequest_Ies_t *)calloc(1,sizeof(M2AP_MbmsSchedulingInformation_Ies_t));
|
||||
ie->id = M2AP_ProtocolIE_ID_id_MCCH_Update_Time;
|
||||
ie->criticality = M2AP_Criticality_reject;
|
||||
ie->value.present = M2AP_MbmsServiceCountingRequest_Ies__value_PR_MCCH_Update_Time;
|
||||
//ie->value.choice.MCCH_Update_Time = ;
|
||||
//ie->value.choice.MCCH_Update_Time = m2ap_mbms_scheduling_information->mcch_update_time;
|
||||
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
|
||||
/* mandatory */
|
||||
/* c1. MCE_MBMS_M2AP_ID (integer value) */ //long
|
||||
ie = (M2AP_MbmsServiceCountingRequest_Ies_t *)calloc(1, sizeof(M2AP_MbmsServiceCountingRequest_Ies_t));
|
||||
ie->id = M2AP_ProtocolIE_ID_id_MBSFN_Area_ID;
|
||||
ie->criticality = M2AP_Criticality_reject;
|
||||
ie->value.present = M2AP_MbmsServiceCountingRequest_Ies__value_PR_MBSFN_Area_ID;
|
||||
//ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
/* mandatory */
|
||||
/* c2. TMGI (integrer value) */
|
||||
ie = (M2AP_MbmsServiceCountingRequest_Ies_t *)calloc(1, sizeof(M2AP_MbmsServiceCountingRequest_Ies_t ));
|
||||
ie->id = M2AP_ProtocolIE_ID_id_MBMS_Counting_Request_Session;
|
||||
ie->criticality = M2AP_Criticality_reject;
|
||||
ie->value.present = M2AP_MbmsServiceCountingRequest_Ies__value_PR_MBMS_Counting_Request_Session;
|
||||
|
||||
//M2AP_MBMS_Counting_Request_Session_t * m2ap_mbms_counting_request_session = &ie->value.choice.MBMS_Counting_Request_Session;
|
||||
|
||||
//&ie->choice.TMGI.pLMN_Identity);
|
||||
//INT16_TO_OCTET_STRING(0,&ie->choice.TMGI.serviceId);
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
if (m2ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
||||
LOG_E(M2AP, "Failed to encode MBMS Service Counting Results Report\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -150,10 +150,7 @@ int MCE_handle_MBMS_SESSION_UPDATE_RESPONSE(instance_t instance,
|
||||
uint32_t stream,
|
||||
M2AP_M2AP_PDU_t *pdu);
|
||||
|
||||
int MCE_handle_MBMS_SESSION_UPDATE_FAILURE(instance_t instance,
|
||||
uint32_t assoc_id,
|
||||
uint32_t stream,
|
||||
M2AP_M2AP_PDU_t *pdu);
|
||||
int MCE_handle_MBMS_SESSION_UPDATE_FAILURE(instance_t instance,module_id_t du_mod_idP);
|
||||
|
||||
/*
|
||||
* Service Counting Request
|
||||
@@ -165,10 +162,7 @@ int MCE_handle_MBMS_SERVICE_COUNTING_RESPONSE(instance_t instance,
|
||||
uint32_t stream,
|
||||
M2AP_M2AP_PDU_t *pdu);
|
||||
|
||||
int MCE_handle_MBMS_SESSION_COUNTING_FAILURE(instance_t instance,
|
||||
uint32_t assoc_id,
|
||||
uint32_t stream,
|
||||
M2AP_M2AP_PDU_t *pdu);
|
||||
int MCE_handle_MBMS_SESSION_COUNTING_FAILURE(instance_t instance, module_id_t du_mod_idP);
|
||||
/*
|
||||
* Service Counting Results Report
|
||||
*/
|
||||
|
||||
@@ -142,6 +142,22 @@ void m2ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_associa
|
||||
sctp_new_association_resp->ulp_cnx_id);
|
||||
//m2ap_handle_m2_setup_message(instance_p, m2ap_enb_data_p,
|
||||
// sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN);
|
||||
|
||||
sleep(4);
|
||||
int index;
|
||||
/* Trying to connect to the provided list of eNB ip address */
|
||||
for (index = 0; index < instance_p->nb_m2; index++) {
|
||||
//M2AP_INFO("eNB[%d] eNB id %u acting as an initiator (client)\n",
|
||||
// instance_id, instance->eNB_id);
|
||||
m2ap_eNB_register_eNB(instance_p,
|
||||
&instance_p->target_mce_m2_ip_address[index],
|
||||
&instance_p->enb_m2_ip_address,
|
||||
instance_p->sctp_in_streams,
|
||||
instance_p->sctp_out_streams,
|
||||
instance_p->enb_port_for_M2C,
|
||||
instance_p->multi_sd);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -304,6 +320,8 @@ void m2ap_eNB_handle_register_eNB(instance_t instance,
|
||||
DevCheck(new_instance->mcc == m2ap_register_eNB->mcc, new_instance->mcc, m2ap_register_eNB->mcc, 0);
|
||||
DevCheck(new_instance->mnc == m2ap_register_eNB->mnc, new_instance->mnc, m2ap_register_eNB->mnc, 0);
|
||||
M2AP_WARN("eNB[%d] already registered\n", instance);
|
||||
|
||||
|
||||
} else {
|
||||
new_instance = calloc(1, sizeof(m2ap_eNB_instance_t));
|
||||
DevAssert(new_instance != NULL);
|
||||
|
||||
@@ -163,8 +163,12 @@ int eNB_handle_MBMS_SCHEDULING_INFORMATION(instance_t instance,
|
||||
M2AP_MBMS_SCHEDULING_INFORMATION(message_p).mbms_area_config_list[i].mbms_sf_config_list[j].radioframe_allocation_period = m2ap_mbsfn_sf_configuration->radioframeAllocationPeriod;
|
||||
M2AP_MBMS_SCHEDULING_INFORMATION(message_p).mbms_area_config_list[i].mbms_sf_config_list[j].radioframe_allocation_offset = m2ap_mbsfn_sf_configuration->radioframeAllocationOffset;
|
||||
if( m2ap_mbsfn_sf_configuration->subframeAllocation.present == M2AP_MBSFN_Subframe_Configuration__subframeAllocation_PR_fourFrames ) {
|
||||
LOG_I(RRC,"is_four_sf\n");
|
||||
M2AP_MBMS_SCHEDULING_INFORMATION(message_p).mbms_area_config_list[i].mbms_sf_config_list[j].is_four_sf = 1;
|
||||
M2AP_MBMS_SCHEDULING_INFORMATION(message_p).mbms_area_config_list[i].mbms_sf_config_list[j].subframe_allocation = m2ap_mbsfn_sf_configuration->subframeAllocation.choice.oneFrame.buf[0] | (m2ap_mbsfn_sf_configuration->subframeAllocation.choice.oneFrame.buf[1]<<8) | (m2ap_mbsfn_sf_configuration->subframeAllocation.choice.oneFrame.buf[0]<<16);
|
||||
}else{
|
||||
LOG_I(RRC,"is_one_sf\n");
|
||||
M2AP_MBMS_SCHEDULING_INFORMATION(message_p).mbms_area_config_list[i].mbms_sf_config_list[j].is_four_sf = 0;
|
||||
M2AP_MBMS_SCHEDULING_INFORMATION(message_p).mbms_area_config_list[i].mbms_sf_config_list[j].subframe_allocation = (m2ap_mbsfn_sf_configuration->subframeAllocation.choice.oneFrame.buf[0] >> 2) & 0x3F;
|
||||
}
|
||||
}
|
||||
@@ -1262,46 +1266,226 @@ int eNB_handle_MBMS_SERVICE_COUNTING_REQ(instance_t instance,
|
||||
uint32_t stream,
|
||||
M2AP_M2AP_PDU_t *pdu)
|
||||
{
|
||||
LOG_D(M2AP, "eNB_handle_MBMS_SERVICE_COUNTING_REQUEST assoc_id %d\n",assoc_id);
|
||||
|
||||
MessageDef *message_p;
|
||||
LOG_D(M2AP, "eNB_handle_MBMS_SERVICE_COUNTING_REQUEST assoc_id %d\n",assoc_id);
|
||||
|
||||
//MessageDef *message_p;
|
||||
//M2AP_MbmsServiceCountingRequest_t *container;
|
||||
//M2AP_MbmsServiceCountingRequest_Ies_t *ie;
|
||||
M2AP_MbmsServiceCountingRequest_t *in;
|
||||
M2AP_MbmsServiceCountingRequest_Ies_t *ie;
|
||||
//int i = 0;
|
||||
int j;
|
||||
|
||||
DevAssert(pdu != NULL);
|
||||
|
||||
// container = &pdu->choice.initiatingMessage.value.choice.MbmsServiceCountingRequest;
|
||||
in = &pdu->choice.initiatingMessage.value.choice.MbmsServiceCountingRequest;
|
||||
|
||||
/* M2 Setup Request == Non UE-related procedure -> stream 0 */
|
||||
if (stream != 0) {
|
||||
LOG_D(M2AP, "[SCTP %d] Received MMBS session start request on stream != 0 (%d)\n",
|
||||
LOG_D(M2AP, "[SCTP %d] Received MMBS service Counting Request on stream != 0 (%d)\n",
|
||||
assoc_id, stream);
|
||||
}
|
||||
|
||||
message_p = itti_alloc_new_message (TASK_M2AP_ENB, M2AP_MBMS_SERVICE_COUNTING_REQ);
|
||||
for (j=0;j < in->protocolIEs.list.count; j++) {
|
||||
ie = in->protocolIEs.list.array[j];
|
||||
switch (ie->id) {
|
||||
case M2AP_ProtocolIE_ID_id_MCCH_Update_Time:
|
||||
AssertFatal(ie->criticality == M2AP_Criticality_reject,
|
||||
"ie->criticality != M2AP_Criticality_reject\n");
|
||||
AssertFatal(ie->value.present == M2AP_MbmsServiceCountingRequest_Ies__value_PR_MCCH_Update_Time,
|
||||
"ie->value.present != M2AP_MbmsServiceCountingRequest_Ies__value_PR_MCCH_Update_Time\n");
|
||||
LOG_D(M2AP, "M2AP: : MCCH_Update_Time \n");
|
||||
break;
|
||||
case M2AP_ProtocolIE_ID_id_MBSFN_Area_ID:
|
||||
AssertFatal(ie->criticality == M2AP_Criticality_reject,
|
||||
"ie->criticality != M2AP_Criticality_reject\n");
|
||||
AssertFatal(ie->value.present == M2AP_MbmsServiceCountingRequest_Ies__value_PR_MBSFN_Area_ID,
|
||||
"ie->value.present != M2AP_MbmsServiceCountingRequest_Ies__value_PR_MBSFN_Area_ID\n");
|
||||
LOG_D(M2AP, "M2AP: : MBSFN_Area_ID \n");
|
||||
break;
|
||||
case M2AP_ProtocolIE_ID_id_MBMS_Counting_Request_Session:
|
||||
AssertFatal(ie->criticality == M2AP_Criticality_reject,
|
||||
"ie->criticality != M2AP_Criticality_reject\n");
|
||||
AssertFatal(ie->value.present == M2AP_MbmsServiceCountingRequest_Ies__value_PR_MBMS_Counting_Request_Session,
|
||||
"ie->value.present != M2AP_MbmsServiceCountingRequest_Ies__value_PR_MBMS_Counting_Request_Session\n");
|
||||
LOG_D(M2AP, "M2AP: : MBMS_Counting_Request_Session \n");
|
||||
|
||||
//ie->value.choice.MBMS_Counting_Request_Session.list.count;
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
itti_send_msg_to_task(TASK_ENB_APP, ENB_MODULE_ID_TO_INSTANCE(instance), message_p);
|
||||
|
||||
|
||||
//message_p = itti_alloc_new_message (TASK_M2AP_ENB, M2AP_MBMS_SERVICE_COUNTING_REQ);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
int eNB_send_MBMS_SERVICE_COUNTING_REPORT(instance_t instance, m2ap_mbms_service_counting_report_t * m2ap_mbms_service_counting_report)
|
||||
{
|
||||
AssertFatal(1==0,"Not implemented yet\n");
|
||||
M2AP_M2AP_PDU_t pdu;
|
||||
M2AP_MbmsServiceCountingResultsReport_t *out;
|
||||
M2AP_MbmsServiceCountingResultsReport_Ies_t *ie;
|
||||
|
||||
uint8_t *buffer;
|
||||
uint32_t len;
|
||||
//int i = 0;
|
||||
//
|
||||
// memset(&pdu, 0, sizeof(pdu));
|
||||
pdu.present = M2AP_M2AP_PDU_PR_initiatingMessage;
|
||||
//pdu.choice.initiatingMessage = (M2AP_InitiatingMessage_t *)calloc(1, sizeof(M2AP_InitiatingMessage_t));
|
||||
pdu.choice.initiatingMessage.procedureCode = M2AP_ProcedureCode_id_mbmsServiceCountingResultsReport;
|
||||
pdu.choice.initiatingMessage.criticality = M2AP_Criticality_reject;
|
||||
pdu.choice.initiatingMessage.value.present = M2AP_InitiatingMessage__value_PR_MbmsServiceCountingResultsReport;
|
||||
out = &pdu.choice.initiatingMessage.value.choice.MbmsServiceCountingResultsReport;
|
||||
|
||||
|
||||
/* Create */
|
||||
/* 0. Message Type */
|
||||
memset(&pdu, 0, sizeof(pdu));
|
||||
pdu.present = M2AP_M2AP_PDU_PR_initiatingMessage;
|
||||
//pdu.choice.successfulOutcome = (M2AP_SuccessfulOutcome_t *)calloc(1, sizeof(M2AP_SuccessfulOutcome_t));
|
||||
pdu.choice.initiatingMessage.procedureCode = M2AP_ProcedureCode_id_mbmsServiceCountingResultsReport;
|
||||
pdu.choice.initiatingMessage.criticality = M2AP_Criticality_reject;
|
||||
pdu.choice.initiatingMessage.value.present = M2AP_InitiatingMessage__value_PR_MbmsServiceCountingResultsReport;
|
||||
out = &pdu.choice.initiatingMessage.value.choice.MbmsServiceCountingResultsReport;
|
||||
|
||||
/* mandatory */
|
||||
/* c1. MBSFN_Area_ID (integer value) */ //long
|
||||
ie = (M2AP_MbmsServiceCountingResultsReport_Ies_t *)calloc(1, sizeof(M2AP_MbmsServiceCountingResultsReport_Ies_t));
|
||||
ie->id = M2AP_ProtocolIE_ID_id_MBSFN_Area_ID;
|
||||
ie->criticality = M2AP_Criticality_reject;
|
||||
ie->value.present = M2AP_MbmsServiceCountingResultsReport_Ies__value_PR_MBSFN_Area_ID;
|
||||
//ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
/* mandatory */
|
||||
/* c1. MBSFN_Area_ID (integer value) */ //long
|
||||
ie = (M2AP_MbmsServiceCountingResultsReport_Ies_t *)calloc(1, sizeof(M2AP_MbmsServiceCountingResultsReport_Ies_t));
|
||||
ie->id = M2AP_ProtocolIE_ID_id_MBMS_Counting_Result_List;
|
||||
ie->criticality = M2AP_Criticality_reject;
|
||||
ie->value.present = M2AP_MbmsServiceCountingResultsReport_Ies__value_PR_MBMS_Counting_Result_List;
|
||||
//ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
|
||||
M2AP_MBMS_Counting_Result_List_t * m2ap_mbms_counting_result_list = &ie->value.choice.MBMS_Counting_Result_List;
|
||||
|
||||
M2AP_MBMS_Counting_Result_Item_t * m2ap_mbms_counting_result_item = (M2AP_MBMS_Counting_Result_Item_t*)calloc(1,sizeof(M2AP_MBMS_Counting_Result_Item_t));
|
||||
m2ap_mbms_counting_result_item->id = M2AP_ProtocolIE_ID_id_MBMS_Counting_Result_Item;
|
||||
m2ap_mbms_counting_result_item->criticality = M2AP_Criticality_reject;
|
||||
m2ap_mbms_counting_result_item->value.present = M2AP_MBMS_Counting_Result_Item__value_PR_MBMS_Counting_Result;
|
||||
M2AP_MBMS_Counting_Result_t * m2ap_mbms_counting_result = &m2ap_mbms_counting_result_item->value.choice.MBMS_Counting_Result;
|
||||
|
||||
M2AP_TMGI_t * tmgi = &m2ap_mbms_counting_result->tmgi;
|
||||
MCC_MNC_TO_PLMNID(0,0,3,&tmgi->pLMNidentity);/*instance_p->mcc, instance_p->mnc, instance_p->mnc_digit_length,*/
|
||||
uint8_t TMGI[5] = {4,3,2,1,0};
|
||||
OCTET_STRING_fromBuf(&tmgi->serviceID,(const char*)&TMGI[2],3);
|
||||
|
||||
//M2AP_CountingResult_t * m2ap_counting_result = &m2ap_mbms_counting_result->countingResult;
|
||||
|
||||
ASN_SEQUENCE_ADD(&m2ap_mbms_counting_result_list->list,m2ap_mbms_counting_result_item);
|
||||
|
||||
|
||||
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
if (m2ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
||||
LOG_E(M2AP, "Failed to encode MBMS Service Counting Results Report\n");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int eNB_send_MBMS_SERVICE_COUNTING_RESP(instance_t instance, m2ap_mbms_service_counting_resp_t * m2ap_mbms_service_counting_resp)
|
||||
{
|
||||
AssertFatal(1==0,"Not implemented yet\n");
|
||||
M2AP_M2AP_PDU_t pdu;
|
||||
M2AP_MbmsServiceCountingResponse_t *out;
|
||||
M2AP_MbmsServiceCountingResponse_Ies_t *ie;
|
||||
|
||||
uint8_t *buffer;
|
||||
uint32_t len;
|
||||
//int i = 0;
|
||||
|
||||
/* Create */
|
||||
/* 0. Message Type */
|
||||
memset(&pdu, 0, sizeof(pdu));
|
||||
pdu.present = M2AP_M2AP_PDU_PR_successfulOutcome;
|
||||
//pdu.choice.successfulOutcome = (M2AP_SuccessfulOutcome_t *)calloc(1, sizeof(M2AP_SuccessfulOutcome_t));
|
||||
pdu.choice.successfulOutcome.procedureCode = M2AP_ProcedureCode_id_mbmsServiceCounting;
|
||||
pdu.choice.successfulOutcome.criticality = M2AP_Criticality_reject;
|
||||
pdu.choice.successfulOutcome.value.present = M2AP_SuccessfulOutcome__value_PR_MbmsServiceCountingResponse;
|
||||
out = &pdu.choice.successfulOutcome.value.choice.MbmsServiceCountingResponse;
|
||||
|
||||
|
||||
/* mandatory */
|
||||
/* c1. MCE_MBMS_M2AP_ID (integer value) */ //long
|
||||
ie = (M2AP_MbmsServiceCountingResponse_Ies_t*)calloc(1, sizeof(M2AP_MbmsServiceCountingResponse_Ies_t));
|
||||
ie->id = M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID;
|
||||
ie->criticality = M2AP_Criticality_reject;
|
||||
ie->value.present = M2AP_MbmsServiceCountingResponse_Ies__value_PR_CriticalityDiagnostics;
|
||||
//ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
if (m2ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
||||
LOG_E(M2AP, "Failed to encode MBMS Service Counting Results Report\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int eNB_send_MBMS_SERVICE_COUNTING_FAILURE(instance_t instance, m2ap_mbms_service_counting_failure_t * m2ap_mbms_service_counting_failure)
|
||||
{
|
||||
AssertFatal(1==0,"Not implemented yet\n");
|
||||
M2AP_M2AP_PDU_t pdu;
|
||||
M2AP_MbmsServiceCountingFailure_t *out;
|
||||
M2AP_MbmsServiceCountingFailure_Ies_t *ie;
|
||||
|
||||
uint8_t *buffer;
|
||||
uint32_t len;
|
||||
//int i = 0;
|
||||
|
||||
/* Create */
|
||||
/* 0. Message Type */
|
||||
memset(&pdu, 0, sizeof(pdu));
|
||||
pdu.present = M2AP_M2AP_PDU_PR_unsuccessfulOutcome;
|
||||
//pdu.choice.successfulOutcome = (M2AP_SuccessfulOutcome_t *)calloc(1, sizeof(M2AP_SuccessfulOutcome_t));
|
||||
pdu.choice.unsuccessfulOutcome.procedureCode = M2AP_ProcedureCode_id_mbmsServiceCounting;
|
||||
pdu.choice.unsuccessfulOutcome.criticality = M2AP_Criticality_reject;
|
||||
pdu.choice.unsuccessfulOutcome.value.present = M2AP_UnsuccessfulOutcome__value_PR_MbmsServiceCountingFailure;
|
||||
out = &pdu.choice.unsuccessfulOutcome.value.choice.MbmsServiceCountingFailure;
|
||||
|
||||
|
||||
/* mandatory */
|
||||
/* c1. MCE_MBMS_M2AP_ID (integer value) */ //long
|
||||
ie = (M2AP_MbmsServiceCountingFailure_Ies_t*)calloc(1, sizeof(M2AP_MbmsServiceCountingFailure_Ies_t));
|
||||
ie->id = M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID;
|
||||
ie->criticality = M2AP_Criticality_reject;
|
||||
ie->value.present = M2AP_MbmsServiceCountingFailure_Ies__value_PR_CriticalityDiagnostics;
|
||||
//ie->value.choice.MCE_MBMS_M2AP_ID = /*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
/* mandatory */
|
||||
/* c2. Cause */
|
||||
ie = (M2AP_MbmsServiceCountingFailure_Ies_t *)calloc(1, sizeof(M2AP_MbmsServiceCountingFailure_Ies_t));
|
||||
ie->id = M2AP_ProtocolIE_ID_id_Cause;
|
||||
ie->criticality = M2AP_Criticality_ignore;
|
||||
ie->value.present = M2AP_MbmsServiceCountingFailure_Ies__value_PR_Cause;
|
||||
ie->value.choice.Cause.present = M2AP_Cause_PR_radioNetwork;
|
||||
ie->value.choice.Cause.choice.radioNetwork = M2AP_CauseRadioNetwork_unspecified;
|
||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||
|
||||
|
||||
if (m2ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
||||
LOG_E(M2AP, "Failed to encode MBMS Service Counting Results Report\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -372,7 +372,8 @@ void *MCE_app_task(void *args_p) {
|
||||
|
||||
// /* Try to register each MCE with MCE each other */
|
||||
if (is_m3ap_MCE_enabled() /*&& !NODE_IS_DU(RC.rrc[0]->node_type)*/) {
|
||||
///*m3_register_mce_pending =*/ MCE_app_register_m3 (mce_id_start, mce_id_end);
|
||||
///*m3_register_mce_pending =*/
|
||||
MCE_app_register_m3 (mce_id_start, mce_id_end);
|
||||
}
|
||||
|
||||
do {
|
||||
@@ -627,7 +628,7 @@ void *MCE_app_task(void *args_p) {
|
||||
//}
|
||||
|
||||
|
||||
/*m3_register_mce_pending =*/ MCE_app_register_m3 (mce_id_start, mce_id_end);
|
||||
/*m3_register_mce_pending =*/ //MCE_app_register_m3 (mce_id_start, mce_id_end);
|
||||
|
||||
//MCE_app_send_m2ap_session_start_req(0);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user