Merge branch 'NR_F1C_F1U_extensions' of https://gitlab.eurecom.fr/oai/openairinterface5g into NR_F1C_F1U_extensions
This commit is contained in:
@@ -44,8 +44,8 @@ MESSAGE_DEF(F1AP_UE_CONTEXT_RELEASE_CMD, MESSAGE_PRIORITY_MED, f1ap_ue_context_r
|
|||||||
/* RRC -> F1AP messages */
|
/* RRC -> F1AP messages */
|
||||||
MESSAGE_DEF(F1AP_DL_RRC_MESSAGE , MESSAGE_PRIORITY_MED, f1ap_dl_rrc_message_t , f1ap_dl_rrc_message )
|
MESSAGE_DEF(F1AP_DL_RRC_MESSAGE , MESSAGE_PRIORITY_MED, f1ap_dl_rrc_message_t , f1ap_dl_rrc_message )
|
||||||
//MESSAGE_DEF(F1AP_INITIAL_CONTEXT_SETUP_REQ , MESSAGE_PRIORITY_MED, f1ap_initial_context_setup_req_t , f1ap_initial_context_setup_req )
|
//MESSAGE_DEF(F1AP_INITIAL_CONTEXT_SETUP_REQ , MESSAGE_PRIORITY_MED, f1ap_initial_context_setup_req_t , f1ap_initial_context_setup_req )
|
||||||
MESSAGE_DEF(F1AP_UE_CONTEXT_SETUP_REQ, MESSAGE_PRIORITY_MED, f1ap_ue_context_setup_req_t, f1ap_ue_context_setup_req)
|
MESSAGE_DEF(F1AP_UE_CONTEXT_SETUP_REQ, MESSAGE_PRIORITY_MED, f1ap_ue_context_setup_t, f1ap_ue_context_setup_req)
|
||||||
MESSAGE_DEF(F1AP_UE_CONTEXT_SETUP_RESP, MESSAGE_PRIORITY_MED, f1ap_ue_context_setup_req_t, f1ap_ue_context_setup_resp)
|
MESSAGE_DEF(F1AP_UE_CONTEXT_SETUP_RESP, MESSAGE_PRIORITY_MED, f1ap_ue_context_setup_t, f1ap_ue_context_setup_resp)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -343,7 +343,7 @@ typedef struct f1ap_rb_failed_to_be_setup_s {
|
|||||||
long rb_id;
|
long rb_id;
|
||||||
} f1ap_rb_failed_to_be_setup_t;
|
} f1ap_rb_failed_to_be_setup_t;
|
||||||
|
|
||||||
typedef struct f1ap_ue_context_setup_req_s {
|
typedef struct f1ap_ue_context_setup_s {
|
||||||
uint32_t gNB_CU_ue_id; // BK: need to replace by use from rnti
|
uint32_t gNB_CU_ue_id; // BK: need to replace by use from rnti
|
||||||
uint32_t gNB_DU_ue_id;
|
uint32_t gNB_DU_ue_id;
|
||||||
uint16_t rnti;
|
uint16_t rnti;
|
||||||
@@ -371,7 +371,7 @@ typedef struct f1ap_ue_context_setup_req_s {
|
|||||||
// coniatner for the rrc_eNB_generate_SecurityModeCommand message
|
// coniatner for the rrc_eNB_generate_SecurityModeCommand message
|
||||||
uint8_t *rrc_container;
|
uint8_t *rrc_container;
|
||||||
int rrc_container_length;
|
int rrc_container_length;
|
||||||
} f1ap_ue_context_setup_req_t;
|
} f1ap_ue_context_setup_t;
|
||||||
|
|
||||||
typedef struct f1ap_ue_context_setup_resp_s {
|
typedef struct f1ap_ue_context_setup_resp_s {
|
||||||
uint32_t gNB_CU_ue_id; // BK: need to replace by use from rnti
|
uint32_t gNB_CU_ue_id; // BK: need to replace by use from rnti
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ static void setQos(F1AP_NonDynamic5QIDescriptor_t *toFill) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||||
f1ap_ue_context_setup_req_t *f1ap_ue_context_setup_req) {
|
f1ap_ue_context_setup_t *f1ap_ue_context_setup_req) {
|
||||||
F1AP_F1AP_PDU_t pdu= {0};
|
F1AP_F1AP_PDU_t pdu= {0};
|
||||||
/* Create */
|
/* Create */
|
||||||
/* 0. Message Type */
|
/* 0. Message Type */
|
||||||
@@ -649,7 +649,7 @@ int CU_handle_UE_CONTEXT_SETUP_RESPONSE(instance_t instance,
|
|||||||
F1AP_UEContextSetupResponseIEs_t *ie;
|
F1AP_UEContextSetupResponseIEs_t *ie;
|
||||||
DevAssert(pdu);
|
DevAssert(pdu);
|
||||||
msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_SETUP_RESP);
|
msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_SETUP_RESP);
|
||||||
f1ap_ue_context_setup_req_t *f1ap_ue_context_setup_resp = &F1AP_UE_CONTEXT_SETUP_RESP(msg_p);
|
f1ap_ue_context_setup_t *f1ap_ue_context_setup_resp = &F1AP_UE_CONTEXT_SETUP_RESP(msg_p);
|
||||||
container = &pdu->choice.successfulOutcome->value.choice.UEContextSetupResponse;
|
container = &pdu->choice.successfulOutcome->value.choice.UEContextSetupResponse;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
* UE Context Setup
|
* UE Context Setup
|
||||||
*/
|
*/
|
||||||
int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||||
f1ap_ue_context_setup_req_t *f1ap_ue_context_setup_req);
|
f1ap_ue_context_setup_t *f1ap_ue_context_setup_req);
|
||||||
|
|
||||||
int CU_handle_UE_CONTEXT_SETUP_RESPONSE(instance_t instance,
|
int CU_handle_UE_CONTEXT_SETUP_RESPONSE(instance_t instance,
|
||||||
uint32_t assoc_id,
|
uint32_t assoc_id,
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
int i;
|
int i;
|
||||||
DevAssert(pdu);
|
DevAssert(pdu);
|
||||||
msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_SETUP_REQ);
|
msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_SETUP_REQ);
|
||||||
f1ap_ue_context_setup_req_t *f1ap_ue_context_setup_req = &F1AP_UE_CONTEXT_SETUP_REQ(msg_p);
|
f1ap_ue_context_setup_t *f1ap_ue_context_setup_req = &F1AP_UE_CONTEXT_SETUP_REQ(msg_p);
|
||||||
container = &pdu->choice.initiatingMessage->value.choice.UEContextSetupRequest;
|
container = &pdu->choice.initiatingMessage->value.choice.UEContextSetupRequest;
|
||||||
/* GNB_CU_UE_F1AP_ID */
|
/* GNB_CU_UE_F1AP_ID */
|
||||||
F1AP_UEContextSetupRequestIEs_t *ieCU;
|
F1AP_UEContextSetupRequestIEs_t *ieCU;
|
||||||
@@ -218,7 +218,7 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup_req_t *req) {
|
int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup_t *req) {
|
||||||
F1AP_F1AP_PDU_t pdu= {0};
|
F1AP_F1AP_PDU_t pdu= {0};
|
||||||
F1AP_UEContextSetupResponse_t *out;
|
F1AP_UEContextSetupResponse_t *out;
|
||||||
uint8_t *buffer=NULL;
|
uint8_t *buffer=NULL;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
/*
|
/*
|
||||||
* UE Context Setup
|
* UE Context Setup
|
||||||
*/
|
*/
|
||||||
int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup_req_t *req);
|
int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup_t *req);
|
||||||
|
|
||||||
int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
||||||
uint32_t assoc_id,
|
uint32_t assoc_id,
|
||||||
@@ -87,7 +87,7 @@ int DU_handle_UE_CONTEXT_MODIFICATION_CONFIRM(instance_t instance,
|
|||||||
uint32_t stream,
|
uint32_t stream,
|
||||||
F1AP_F1AP_PDU_t *pdu);
|
F1AP_F1AP_PDU_t *pdu);
|
||||||
|
|
||||||
int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup_req_t *req);
|
int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup_t *req);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UE Inactivity Notification
|
* UE Inactivity Notification
|
||||||
|
|||||||
+68
-52
@@ -1381,11 +1381,11 @@ rrc_gNB_process_RRCReconfigurationComplete(
|
|||||||
DRBs[i].drb_id = DRB_configList->list.array[i]->drb_Identity;
|
DRBs[i].drb_id = DRB_configList->list.array[i]->drb_Identity;
|
||||||
DRBs[i].rlc_mode = RLC_MODE_AM;
|
DRBs[i].rlc_mode = RLC_MODE_AM;
|
||||||
DRBs[i].up_ul_tnl[0].tl_address = inet_addr(rrc->eth_params_s.my_addr);
|
DRBs[i].up_ul_tnl[0].tl_address = inet_addr(rrc->eth_params_s.my_addr);
|
||||||
DRBs[i].up_ul_tnl[0].port=rrc->eth_params_s.my_portd;
|
DRBs[i].up_ul_tnl[0].port=rrc->eth_params_s.my_portd;
|
||||||
DRBs[i].up_ul_tnl_length = 1;
|
DRBs[i].up_ul_tnl_length = 1;
|
||||||
DRBs[i].up_dl_tnl[0].tl_address = inet_addr(rrc->eth_params_s.remote_addr);
|
DRBs[i].up_dl_tnl[0].tl_address = inet_addr(rrc->eth_params_s.remote_addr);
|
||||||
DRBs[i].up_dl_tnl[0].port=rrc->eth_params_s.remote_portd;
|
DRBs[i].up_dl_tnl[0].port=rrc->eth_params_s.remote_portd;
|
||||||
DRBs[i].up_dl_tnl_length = 1;
|
DRBs[i].up_dl_tnl_length = 1;
|
||||||
}
|
}
|
||||||
F1AP_UE_CONTEXT_SETUP_REQ (message_p).gNB_CU_ue_id = 0;
|
F1AP_UE_CONTEXT_SETUP_REQ (message_p).gNB_CU_ue_id = 0;
|
||||||
F1AP_UE_CONTEXT_SETUP_REQ (message_p).gNB_DU_ue_id = 0;
|
F1AP_UE_CONTEXT_SETUP_REQ (message_p).gNB_DU_ue_id = 0;
|
||||||
@@ -3136,7 +3136,7 @@ return 0;
|
|||||||
|
|
||||||
static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const char *msg_name, instance_t instance){
|
static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const char *msg_name, instance_t instance){
|
||||||
|
|
||||||
f1ap_ue_context_setup_req_t * req=&F1AP_UE_CONTEXT_SETUP_REQ(msg_p);
|
f1ap_ue_context_setup_t * req=&F1AP_UE_CONTEXT_SETUP_REQ(msg_p);
|
||||||
protocol_ctxt_t ctxt;
|
protocol_ctxt_t ctxt;
|
||||||
ctxt.rnti = req->rnti;
|
ctxt.rnti = req->rnti;
|
||||||
ctxt.module_id = instance;
|
ctxt.module_id = instance;
|
||||||
@@ -3148,7 +3148,7 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
|
|||||||
rrc_gNB_get_ue_context(rrc, ctxt.rnti);
|
rrc_gNB_get_ue_context(rrc, ctxt.rnti);
|
||||||
MessageDef *message_p;
|
MessageDef *message_p;
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, F1AP_UE_CONTEXT_SETUP_RESP);
|
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, F1AP_UE_CONTEXT_SETUP_RESP);
|
||||||
f1ap_ue_context_setup_req_t * resp=&F1AP_UE_CONTEXT_SETUP_RESP(message_p);
|
f1ap_ue_context_setup_t * resp=&F1AP_UE_CONTEXT_SETUP_RESP(message_p);
|
||||||
uint32_t incoming_teid = 0;
|
uint32_t incoming_teid = 0;
|
||||||
|
|
||||||
|
|
||||||
@@ -3158,67 +3158,85 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
|
|||||||
|
|
||||||
/* Configure SRB2 */
|
/* Configure SRB2 */
|
||||||
NR_SRB_ToAddMod_t *SRB2_config = NULL;
|
NR_SRB_ToAddMod_t *SRB2_config = NULL;
|
||||||
NR_SRB_ToAddModList_t *SRB_configList = ue_context_p->ue_context.SRB_configList;
|
NR_SRB_ToAddModList_t *SRB_configList = NULL;
|
||||||
uint8_t SRBs_before_new_addition = ue_context_p->ue_context.SRB_configList->list.count;
|
uint8_t SRBs_before_new_addition = 0;
|
||||||
if(SRB_configList != NULL){
|
|
||||||
|
if(req->srbs_to_be_setup_length>0){
|
||||||
|
if(ue_context_p->ue_context.SRB_configList == NULL){
|
||||||
|
LOG_W(NR_RRC, "The SRB list of the UE context is empty before the addition of new SRB at the DU \n");
|
||||||
|
ue_context_p->ue_context.SRB_configList = CALLOC(1, sizeof(*ue_context_p->ue_context.SRB_configList));
|
||||||
|
}
|
||||||
|
SRB_configList = ue_context_p->ue_context.SRB_configList;
|
||||||
|
SRBs_before_new_addition = SRB_configList->list.count;
|
||||||
for (int i=0; i<req->srbs_to_be_setup_length; i++){
|
for (int i=0; i<req->srbs_to_be_setup_length; i++){
|
||||||
SRB2_config = CALLOC(1, sizeof(*SRB2_config));
|
SRB2_config = CALLOC(1, sizeof(*SRB2_config));
|
||||||
SRB2_config->srb_Identity = req->srbs_to_be_setup[i].srb_id;
|
SRB2_config->srb_Identity = req->srbs_to_be_setup[i].srb_id;
|
||||||
ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config);
|
ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
LOG_E(NR_RRC, "The SRB list of the UE context is empty before the addition of SRB2 \n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* Configure DRB */
|
/* Configure DRB */
|
||||||
NR_DRB_ToAddMod_t *DRB_config = NULL;
|
NR_DRB_ToAddMod_t *DRB_config = NULL;
|
||||||
if(ue_context_p->ue_context.DRB_configList == NULL){
|
NR_DRB_ToAddModList_t *DRB_configList = NULL;
|
||||||
ue_context_p->ue_context.DRB_configList = CALLOC(1, sizeof(*ue_context_p->ue_context.DRB_configList));
|
if(req->drbs_to_be_setup_length>0){
|
||||||
|
if(ue_context_p->ue_context.DRB_configList == NULL){
|
||||||
|
ue_context_p->ue_context.DRB_configList = CALLOC(1, sizeof(*ue_context_p->ue_context.DRB_configList));
|
||||||
|
}
|
||||||
|
DRB_configList = ue_context_p->ue_context.DRB_configList;
|
||||||
|
for (int i=0; i<req->drbs_to_be_setup_length; i++){
|
||||||
|
DRB_config = CALLOC(1, sizeof(*DRB_config));
|
||||||
|
DRB_config->drb_Identity = req->drbs_to_be_setup[i].drb_id;
|
||||||
|
ASN_SEQUENCE_ADD(&DRB_configList->list, DRB_config);
|
||||||
|
f1ap_drb_to_be_setup_t drb_p = req->drbs_to_be_setup[i];
|
||||||
|
transport_layer_addr_t addr;
|
||||||
|
memcpy(addr.buffer, &drb_p.up_ul_tnl[0].tl_address, sizeof(drb_p.up_ul_tnl[0].tl_address));
|
||||||
|
addr.length=sizeof(drb_p.up_ul_tnl[0].tl_address)*8;
|
||||||
|
extern instance_t DUuniqInstance;
|
||||||
|
incoming_teid=newGtpuCreateTunnel(DUuniqInstance,
|
||||||
|
req->rnti,
|
||||||
|
drb_p.drb_id,
|
||||||
|
drb_p.drb_id,
|
||||||
|
drb_p.up_ul_tnl[0].teid,
|
||||||
|
addr,
|
||||||
|
2152,
|
||||||
|
DURecvCb);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
NR_DRB_ToAddModList_t *DRB_configList = ue_context_p->ue_context.DRB_configList;
|
|
||||||
|
|
||||||
for (int i=0; i<req->drbs_to_be_setup_length; i++){
|
|
||||||
DRB_config = CALLOC(1, sizeof(*DRB_config));
|
|
||||||
DRB_config->drb_Identity = req->drbs_to_be_setup[i].drb_id;
|
|
||||||
ASN_SEQUENCE_ADD(&DRB_configList->list, DRB_config);
|
|
||||||
f1ap_drb_to_be_setup_t drb_p = req->drbs_to_be_setup[i];
|
|
||||||
transport_layer_addr_t addr;
|
|
||||||
memcpy(addr.buffer, &drb_p.up_ul_tnl[0].tl_address, sizeof(drb_p.up_ul_tnl[0].tl_address));
|
|
||||||
addr.length=sizeof(drb_p.up_ul_tnl[0].tl_address)*8;
|
|
||||||
extern instance_t DUuniqInstance;
|
|
||||||
incoming_teid=newGtpuCreateTunnel(DUuniqInstance,
|
|
||||||
req->rnti,
|
|
||||||
drb_p.drb_id,
|
|
||||||
drb_p.drb_id,
|
|
||||||
drb_p.up_ul_tnl[0].teid,
|
|
||||||
addr,
|
|
||||||
2152,
|
|
||||||
DURecvCb);
|
|
||||||
|
|
||||||
}
|
|
||||||
apply_macrlc_config(rrc, ue_context_p, &ctxt);
|
apply_macrlc_config(rrc, ue_context_p, &ctxt);
|
||||||
/* Fill the UE context setup response ITTI message to send to F1AP */
|
/* Fill the UE context setup response ITTI message to send to F1AP */
|
||||||
resp->gNB_CU_ue_id = req->gNB_CU_ue_id;
|
resp->gNB_CU_ue_id = req->gNB_CU_ue_id;
|
||||||
resp->rnti = ctxt.rnti;
|
resp->rnti = ctxt.rnti;
|
||||||
resp->drbs_to_be_setup = calloc(1,DRB_configList->list.count*sizeof(f1ap_drb_to_be_setup_t));
|
if(DRB_configList){
|
||||||
resp->drbs_to_be_setup_length = DRB_configList->list.count;
|
if(DRB_configList->list.count > 0){
|
||||||
for (int i=0; i<DRB_configList->list.count; i++){
|
resp->drbs_to_be_setup = calloc(1,DRB_configList->list.count*sizeof(f1ap_drb_to_be_setup_t));
|
||||||
resp->drbs_to_be_setup[i].drb_id = DRB_configList->list.array[i]->drb_Identity;
|
resp->drbs_to_be_setup_length = DRB_configList->list.count;
|
||||||
resp->drbs_to_be_setup[i].rlc_mode = RLC_MODE_AM;
|
for (int i=0; i<DRB_configList->list.count; i++){
|
||||||
resp->drbs_to_be_setup[i].up_dl_tnl[0].teid = incoming_teid;
|
resp->drbs_to_be_setup[i].drb_id = DRB_configList->list.array[i]->drb_Identity;
|
||||||
resp->drbs_to_be_setup[i].up_dl_tnl[0].tl_address = inet_addr(mac->eth_params_n.my_addr);
|
resp->drbs_to_be_setup[i].rlc_mode = RLC_MODE_AM;
|
||||||
resp->drbs_to_be_setup[i].up_dl_tnl_length = 1;
|
resp->drbs_to_be_setup[i].up_dl_tnl[0].teid = incoming_teid;
|
||||||
|
resp->drbs_to_be_setup[i].up_dl_tnl[0].tl_address = inet_addr(mac->eth_params_n.my_addr);
|
||||||
|
resp->drbs_to_be_setup[i].up_dl_tnl_length = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
LOG_W(NR_RRC, "No DRB added upon reception of F1 UE context setup request with a DRB to setup list\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(SRBs_before_new_addition < SRB_configList->list.count){
|
if(SRB_configList){
|
||||||
resp->srbs_to_be_setup = calloc(1,req->srbs_to_be_setup_length*sizeof(f1ap_srb_to_be_setup_t));
|
if(SRB_configList->list.count >0 && SRBs_before_new_addition < SRB_configList->list.count){
|
||||||
resp->srbs_to_be_setup_length = req->srbs_to_be_setup_length;
|
resp->srbs_to_be_setup = calloc(1,req->srbs_to_be_setup_length*sizeof(f1ap_srb_to_be_setup_t));
|
||||||
for (int i=SRBs_before_new_addition; i<SRB_configList->list.count; i++){
|
resp->srbs_to_be_setup_length = req->srbs_to_be_setup_length;
|
||||||
resp->srbs_to_be_setup[i-SRBs_before_new_addition].srb_id = SRB_configList->list.array[i]->srb_Identity;
|
for (int i=SRBs_before_new_addition; i<SRB_configList->list.count; i++){
|
||||||
|
resp->srbs_to_be_setup[i-SRBs_before_new_addition].srb_id = SRB_configList->list.array[i]->srb_Identity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
LOG_W(NR_RRC, "No SRB added upon reception of F1 UE Context setup request at the DU\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
LOG_E(NR_RRC, "SRB failed to get added \n");
|
LOG_W(NR_RRC, "No SRB added upon reception of F1 UE Context setup request at the DU\n");
|
||||||
}
|
}
|
||||||
resp->du_to_cu_rrc_information = calloc(1,1024*sizeof(uint8_t));
|
resp->du_to_cu_rrc_information = calloc(1,1024*sizeof(uint8_t));
|
||||||
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CellGroupConfig,
|
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CellGroupConfig,
|
||||||
@@ -3228,13 +3246,11 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
|
|||||||
1024);
|
1024);
|
||||||
resp->du_to_cu_rrc_information_length = (enc_rval.encoded+7)>>3;
|
resp->du_to_cu_rrc_information_length = (enc_rval.encoded+7)>>3;
|
||||||
itti_send_msg_to_task (TASK_DU_F1, ctxt.module_id, message_p);
|
itti_send_msg_to_task (TASK_DU_F1, ctxt.module_id, message_p);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rrc_CU_process_ue_context_setup_response(MessageDef *msg_p, const char *msg_name, instance_t instance){
|
static void rrc_CU_process_ue_context_setup_response(MessageDef *msg_p, const char *msg_name, instance_t instance){
|
||||||
|
|
||||||
f1ap_ue_context_setup_req_t * resp=&F1AP_UE_CONTEXT_SETUP_RESP(msg_p);
|
f1ap_ue_context_setup_t * resp=&F1AP_UE_CONTEXT_SETUP_RESP(msg_p);
|
||||||
protocol_ctxt_t ctxt;
|
protocol_ctxt_t ctxt;
|
||||||
ctxt.rnti = resp->rnti;
|
ctxt.rnti = resp->rnti;
|
||||||
ctxt.module_id = instance;
|
ctxt.module_id = instance;
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
|
|||||||
auto ptrRnti=inst->ue2te_mapping.find(rnti);
|
auto ptrRnti=inst->ue2te_mapping.find(rnti);
|
||||||
|
|
||||||
if ( ptrRnti==inst->ue2te_mapping.end() ) {
|
if ( ptrRnti==inst->ue2te_mapping.end() ) {
|
||||||
LOG_E(GTPU, "gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", rnti);
|
LOG_E(GTPU, "GTP-U instance: %ld gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", instance, rnti);
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -213,13 +213,13 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
|
|||||||
map<int, ocp_gtpv1u_bearer_t>::iterator ptr2=ptrRnti->second.bearers.find(rab_id);
|
map<int, ocp_gtpv1u_bearer_t>::iterator ptr2=ptrRnti->second.bearers.find(rab_id);
|
||||||
|
|
||||||
if ( ptr2 == ptrRnti->second.bearers.end() ) {
|
if ( ptr2 == ptrRnti->second.bearers.end() ) {
|
||||||
LOG_E(GTPU,"sending a packet to a non existant RNTI:RAB: %x/%x\n", rnti, rab_id);
|
LOG_D(GTPU,"GTP-U instance: %ld sending a packet to a non existant RNTI:RAB: %x/%x\n", instance, rnti, rab_id);
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_D(GTPU,"sending a packet to RNTI:RAB:teid %x/%x/%x, len %lu, oldseq %d, oldnum %d\n",
|
LOG_D(GTPU,"GTP-U instance: %ld sending a packet to RNTI:RAB:teid %x/%x/%x, len %lu, oldseq %d, oldnum %d\n",
|
||||||
rnti, rab_id,ptr2->second.teid_outgoing,length, ptr2->second.seqNum,ptr2->second.npduNum );
|
instance, rnti, rab_id,ptr2->second.teid_outgoing,length, ptr2->second.seqNum,ptr2->second.npduNum );
|
||||||
|
|
||||||
if(seqNumFlag)
|
if(seqNumFlag)
|
||||||
ptr2->second.seqNum++;
|
ptr2->second.seqNum++;
|
||||||
@@ -387,6 +387,7 @@ instance_t ocp_gtpv1Init(openAddr_t context) {
|
|||||||
LOG_E(GTPU,"can't create GTP-U instance\n");
|
LOG_E(GTPU,"can't create GTP-U instance\n");
|
||||||
|
|
||||||
pthread_mutex_unlock(&globGtp.gtp_lock);
|
pthread_mutex_unlock(&globGtp.gtp_lock);
|
||||||
|
LOG_I(GTPU, "Created gtpu instance id: %d\n", id);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
Active_gNBs = ( "gNB-CU-Eurecom-5GNRBox");
|
Active_gNBs = ( "gNB-Eurecom-CU");
|
||||||
# Asn1_verbosity, choice in: none, info, annoying
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
Asn1_verbosity = "none";
|
Asn1_verbosity = "none";
|
||||||
Num_Threads_PUSCH = 8;
|
Num_Threads_PUSCH = 8;
|
||||||
@@ -7,203 +7,44 @@ gNBs =
|
|||||||
(
|
(
|
||||||
{
|
{
|
||||||
////////// Identification parameters:
|
////////// Identification parameters:
|
||||||
gNB_ID = 0xe00;
|
gNB_CU_ID = 0xe00;
|
||||||
|
|
||||||
cell_type = "CELL_MACRO_GNB";
|
# cell_type = "CELL_MACRO_GNB";
|
||||||
|
|
||||||
gNB_name = "gNB-CU-Eurecom-5GNRBox";
|
gNB_name = "gNB-Eurecom-CU";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
tracking_area_code = 1;
|
tracking_area_code = 1;
|
||||||
|
plmn_list = ({
|
||||||
|
mcc = 208;
|
||||||
|
mnc = 99;
|
||||||
|
mnc_length = 2;
|
||||||
|
snssaiList = (
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x010203; // 0 false, else true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x1; #112233; // 0 false, else true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});
|
|
||||||
|
|
||||||
nr_cellid = 12345678L
|
nr_cellid = 12345678L
|
||||||
|
|
||||||
tr_s_preference = "f1"
|
tr_s_preference = "f1";
|
||||||
|
|
||||||
local_s_if_name = "lo";
|
local_s_if_name = "lo";
|
||||||
|
local_s_address = "127.0.0.4"; #"192.168.18.207"; #"127.0.0.4";
|
||||||
remote_s_address = "127.0.0.3";
|
remote_s_address = "127.0.0.3";
|
||||||
local_s_address = "127.0.0.4";
|
local_s_portc = 501;
|
||||||
local_s_portc = 501;
|
local_s_portd = 2152;
|
||||||
remote_s_portc = 500;
|
remote_s_portc = 501;
|
||||||
local_s_portd = 601;
|
remote_s_portd = 2152;
|
||||||
remote_s_portd = 600;
|
|
||||||
|
|
||||||
////////// Physical parameters:
|
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
sib1_tda = 0;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
|
||||||
{
|
|
||||||
#spCellConfigCommon
|
|
||||||
|
|
||||||
physCellId = 0;
|
|
||||||
|
|
||||||
# downlinkConfigCommon
|
|
||||||
#frequencyInfoDL
|
|
||||||
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
|
|
||||||
absoluteFrequencySSB = 641032;
|
|
||||||
dl_frequencyBand = 78;
|
|
||||||
# this is 3600 MHz
|
|
||||||
dl_absoluteFrequencyPointA = 640000;
|
|
||||||
#scs-SpecificCarrierList
|
|
||||||
dl_offstToCarrier = 0;
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
dl_subcarrierSpacing = 1;
|
|
||||||
dl_carrierBandwidth = 106;
|
|
||||||
#initialDownlinkBWP
|
|
||||||
#genericParameters
|
|
||||||
# this is RBstart=41,L=24 (275*(L-1))+RBstart
|
|
||||||
initialDLBWPlocationAndBandwidth = 6366;
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
initialDLBWPsubcarrierSpacing = 1;
|
|
||||||
#pdcch-ConfigCommon
|
|
||||||
initialDLBWPcontrolResourceSetZero = 12;
|
|
||||||
initialDLBWPsearchSpaceZero = 0;
|
|
||||||
#pdsch-ConfigCommon
|
|
||||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
|
||||||
initialDLBWPk0_0 = 0;
|
|
||||||
#initialULBWPmappingType
|
|
||||||
#0=typeA,1=typeB
|
|
||||||
initialDLBWPmappingType_0 = 0;
|
|
||||||
#this is SS=1,L=13
|
|
||||||
initialDLBWPstartSymbolAndLength_0 = 40;
|
|
||||||
|
|
||||||
initialDLBWPk0_1 = 0;
|
|
||||||
initialDLBWPmappingType_1 = 0;
|
|
||||||
#this is SS=2,L=12
|
|
||||||
initialDLBWPstartSymbolAndLength_1 = 53;
|
|
||||||
|
|
||||||
initialDLBWPk0_2 = 0;
|
|
||||||
initialDLBWPmappingType_2 = 0;
|
|
||||||
#this is SS=1,L=12
|
|
||||||
initialDLBWPstartSymbolAndLength_2 = 54;
|
|
||||||
|
|
||||||
initialDLBWPk0_3 = 0;
|
|
||||||
initialDLBWPmappingType_3 = 0;
|
|
||||||
#this is SS=1,L=5
|
|
||||||
initialDLBWPstartSymbolAndLength_3 = 57;
|
|
||||||
|
|
||||||
#uplinkConfigCommon
|
|
||||||
#frequencyInfoUL
|
|
||||||
ul_frequencyBand = 78;
|
|
||||||
#scs-SpecificCarrierList
|
|
||||||
ul_offstToCarrier = 0;
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
ul_subcarrierSpacing = 1;
|
|
||||||
ul_carrierBandwidth = 106;
|
|
||||||
pMax = 20;
|
|
||||||
#initialUplinkBWP
|
|
||||||
#genericParameters
|
|
||||||
initialULBWPlocationAndBandwidth = 6366;
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
initialULBWPsubcarrierSpacing = 1;
|
|
||||||
#rach-ConfigCommon
|
|
||||||
#rach-ConfigGeneric
|
|
||||||
prach_ConfigurationIndex = 98;
|
|
||||||
#prach_msg1_FDM
|
|
||||||
#0 = one, 1=two, 2=four, 3=eight
|
|
||||||
prach_msg1_FDM = 0;
|
|
||||||
prach_msg1_FrequencyStart = 0;
|
|
||||||
zeroCorrelationZoneConfig = 13;
|
|
||||||
preambleReceivedTargetPower = -118;
|
|
||||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
|
||||||
preambleTransMax = 6;
|
|
||||||
#powerRampingStep
|
|
||||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
|
||||||
powerRampingStep = 1;
|
|
||||||
#ra_ReponseWindow
|
|
||||||
#1,2,4,8,10,20,40,80
|
|
||||||
ra_ResponseWindow = 4;
|
|
||||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
|
||||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
|
||||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
|
||||||
#ra_ContentionResolutionTimer
|
|
||||||
#(0..7) 8,16,24,32,40,48,56,64
|
|
||||||
ra_ContentionResolutionTimer = 7;
|
|
||||||
rsrp_ThresholdSSB = 19;
|
|
||||||
#prach-RootSequenceIndex_PR
|
|
||||||
#1 = 839, 2 = 139
|
|
||||||
prach_RootSequenceIndex_PR = 2;
|
|
||||||
prach_RootSequenceIndex = 1;
|
|
||||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
|
||||||
#
|
|
||||||
msg1_SubcarrierSpacing = 1,
|
|
||||||
# restrictedSetConfig
|
|
||||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
|
||||||
restrictedSetConfig = 0,
|
|
||||||
|
|
||||||
# pusch-ConfigCommon (up to 16 elements)
|
|
||||||
initialULBWPk2_0 = 6;
|
|
||||||
initialULBWPmappingType_0 = 1
|
|
||||||
# this is SS=0 L=11
|
|
||||||
initialULBWPstartSymbolAndLength_0 = 55;
|
|
||||||
|
|
||||||
initialULBWPk2_1 = 6;
|
|
||||||
initialULBWPmappingType_1 = 1;
|
|
||||||
# this is SS=0 L=12
|
|
||||||
initialULBWPstartSymbolAndLength_1 = 69;
|
|
||||||
|
|
||||||
initialULBWPk2_2 = 7;
|
|
||||||
initialULBWPmappingType_2 = 1;
|
|
||||||
# this is SS=10 L=4
|
|
||||||
initialULBWPstartSymbolAndLength_2 = 52;
|
|
||||||
|
|
||||||
msg3_DeltaPreamble = 1;
|
|
||||||
p0_NominalWithGrant =-90;
|
|
||||||
|
|
||||||
# pucch-ConfigCommon setup :
|
|
||||||
# pucchGroupHopping
|
|
||||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
|
||||||
pucchGroupHopping = 0;
|
|
||||||
hoppingId = 40;
|
|
||||||
p0_nominal = -90;
|
|
||||||
# ssb_PositionsInBurs_BitmapPR
|
|
||||||
# 1=short, 2=medium, 3=long
|
|
||||||
ssb_PositionsInBurst_PR = 2;
|
|
||||||
ssb_PositionsInBurst_Bitmap = 1;
|
|
||||||
|
|
||||||
# ssb_periodicityServingCell
|
|
||||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
|
||||||
ssb_periodicityServingCell = 2;
|
|
||||||
|
|
||||||
# dmrs_TypeA_position
|
|
||||||
# 0 = pos2, 1 = pos3
|
|
||||||
dmrs_TypeA_Position = 0;
|
|
||||||
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
subcarrierSpacing = 1;
|
|
||||||
|
|
||||||
|
|
||||||
#tdd-UL-DL-ConfigurationCommon
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
referenceSubcarrierSpacing = 1;
|
|
||||||
# pattern1
|
|
||||||
# dl_UL_TransmissionPeriodicity
|
|
||||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
|
||||||
dl_UL_TransmissionPeriodicity = 6;
|
|
||||||
nrofDownlinkSlots = 7;
|
|
||||||
nrofDownlinkSymbols = 6;
|
|
||||||
nrofUplinkSlots = 2;
|
|
||||||
nrofUplinkSymbols = 4;
|
|
||||||
|
|
||||||
ssPBCH_BlockPower = 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
# ------- SCTP definitions
|
# ------- SCTP definitions
|
||||||
SCTP :
|
SCTP :
|
||||||
@@ -214,8 +55,8 @@ gNBs =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
////////// MME parameters:
|
////////// AMF parameters:
|
||||||
mme_ip_address = ( { ipv4 = "192.168.12.26";
|
amf_ip_address = ( { ipv4 = "192.168.69.131";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
@@ -225,49 +66,15 @@ gNBs =
|
|||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
GNB_INTERFACE_NAME_FOR_NG_AMF = "bond0";
|
||||||
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.18.207/24";
|
||||||
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
GNB_INTERFACE_NAME_FOR_NGU = "bond0";
|
||||||
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.18.207/24";
|
||||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
# RUs = (
|
|
||||||
# {
|
|
||||||
# local_rf = "yes"
|
|
||||||
# nb_tx = 1
|
|
||||||
# nb_rx = 1
|
|
||||||
# att_tx = 0
|
|
||||||
# att_rx = 0;
|
|
||||||
# bands = [7];
|
|
||||||
# max_pdschReferenceSignalPower = -27;
|
|
||||||
# max_rxgain = 75;
|
|
||||||
# eNB_instances = [0];
|
|
||||||
# ##beamforming 1x2 matrix: 1 layer x 2 antennas
|
|
||||||
# bf_weights = [0x00007fff, 0x0000];
|
|
||||||
# ##beamforming 1x4 matrix: 1 layer x 4 antennas
|
|
||||||
# #bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
|
||||||
# ## beamforming 2x2 matrix:
|
|
||||||
# # bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
|
||||||
# ## beamforming 4x4 matrix:
|
|
||||||
# #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
|
||||||
|
|
||||||
# sdr_addrs = "addr=192.168.10.2,mgmt_addr=192.168.10.2,second_addr=192.168.20.2";
|
|
||||||
# clock_src = "external";
|
|
||||||
# }
|
|
||||||
# );
|
|
||||||
|
|
||||||
THREAD_STRUCT = (
|
|
||||||
{
|
|
||||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
|
||||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
|
||||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
|
||||||
worker_config = "WORKER_ENABLE";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
{
|
{
|
||||||
global_log_level ="info";
|
global_log_level ="info";
|
||||||
@@ -278,13 +85,15 @@ THREAD_STRUCT = (
|
|||||||
phy_log_verbosity ="medium";
|
phy_log_verbosity ="medium";
|
||||||
mac_log_level ="info";
|
mac_log_level ="info";
|
||||||
mac_log_verbosity ="high";
|
mac_log_verbosity ="high";
|
||||||
rlc_log_level ="info";
|
rlc_log_level ="debug";
|
||||||
rlc_log_verbosity ="medium";
|
rlc_log_verbosity ="medium";
|
||||||
pdcp_log_level ="debug";
|
pdcp_log_level ="info";
|
||||||
pdcp_log_verbosity ="medium";
|
pdcp_log_verbosity ="medium";
|
||||||
rrc_log_level ="debug";
|
rrc_log_level ="info";
|
||||||
rrc_log_verbosity ="medium";
|
rrc_log_verbosity ="medium";
|
||||||
f1ap_log_level ="info";
|
f1ap_log_level ="debug";
|
||||||
f1ap_log_verbosity ="medium";
|
f1ap_log_verbosity ="medium";
|
||||||
|
ngap_log_level ="debug";
|
||||||
|
ngap_log_verbosity ="medium";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
Active_gNBs = ( "gNB-Eurecom-DU");
|
Active_gNBs = ( "gNB-Eurecom-DU");
|
||||||
# Asn1_verbosity, choice in: none, info, annoying
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
Asn1_verbosity = "none";
|
Asn1_verbosity = "none";
|
||||||
Num_Threads_PUSCH = 8;
|
|
||||||
|
|
||||||
gNBs =
|
gNBs =
|
||||||
(
|
(
|
||||||
@@ -13,10 +12,26 @@ gNBs =
|
|||||||
|
|
||||||
gNB_name = "gNB-Eurecom-DU";
|
gNB_name = "gNB-Eurecom-DU";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
tracking_area_code = 1;
|
tracking_area_code = 1;
|
||||||
|
plmn_list = ({
|
||||||
|
mcc = 208;
|
||||||
|
mnc = 99;
|
||||||
|
mnc_length = 2;
|
||||||
|
snssaiList = (
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x010203; // 0 false, else true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x1; #112233; // 0 false, else true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});
|
|
||||||
|
|
||||||
nr_cellid = 12345678L
|
nr_cellid = 12345678L
|
||||||
|
|
||||||
@@ -29,6 +44,14 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 1;
|
pusch_AntennaPorts = 1;
|
||||||
sib1_tda = 0;
|
sib1_tda = 0;
|
||||||
|
|
||||||
|
|
||||||
|
pdcch_ConfigSIB1 = (
|
||||||
|
{
|
||||||
|
controlResourceSetZero = 12;
|
||||||
|
searchSpaceZero = 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
#spCellConfigCommon
|
#spCellConfigCommon
|
||||||
@@ -38,10 +61,10 @@ gNBs =
|
|||||||
# downlinkConfigCommon
|
# downlinkConfigCommon
|
||||||
#frequencyInfoDL
|
#frequencyInfoDL
|
||||||
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
|
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
|
||||||
absoluteFrequencySSB = 641032;
|
absoluteFrequencySSB = 641280;
|
||||||
dl_frequencyBand = 78;
|
dl_frequencyBand = 78;
|
||||||
# this is 3600 MHz
|
# this is 3600 MHz
|
||||||
dl_absoluteFrequencyPointA = 640000;
|
dl_absoluteFrequencyPointA = 640008;
|
||||||
#scs-SpecificCarrierList
|
#scs-SpecificCarrierList
|
||||||
dl_offstToCarrier = 0;
|
dl_offstToCarrier = 0;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
@@ -50,8 +73,8 @@ gNBs =
|
|||||||
dl_carrierBandwidth = 106;
|
dl_carrierBandwidth = 106;
|
||||||
#initialDownlinkBWP
|
#initialDownlinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
# this is RBstart=41,L=24 (275*(L-1))+RBstart
|
# this is RBstart=27,L=48 (275*(L-1))+RBstart
|
||||||
initialDLBWPlocationAndBandwidth = 6366;
|
initialDLBWPlocationAndBandwidth = 12952;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialDLBWPsubcarrierSpacing = 1;
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
@@ -65,12 +88,12 @@ gNBs =
|
|||||||
#0=typeA,1=typeB
|
#0=typeA,1=typeB
|
||||||
initialDLBWPmappingType_0 = 0;
|
initialDLBWPmappingType_0 = 0;
|
||||||
#this is SS=1,L=13
|
#this is SS=1,L=13
|
||||||
initialDLBWPstartSymbolAndLength_0 = 40;
|
initialDLBWPstartSymbolAndLength_0 = 53;
|
||||||
|
|
||||||
initialDLBWPk0_1 = 0;
|
initialDLBWPk0_1 = 0;
|
||||||
initialDLBWPmappingType_1 = 0;
|
initialDLBWPmappingType_1 = 0;
|
||||||
#this is SS=2,L=12
|
#this is SS=2,L=12
|
||||||
initialDLBWPstartSymbolAndLength_1 = 53;
|
initialDLBWPstartSymbolAndLength_1 = 81;
|
||||||
|
|
||||||
initialDLBWPk0_2 = 0;
|
initialDLBWPk0_2 = 0;
|
||||||
initialDLBWPmappingType_2 = 0;
|
initialDLBWPmappingType_2 = 0;
|
||||||
@@ -94,7 +117,7 @@ gNBs =
|
|||||||
pMax = 20;
|
pMax = 20;
|
||||||
#initialUplinkBWP
|
#initialUplinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
initialULBWPlocationAndBandwidth = 6366;
|
initialULBWPlocationAndBandwidth = 12952;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialULBWPsubcarrierSpacing = 1;
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
@@ -117,7 +140,7 @@ gNBs =
|
|||||||
ra_ResponseWindow = 4;
|
ra_ResponseWindow = 4;
|
||||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
||||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
#ra_ContentionResolutionTimer
|
#ra_ContentionResolutionTimer
|
||||||
@@ -138,8 +161,8 @@ gNBs =
|
|||||||
# pusch-ConfigCommon (up to 16 elements)
|
# pusch-ConfigCommon (up to 16 elements)
|
||||||
initialULBWPk2_0 = 6;
|
initialULBWPk2_0 = 6;
|
||||||
initialULBWPmappingType_0 = 1
|
initialULBWPmappingType_0 = 1
|
||||||
# this is SS=0 L=11
|
# this is SS=2 L=12
|
||||||
initialULBWPstartSymbolAndLength_0 = 55;
|
initialULBWPstartSymbolAndLength_0 = 53;
|
||||||
|
|
||||||
initialULBWPk2_1 = 6;
|
initialULBWPk2_1 = 6;
|
||||||
initialULBWPmappingType_1 = 1;
|
initialULBWPmappingType_1 = 1;
|
||||||
@@ -191,8 +214,8 @@ gNBs =
|
|||||||
nrofUplinkSlots = 2;
|
nrofUplinkSlots = 2;
|
||||||
nrofUplinkSymbols = 4;
|
nrofUplinkSymbols = 4;
|
||||||
|
|
||||||
ssPBCH_BlockPower = 10;
|
ssPBCH_BlockPower = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -204,25 +227,6 @@ gNBs =
|
|||||||
SCTP_INSTREAMS = 2;
|
SCTP_INSTREAMS = 2;
|
||||||
SCTP_OUTSTREAMS = 2;
|
SCTP_OUTSTREAMS = 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
////////// MME parameters:
|
|
||||||
mme_ip_address = ( { ipv4 = "192.168.12.26";
|
|
||||||
ipv6 = "192:168:30::17";
|
|
||||||
active = "yes";
|
|
||||||
preference = "ipv4";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
|
||||||
{
|
|
||||||
|
|
||||||
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
|
||||||
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
|
||||||
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
|
||||||
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
|
||||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -231,13 +235,14 @@ MACRLCs = (
|
|||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_s_preference = "local_L1";
|
tr_s_preference = "local_L1";
|
||||||
tr_n_preference = "f1";
|
tr_n_preference = "f1";
|
||||||
local_n_if_name = "lo";
|
local_n_if_name = "lo";
|
||||||
|
local_n_address = "127.0.0.3";
|
||||||
remote_n_address = "127.0.0.4";
|
remote_n_address = "127.0.0.4";
|
||||||
local_n_address = "127.0.0.3";
|
local_n_portc = 601;
|
||||||
local_n_portc = 500;
|
local_n_portd = 2152;
|
||||||
remote_n_portc = 501;
|
remote_n_portc = 600;
|
||||||
local_n_portd = 600;
|
remote_n_portd = 2152;
|
||||||
remote_n_portd = 601;
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -245,6 +250,7 @@ L1s = (
|
|||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
|
pusch_proc_threads = 2;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -300,5 +306,7 @@ THREAD_STRUCT = (
|
|||||||
rrc_log_verbosity ="medium";
|
rrc_log_verbosity ="medium";
|
||||||
f1ap_log_level ="debug";
|
f1ap_log_level ="debug";
|
||||||
f1ap_log_verbosity ="medium";
|
f1ap_log_verbosity ="medium";
|
||||||
|
ngap_log_level ="debug";
|
||||||
|
ngap_log_verbosity ="medium";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
uicc0 = {
|
||||||
|
imsi = "2089900007487";
|
||||||
|
key = "fec86ba6eb707ed08905757b1bb44b8f";
|
||||||
|
opc= "C42449363BBAD02B66D16BC975D77CC1";
|
||||||
|
dnn= "oai";
|
||||||
|
nssai_sst=1;
|
||||||
|
nssai_sd=1;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user