Commit a1b2d222 authored by matzakos's avatar matzakos

Generation of UE context modification response at F1AP layer of the DU

-Fix some indentations
parent f068fb4e
...@@ -127,6 +127,10 @@ static int f1ap_decode_successful_outcome(F1AP_F1AP_PDU_t *pdu) { ...@@ -127,6 +127,10 @@ static int f1ap_decode_successful_outcome(F1AP_F1AP_PDU_t *pdu) {
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextSetup\n", __func__); LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextSetup\n", __func__);
break; break;
case F1AP_ProcedureCode_id_UEContextModification:
LOG_I(F1AP, "%s(): F1AP_ProcedureCode_id_UEContextModification\n", __func__);
break;
default: default:
LOG_E(F1AP,"Unknown procedure ID (%d) for successfull outcome message\n", LOG_E(F1AP,"Unknown procedure ID (%d) for successfull outcome message\n",
(int)pdu->choice.successfulOutcome->procedureCode); (int)pdu->choice.successfulOutcome->procedureCode);
......
...@@ -211,7 +211,7 @@ void *F1AP_DU_task(void *arg) { ...@@ -211,7 +211,7 @@ void *F1AP_DU_task(void *arg) {
case F1AP_UE_CONTEXT_MODIFICATION_RESP: case F1AP_UE_CONTEXT_MODIFICATION_RESP:
LOG_I(F1AP, "DU task received itti message from RRC for F1AP_UE_CONTEXT_MODIFICATION_RESP message generation \n"); LOG_I(F1AP, "DU task received itti message from RRC for F1AP_UE_CONTEXT_MODIFICATION_RESP message generation \n");
//DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(myInstance, &F1AP_UE_CONTEXT_MODIFICATION_RESP(msg)); DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(myInstance, &F1AP_UE_CONTEXT_MODIFICATION_RESP(msg));
break; break;
case F1AP_UE_CONTEXT_RELEASE_REQ: // from MAC case F1AP_UE_CONTEXT_RELEASE_REQ: // from MAC
......
...@@ -253,7 +253,7 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance, ...@@ -253,7 +253,7 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
return 0; return 0;
} }
int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup_t *req) { int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup_t *resp) {
F1AP_F1AP_PDU_t pdu= {0}; F1AP_F1AP_PDU_t pdu= {0};
F1AP_UEContextSetupResponse_t *out; F1AP_UEContextSetupResponse_t *out;
uint8_t *buffer=NULL; uint8_t *buffer=NULL;
...@@ -272,42 +272,40 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup ...@@ -272,42 +272,40 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup
ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
ie1->criticality = F1AP_Criticality_reject; ie1->criticality = F1AP_Criticality_reject;
ie1->value.present = F1AP_UEContextSetupResponseIEs__value_PR_GNB_CU_UE_F1AP_ID; ie1->value.present = F1AP_UEContextSetupResponseIEs__value_PR_GNB_CU_UE_F1AP_ID;
ie1->value.choice.GNB_CU_UE_F1AP_ID = req->gNB_CU_ue_id; ie1->value.choice.GNB_CU_UE_F1AP_ID = resp->gNB_CU_ue_id;
/* mandatory */ /* mandatory */
/* c2. GNB_DU_UE_F1AP_ID */ /* c2. GNB_DU_UE_F1AP_ID */
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie2); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie2);
ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
ie2->criticality = F1AP_Criticality_reject; ie2->criticality = F1AP_Criticality_reject;
ie2->value.present = F1AP_UEContextSetupResponseIEs__value_PR_GNB_DU_UE_F1AP_ID; ie2->value.present = F1AP_UEContextSetupResponseIEs__value_PR_GNB_DU_UE_F1AP_ID;
ie2->value.choice.GNB_DU_UE_F1AP_ID = f1ap_get_du_ue_f1ap_id(DUtype, instance, req->rnti); ie2->value.choice.GNB_DU_UE_F1AP_ID = f1ap_get_du_ue_f1ap_id(DUtype, instance, resp->rnti);
/* mandatory */ /* mandatory */
/* c3. DUtoCURRCInformation */ /* c3. DUtoCURRCInformation */
//if (0) { asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie3);
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie3); ie3->id = F1AP_ProtocolIE_ID_id_DUtoCURRCInformation;
ie3->id = F1AP_ProtocolIE_ID_id_DUtoCURRCInformation; ie3->criticality = F1AP_Criticality_reject;
ie3->criticality = F1AP_Criticality_reject; ie3->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DUtoCURRCInformation;
ie3->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DUtoCURRCInformation; {
{ /* cellGroupConfig */
/* cellGroupConfig */ OCTET_STRING_fromBuf(&ie3->value.choice.DUtoCURRCInformation.cellGroupConfig, (const char *)resp->du_to_cu_rrc_information,
OCTET_STRING_fromBuf(&ie3->value.choice.DUtoCURRCInformation.cellGroupConfig, (const char *)req->du_to_cu_rrc_information, resp->du_to_cu_rrc_information_length);
req->du_to_cu_rrc_information_length);
/* OPTIONAL */ /* OPTIONAL */
/* measGapConfig */ /* measGapConfig */
if (0) { if (0) {
asn1cCalloc(ie3->value.choice.DUtoCURRCInformation.measGapConfig, tmp); asn1cCalloc(ie3->value.choice.DUtoCURRCInformation.measGapConfig, tmp);
OCTET_STRING_fromBuf(tmp, "asdsa", strlen("asdsa")); OCTET_STRING_fromBuf(tmp, "asdsa", strlen("asdsa"));
} }
/* OPTIONAL */ /* OPTIONAL */
/* requestedP_MaxFR1 */ /* requestedP_MaxFR1 */
if (0) { if (0) {
asn1cCalloc(ie3->value.choice.DUtoCURRCInformation.requestedP_MaxFR1, tmp); asn1cCalloc(ie3->value.choice.DUtoCURRCInformation.requestedP_MaxFR1, tmp);
OCTET_STRING_fromBuf(tmp, "asdsa", strlen("asdsa")); OCTET_STRING_fromBuf(tmp, "asdsa", strlen("asdsa"));
}
} }
//} }
/* optional */ /* optional */
/* c4. C_RNTI */ /* c4. C_RNTI */
...@@ -317,7 +315,7 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup ...@@ -317,7 +315,7 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup
ie4->criticality = F1AP_Criticality_ignore; ie4->criticality = F1AP_Criticality_ignore;
ie4->value.present = F1AP_UEContextSetupResponseIEs__value_PR_C_RNTI; ie4->value.present = F1AP_UEContextSetupResponseIEs__value_PR_C_RNTI;
//C_RNTI_TO_BIT_STRING(rntiP, &ie->value.choice.C_RNTI); //C_RNTI_TO_BIT_STRING(rntiP, &ie->value.choice.C_RNTI);
ie4->value.choice.C_RNTI=req->rnti; ie4->value.choice.C_RNTI=resp->rnti;
LOG_E(F1AP,"RNTI to code!\n"); LOG_E(F1AP,"RNTI to code!\n");
} }
...@@ -344,95 +342,95 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup ...@@ -344,95 +342,95 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup
/* mandatory */ /* mandatory */
/* c7. DRBs_Setup_List */ /* c7. DRBs_Setup_List */
if(req->drbs_to_be_setup_length > 0){ if(resp->drbs_to_be_setup_length > 0){
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie7); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie7);
ie7->id = F1AP_ProtocolIE_ID_id_DRBs_Setup_List; ie7->id = F1AP_ProtocolIE_ID_id_DRBs_Setup_List;
ie7->criticality = F1AP_Criticality_ignore; ie7->criticality = F1AP_Criticality_ignore;
ie7->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DRBs_Setup_List; ie7->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DRBs_Setup_List;
for (int i=0; i< req->drbs_to_be_setup_length; i++) { for (int i=0; i< resp->drbs_to_be_setup_length; i++) {
// //
asn1cSequenceAdd(ie7->value.choice.DRBs_Setup_List.list, asn1cSequenceAdd(ie7->value.choice.DRBs_Setup_List.list,
F1AP_DRBs_Setup_ItemIEs_t, drbs_setup_item_ies); F1AP_DRBs_Setup_ItemIEs_t, drbs_setup_item_ies);
drbs_setup_item_ies->id = F1AP_ProtocolIE_ID_id_DRBs_Setup_Item; drbs_setup_item_ies->id = F1AP_ProtocolIE_ID_id_DRBs_Setup_Item;
drbs_setup_item_ies->criticality = F1AP_Criticality_ignore; drbs_setup_item_ies->criticality = F1AP_Criticality_ignore;
drbs_setup_item_ies->value.present = F1AP_SRBs_FailedToBeSetup_ItemIEs__value_PR_SRBs_FailedToBeSetup_Item; drbs_setup_item_ies->value.present = F1AP_DRBs_Setup_ItemIEs__value_PR_DRBs_Setup_Item;
/* 7.1 DRBs_Setup_Item */ /* 7.1 DRBs_Setup_Item */
/* ADD */ /* ADD */
F1AP_DRBs_Setup_Item_t *drbs_setup_item=&drbs_setup_item_ies->value.choice.DRBs_Setup_Item; F1AP_DRBs_Setup_Item_t *drbs_setup_item=&drbs_setup_item_ies->value.choice.DRBs_Setup_Item;
/* dRBID */ /* dRBID */
drbs_setup_item->dRBID = req->drbs_to_be_setup[i].drb_id; drbs_setup_item->dRBID = resp->drbs_to_be_setup[i].drb_id;
/* OPTIONAL */ /* OPTIONAL */
/* lCID */ /* lCID */
//drbs_setup_item.lCID = (F1AP_LCID_t *)calloc(1, sizeof(F1AP_LCID_t)); //drbs_setup_item.lCID = (F1AP_LCID_t *)calloc(1, sizeof(F1AP_LCID_t));
//drbs_setup_item.lCID = 1L; //drbs_setup_item.lCID = 1L;
for (int j=0; j<req->drbs_to_be_setup[i].up_dl_tnl_length; j++) { for (int j=0; j<resp->drbs_to_be_setup[i].up_dl_tnl_length; j++) {
/* ADD */ /* ADD */
asn1cSequenceAdd(drbs_setup_item->dLUPTNLInformation_ToBeSetup_List.list, asn1cSequenceAdd(drbs_setup_item->dLUPTNLInformation_ToBeSetup_List.list,
F1AP_DLUPTNLInformation_ToBeSetup_Item_t, dLUPTNLInformation_ToBeSetup_Item); F1AP_DLUPTNLInformation_ToBeSetup_Item_t, dLUPTNLInformation_ToBeSetup_Item);
dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.present = F1AP_UPTransportLayerInformation_PR_gTPTunnel; dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.present = F1AP_UPTransportLayerInformation_PR_gTPTunnel;
/* gTPTunnel */ /* gTPTunnel */
asn1cCalloc(dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.choice.gTPTunnel,gTPTunnel); asn1cCalloc(dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.choice.gTPTunnel,gTPTunnel);
/* transportLayerAddress */ /* transportLayerAddress */
struct sockaddr_in addr= {0}; struct sockaddr_in addr= {0};
inet_pton(AF_INET, getCxt(false,instance)->setupReq.DU_f1_ip_address.ipv4_address, inet_pton(AF_INET, getCxt(false,instance)->setupReq.DU_f1_ip_address.ipv4_address,
&addr.sin_addr.s_addr); &addr.sin_addr.s_addr);
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(addr.sin_addr.s_addr, TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(addr.sin_addr.s_addr,
&gTPTunnel->transportLayerAddress); &gTPTunnel->transportLayerAddress);
/* gTP_TEID */ /* gTP_TEID */
INT32_TO_OCTET_STRING(req->drbs_to_be_setup[i].up_dl_tnl[j].teid, &gTPTunnel->gTP_TEID); INT32_TO_OCTET_STRING(resp->drbs_to_be_setup[i].up_dl_tnl[j].teid, &gTPTunnel->gTP_TEID);
} // for j } // for j
} // for i } // for i
} }
/* mandatory */ /* mandatory */
/* c8. SRBs_FailedToBeSetup_List */ /* c8. SRBs_FailedToBeSetup_List */
if(0){ if(0){
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie8); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie8);
ie8->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_List; ie8->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_List;
ie8->criticality = F1AP_Criticality_ignore; ie8->criticality = F1AP_Criticality_ignore;
ie8->value.present = F1AP_UEContextSetupResponseIEs__value_PR_SRBs_FailedToBeSetup_List; ie8->value.present = F1AP_UEContextSetupResponseIEs__value_PR_SRBs_FailedToBeSetup_List;
for (int i=0; i<1; i++) { for (int i=0; i<1; i++) {
// //
asn1cSequenceAdd(ie8->value.choice.SRBs_FailedToBeSetup_List.list, asn1cSequenceAdd(ie8->value.choice.SRBs_FailedToBeSetup_List.list,
F1AP_SRBs_FailedToBeSetup_ItemIEs_t, srbs_failedToBeSetup_item_ies); F1AP_SRBs_FailedToBeSetup_ItemIEs_t, srbs_failedToBeSetup_item_ies);
srbs_failedToBeSetup_item_ies->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_Item; srbs_failedToBeSetup_item_ies->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_Item;
srbs_failedToBeSetup_item_ies->criticality = F1AP_Criticality_ignore; srbs_failedToBeSetup_item_ies->criticality = F1AP_Criticality_ignore;
srbs_failedToBeSetup_item_ies->value.present = F1AP_SRBs_FailedToBeSetup_ItemIEs__value_PR_SRBs_FailedToBeSetup_Item; srbs_failedToBeSetup_item_ies->value.present = F1AP_SRBs_FailedToBeSetup_ItemIEs__value_PR_SRBs_FailedToBeSetup_Item;
/* 8.1 SRBs_Setup_Item */ /* 8.1 SRBs_Setup_Item */
F1AP_SRBs_FailedToBeSetup_Item_t *srbs_failedToBeSetup_item= F1AP_SRBs_FailedToBeSetup_Item_t *srbs_failedToBeSetup_item=
&srbs_failedToBeSetup_item_ies->value.choice.SRBs_FailedToBeSetup_Item; &srbs_failedToBeSetup_item_ies->value.choice.SRBs_FailedToBeSetup_Item;
/* sRBID */ /* sRBID */
srbs_failedToBeSetup_item->sRBID = 13L; srbs_failedToBeSetup_item->sRBID = 13L;
/* cause */ /* cause */
asn1cCalloc(srbs_failedToBeSetup_item->cause, tmp); asn1cCalloc(srbs_failedToBeSetup_item->cause, tmp);
// dummy value // dummy value
tmp->present = F1AP_Cause_PR_radioNetwork; tmp->present = F1AP_Cause_PR_radioNetwork;
switch(tmp->present) { switch(tmp->present) {
case F1AP_Cause_PR_radioNetwork: case F1AP_Cause_PR_radioNetwork:
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified; tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified;
break; break;
case F1AP_Cause_PR_transport:
case F1AP_Cause_PR_transport: tmp->choice.transport = F1AP_CauseTransport_unspecified;
tmp->choice.transport = F1AP_CauseTransport_unspecified; break;
break;
case F1AP_Cause_PR_protocol:
case F1AP_Cause_PR_protocol: tmp->choice.protocol = F1AP_CauseProtocol_unspecified;
tmp->choice.protocol = F1AP_CauseProtocol_unspecified; break;
break;
case F1AP_Cause_PR_misc:
case F1AP_Cause_PR_misc: tmp->choice.misc = F1AP_CauseMisc_unspecified;
tmp->choice.misc = F1AP_CauseMisc_unspecified; break;
break;
case F1AP_Cause_PR_NOTHING:
case F1AP_Cause_PR_NOTHING: default:
default: break;
break; } // switch
} // switch } // for i
} // for i
} }
/* */ /* */
...@@ -534,13 +532,13 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup ...@@ -534,13 +532,13 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup
/* mandatory */ /* mandatory */
/* c11. SRBs_Setup_List */ /* c11. SRBs_Setup_List */
if(req->srbs_to_be_setup_length > 0){ if(resp->srbs_to_be_setup_length > 0){
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie11); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie11);
ie11->id = F1AP_ProtocolIE_ID_id_SRBs_Setup_List; ie11->id = F1AP_ProtocolIE_ID_id_SRBs_Setup_List;
ie11->criticality = F1AP_Criticality_ignore; ie11->criticality = F1AP_Criticality_ignore;
ie11->value.present = F1AP_UEContextSetupResponseIEs__value_PR_SRBs_Setup_List; ie11->value.present = F1AP_UEContextSetupResponseIEs__value_PR_SRBs_Setup_List;
for (int i=0; i< req->srbs_to_be_setup_length; i++) {// for (int i=0; i< resp->srbs_to_be_setup_length; i++) {//
asn1cSequenceAdd(ie11->value.choice.SRBs_Setup_List.list, asn1cSequenceAdd(ie11->value.choice.SRBs_Setup_List.list,
F1AP_SRBs_Setup_ItemIEs_t, srbs_setup_item_ies); F1AP_SRBs_Setup_ItemIEs_t, srbs_setup_item_ies);
srbs_setup_item_ies->id = F1AP_ProtocolIE_ID_id_SRBs_Setup_Item; srbs_setup_item_ies->id = F1AP_ProtocolIE_ID_id_SRBs_Setup_Item;
...@@ -550,7 +548,7 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup ...@@ -550,7 +548,7 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup
/* ADD */ /* ADD */
F1AP_SRBs_Setup_Item_t *srbs_setup_item=&srbs_setup_item_ies->value.choice.SRBs_Setup_Item; F1AP_SRBs_Setup_Item_t *srbs_setup_item=&srbs_setup_item_ies->value.choice.SRBs_Setup_Item;
/* sRBID */ /* sRBID */
srbs_setup_item->sRBID = req->srbs_to_be_setup[i].srb_id; srbs_setup_item->sRBID = resp->srbs_to_be_setup[i].srb_id;
} }
} }
...@@ -925,8 +923,8 @@ int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance, ...@@ -925,8 +923,8 @@ int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance,
/* mandatory */ /* mandatory */
/* GNB_DU_UE_F1AP_ID */ /* GNB_DU_UE_F1AP_ID */
F1AP_UEContextSetupRequestIEs_t *ieDU_UE; F1AP_UEContextModificationRequestIEs_t *ieDU_UE;
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupRequestIEs_t, ieDU_UE, container, F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextModificationRequestIEs_t, ieDU_UE, container,
F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true); F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true);
f1ap_ue_context_modification_req->gNB_DU_ue_id = ieDU_UE->value.choice.GNB_DU_UE_F1AP_ID; f1ap_ue_context_modification_req->gNB_DU_ue_id = ieDU_UE->value.choice.GNB_DU_UE_F1AP_ID;
f1ap_ue_context_modification_req->rnti = f1ap_get_rnti_by_du_id(DUtype, instance, f1ap_ue_context_modification_req->gNB_DU_ue_id); f1ap_ue_context_modification_req->rnti = f1ap_get_rnti_by_du_id(DUtype, instance, f1ap_ue_context_modification_req->gNB_DU_ue_id);
...@@ -959,7 +957,7 @@ int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance, ...@@ -959,7 +957,7 @@ int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance,
/* DRB */ /* DRB */
F1AP_UEContextModificationRequestIEs_t *ieDrb; F1AP_UEContextModificationRequestIEs_t *ieDrb;
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextModificationRequestIEs_t, ieDrb, container, F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextModificationRequestIEs_t, ieDrb, container,
F1AP_ProtocolIE_ID_id_DRBs_ToBeSetup_List, false); F1AP_ProtocolIE_ID_id_DRBs_ToBeSetupMod_List, false);
if(ieDrb!=NULL) { if(ieDrb!=NULL) {
f1ap_ue_context_modification_req->drbs_to_be_setup_length = ieDrb->value.choice.DRBs_ToBeSetupMod_List.list.count; f1ap_ue_context_modification_req->drbs_to_be_setup_length = ieDrb->value.choice.DRBs_ToBeSetupMod_List.list.count;
...@@ -1059,7 +1057,7 @@ int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance, ...@@ -1059,7 +1057,7 @@ int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance,
} }
//void DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(F1AP_UEContextModificationResponse_t *UEContextModificationResponse) { //void DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(F1AP_UEContextModificationResponse_t *UEContextModificationResponse) {
int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) { int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance, f1ap_ue_context_setup_t *resp) {
F1AP_F1AP_PDU_t pdu= {0}; F1AP_F1AP_PDU_t pdu= {0};
F1AP_UEContextModificationResponse_t *out; F1AP_UEContextModificationResponse_t *out;
uint8_t *buffer=NULL; uint8_t *buffer=NULL;
...@@ -1078,14 +1076,14 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) { ...@@ -1078,14 +1076,14 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
ie1->criticality = F1AP_Criticality_reject; ie1->criticality = F1AP_Criticality_reject;
ie1->value.present = F1AP_UEContextModificationResponseIEs__value_PR_GNB_CU_UE_F1AP_ID; ie1->value.present = F1AP_UEContextModificationResponseIEs__value_PR_GNB_CU_UE_F1AP_ID;
ie1->value.choice.GNB_CU_UE_F1AP_ID = 126L; ie1->value.choice.GNB_CU_UE_F1AP_ID = resp->gNB_CU_ue_id;
/* mandatory */ /* mandatory */
/* c2. GNB_DU_UE_F1AP_ID */ /* c2. GNB_DU_UE_F1AP_ID */
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie2); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie2);
ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
ie2->criticality = F1AP_Criticality_reject; ie2->criticality = F1AP_Criticality_reject;
ie2->value.present = F1AP_UEContextModificationResponseIEs__value_PR_GNB_DU_UE_F1AP_ID; ie2->value.present = F1AP_UEContextModificationResponseIEs__value_PR_GNB_DU_UE_F1AP_ID;
ie2->value.choice.GNB_DU_UE_F1AP_ID = 651L; ie2->value.choice.GNB_DU_UE_F1AP_ID = f1ap_get_du_ue_f1ap_id(DUtype, instance, resp->rnti);
/* optional */ /* optional */
/* c3. ResourceCoordinationTransferContainer */ /* c3. ResourceCoordinationTransferContainer */
...@@ -1098,61 +1096,80 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) { ...@@ -1098,61 +1096,80 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
strlen("asdsa1d32sa1d31asd31as")); strlen("asdsa1d32sa1d31asd31as"));
} }
/* optional */ /* mandatory */
/* c4. DUtoCURRCInformation */ /* c3. DUtoCURRCInformation */
if (0) {
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie4); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie4);
ie4->id = F1AP_ProtocolIE_ID_id_DUtoCURRCInformation; ie4->id = F1AP_ProtocolIE_ID_id_DUtoCURRCInformation;
ie4->criticality = F1AP_Criticality_reject; ie4->criticality = F1AP_Criticality_reject;
ie4->value.present = F1AP_UEContextModificationResponseIEs__value_PR_DUtoCURRCInformation; ie4->value.present = F1AP_UEContextModificationResponseIEs__value_PR_DUtoCURRCInformation;
OCTET_STRING_fromBuf(&ie4->value.choice.DUtoCURRCInformation.cellGroupConfig, "asdsa1d32sa1d31asd31as", {
strlen("asdsa1d32sa1d31asd31as")); /* cellGroupConfig */
OCTET_STRING_fromBuf(&ie4->value.choice.DUtoCURRCInformation.cellGroupConfig, (const char *)resp->du_to_cu_rrc_information,
resp->du_to_cu_rrc_information_length);
/* OPTIONAL */ /* OPTIONAL */
if (1) { /* measGapConfig */
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie41); if (0) {
ie41->value.choice.DUtoCURRCInformation.measGapConfig = (F1AP_MeasGapConfig_t *)calloc(1, sizeof(F1AP_MeasGapConfig_t)); asn1cCalloc(ie4->value.choice.DUtoCURRCInformation.measGapConfig, tmp);
OCTET_STRING_fromBuf( ie41->value.choice.DUtoCURRCInformation.measGapConfig, "asdsa1d32sa1d31asd31as", OCTET_STRING_fromBuf(tmp, "asdsa", strlen("asdsa"));
strlen("asdsa1d32sa1d31asd31as")); }
/* OPTIONAL */
/* requestedP_MaxFR1 */
if (0) {
asn1cCalloc(ie4->value.choice.DUtoCURRCInformation.requestedP_MaxFR1, tmp);
OCTET_STRING_fromBuf(tmp, "asdsa", strlen("asdsa"));
}
} }
}
/* mandatory */
/* c5. DRBs_SetupMod_List */ /* optional */
/* c5. DRBs_Setup_List */
if(resp->drbs_to_be_setup_length > 0){
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie5); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie5);
ie5->id = F1AP_ProtocolIE_ID_id_DRBs_SetupMod_List; ie5->id = F1AP_ProtocolIE_ID_id_DRBs_SetupMod_List;
ie5->criticality = F1AP_Criticality_reject; ie5->criticality = F1AP_Criticality_ignore;
ie5->value.present = F1AP_UEContextModificationResponseIEs__value_PR_DRBs_SetupMod_List; ie5->value.present = F1AP_UEContextModificationResponseIEs__value_PR_DRBs_SetupMod_List;
for (int i=0; i< resp->drbs_to_be_setup_length; i++) {
for (int i=0; i<1; i++) {
// //
asn1cSequenceAdd(ie5->value.choice.DRBs_SetupMod_List.list, asn1cSequenceAdd(ie5->value.choice.DRBs_SetupMod_List.list,
F1AP_DRBs_SetupMod_ItemIEs_t, drbs_setupMod_item_ies); F1AP_DRBs_SetupMod_ItemIEs_t, drbs_setupmod_item_ies);
drbs_setupMod_item_ies->id = F1AP_ProtocolIE_ID_id_DRBs_SetupMod_Item; drbs_setupmod_item_ies->id = F1AP_ProtocolIE_ID_id_DRBs_SetupMod_Item;
drbs_setupMod_item_ies->criticality = F1AP_Criticality_reject; drbs_setupmod_item_ies->criticality = F1AP_Criticality_ignore;
drbs_setupMod_item_ies->value.present = F1AP_DRBs_SetupMod_ItemIEs__value_PR_DRBs_SetupMod_Item; drbs_setupmod_item_ies->value.present = F1AP_DRBs_SetupMod_ItemIEs__value_PR_DRBs_SetupMod_Item;
/* 10.1 DRBs_SetupMod_Item */ /* 7.1 DRBs_Setup_Item */
F1AP_DRBs_SetupMod_Item_t *drbs_setupMod_item=&drbs_setupMod_item_ies->value.choice.DRBs_SetupMod_Item; /* ADD */
F1AP_DRBs_SetupMod_Item_t *drbs_setupmod_item=&drbs_setupmod_item_ies->value.choice.DRBs_SetupMod_Item;
/* dRBID */ /* dRBID */
drbs_setupMod_item->dRBID = 30L; drbs_setupmod_item->dRBID = resp->drbs_to_be_setup[i].drb_id;
/* DLTunnels_SetupMod_List */
int maxnoofDLUPTNLInformation = 1; // 2;
for (int j=0; j<maxnoofDLUPTNLInformation; j++) { /* OPTIONAL */
/* DLTunnels_ToBeSetup_Item */ /* lCID */
asn1cSequenceAdd(ie5->value.choice.DRBs_SetupMod_List.list, //drbs_setup_item.lCID = (F1AP_LCID_t *)calloc(1, sizeof(F1AP_LCID_t));
//drbs_setup_item.lCID = 1L;
for (int j=0; j<resp->drbs_to_be_setup[i].up_dl_tnl_length; j++) {
/* ADD */
asn1cSequenceAdd(drbs_setupmod_item->dLUPTNLInformation_ToBeSetup_List.list,
F1AP_DLUPTNLInformation_ToBeSetup_Item_t, dLUPTNLInformation_ToBeSetup_Item); F1AP_DLUPTNLInformation_ToBeSetup_Item_t, dLUPTNLInformation_ToBeSetup_Item);
dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.present = F1AP_UPTransportLayerInformation_PR_gTPTunnel; dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.present = F1AP_UPTransportLayerInformation_PR_gTPTunnel;
asn1cCalloc(dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.choice.gTPTunnel, /* gTPTunnel */
gTPTunnel); asn1cCalloc(dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.choice.gTPTunnel,gTPTunnel);
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(1234, &gTPTunnel->transportLayerAddress); /* transportLayerAddress */
OCTET_STRING_fromBuf(&gTPTunnel->gTP_TEID, "1204", struct sockaddr_in addr= {0};
strlen("1204")); inet_pton(AF_INET, getCxt(false,instance)->setupReq.DU_f1_ip_address.ipv4_address,
} &addr.sin_addr.s_addr);
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(addr.sin_addr.s_addr,
&gTPTunnel->transportLayerAddress);
/* gTP_TEID */
INT32_TO_OCTET_STRING(resp->drbs_to_be_setup[i].up_dl_tnl[j].teid, &gTPTunnel->gTP_TEID);
} // for j
} // for i
} }
/* mandatory */ /* optional */
/* c6. DRBs_Modified_List */ /* c6. DRBs_Modified_List */
if(0){
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie6); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie6);
ie6->id = F1AP_ProtocolIE_ID_id_DRBs_Modified_List; ie6->id = F1AP_ProtocolIE_ID_id_DRBs_Modified_List;
ie6->criticality = F1AP_Criticality_reject; ie6->criticality = F1AP_Criticality_reject;
...@@ -1184,9 +1201,11 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) { ...@@ -1184,9 +1201,11 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
OCTET_STRING_fromBuf(&gTPTunnel->gTP_TEID, "1204", strlen("1204")); OCTET_STRING_fromBuf(&gTPTunnel->gTP_TEID, "1204", strlen("1204"));
} }
} }
}
/* mandatory */ /* optional */
/* c7. SRBs_FailedToBeSetupMod_List */ /* c7. SRBs_FailedToBeSetupMod_List */
if(0){
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie7); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie7);
ie7->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetupMod_List; ie7->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetupMod_List;
ie7->criticality = F1AP_Criticality_reject; ie7->criticality = F1AP_Criticality_reject;
...@@ -1208,9 +1227,11 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) { ...@@ -1208,9 +1227,11 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
tmp->present = F1AP_Cause_PR_radioNetwork; tmp->present = F1AP_Cause_PR_radioNetwork;
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id; tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
} }
}
/* mandatory */ /* optional */
/* c8. DRBs_FailedToBeSetupMod_List */ /* c8. DRBs_FailedToBeSetupMod_List */
if(0){
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie8); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie8);
ie8->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetupMod_List; ie8->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetupMod_List;
ie8->criticality = F1AP_Criticality_reject; ie8->criticality = F1AP_Criticality_reject;
...@@ -1232,9 +1253,11 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) { ...@@ -1232,9 +1253,11 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
drbs_failedToBeSetupMod_item->cause->present = F1AP_Cause_PR_radioNetwork; drbs_failedToBeSetupMod_item->cause->present = F1AP_Cause_PR_radioNetwork;
drbs_failedToBeSetupMod_item->cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id; drbs_failedToBeSetupMod_item->cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
} }
}
/* mandatory */ /* optional */
/* c9. SCell_FailedtoSetupMod_List */ /* c9. SCell_FailedtoSetupMod_List */
if(0){
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie9); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie9);
ie9->id = F1AP_ProtocolIE_ID_id_SCell_FailedtoSetupMod_List; ie9->id = F1AP_ProtocolIE_ID_id_SCell_FailedtoSetupMod_List;
ie9->criticality = F1AP_Criticality_ignore; ie9->criticality = F1AP_Criticality_ignore;
...@@ -1255,9 +1278,11 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) { ...@@ -1255,9 +1278,11 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
tmp->present = F1AP_Cause_PR_radioNetwork; tmp->present = F1AP_Cause_PR_radioNetwork;
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id; tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
} }
}
/* mandatory */ /* optional */
/* c10. DRBs_FailedToBeModified_List */ /* c10. DRBs_FailedToBeModified_List */
if(0){
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie10); asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie10);
ie10->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeModified_List; ie10->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeModified_List;
ie10->criticality = F1AP_Criticality_reject; ie10->criticality = F1AP_Criticality_reject;
...@@ -1279,6 +1304,7 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) { ...@@ -1279,6 +1304,7 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
tmp->present = F1AP_Cause_PR_radioNetwork; tmp->present = F1AP_Cause_PR_radioNetwork;
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id; tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
} }
}
// /* */ // /* */
/* c11. CriticalityDiagnostics */ /* c11. CriticalityDiagnostics */
...@@ -1328,6 +1354,28 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) { ...@@ -1328,6 +1354,28 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
} }
} }
} }
/* optional */
/* c12. SRBs_Setup_List */
if(resp->srbs_to_be_setup_length > 0){
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie12);
ie12->id = F1AP_ProtocolIE_ID_id_SRBs_SetupMod_List;
ie12->criticality = F1AP_Criticality_ignore;
ie12->value.present = F1AP_UEContextModificationResponseIEs__value_PR_SRBs_SetupMod_List;
for (int i=0; i< resp->srbs_to_be_setup_length; i++) {//
asn1cSequenceAdd(ie12->value.choice.SRBs_SetupMod_List.list,
F1AP_SRBs_SetupMod_ItemIEs_t, srbs_setupmod_item_ies);
srbs_setupmod_item_ies->id = F1AP_ProtocolIE_ID_id_SRBs_SetupMod_Item;
srbs_setupmod_item_ies->criticality = F1AP_Criticality_ignore;
srbs_setupmod_item_ies->value.present = F1AP_SRBs_SetupMod_ItemIEs__value_PR_SRBs_SetupMod_Item;
/* 11.1 SRBs_Setup_Item */
/* ADD */
F1AP_SRBs_SetupMod_Item_t *srbs_setupmod_item=&srbs_setupmod_item_ies->value.choice.SRBs_SetupMod_Item;
/* sRBID */
srbs_setupmod_item->sRBID = resp->srbs_to_be_setup[i].srb_id;
srbs_setupmod_item->lCID = resp->srbs_to_be_setup[i].srb_id;
}
}
/* encode */ /* encode */
if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) { if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
...@@ -1335,9 +1383,10 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) { ...@@ -1335,9 +1383,10 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
return -1; return -1;
} }
//f1ap_itti_send_sctp_data_req(false, instance, buffer, len, 0); f1ap_itti_send_sctp_data_req(false, instance, buffer, len, getCxt(false, instance)->default_sctp_stream_id);
return 0; return 0;
} }
int DU_send_UE_CONTEXT_MODIFICATION_FAILURE(instance_t instance) { int DU_send_UE_CONTEXT_MODIFICATION_FAILURE(instance_t instance) {
AssertFatal(1==0,"Not implemented yet\n"); AssertFatal(1==0,"Not implemented yet\n");
} }
......
...@@ -74,7 +74,7 @@ int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance, ...@@ -74,7 +74,7 @@ int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance,
uint32_t assoc_id, uint32_t assoc_id,
uint32_t stream, uint32_t stream,
F1AP_F1AP_PDU_t *pdu); F1AP_F1AP_PDU_t *pdu);
int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance); int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance, f1ap_ue_context_setup_t *resp);
int DU_send_UE_CONTEXT_MODIFICATION_FAILURE(instance_t instance); int DU_send_UE_CONTEXT_MODIFICATION_FAILURE(instance_t instance);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment