Commit f10ecb62 authored by Javier Morgade's avatar Javier Morgade

Added NFAPI MCH scheduling support

	M3AP ASN1 source spec updated

	ACKNOWLEDGEMENT:
 	1. This commit was developed at Vicomtech (https://www.vicomtech.org) under UE project CDN-X-ALL: "CDN edge-cloud computing for efficient cache and reliable streaming aCROSS Aggregated unicast-multicast LinkS"
 	2. Project funded by Fed4FIRE+ OC5 (https://www.fed4fire.eu)
Signed-off-by: default avatarJavier Morgade <javier.morgade@ieee.org>
parent 35ba974c
...@@ -102,9 +102,11 @@ void generate_mch(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,uint8_t *a) ...@@ -102,9 +102,11 @@ void generate_mch(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,uint8_t *a)
eNB->common_vars.txdataF, eNB->common_vars.txdataF,
AMP); AMP);
AssertFatal(eNB->dlsch_MCH->harq_processes[0]->pdu != NULL, "attempt to encode a NULL harq PDU\n");
AssertFatal(dlsch_encoding(eNB, AssertFatal(dlsch_encoding(eNB,
a, // a,
eNB->dlsch_MCH->harq_processes[0]->pdu,
1, 1,
eNB->dlsch_MCH, eNB->dlsch_MCH,
proc->frame_tx, proc->frame_tx,
......
...@@ -319,17 +319,21 @@ void mch_channel_level_khz_1dot25(int **dl_ch_estimates_ext, ...@@ -319,17 +319,21 @@ void mch_channel_level_khz_1dot25(int **dl_ch_estimates_ext,
for (i=0; i<(nre>>2); i++) { for (i=0; i<(nre>>2); i++) {
#if defined(__x86_64__) || defined(__i386__) #if defined(__x86_64__) || defined(__i386__)
avg128 = _mm_add_epi32(avg128,_mm_madd_epi16(dl_ch128[0],dl_ch128[0])); //avg128 = _mm_add_epi32(avg128,_mm_madd_epi16(dl_ch128[0],dl_ch128[0]));
avg128 = _mm_add_epi32(avg128,_mm_srai_epi32(_mm_madd_epi16(dl_ch128[0],dl_ch128[0]),log2_approx(nre>>2)-1));
#elif defined(__arm__) #elif defined(__arm__)
#endif #endif
} }
avg[aarx] = (((int*)&avg128)[0] + // avg[aarx] = (((int*)&avg128)[0] +
// ((int*)&avg128)[1] +
// ((int*)&avg128)[2] +
// ((int*)&avg128)[3])/nre;
avg[aarx] = (((((int*)&avg128)[0] +
((int*)&avg128)[1] + ((int*)&avg128)[1] +
((int*)&avg128)[2] + ((int*)&avg128)[2] +
((int*)&avg128)[3])/nre; ((int*)&avg128)[3])/(nre>>factor2(nre)))*(1<<(log2_approx(nre>>2)-1-factor2(nre))));
//printf("Channel level : %d\n",avg[(aatx<<1)+aarx]); //printf("Channel level : %d\n",avg[(aatx<<1)+aarx]);
} }
......
...@@ -139,6 +139,54 @@ void handle_nfapi_bch_pdu(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc, ...@@ -139,6 +139,54 @@ void handle_nfapi_bch_pdu(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,
// adjust transmit amplitude here based on NFAPI info // adjust transmit amplitude here based on NFAPI info
} }
void handle_nfapi_mch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_proc_t *proc,
nfapi_dl_config_request_pdu_t *dl_config_pdu,
uint8_t *sdu){
nfapi_dl_config_mch_pdu_rel8_t *rel8 = &dl_config_pdu->mch_pdu.mch_pdu_rel8;
LTE_eNB_DLSCH_t *dlsch = eNB->dlsch_MCH;
LTE_DL_FRAME_PARMS *frame_parms=&eNB->frame_parms;
// dlsch->rnti = M_RNTI;
dlsch->harq_processes[0]->mcs = rel8->modulation;
// dlsch->harq_processes[0]->Ndi = ndi;
dlsch->harq_processes[0]->rvidx = 0;//rvidx;
dlsch->harq_processes[0]->Nl = 1;
dlsch->harq_processes[0]->TBS = TBStable[get_I_TBS(dlsch->harq_processes[0]->mcs)][frame_parms->N_RB_DL-1];
// dlsch->harq_ids[subframe] = 0;
dlsch->harq_processes[0]->nb_rb = frame_parms->N_RB_DL;
switch(frame_parms->N_RB_DL) {
case 6:
dlsch->harq_processes[0]->rb_alloc[0] = 0x3f;
break;
case 25:
dlsch->harq_processes[0]->rb_alloc[0] = 0x1ffffff;
break;
case 50:
dlsch->harq_processes[0]->rb_alloc[0] = 0xffffffff;
dlsch->harq_processes[0]->rb_alloc[1] = 0x3ffff;
break;
case 100:
dlsch->harq_processes[0]->rb_alloc[0] = 0xffffffff;
dlsch->harq_processes[0]->rb_alloc[1] = 0xffffffff;
dlsch->harq_processes[0]->rb_alloc[2] = 0xffffffff;
dlsch->harq_processes[0]->rb_alloc[3] = 0xf;
break;
}
dlsch->harq_ids[proc->frame_tx%2][proc->subframe_tx] = 0;
dlsch->harq_processes[0]->pdu = sdu;
dlsch->active = 1;
}
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0)) #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
extern uint32_t localRIV2alloc_LUT6[32]; extern uint32_t localRIV2alloc_LUT6[32];
extern uint32_t localRIV2alloc_LUT25[512]; extern uint32_t localRIV2alloc_LUT25[512];
...@@ -839,8 +887,30 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) { ...@@ -839,8 +887,30 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) {
break; break;
case NFAPI_DL_CONFIG_MCH_PDU_TYPE: case NFAPI_DL_CONFIG_MCH_PDU_TYPE:{
// handle_nfapi_mch_dl_pdu(eNB,dl_config_pdu); // handle_nfapi_mch_dl_pdu(eNB,dl_config_pdu);
//AssertFatal(1==0,"OK\n");
nfapi_dl_config_mch_pdu_rel8_t *mch_pdu_rel8 = &dl_config_pdu->mch_pdu.mch_pdu_rel8;
uint16_t pdu_index = mch_pdu_rel8->pdu_index;
uint16_t tx_pdus = TX_req->tx_request_body.number_of_pdus;
uint16_t invalid_pdu = pdu_index == -1;
uint8_t *sdu = invalid_pdu ? NULL : pdu_index >= tx_pdus ? NULL : TX_req->tx_request_body.tx_pdu_list[pdu_index].segments[0].segment_data;
LOG_D(PHY,"%s() [PDU:%d] NFAPI_DL_CONFIG_MCH_PDU_TYPE SFN/SF:%04d%d TX:%d/%d RX:%d/%d pdu_index:%d sdu:%p\n",
__FUNCTION__, i,
NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),
proc->frame_tx, proc->subframe_tx,
proc->frame_rx, proc->subframe_rx,
pdu_index, sdu);
if (sdu) { //sdu != NULL)
if (NFAPI_MODE!=NFAPI_MODE_VNF)
handle_nfapi_mch_pdu(eNB,NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),proc,dl_config_pdu, sdu);
} else {
dont_send=1;
LOG_E(MAC,"%s() NFAPI_DL_CONFIG_MCH_PDU_TYPE sdu is NULL DL_CFG:SFN/SF:%d:pdu_index:%d TX_REQ:SFN/SF:%d:pdus:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(DL_req->sfn_sf), pdu_index,
NFAPI_SFNSF2DEC(TX_req->sfn_sf), tx_pdus);
}
do_oai=1;
}
break; break;
case NFAPI_DL_CONFIG_DLSCH_PDU_TYPE: { case NFAPI_DL_CONFIG_DLSCH_PDU_TYPE: {
......
...@@ -53,6 +53,11 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_pro ...@@ -53,6 +53,11 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_pro
nfapi_dl_config_request_pdu_t *dl_config_pdu, nfapi_dl_config_request_pdu_t *dl_config_pdu,
uint8_t codeword_index, uint8_t codeword_index,
uint8_t *sdu); uint8_t *sdu);
void handle_nfapi_mch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_proc_t *proc,
nfapi_dl_config_request_pdu_t *dl_config_pdu,
uint8_t *sdu);
void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc, void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,
nfapi_ul_config_request_pdu_t *ul_config_pdu, nfapi_ul_config_request_pdu_t *ul_config_pdu,
uint16_t frame,uint8_t subframe,uint8_t srs_present); uint16_t frame,uint8_t subframe,uint8_t srs_present);
......
...@@ -47,6 +47,8 @@ ...@@ -47,6 +47,8 @@
#include "intertask_interface.h" #include "intertask_interface.h"
#define MBMS_NFAPI_SCHEDULER
nfapi_ue_release_request_body_t release_rntis; nfapi_ue_release_request_body_t release_rntis;
int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *eNB,uint16_t UE_id,uint8_t harq_pid, uint8_t bw_factor) { int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *eNB,uint16_t UE_id,uint8_t harq_pid, uint8_t bw_factor) {
...@@ -117,6 +119,16 @@ lte_subframe_t get_subframe_direction(uint8_t Mod_id,uint8_t CC_id,uint8_t subfr ...@@ -117,6 +119,16 @@ lte_subframe_t get_subframe_direction(uint8_t Mod_id,uint8_t CC_id,uint8_t subfr
return(subframe_select(&RC.eNB[Mod_id][CC_id]->frame_parms,subframe)); return(subframe_select(&RC.eNB[Mod_id][CC_id]->frame_parms,subframe));
} }
#ifdef MBMS_NFAPI_SCHEDULER
void pmch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
int subframe = proc->subframe_tx;
// This is DL-Cell spec pilots in Control region
generate_pilots_slot (eNB, eNB->common_vars.txdataF, AMP, subframe << 1, 1);
if(eNB->dlsch_MCH->active==1)
generate_mch (eNB, proc,NULL/*, eNB->dlsch_MCH->harq_processes[0]->pdu*/);
eNB->dlsch_MCH->active = 0;
}
#else
void pmch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) { void pmch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
#if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0)) #if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
MCH_PDU *mch_pduP=NULL; MCH_PDU *mch_pduP=NULL;
...@@ -151,14 +163,16 @@ void pmch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) { ...@@ -151,14 +163,16 @@ void pmch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
if (mch_pduP) { if (mch_pduP) {
fill_eNB_dlsch_MCH (eNB, mch_pduP->mcs, 1, 0); fill_eNB_dlsch_MCH (eNB, mch_pduP->mcs, 1, 0);
eNB->dlsch_MCH->harq_ids[proc->frame_tx%2][subframe] = 0; eNB->dlsch_MCH->harq_ids[proc->frame_tx%2][subframe] = 0;
eNB->dlsch_MCH->harq_processes[0]->pdu=(uint8_t *) mch_pduP->payload;
// Generate PMCH // Generate PMCH
generate_mch (eNB, proc, (uint8_t *) mch_pduP->payload); generate_mch (eNB, proc, NULL/*(uint8_t *) mch_pduP->payload*/);
} else { } else {
LOG_D (PHY, "[eNB/RN] Frame %d subframe %d: MCH not generated \n", proc->frame_tx, subframe); LOG_D (PHY, "[eNB/RN] Frame %d subframe %d: MCH not generated \n", proc->frame_tx, subframe);
} }
#endif #endif
} }
#endif
void common_signal_procedures (PHY_VARS_eNB *eNB,int frame, int subframe) { void common_signal_procedures (PHY_VARS_eNB *eNB,int frame, int subframe) {
LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
......
...@@ -940,7 +940,11 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, ...@@ -940,7 +940,11 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
if (cc[CC_id].MBMS_flag > 0) { if (cc[CC_id].MBMS_flag > 0) {
start_meas(&RC.mac[module_idP]->schedule_mch); start_meas(&RC.mac[module_idP]->schedule_mch);
mbsfn_status[CC_id] = schedule_MBMS(module_idP, CC_id, frameP, subframeP); int(*schedule_mch)(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_frame_t subframe) = NULL;
schedule_mch = schedule_MBMS_NFAPI;
if(schedule_mch){
mbsfn_status[CC_id] = schedule_mch(module_idP, CC_id, frameP, subframeP);
}
stop_meas(&RC.mac[module_idP]->schedule_mch); stop_meas(&RC.mac[module_idP]->schedule_mch);
} }
} }
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "LAYER2/MAC/mac_proto.h" #include "LAYER2/MAC/mac_proto.h"
#include "LAYER2/MAC/mac_extern.h" #include "LAYER2/MAC/mac_extern.h"
#include "common/utils/LOG/log.h" #include "common/utils/LOG/log.h"
#include "nfapi/oai_integration/vendor_ext.h"
#include "common/utils/LOG/vcd_signal_dumper.h" #include "common/utils/LOG/vcd_signal_dumper.h"
#include "UTIL/OPT/opt.h" #include "UTIL/OPT/opt.h"
#include "OCG.h" #include "OCG.h"
...@@ -92,6 +93,818 @@ static uint8_t msi_sfs=0; ...@@ -92,6 +93,818 @@ static uint8_t msi_sfs=0;
//MSI_ELEMENT * ptr =NULL; //MSI_ELEMENT * ptr =NULL;
int
schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
sub_frame_t subframeP)
{
nfapi_dl_config_request_body_t *dl_req;
//nfapi_dl_config_request_pdu_t *dl_config_pdu;
int mcch_flag = 0, mtch_flag = 0, msi_flag = 0;
int mbsfn_period = 0; // 1<<(RC.mac[module_idP]->mbsfn_SubframeConfig[0]->radioframeAllocationPeriod);
int mcch_period = 0; //32<<(RC.mac[module_idP]->mbsfn_AreaInfo[0]->mcch_Config_r9.mcch_RepetitionPeriod_r9);
if(RC.mac[module_idP]->common_channels[CC_id].
pmch_Config[0] == NULL )
return 0;
int mch_scheduling_period =
8 << (RC.mac[module_idP]->common_channels[CC_id].
pmch_Config[0]->mch_SchedulingPeriod_r9);
unsigned char mcch_sdu_length;
unsigned char header_len_mcch = 0, header_len_msi =
0, header_len_mtch = 0, header_len_mtch_temp =
0, header_len_mcch_temp = 0, header_len_msi_temp = 0;
int ii = 0, msi_pos = 0;
int mcch_mcs = -1;
uint16_t TBS, j = -1, padding = 0, post_padding = 0;
mac_rlc_status_resp_t rlc_status;
int num_mtch;
int msi_length, i, k;
//uint8_t l =0;
unsigned char sdu_lcids[11], num_sdus = 0, offset = 0;
uint16_t sdu_lengths[11], sdu_length_total = 0;
unsigned char mch_buffer[MAX_DLSCH_PAYLOAD_BYTES]; // check the max value, this is for dlsch only
COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id];
cc->MCH_pdu.Pdu_size = 0;
for (i = 0; i < cc->num_active_mbsfn_area; i++) {
// assume, that there is always a mapping
if ((j = get_mbsfn_sf_alloction(module_idP, CC_id, i)) == -1) {
return 0;
}
mbsfn_period =
1 << (cc->mbsfn_SubframeConfig[j]->radioframeAllocationPeriod);
mcch_period =
32 << (cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_RepetitionPeriod_r9);
msi_pos = 0;
ii = 0;
LOG_D(MAC,
"[eNB %d] CC_id %d Frame %d subframeP %d : Checking MBSFN Sync Area %d/%d with SF allocation %d/%d for MCCH and MTCH (mbsfn period %d, mcch period %d)\n",
module_idP, CC_id, frameP, subframeP, i,
cc->num_active_mbsfn_area, j, cc->num_sf_allocation_pattern,
mbsfn_period, mcch_period);
switch (cc->mbsfn_AreaInfo[i]->mcch_Config_r9.signallingMCS_r9) {
case 0:
mcch_mcs = 2;
break;
case 1:
mcch_mcs = 7;
break;
case 2:
mcch_mcs = 13;
break;
case 3:
mcch_mcs = 19;
break;
}
// 1st: Check the MBSFN subframes from SIB2 info (SF allocation pattern i, max 8 non-overlapping patterns exist)
if (frameP % mbsfn_period == cc->mbsfn_SubframeConfig[j]->radioframeAllocationOffset) { // MBSFN frameP
if (cc->mbsfn_SubframeConfig[j]->subframeAllocation.present == LTE_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) { // one-frameP format
// Find the first subframeP in this MCH to transmit MSI
if (frameP % mch_scheduling_period ==
cc->mbsfn_SubframeConfig[j]->
radioframeAllocationOffset) {
while (ii == 0) {
ii = cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & (0x80 >> msi_pos);
msi_pos++;
}
LOG_D(MAC,
"[eNB %d] CC_id %d Frame %d subframeP %d : sync area %d sf allocation pattern %d sf alloc %x msi pos is %d \n",
module_idP, CC_id, frameP, subframeP, i, j,
cc->mbsfn_SubframeConfig[j]->
subframeAllocation.choice.oneFrame.buf[0],
msi_pos);
}
// Check if the subframeP is for MSI, MCCH or MTCHs and Set the correspoding flag to 1
switch (subframeP) {
case 1:
if (cc->tdd_Config == NULL) {
if ((cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & MBSFN_FDD_SF1) ==
MBSFN_FDD_SF1) {
if (msi_pos == 1) {
msi_flag = 1;
}
if ((frameP % mcch_period ==
cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_Offset_r9)
&&
((cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.sf_AllocInfo_r9.
buf[0] & MBSFN_FDD_SF1) ==
MBSFN_FDD_SF1)) {
mcch_flag = 1;
}
mtch_flag = 1;
}
}
break;
case 2:
if (cc->tdd_Config == NULL) {
if ((cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & MBSFN_FDD_SF2) ==
MBSFN_FDD_SF2) {
if (msi_pos == 2) {
msi_flag = 1;
}
if ((frameP % mcch_period ==
cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_Offset_r9)
&&
((cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.sf_AllocInfo_r9.
buf[0] & MBSFN_FDD_SF2) ==
MBSFN_FDD_SF2)) {
mcch_flag = 1;
}
mtch_flag = 1;
}
}
break;
case 3:
if (cc->tdd_Config != NULL) { // TDD
if ((cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & MBSFN_TDD_SF3) ==
MBSFN_TDD_SF3) {
if (msi_pos == 1) {
msi_flag = 1;
}
if ((frameP % mcch_period ==
cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_Offset_r9)
&&
((cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.sf_AllocInfo_r9.
buf[0] & MBSFN_TDD_SF3) ==
MBSFN_TDD_SF3)) {
mcch_flag = 1;
}
mtch_flag = 1;
}
} else { // FDD
if ((cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & MBSFN_FDD_SF3) ==
MBSFN_FDD_SF3) {
if (msi_pos == 3) {
msi_flag = 1;
}
if ((frameP % mcch_period ==
cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_Offset_r9)
&&
((cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.sf_AllocInfo_r9.
buf[0] & MBSFN_FDD_SF3) ==
MBSFN_FDD_SF3)) {
mcch_flag = 1;
}
mtch_flag = 1;
}
}
break;
case 4:
if (cc->tdd_Config != NULL) {
if ((cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & MBSFN_TDD_SF4) ==
MBSFN_TDD_SF4) {
if (msi_pos == 2) {
msi_flag = 1;
}
if ((frameP % mcch_period ==
cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_Offset_r9)
&&
((cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.sf_AllocInfo_r9.
buf[0] & MBSFN_TDD_SF4) ==
MBSFN_TDD_SF4)) {
mcch_flag = 1;
}
mtch_flag = 1;
}
}
break;
case 6:
if (cc->tdd_Config == NULL) {
if ((cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & MBSFN_FDD_SF6) ==
MBSFN_FDD_SF6) {
if (msi_pos == 4) {
msi_flag = 1;
}
if ((frameP % mcch_period ==
cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_Offset_r9)
&&
((cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.sf_AllocInfo_r9.
buf[0] & MBSFN_FDD_SF6) ==
MBSFN_FDD_SF6)) {
mcch_flag = 1;
}
mtch_flag = 1;
}
}
break;
case 7:
if (cc->tdd_Config != NULL) { // TDD
if ((cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & MBSFN_TDD_SF7) ==
MBSFN_TDD_SF7) {
if (msi_pos == 3) {
msi_flag = 1;
}
if ((frameP % mcch_period ==
cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_Offset_r9)
&&
((cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.sf_AllocInfo_r9.
buf[0] & MBSFN_TDD_SF7) ==
MBSFN_TDD_SF7)) {
mcch_flag = 1;
}
mtch_flag = 1;
}
} else { // FDD
if ((cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & MBSFN_FDD_SF7) ==
MBSFN_FDD_SF7) {
if (msi_pos == 5) {
msi_flag = 1;
}
if ((frameP % mcch_period ==
cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_Offset_r9)
&&
((cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.sf_AllocInfo_r9.
buf[0] & MBSFN_FDD_SF7) ==
MBSFN_FDD_SF7)) {
mcch_flag = 1;
}
mtch_flag = 1;
}
}
break;
case 8:
if (cc->tdd_Config != NULL) { //TDD
if ((cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & MBSFN_TDD_SF8) ==
MBSFN_TDD_SF8) {
if (msi_pos == 4) {
msi_flag = 1;
}
if ((frameP % mcch_period ==
cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_Offset_r9)
&&
((cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.sf_AllocInfo_r9.
buf[0] & MBSFN_TDD_SF8) ==
MBSFN_TDD_SF8)) {
mcch_flag = 1;
}
mtch_flag = 1;
}
} else { // FDD
if ((cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & MBSFN_FDD_SF8) ==
MBSFN_FDD_SF8) {
if (msi_pos == 6) {
msi_flag = 1;
}
if ((frameP % mcch_period ==
cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_Offset_r9)
&&
((cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.sf_AllocInfo_r9.
buf[0] & MBSFN_FDD_SF8) ==
MBSFN_FDD_SF8)) {
mcch_flag = 1;
}
mtch_flag = 1;
}
}
break;
case 9:
if (cc->tdd_Config != NULL) {
if ((cc->
mbsfn_SubframeConfig[j]->subframeAllocation.
choice.oneFrame.buf[0] & MBSFN_TDD_SF9) ==
MBSFN_TDD_SF9) {
if (msi_pos == 5) {
msi_flag = 1;
}
if ((frameP % mcch_period ==
cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.mcch_Offset_r9)
&&
((cc->mbsfn_AreaInfo[i]->
mcch_Config_r9.sf_AllocInfo_r9.
buf[0] & MBSFN_TDD_SF9) ==
MBSFN_TDD_SF9)) {
mcch_flag = 1;
}
mtch_flag = 1;
}
}
break;
} // end switch
// sf allocation is non-overlapping
if ((msi_flag == 1) || (mcch_flag == 1)
|| (mtch_flag == 1)) {
LOG_D(MAC,
"[eNB %d] CC_id %d Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n",
module_idP, CC_id, frameP, subframeP, i, j,
msi_flag, mcch_flag, mtch_flag);
break;
}
} else { // four-frameP format
}
}
} // end of for loop
cc->msi_active = 0;
cc->mcch_active = 0;
cc->mtch_active = 0;
// Calculate the mcs
if ((msi_flag == 1) || (mcch_flag == 1)) {
cc->MCH_pdu.mcs = mcch_mcs;
} else if (mtch_flag == 1) { // only MTCH in this subframeP
cc->MCH_pdu.mcs = cc->pmch_Config[0]->dataMCS_r9;
}
uint8_t num_sf_alloc=0;
for( int iii=0; iii < 6; iii++)
num_sf_alloc += ( 0x39 & (0x80>>iii)) == (0x80 >> iii);
num_sf_alloc = 1;
// 2nd: Create MSI, get MCCH from RRC and MTCHs from RLC
// there is MSI (MCH Scheduling Info)
if (msi_flag == 1) {
// Create MSI here
uint16_t msi_control_element[29], *msi_ptr;
msi_ptr = &msi_control_element[0];
//((MSI_ELEMENT *) msi_ptr)->lcid = MCCH_LCHANID; //MCCH
//if (mcch_flag == 1) {
// ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0;
// ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0;
//} else { // no mcch for this MSP
// ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0x7; // stop value is 2047
// ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xff;
//}
//msi_ptr += sizeof(MSI_ELEMENT);
//Header for MTCHs
num_mtch = cc->mbms_SessionList[0]->list.count;
TBS =
get_TBS_DL(cc->MCH_pdu.mcs, to_prb(cc->mib->message.dl_Bandwidth));
//l=0;
for (k = 0; k < num_mtch; k++) { // loop for all session in this MCH (MCH[0]) at this moment
((MSI_ELEMENT *) msi_ptr)->lcid = cc->mbms_SessionList[0]->list.array[k]->logicalChannelIdentity_r9; //mtch_lcid;
if( msi_sfs != 0 )
msi_pmch_stop = msi_sfs-1;
else
msi_pmch_stop = msi_sfs;
if( msi_pmch_stop > cc->pmch_Config[0]->sf_AllocEnd_r9)
LOG_W(MAC,"e-MBMS Buffer Overflow\n");
if(msi_pmch_stop>=num_sf_alloc /*&& msi_pmch_stop <=cc->pmch_Config[0]->sf_AllocEnd_r9*/) {
((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0; // last subframeP of this mtch (only one mtch now) & stop_sf limited to 256
//((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = msi_pmch_stop;
((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = (msi_pmch_stop <=cc->pmch_Config[0]->sf_AllocEnd_r9 ? msi_pmch_stop: cc->pmch_Config[0]->sf_AllocEnd_r9);
msi_pmch_stop = (msi_pmch_stop <=cc->pmch_Config[0]->sf_AllocEnd_r9 ? msi_pmch_stop: cc->pmch_Config[0]->sf_AllocEnd_r9);
}else{
((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0x7; // last subframeP of this mtch (only one mtch now)
((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xFF;
msi_pmch_stop=0;
}
msi_ptr += sizeof(MSI_ELEMENT);
}
msi_length = msi_ptr - msi_control_element;
if (msi_length < 128) {
header_len_msi = 2;
} else {
header_len_msi = 3;
}
LOG_D(MAC,
"[eNB %d] CC_id %d Frame %d : MSI->MCH, length of MSI is %d bytes TBS %d, bytes in buffer %d stop_sf_LSB %d msi_sfs %d cc->pmch_Config[0]->sf_AllocEnd_r9 %ld\n",
module_idP, CC_id, frameP, msi_length,TBS, bytes_in_buffer,msi_pmch_stop,msi_sfs,cc->pmch_Config[0]->sf_AllocEnd_r9);
msi_sfs = 0;
//LOG_D(MAC,"Scheduler: MSI is transmitted in this subframeP \n" );
// LOG_D(MAC,"Scheduler: MSI length is %d bytes\n",msi_length);
// Store MSI data to mch_buffer[0]
memcpy((char *) &mch_buffer[sdu_length_total],
msi_control_element, msi_length);
sdu_lcids[num_sdus] = MCH_SCHDL_INFO;
sdu_lengths[num_sdus] = msi_length;
sdu_length_total += sdu_lengths[num_sdus];
LOG_D(MAC, "[eNB %d] CC_id %d Create %d bytes for MSI\n",
module_idP, CC_id, sdu_lengths[num_sdus]);
num_sdus++;
cc->msi_active = 1;
}
// there is MCCH
if (mcch_flag == 1) {
LOG_D(MAC,
"[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE (area %d, sfAlloc %d)\n",
module_idP, CC_id, frameP, subframeP, i, j);
mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH, 0xFFFC, 1, &cc->MCCH_pdu.payload[0],
i); // this is the mbsfn sync area index
mcch_sdu_length+=1; //RLC ?
if (mcch_sdu_length > 0) {
LOG_D(MAC,
"[eNB %d] CC_id %d Frame %d subframeP %d : MCCH->MCH, Received %d bytes from RRC \n",
module_idP, CC_id, frameP, subframeP, mcch_sdu_length);
header_len_mcch = 2;
if (cc->tdd_Config != NULL) {
LOG_D(MAC,
"[eNB %d] CC_id %d Frame %d subframeP %d: Scheduling MCCH->MCH (TDD) for MCCH message %d bytes (mcs %d )\n",
module_idP, CC_id, frameP, subframeP,
mcch_sdu_length, mcch_mcs);
} else {
LOG_D(MAC,
"[eNB %d] CC_id %d Frame %d subframeP %d: Scheduling MCCH->MCH (FDD) for MCCH message %d bytes (mcs %d)\n",
module_idP, CC_id, frameP, subframeP,
mcch_sdu_length, mcch_mcs);
}
cc->mcch_active = 1;
memcpy((char *) &mch_buffer[sdu_length_total]+1,
&cc->MCCH_pdu.payload[0], mcch_sdu_length);
sdu_lcids[num_sdus] = MCCH_LCHANID;
sdu_lengths[num_sdus] = mcch_sdu_length;
if (sdu_lengths[num_sdus] > 128) {
header_len_mcch = 3;
}
sdu_length_total += sdu_lengths[num_sdus];
LOG_D(MAC,
"[eNB %d] CC_id %d Got %d bytes for MCCH from RRC \n",
module_idP, CC_id, sdu_lengths[num_sdus]);
num_sdus++;
}
}
TBS =
get_TBS_DL(/*cc->pmch_Config[0]->dataMCS_r9*/cc->MCH_pdu.mcs, to_prb(cc->mib->message.dl_Bandwidth));
#if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
// do not let mcch and mtch multiplexing when relaying is active
// for sync area 1, so not transmit data
//if ((i == 0) && ((RC.mac[module_idP]->MBMS_flag != multicast_relay) || (RC.mac[module_idP]->mcch_active==0))) {
#endif
// there is MTCHs, loop if there are more than 1
if (mtch_flag == 1 ) {
// Calculate TBS
/* if ((msi_flag==1) || (mcch_flag==1)) {
TBS = mac_xface->get_TBS(mcch_mcs, mac_xface->frame_parms->N_RB_DL);
}
else { // only MTCH in this subframeP
TBS = mac_xface->get_TBS(RC.mac[module_idP]->pmch_Config[0]->dataMCS_r9, mac_xface->frame_parms->N_RB_DL);
}
// get MTCH data from RLC (like for DTCH)
LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframe %d: Schedule MTCH (area %d, sfAlloc %d)\n",Mod_id,CC_id,frame,subframe,i,j);
header_len_mtch = 3;
LOG_D(MAC,"[eNB %d], CC_id %d, Frame %d, MTCH->MCH, Checking RLC status (rab %d, tbs %d, len %d)\n",
Mod_id,CC_id,frame,MTCH,TBS,
TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch);
rlc_status = mac_rlc_status_ind(Mod_id,frame,1,RLC_MBMS_YES,MTCH+ (maxDRB + 3) * MAX_MOBILES_PER_RG,
TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch);
printf("frame %d, subframe %d, rlc_status.bytes_in_buffer is %d\n",frame,subframe, rlc_status.bytes_in_buffer);
*/
// get MTCH data from RLC (like for DTCH)
LOG_D(MAC,
"[eNB %d] CC_id %d Frame %d subframeP %d: Schedule MTCH (area %d, sfAlloc %d)\n",
module_idP, CC_id, frameP, subframeP, i, j);
header_len_mtch = 3;
LOG_D(MAC,
"[eNB %d], CC_id %d, Frame %d, MTCH->MCH, Checking RLC status (rab %d, tbs %d, len %d)\n",
module_idP, CC_id, frameP, MTCH, TBS,
TBS - header_len_mcch - header_len_msi - sdu_length_total -
header_len_mtch);
mbms_rab_id = cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9;
rlc_status =
mac_rlc_status_ind(module_idP, 0, frameP, subframeP,
module_idP, ENB_FLAG_YES, MBMS_FLAG_YES,
cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9,
//MTCH,
TBS - header_len_mcch - header_len_msi -
sdu_length_total - header_len_mtch
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
,0, 0
#endif
);
bytes_in_buffer = rlc_status.bytes_in_buffer;
msi_sfs = rlc_status.bytes_in_buffer/TBS+(rlc_status.bytes_in_buffer%TBS?1:0);
LOG_D(MAC,
"e-MBMS log channel %u frameP %d, subframeP %d, rlc_status.bytes_in_buffer is %d TBS %d pmch_stop %d msi_sfs %d\n",
MTCH, frameP, subframeP, rlc_status.bytes_in_buffer,TBS,msi_pmch_stop,msi_sfs);
if (rlc_status.bytes_in_buffer > 0 || msi_pmch_stop > 0 /*msi_pmch_stop>=num_sf_alloc*/ ) {
//if(rlc_status.bytes_in_buffer > 0){
LOG_I(MAC,
"[eNB %d][MBMS USER-PLANE], CC_id %d, Frame %d, MTCH->MCH, Requesting %d bytes from RLC (header len mtch %d) rlc_status.bytes_in_buffer %d\n",
module_idP, CC_id, frameP,
TBS - header_len_mcch - header_len_msi -
sdu_length_total - header_len_mtch, header_len_mtch, rlc_status.bytes_in_buffer);
sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES,cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9, 0, //not used
(char *)
&mch_buffer[sdu_length_total]
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
,0,
0
#endif
);
//sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,frameP, MBMS_FLAG_NO, MTCH+(MAX_NUM_RB*(MAX_MOBILES_PER_ENB+1)), (char*)&mch_buffer[sdu_length_total]);
LOG_I(MAC,
"[eNB %d][MBMS USER-PLANE] CC_id %d Got %d bytes for MTCH %d msi_pmch_stop %d msi_sfs %d sdu_lengths[num_sdus] %d\n",
module_idP, CC_id, sdu_lengths[num_sdus], MTCH,msi_pmch_stop,msi_sfs, sdu_lengths[num_sdus]);
cc->mtch_active = 1;
sdu_lcids[num_sdus] = cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9/*MTCH*/;
sdu_length_total += sdu_lengths[num_sdus];
if (msi_pmch_stop != 0)
msi_pmch_stop--;
if (sdu_lengths[num_sdus] < 128) {
header_len_mtch = 2;
}
num_sdus++;
//}
}
else {
// LOG_E(MAC,
// "[eNB %d][MBMS USER-PLANE] CC_id %d Got %d bytes for MTCH %d msi_pmch_stop %d msi_buffer %d msi_sfs %ld msi_buffer_act %ld sdu_lengths[num_sdus] %d\n",
// module_idP, CC_id, sdu_lengths[num_sdus], MTCH,msi_pmch_stop,msi_sfs,msi_buffer_act, sdu_lengths[num_sdus]);
header_len_mtch = 0;
}
}
#if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
// }
#endif
// FINAL STEP: Prepare and multiplexe MSI, MCCH and MTCHs
if ((sdu_length_total + header_len_msi + header_len_mcch +
header_len_mtch) > 0) {
// Adjust the last subheader
/* if ((msi_flag==1) || (mcch_flag==1)) {
RC.mac[module_idP]->MCH_pdu.mcs = mcch_mcs;
}
else if (mtch_flag == 1) { // only MTCH in this subframeP
RC.mac[module_idP]->MCH_pdu.mcs = RC.mac[module_idP]->pmch_Config[0]->dataMCS_r9;
}
*/
header_len_mtch_temp = header_len_mtch;
header_len_mcch_temp = header_len_mcch;
header_len_msi_temp = header_len_msi;
if (header_len_mtch > 0) {
header_len_mtch = 1; // remove Length field in the subheader for the last PDU
} else if (header_len_mcch > 0) {
header_len_mcch = 1;
} else {
header_len_msi = 1;
}
// Calculate the padding
if ((TBS - header_len_mtch - header_len_mcch - header_len_msi -
sdu_length_total) < 0) {
LOG_E(MAC, "Error in building MAC PDU, TBS %d < PDU %d \n",
TBS,
header_len_mtch + header_len_mcch + header_len_msi +
sdu_length_total);
return 0;
} else
if ((TBS - header_len_mtch - header_len_mcch - header_len_msi -
sdu_length_total) <= 2) {
padding =
(TBS - header_len_mtch - header_len_mcch - header_len_msi -
sdu_length_total);
post_padding = 0;
} else { // using post_padding, give back the Length field of subheader for the last PDU
padding = 0;
if (header_len_mtch > 0) {
header_len_mtch = header_len_mtch_temp;
} else if (header_len_mcch > 0) {
header_len_mcch = header_len_mcch_temp;
} else {
header_len_msi = header_len_msi_temp;
}
post_padding =
TBS - sdu_length_total - header_len_msi - header_len_mcch -
header_len_mtch;
}
// Generate the MAC Header for MCH
// here we use the function for DLSCH because DLSCH & MCH have the same Header structure
offset = generate_dlsch_header((unsigned char *) cc->MCH_pdu.payload, num_sdus, sdu_lengths, sdu_lcids, 255, // no drx
31, // no timing advance
NULL, // no contention res id
padding, post_padding);
cc->MCH_pdu.Pdu_size = TBS;
cc->MCH_pdu.sync_area = i;
cc->MCH_pdu.msi_active = cc->msi_active;
cc->MCH_pdu.mcch_active = cc->mcch_active;
cc->MCH_pdu.mtch_active = cc->mtch_active;
LOG_D(MAC,
" MCS for this sf is %d (mcch active %d, mtch active %d)\n",
cc->MCH_pdu.mcs, cc->MCH_pdu.mcch_active,
cc->MCH_pdu.mtch_active);
LOG_D(MAC,
"[eNB %d][MBMS USER-PLANE ] CC_id %d Generate header : sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d,padding %d,post_padding %d (mcs %d, TBS %d), header MTCH %d, header MCCH %d, header MSI %d\n",
module_idP, CC_id, sdu_length_total, num_sdus,
sdu_lengths[0], sdu_lcids[0], offset, padding, post_padding,
cc->MCH_pdu.mcs, TBS, header_len_mtch, header_len_mcch,
header_len_msi);
// copy SDU to mch_pdu after the MAC Header
memcpy(&cc->MCH_pdu.payload[offset], mch_buffer, sdu_length_total);
// filling remainder of MCH with random data if necessery
for (j = 0; j < (TBS - sdu_length_total - offset); j++) {
cc->MCH_pdu.payload[offset + sdu_length_total + j] =
(char) (taus() & 0xff);
}
/* Tracing of PDU is done on UE side */
if (opt_enabled == 1) {
trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xffff, // M_RNTI = 6 in wirehsark
RC.mac[module_idP]->frame,
RC.mac[module_idP]->subframe, 0, 0);
LOG_D(OPT,
"[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n",
module_idP, CC_id, frameP, TBS);
}
eNB_MAC_INST *eNB = RC.mac[module_idP];
dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
// dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
// memset((void *) dl_config_pdu,
// 0,
// sizeof(nfapi_dl_config_request_pdu_t));
dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
fill_nfapi_mch_config(
dl_req,
TBS,
0,
0xfffd,
0,
get_Qm(cc->MCH_pdu.mcs),
cc->MCH_pdu.mcs,
6000, //equal to RS power
0 //mbsfn_area_id
);
eNB->TX_req[CC_id].sfn_sf = fill_nfapi_tx_req(&eNB->TX_req[CC_id].tx_request_body,
(frameP * 10) + subframeP,
TBS,
eNB->pdu_index[CC_id],
(uint8_t*)cc->MCH_pdu.payload);
/*
for (j=0;j<sdu_length_total;j++)
printf("%2x.",RC.mac[module_idP]->MCH_pdu.payload[j+offset]);
printf(" \n"); */
return 1;
} else {
cc->MCH_pdu.Pdu_size = 0;
cc->MCH_pdu.sync_area = 0;
cc->MCH_pdu.msi_active = 0;
cc->MCH_pdu.mcch_active = 0;
cc->MCH_pdu.mtch_active = 0;
// for testing purpose, fill with random data
//for (j=0;j<(TBS-sdu_length_total-offset);j++)
// RC.mac[module_idP]->MCH_pdu.payload[offset+sdu_length_total+j] = (char)(taus()&0xff);
return 0;
}
//this is for testing
/*
if (mtch_flag == 1) {
// LOG_D(MAC,"DUY: mch_buffer length so far is : %ld\n", &mch_buffer[sdu_length_total]-&mch_buffer[0]);
return 1;
}
else
return 0;
*/
}
int int
schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
sub_frame_t subframeP) sub_frame_t subframeP)
......
...@@ -1605,6 +1605,39 @@ fill_nfapi_uci_acknak(module_id_t module_idP, ...@@ -1605,6 +1605,39 @@ fill_nfapi_uci_acknak(module_id_t module_idP,
return (((ackNAK_absSF / 10) << 4) + (ackNAK_absSF % 10)); return (((ackNAK_absSF / 10) << 4) + (ackNAK_absSF % 10));
} }
//------------------------------------------------------------------------------
void
fill_nfapi_mch_config(nfapi_dl_config_request_body_t *dl_req,
uint16_t length,
uint16_t pdu_index,
uint16_t rnti,
uint8_t resource_allocation_type,
uint16_t resource_block_coding,
uint8_t modulation,
uint16_t transmission_power,
uint8_t mbsfn_area_id){
nfapi_dl_config_request_pdu_t *dl_config_pdu =
&dl_req->dl_config_pdu_list[dl_req->number_pdu];
memset((void *) dl_config_pdu, 0,
sizeof(nfapi_dl_config_request_pdu_t));
dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_MCH_PDU_TYPE;
dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_mch_pdu));
dl_config_pdu->mch_pdu.mch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_MCH_PDU_REL8_TAG;
dl_config_pdu->mch_pdu.mch_pdu_rel8.length = length;
dl_config_pdu->mch_pdu.mch_pdu_rel8.pdu_index = pdu_index;
dl_config_pdu->mch_pdu.mch_pdu_rel8.rnti = rnti;
dl_config_pdu->mch_pdu.mch_pdu_rel8.resource_allocation_type = resource_allocation_type;
dl_config_pdu->mch_pdu.mch_pdu_rel8.resource_block_coding = resource_block_coding;
dl_config_pdu->mch_pdu.mch_pdu_rel8.modulation = modulation;
dl_config_pdu->mch_pdu.mch_pdu_rel8.transmission_power = transmission_power;
dl_config_pdu->mch_pdu.mch_pdu_rel8.mbsfn_area_id = mbsfn_area_id;
dl_req->number_pdu++;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void void
fill_nfapi_dlsch_config(eNB_MAC_INST *eNB, fill_nfapi_dlsch_config(eNB_MAC_INST *eNB,
......
...@@ -86,6 +86,15 @@ void schedule_SI_MBMS(module_id_t module_idP, frame_t frameP, ...@@ -86,6 +86,15 @@ void schedule_SI_MBMS(module_id_t module_idP, frame_t frameP,
int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
sub_frame_t subframe); sub_frame_t subframe);
/** \brief MBMS scheduling: Checking the position for MBSFN subframes. Create MSI, transfer MCCH from RRC to MAC, transfer MTCHs from RLC to MAC. Multiplexing MSI,MCCH&MTCHs. Return 1 if there are MBSFN data being allocated, otherwise return 0;
@param Mod_id Instance ID of eNB
@param frame Frame index
@param subframe Subframe number on which to act
*/
int schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
sub_frame_t subframe);
/** \brief check the mapping between sf allocation and sync area, Currently only supports 1:1 mapping /** \brief check the mapping between sf allocation and sync area, Currently only supports 1:1 mapping
@param Mod_id Instance ID of eNB @param Mod_id Instance ID of eNB
@param mbsfn_sync_area index of mbsfn sync area @param mbsfn_sync_area index of mbsfn sync area
...@@ -1217,6 +1226,17 @@ void program_dlsch_acknak(module_id_t module_idP, int CC_idP, int UE_idP, ...@@ -1217,6 +1226,17 @@ void program_dlsch_acknak(module_id_t module_idP, int CC_idP, int UE_idP,
frame_t frameP, sub_frame_t subframeP, frame_t frameP, sub_frame_t subframeP,
uint8_t cce_idx); uint8_t cce_idx);
void
fill_nfapi_mch_config(nfapi_dl_config_request_body_t *dl_req,
uint16_t length,
uint16_t pdu_index,
uint16_t rnti,
uint8_t resource_allocation_type,
uint16_t resource_block_coding,
uint8_t modulation,
uint16_t transmission_power,
uint8_t mbsfn_area_id);
void fill_nfapi_dlsch_config(eNB_MAC_INST * eNB, void fill_nfapi_dlsch_config(eNB_MAC_INST * eNB,
nfapi_dl_config_request_body_t * dl_req, nfapi_dl_config_request_body_t * dl_req,
uint16_t length, int16_t pdu_index, uint16_t length, int16_t pdu_index,
......
...@@ -3,679 +3,566 @@ ...@@ -3,679 +3,566 @@
-- Elementary Procedure definitions -- Elementary Procedure definitions
-- --
-- ************************************************************** -- **************************************************************
M3AP-PDU-Descriptions { M3AP-PDU-Descriptions {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-PDU-Descriptions (0) } eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-PDU-Descriptions (0) }
DEFINITIONS AUTOMATIC TAGS ::= DEFINITIONS AUTOMATIC TAGS ::=
BEGIN BEGIN
-- ************************************************************** -- **************************************************************
-- --
-- IE parameter types from other modules. -- IE parameter types from other modules.
-- --
-- ************************************************************** -- **************************************************************
IMPORTS IMPORTS
Criticality, Criticality,
ProcedureCode ProcedureCode
FROM M3AP-CommonDataTypes FROM M3AP-CommonDataTypes
MBMSSessionStartRequest,
MBMSSessionStartRequest, MBMSSessionStartResponse,
MBMSSessionStartResponse, MBMSSessionStartFailure,
MBMSSessionStartFailure, MBMSSessionStopRequest,
MBMSSessionStopRequest, MBMSSessionStopResponse,
MBMSSessionStopResponse, MBMSSessionUpdateRequest,
MBMSSessionUpdateRequest, MBMSSessionUpdateResponse,
MBMSSessionUpdateResponse, MBMSSessionUpdateFailure,
MBMSSessionUpdateFailure, MCEConfigurationUpdate,
MCEConfigurationUpdate, MCEConfigurationUpdateAcknowledge,
MCEConfigurationUpdateAcknowledge, MCEConfigurationUpdateFailure,
MCEConfigurationUpdateFailure, M3SetupRequest,
M3SetupRequest, M3SetupResponse,
M3SetupResponse, M3SetupFailure,
M3SetupFailure, ErrorIndication,
ErrorIndication, Reset,
Reset, ResetAcknowledge,
ResetAcknowledge, PrivateMessage
PrivateMessage
FROM M3AP-PDU-Contents FROM M3AP-PDU-Contents
id-mBMSsessionStart,
id-mBMSsessionStart, id-mBMSsessionStop,
id-mBMSsessionStop, id-mBMSsessionUpdate,
id-mBMSsessionUpdate, id-mCEConfigurationUpdate,
id-mCEConfigurationUpdate, id-m3Setup,
id-m3Setup, id-errorIndication,
id-errorIndication, id-Reset,
id-Reset, id-privateMessage
id-privateMessage
FROM M3AP-Constants; FROM M3AP-Constants;
-- ************************************************************** -- **************************************************************
-- --
-- Interface Elementary Procedure Class -- Interface Elementary Procedure Class
-- --
-- ************************************************************** -- **************************************************************
M3AP-ELEMENTARY-PROCEDURE ::= CLASS { M3AP-ELEMENTARY-PROCEDURE ::= CLASS {
&InitiatingMessage , &InitiatingMessage ,
&SuccessfulOutcome OPTIONAL, &SuccessfulOutcome OPTIONAL,
&UnsuccessfulOutcome OPTIONAL, &UnsuccessfulOutcome OPTIONAL,
&procedureCode ProcedureCode UNIQUE, &procedureCode ProcedureCode UNIQUE,
&criticality Criticality DEFAULT ignore &criticality Criticality DEFAULT ignore
} }
WITH SYNTAX { WITH SYNTAX {
INITIATING MESSAGE &InitiatingMessage INITIATING MESSAGE &InitiatingMessage
[SUCCESSFUL OUTCOME &SuccessfulOutcome] [SUCCESSFUL OUTCOME &SuccessfulOutcome]
[UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome]
PROCEDURE CODE &procedureCode PROCEDURE CODE &procedureCode
[CRITICALITY &criticality] [CRITICALITY &criticality]
} }
-- ************************************************************** -- **************************************************************
-- --
-- Interface PDU Definition -- Interface PDU Definition
-- --
-- ************************************************************** -- **************************************************************
M3AP-PDU ::= CHOICE { M3AP-PDU ::= CHOICE {
initiatingMessage InitiatingMessage, initiatingMessage InitiatingMessage,
successfulOutcome SuccessfulOutcome, successfulOutcome SuccessfulOutcome,
unsuccessfulOutcome UnsuccessfulOutcome, unsuccessfulOutcome UnsuccessfulOutcome,
... ...
} }
InitiatingMessage ::= SEQUENCE { InitiatingMessage ::= SEQUENCE {
procedureCode M3AP-ELEMENTARY-PROCEDURE.&procedureCode ({M3AP-ELEMENTARY-PROCEDURES}), procedureCode M3AP-ELEMENTARY-PROCEDURE.&procedureCode ({M3AP-ELEMENTARY-PROCEDURES}),
criticality M3AP-ELEMENTARY-PROCEDURE.&criticality ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}), criticality M3AP-ELEMENTARY-PROCEDURE.&criticality ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value M3AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}) value M3AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode})
} }
SuccessfulOutcome ::= SEQUENCE { SuccessfulOutcome ::= SEQUENCE {
procedureCode M3AP-ELEMENTARY-PROCEDURE.&procedureCode ({M3AP-ELEMENTARY-PROCEDURES}), procedureCode M3AP-ELEMENTARY-PROCEDURE.&procedureCode ({M3AP-ELEMENTARY-PROCEDURES}),
criticality M3AP-ELEMENTARY-PROCEDURE.&criticality ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}), criticality M3AP-ELEMENTARY-PROCEDURE.&criticality ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value M3AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}) value M3AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode})
} }
UnsuccessfulOutcome ::= SEQUENCE { UnsuccessfulOutcome ::= SEQUENCE {
procedureCode M3AP-ELEMENTARY-PROCEDURE.&procedureCode ({M3AP-ELEMENTARY-PROCEDURES}), procedureCode M3AP-ELEMENTARY-PROCEDURE.&procedureCode ({M3AP-ELEMENTARY-PROCEDURES}),
criticality M3AP-ELEMENTARY-PROCEDURE.&criticality ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}), criticality M3AP-ELEMENTARY-PROCEDURE.&criticality ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value M3AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode}) value M3AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({M3AP-ELEMENTARY-PROCEDURES}{@procedureCode})
} }
-- ************************************************************** -- **************************************************************
-- --
-- Interface Elementary Procedure List -- Interface Elementary Procedure List
-- --
-- ************************************************************** -- **************************************************************
M3AP-ELEMENTARY-PROCEDURES M3AP-ELEMENTARY-PROCEDURE ::= { M3AP-ELEMENTARY-PROCEDURES M3AP-ELEMENTARY-PROCEDURE ::= {
M3AP-ELEMENTARY-PROCEDURES-CLASS-1 | M3AP-ELEMENTARY-PROCEDURES-CLASS-1 |
M3AP-ELEMENTARY-PROCEDURES-CLASS-2 , M3AP-ELEMENTARY-PROCEDURES-CLASS-2 ,
... ...
} }
M3AP-ELEMENTARY-PROCEDURES-CLASS-1 M3AP-ELEMENTARY-PROCEDURE ::= { M3AP-ELEMENTARY-PROCEDURES-CLASS-1 M3AP-ELEMENTARY-PROCEDURE ::= {
mBMSsessionStart | mBMSsessionStart |
mBMSsessionStop | mBMSsessionStop |
mBMSsessionUpdate | mBMSsessionUpdate |
reset | reset |
m3Setup | m3Setup |
mCEConfigurationUpdate , mCEConfigurationUpdate ,
... ...
} }
M3AP-ELEMENTARY-PROCEDURES-CLASS-2 M3AP-ELEMENTARY-PROCEDURE ::= { M3AP-ELEMENTARY-PROCEDURES-CLASS-2 M3AP-ELEMENTARY-PROCEDURE ::= {
errorIndication | errorIndication |
privateMessage , privateMessage ,
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- Interface Elementary Procedures -- Interface Elementary Procedures
-- --
-- ************************************************************** -- **************************************************************
mBMSsessionStart M3AP-ELEMENTARY-PROCEDURE ::= { mBMSsessionStart M3AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MBMSSessionStartRequest INITIATING MESSAGE MBMSSessionStartRequest
SUCCESSFUL OUTCOME MBMSSessionStartResponse SUCCESSFUL OUTCOME MBMSSessionStartResponse
UNSUCCESSFUL OUTCOME MBMSSessionStartFailure UNSUCCESSFUL OUTCOME MBMSSessionStartFailure
PROCEDURE CODE id-mBMSsessionStart PROCEDURE CODE id-mBMSsessionStart
CRITICALITY reject CRITICALITY reject
} }
mBMSsessionStop M3AP-ELEMENTARY-PROCEDURE ::= { mBMSsessionStop M3AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MBMSSessionStopRequest INITIATING MESSAGE MBMSSessionStopRequest
SUCCESSFUL OUTCOME MBMSSessionStopResponse SUCCESSFUL OUTCOME MBMSSessionStopResponse
PROCEDURE CODE id-mBMSsessionStop PROCEDURE CODE id-mBMSsessionStop
CRITICALITY reject CRITICALITY reject
} }
mBMSsessionUpdate M3AP-ELEMENTARY-PROCEDURE ::= { mBMSsessionUpdate M3AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MBMSSessionUpdateRequest INITIATING MESSAGE MBMSSessionUpdateRequest
SUCCESSFUL OUTCOME MBMSSessionUpdateResponse SUCCESSFUL OUTCOME MBMSSessionUpdateResponse
UNSUCCESSFUL OUTCOME MBMSSessionUpdateFailure UNSUCCESSFUL OUTCOME MBMSSessionUpdateFailure
PROCEDURE CODE id-mBMSsessionUpdate PROCEDURE CODE id-mBMSsessionUpdate
CRITICALITY reject CRITICALITY reject
} }
errorIndication M3AP-ELEMENTARY-PROCEDURE ::= { errorIndication M3AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE ErrorIndication INITIATING MESSAGE ErrorIndication
PROCEDURE CODE id-errorIndication PROCEDURE CODE id-errorIndication
CRITICALITY ignore CRITICALITY ignore
} }
reset M3AP-ELEMENTARY-PROCEDURE ::= { reset M3AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE Reset INITIATING MESSAGE Reset
SUCCESSFUL OUTCOME ResetAcknowledge SUCCESSFUL OUTCOME ResetAcknowledge
PROCEDURE CODE id-Reset PROCEDURE CODE id-Reset
CRITICALITY reject CRITICALITY reject
} }
privateMessage M3AP-ELEMENTARY-PROCEDURE ::= {
privateMessage M3AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE PrivateMessage
INITIATING MESSAGE PrivateMessage PROCEDURE CODE id-privateMessage
PROCEDURE CODE id-privateMessage CRITICALITY ignore
CRITICALITY ignore
} }
mCEConfigurationUpdate M3AP-ELEMENTARY-PROCEDURE ::= { mCEConfigurationUpdate M3AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MCEConfigurationUpdate INITIATING MESSAGE MCEConfigurationUpdate
SUCCESSFUL OUTCOME MCEConfigurationUpdateAcknowledge SUCCESSFUL OUTCOME MCEConfigurationUpdateAcknowledge
UNSUCCESSFUL OUTCOME MCEConfigurationUpdateFailure UNSUCCESSFUL OUTCOME MCEConfigurationUpdateFailure
PROCEDURE CODE id-mCEConfigurationUpdate PROCEDURE CODE id-mCEConfigurationUpdate
CRITICALITY reject CRITICALITY reject
} }
m3Setup M3AP-ELEMENTARY-PROCEDURE ::= { m3Setup M3AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE M3SetupRequest INITIATING MESSAGE M3SetupRequest
SUCCESSFUL OUTCOME M3SetupResponse SUCCESSFUL OUTCOME M3SetupResponse
UNSUCCESSFUL OUTCOME M3SetupFailure UNSUCCESSFUL OUTCOME M3SetupFailure
PROCEDURE CODE id-m3Setup PROCEDURE CODE id-m3Setup
CRITICALITY reject CRITICALITY reject
} }
END
END
-- ************************************************************** -- **************************************************************
-- --
-- PDU definitions for M3AP. -- PDU definitions for M3AP.
-- --
-- ************************************************************** -- **************************************************************
M3AP-PDU-Contents { M3AP-PDU-Contents {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-PDU-Contents (1) } eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-PDU-Contents (1) }
DEFINITIONS AUTOMATIC TAGS ::= DEFINITIONS AUTOMATIC TAGS ::=
BEGIN BEGIN
-- ************************************************************** -- **************************************************************
-- --
-- IE parameter types from other modules. -- IE parameter types from other modules.
-- --
-- ************************************************************** -- **************************************************************
IMPORTS IMPORTS
Absolute-Time-ofMBMS-Data,
Absolute-Time-ofMBMS-Data, Cause,
Cause, CriticalityDiagnostics,
CriticalityDiagnostics, Global-MCE-ID,
Global-MCE-ID, MBMS-E-RAB-QoS-Parameters,
MBMS-E-RAB-QoS-Parameters, MBMS-Service-associatedLogicalM3-ConnectionItem,
MBMS-Service-associatedLogicalM3-ConnectionItem, MBMS-Service-Area,
MBMS-Service-Area, MBMSServiceArea1,
MBMSServiceArea1, MBMS-Session-Duration,
MBMS-Session-Duration, MBMS-Session-ID,
MBMS-Session-ID, MCE-MBMS-M3AP-ID,
MCE-MBMS-M3AP-ID, MCEname,
MCEname, MinimumTimeToMBMSDataTransfer,
MinimumTimeToMBMSDataTransfer, MME-MBMS-M3AP-ID,
MME-MBMS-M3AP-ID, TimeToWait,
TimeToWait, TMGI,
TMGI, TNL-Information,
TNL-Information, Reestablishment,
Reestablishment, MBMS-Cell-List
MBMS-Cell-List
FROM M3AP-IEs FROM M3AP-IEs
PrivateIE-Container{},
PrivateIE-Container{}, ProtocolExtensionContainer{},
ProtocolExtensionContainer{}, ProtocolIE-Container{},
ProtocolIE-Container{}, ProtocolIE-ContainerList{},
ProtocolIE-ContainerList{}, ProtocolIE-ContainerPair{},
ProtocolIE-ContainerPair{}, ProtocolIE-ContainerPairList{},
ProtocolIE-ContainerPairList{}, ProtocolIE-Single-Container{},
ProtocolIE-Single-Container{}, M3AP-PRIVATE-IES,
M3AP-PRIVATE-IES, M3AP-PROTOCOL-EXTENSION,
M3AP-PROTOCOL-EXTENSION, M3AP-PROTOCOL-IES,
M3AP-PROTOCOL-IES, M3AP-PROTOCOL-IES-PAIR
M3AP-PROTOCOL-IES-PAIR
FROM M3AP-Containers FROM M3AP-Containers
id-AllocationAndRetentionPriority,
id-AllocationAndRetentionPriority, id-MCE-MBMS-M3AP-ID,
id-MCE-MBMS-M3AP-ID, id-MME-MBMS-M3AP-ID,
id-MME-MBMS-M3AP-ID, id-TMGI,
id-TMGI, id-MBMS-Session-ID,
id-MBMS-Session-ID, id-MBMS-E-RAB-QoS-Parameters,
id-MBMS-E-RAB-QoS-Parameters, id-MBMS-Session-Duration,
id-MBMS-Session-Duration, id-MBMS-Service-Area,
id-MBMS-Service-Area, id-TNL-Information,
id-TNL-Information, id-Alternative-TNL-Information,
id-Alternative-TNL-Information, id-CriticalityDiagnostics,
id-CriticalityDiagnostics, id-Cause,
id-Cause, id-MBMS-Service-Area-List,
id-MBMS-Service-Area-List, id-MBMS-Service-Area-List-Item,
id-MBMS-Service-Area-List-Item, id-TimeToWait,
id-TimeToWait, id-ResetType,
id-ResetType, id-MBMS-Service-associatedLogicalM3-ConnectionItem,
id-MBMS-Service-associatedLogicalM3-ConnectionItem, id-MBMS-Service-associatedLogicalM3-ConnectionListResAck,
id-MBMS-Service-associatedLogicalM3-ConnectionListResAck, id-MBMSServiceAreaList,
id-MBMSServiceAreaList, id-MinimumTimeToMBMSDataTransfer,
id-MinimumTimeToMBMSDataTransfer, id-Time-ofMBMS-DataStop,
id-Time-ofMBMS-DataStop, id-Time-ofMBMS-DataTransfer,
id-Time-ofMBMS-DataTransfer, id-Global-MCE-ID,
id-Global-MCE-ID, id-MCEname,
id-MCEname, id-Reestablishment,
id-Reestablishment, id-MBMS-Cell-List,
id-MBMS-Cell-List, maxnoofMBMSServiceAreaIdentitiesPerMCE,
maxnoofMBMSServiceAreaIdentitiesPerMCE, maxnooferrors,
maxnooferrors, maxNrOfIndividualM3ConnectionsToReset
maxNrOfIndividualM3ConnectionsToReset
FROM M3AP-Constants; FROM M3AP-Constants;
-- ************************************************************** -- **************************************************************
-- --
-- MBMS SESSION START REQUEST -- MBMS SESSION START REQUEST
-- --
-- ************************************************************** -- **************************************************************
MBMSSessionStartRequest ::= SEQUENCE { MBMSSessionStartRequest ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{MBMSSessionStartRequest-IEs}}, protocolIEs ProtocolIE-Container {{MBMSSessionStartRequest-IEs}},
... ...
} }
MBMSSessionStartRequest-IEs M3AP-PROTOCOL-IES ::= { MBMSSessionStartRequest-IEs M3AP-PROTOCOL-IES ::= {
{ ID id-MME-MBMS-M3AP-ID CRITICALITY reject TYPE MME-MBMS-M3AP-ID PRESENCE mandatory}| { ID id-MME-MBMS-M3AP-ID CRITICALITY reject TYPE MME-MBMS-M3AP-ID PRESENCE mandatory}|
{ ID id-TMGI CRITICALITY reject TYPE TMGI PRESENCE mandatory}| { ID id-TMGI CRITICALITY reject TYPE TMGI PRESENCE mandatory}|
{ ID id-MBMS-Session-ID CRITICALITY ignore TYPE MBMS-Session-ID PRESENCE optional}| { ID id-MBMS-Session-ID CRITICALITY ignore TYPE MBMS-Session-ID PRESENCE optional}|
{ ID id-MBMS-E-RAB-QoS-Parameters CRITICALITY reject TYPE MBMS-E-RAB-QoS-Parameters PRESENCE mandatory}| { ID id-MBMS-E-RAB-QoS-Parameters CRITICALITY reject TYPE MBMS-E-RAB-QoS-Parameters PRESENCE mandatory}|
{ ID id-MBMS-Session-Duration CRITICALITY reject TYPE MBMS-Session-Duration PRESENCE mandatory}| { ID id-MBMS-Session-Duration CRITICALITY reject TYPE MBMS-Session-Duration PRESENCE mandatory}|
{ ID id-MBMS-Service-Area CRITICALITY reject TYPE MBMS-Service-Area PRESENCE mandatory}| { ID id-MBMS-Service-Area CRITICALITY reject TYPE MBMS-Service-Area PRESENCE mandatory}|
{ ID id-MinimumTimeToMBMSDataTransfer CRITICALITY reject TYPE MinimumTimeToMBMSDataTransfer PRESENCE mandatory}| { ID id-MinimumTimeToMBMSDataTransfer CRITICALITY reject TYPE MinimumTimeToMBMSDataTransfer PRESENCE mandatory}|
{ ID id-TNL-Information CRITICALITY reject TYPE TNL-Information PRESENCE mandatory}| { ID id-TNL-Information CRITICALITY reject TYPE TNL-Information PRESENCE mandatory}|
{ ID id-Time-ofMBMS-DataTransfer CRITICALITY ignore TYPE Absolute-Time-ofMBMS-Data PRESENCE optional}| { ID id-Time-ofMBMS-DataTransfer CRITICALITY ignore TYPE Absolute-Time-ofMBMS-Data PRESENCE optional}|
{ ID id-Reestablishment CRITICALITY ignore TYPE Reestablishment PRESENCE optional}| { ID id-Reestablishment CRITICALITY ignore TYPE Reestablishment PRESENCE optional}|
{ ID id-Alternative-TNL-Information CRITICALITY ignore TYPE TNL-Information PRESENCE optional}| { ID id-Alternative-TNL-Information CRITICALITY ignore TYPE TNL-Information PRESENCE optional}|
{ ID id-MBMS-Cell-List CRITICALITY reject TYPE MBMS-Cell-List PRESENCE optional}, { ID id-MBMS-Cell-List CRITICALITY reject TYPE MBMS-Cell-List PRESENCE optional},
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- MBMS SESSION START RESPONSE -- MBMS SESSION START RESPONSE
-- --
-- ************************************************************** -- **************************************************************
MBMSSessionStartResponse ::= SEQUENCE { MBMSSessionStartResponse ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MBMSSessionStartResponse-IEs}}, protocolIEs ProtocolIE-Container {{ MBMSSessionStartResponse-IEs}},
... ...
} }
MBMSSessionStartResponse-IEs M3AP-PROTOCOL-IES ::= { MBMSSessionStartResponse-IEs M3AP-PROTOCOL-IES ::= {
{ ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } | { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } |
{ ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } | { ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } |
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- MBMS SESSION START FAILURE -- MBMS SESSION START FAILURE
-- --
-- ************************************************************** -- **************************************************************
MBMSSessionStartFailure ::= SEQUENCE { MBMSSessionStartFailure ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MBMSSessionStartFailure-IEs}}, protocolIEs ProtocolIE-Container {{ MBMSSessionStartFailure-IEs}},
... ...
} }
MBMSSessionStartFailure-IEs M3AP-PROTOCOL-IES ::= { MBMSSessionStartFailure-IEs M3AP-PROTOCOL-IES ::= {
{ ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } | { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } |
{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } | { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } |
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- MBMS SESSION STOP REQUEST -- MBMS SESSION STOP REQUEST
-- --
-- ************************************************************** -- **************************************************************
MBMSSessionStopRequest ::= SEQUENCE { MBMSSessionStopRequest ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{MBMSSessionStopRequest-IEs}}, protocolIEs ProtocolIE-Container {{MBMSSessionStopRequest-IEs}},
... ...
} }
MBMSSessionStopRequest-IEs M3AP-PROTOCOL-IES ::= { MBMSSessionStopRequest-IEs M3AP-PROTOCOL-IES ::= {
{ ID id-MME-MBMS-M3AP-ID CRITICALITY reject TYPE MME-MBMS-M3AP-ID PRESENCE mandatory}| { ID id-MME-MBMS-M3AP-ID CRITICALITY reject TYPE MME-MBMS-M3AP-ID PRESENCE mandatory}|
{ ID id-MCE-MBMS-M3AP-ID CRITICALITY reject TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory}| { ID id-MCE-MBMS-M3AP-ID CRITICALITY reject TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory}|
{ ID id-Time-ofMBMS-DataStop CRITICALITY ignore TYPE Absolute-Time-ofMBMS-Data PRESENCE optional}, { ID id-Time-ofMBMS-DataStop CRITICALITY ignore TYPE Absolute-Time-ofMBMS-Data PRESENCE optional},
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- MBMS SESSION STOP RESPONSE -- MBMS SESSION STOP RESPONSE
-- --
-- ************************************************************** -- **************************************************************
MBMSSessionStopResponse ::= SEQUENCE { MBMSSessionStopResponse ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MBMSSessionStopResponse-IEs}}, protocolIEs ProtocolIE-Container {{ MBMSSessionStopResponse-IEs}},
... ...
} }
MBMSSessionStopResponse-IEs M3AP-PROTOCOL-IES ::= { MBMSSessionStopResponse-IEs M3AP-PROTOCOL-IES ::= {
{ ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } | { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } |
{ ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } | { ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } |
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } , { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } ,
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- MBMS SESSION UPDATE REQUEST -- MBMS SESSION UPDATE REQUEST
-- --
-- ************************************************************** -- **************************************************************
MBMSSessionUpdateRequest ::= SEQUENCE { MBMSSessionUpdateRequest ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{MBMSSessionUpdateRequest-IEs}}, protocolIEs ProtocolIE-Container {{MBMSSessionUpdateRequest-IEs}},
... ...
} }
MBMSSessionUpdateRequest-IEs M3AP-PROTOCOL-IES ::= { MBMSSessionUpdateRequest-IEs M3AP-PROTOCOL-IES ::= {
{ ID id-MME-MBMS-M3AP-ID CRITICALITY reject TYPE MME-MBMS-M3AP-ID PRESENCE mandatory}| { ID id-MME-MBMS-M3AP-ID CRITICALITY reject TYPE MME-MBMS-M3AP-ID PRESENCE mandatory}|
{ ID id-MCE-MBMS-M3AP-ID CRITICALITY reject TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory}| { ID id-MCE-MBMS-M3AP-ID CRITICALITY reject TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory}|
{ ID id-TMGI CRITICALITY reject TYPE TMGI PRESENCE mandatory}| { ID id-TMGI CRITICALITY reject TYPE TMGI PRESENCE mandatory}|
{ ID id-MBMS-Session-ID CRITICALITY ignore TYPE MBMS-Session-ID PRESENCE optional}| { ID id-MBMS-Session-ID CRITICALITY ignore TYPE MBMS-Session-ID PRESENCE optional}|
{ ID id-MBMS-E-RAB-QoS-Parameters CRITICALITY reject TYPE MBMS-E-RAB-QoS-Parameters PRESENCE mandatory}| { ID id-MBMS-E-RAB-QoS-Parameters CRITICALITY reject TYPE MBMS-E-RAB-QoS-Parameters PRESENCE mandatory}|
{ ID id-MBMS-Session-Duration CRITICALITY reject TYPE MBMS-Session-Duration PRESENCE mandatory}| { ID id-MBMS-Session-Duration CRITICALITY reject TYPE MBMS-Session-Duration PRESENCE mandatory}|
{ ID id-MBMS-Service-Area CRITICALITY ignore TYPE MBMS-Service-Area PRESENCE optional}| { ID id-MBMS-Service-Area CRITICALITY ignore TYPE MBMS-Service-Area PRESENCE optional}|
{ ID id-MinimumTimeToMBMSDataTransfer CRITICALITY reject TYPE MinimumTimeToMBMSDataTransfer PRESENCE mandatory}| { ID id-MinimumTimeToMBMSDataTransfer CRITICALITY reject TYPE MinimumTimeToMBMSDataTransfer PRESENCE mandatory}|
{ ID id-TNL-Information CRITICALITY ignore TYPE TNL-Information PRESENCE optional}| { ID id-TNL-Information CRITICALITY ignore TYPE TNL-Information PRESENCE optional}|
{ ID id-Time-ofMBMS-DataTransfer CRITICALITY ignore TYPE Absolute-Time-ofMBMS-Data PRESENCE optional}| { ID id-Time-ofMBMS-DataTransfer CRITICALITY ignore TYPE Absolute-Time-ofMBMS-Data PRESENCE optional}|
{ ID id-MBMS-Cell-List CRITICALITY reject TYPE MBMS-Cell-List PRESENCE optional}, { ID id-MBMS-Cell-List CRITICALITY reject TYPE MBMS-Cell-List PRESENCE optional},
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- MBMS SESSION UPDATE RESPONSE -- MBMS SESSION UPDATE RESPONSE
-- --
-- ************************************************************** -- **************************************************************
MBMSSessionUpdateResponse ::= SEQUENCE { MBMSSessionUpdateResponse ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MBMSSessionUpdateResponse-IEs}}, protocolIEs ProtocolIE-Container {{ MBMSSessionUpdateResponse-IEs}},
... ...
} }
MBMSSessionUpdateResponse-IEs M3AP-PROTOCOL-IES ::= { MBMSSessionUpdateResponse-IEs M3AP-PROTOCOL-IES ::= {
{ ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } | { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } |
{ ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } | { ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } |
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- MBMS SESSION UPDATE FAILURE -- MBMS SESSION UPDATE FAILURE
-- --
-- ************************************************************** -- **************************************************************
MBMSSessionUpdateFailure ::= SEQUENCE { MBMSSessionUpdateFailure ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ MBMSSessionUpdateFailure-IEs}}, protocolIEs ProtocolIE-Container {{ MBMSSessionUpdateFailure-IEs}},
... ...
} }
MBMSSessionUpdateFailure-IEs M3AP-PROTOCOL-IES ::= { MBMSSessionUpdateFailure-IEs M3AP-PROTOCOL-IES ::= {
{ ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } | { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE mandatory } |
{ ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } | { ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE mandatory } |
{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } | { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } |
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- ERROR INDICATION -- ERROR INDICATION
-- --
-- ************************************************************** -- **************************************************************
ErrorIndication ::= SEQUENCE { ErrorIndication ::= SEQUENCE {
protocolIEs ProtocolIE-Container {{ErrorIndication-IEs}}, protocolIEs ProtocolIE-Container {{ErrorIndication-IEs}},
... ...
} }
ErrorIndication-IEs M3AP-PROTOCOL-IES ::= { ErrorIndication-IEs M3AP-PROTOCOL-IES ::= {
{ ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE optional } | { ID id-MME-MBMS-M3AP-ID CRITICALITY ignore TYPE MME-MBMS-M3AP-ID PRESENCE optional } |
{ ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE optional } | { ID id-MCE-MBMS-M3AP-ID CRITICALITY ignore TYPE MCE-MBMS-M3AP-ID PRESENCE optional } |
{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional } | { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional } |
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } , { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } ,
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- Reset -- Reset
-- --
-- ************************************************************** -- **************************************************************
Reset ::= SEQUENCE { Reset ::= SEQUENCE {
protocolIEs ProtocolIE-Container { {ResetIEs} }, protocolIEs ProtocolIE-Container { {ResetIEs} },
... ...
} }
ResetIEs M3AP-PROTOCOL-IES ::= { ResetIEs M3AP-PROTOCOL-IES ::= {
{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }|
{ ID id-ResetType CRITICALITY reject TYPE ResetType PRESENCE mandatory }, { ID id-ResetType CRITICALITY reject TYPE ResetType PRESENCE mandatory },
... ...
} }
ResetType ::= CHOICE { ResetType ::= CHOICE {
m3-Interface ResetAll, m3-Interface ResetAll,
partOfM3-Interface MBMS-Service-associatedLogicalM3-ConnectionListRes, partOfM3-Interface MBMS-Service-associatedLogicalM3-ConnectionListRes,
... ...
} }
ResetAll ::= ENUMERATED { ResetAll ::= ENUMERATED {
reset-all, reset-all,
... ...
} }
MBMS-Service-associatedLogicalM3-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxNrOfIndividualM3ConnectionsToReset)) OF ProtocolIE-Single-Container {
MBMS-Service-associatedLogicalM3-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxNrOfIndividualM3ConnectionsToReset)) OF ProtocolIE-Single-Container { { MBMS-Service-associatedLogicalM3-ConnectionItemRes } } { MBMS-Service-associatedLogicalM3-ConnectionItemRes } }
MBMS-Service-associatedLogicalM3-ConnectionItemRes M3AP-PROTOCOL-IES ::= {
MBMS-Service-associatedLogicalM3-ConnectionItemRes M3AP-PROTOCOL-IES ::= { { ID id-MBMS-Service-associatedLogicalM3-ConnectionItem CRITICALITY reject TYPE MBMS-Service-associatedLogicalM3-ConnectionItem PRESENCE
{ ID id-MBMS-Service-associatedLogicalM3-ConnectionItem CRITICALITY reject TYPE MBMS-Service-associatedLogicalM3-ConnectionItem PRESENCE mandatory }, mandatory },
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- Reset Acknowledge -- Reset Acknowledge
-- --
-- ************************************************************** -- **************************************************************
ResetAcknowledge ::= SEQUENCE { ResetAcknowledge ::= SEQUENCE {
protocolIEs ProtocolIE-Container { {ResetAcknowledgeIEs} }, protocolIEs ProtocolIE-Container { {ResetAcknowledgeIEs} },
... ...
} }
ResetAcknowledgeIEs M3AP-PROTOCOL-IES ::= { ResetAcknowledgeIEs M3AP-PROTOCOL-IES ::= {
{ ID id-MBMS-Service-associatedLogicalM3-ConnectionListResAck CRITICALITY ignore TYPE MBMS-Service-associatedLogicalM3-ConnectionListResAck PRESENCE optional }| { ID id-MBMS-Service-associatedLogicalM3-ConnectionListResAck CRITICALITY ignore TYPE MBMS-Service-associatedLogicalM3-ConnectionListResAck PRESENCE optional }|
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
... ...
} }
MBMS-Service-associatedLogicalM3-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxNrOfIndividualM3ConnectionsToReset)) OF ProtocolIE-Single-Container
MBMS-Service-associatedLogicalM3-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxNrOfIndividualM3ConnectionsToReset)) OF ProtocolIE-Single-Container { { MBMS-Service-associatedLogicalM3-ConnectionItemResAck } } { { MBMS-Service-associatedLogicalM3-ConnectionItemResAck } }
MBMS-Service-associatedLogicalM3-ConnectionItemResAck M3AP-PROTOCOL-IES ::= {
MBMS-Service-associatedLogicalM3-ConnectionItemResAck M3AP-PROTOCOL-IES ::= { { ID id-MBMS-Service-associatedLogicalM3-ConnectionItem CRITICALITY ignore TYPE MBMS-Service-associatedLogicalM3-ConnectionItem PRESENCE
{ ID id-MBMS-Service-associatedLogicalM3-ConnectionItem CRITICALITY ignore TYPE MBMS-Service-associatedLogicalM3-ConnectionItem PRESENCE mandatory }, mandatory },
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- PRIVATE MESSAGE -- PRIVATE MESSAGE
-- --
-- ************************************************************** -- **************************************************************
PrivateMessage ::= SEQUENCE { PrivateMessage ::= SEQUENCE {
privateIEs PrivateIE-Container {{PrivateMessage-IEs}}, privateIEs PrivateIE-Container {{PrivateMessage-IEs}},
... ...
} }
PrivateMessage-IEs M3AP-PRIVATE-IES ::= { PrivateMessage-IEs M3AP-PRIVATE-IES ::= {
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- M3 SETUP ELEMENTARY PROCEDURE -- M3 SETUP ELEMENTARY PROCEDURE
-- --
-- ************************************************************** -- **************************************************************
-- ************************************************************** -- **************************************************************
-- --
-- M3 Setup Request -- M3 Setup Request
-- --
-- ************************************************************** -- **************************************************************
M3SetupRequest ::= SEQUENCE { M3SetupRequest ::= SEQUENCE {
protocolIEs ProtocolIE-Container { {M3SetupRequestIEs} }, protocolIEs ProtocolIE-Container { {M3SetupRequestIEs} },
... ...
} }
M3SetupRequestIEs M3AP-PROTOCOL-IES ::= { M3SetupRequestIEs M3AP-PROTOCOL-IES ::= {
{ ID id-Global-MCE-ID CRITICALITY reject TYPE Global-MCE-ID PRESENCE mandatory}| { ID id-Global-MCE-ID CRITICALITY reject TYPE Global-MCE-ID PRESENCE mandatory}|
{ ID id-MCEname CRITICALITY ignore TYPE MCEname PRESENCE optional}| { ID id-MCEname CRITICALITY ignore TYPE MCEname PRESENCE optional}|
{ ID id-MBMSServiceAreaList CRITICALITY reject TYPE MBMSServiceAreaListItem PRESENCE optional}, { ID id-MBMSServiceAreaList CRITICALITY reject TYPE MBMSServiceAreaListItem PRESENCE mandatory},
... ...
} }
MBMSServiceAreaListItem ::= SEQUENCE (SIZE(1..maxnoofMBMSServiceAreaIdentitiesPerMCE)) OF MBMSServiceArea1 MBMSServiceAreaListItem ::= SEQUENCE (SIZE(1..maxnoofMBMSServiceAreaIdentitiesPerMCE)) OF MBMSServiceArea1
-- ************************************************************** -- **************************************************************
-- --
-- M3 Setup Response -- M3 Setup Response
-- --
-- ************************************************************** -- **************************************************************
M3SetupResponse ::= SEQUENCE { M3SetupResponse ::= SEQUENCE {
protocolIEs ProtocolIE-Container { {M3SetupResponseIEs} }, protocolIEs ProtocolIE-Container { {M3SetupResponseIEs} },
... ...
} }
M3SetupResponseIEs M3AP-PROTOCOL-IES ::= { M3SetupResponseIEs M3AP-PROTOCOL-IES ::= {
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional},
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- M3 Setup Failure -- M3 Setup Failure
-- --
-- ************************************************************** -- **************************************************************
M3SetupFailure ::= SEQUENCE { M3SetupFailure ::= SEQUENCE {
protocolIEs ProtocolIE-Container { {M3SetupFailureIEs} }, protocolIEs ProtocolIE-Container { {M3SetupFailureIEs} },
... ...
} }
M3SetupFailureIEs M3AP-PROTOCOL-IES ::= { M3SetupFailureIEs M3AP-PROTOCOL-IES ::= {
{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}|
{ ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional}| { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional}|
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional},
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- MCE CONFIGURATION UPDATE ELEMENTARY PROCEDURE -- MCE CONFIGURATION UPDATE ELEMENTARY PROCEDURE
-- --
-- ************************************************************** -- **************************************************************
-- ************************************************************** -- **************************************************************
-- --
-- MCE Configuration Update -- MCE Configuration Update
-- --
-- ************************************************************** -- **************************************************************
MCEConfigurationUpdate ::= SEQUENCE { MCEConfigurationUpdate ::= SEQUENCE {
protocolIEs ProtocolIE-Container { {MCEConfigurationUpdateIEs} }, protocolIEs ProtocolIE-Container { {MCEConfigurationUpdateIEs} },
... ...
} }
MCEConfigurationUpdateIEs M3AP-PROTOCOL-IES ::= { MCEConfigurationUpdateIEs M3AP-PROTOCOL-IES ::= {
{ ID id-Global-MCE-ID CRITICALITY reject TYPE Global-MCE-ID PRESENCE optional}| { ID id-Global-MCE-ID CRITICALITY reject TYPE Global-MCE-ID PRESENCE optional}|
{ ID id-MCEname CRITICALITY ignore TYPE MCEname PRESENCE optional}| { ID id-MCEname CRITICALITY ignore TYPE MCEname PRESENCE optional}|
{ ID id-MBMSServiceAreaList CRITICALITY reject TYPE MBMSServiceAreaListItem PRESENCE optional}, { ID id-MBMSServiceAreaList CRITICALITY reject TYPE MBMSServiceAreaListItem PRESENCE optional},
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- MCE Configuration Update Acknowledge -- MCE Configuration Update Acknowledge
-- --
-- ************************************************************** -- **************************************************************
MCEConfigurationUpdateAcknowledge ::= SEQUENCE { MCEConfigurationUpdateAcknowledge ::= SEQUENCE {
protocolIEs ProtocolIE-Container { {MCEConfigurationUpdateAcknowledgeIEs} }, protocolIEs ProtocolIE-Container { {MCEConfigurationUpdateAcknowledgeIEs} },
... ...
} }
MCEConfigurationUpdateAcknowledgeIEs M3AP-PROTOCOL-IES ::= { MCEConfigurationUpdateAcknowledgeIEs M3AP-PROTOCOL-IES ::= {
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional },
... ...
} }
-- ************************************************************** -- **************************************************************
-- --
-- MCE Configuration Update Failure -- MCE Configuration Update Failure
-- --
-- ************************************************************** -- **************************************************************
MCEConfigurationUpdateFailure ::= SEQUENCE { MCEConfigurationUpdateFailure ::= SEQUENCE {
protocolIEs ProtocolIE-Container { {MCEConfigurationUpdateFailureIEs} }, protocolIEs ProtocolIE-Container { {MCEConfigurationUpdateFailureIEs} },
... ...
} }
MCEConfigurationUpdateFailureIEs M3AP-PROTOCOL-IES ::= { MCEConfigurationUpdateFailureIEs M3AP-PROTOCOL-IES ::= {
{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}|
{ ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional}| { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional}|
{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional},
... ...
} }
END END
-- ************************************************************** -- **************************************************************
...@@ -683,634 +570,496 @@ END ...@@ -683,634 +570,496 @@ END
-- Information Element Definitions -- Information Element Definitions
-- --
-- ************************************************************** -- **************************************************************
M3AP-IEs { M3AP-IEs {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-IEs (2) } eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-IEs (2) }
DEFINITIONS AUTOMATIC TAGS ::=
DEFINITIONS AUTOMATIC TAGS ::= BEGIN
BEGIN
IMPORTS IMPORTS
id-AllocationAndRetentionPriority, id-AllocationAndRetentionPriority,
maxnooferrors, maxnooferrors,
maxnoofCellsforMBMS maxnoofCellsforMBMS
FROM M3AP-Constants FROM M3AP-Constants
Criticality,
Criticality, ProcedureCode,
ProcedureCode, ProtocolIE-ID,
ProtocolIE-ID, TriggeringMessage
TriggeringMessage
FROM M3AP-CommonDataTypes FROM M3AP-CommonDataTypes
ProtocolExtensionContainer{},
ProtocolExtensionContainer{}, ProtocolIE-Single-Container{},
ProtocolIE-Single-Container{}, M3AP-PROTOCOL-EXTENSION,
M3AP-PROTOCOL-EXTENSION, M3AP-PROTOCOL-IES
M3AP-PROTOCOL-IES
FROM M3AP-Containers; FROM M3AP-Containers;
-- A -- A
Absolute-Time-ofMBMS-Data ::= BIT STRING (SIZE (64))
Absolute-Time-ofMBMS-Data ::= BIT STRING (SIZE (64))
AllocationAndRetentionPriority ::= SEQUENCE { AllocationAndRetentionPriority ::= SEQUENCE {
priorityLevel PriorityLevel, priorityLevel PriorityLevel,
pre-emptionCapability Pre-emptionCapability, pre-emptionCapability Pre-emptionCapability,
pre-emptionVulnerability Pre-emptionVulnerability, pre-emptionVulnerability Pre-emptionVulnerability,
iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL
} }
AllocationAndRetentionPriority-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { AllocationAndRetentionPriority-ExtIEs M3AP-PROTOCOL-EXTENSION ::= {
... ...
} }
-- B -- B
BitRate ::= INTEGER (0..10000000000)
BitRate ::= INTEGER (0..10000000000)
-- C -- C
Cause ::= CHOICE { Cause ::= CHOICE {
radioNetwork CauseRadioNetwork, radioNetwork CauseRadioNetwork,
transport CauseTransport, transport CauseTransport,
nAS CauseNAS, nAS CauseNAS,
protocol CauseProtocol, protocol CauseProtocol,
misc CauseMisc, misc CauseMisc,
... ...
} }
CauseMisc ::= ENUMERATED { CauseMisc ::= ENUMERATED {
control-processing-overload, control-processing-overload,
not-enough-user-plane-processing-resources, not-enough-user-plane-processing-resources,
hardware-failure, hardware-failure,
om-intervention, om-intervention,
unspecified, unspecified,
... ...
} }
CauseNAS ::= ENUMERATED { CauseNAS ::= ENUMERATED {
unspecified, unspecified,
... ...
} }
CauseProtocol ::= ENUMERATED { CauseProtocol ::= ENUMERATED {
transfer-syntax-error, transfer-syntax-error,
abstract-syntax-error-reject, abstract-syntax-error-reject,
abstract-syntax-error-ignore-and-notify, abstract-syntax-error-ignore-and-notify,
message-not-compatible-with-receiver-state, message-not-compatible-with-receiver-state,
semantic-error, semantic-error,
abstract-syntax-error-falsely-constructed-message, abstract-syntax-error-falsely-constructed-message,
unspecified, unspecified,
... ...
} }
CauseRadioNetwork ::= ENUMERATED { CauseRadioNetwork ::= ENUMERATED {
unknown-or-already-allocated-MME-MBMS-M3AP-ID, unknown-or-already-allocated-MME-MBMS-M3AP-ID,
unknown-or-already-allocated-MCE-MBMS-M3AP-ID, unknown-or-already-allocated-MCE-MBMS-M3AP-ID,
unknown-or-inconsistent-pair-of-MBMS-M3AP-IDs, unknown-or-inconsistent-pair-of-MBMS-M3AP-IDs,
radio-resources-not-available, radio-resources-not-available,
invalid-QoS-combination, invalid-QoS-combination,
interaction-with-other-procedure, interaction-with-other-procedure,
not-supported-QCI-value, not-supported-QCI-value,
unspecified, unspecified,
..., ...,
uninvolved-MCE uninvolved-MCE
} }
CauseTransport ::= ENUMERATED { CauseTransport ::= ENUMERATED {
transport-resource-unavailable, transport-resource-unavailable,
unspecified, unspecified,
... ...
} }
CriticalityDiagnostics ::= SEQUENCE { CriticalityDiagnostics ::= SEQUENCE {
procedureCode ProcedureCode OPTIONAL, procedureCode ProcedureCode OPTIONAL,
triggeringMessage TriggeringMessage OPTIONAL, triggeringMessage TriggeringMessage OPTIONAL,
procedureCriticality Criticality OPTIONAL, procedureCriticality Criticality OPTIONAL,
iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL,
iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL, iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL,
... ...
} }
CriticalityDiagnostics-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { CriticalityDiagnostics-ExtIEs M3AP-PROTOCOL-EXTENSION ::= {
... ...
} }
CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxnooferrors)) OF CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxnooferrors)) OF
SEQUENCE { SEQUENCE {
iECriticality Criticality, iECriticality Criticality,
iE-ID ProtocolIE-ID, iE-ID ProtocolIE-ID,
typeOfError TypeOfError, typeOfError TypeOfError,
iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL, iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL,
... ...
} }
CriticalityDiagnostics-IE-List-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { CriticalityDiagnostics-IE-List-ExtIEs M3AP-PROTOCOL-EXTENSION ::= {
... ...
} }
-- D -- D
-- E -- E
ECGI ::= SEQUENCE { ECGI ::= SEQUENCE {
pLMN-Identity PLMN-Identity, pLMN-Identity PLMN-Identity,
eUTRANcellIdentifier EUTRANCellIdentifier, eUTRANcellIdentifier EUTRANCellIdentifier,
iE-Extensions ProtocolExtensionContainer { {ECGI-ExtIEs} } OPTIONAL, iE-Extensions ProtocolExtensionContainer { {ECGI-ExtIEs} } OPTIONAL,
... ...
} }
ECGI-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { ECGI-ExtIEs M3AP-PROTOCOL-EXTENSION ::= {
... ...
} }
EUTRANCellIdentifier ::= BIT STRING (SIZE (28)) EUTRANCellIdentifier ::= BIT STRING (SIZE (28))
ExtendedMCE-ID ::= OCTET STRING (SIZE(1)) ExtendedMCE-ID ::= OCTET STRING (SIZE(1))
-- F -- F
-- G -- G
Global-MCE-ID ::= SEQUENCE { Global-MCE-ID ::= SEQUENCE {
pLMN-Identity PLMN-Identity, pLMN-Identity PLMN-Identity,
mCE-ID MCE-ID, mCE-ID MCE-ID,
extendedMCE-ID ExtendedMCE-ID OPTIONAL, extendedMCE-ID ExtendedMCE-ID OPTIONAL,
iE-Extensions ProtocolExtensionContainer { {GlobalMCE-ID-ExtIEs} } OPTIONAL, iE-Extensions ProtocolExtensionContainer { {GlobalMCE-ID-ExtIEs} } OPTIONAL,
... ...
} }
GlobalMCE-ID-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { GlobalMCE-ID-ExtIEs M3AP-PROTOCOL-EXTENSION ::= {
... ...
} }
GBR-QosInformation ::= SEQUENCE { GBR-QosInformation ::= SEQUENCE {
mBMS-E-RAB-MaximumBitrateDL BitRate, mBMS-E-RAB-MaximumBitrateDL BitRate,
mBMS-E-RAB-GuaranteedBitrateDL BitRate, mBMS-E-RAB-GuaranteedBitrateDL BitRate,
iE-Extensions ProtocolExtensionContainer { { GBR-QosInformation-ExtIEs} } OPTIONAL, iE-Extensions ProtocolExtensionContainer { { GBR-QosInformation-ExtIEs} } OPTIONAL,
... ...
} }
GBR-QosInformation-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { GBR-QosInformation-ExtIEs M3AP-PROTOCOL-EXTENSION ::= {
... ...
} }
GTP-TEID ::= OCTET STRING (SIZE (4))
GTP-TEID ::= OCTET STRING (SIZE (4))
-- H -- H
-- I -- I
IPAddress ::= OCTET STRING (SIZE(4..16, ...))
IPAddress ::= OCTET STRING (SIZE(4..16, ...))
-- J -- J
-- K -- K
-- L -- L
-- M -- M
MBMS-Cell-List ::= SEQUENCE (SIZE(1.. maxnoofCellsforMBMS)) OF ECGI MBMS-Cell-List ::= SEQUENCE (SIZE(1.. maxnoofCellsforMBMS)) OF ECGI
MBMS-E-RAB-QoS-Parameters ::= SEQUENCE { MBMS-E-RAB-QoS-Parameters ::= SEQUENCE {
qCI QCI, qCI QCI,
gbrQosInformation GBR-QosInformation OPTIONAL, gbrQosInformation GBR-QosInformation OPTIONAL,
iE-Extensions ProtocolExtensionContainer { { MBMS-E-RAB-QoS-Parameters-ExtIEs} } OPTIONAL, iE-Extensions ProtocolExtensionContainer { { MBMS-E-RAB-QoS-Parameters-ExtIEs} } OPTIONAL,
... ...
} }
MBMS-E-RAB-QoS-Parameters-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { MBMS-E-RAB-QoS-Parameters-ExtIEs M3AP-PROTOCOL-EXTENSION ::= {
-- Extension for Release 10 ARP support -- -- Extension for Release 10 ARP support --
{ID id-AllocationAndRetentionPriority CRITICALITY ignore EXTENSION AllocationAndRetentionPriority PRESENCE mandatory}, {ID id-AllocationAndRetentionPriority CRITICALITY ignore EXTENSION AllocationAndRetentionPriority PRESENCE mandatory},
... ...
} }
MBMS-Service-associatedLogicalM3-ConnectionItem ::= SEQUENCE { MBMS-Service-associatedLogicalM3-ConnectionItem ::= SEQUENCE {
mME-MBMS-M3AP-ID MME-MBMS-M3AP-ID OPTIONAL, mME-MBMS-M3AP-ID MME-MBMS-M3AP-ID OPTIONAL,
mCE-MBMS-M3AP-ID MCE-MBMS-M3AP-ID OPTIONAL, mCE-MBMS-M3AP-ID MCE-MBMS-M3AP-ID OPTIONAL,
iE-Extensions ProtocolExtensionContainer { { MBMS-Service-associatedLogicalM3-ConnectionItemExtIEs} } OPTIONAL, iE-Extensions ProtocolExtensionContainer { { MBMS-Service-associatedLogicalM3-ConnectionItemExtIEs} } OPTIONAL,
... ...
} }
MBMS-Service-associatedLogicalM3-ConnectionItemExtIEs M3AP-PROTOCOL-EXTENSION ::= { MBMS-Service-associatedLogicalM3-ConnectionItemExtIEs M3AP-PROTOCOL-EXTENSION ::= {
... ...
} }
MBMSServiceArea1 ::= OCTET STRING (SIZE (2)) MBMSServiceArea1 ::= OCTET STRING (SIZE (2))
MBMS-Service-Area ::= OCTET STRING
MBMS-Service-Area ::= OCTET STRING
MBMS-Session-Duration ::= OCTET STRING (SIZE (3)) MBMS-Session-Duration ::= OCTET STRING (SIZE (3))
MBMS-Session-ID ::= OCTET STRING (SIZE (1)) MBMS-Session-ID ::= OCTET STRING (SIZE (1))
MCE-MBMS-M3AP-ID ::= INTEGER (0..65535)
MCE-MBMS-M3AP-ID ::= INTEGER (0..65535)
MCE-ID ::= OCTET STRING (SIZE(2)) MCE-ID ::= OCTET STRING (SIZE(2))
MCEname ::= PrintableString (SIZE (1..150,...)) MCEname ::= PrintableString (SIZE (1..150,...))
MinimumTimeToMBMSDataTransfer ::= OCTET STRING (SIZE (1))
MinimumTimeToMBMSDataTransfer ::= OCTET STRING (SIZE (1)) MME-MBMS-M3AP-ID ::= INTEGER (0..65535)
MME-MBMS-M3AP-ID ::= INTEGER (0..65535)
-- N -- N
-- O -- O
-- P -- P
Pre-emptionCapability ::= ENUMERATED { Pre-emptionCapability ::= ENUMERATED {
shall-not-trigger-pre-emption, shall-not-trigger-pre-emption,
may-trigger-pre-emption may-trigger-pre-emption
} }
Pre-emptionVulnerability ::= ENUMERATED { Pre-emptionVulnerability ::= ENUMERATED {
not-pre-emptable, not-pre-emptable,
pre-emptable pre-emptable
} }
PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15)
PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15)
PLMN-Identity ::= OCTET STRING (SIZE(3)) PLMN-Identity ::= OCTET STRING (SIZE(3))
-- Q -- Q
QCI ::= INTEGER (0..255) QCI ::= INTEGER (0..255)
-- R -- R
Reestablishment ::= ENUMERATED {true, ...} Reestablishment ::= ENUMERATED {true, ...}
-- S -- S
-- T -- T
TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...} TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...}
TMGI ::= SEQUENCE { TMGI ::= SEQUENCE {
pLMNidentity PLMN-Identity, pLMNidentity PLMN-Identity,
serviceID OCTET STRING (SIZE (3)), serviceID OCTET STRING (SIZE (3)),
iE-Extensions ProtocolExtensionContainer { {TMGI-ExtIEs} } OPTIONAL iE-Extensions ProtocolExtensionContainer { {TMGI-ExtIEs} } OPTIONAL
} }
TMGI-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { TMGI-ExtIEs M3AP-PROTOCOL-EXTENSION ::= {
... ...
} }
TNL-Information ::= SEQUENCE { TNL-Information ::= SEQUENCE {
iPMCAddress IPAddress, iPMCAddress IPAddress,
iPSourceAddress IPAddress, iPSourceAddress IPAddress, gTP-DLTEID GTP-TEID,
gTP-DLTEID GTP-TEID, iE-Extensions ProtocolExtensionContainer { {TNL-Information-ExtIEs} } OPTIONAL,
iE-Extensions ProtocolExtensionContainer { {TNL-Information-ExtIEs} } OPTIONAL, ...
...
} }
TNL-Information-ExtIEs M3AP-PROTOCOL-EXTENSION ::= { TNL-Information-ExtIEs M3AP-PROTOCOL-EXTENSION ::= {
... ...
} }
TypeOfError ::= ENUMERATED { TypeOfError ::= ENUMERATED {
not-understood, not-understood,
missing, missing,
... ...
} }
-- U -- U
-- V -- V
-- W -- W
-- X -- X
-- Y -- Y
-- Z -- Z
END
END
-- ************************************************************** -- **************************************************************
-- --
-- Common definitions -- Common definitions
-- --
-- ************************************************************** -- **************************************************************
M3AP-CommonDataTypes { M3AP-CommonDataTypes {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-CommonDataTypes (3) } eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-CommonDataTypes (3) }
DEFINITIONS AUTOMATIC TAGS ::=
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN BEGIN
-- ************************************************************** -- **************************************************************
-- --
-- Extension constants -- Extension constants
-- --
-- ************************************************************** -- **************************************************************
maxPrivateIEs INTEGER ::= 65535
maxPrivateIEs INTEGER ::= 65535 maxProtocolExtensions INTEGER ::= 65535
maxProtocolExtensions INTEGER ::= 65535 maxProtocolIEs INTEGER ::= 65535
maxProtocolIEs INTEGER ::= 65535 -- **************************************************************
-- **************************************************************
-- --
-- Common Data Types -- Common Data Types
-- --
-- ************************************************************** -- **************************************************************
Criticality ::= ENUMERATED { reject, ignore, notify }
Criticality ::= ENUMERATED { reject, ignore, notify } Presence ::= ENUMERATED { optional, conditional, mandatory }
PrivateIE-ID ::= CHOICE {
Presence ::= ENUMERATED { optional, conditional, mandatory } local INTEGER (0.. maxPrivateIEs),
global OBJECT IDENTIFIER
PrivateIE-ID ::= CHOICE {
local INTEGER (0.. maxPrivateIEs),
global OBJECT IDENTIFIER
} }
ProcedureCode ::= INTEGER (0..255)
ProcedureCode ::= INTEGER (0..255) ProtocolIE-ID ::= INTEGER (0..maxProtocolIEs)
TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome}
END
ProtocolIE-ID ::= INTEGER (0..maxProtocolIEs)
TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome}
END
-- ************************************************************** -- **************************************************************
-- --
-- Constant definitions -- Constant definitions
-- --
-- ************************************************************** -- **************************************************************
M3AP-Constants { M3AP-Constants {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-Constants (4) } eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-Constants (4) }
DEFINITIONS AUTOMATIC TAGS ::=
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN BEGIN
IMPORTS IMPORTS
ProcedureCode, ProcedureCode,
ProtocolIE-ID ProtocolIE-ID
FROM M3AP-CommonDataTypes; FROM M3AP-CommonDataTypes;
-- ************************************************************** -- **************************************************************
-- --
-- Elementary Procedures -- Elementary Procedures
-- --
-- ************************************************************** -- **************************************************************
id-mBMSsessionStart ProcedureCode ::= 0
id-mBMSsessionStart ProcedureCode ::= 0 id-mBMSsessionStop ProcedureCode ::= 1
id-mBMSsessionStop ProcedureCode ::= 1 id-errorIndication ProcedureCode ::= 2
id-errorIndication ProcedureCode ::= 2 id-privateMessage ProcedureCode ::= 3
id-privateMessage ProcedureCode ::= 3 id-Reset ProcedureCode ::= 4
id-Reset ProcedureCode ::= 4 id-mBMSsessionUpdate ProcedureCode ::= 5
id-mBMSsessionUpdate ProcedureCode ::= 5 id-mCEConfigurationUpdate ProcedureCode ::= 6
id-mCEConfigurationUpdate ProcedureCode ::= 6 id-m3Setup ProcedureCode ::= 7
id-m3Setup ProcedureCode ::= 7
-- ************************************************************** -- **************************************************************
-- --
-- Lists -- Lists
-- --
-- ************************************************************** -- **************************************************************
maxnoofMBMSServiceAreaIdentitiesPerMCE INTEGER ::= 65536
maxnoofMBMSServiceAreaIdentitiesPerMCE INTEGER ::= 65536 maxnooferrors INTEGER ::= 256
maxnooferrors INTEGER ::= 256 maxNrOfIndividualM3ConnectionsToReset INTEGER ::= 256
maxNrOfIndividualM3ConnectionsToReset INTEGER ::= 256 maxnoofCellsforMBMS INTEGER ::= 4096
maxnoofCellsforMBMS INTEGER ::= 4096
-- ************************************************************** -- **************************************************************
-- --
-- IEs -- IEs
-- --
-- ************************************************************** -- **************************************************************
id-MME-MBMS-M3AP-ID ProtocolIE-ID ::= 0
id-MME-MBMS-M3AP-ID ProtocolIE-ID ::= 0 id-MCE-MBMS-M3AP-ID ProtocolIE-ID ::= 1
id-MCE-MBMS-M3AP-ID ProtocolIE-ID ::= 1 id-TMGI ProtocolIE-ID ::= 2
id-TMGI ProtocolIE-ID ::= 2 id-MBMS-Session-ID ProtocolIE-ID ::= 3
id-MBMS-Session-ID ProtocolIE-ID ::= 3 id-MBMS-E-RAB-QoS-Parameters ProtocolIE-ID ::= 4
id-MBMS-E-RAB-QoS-Parameters ProtocolIE-ID ::= 4 id-MBMS-Session-Duration ProtocolIE-ID ::= 5
id-MBMS-Session-Duration ProtocolIE-ID ::= 5 id-MBMS-Service-Area ProtocolIE-ID ::= 6
id-MBMS-Service-Area ProtocolIE-ID ::= 6 id-TNL-Information ProtocolIE-ID ::= 7
id-TNL-Information ProtocolIE-ID ::= 7 id-CriticalityDiagnostics ProtocolIE-ID ::= 8
id-CriticalityDiagnostics ProtocolIE-ID ::= 8 id-Cause ProtocolIE-ID ::= 9
id-Cause ProtocolIE-ID ::= 9 id-MBMS-Service-Area-List ProtocolIE-ID ::= 10
id-MBMS-Service-Area-List ProtocolIE-ID ::= 10 id-MBMS-Service-Area-List-Item ProtocolIE-ID ::= 11
id-MBMS-Service-Area-List-Item ProtocolIE-ID ::= 11 id-TimeToWait ProtocolIE-ID ::= 12
id-TimeToWait ProtocolIE-ID ::= 12 id-ResetType ProtocolIE-ID ::= 13
id-ResetType ProtocolIE-ID ::= 13 id-MBMS-Service-associatedLogicalM3-ConnectionItem ProtocolIE-ID ::= 14
id-MBMS-Service-associatedLogicalM3-ConnectionItem ProtocolIE-ID ::= 14 id-MBMS-Service-associatedLogicalM3-ConnectionListResAck ProtocolIE-ID ::= 15
id-MBMS-Service-associatedLogicalM3-ConnectionListResAck ProtocolIE-ID ::= 15 id-MinimumTimeToMBMSDataTransfer ProtocolIE-ID ::= 16
id-MinimumTimeToMBMSDataTransfer ProtocolIE-ID ::= 16 id-AllocationAndRetentionPriority ProtocolIE-ID ::= 17
id-AllocationAndRetentionPriority ProtocolIE-ID ::= 17 id-Global-MCE-ID ProtocolIE-ID ::= 18
id-Global-MCE-ID ProtocolIE-ID ::= 18 id-MCEname ProtocolIE-ID ::= 19
id-MCEname ProtocolIE-ID ::= 19 id-MBMSServiceAreaList ProtocolIE-ID ::= 20
id-MBMSServiceAreaList ProtocolIE-ID ::= 20 id-Time-ofMBMS-DataTransfer ProtocolIE-ID ::= 21
id-Time-ofMBMS-DataTransfer ProtocolIE-ID ::= 21 id-Time-ofMBMS-DataStop ProtocolIE-ID ::= 22
id-Time-ofMBMS-DataStop ProtocolIE-ID ::= 22 id-Reestablishment ProtocolIE-ID ::= 23
id-Reestablishment ProtocolIE-ID ::= 23 id-Alternative-TNL-Information ProtocolIE-ID ::= 24
id-Alternative-TNL-Information ProtocolIE-ID ::= 24 id-MBMS-Cell-List ProtocolIE-ID ::= 25
id-MBMS-Cell-List ProtocolIE-ID ::= 25 END
END
-- ************************************************************** -- **************************************************************
-- --
-- Container definitions -- Container definitions
-- --
-- ************************************************************** -- **************************************************************
M3AP-Containers { M3AP-Containers {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-Containers (5) } eps-Access (21) modules (3) m3ap (5) version1 (1) m3ap-Containers (5) }
DEFINITIONS AUTOMATIC TAGS ::=
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN BEGIN
-- ************************************************************** -- **************************************************************
-- --
-- IE parameter types from other modules. -- IE parameter types from other modules.
-- --
-- ************************************************************** -- **************************************************************
IMPORTS IMPORTS
maxPrivateIEs, maxPrivateIEs,
maxProtocolExtensions, maxProtocolExtensions,
maxProtocolIEs, maxProtocolIEs,
Criticality, Criticality,
Presence, Presence,
PrivateIE-ID, PrivateIE-ID,
ProtocolIE-ID ProtocolIE-ID
FROM M3AP-CommonDataTypes; FROM M3AP-CommonDataTypes;
-- ************************************************************** -- **************************************************************
-- --
-- Class Definition for Protocol IEs -- Class Definition for Protocol IEs
-- --
-- ************************************************************** -- **************************************************************
M3AP-PROTOCOL-IES ::= CLASS { M3AP-PROTOCOL-IES ::= CLASS {
&id ProtocolIE-ID UNIQUE, &id ProtocolIE-ID UNIQUE,
&criticality Criticality, &criticality Criticality,
&Value, &Value,
&presence Presence &presence Presence
} }
WITH SYNTAX { WITH SYNTAX {
ID &id ID &id
CRITICALITY &criticality CRITICALITY &criticality
TYPE &Value TYPE &Value
PRESENCE &presence PRESENCE &presence
} }
-- ************************************************************** -- **************************************************************
-- --
-- Class Definition for Protocol IEs -- Class Definition for Protocol IEs
-- --
-- ************************************************************** -- **************************************************************
M3AP-PROTOCOL-IES-PAIR ::= CLASS { M3AP-PROTOCOL-IES-PAIR ::= CLASS {
&id ProtocolIE-ID UNIQUE, &id ProtocolIE-ID UNIQUE,
&firstCriticality Criticality, &firstCriticality Criticality,
&FirstValue, &FirstValue,
&secondCriticality Criticality, &secondCriticality Criticality,
&SecondValue, &SecondValue,
&presence Presence &presence Presence
} }
WITH SYNTAX { WITH SYNTAX {
ID &id ID &id
FIRST CRITICALITY &firstCriticality FIRST CRITICALITY &firstCriticality
FIRST TYPE &FirstValue FIRST TYPE &FirstValue
SECOND CRITICALITY &secondCriticality SECOND CRITICALITY &secondCriticality
SECOND TYPE &SecondValue SECOND TYPE &SecondValue
PRESENCE &presence PRESENCE &presence
} }
-- ************************************************************** -- **************************************************************
-- --
-- Class Definition for Protocol Extensions -- Class Definition for Protocol Extensions
-- --
-- ************************************************************** -- **************************************************************
M3AP-PROTOCOL-EXTENSION ::= CLASS { M3AP-PROTOCOL-EXTENSION ::= CLASS {
&id ProtocolIE-ID UNIQUE, &id ProtocolIE-ID UNIQUE,
&criticality Criticality, &criticality Criticality,
&Extension, &Extension,
&presence Presence &presence Presence
} }
WITH SYNTAX { WITH SYNTAX {
ID &id ID &id
CRITICALITY &criticality CRITICALITY &criticality
EXTENSION &Extension EXTENSION &Extension
PRESENCE &presence PRESENCE &presence
} }
-- ************************************************************** -- **************************************************************
-- --
-- Class Definition for Private IEs -- Class Definition for Private IEs
-- --
-- ************************************************************** -- **************************************************************
M3AP-PRIVATE-IES ::= CLASS { M3AP-PRIVATE-IES ::= CLASS {
&id PrivateIE-ID, &id PrivateIE-ID,
&criticality Criticality, &criticality Criticality,
&Value, &Value,
&presence Presence &presence Presence
} }
WITH SYNTAX { WITH SYNTAX {
ID &id ID &id
CRITICALITY &criticality CRITICALITY &criticality
TYPE &Value TYPE &Value
PRESENCE &presence PRESENCE &presence
} }
-- ************************************************************** -- **************************************************************
-- --
-- Container for Protocol IEs -- Container for Protocol IEs
-- --
-- ************************************************************** -- **************************************************************
ProtocolIE-Container {M3AP-PROTOCOL-IES : IEsSetParam} ::=
ProtocolIE-Container {M3AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE (SIZE (0..maxProtocolIEs)) OF
SEQUENCE (SIZE (0..maxProtocolIEs)) OF ProtocolIE-Field {{IEsSetParam}}
ProtocolIE-Field {{IEsSetParam}} ProtocolIE-Single-Container {M3AP-PROTOCOL-IES : IEsSetParam} ::=
ProtocolIE-Field {{IEsSetParam}}
ProtocolIE-Single-Container {M3AP-PROTOCOL-IES : IEsSetParam} ::=
ProtocolIE-Field {{IEsSetParam}}
ProtocolIE-Field {M3AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { ProtocolIE-Field {M3AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE {
id M3AP-PROTOCOL-IES.&id ({IEsSetParam}), id M3AP-PROTOCOL-IES.&id ({IEsSetParam}),
criticality M3AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), criticality M3AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}),
value M3AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) value M3AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id})
} }
-- ************************************************************** -- **************************************************************
-- --
-- Container for Protocol IE Pairs -- Container for Protocol IE Pairs
-- --
-- ************************************************************** -- **************************************************************
ProtocolIE-ContainerPair {M3AP-PROTOCOL-IES-PAIR : IEsSetParam} ::=
ProtocolIE-ContainerPair {M3AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE (SIZE (0..maxProtocolIEs)) OF
SEQUENCE (SIZE (0..maxProtocolIEs)) OF ProtocolIE-FieldPair {{IEsSetParam}}
ProtocolIE-FieldPair {{IEsSetParam}}
ProtocolIE-FieldPair {M3AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { ProtocolIE-FieldPair {M3AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE {
id M3AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), id M3AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}),
firstCriticality M3AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), firstCriticality M3AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}),
firstValue M3AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), firstValue M3AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}),
secondCriticality M3AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), secondCriticality M3AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}),
secondValue M3AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) secondValue M3AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id})
} }
-- ************************************************************** -- **************************************************************
-- --
-- Container Lists for Protocol IE Containers -- Container Lists for Protocol IE Containers
-- --
-- ************************************************************** -- **************************************************************
ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, M3AP-PROTOCOL-IES : IEsSetParam} ::= ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, M3AP-PROTOCOL-IES : IEsSetParam} ::=
SEQUENCE (SIZE (lowerBound..upperBound)) OF SEQUENCE (SIZE (lowerBound..upperBound)) OF
ProtocolIE-Container {{IEsSetParam}} ProtocolIE-Container {{IEsSetParam}}
ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, M3AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, M3AP-PROTOCOL-IES-PAIR : IEsSetParam} ::=
SEQUENCE (SIZE (lowerBound..upperBound)) OF SEQUENCE (SIZE (lowerBound..upperBound)) OF
ProtocolIE-ContainerPair {{IEsSetParam}} ProtocolIE-ContainerPair {{IEsSetParam}}
-- ************************************************************** -- **************************************************************
-- --
-- Container for Protocol Extensions -- Container for Protocol Extensions
-- --
-- ************************************************************** -- **************************************************************
ProtocolExtensionContainer {M3AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::=
ProtocolExtensionContainer {M3AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE (SIZE (1..maxProtocolExtensions)) OF
SEQUENCE (SIZE (1..maxProtocolExtensions)) OF ProtocolExtensionField {{ExtensionSetParam}}
ProtocolExtensionField {{ExtensionSetParam}}
ProtocolExtensionField {M3AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { ProtocolExtensionField {M3AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE {
id M3AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), id M3AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}),
criticality M3AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), criticality M3AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}),
extensionValue M3AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) extensionValue M3AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id})
} }
-- ************************************************************** -- **************************************************************
-- --
-- Container for Private IEs -- Container for Private IEs
-- --
-- ************************************************************** -- **************************************************************
PrivateIE-Container {M3AP-PRIVATE-IES : IEsSetParam} ::=
PrivateIE-Container {M3AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE (SIZE (1..maxPrivateIEs)) OF
SEQUENCE (SIZE (1..maxPrivateIEs)) OF PrivateIE-Field {{IEsSetParam}}
PrivateIE-Field {{IEsSetParam}}
PrivateIE-Field {M3AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { PrivateIE-Field {M3AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE {
id M3AP-PRIVATE-IES.&id ({IEsSetParam}), id M3AP-PRIVATE-IES.&id ({IEsSetParam}),
criticality M3AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), criticality M3AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}),
value M3AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) value M3AP-PRIVATE-IES.&Value ({IEsSetParam}{@id})
} }
END
END
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment