Assoc ID DU->CU
This commit is contained in:
@@ -88,6 +88,7 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance, sctp_assoc_t
|
||||
|
||||
// create an ITTI message and copy SDU
|
||||
message_p = itti_alloc_new_message(TASK_CU_F1, 0, F1AP_INITIAL_UL_RRC_MESSAGE);
|
||||
message_p->ittiMsgHeader.originInstance = assoc_id;
|
||||
f1ap_initial_ul_rrc_message_t *ul_rrc = &F1AP_INITIAL_UL_RRC_MESSAGE(message_p);
|
||||
ul_rrc->gNB_DU_ue_id = du_ue_id;
|
||||
ul_rrc->nr_cellid = nr_cellid; // CU instance
|
||||
|
||||
@@ -639,6 +639,7 @@ int CU_handle_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, sctp_assoc_t assoc_
|
||||
F1AP_UEContextSetupResponseIEs_t *ie;
|
||||
DevAssert(pdu);
|
||||
msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_SETUP_RESP);
|
||||
msg_p->ittiMsgHeader.originInstance = assoc_id;
|
||||
f1ap_ue_context_setup_t *f1ap_ue_context_setup_resp = &F1AP_UE_CONTEXT_SETUP_RESP(msg_p);
|
||||
container = &pdu->choice.successfulOutcome->value.choice.UEContextSetupResponse;
|
||||
int i;
|
||||
@@ -772,6 +773,7 @@ int CU_handle_UE_CONTEXT_SETUP_FAILURE(instance_t instance, sctp_assoc_t assoc_i
|
||||
int CU_handle_UE_CONTEXT_RELEASE_REQUEST(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu)
|
||||
{
|
||||
MessageDef *msg = itti_alloc_new_message(TASK_CU_F1, 0, F1AP_UE_CONTEXT_RELEASE_REQ);
|
||||
msg->ittiMsgHeader.originInstance = assoc_id;
|
||||
f1ap_ue_context_release_req_t *req = &F1AP_UE_CONTEXT_RELEASE_REQ(msg);
|
||||
F1AP_UEContextReleaseRequest_t *container;
|
||||
F1AP_UEContextReleaseRequestIEs_t *ie;
|
||||
@@ -921,6 +923,7 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance, sctp_assoc_t asso
|
||||
F1AP_UEContextReleaseCompleteIEs_t *ie;
|
||||
DevAssert(pdu);
|
||||
MessageDef *msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_RELEASE_COMPLETE);
|
||||
msg_p->ittiMsgHeader.originInstance = assoc_id;
|
||||
f1ap_ue_context_release_complete_t *complete = &F1AP_UE_CONTEXT_RELEASE_COMPLETE(msg_p);
|
||||
container = &pdu->choice.successfulOutcome->value.choice.UEContextReleaseComplete;
|
||||
/* GNB_CU_UE_F1AP_ID */
|
||||
@@ -1576,6 +1579,7 @@ int CU_handle_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance, sctp_assoc_t
|
||||
F1AP_UEContextModificationResponseIEs_t *ie;
|
||||
DevAssert(pdu);
|
||||
msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_MODIFICATION_RESP);
|
||||
msg_p->ittiMsgHeader.originInstance = assoc_id;
|
||||
f1ap_ue_context_modif_resp_t *f1ap_ue_context_modification_resp = &F1AP_UE_CONTEXT_MODIFICATION_RESP(msg_p);
|
||||
container = &pdu->choice.successfulOutcome->value.choice.UEContextModificationResponse;
|
||||
int i;
|
||||
@@ -1704,6 +1708,7 @@ int CU_handle_UE_CONTEXT_MODIFICATION_REQUIRED(instance_t instance, sctp_assoc_t
|
||||
DevAssert(pdu != NULL);
|
||||
|
||||
MessageDef *msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_MODIFICATION_REQUIRED);
|
||||
msg_p->ittiMsgHeader.originInstance = assoc_id;
|
||||
f1ap_ue_context_modif_required_t *required = &F1AP_UE_CONTEXT_MODIFICATION_REQUIRED(msg_p);
|
||||
|
||||
F1AP_UEContextModificationRequired_t *container = &pdu->choice.initiatingMessage->value.choice.UEContextModificationRequired;
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
typedef struct f1_ue_data_t {
|
||||
uint32_t secondary_ue;
|
||||
sctp_assoc_t e1_assoc_id;
|
||||
sctp_assoc_t du_assoc_id; // only used at the CU
|
||||
} f1_ue_data_t;
|
||||
|
||||
void cu_init_f1_ue_data(void);
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
static void f1_setup_request_direct(const f1ap_setup_req_t *req)
|
||||
{
|
||||
MessageDef *msg = itti_alloc_new_message(TASK_MAC_GNB, 0, F1AP_SETUP_REQ);
|
||||
msg->ittiMsgHeader.originInstance = -1; // means monolithic
|
||||
f1ap_setup_req_t *f1ap_msg = &F1AP_SETUP_REQ(msg);
|
||||
f1ap_msg->gNB_DU_id = req->gNB_DU_id;
|
||||
f1ap_msg->gNB_DU_name = strdup(req->gNB_DU_name);
|
||||
@@ -71,6 +72,7 @@ static void ue_context_setup_response_direct(const f1ap_ue_context_setup_t *req,
|
||||
|
||||
(void) req; /* we don't need the request -- it is to set up GTP in F1 case */
|
||||
MessageDef *msg = itti_alloc_new_message (TASK_MAC_GNB, 0, F1AP_UE_CONTEXT_SETUP_RESP);
|
||||
msg->ittiMsgHeader.originInstance = -1; // means monolithic
|
||||
f1ap_ue_context_setup_t *f1ap_msg = &F1AP_UE_CONTEXT_SETUP_RESP(msg);
|
||||
/* copy all fields, but reallocate memory buffers! */
|
||||
*f1ap_msg = *resp;
|
||||
@@ -100,6 +102,7 @@ static void ue_context_modification_response_direct(const f1ap_ue_context_modif_
|
||||
{
|
||||
(void)req; /* we don't need the request -- it is to set up GTP in F1 case */
|
||||
MessageDef *msg = itti_alloc_new_message(TASK_MAC_GNB, 0, F1AP_UE_CONTEXT_MODIFICATION_RESP);
|
||||
msg->ittiMsgHeader.originInstance = -1; // means monolithic
|
||||
f1ap_ue_context_modif_resp_t *f1ap_msg = &F1AP_UE_CONTEXT_MODIFICATION_RESP(msg);
|
||||
|
||||
f1ap_msg->gNB_CU_ue_id = resp->gNB_CU_ue_id;
|
||||
@@ -152,6 +155,7 @@ static void ue_context_modification_response_direct(const f1ap_ue_context_modif_
|
||||
static void ue_context_modification_required_direct(const f1ap_ue_context_modif_required_t *required)
|
||||
{
|
||||
MessageDef *msg = itti_alloc_new_message(TASK_MAC_GNB, 0, F1AP_UE_CONTEXT_MODIFICATION_REQUIRED);
|
||||
msg->ittiMsgHeader.originInstance = -1; // means monolithic
|
||||
f1ap_ue_context_modif_required_t *f1ap_msg = &F1AP_UE_CONTEXT_MODIFICATION_REQUIRED(msg);
|
||||
f1ap_msg->gNB_CU_ue_id = required->gNB_CU_ue_id;
|
||||
f1ap_msg->gNB_DU_ue_id = required->gNB_DU_ue_id;
|
||||
@@ -177,6 +181,7 @@ static void ue_context_modification_required_direct(const f1ap_ue_context_modif_
|
||||
static void ue_context_release_request_direct(const f1ap_ue_context_release_req_t* req)
|
||||
{
|
||||
MessageDef *msg = itti_alloc_new_message(TASK_MAC_GNB, 0, F1AP_UE_CONTEXT_RELEASE_REQ);
|
||||
msg->ittiMsgHeader.originInstance = -1; // means monolithic
|
||||
f1ap_ue_context_release_req_t *f1ap_msg = &F1AP_UE_CONTEXT_RELEASE_REQ(msg);
|
||||
*f1ap_msg = *req;
|
||||
itti_send_msg_to_task(TASK_RRC_GNB, 0, msg);
|
||||
@@ -185,6 +190,7 @@ static void ue_context_release_request_direct(const f1ap_ue_context_release_req_
|
||||
static void ue_context_release_complete_direct(const f1ap_ue_context_release_complete_t *complete)
|
||||
{
|
||||
MessageDef *msg = itti_alloc_new_message(TASK_MAC_GNB, 0, F1AP_UE_CONTEXT_RELEASE_COMPLETE);
|
||||
msg->ittiMsgHeader.originInstance = -1; // means monolithic
|
||||
f1ap_ue_context_release_complete_t *f1ap_msg = &F1AP_UE_CONTEXT_RELEASE_COMPLETE(msg);
|
||||
*f1ap_msg = *complete;
|
||||
itti_send_msg_to_task(TASK_RRC_GNB, 0, msg);
|
||||
@@ -193,6 +199,7 @@ static void ue_context_release_complete_direct(const f1ap_ue_context_release_com
|
||||
static void initial_ul_rrc_message_transfer_direct(module_id_t module_id, const f1ap_initial_ul_rrc_message_t *ul_rrc)
|
||||
{
|
||||
MessageDef *msg = itti_alloc_new_message(TASK_MAC_GNB, 0, F1AP_INITIAL_UL_RRC_MESSAGE);
|
||||
msg->ittiMsgHeader.originInstance = -1; // means monolithic
|
||||
/* copy all fields, but reallocate rrc_containers! */
|
||||
f1ap_initial_ul_rrc_message_t *f1ap_msg = &F1AP_INITIAL_UL_RRC_MESSAGE(msg);
|
||||
*f1ap_msg = *ul_rrc;
|
||||
|
||||
+14
-12
@@ -1151,7 +1151,7 @@ int nr_rrc_reconfiguration_req(rrc_gNB_ue_context_t *const ue_context_pP
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rrc_handle_RRCSetupRequest(gNB_RRC_INST *rrc, const NR_RRCSetupRequest_IEs_t *rrcSetupRequest, const f1ap_initial_ul_rrc_message_t *msg)
|
||||
static void rrc_handle_RRCSetupRequest(gNB_RRC_INST *rrc, sctp_assoc_t assoc_id, const NR_RRCSetupRequest_IEs_t *rrcSetupRequest, const f1ap_initial_ul_rrc_message_t *msg)
|
||||
{
|
||||
rrc_gNB_ue_context_t *ue_context_p = NULL;
|
||||
if (NR_InitialUE_Identity_PR_randomValue == rrcSetupRequest->ue_Identity.present) {
|
||||
@@ -1175,7 +1175,7 @@ static void rrc_handle_RRCSetupRequest(gNB_RRC_INST *rrc, const NR_RRCSetupReque
|
||||
AssertFatal(false, "not implemented\n");
|
||||
}
|
||||
|
||||
ue_context_p = rrc_gNB_create_ue_context(msg->crnti, rrc, random_value, msg->gNB_DU_ue_id);
|
||||
ue_context_p = rrc_gNB_create_ue_context(assoc_id, msg->crnti, rrc, random_value, msg->gNB_DU_ue_id);
|
||||
} else if (NR_InitialUE_Identity_PR_ng_5G_S_TMSI_Part1 == rrcSetupRequest->ue_Identity.present) {
|
||||
/* <5G-S-TMSI> = <AMF Set ID><AMF Pointer><5G-TMSI> 48-bit */
|
||||
/* ng-5G-S-TMSI-Part1 BIT STRING (SIZE (39)) */
|
||||
@@ -1202,7 +1202,7 @@ static void rrc_handle_RRCSetupRequest(gNB_RRC_INST *rrc, const NR_RRCSetupReque
|
||||
} else {
|
||||
LOG_I(NR_RRC, "UE %04x 5G-S-TMSI-Part1 doesn't exist, setting ng_5G_S_TMSI_Part1 => %ld\n", msg->crnti, s_tmsi_part1);
|
||||
|
||||
ue_context_p = rrc_gNB_create_ue_context(msg->crnti, rrc, s_tmsi_part1, msg->gNB_DU_ue_id);
|
||||
ue_context_p = rrc_gNB_create_ue_context(assoc_id, msg->crnti, rrc, s_tmsi_part1, msg->gNB_DU_ue_id);
|
||||
AssertFatal(ue_context_p != NULL, "out of memory\n");
|
||||
gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
|
||||
UE->Initialue_identity_5g_s_TMSI.presence = true;
|
||||
@@ -1214,7 +1214,7 @@ static void rrc_handle_RRCSetupRequest(gNB_RRC_INST *rrc, const NR_RRCSetupReque
|
||||
rrcSetupRequest->ue_Identity.choice.randomValue.buf,
|
||||
rrcSetupRequest->ue_Identity.choice.randomValue.size);
|
||||
|
||||
ue_context_p = rrc_gNB_create_ue_context(msg->crnti, rrc, random_value, msg->gNB_DU_ue_id);
|
||||
ue_context_p = rrc_gNB_create_ue_context(assoc_id, msg->crnti, rrc, random_value, msg->gNB_DU_ue_id);
|
||||
LOG_E(NR_RRC, "RRCSetupRequest without random UE identity or S-TMSI not supported, let's reject the UE %04x\n", msg->crnti);
|
||||
rrc_gNB_generate_RRCReject(0, ue_context_p);
|
||||
return;
|
||||
@@ -1227,7 +1227,7 @@ static void rrc_handle_RRCSetupRequest(gNB_RRC_INST *rrc, const NR_RRCSetupReque
|
||||
rrc_gNB_generate_RRCSetup(0, msg->crnti, ue_context_p, msg->du2cu_rrc_container, msg->du2cu_rrc_container_length);
|
||||
}
|
||||
|
||||
static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, const NR_RRCReestablishmentRequest_IEs_t *req, const f1ap_initial_ul_rrc_message_t *msg)
|
||||
static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, sctp_assoc_t assoc_id, const NR_RRCReestablishmentRequest_IEs_t *req, const f1ap_initial_ul_rrc_message_t *msg)
|
||||
{
|
||||
const NR_ReestablishmentCause_t cause = req->reestablishmentCause;
|
||||
const long physCellId = req->ue_Identity.physCellId;
|
||||
@@ -1239,7 +1239,6 @@ static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, const NR_RRC
|
||||
? "Other Failure"
|
||||
: (cause == NR_ReestablishmentCause_handoverFailure ? "Handover Failure" : "reconfigurationFailure"));
|
||||
|
||||
sctp_assoc_t assoc_id = 0; // currently, we have only one DU
|
||||
const nr_rrc_du_container_t *du = get_du_by_assoc_id(rrc, assoc_id);
|
||||
if (du == NULL) {
|
||||
LOG_E(RRC, "received CCCH message, but no corresponding DU found\n");
|
||||
@@ -1270,7 +1269,7 @@ static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, const NR_RRC
|
||||
random_value = random_value & 0x7fffffffff; /* random value is 39 bits */
|
||||
if (ue_context_p == NULL) {
|
||||
LOG_E(NR_RRC, "NR_RRCReestablishmentRequest without UE context, fallback to RRC setup\n");
|
||||
ue_context_p = rrc_gNB_create_ue_context(msg->crnti, rrc, random_value, msg->gNB_DU_ue_id);
|
||||
ue_context_p = rrc_gNB_create_ue_context(assoc_id, msg->crnti, rrc, random_value, msg->gNB_DU_ue_id);
|
||||
ue_context_p->ue_context.Srb[1].Active = 1;
|
||||
rrc_gNB_generate_RRCSetup(0, msg->crnti, ue_context_p, msg->du2cu_rrc_container, msg->du2cu_rrc_container_length);
|
||||
return;
|
||||
@@ -1282,7 +1281,7 @@ static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, const NR_RRC
|
||||
LOG_E(NR_RRC,
|
||||
"NR_RRCReestablishmentRequest c_RNTI %04lx range error, fallback to RRC setup\n",
|
||||
req->ue_Identity.c_RNTI);
|
||||
ue_context_p = rrc_gNB_create_ue_context(msg->crnti, rrc, random_value, msg->gNB_DU_ue_id);
|
||||
ue_context_p = rrc_gNB_create_ue_context(assoc_id, msg->crnti, rrc, random_value, msg->gNB_DU_ue_id);
|
||||
ue_context_p->ue_context.Srb[1].Active = 1;
|
||||
rrc_gNB_generate_RRCSetup(0, msg->crnti, ue_context_p, msg->du2cu_rrc_container, msg->du2cu_rrc_container_length);
|
||||
return;
|
||||
@@ -1293,7 +1292,7 @@ static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, const NR_RRC
|
||||
// update with new RNTI, and update secondary UE association
|
||||
UE->rnti = msg->crnti;
|
||||
cu_remove_f1_ue_data(UE->rrc_ue_id);
|
||||
f1_ue_data_t ue_data = {.secondary_ue = msg->gNB_DU_ue_id};
|
||||
f1_ue_data_t ue_data = {.secondary_ue = msg->gNB_DU_ue_id, .du_assoc_id = assoc_id};
|
||||
cu_add_f1_ue_data(UE->rrc_ue_id, &ue_data);
|
||||
|
||||
UE->reestablishment_cause = cause;
|
||||
@@ -1733,8 +1732,10 @@ int rrc_gNB_decode_dcch(const protocol_ctxt_t *const ctxt_pP,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void rrc_gNB_process_initial_ul_rrc_message(const f1ap_initial_ul_rrc_message_t *ul_rrc)
|
||||
void rrc_gNB_process_initial_ul_rrc_message(sctp_assoc_t assoc_id, const f1ap_initial_ul_rrc_message_t *ul_rrc)
|
||||
{
|
||||
AssertFatal(assoc_id != 0, "illegal assoc_id == 0: should be -1 (monolithic) or >0 (split)\n");
|
||||
|
||||
gNB_RRC_INST *rrc = RC.nrrrc[0];
|
||||
LOG_I(NR_RRC, "Decoding CCCH: RNTI %04x, payload_size %d\n", ul_rrc->crnti, ul_rrc->rrc_container_length);
|
||||
NR_UL_CCCH_Message_t *ul_ccch_msg = NULL;
|
||||
@@ -1758,7 +1759,7 @@ void rrc_gNB_process_initial_ul_rrc_message(const f1ap_initial_ul_rrc_message_t
|
||||
|
||||
case NR_UL_CCCH_MessageType__c1_PR_rrcSetupRequest:
|
||||
LOG_D(NR_RRC, "Received RRCSetupRequest on UL-CCCH-Message (UE rnti %04x)\n", ul_rrc->crnti);
|
||||
rrc_handle_RRCSetupRequest(rrc, &ul_ccch_msg->message.choice.c1->choice.rrcSetupRequest->rrcSetupRequest, ul_rrc);
|
||||
rrc_handle_RRCSetupRequest(rrc, assoc_id, &ul_ccch_msg->message.choice.c1->choice.rrcSetupRequest->rrcSetupRequest, ul_rrc);
|
||||
break;
|
||||
|
||||
case NR_UL_CCCH_MessageType__c1_PR_rrcResumeRequest:
|
||||
@@ -1769,6 +1770,7 @@ void rrc_gNB_process_initial_ul_rrc_message(const f1ap_initial_ul_rrc_message_t
|
||||
LOG_D(NR_RRC, "Received RRCReestablishmentRequest on UL-CCCH-Message (UE RNTI %04x)\n", ul_rrc->crnti);
|
||||
rrc_handle_RRCReestablishmentRequest(
|
||||
rrc,
|
||||
assoc_id,
|
||||
&ul_ccch_msg->message.choice.c1->choice.rrcReestablishmentRequest->rrcReestablishmentRequest,
|
||||
ul_rrc);
|
||||
} break;
|
||||
@@ -2242,7 +2244,7 @@ void *rrc_gnb_task(void *args_p) {
|
||||
case F1AP_INITIAL_UL_RRC_MESSAGE:
|
||||
AssertFatal(NODE_IS_CU(RC.nrrrc[instance]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[instance]->node_type),
|
||||
"should not receive F1AP_INITIAL_UL_RRC_MESSAGE, need call by CU!\n");
|
||||
rrc_gNB_process_initial_ul_rrc_message(&F1AP_INITIAL_UL_RRC_MESSAGE(msg_p));
|
||||
rrc_gNB_process_initial_ul_rrc_message(msg_p->ittiMsgHeader.originInstance, &F1AP_INITIAL_UL_RRC_MESSAGE(msg_p));
|
||||
break;
|
||||
|
||||
/* Messages from PDCP */
|
||||
|
||||
@@ -157,7 +157,8 @@ rrc_gNB_ue_context_t *rrc_gNB_ue_context_5g_s_tmsi_exist(gNB_RRC_INST *rrc_insta
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// return a new ue context structure if ue_identityP, rnti not found in collection
|
||||
rrc_gNB_ue_context_t *rrc_gNB_create_ue_context(rnti_t rnti,
|
||||
rrc_gNB_ue_context_t *rrc_gNB_create_ue_context(sctp_assoc_t assoc_id,
|
||||
rnti_t rnti,
|
||||
gNB_RRC_INST *rrc_instance_pP,
|
||||
const uint64_t ue_identityP,
|
||||
uint32_t du_ue_id)
|
||||
@@ -170,7 +171,7 @@ rrc_gNB_ue_context_t *rrc_gNB_create_ue_context(rnti_t rnti,
|
||||
gNB_RRC_UE_t *ue = &ue_context_p->ue_context;
|
||||
ue->rnti = rnti;
|
||||
ue->random_ue_identity = ue_identityP;
|
||||
f1_ue_data_t ue_data = {.secondary_ue = du_ue_id};
|
||||
f1_ue_data_t ue_data = {.secondary_ue = du_ue_id, .du_assoc_id = assoc_id};
|
||||
AssertFatal(!cu_exists_f1_ue_data(ue->rrc_ue_id),
|
||||
"UE F1 Context for ID %d already exists, logic bug\n",
|
||||
ue->rrc_ue_id);
|
||||
|
||||
@@ -50,7 +50,8 @@ void rrc_gNB_remove_ue_context(gNB_RRC_INST* rrc_instance_pP, rrc_gNB_ue_context
|
||||
rrc_gNB_ue_context_t* rrc_gNB_ue_context_random_exist(gNB_RRC_INST* rrc_instance_pP, const uint64_t ue_identityP);
|
||||
|
||||
rrc_gNB_ue_context_t* rrc_gNB_ue_context_5g_s_tmsi_exist(gNB_RRC_INST* rrc_instance_pP, const uint64_t s_TMSI);
|
||||
rrc_gNB_ue_context_t* rrc_gNB_create_ue_context(rnti_t rnti,
|
||||
rrc_gNB_ue_context_t* rrc_gNB_create_ue_context(sctp_assoc_t assoc_id,
|
||||
rnti_t rnti,
|
||||
gNB_RRC_INST* rrc_instance_pP,
|
||||
const uint64_t ue_identityP,
|
||||
uint32_t du_ue_id);
|
||||
|
||||
@@ -37,6 +37,7 @@ static bool rrc_gNB_plmn_matches(const gNB_RRC_INST *rrc, const f1ap_served_cell
|
||||
|
||||
void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req, sctp_assoc_t assoc_id)
|
||||
{
|
||||
AssertFatal(assoc_id != 0, "illegal assoc_id == 0: should be -1 (monolithic) or >0 (split)\n");
|
||||
gNB_RRC_INST *rrc = RC.nrrrc[0];
|
||||
DevAssert(rrc);
|
||||
|
||||
@@ -164,6 +165,7 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req, sctp_assoc_t assoc_id)
|
||||
|
||||
void rrc_CU_process_f1_lost_connection(gNB_RRC_INST *rrc, f1ap_lost_connection_t *lc, sctp_assoc_t assoc_id)
|
||||
{
|
||||
AssertFatal(assoc_id != 0, "illegal assoc_id == 0: should be -1 (monolithic) or >0 (split)\n");
|
||||
AssertFatal(rrc->du != NULL, "no DU connected, cannot received F1 lost connection\n");
|
||||
AssertFatal(rrc->du->assoc_id == assoc_id,
|
||||
"previously connected DU (%d) does not match DU for which connection has been lost (%d)\n",
|
||||
|
||||
Reference in New Issue
Block a user