Implement UE Context Modification using F1AP
This commit is contained in:
@@ -62,9 +62,38 @@ static void ue_context_setup_response_f1ap(const f1ap_ue_context_setup_t *req, c
|
|||||||
|
|
||||||
static void ue_context_modification_response_f1ap(const f1ap_ue_context_modif_req_t *req, const f1ap_ue_context_modif_resp_t *resp)
|
static void ue_context_modification_response_f1ap(const f1ap_ue_context_modif_req_t *req, const f1ap_ue_context_modif_resp_t *resp)
|
||||||
{
|
{
|
||||||
(void)req;
|
MessageDef *msg = itti_alloc_new_message(TASK_MAC_GNB, 0, F1AP_UE_CONTEXT_MODIFICATION_RESP);
|
||||||
(void)resp;
|
f1ap_ue_context_modif_resp_t *f1ap_msg = &F1AP_UE_CONTEXT_MODIFICATION_RESP(msg);
|
||||||
AssertFatal(false, "not implemented\n");
|
/* copy all fields, but reallocate rrc_containers! */
|
||||||
|
*f1ap_msg = *resp;
|
||||||
|
|
||||||
|
if (resp->srbs_to_be_setup_length > 0) {
|
||||||
|
DevAssert(resp->srbs_to_be_setup != NULL);
|
||||||
|
f1ap_msg->srbs_to_be_setup_length = resp->srbs_to_be_setup_length;
|
||||||
|
f1ap_msg->srbs_to_be_setup = calloc(f1ap_msg->srbs_to_be_setup_length, sizeof(*f1ap_msg->srbs_to_be_setup));
|
||||||
|
for (int i = 0; i < f1ap_msg->srbs_to_be_setup_length; ++i)
|
||||||
|
f1ap_msg->srbs_to_be_setup[i] = resp->srbs_to_be_setup[i];
|
||||||
|
}
|
||||||
|
if (resp->drbs_to_be_setup_length > 0) {
|
||||||
|
DevAssert(resp->drbs_to_be_setup != NULL);
|
||||||
|
f1ap_msg->drbs_to_be_setup_length = resp->drbs_to_be_setup_length;
|
||||||
|
f1ap_msg->drbs_to_be_setup = calloc(f1ap_msg->drbs_to_be_setup_length, sizeof(*f1ap_msg->drbs_to_be_setup));
|
||||||
|
for (int i = 0; i < f1ap_msg->drbs_to_be_setup_length; ++i)
|
||||||
|
f1ap_msg->drbs_to_be_setup[i] = resp->drbs_to_be_setup[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resp->du_to_cu_rrc_information != NULL) {
|
||||||
|
f1ap_msg->du_to_cu_rrc_information = calloc(1, sizeof(*resp->du_to_cu_rrc_information));
|
||||||
|
AssertFatal(f1ap_msg->du_to_cu_rrc_information != NULL, "out of memory\n");
|
||||||
|
f1ap_msg->du_to_cu_rrc_information_length = resp->du_to_cu_rrc_information_length;
|
||||||
|
du_to_cu_rrc_information_t *du2cu = f1ap_msg->du_to_cu_rrc_information;
|
||||||
|
du2cu->cellGroupConfig_length = resp->du_to_cu_rrc_information->cellGroupConfig_length;
|
||||||
|
du2cu->cellGroupConfig = calloc(du2cu->cellGroupConfig_length, sizeof(*du2cu->cellGroupConfig));
|
||||||
|
AssertFatal(du2cu->cellGroupConfig != NULL, "out of memory\n");
|
||||||
|
memcpy(du2cu->cellGroupConfig, resp->du_to_cu_rrc_information->cellGroupConfig, du2cu->cellGroupConfig_length);
|
||||||
|
}
|
||||||
|
|
||||||
|
itti_send_msg_to_task(TASK_DU_F1, 0, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ue_context_release_request_f1ap(const f1ap_ue_context_release_req_t* req)
|
static void ue_context_release_request_f1ap(const f1ap_ue_context_release_req_t* req)
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ static void ue_context_setup_request_f1ap(const f1ap_ue_context_setup_t *req)
|
|||||||
f1ap_ue_context_setup_t *f1ap_msg = &F1AP_UE_CONTEXT_SETUP_REQ(msg);
|
f1ap_ue_context_setup_t *f1ap_msg = &F1AP_UE_CONTEXT_SETUP_REQ(msg);
|
||||||
*f1ap_msg = *req;
|
*f1ap_msg = *req;
|
||||||
AssertFatal(req->cu_to_du_rrc_information == NULL, "cu_to_du_rrc_information not supported yet\n");
|
AssertFatal(req->cu_to_du_rrc_information == NULL, "cu_to_du_rrc_information not supported yet\n");
|
||||||
|
AssertFatal(req->drbs_to_be_setup == NULL, "drbs_to_be_setup not supported yet\n");
|
||||||
|
AssertFatal(req->srbs_to_be_setup == NULL, "drbs_to_be_setup not supported yet\n");
|
||||||
if (req->rrc_container_length > 0) {
|
if (req->rrc_container_length > 0) {
|
||||||
f1ap_msg->rrc_container = calloc(req->rrc_container_length, sizeof(*f1ap_msg->rrc_container));
|
f1ap_msg->rrc_container = calloc(req->rrc_container_length, sizeof(*f1ap_msg->rrc_container));
|
||||||
AssertFatal(f1ap_msg->rrc_container != NULL, "out of memory\n");
|
AssertFatal(f1ap_msg->rrc_container != NULL, "out of memory\n");
|
||||||
@@ -41,8 +43,32 @@ static void ue_context_setup_request_f1ap(const f1ap_ue_context_setup_t *req)
|
|||||||
|
|
||||||
static void ue_context_modification_request_f1ap(const f1ap_ue_context_modif_req_t *req)
|
static void ue_context_modification_request_f1ap(const f1ap_ue_context_modif_req_t *req)
|
||||||
{
|
{
|
||||||
(void)req;
|
MessageDef *msg = itti_alloc_new_message(TASK_RRC_GNB, 0, F1AP_UE_CONTEXT_MODIFICATION_REQ);
|
||||||
AssertFatal(false, "not implemented yet\n");
|
f1ap_ue_context_modif_req_t *f1ap_msg = &F1AP_UE_CONTEXT_MODIFICATION_REQ(msg);
|
||||||
|
*f1ap_msg = *req;
|
||||||
|
AssertFatal(req->cu_to_du_rrc_information == NULL, "cu_to_du_rrc_information not supported yet\n");
|
||||||
|
AssertFatal(req->drbs_to_be_modified_length == 0, "drbs_to_be_modified not supported yet\n");
|
||||||
|
if (req->drbs_to_be_setup_length > 0) {
|
||||||
|
int n = req->drbs_to_be_setup_length;
|
||||||
|
f1ap_msg->drbs_to_be_setup_length = n;
|
||||||
|
f1ap_msg->drbs_to_be_setup = calloc(n, sizeof(*f1ap_msg->drbs_to_be_setup));
|
||||||
|
AssertFatal(f1ap_msg->drbs_to_be_setup != NULL, "out of memory\n");
|
||||||
|
memcpy(f1ap_msg->drbs_to_be_setup, req->drbs_to_be_setup, n * sizeof(*f1ap_msg->drbs_to_be_setup));
|
||||||
|
}
|
||||||
|
if (req->srbs_to_be_setup_length > 0) {
|
||||||
|
int n = req->srbs_to_be_setup_length;
|
||||||
|
f1ap_msg->srbs_to_be_setup_length = n;
|
||||||
|
f1ap_msg->srbs_to_be_setup = calloc(n, sizeof(*f1ap_msg->srbs_to_be_setup));
|
||||||
|
AssertFatal(f1ap_msg->srbs_to_be_setup != NULL, "out of memory\n");
|
||||||
|
memcpy(f1ap_msg->srbs_to_be_setup, req->srbs_to_be_setup, n * sizeof(*f1ap_msg->srbs_to_be_setup));
|
||||||
|
}
|
||||||
|
if (req->rrc_container_length > 0) {
|
||||||
|
f1ap_msg->rrc_container = calloc(req->rrc_container_length, sizeof(*f1ap_msg->rrc_container));
|
||||||
|
AssertFatal(f1ap_msg->rrc_container != NULL, "out of memory\n");
|
||||||
|
f1ap_msg->rrc_container_length = req->rrc_container_length;
|
||||||
|
memcpy(f1ap_msg->rrc_container, req->rrc_container, req->rrc_container_length);
|
||||||
|
}
|
||||||
|
itti_send_msg_to_task(TASK_CU_F1, 0, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ue_context_release_command_f1ap(const f1ap_ue_context_release_cmd_t *cmd)
|
static void ue_context_release_command_f1ap(const f1ap_ue_context_release_cmd_t *cmd)
|
||||||
|
|||||||
Reference in New Issue
Block a user