From 642fd9996b67689159c9922bf3849c760624ecea Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 19 Dec 2023 08:48:14 +0100 Subject: [PATCH 01/16] CU-CP/UP: release UE at PDCP in CU-CP We reuse RRC UE IDs at the RRC. Previous to this commit, we did not release a UE at the CU-CP's PDCP (for SRBs). Thus, when reconnecting a UE, the PDCP might not be in a good state, since we did not release the previous PDCP UE context. --- openair2/RRC/NR/rrc_gNB.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index d967d3623f..ee5afbce48 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -1904,6 +1904,10 @@ static void rrc_CU_process_ue_context_release_complete(MessageDef *msg_p) } gNB_RRC_UE_t *UE = &ue_context_p->ue_context; + /* we call nr_pdcp_remove_UE() in the handler of E1 bearer release, but if we + * are in E1, we also need to free the UE in the CU-CP, so call it twice to + * cover all cases */ + nr_pdcp_remove_UE(UE->rrc_ue_id); rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE(instance, UE->rrc_ue_id); LOG_I(NR_RRC, "removed UE CU UE ID %u/RNTI %04x \n", UE->rrc_ue_id, UE->rnti); rrc_delete_ue_data(UE); From 8c8971258e00ff2b2c06158e7053b767ae45656d Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 19 Dec 2023 08:50:56 +0100 Subject: [PATCH 02/16] NGAP: read correct PDU session NSSAI The allowed NSSAIs is NOT the NSSAI to be used for a UE. Fix it to use the correct one. --- openair2/RRC/NR/rrc_gNB_NGAP.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c index b659ccc2f8..00497d6d1b 100644 --- a/openair2/RRC/NR/rrc_gNB_NGAP.c +++ b/openair2/RRC/NR/rrc_gNB_NGAP.c @@ -788,9 +788,7 @@ void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(MessageDef *msg_p, instance_t ins pdu_session_to_setup_t *pdu = bearer_req.pduSession + bearer_req.numPDUSessions; bearer_req.numPDUSessions++; pdu->sessionId = session->pdusession_id; - nssai_t *nssai = &msg->allowed_nssai[i]; - pdu->nssai.sst = nssai->sst; - pdu->nssai.sd = nssai->sd; + pdu->nssai = msg->pdusession_setup_params[i].nssai; if (cuup_nssai.sst == 0) cuup_nssai = pdu->nssai; /* for CU-UP selection below */ pdu->integrityProtectionIndication = rrc->security.do_drb_integrity ? E1AP_IntegrityProtectionIndication_required : E1AP_IntegrityProtectionIndication_not_needed; From 51f0c245aa095bd6a8431b3e69665e3ada776489 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 19 Dec 2023 08:52:06 +0100 Subject: [PATCH 03/16] GTP: clarify GTP Error Ind error message --- openair3/ocp-gtpu/gtp_itf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair3/ocp-gtpu/gtp_itf.cpp b/openair3/ocp-gtpu/gtp_itf.cpp index 69db8caa4a..0028236a34 100644 --- a/openair3/ocp-gtpu/gtp_itf.cpp +++ b/openair3/ocp-gtpu/gtp_itf.cpp @@ -940,7 +940,7 @@ static int Gtpv1uHandleError(int h, uint32_t msgBufLen, uint16_t peerPort, uint32_t peerIp) { - LOG_E(GTPU, "Handle error to be dev\n"); + LOG_E(GTPU, "Received GTP error indication (error handling is missing/not implemented)\n"); int rc = GTPNOK; return rc; } From 8daf1edbc634cd3afe03429991896366576657bc Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 19 Dec 2023 08:52:43 +0100 Subject: [PATCH 04/16] RRC: bearer context setup: correctly store DRB QoS params When setting up bearer(s) through F1, the corresponding F1 message has QoS fields for the DRB(s) to be set up, as well as for all flows associated to this DRB. In this commit, set the DRB QoS field to be equal to the first flow (it is unclear/unspecified how it should be set up, based on the flows), which was not set before and therefore contained unitialized data. The F1 module uses this data, and in split mode, F1 message generation failed due to uninitialized data. --- openair2/RRC/NR/rrc_gNB.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index ee5afbce48..680b89fbde 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -2093,6 +2093,7 @@ void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp /* pass QoS info to MAC */ int nb_qos_flows = drb_config->numQosFlowSetup; + AssertFatal(nb_qos_flows > 0, "must map at least one flow to a DRB\n"); drbs[i].drb_info.flows_to_be_setup_length = nb_qos_flows; drbs[i].drb_info.flows_mapped_to_drb = (f1ap_flows_mapped_to_drb_t *)calloc(nb_qos_flows, sizeof(f1ap_flows_mapped_to_drb_t)); AssertFatal(drbs[i].drb_info.flows_mapped_to_drb, "could not allocate memory\n"); @@ -2111,6 +2112,9 @@ void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp qos_char->non_dynamic.qos_priority_level = in_qos_char->qos_priority; } } + /* the DRB QoS parameters: we just reuse the ones from the first flow */ + drbs[i].drb_info.drb_qos = drbs[i].drb_info.flows_mapped_to_drb[0].qos_params; + /* pass NSSAI info to MAC */ drbs[i].nssai = RRC_pduSession->param.nssai; } From 25a290ed0bce7de001ad38e22e98f1c157e19f06 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 19 Dec 2023 08:55:12 +0100 Subject: [PATCH 05/16] F1AP: fixup: use correct DRB array index --- openair2/F1AP/f1ap_cu_ue_context_management.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair2/F1AP/f1ap_cu_ue_context_management.c b/openair2/F1AP/f1ap_cu_ue_context_management.c index 08090a1395..cc29a92ebb 100644 --- a/openair2/F1AP/f1ap_cu_ue_context_management.c +++ b/openair2/F1AP/f1ap_cu_ue_context_management.c @@ -1227,7 +1227,7 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(sctp_assoc_t assoc_id, f1ap_ue_conte else{ /* 12.1.2 DRB_Information */ - f1ap_drb_information_t *drb_info_in = &f1ap_ue_context_modification_req->drbs_to_be_setup->drb_info; + f1ap_drb_information_t *drb_info_in = &f1ap_ue_context_modification_req->drbs_to_be_setup[i].drb_info; drbs_toBeSetupMod_item->qoSInformation.present = F1AP_QoSInformation_PR_choice_extension; F1AP_QoSInformation_ExtIEs_t *ie = (F1AP_QoSInformation_ExtIEs_t *)calloc(1, sizeof(*ie)); ie->id = F1AP_ProtocolIE_ID_id_DRB_Information; From 63f3b123aefc830d423e8900b9a259af7ef891de Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 19 Dec 2023 11:27:09 +0100 Subject: [PATCH 06/16] Print F1AP UE Release Request message after UL failure Additionally, initialize the F1AP PDU to zeros --- openair2/F1AP/f1ap_du_ue_context_management.c | 2 +- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/openair2/F1AP/f1ap_du_ue_context_management.c b/openair2/F1AP/f1ap_du_ue_context_management.c index 4eee1ba6b1..3ce64bb351 100644 --- a/openair2/F1AP/f1ap_du_ue_context_management.c +++ b/openair2/F1AP/f1ap_du_ue_context_management.c @@ -554,7 +554,7 @@ int DU_send_UE_CONTEXT_SETUP_FAILURE(sctp_assoc_t assoc_id) int DU_send_UE_CONTEXT_RELEASE_REQUEST(sctp_assoc_t assoc_id, f1ap_ue_context_release_req_t *req) { - F1AP_F1AP_PDU_t pdu; + F1AP_F1AP_PDU_t pdu = {0}; F1AP_UEContextReleaseRequest_t *out; uint8_t *buffer=NULL; uint32_t len=0; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c index 1a5439e292..2022f46a5b 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c @@ -3097,6 +3097,7 @@ void nr_mac_check_ul_failure(const gNB_MAC_INST *nrmac, int rnti, NR_UE_sched_ct /* to trigger only once: trigger when ul_failure_timer == 1, but timer will * stop at 0 and we wait for a UE release command from upper layers */ if (sched_ctrl->ul_failure_timer == 1) { + LOG_W(MAC, "request release after UL failure timer expiry\n"); f1_ue_data_t ue_data = du_get_f1_ue_data(rnti); f1ap_ue_context_release_req_t request = { .gNB_CU_ue_id = ue_data.secondary_ue, From 61cc505f5cd33d6111cc9e13deecc067ad2a3ef2 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 19 Dec 2023 11:31:08 +0100 Subject: [PATCH 07/16] Remove commented code --- openair2/F1AP/f1ap_encoder.c | 286 ----------------------------------- 1 file changed, 286 deletions(-) diff --git a/openair2/F1AP/f1ap_encoder.c b/openair2/F1AP/f1ap_encoder.c index b249f23cfe..870dfd73fc 100644 --- a/openair2/F1AP/f1ap_encoder.c +++ b/openair2/F1AP/f1ap_encoder.c @@ -21,13 +21,6 @@ /*! \file f1ap_encoder.c * \brief f1ap pdu encode procedures - * \author EURECOM/NTUST - * \date 2018 - * \version 0.1 - * \company Eurecom - * \email: navid.nikaein@eurecom.fr, bing-kai.hong@eurecom.fr - * \note - * \warning */ #include "f1ap_common.h" @@ -66,282 +59,3 @@ int f1ap_encode_pdu(F1AP_F1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *length) { *length = encoded; return encoded; } - -/* -static inline -int f1ap_encode_initiating(f1ap_message *f1ap_message_p, - uint8_t **buffer, uint32_t *len) -{ - int ret = -1; - MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; - MessagesIds message_id; - - DevAssert(f1ap_message_p != NULL); - - message_string = calloc(10000, sizeof(char)); - - f1ap_string_total_size = 0; - - switch(f1ap_message_p->procedureCode) { - case F1ap_ProcedureCode_id_F1Setup: - ret = f1ap_encode_f1_setup_request( - &f1ap_message_p->msg.f1ap_F1SetupRequestIEs, buffer, len); - //f1ap_xer_print_f1ap_f1setuprequest(f1ap_xer__print2sp, message_string, f1ap_message_p); - message_id = F1AP_F1_SETUP_LOG; - break; - - case F1ap_ProcedureCode_id_UEContextReleaseRequest: - ret = f1ap_encode_ue_context_release_request( - &f1ap_message_p->msg.f1ap_UEContextReleaseRequestIEs, buffer, len); - //f1ap_xer_print_f1ap_uecontextreleaserequest(f1ap_xer__print2sp, - // message_string, f1ap_message_p); - message_id = F1AP_UE_CONTEXT_RELEASE_REQ_LOG; - break; - - - default: - F1AP_DEBUG("Unknown procedure ID (%d) for initiating message\n", - (int)f1ap_message_p->procedureCode); - return ret; - break; - } - - message_string_size = strlen(message_string); - - message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.f1ap_f1_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.f1ap_f1_setup_log.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - - free(message_string); - - return ret; -} - -static inline -int f1ap_encode_successfull_outcome(f1ap_message *f1ap_message_p, - uint8_t **buffer, uint32_t *len) -{ - int ret = -1; - MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; - MessagesIds message_id; - - DevAssert(f1ap_message_p != NULL); - - message_string = calloc(10000, sizeof(char)); - - f1ap_string_total_size = 0; - message_string_size = strlen(message_string); - - - switch(f1ap_message_p->procedureCode) { - case F1ap_ProcedureCode_id_InitialContextSetup: - ret = f1ap_encode_initial_context_setup_response( - &f1ap_message_p->msg.f1ap_InitialContextSetupResponseIEs, buffer, len); - - f1ap_xer_print_f1ap_initialcontextsetupresponse(f1ap_xer__print2sp, message_string, f1ap_message_p); - message_id = F1AP_INITIAL_CONTEXT_SETUP_LOG; - message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.f1ap_initial_context_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.f1ap_initial_context_setup_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - break; - - case F1ap_ProcedureCode_id_UEContextRelease: - ret = f1ap_encode_ue_context_release_complete( - &f1ap_message_p->msg.f1ap_UEContextReleaseCompleteIEs, buffer, len); - f1ap_xer_print_f1ap_uecontextreleasecomplete(f1ap_xer__print2sp, message_string, f1ap_message_p); - message_id = F1AP_UE_CONTEXT_RELEASE_COMPLETE_LOG; - message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.f1ap_ue_context_release_complete_log.size = message_string_size; - memcpy(&message_p->ittiMsg.f1ap_ue_context_release_complete_log.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - free(message_string); - break; - - default: - F1AP_WARN("Unknown procedure ID (%d) for successfull outcome message\n", - (int)f1ap_message_p->procedureCode); - return ret; - break; - } - - - return ret; -} - -static inline -int f1ap_encode_unsuccessfull_outcome(f1ap_message *f1ap_message_p, - uint8_t **buffer, uint32_t *len) -{ - int ret = -1; - MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; - MessagesIds message_id; - - DevAssert(f1ap_message_p != NULL); - - message_string = calloc(10000, sizeof(char)); - - f1ap_string_total_size = 0; - - switch(f1ap_message_p->procedureCode) { - case F1ap_ProcedureCode_id_InitialContextSetup: - // ret = f1ap_encode_f1ap_initialcontextsetupfailureies( - // &f1ap_message_p->ittiMsg.f1ap_InitialContextSetupFailureIEs, buffer, len); - f1ap_xer_print_f1ap_initialcontextsetupfailure(f1ap_xer__print2sp, message_string, f1ap_message_p); - message_id = F1AP_INITIAL_CONTEXT_SETUP_LOG; - break; - - default: - F1AP_DEBUG("Unknown procedure ID (%d) for unsuccessfull outcome message\n", - (int)f1ap_message_p->procedureCode); - return ret; - break; - } - - message_string_size = strlen(message_string); - - message_p = itti_alloc_new_message_sized(TASK_F1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.f1ap_initial_context_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.f1ap_initial_context_setup_log.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - - free(message_string); - - return ret; -} - -static inline -int f1ap_encode_f1_setup_request( - F1ap_F1SetupRequestIEs_t *f1SetupRequestIEs, - uint8_t **buffer, - uint32_t *length) -{ - F1ap_F1SetupRequest_t f1SetupRequest; - F1ap_F1SetupRequest_t *f1SetupRequest_p = &f1SetupRequest; - - memset((void *)f1SetupRequest_p, 0, sizeof(f1SetupRequest)); - - if (f1ap_encode_f1ap_f1setuprequesties(f1SetupRequest_p, f1SetupRequestIEs) < 0) { - return -1; - } - - return f1ap_generate_initiating_message(buffer, - length, - F1ap_ProcedureCode_id_F1Setup, - F1ap_Criticality_reject, - &asn_DEF_F1ap_F1SetupRequest, - f1SetupRequest_p); -} - -static inline -int f1ap_encode_trace_failure( - F1ap_TraceFailureIndicationIEs_t *trace_failure_ies_p, - uint8_t **buffer, - uint32_t *length) -{ - F1ap_TraceFailureIndication_t trace_failure; - F1ap_TraceFailureIndication_t *trace_failure_p = &trace_failure; - - memset((void *)trace_failure_p, 0, sizeof(trace_failure)); - - if (f1ap_encode_f1ap_tracefailureindicationies( - trace_failure_p, trace_failure_ies_p) < 0) { - return -1; - } - - return f1ap_generate_initiating_message(buffer, - length, - F1ap_ProcedureCode_id_TraceFailureIndication, - F1ap_Criticality_reject, - &asn_DEF_F1ap_TraceFailureIndication, - trace_failure_p); -} - -static inline -int f1ap_encode_initial_context_setup_response( - F1ap_InitialContextSetupResponseIEs_t *initialContextSetupResponseIEs, - uint8_t **buffer, - uint32_t *length) -{ - F1ap_InitialContextSetupResponse_t initial_context_setup_response; - F1ap_InitialContextSetupResponse_t *initial_context_setup_response_p = - &initial_context_setup_response; - - memset((void *)initial_context_setup_response_p, 0, - sizeof(initial_context_setup_response)); - - if (f1ap_encode_f1ap_initialcontextsetupresponseies( - initial_context_setup_response_p, initialContextSetupResponseIEs) < 0) { - return -1; - } - - return f1ap_generate_successfull_outcome(buffer, - length, - F1ap_ProcedureCode_id_InitialContextSetup, - F1ap_Criticality_reject, - &asn_DEF_F1ap_InitialContextSetupResponse, - initial_context_setup_response_p); -} - -static inline -int f1ap_encode_ue_context_release_complete( - F1ap_UEContextReleaseCompleteIEs_t *f1ap_UEContextReleaseCompleteIEs, - uint8_t **buffer, - uint32_t *length) -{ - F1ap_UEContextReleaseComplete_t ue_context_release_complete; - F1ap_UEContextReleaseComplete_t *ue_context_release_complete_p = - &ue_context_release_complete; - - memset((void *)ue_context_release_complete_p, 0, - sizeof(ue_context_release_complete)); - - if (f1ap_encode_f1ap_uecontextreleasecompleteies( - ue_context_release_complete_p, f1ap_UEContextReleaseCompleteIEs) < 0) { - return -1; - } - - return f1ap_generate_successfull_outcome(buffer, - length, - F1ap_ProcedureCode_id_UEContextRelease, - F1ap_Criticality_reject, - &asn_DEF_F1ap_UEContextReleaseComplete, - ue_context_release_complete_p); -} - -static inline -int f1ap_encode_ue_context_release_request( - F1ap_UEContextReleaseRequestIEs_t *f1ap_UEContextReleaseRequestIEs, - uint8_t **buffer, - uint32_t *length) -{ - F1ap_UEContextReleaseRequest_t ue_context_release_request; - F1ap_UEContextReleaseRequest_t *ue_context_release_request_p = - &ue_context_release_request; - - memset((void *)ue_context_release_request_p, 0, - sizeof(ue_context_release_request)); - - if (f1ap_encode_f1ap_uecontextreleaserequesties( - ue_context_release_request_p, f1ap_UEContextReleaseRequestIEs) < 0) { - return -1; - } - - return f1ap_generate_initiating_message(buffer, - length, - F1ap_ProcedureCode_id_UEContextReleaseRequest, - F1ap_Criticality_reject, - &asn_DEF_F1ap_UEContextReleaseRequest, - ue_context_release_request_p); -} -*/ From 09652061bb93ee1eb88656322146a0a95b058062 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 19 Dec 2023 17:17:41 +0100 Subject: [PATCH 08/16] Lower RFsim EAGAIN error message to debug message We set the RFsim TCP socket to non-blocking. Thus, it may happen that we cannot write() to the socket when the kernel cannot handle the request, in which case we wait some time before trying again. This is the correct/expected behavior. Since this is *normal*, an error message is not justified; we did not even print a message in this case before commit 21790f9c4fc introduced it. --- radio/rfsimulator/simulator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/rfsimulator/simulator.c b/radio/rfsimulator/simulator.c index 1111e48e6b..5dea88edd5 100644 --- a/radio/rfsimulator/simulator.c +++ b/radio/rfsimulator/simulator.c @@ -314,7 +314,7 @@ static void fullwrite(int fd, void *_buf, ssize_t count, rfsimulator_state_t *t) continue; if (errno == EAGAIN) { - LOG_E(HW, "write() failed, errno(%d)\n", errno); + LOG_D(HW, "write() failed, errno(%d)\n", errno); usleep(250); continue; } else From db2e27e6533e49a239d47e35f0221a4ffcffd02d Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 20 Dec 2023 10:44:04 +0100 Subject: [PATCH 09/16] Increase log level for CU-UP selection to improve visibility --- openair2/RRC/NR/rrc_gNB_cuup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair2/RRC/NR/rrc_gNB_cuup.c b/openair2/RRC/NR/rrc_gNB_cuup.c index 3ab6dfe7bb..6c5ea8aef5 100644 --- a/openair2/RRC/NR/rrc_gNB_cuup.c +++ b/openair2/RRC/NR/rrc_gNB_cuup.c @@ -46,7 +46,7 @@ static const nr_rrc_cuup_container_t *select_cuup_slice(const struct rrc_cuup_tr for (int s = 0; s < sr->plmn[p].supported_slices; ++s) { e1ap_nssai_t *nssai = &sr->plmn[p].slice[s]; if (nssai->sst == sst && nssai->sd == sd) { - LOG_I(RRC, "selecting CU-UP ID %ld based on exact NSSAI match (%d:0x%06x)\n", sr->gNB_cu_up_id, sst, sd); + LOG_A(RRC, "selecting CU-UP ID %ld based on exact NSSAI match (%d:0x%06x)\n", sr->gNB_cu_up_id, sst, sd); return cuup; /* exact match */ } else if (nssai->sst == sst && second_best_match == NULL) { LOG_I(RRC, "second best match: CU-UP ID %ld matches SST %d\n", sr->gNB_cu_up_id, sst); @@ -66,7 +66,7 @@ static const nr_rrc_cuup_container_t *select_cuup_round_robin(size_t n_t, const nr_rrc_cuup_container_t *cuup = NULL; RB_FOREACH(cuup, rrc_cuup_tree, (struct rrc_cuup_tree *)&t) { if (m == 0) { - LOG_I(RRC, "round-robin match: select CU-UP ID %ld (no NSSAI match)\n", cuup->setup_req->gNB_cu_up_id); + LOG_W(RRC, "round-robin match: select CU-UP ID %ld (no NSSAI match)\n", cuup->setup_req->gNB_cu_up_id); return cuup; } m--; From 284116522b7d90d9dfb08d7b72397b3c8fde207e Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 21 Dec 2023 13:22:18 +0100 Subject: [PATCH 10/16] F1AP SCTP: don't bind local address binding the local address for SCTP is pointless, because we don't really care through which interface SCTP traffic goes. Actually, we even might want to set the DU remote_n_addr and the the local_n_addr to addresses in different networks, because we might want to have GTP traffic go through a different interface than SCTP, as done in the CI test for E1. --- openair2/F1AP/f1ap_du_task.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/openair2/F1AP/f1ap_du_task.c b/openair2/F1AP/f1ap_du_task.c index 7ba479e1f9..d823a35092 100644 --- a/openair2/F1AP/f1ap_du_task.c +++ b/openair2/F1AP/f1ap_du_task.c @@ -54,8 +54,6 @@ void du_task_send_sctp_association_req(instance_t instance, f1ap_net_config_t *n sctp_new_association_req_p->out_streams = 2; //du_inst->sctp_out_streams; // remote memcpy(&sctp_new_association_req_p->remote_address, &nc->CU_f1_ip_address, sizeof(nc->CU_f1_ip_address)); - // local - memcpy(&sctp_new_association_req_p->local_address, &nc->DU_f1_ip_address, sizeof(nc->DU_f1_ip_address)); // du_f1ap_register_to_sctp itti_send_msg_to_task(TASK_SCTP, instance, message_p); } From 6c830a488d1a510416e77b4d6e36f7613b297568 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 21 Dec 2023 14:29:23 +0100 Subject: [PATCH 11/16] Simplify F1 test and harmonize with complex F1+E1 test - Test only one DU at the CU (3 DUs is tested in F1+E1) - Harmonize IP configuration to make it simpler to reuse in the F1+E1 test - Speed up the test by reducing the number of steps to deploy core/RAN - Add traffic test --- .../conf_files/gnb-cu.sa.band78.106prb.conf | 8 +- .../gnb-du.sa.band78.106prb.rfsim.conf | 7 +- .../xml_files/container_5g_f1_rfsim.xml | 54 ++------- .../5g_f1_rfsimulator/docker-compose.yaml | 109 ++++-------------- 4 files changed, 42 insertions(+), 136 deletions(-) diff --git a/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf b/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf index 8a33b6dd96..7f975cbcd4 100644 --- a/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf +++ b/ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf @@ -23,8 +23,8 @@ gNBs = tr_s_preference = "f1"; local_s_if_name = "eth0"; - local_s_address = "192.168.71.140"; - remote_s_address = "192.168.71.142"; + local_s_address = "192.168.71.150"; + remote_s_address = "192.168.71.171"; local_s_portc = 501; local_s_portd = 2153; remote_s_portc = 500; @@ -51,9 +51,9 @@ gNBs = { GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0"; - GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140"; + GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.150"; GNB_INTERFACE_NAME_FOR_NGU = "eth0"; - GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140"; + GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.150"; GNB_PORT_FOR_S1U = 2152; # Spec 2152 }; } diff --git a/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf b/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf index 75d2beed6d..9d8a3cb57b 100644 --- a/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf +++ b/ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf @@ -15,7 +15,7 @@ gNBs = // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = 1; - plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) }); + plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }, { sst = 2 }, { sst = 3 } ) }); nr_cellid = 12345678L; @@ -23,7 +23,6 @@ gNBs = ////////// Physical parameters: min_rxtxtime = 6; - force_256qam_off = 1; servingCellConfigCommon = ( { @@ -170,8 +169,8 @@ MACRLCs = ( tr_s_preference = "local_L1"; tr_n_preference = "f1"; local_n_if_name = "eth0"; - local_n_address = "192.168.71.142"; - remote_n_address = "192.168.71.140"; + local_n_address = "192.168.71.171"; + remote_n_address = "192.168.71.150"; local_n_portc = 500; local_n_portd = 2153; remote_n_portc = 501; diff --git a/ci-scripts/xml_files/container_5g_f1_rfsim.xml b/ci-scripts/xml_files/container_5g_f1_rfsim.xml index 6f8f71095c..c6eb681a58 100644 --- a/ci-scripts/xml_files/container_5g_f1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_f1_rfsim.xml @@ -27,13 +27,11 @@ 111111 100021 - 000020 000021 000022 - 000023 - 000024 - 000025 020021 + 030021 + 030022 100021 @@ -42,61 +40,29 @@ Pull_Local_Registry Pull Images from Local Registry 0 - oai-gnb-asan oai-nr-ue-asan - - - - DeployGenObject - Deploy MySql Database - yaml_files/5g_f1_rfsimulator - mysql - 1 + oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan DeployGenObject Deploy OAI 5G CoreNetwork yaml_files/5g_f1_rfsimulator - oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn + mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn 6 DeployGenObject - Deploy OAI 5G CU RF sim SA + Deploy OAI 5G CU+DU+UE RF sim SA yaml_files/5g_f1_rfsimulator - oai-cu - 7 - - - - DeployGenObject - Deploy 3 OAI 5G DUs RF sim SA - yaml_files/5g_f1_rfsimulator - oai-du oai-du2 oai-du3 - 10 - - - - DeployGenObject - Deploy OAI 5G NR-UE RF sim SA - yaml_files/5g_f1_rfsimulator - oai-nr-ue oai-nr-ue2 - 12 - - - - DeployGenObject - Deploy OAI 5G NR-UE RF sim SA - yaml_files/5g_f1_rfsimulator - oai-nr-ue3 - 13 + oai-cu oai-du oai-nr-ue + 9 Ping Ping ext-dn from all NR-UEs - rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 + rfsim5g_ue -c 20 192.168.72.135 -i0.25 5 @@ -107,7 +73,7 @@ rfsim5g-oai-nr-ue rfsim5g-oai-ext-dn -B 12.1.1.2 -u -i 1 -s - -c 12.1.1.2 -u -i 1 -t 30 -b 3M + -c 12.1.1.2 -u -i 1 -t 10 -b 20M @@ -116,7 +82,7 @@ rfsim5g-oai-ext-dn rfsim5g-oai-nr-ue -u -i 1 -s - -B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 30 -b 1M + -B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 10 -b 5M diff --git a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml index 8d62746300..308efdc33b 100644 --- a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml @@ -49,8 +49,10 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 - # Only one slice is defined (1, 0xFFFFFF). + # Three slices are defined - SST_0=1 + - SST_1=2 + - SST_2=3 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 # One single SMF instance @@ -101,6 +103,8 @@ services: - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 + - NSSAI_SST1=2 + - NSSAI_SST2=3 - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 @@ -127,10 +131,16 @@ services: - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - NRF_FQDN=oai-nrf - # Only one slice is defined (1, 0xFFFFFF) + # Three slices are defined - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai + - NSSAI_SST_1=2 + - NSSAI_SD_1=0xffffff + - DNN_1=oai + - NSSAI_SST_2=3 + - NSSAI_SD_2=0xffffff + - DNN_2=oai depends_on: - oai-nrf - oai-smf @@ -145,6 +155,7 @@ services: ipv4_address: 192.168.71.134 traffic_net: ipv4_address: 192.168.72.134 + oai-ext-dn: privileged: true container_name: rfsim5g-oai-ext-dn @@ -162,6 +173,7 @@ services: interval: 10s timeout: 5s retries: 5 + oai-cu: image: oaisoftwarealliance/oai-gnb:develop privileged: true @@ -173,7 +185,7 @@ services: - oai-ext-dn networks: public_net: - ipv4_address: 192.168.71.140 + ipv4_address: 192.168.71.150 volumes: - ../../conf_files/gnb-cu.sa.band78.106prb.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -181,56 +193,19 @@ services: interval: 10s timeout: 5s retries: 5 + oai-du: image: oaisoftwarealliance/oai-gnb:develop privileged: true container_name: rfsim5g-oai-du - environment: + environment: USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-cu networks: public_net: - ipv4_address: 192.168.71.142 - volumes: - - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf - healthcheck: - test: /bin/bash -c "pgrep nr-softmodem" - interval: 10s - timeout: 5s - retries: 5 - oai-du2: - image: oaisoftwarealliance/oai-gnb:develop - privileged: true - container_name: rfsim5g-oai-du2 - environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim --gNBs.[0].gNB_DU_ID 0xe01 --gNBs.[0].nr_cellid 87654321 --gNBs.[0].servingCellConfigCommon.[0].physCellId 1 --MACRLCs.[0].local_n_address 192.168.71.143 --log_config.global_log_options level,nocolor,time - ASAN_OPTIONS: detect_leaks=0 - depends_on: - - oai-cu - networks: - public_net: - ipv4_address: 192.168.71.143 - volumes: - - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf - healthcheck: - test: /bin/bash -c "pgrep nr-softmodem" - interval: 10s - timeout: 5s - retries: 5 - oai-du3: - image: oaisoftwarealliance/oai-gnb:develop - privileged: true - container_name: rfsim5g-oai-du3 - environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim --gNBs.[0].gNB_DU_ID 0xe02 --gNBs.[0].nr_cellid 11111111 --gNBs.[0].servingCellConfigCommon.[0].physCellId 2 --MACRLCs.[0].local_n_address 192.168.71.144 --log_config.global_log_options level,nocolor,time - ASAN_OPTIONS: detect_leaks=0 - depends_on: - - oai-cu - networks: - public_net: - ipv4_address: 192.168.71.144 + ipv4_address: 192.168.71.171 volumes: - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -238,56 +213,22 @@ services: interval: 10s timeout: 5s retries: 5 + oai-nr-ue: image: oaisoftwarealliance/oai-nr-ue:develop privileged: true container_name: rfsim5g-oai-nr-ue - environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 -C 3619200000 --rfsimulator.serveraddr 192.168.71.142 --log_config.global_log_options level,nocolor,time + environment: + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + -r 106 --numerology 1 -C 3619200000 + --uicc0.imsi 208990100001100 + --rfsimulator.serveraddr 192.168.71.171 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-du networks: public_net: - ipv4_address: 192.168.71.150 - volumes: - - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf - healthcheck: - test: /bin/bash -c "pgrep nr-uesoftmodem" - interval: 10s - timeout: 5s - retries: 5 - oai-nr-ue2: - image: oaisoftwarealliance/oai-nr-ue:develop - privileged: true - container_name: rfsim5g-oai-nr-ue2 - environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001101 -C 3619200000 --rfsimulator.serveraddr 192.168.71.143 --log_config.global_log_options level,nocolor,time - ASAN_OPTIONS: detect_leaks=0 - depends_on: - - oai-du2 - networks: - public_net: - ipv4_address: 192.168.71.151 - volumes: - - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf - healthcheck: - test: /bin/bash -c "pgrep nr-uesoftmodem" - interval: 10s - timeout: 5s - retries: 5 - oai-nr-ue3: - image: oaisoftwarealliance/oai-nr-ue:develop - privileged: true - container_name: rfsim5g-oai-nr-ue3 - environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001102 -C 3619200000 --rfsimulator.serveraddr 192.168.71.144 --log_config.global_log_options level,nocolor,time - ASAN_OPTIONS: detect_leaks=0 - depends_on: - - oai-du3 - networks: - public_net: - ipv4_address: 192.168.71.152 + ipv4_address: 192.168.71.181 volumes: - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf healthcheck: From 63e2ca15bc404b18b3d655a2e2657132b5ee0657 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 21 Dec 2023 14:29:32 +0100 Subject: [PATCH 12/16] Extend F1+E1 test for multiple CU-UPs The 5G-RFsim F1 test tested multiple DUs at one CU. This functionality is retained in the new F1+E1 test. The 5G-RFsim E1 test tested a single CU-UP at a single CU-CP. Here, we extend to use multiple CU-UPs, one for each DU. The associated is ensured by using three different F1-U transport networks, one for each DU/CU-UP pair. --- ci-scripts/conf_files/gnb-cucp.sa.f1.conf | 10 +- ci-scripts/conf_files/gnb-cuup.sa.f1.conf | 16 +- .../xml_files/container_5g_e1_rfsim.xml | 64 +---- .../xml_files/container_5g_e1_rfsim_down.xml | 2 +- .../yaml_files/5g_rfsimulator_e1/README.md | 136 ++++++++++ .../5g_rfsimulator_e1/docker-compose.yaml | 247 ++++++++++++++++-- 6 files changed, 377 insertions(+), 98 deletions(-) create mode 100644 ci-scripts/yaml_files/5g_rfsimulator_e1/README.md diff --git a/ci-scripts/conf_files/gnb-cucp.sa.f1.conf b/ci-scripts/conf_files/gnb-cucp.sa.f1.conf index 469ab8d187..94200b8189 100644 --- a/ci-scripts/conf_files/gnb-cucp.sa.f1.conf +++ b/ci-scripts/conf_files/gnb-cucp.sa.f1.conf @@ -16,7 +16,7 @@ gNBs = // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = 1; - plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) }); + plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }, { sst = 2 }, { sst = 3 }) }); nr_cellid = 12345678L; @@ -24,8 +24,8 @@ gNBs = tr_s_preference = "f1"; local_s_if_name = "lo"; - local_s_address = "192.168.72.140"; - remote_s_address = "192.168.72.143"; + local_s_address = "192.168.71.150"; + remote_s_address = "0.0.0.0"; # multiple DUs local_s_portc = 501; local_s_portd = 2152; remote_s_portc = 500; @@ -52,9 +52,9 @@ gNBs = ( { type = "cp"; - ipv4_cucp = "192.168.72.140"; + ipv4_cucp = "192.168.71.150"; port_cucp = 38462; - ipv4_cuup = "192.168.72.141"; + ipv4_cuup = "0.0.0.0"; # multiple CU-UPs port_cuup = 38462; } ) diff --git a/ci-scripts/conf_files/gnb-cuup.sa.f1.conf b/ci-scripts/conf_files/gnb-cuup.sa.f1.conf index d6c54f0b9a..07e3701749 100644 --- a/ci-scripts/conf_files/gnb-cuup.sa.f1.conf +++ b/ci-scripts/conf_files/gnb-cuup.sa.f1.conf @@ -22,12 +22,12 @@ gNBs = tr_s_preference = "f1"; local_s_if_name = "lo"; - local_s_address = "192.168.72.141"; - remote_s_address = "192.168.72.142"; + local_s_address = "192.168.72.161"; + remote_s_address = "192.168.72.171"; local_s_portc = 501; - local_s_portd = 2152; + local_s_portd = 2153; remote_s_portc = 500; - remote_s_portd = 2152; + remote_s_portd = 2153; # ------- SCTP definitions SCTP : @@ -41,17 +41,17 @@ gNBs = ( { type = "up"; - ipv4_cucp = "192.168.72.140"; - ipv4_cuup = "192.168.72.141"; + ipv4_cucp = "192.168.71.150"; + ipv4_cuup = "192.168.71.161"; } ) NETWORK_INTERFACES : { GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai"; - GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.141/24"; + GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.161/24"; GNB_INTERFACE_NAME_FOR_NGU = "demo-oai"; - GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.141/24"; + GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.161/24"; GNB_PORT_FOR_S1U = 2152; # Spec 2152 }; } diff --git a/ci-scripts/xml_files/container_5g_e1_rfsim.xml b/ci-scripts/xml_files/container_5g_e1_rfsim.xml index b89b8a2bd2..8ccb7bdd15 100644 --- a/ci-scripts/xml_files/container_5g_e1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_e1_rfsim.xml @@ -27,14 +27,10 @@ 111111 100021 - 000020 000021 000022 000023 - 000024 020021 - 020022 - 030021 100021 @@ -46,80 +42,38 @@ oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan - - DeployGenObject - Deploy MySql Database - yaml_files/5g_rfsimulator_e1 - mysql - 1 - - DeployGenObject Deploy OAI 5G CoreNetwork yaml_files/5g_rfsimulator_e1 - oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn + mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn 6 DeployGenObject - Deploy OAI 5G CU-CP RF sim SA + Deploy OAI 5G RAN RF sim SA (1 CU-CP, 3 CU-UPs, 3 DUs) yaml_files/5g_rfsimulator_e1 - oai-cucp - 7 + oai-cucp oai-cuup oai-cuup2 oai-cuup3 oai-du oai-du2 oai-du3 + 13 - DeployGenObject - Deploy OAI 5G CU-UP and DU RF sim SA - yaml_files/5g_rfsimulator_e1 - oai-cuup oai-du - 9 - - - DeployGenObject Deploy OAI 5G NR-UE RF sim SA yaml_files/5g_rfsimulator_e1 - oai-nr-ue - 10 + oai-nr-ue oai-nr-ue2 oai-nr-ue3 + 16 Ping - Ping ext-dn from NR-UE - rfsim5g_ue - -c 20 192.168.73.135 + Ping ext-dn from all NR-UEs + rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 + -c 20 12.1.1.1 -i0.25 5 - - Ping - Ping NR-UE from ext-dn - rfsim5g_ext_dn - -c 20 12.1.1.2 - 5 - - - - IperfFromContainer - Iperf UDP Downlink - rfsim5g-oai-nr-ue - rfsim5g-oai-ext-dn - -B 12.1.1.2 -u -i 1 -s - -c 12.1.1.2 -u -i 1 -t 30 -b 3M - - - - IperfFromContainer - Iperf UDP Uplink - rfsim5g-oai-ext-dn - rfsim5g-oai-nr-ue - -u -i 1 -s - -B 12.1.1.2 -c 192.168.73.135 -u -i 1 -t 30 -b 1M - - UndeployGenObject Undeploy all OAI 5G stack diff --git a/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml b/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml index a1213c9b9b..4ccf180fd0 100644 --- a/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml +++ b/ci-scripts/xml_files/container_5g_e1_rfsim_down.xml @@ -22,7 +22,7 @@ --> rfsim-5gnr-down-e1 - CleanUp CUCP-CUUP-DU E1+F1 split + CleanUp E1+F1 split trash 100022 diff --git a/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md b/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md new file mode 100644 index 0000000000..b59440e958 --- /dev/null +++ b/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md @@ -0,0 +1,136 @@ +# CI test for 5G F1+E1 splits with RFsimulator + +## General + +This docker-compose file deploys a core, RAN, and 3 UEs. Specifically: + +- 5GC mini deployment, +- 1 CU-CP, +- 3 CU-UPs, one for slices SST=1,2,3, +- 3 DUs, +- 3 UEs connecting to each DU, each requesting slice SST=1,2,3. + +The CU-CP associates each UE X connecting through DU X to CU-UP X, X=1,2,3. To +this end, the docker-compose file deliberately employs the three `ran_netX` +networks to route the user-plane traffic of each DU X/CU-UP X pair, through the +`ran_netX` network in order to effectively test that the correct CU-UP is +associated. Basically, the traffic test will only succeed if the correct pair +of DU/CU-UP has been established; if not, the DU/CU-UP cannot communicate, as +the traffic cannot be routed. + +For all other (CP, RFsim) traffic, all entities use the `public_net` network. + +## How to run + +You should be able to deploy the [basic 5G RFsim deployment](../5g_rfsimulator/README.md). + +First, start the MySQL server and 5GC: +```bash +$ docker-compose up -d mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn +$ docker-compose ps -a +``` + +Wait till everything is healthy. + +Next, start the RAN: +```bash +$ docker-compose up -d oai-cucp oai-cuup{,2,3} oai-du{,2,3} +``` + +You can verify that the DUs and CU-UPs connected successfully: +```bash +$ docker logs rfsim5g-oai-cucp +[...] +18535.139811 [RRC] I Accepting new CU-UP ID 3585 name gNB-OAI (assoc_id 257) +18535.425744 [RRC] I Accepting new CU-UP ID 3584 name gNB-OAI (assoc_id 260) +18535.425757 [RRC] I Accepting new CU-UP ID 3586 name gNB-OAI (assoc_id 261) +18535.669733 [NR_RRC] I Received F1 Setup Request from gNB_DU 3585 (du-rfsim) on assoc_id 263 +18535.669814 [RRC] I Accepting DU 3585 (du-rfsim), sending F1 Setup Response +18536.066417 [NR_RRC] I Received F1 Setup Request from gNB_DU 3586 (du-rfsim) on assoc_id 265 +18536.066476 [RRC] I Accepting DU 3586 (du-rfsim), sending F1 Setup Response +18536.135581 [NR_RRC] I Received F1 Setup Request from gNB_DU 3584 (du-rfsim) on assoc_id 267 +18536.135650 [RRC] I Accepting DU 3584 (du-rfsim), sending F1 Setup Response +``` + +You should see that the CU-UP initialized two GTP instances (one for NG-U, the +other for F1-U): +``` +$ docker logs -f rfsim5g-oai-cuup +[...] +18535.425535 [GTPU] I Initializing UDP for local address 192.168.72.161 with port 2152 +18535.425571 [GTPU] I Created gtpu instance id: 96 +18535.425577 [GTPU] I Configuring GTPu address : 192.168.71.161, port : 2152 +18535.425581 [GTPU] I Initializing UDP for local address 192.168.71.161 with port 2152 +18535.425604 [GTPU] I Created gtpu instance id: 97 +``` + +You should see the typical periodical output at the DUs: +``` +$ docker logs rfsim5g-oai-du +[...] +18626.446953 [NR_MAC] I Frame.Slot 128.0 + +18629.151076 [NR_MAC] I Frame.Slot 256.0 +``` + +Next, connect the UEs. They are configured to connect to each DU by setting the +RFsimulator server address to the `public_net` IP address of each DU. For each, +you should see that they get an IP address +```bash +$ docker compose up -d oai-nr-ue{,2,3} +$ docker logs oai-nr-ue +[...] +18758.176149 [NR_RRC] I rrcReconfigurationComplete Encoded 10 bits (2 bytes) +18758.176153 [NR_RRC] I Logical Channel UL-DCCH (SRB1), Generating RRCReconfigurationComplete (bytes 2) +18758.176154 [NAS] I [UE 0] Received NAS_CONN_ESTABLI_CNF: errCode 1, length 87 +18758.176455 [OIP] I Interface oaitun_ue1 successfully configured, ip address 12.1.1.3, mask 255.255.255.0 broadcast address 12.1.1.255 +``` + +Alternatively, check that they all received an IP address (the associated IP +addresses might be different): +```bash +$ docker exec -it rfsim5g-oai-nr-ue3 ip a show oaitun_ue1 +[...] + inet 12.1.1.2/24 brd 12.1.1.255 scope global oaitun_ue1 +[...] +$ docker exec -it rfsim5g-oai-nr-ue2 ip a show oaitun_ue1 +[...] + inet 12.1.1.4/24 brd 12.1.1.255 scope global oaitun_ue1 +[...] +$ docker exec -it rfsim5g-oai-nr-ue ip a show oaitun_ue1 +[...] + inet 12.1.1.3/24 brd 12.1.1.255 scope global oaitun_ue1 +[...] +``` + +Also, note that each DU sees only one UE! At the CU-CP, you should see that +each DU has been associated to a different CU-UP, based on the NSSAI (`exact +NSSAI match`): +```bash +$ docker logs rfsim5g-oai-cucp | grep CU-U +[...] +18757.531423 [RRC] I selecting CU-UP ID 3586 based on exact NSSAI match (3:0xffffff) +18757.531434 [RRC] I UE 1 associating to CU-UP assoc_id 261 out of 3 CU-UPs +18758.171502 [RRC] I selecting CU-UP ID 3584 based on exact NSSAI match (1:0xffffff) +18758.171510 [RRC] I UE 2 associating to CU-UP assoc_id 260 out of 3 CU-UPs +18758.772320 [RRC] I selecting CU-UP ID 3585 based on exact NSSAI match (2:0xffffff) +18758.772327 [RRC] I UE 3 associating to CU-UP assoc_id 257 out of 3 CU-UPs +``` + +Also, each UE should be able to ping the core network. For instance, with UE 1: +```bash +$ docker exec -it rfsim5g-oai-nr-ue ping -c1 12.1.1.1 +PING 12.1.1.1 (12.1.1.1) 56(84) bytes of data. +64 bytes from 12.1.1.1: icmp_seq=1 ttl=64 time=15.2 ms + +--- 12.1.1.1 ping statistics --- +1 packets transmitted, 1 received, 0% packet loss, time 0ms +rtt min/avg/max/mdev = 15.155/15.155/15.155/0.000 ms +``` + +Finally, undeploy the UEs (to give them time to do deregistration), and then +the rest of the network: +```bash +$ docker compose stop oai-nr-ue{,2,3} +$ docker compose down +``` diff --git a/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml index 4eaa942824..8479e32723 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml @@ -7,14 +7,14 @@ services: - NRF_INTERFACE_NAME_FOR_SBI=eth0 - TZ=Europe/Paris networks: - core_net: + public_net: ipv4_address: 192.168.71.130 mysql: container_name: "rfsim5g-mysql" image: mysql:8.0 volumes: - - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh + - ../5g_f1_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql + - ../5g_f1_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh environment: - TZ=Europe/Paris - MYSQL_DATABASE=oai_db @@ -27,7 +27,7 @@ services: timeout: 5s retries: 30 networks: - core_net: + public_net: ipv4_address: 192.168.71.131 oai-amf: container_name: "rfsim5g-oai-amf" @@ -49,8 +49,10 @@ services: - PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_TAC=0x0001 - # Only one slice is defined (1, 0xFFFFFF). + # Three slices are defined - SST_0=1 + - SST_1=2 + - SST_2=3 - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 # One single SMF instance @@ -74,7 +76,7 @@ services: - oai-nrf - mysql networks: - core_net: + public_net: ipv4_address: 192.168.71.132 oai-smf: container_name: "rfsim5g-oai-smf" @@ -101,6 +103,8 @@ services: - TYPE0=IPv4 - DNN_RANGE0=12.1.1.2 - 12.1.1.127 - NSSAI_SST0=1 + - NSSAI_SST1=2 + - NSSAI_SST2=3 - SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_DL0=400Mbps - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1 @@ -109,7 +113,7 @@ services: - oai-nrf - oai-amf networks: - core_net: + public_net: ipv4_address: 192.168.71.133 oai-spgwu: container_name: "rfsim5g-oai-spgwu" @@ -127,10 +131,16 @@ services: - UPF_FQDN_5G=oai-spgwu - NRF_IPV4_ADDRESS=192.168.71.130 - NRF_FQDN=oai-nrf - # Only one slice is defined (1, 0xFFFFFF) + # Three slices are defined - NSSAI_SST_0=1 - NSSAI_SD_0=0xffffff - DNN_0=oai + - NSSAI_SST_1=2 + - NSSAI_SD_1=0xffffff + - DNN_1=oai + - NSSAI_SST_2=3 + - NSSAI_SD_2=0xffffff + - DNN_2=oai depends_on: - oai-nrf - oai-smf @@ -141,10 +151,10 @@ services: - ALL privileged: true networks: - core_net: + public_net: ipv4_address: 192.168.71.134 traffic_net: - ipv4_address: 192.168.73.134 + ipv4_address: 192.168.75.134 oai-ext-dn: privileged: true @@ -152,14 +162,14 @@ services: image: oaisoftwarealliance/trf-gen-cn5g:focal entrypoint: /bin/bash -c \ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ - "ip route add 12.1.1.0/24 via 192.168.73.134 dev eth0; sleep infinity" + "ip route add 12.1.1.0/24 via 192.168.75.134 dev eth0; sleep infinity" depends_on: - oai-spgwu networks: traffic_net: - ipv4_address: 192.168.73.135 + ipv4_address: 192.168.75.135 healthcheck: - test: /bin/bash -c "ping -c 2 192.168.73.134" + test: /bin/bash -c "ping -c 2 192.168.75.134" interval: 10s timeout: 5s retries: 5 @@ -174,10 +184,8 @@ services: depends_on: - oai-ext-dn networks: - core_net: - ipv4_address: 192.168.71.140 - ran_net: - ipv4_address: 192.168.72.140 + public_net: + ipv4_address: 192.168.71.150 volumes: - ../../conf_files/gnb-cucp.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -196,10 +204,66 @@ services: depends_on: - oai-cucp networks: - core_net: - ipv4_address: 192.168.71.141 + public_net: + ipv4_address: 192.168.71.161 ran_net: - ipv4_address: 192.168.72.141 + ipv4_address: 192.168.72.161 + volumes: + - ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf + healthcheck: + test: /bin/bash -c "pgrep nr-cuup" + interval: 10s + timeout: 5s + retries: 5 + + oai-cuup2: + image: oaisoftwarealliance/oai-nr-cuup:develop + privileged: true + container_name: rfsim5g-oai-cuup2 + environment: + USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time + --gNBs.[0].gNB_CU_UP_ID 0xe01 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.71.162 + --gNBs.[0].local_s_address 192.168.73.162 + --gNBs.[0].remote_s_address 192.168.73.172 + --gNBs.[0].NETWORK_INTERFACES.GNB_IPV4_ADDRESS_FOR_NGU 192.168.71.162 + --gNBs.[0].plmn_list.[0].snssaiList.[0].sst 2 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-cucp + networks: + public_net: + ipv4_address: 192.168.71.162 + ran_net2: + ipv4_address: 192.168.73.162 + volumes: + - ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf + healthcheck: + test: /bin/bash -c "pgrep nr-cuup" + interval: 10s + timeout: 5s + retries: 5 + + oai-cuup3: + image: oaisoftwarealliance/oai-nr-cuup:develop + privileged: true + container_name: rfsim5g-oai-cuup3 + environment: + USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time + --gNBs.[0].gNB_CU_UP_ID 0xe02 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.71.163 + --gNBs.[0].local_s_address 192.168.74.163 + --gNBs.[0].remote_s_address 192.168.74.173 + --gNBs.[0].NETWORK_INTERFACES.GNB_IPV4_ADDRESS_FOR_NGU 192.168.71.163 + --gNBs.[0].plmn_list.[0].snssaiList.[0].sst 3 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-cucp + networks: + public_net: + ipv4_address: 192.168.71.163 + ran_net3: + ipv4_address: 192.168.74.163 volumes: - ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -214,12 +278,72 @@ services: container_name: rfsim5g-oai-du environment: USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + --MACRLCs.[0].local_n_address 192.168.72.171 ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-cucp + - oai-cuup networks: + public_net: + ipv4_address: 192.168.71.171 ran_net: - ipv4_address: 192.168.72.142 + ipv4_address: 192.168.72.171 volumes: - - ../../conf_files/gnb-du.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf + - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf + healthcheck: + test: /bin/bash -c "pgrep nr-softmodem" + interval: 10s + timeout: 5s + retries: 5 + + oai-du2: + image: oaisoftwarealliance/oai-gnb:develop + privileged: true + container_name: rfsim5g-oai-du2 + environment: + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + --gNBs.[0].gNB_DU_ID 0xe01 + --gNBs.[0].nr_cellid 87654321 + --gNBs.[0].servingCellConfigCommon.[0].physCellId 1 + --MACRLCs.[0].local_n_address 192.168.73.172 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-cucp + - oai-cuup2 + networks: + public_net: + ipv4_address: 192.168.71.172 + ran_net2: + ipv4_address: 192.168.73.172 + volumes: + - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf + healthcheck: + test: /bin/bash -c "pgrep nr-softmodem" + interval: 10s + timeout: 5s + retries: 5 + + oai-du3: + image: oaisoftwarealliance/oai-gnb:develop + privileged: true + container_name: rfsim5g-oai-du3 + environment: + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + --gNBs.[0].gNB_DU_ID 0xe02 + --gNBs.[0].nr_cellid 11111111 + --gNBs.[0].servingCellConfigCommon.[0].physCellId 2 + --MACRLCs.[0].local_n_address 192.168.74.173 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-cucp + - oai-cuup3 + networks: + public_net: + ipv4_address: 192.168.71.173 + ran_net3: + ipv4_address: 192.168.74.173 + volumes: + - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: test: /bin/bash -c "pgrep nr-softmodem" interval: 10s @@ -231,13 +355,62 @@ services: privileged: true container_name: rfsim5g-oai-nr-ue environment: - USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 -C 3619200000 --rfsimulator.serveraddr 192.168.72.142 --log_config.global_log_options level,nocolor,time + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + -r 106 --numerology 1 -C 3619200000 + --uicc0.imsi 208990100001100 + --rfsimulator.serveraddr 192.168.71.171 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-du networks: - ran_net: - ipv4_address: 192.168.72.150 + public_net: + ipv4_address: 192.168.71.181 + volumes: + - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf + healthcheck: + test: /bin/bash -c "pgrep nr-uesoftmodem" + interval: 10s + timeout: 5s + retries: 5 + + oai-nr-ue2: + image: oaisoftwarealliance/oai-nr-ue:develop + privileged: true + container_name: rfsim5g-oai-nr-ue2 + environment: + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + -r 106 --numerology 1 -C 3619200000 + --uicc0.imsi 208990100001101 --uicc0.nssai_sst 2 + --rfsimulator.serveraddr 192.168.71.172 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-du2 + networks: + public_net: + ipv4_address: 192.168.71.182 + volumes: + - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf + healthcheck: + test: /bin/bash -c "pgrep nr-uesoftmodem" + interval: 10s + timeout: 5s + retries: 5 + + oai-nr-ue3: + image: oaisoftwarealliance/oai-nr-ue:develop + privileged: true + container_name: rfsim5g-oai-nr-ue3 + environment: + USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time + -r 106 --numerology 1 -C 3619200000 + --uicc0.imsi 208990100001102 --uicc0.nssai_sst 3 + --rfsimulator.serveraddr 192.168.71.173 + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-du3 + networks: + public_net: + ipv4_address: 192.168.71.183 volumes: - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf healthcheck: @@ -247,14 +420,14 @@ services: retries: 5 networks: - core_net: + public_net: driver: bridge - name: rfsim5g-oai-core-net + name: rfsim5g-oai-public-net ipam: config: - subnet: 192.168.71.128/26 driver_opts: - com.docker.network.bridge.name: "rfsim5g-core" + com.docker.network.bridge.name: "rfsim5g-public" ran_net: driver: bridge name: rfsim5g-oai-ran-net @@ -263,11 +436,27 @@ networks: - subnet: 192.168.72.128/26 driver_opts: com.docker.network.bridge.name: "rfsim5g-ran" + ran_net2: + driver: bridge + name: rfsim5g-oai-ran-net2 + ipam: + config: + - subnet: 192.168.73.128/26 + driver_opts: + com.docker.network.bridge.name: "rfsim5g-ran2" + ran_net3: + driver: bridge + name: rfsim5g-oai-ran-net3 + ipam: + config: + - subnet: 192.168.74.128/26 + driver_opts: + com.docker.network.bridge.name: "rfsim5g-ran3" traffic_net: driver: bridge name: rfsim5g-oai-traffic_net-net ipam: config: - - subnet: 192.168.73.128/26 + - subnet: 192.168.75.128/26 driver_opts: com.docker.network.bridge.name: "rfsim5g-traffic" From 4e56e15ee38b0ab92f38b901d3e1ff4dc2630aa0 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 21 Dec 2023 15:30:08 +0100 Subject: [PATCH 13/16] 5G RFsim test: speed up core start, verify UE attached --- ci-scripts/xml_files/container_5g_rfsim.xml | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml index 1bca25027f..dd18ee7132 100644 --- a/ci-scripts/xml_files/container_5g_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_rfsim.xml @@ -28,7 +28,6 @@ 111111 100001 - 000000 000001 000002 000003 @@ -36,6 +35,7 @@ 000005 000006 000007 + 000008 020001 020002 020003 @@ -61,19 +61,11 @@ oai-gnb-asan oai-nr-ue - - DeployGenObject - Deploy MySql Database - yaml_files/5g_rfsimulator - mysql - 1 - - DeployGenObject Deploy OAI 5G CoreNetwork yaml_files/5g_rfsimulator - oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn + mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn 6 @@ -125,6 +117,12 @@ 17 + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10 + + Ping Ping ext-dn from NR-UE From fe21ae719983b752c4ddf0e11a9f9ee1717cb2c4 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 21 Dec 2023 13:36:16 +0100 Subject: [PATCH 14/16] Improve 5G RFsim README: link to F1+E1 --- ci-scripts/yaml_files/5g_rfsimulator/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ci-scripts/yaml_files/5g_rfsimulator/README.md b/ci-scripts/yaml_files/5g_rfsimulator/README.md index 72756b1441..4efd2714b4 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator/README.md +++ b/ci-scripts/yaml_files/5g_rfsimulator/README.md @@ -65,7 +65,8 @@ $ docker logout All the following commands **SHALL** be run from the `ci-scripts/yaml_files/5g_rfsimulator` folder for a deployment with monolithic gNB. -For a deployment with the gNB split in CU and DU components, the following commands **SHALL** be run from the `ci-scripts/yaml_files/5g_f1_rfsimulator` folder. +For a deployment with the gNB split in CU and DU components, please refer to the `../5g_f1_rfsimulator` folder. +For a deployment with the gNB split in CU-CP, CU-UP, and DU components, please refer to the ../5g_rfsimulator_e1` folder. ## 2.1. Deploy OAI 5G Core Network ## From f078373107ed27704cd6a728fad9a433520d0c37 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 21 Dec 2023 16:25:40 +0100 Subject: [PATCH 15/16] F1: better document DU F1 IP address config --- doc/F1-design.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/F1-design.md b/doc/F1-design.md index 916c1a2edf..ee45128ebb 100644 --- a/doc/F1-design.md +++ b/doc/F1-design.md @@ -152,9 +152,11 @@ In the CU file: In the DU file: - Set `MACRLCs.[0].tr_n_preference` to `f1` - Update `MACRLCs.[0].local_n_address` (local north-bound address of the DU) to - `127.0.0.4` + `127.0.0.4`. This IP address is used to bind the GTP socket (F1-U user plane + traffic). - Update `MACRLCs.[].remote_n_address` (remote north-bound address of the CU) - to `127.0.0.3` + to `127.0.0.3`. This IP address is used as the CU destination IP address for + F1AP communication. Note: all `local_*_if_name` parameters are ignored. From 027f7d9f2e7bd9d11c245bddff47909d318e497c Mon Sep 17 00:00:00 2001 From: Sagar Arora Date: Fri, 22 Dec 2023 12:38:36 +0100 Subject: [PATCH 16/16] F1+E1 RFsim test: eparate subnets, remove oai-ext-dn, update description - for F1U, F1C, E1, UE and Core - update README with subnets - better document sample output --- .../xml_files/container_5g_e1_rfsim.xml | 8 +- .../yaml_files/5g_rfsimulator_e1/README.md | 158 +++++++++++--- .../5g_rfsimulator_e1/docker-compose.yaml | 203 ++++++++++-------- 3 files changed, 243 insertions(+), 126 deletions(-) diff --git a/ci-scripts/xml_files/container_5g_e1_rfsim.xml b/ci-scripts/xml_files/container_5g_e1_rfsim.xml index 8ccb7bdd15..b53a01da13 100644 --- a/ci-scripts/xml_files/container_5g_e1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_e1_rfsim.xml @@ -46,8 +46,8 @@ DeployGenObject Deploy OAI 5G CoreNetwork yaml_files/5g_rfsimulator_e1 - mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn - 6 + mysql oai-nrf oai-amf oai-smf oai-spgwu + 5 @@ -55,7 +55,7 @@ Deploy OAI 5G RAN RF sim SA (1 CU-CP, 3 CU-UPs, 3 DUs) yaml_files/5g_rfsimulator_e1 oai-cucp oai-cuup oai-cuup2 oai-cuup3 oai-du oai-du2 oai-du3 - 13 + 12 @@ -63,7 +63,7 @@ Deploy OAI 5G NR-UE RF sim SA yaml_files/5g_rfsimulator_e1 oai-nr-ue oai-nr-ue2 oai-nr-ue3 - 16 + 15 diff --git a/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md b/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md index b59440e958..2cc0ec88ab 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md +++ b/ci-scripts/yaml_files/5g_rfsimulator_e1/README.md @@ -10,36 +10,58 @@ This docker-compose file deploys a core, RAN, and 3 UEs. Specifically: - 3 DUs, - 3 UEs connecting to each DU, each requesting slice SST=1,2,3. -The CU-CP associates each UE X connecting through DU X to CU-UP X, X=1,2,3. To -this end, the docker-compose file deliberately employs the three `ran_netX` -networks to route the user-plane traffic of each DU X/CU-UP X pair, through the -`ran_netX` network in order to effectively test that the correct CU-UP is -associated. Basically, the traffic test will only succeed if the correct pair -of DU/CU-UP has been established; if not, the DU/CU-UP cannot communicate, as -the traffic cannot be routed. +The CU-CP associates each UE X connecting through DU X to CU-UP X, X=1,2,3. To this end, the docker-compose file deliberately employs the three `f1u_netX` networks to route the user-plane traffic of each DU X/CU-UP X pair, through the `f1u_netX` network in order to effectively test that the correct CU-UP is associated. Basically, the traffic test will only succeed if the correct pair of DU/CU-UP has been established; if not, the DU/CU-UP cannot communicate, as the traffic cannot be routed. -For all other (CP, RFsim) traffic, all entities use the `public_net` network. +Core network components are on `core_net` network, CU-CP <--> CU-UP X communicate via `e1_net` network, CU-CP <--> DU X communicate via `f1c_net` network and DU X <--> NR_UE X communicate via `ue_net` network. + + +## Connectivity + +``` +AMF --> 192.168.71.132 (N2,Namf) +SMF --> 192.168.71.133 (N4,Nsmf) +NRF --> 192.168.71.130 (Nnrf) +SPGWU --> 192.168.71.134 (N3) +CU-CP --> 192.168.71.X (N2), 192.168.72.2 (F1C), 192.168.77.2 (E1) +CU-UP1 --> 192.168.71.X (N3), 192.168.73.2 (F1U), 192.168.77.3 (E1) +CU-UP2 --> 192.168.71.X (N3), 192.168.74.2 (F1U), 192.168.77.4 (E1) +CU-UP3 --> 192.168.71.X (N3), 192.168.76.2 (F1U), 192.168.77.5 (E1) +DU1 --> 192.168.72.2 (F1C), 192.168.73.3 (F1U), 192.168.78.2 (RFSIM) +DU2 --> 192.168.72.3 (F1C), 192.168.74.3 (F1U), 192.168.78.3 (RFSIM) +DU3 --> 192.168.72.4 (F1C), 192.168.76.3 (F1U), 192.168.78.4 (RFSIM) +UE1 --> 192.168.78.5 (RFSIM) +UE2 --> 192.168.78.6 (RFSIM) +UE3 --> 192.168.78.7 (RFSIM) +``` ## How to run You should be able to deploy the [basic 5G RFsim deployment](../5g_rfsimulator/README.md). First, start the MySQL server and 5GC: + ```bash -$ docker-compose up -d mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn -$ docker-compose ps -a +docker-compose up -d mysql oai-nrf oai-amf oai-smf oai-spgwu +docker-compose ps -a ``` Wait till everything is healthy. Next, start the RAN: + ```bash -$ docker-compose up -d oai-cucp oai-cuup{,2,3} oai-du{,2,3} +docker-compose up -d oai-cucp oai-cuup{,2,3} oai-du{,2,3} ``` You can verify that the DUs and CU-UPs connected successfully: ```bash -$ docker logs rfsim5g-oai-cucp +docker logs rfsim5g-oai-cucp +``` + +
+The output is similar to: + +```console [...] 18535.139811 [RRC] I Accepting new CU-UP ID 3585 name gNB-OAI (assoc_id 257) 18535.425744 [RRC] I Accepting new CU-UP ID 3584 name gNB-OAI (assoc_id 260) @@ -51,63 +73,126 @@ $ docker logs rfsim5g-oai-cucp 18536.135581 [NR_RRC] I Received F1 Setup Request from gNB_DU 3584 (du-rfsim) on assoc_id 267 18536.135650 [RRC] I Accepting DU 3584 (du-rfsim), sending F1 Setup Response ``` +
-You should see that the CU-UP initialized two GTP instances (one for NG-U, the -other for F1-U): +You should see that the CU-UP initialized two GTP instances (one for NG-U, the other for F1-U): + +```bash +docker logs -f rfsim5g-oai-cuup ``` -$ docker logs -f rfsim5g-oai-cuup + +
+The output is similar to: + +```console [...] -18535.425535 [GTPU] I Initializing UDP for local address 192.168.72.161 with port 2152 -18535.425571 [GTPU] I Created gtpu instance id: 96 -18535.425577 [GTPU] I Configuring GTPu address : 192.168.71.161, port : 2152 -18535.425581 [GTPU] I Initializing UDP for local address 192.168.71.161 with port 2152 -18535.425604 [GTPU] I Created gtpu instance id: 97 +122690.500374 [GTPU] I Initializing UDP for local address 192.168.73.2 with port 2153 +122690.500406 [GTPU] I Created gtpu instance id: 96 +122690.500413 [GTPU] I Configuring GTPu address : 192.168.71.161, port : 2152 +122690.500414 [GTPU] I Initializing UDP for local address 192.168.71.161 with port 2152 +122690.500420 [GTPU] I Created gtpu instance id: 97 ``` +
+ + You should see the typical periodical output at the DUs: + +```bash +docker logs rfsim5g-oai-du ``` -$ docker logs rfsim5g-oai-du +
+The output is similar to: + +```console [...] 18626.446953 [NR_MAC] I Frame.Slot 128.0 18629.151076 [NR_MAC] I Frame.Slot 256.0 +``` +
+ ``` Next, connect the UEs. They are configured to connect to each DU by setting the RFsimulator server address to the `public_net` IP address of each DU. For each, you should see that they get an IP address + ```bash -$ docker compose up -d oai-nr-ue{,2,3} -$ docker logs oai-nr-ue +docker compose up -d oai-nr-ue{,2,3} +``` + +```bash +docker logs rfsim5g-oai-nr-ue +``` + +
+The output is similar to: + +```console [...] 18758.176149 [NR_RRC] I rrcReconfigurationComplete Encoded 10 bits (2 bytes) 18758.176153 [NR_RRC] I Logical Channel UL-DCCH (SRB1), Generating RRCReconfigurationComplete (bytes 2) 18758.176154 [NAS] I [UE 0] Received NAS_CONN_ESTABLI_CNF: errCode 1, length 87 18758.176455 [OIP] I Interface oaitun_ue1 successfully configured, ip address 12.1.1.3, mask 255.255.255.0 broadcast address 12.1.1.255 ``` +
+ + +Alternatively, check that they all received an IP address (the associated IP addresses might be different): -Alternatively, check that they all received an IP address (the associated IP -addresses might be different): ```bash -$ docker exec -it rfsim5g-oai-nr-ue3 ip a show oaitun_ue1 +docker exec -it rfsim5g-oai-nr-ue3 ip a show oaitun_ue1 +``` +
+The output is similar to: + +```console [...] inet 12.1.1.2/24 brd 12.1.1.255 scope global oaitun_ue1 [...] -$ docker exec -it rfsim5g-oai-nr-ue2 ip a show oaitun_ue1 +``` +
+ +```bash +docker exec -it rfsim5g-oai-nr-ue2 ip a show oaitun_ue1 +``` +
+The output is similar to: + +```console [...] inet 12.1.1.4/24 brd 12.1.1.255 scope global oaitun_ue1 [...] -$ docker exec -it rfsim5g-oai-nr-ue ip a show oaitun_ue1 +``` +
+ +```bash +docker exec -it rfsim5g-oai-nr-ue ip a show oaitun_ue1 +``` +
+The output is similar to: + +```console [...] inet 12.1.1.3/24 brd 12.1.1.255 scope global oaitun_ue1 [...] ``` +
+ + Also, note that each DU sees only one UE! At the CU-CP, you should see that each DU has been associated to a different CU-UP, based on the NSSAI (`exact NSSAI match`): ```bash -$ docker logs rfsim5g-oai-cucp | grep CU-U +docker logs rfsim5g-oai-cucp | grep CU-U +``` + +
+The output is similar to: + +```console [...] 18757.531423 [RRC] I selecting CU-UP ID 3586 based on exact NSSAI match (3:0xffffff) 18757.531434 [RRC] I UE 1 associating to CU-UP assoc_id 261 out of 3 CU-UPs @@ -116,10 +201,17 @@ $ docker logs rfsim5g-oai-cucp | grep CU-U 18758.772320 [RRC] I selecting CU-UP ID 3585 based on exact NSSAI match (2:0xffffff) 18758.772327 [RRC] I UE 3 associating to CU-UP assoc_id 257 out of 3 CU-UPs ``` +
+ Also, each UE should be able to ping the core network. For instance, with UE 1: ```bash -$ docker exec -it rfsim5g-oai-nr-ue ping -c1 12.1.1.1 +docker exec -it rfsim5g-oai-nr-ue ping -c1 12.1.1.1 +``` +
+The output is similar to: + +```console PING 12.1.1.1 (12.1.1.1) 56(84) bytes of data. 64 bytes from 12.1.1.1: icmp_seq=1 ttl=64 time=15.2 ms @@ -127,10 +219,12 @@ PING 12.1.1.1 (12.1.1.1) 56(84) bytes of data. 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 15.155/15.155/15.155/0.000 ms ``` +
+ Finally, undeploy the UEs (to give them time to do deregistration), and then the rest of the network: ```bash -$ docker compose stop oai-nr-ue{,2,3} -$ docker compose down +docker compose stop oai-nr-ue{,2,3} +docker compose down ``` diff --git a/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml index 8479e32723..adfdefbccf 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_rfsimulator_e1/docker-compose.yaml @@ -5,9 +5,9 @@ services: image: oaisoftwarealliance/oai-nrf:v1.5.0 environment: - NRF_INTERFACE_NAME_FOR_SBI=eth0 - - TZ=Europe/Paris + - TZ=Europe/1 networks: - public_net: + core_net: ipv4_address: 192.168.71.130 mysql: container_name: "rfsim5g-mysql" @@ -16,7 +16,7 @@ services: - ../5g_f1_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_f1_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh environment: - - TZ=Europe/Paris + - TZ=Europe/1 - MYSQL_DATABASE=oai_db - MYSQL_USER=test - MYSQL_PASSWORD=test @@ -27,13 +27,13 @@ services: timeout: 5s retries: 30 networks: - public_net: + core_net: ipv4_address: 192.168.71.131 oai-amf: container_name: "rfsim5g-oai-amf" image: oaisoftwarealliance/oai-amf:v1.5.0 environment: - - TZ=Europe/paris + - TZ=Europe/1 - MCC=208 - MNC=99 - REGION_ID=128 @@ -76,13 +76,13 @@ services: - oai-nrf - mysql networks: - public_net: + core_net: ipv4_address: 192.168.71.132 oai-smf: container_name: "rfsim5g-oai-smf" image: oaisoftwarealliance/oai-smf:v1.5.0 environment: - - TZ=Europe/Paris + - TZ=Europe/1 - SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 @@ -113,13 +113,13 @@ services: - oai-nrf - oai-amf networks: - public_net: + core_net: ipv4_address: 192.168.71.133 oai-spgwu: container_name: "rfsim5g-oai-spgwu" image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 environment: - - TZ=Europe/Paris + - TZ=Europe/1 - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0 @@ -151,28 +151,8 @@ services: - ALL privileged: true networks: - public_net: + core_net: ipv4_address: 192.168.71.134 - traffic_net: - ipv4_address: 192.168.75.134 - - oai-ext-dn: - privileged: true - container_name: rfsim5g-oai-ext-dn - image: oaisoftwarealliance/trf-gen-cn5g:focal - entrypoint: /bin/bash -c \ - "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ - "ip route add 12.1.1.0/24 via 192.168.75.134 dev eth0; sleep infinity" - depends_on: - - oai-spgwu - networks: - traffic_net: - ipv4_address: 192.168.75.135 - healthcheck: - test: /bin/bash -c "ping -c 2 192.168.75.134" - interval: 10s - timeout: 5s - retries: 5 oai-cucp: image: oaisoftwarealliance/oai-gnb:develop @@ -180,12 +160,18 @@ services: container_name: rfsim5g-oai-cucp environment: USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time + --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 + --gNBs.[0].local_s_address 192.168.72.2 ASAN_OPTIONS: detect_leaks=0 depends_on: - - oai-ext-dn + - oai-spgwu networks: - public_net: + core_net: ipv4_address: 192.168.71.150 + f1c_net: + ipv4_address: 192.168.72.2 + e1_net: + ipv4_address: 192.168.77.2 volumes: - ../../conf_files/gnb-cucp.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -200,14 +186,20 @@ services: container_name: rfsim5g-oai-cuup environment: USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time + --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.3 + --gNBs.[0].local_s_address 192.168.73.2 + --gNBs.[0].remote_s_address 127.0.0.1 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-cucp networks: - public_net: + core_net: ipv4_address: 192.168.71.161 - ran_net: - ipv4_address: 192.168.72.161 + f1u_1_net: + ipv4_address: 192.168.73.2 + e1_net: + ipv4_address: 192.168.77.3 volumes: - ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -223,19 +215,22 @@ services: environment: USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time --gNBs.[0].gNB_CU_UP_ID 0xe01 - --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.71.162 - --gNBs.[0].local_s_address 192.168.73.162 - --gNBs.[0].remote_s_address 192.168.73.172 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.4 + --gNBs.[0].local_s_address 192.168.74.2 + --gNBs.[0].remote_s_address 127.0.0.1 --gNBs.[0].NETWORK_INTERFACES.GNB_IPV4_ADDRESS_FOR_NGU 192.168.71.162 --gNBs.[0].plmn_list.[0].snssaiList.[0].sst 2 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-cucp networks: - public_net: + core_net: ipv4_address: 192.168.71.162 - ran_net2: - ipv4_address: 192.168.73.162 + f1u_2_net: + ipv4_address: 192.168.74.2 + e1_net: + ipv4_address: 192.168.77.4 volumes: - ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -251,19 +246,22 @@ services: environment: USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time --gNBs.[0].gNB_CU_UP_ID 0xe02 - --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.71.163 - --gNBs.[0].local_s_address 192.168.74.163 - --gNBs.[0].remote_s_address 192.168.74.173 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 + --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.5 + --gNBs.[0].local_s_address 192.168.76.2 + --gNBs.[0].remote_s_address 127.0.0.1 --gNBs.[0].NETWORK_INTERFACES.GNB_IPV4_ADDRESS_FOR_NGU 192.168.71.163 --gNBs.[0].plmn_list.[0].snssaiList.[0].sst 3 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-cucp networks: - public_net: + core_net: ipv4_address: 192.168.71.163 - ran_net3: - ipv4_address: 192.168.74.163 + f1u_3_net: + ipv4_address: 192.168.76.2 + e1_net: + ipv4_address: 192.168.77.5 volumes: - ../../conf_files/gnb-cuup.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -278,16 +276,19 @@ services: container_name: rfsim5g-oai-du environment: USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time - --MACRLCs.[0].local_n_address 192.168.72.171 + --MACRLCs.[0].local_n_address 192.168.73.3 + --MACRLCs.[0].remote_n_address 192.168.72.2 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-cucp - oai-cuup networks: - public_net: - ipv4_address: 192.168.71.171 - ran_net: - ipv4_address: 192.168.72.171 + f1c_net: + ipv4_address: 192.168.72.3 + f1u_1_net: + ipv4_address: 192.168.73.3 + ue_net: + ipv4_address: 192.168.78.2 volumes: - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -305,16 +306,19 @@ services: --gNBs.[0].gNB_DU_ID 0xe01 --gNBs.[0].nr_cellid 87654321 --gNBs.[0].servingCellConfigCommon.[0].physCellId 1 - --MACRLCs.[0].local_n_address 192.168.73.172 + --MACRLCs.[0].local_n_address 192.168.74.3 + --MACRLCs.[0].remote_n_address 192.168.72.2 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-cucp - oai-cuup2 networks: - public_net: - ipv4_address: 192.168.71.172 - ran_net2: - ipv4_address: 192.168.73.172 + f1c_net: + ipv4_address: 192.168.72.4 + f1u_2_net: + ipv4_address: 192.168.74.3 + ue_net: + ipv4_address: 192.168.78.3 volumes: - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -332,16 +336,19 @@ services: --gNBs.[0].gNB_DU_ID 0xe02 --gNBs.[0].nr_cellid 11111111 --gNBs.[0].servingCellConfigCommon.[0].physCellId 2 - --MACRLCs.[0].local_n_address 192.168.74.173 + --MACRLCs.[0].local_n_address 192.168.76.3 + --MACRLCs.[0].remote_n_address 192.168.72.2 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-cucp - oai-cuup3 networks: - public_net: - ipv4_address: 192.168.71.173 - ran_net3: - ipv4_address: 192.168.74.173 + f1c_net: + ipv4_address: 192.168.72.5 + f1u_3_net: + ipv4_address: 192.168.76.3 + ue_net: + ipv4_address: 192.168.78.4 volumes: - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf healthcheck: @@ -358,13 +365,13 @@ services: USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time -r 106 --numerology 1 -C 3619200000 --uicc0.imsi 208990100001100 - --rfsimulator.serveraddr 192.168.71.171 + --rfsimulator.serveraddr 192.168.78.2 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-du networks: - public_net: - ipv4_address: 192.168.71.181 + ue_net: + ipv4_address: 192.168.78.5 volumes: - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf healthcheck: @@ -381,13 +388,13 @@ services: USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time -r 106 --numerology 1 -C 3619200000 --uicc0.imsi 208990100001101 --uicc0.nssai_sst 2 - --rfsimulator.serveraddr 192.168.71.172 + --rfsimulator.serveraddr 192.168.78.3 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-du2 networks: - public_net: - ipv4_address: 192.168.71.182 + ue_net: + ipv4_address: 192.168.78.6 volumes: - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf healthcheck: @@ -404,13 +411,13 @@ services: USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time -r 106 --numerology 1 -C 3619200000 --uicc0.imsi 208990100001102 --uicc0.nssai_sst 3 - --rfsimulator.serveraddr 192.168.71.173 + --rfsimulator.serveraddr 192.168.78.4 ASAN_OPTIONS: detect_leaks=0 depends_on: - oai-du3 networks: - public_net: - ipv4_address: 192.168.71.183 + ue_net: + ipv4_address: 192.168.78.7 volumes: - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf healthcheck: @@ -420,43 +427,59 @@ services: retries: 5 networks: - public_net: + core_net: driver: bridge - name: rfsim5g-oai-public-net + name: rfsim5g-oai-core-net ipam: config: - subnet: 192.168.71.128/26 driver_opts: - com.docker.network.bridge.name: "rfsim5g-public" - ran_net: + com.docker.network.bridge.name: "rfsim5g-core" + f1c_net: driver: bridge - name: rfsim5g-oai-ran-net + name: rfsim5g-oai-f1c-net ipam: config: - - subnet: 192.168.72.128/26 + - subnet: 192.168.72.0/28 driver_opts: - com.docker.network.bridge.name: "rfsim5g-ran" - ran_net2: + com.docker.network.bridge.name: "rfsim5g-f1c" + f1u_1_net: driver: bridge - name: rfsim5g-oai-ran-net2 + name: rfsim5g-oai-f1u-1-net ipam: config: - - subnet: 192.168.73.128/26 + - subnet: 192.168.73.0/28 driver_opts: - com.docker.network.bridge.name: "rfsim5g-ran2" - ran_net3: + com.docker.network.bridge.name: "rfsim5g-f1u_1" + f1u_2_net: driver: bridge - name: rfsim5g-oai-ran-net3 + name: rfsim5g-oai-f1u-2-net ipam: config: - - subnet: 192.168.74.128/26 + - subnet: 192.168.74.0/28 driver_opts: - com.docker.network.bridge.name: "rfsim5g-ran3" - traffic_net: + com.docker.network.bridge.name: "rfsim5g-f1u_2" + f1u_3_net: driver: bridge - name: rfsim5g-oai-traffic_net-net + name: rfsim5g-oai-f1u-3-net ipam: config: - - subnet: 192.168.75.128/26 + - subnet: 192.168.76.0/28 driver_opts: - com.docker.network.bridge.name: "rfsim5g-traffic" + com.docker.network.bridge.name: "rfsim5g-f1u_3" + e1_net: + driver: bridge + name: rfsim5g-oai-e1-net + ipam: + config: + - subnet: 192.168.77.1/28 + driver_opts: + com.docker.network.bridge.name: "rfsim5g-e1" + ue_net: + driver: bridge + name: rfsim5g-oai-ue-net + ipam: + config: + - subnet: 192.168.78.1/28 + driver_opts: + com.docker.network.bridge.name: "rfsim5g-ue"