Implementation of UE context release complete JIRA ID = ODUHIGH-330
[o-du/l2.git] / src / cu_stub / cu_f1ap_msg_hdl.c
index 8989735..f7db5fb 100644 (file)
 #define SCRAMBLING_ID  NR_PCI
 #define DMRS_ADDITIONAL_POS  0          /* DMRS Additional poistion */
 #define RES_ALLOC_TYPE       1          /* Resource allocation type */
-
 #define FIVE_QI_VALUE 9  /*spec 23.501, Table 5.7.4-1*/
 
 /*******************************************************************
@@ -1769,6 +1768,9 @@ uint8_t setDlRRCMsgType()
       case RRC_RECONFIG:
         rrcMsgType = RRC_RECONFIG;
         break;
+      case UE_CONTEXT_MOD_REQ:
+        rrcMsgType = UE_CONTEXT_MOD_REQ;
+        break;
       default:
         break;
    }
@@ -6552,6 +6554,11 @@ uint8_t procUlRrcMsg(F1AP_PDU_t *f1apMsg)
            BuildAndSendDLRRCMessageTransfer(srbId, rrcMsgType);
         }
       }
+      if(rrcMsgType == UE_CONTEXT_MOD_REQ)
+      {
+         DU_LOG("\nINFO  -->  F1AP: Sending UE Context Modification Request");
+        BuildAndSendUeContextModificationReq();
+      }
    }
    return ret;
 }
@@ -7097,7 +7104,7 @@ void FreeDrbToBeSetupModList(DRBs_ToBeSetupMod_List_t *drbSet)
         {
            if(arrIdx == 0)
            {
-              drbItemIe =drbSet->list.array[arrIdx];
+              drbItemIe = (DRBs_ToBeSetupMod_ItemIEs_t *)drbSet->list.array[arrIdx];
               FreeDrb2Item(&(drbItemIe->value.choice.DRBs_ToBeSetupMod_Item));
            }
            CU_FREE(drbSet->list.array[arrIdx], sizeof(DRBs_ToBeSetupMod_ItemIEs_t));
@@ -7152,7 +7159,7 @@ uint8_t BuildDrbToBeSetupModList(DRBs_ToBeSetupMod_List_t *drbSet)
    }
 
    arrIdx=0;
-   ret = FillDrbItemList(drbSet->list.array[arrIdx]);
+   ret = FillDrbItemList((DRBs_ToBeSetupMod_ItemIEs_t *)drbSet->list.array[arrIdx]);
    if(ret != ROK)
    {
       DU_LOG("\nERROR  -->  F1AP : FillDrbItemList failed");
@@ -7178,10 +7185,8 @@ uint8_t BuildDrbToBeSetupModList(DRBs_ToBeSetupMod_List_t *drbSet)
 * ****************************************************************/
 void FreeUeContextModicationRequest(F1AP_PDU_t *f1apMsg)
 {
-   uint8_t arrIdx =0 , ieId=0, drbIe=0, arrIdx1;
+   uint8_t arrIdx =0 , ieId=0
    UEContextModificationRequest_t *UeContextModifyReq = NULLP;
-   DRBs_ToBeSetupMod_List_t *drbSet;
-   DRBs_ToBeSetupMod_ItemIEs_t *drbItemIe = NULLP;
 
    if(f1apMsg)
    {
@@ -7422,88 +7427,103 @@ void F1APMsgHdlr(Buffer *mBuf)
    switch(f1apMsg->present)
    {
       case F1AP_PDU_PR_initiatingMessage:
-        {
-           switch(f1apMsg->choice.initiatingMessage->value.present)
-           {
-              case InitiatingMessage__value_PR_Reset:
-                 {
-                    DU_LOG("\nINFO  -->  F1AP : F1 reset request received ");
-                    BuildAndSendF1ResetAck();
-                    break;
-                 }
-
-              case InitiatingMessage__value_PR_F1SetupRequest:
-                 {
-                    DU_LOG("\nINFO  -->  F1AP : F1 setup request received");
-                    BuildAndSendF1SetupRsp();
-                    break;
-                 }
-
-              case InitiatingMessage__value_PR_GNBDUConfigurationUpdate:
-                 {
-                    DU_LOG("\nINFO  -->  F1AP : GNB-DU config update received");
-                    BuildAndSendDUUpdateAck();
-                    DU_LOG("\nINFO  -->  F1AP : Sending F1 reset request");
-                    BuildAndSendF1ResetReq();
-                    break;
-                 }
-              case InitiatingMessage__value_PR_InitialULRRCMessageTransfer:
-                 {
-                    DU_LOG("\nINFO  -->  F1AP : Received InitialULRRCMessageTransfer");
-                    procInitULRRCMsg(f1apMsg);
-                    break;
-                 }
-              case InitiatingMessage__value_PR_ULRRCMessageTransfer:
-                 {
-                    DU_LOG("\nINFO  -->  F1AP : Received ULRRCMessageTransfer");
-                    procUlRrcMsg(f1apMsg);
-                    break;
-                 }
-
-              case InitiatingMessage__value_PR_RRCDeliveryReport:
-                 {
-                    DU_LOG("\nINFO  -->  F1AP : Received RRC delivery report");
-                    break;
-                 }
-              default:
-                 {
-                    DU_LOG("\nERROR  -->  F1AP : Invalid type of intiating message [%d]",\
-                    f1apMsg->choice.initiatingMessage->value.present);
-                    return;
-                 }
-           }/* End of switch(initiatingMessage) */
-           break;
-        }
+         {
+            switch(f1apMsg->choice.initiatingMessage->value.present)
+            {
+               case InitiatingMessage__value_PR_Reset:
+                  {
+                     DU_LOG("\nINFO  -->  F1AP : F1 reset request received ");
+                     BuildAndSendF1ResetAck();
+                     break;
+                  }
+
+               case InitiatingMessage__value_PR_F1SetupRequest:
+                  {
+                     DU_LOG("\nINFO  -->  F1AP : F1 setup request received");
+                     BuildAndSendF1SetupRsp();
+                     break;
+                  }
+
+               case InitiatingMessage__value_PR_GNBDUConfigurationUpdate:
+                  {
+                     DU_LOG("\nINFO  -->  F1AP : GNB-DU config update received");
+                     BuildAndSendDUUpdateAck();
+                     DU_LOG("\nINFO  -->  F1AP : Sending F1 reset request");
+                     BuildAndSendF1ResetReq();
+                     break;
+                  }
+               case InitiatingMessage__value_PR_InitialULRRCMessageTransfer:
+                  {
+                     DU_LOG("\nINFO  -->  F1AP : Received InitialULRRCMessageTransfer");
+                     procInitULRRCMsg(f1apMsg);
+                     break;
+                  }
+               case InitiatingMessage__value_PR_ULRRCMessageTransfer:
+                  {
+                     DU_LOG("\nINFO  -->  F1AP : Received ULRRCMessageTransfer");
+                     procUlRrcMsg(f1apMsg);
+                     break;
+                  }
+
+               case InitiatingMessage__value_PR_RRCDeliveryReport:
+                  {
+                     DU_LOG("\nINFO  -->  F1AP : Received RRC delivery report");
+                     break;
+                  }
+               case InitiatingMessage__value_PR_UEContextReleaseRequest:
+                  {
+                     DU_LOG("\nINFO  -->  F1AP : Received UE Context Release Request");
+                     break;
+                  }
+               default:
+                  {
+                     DU_LOG("\nERROR  -->  F1AP : Invalid type of intiating message [%d]",\
+                           f1apMsg->choice.initiatingMessage->value.present);
+                     return;
+                  }
+            }/* End of switch(initiatingMessage) */
+            break;
+         }
 
       case F1AP_PDU_PR_successfulOutcome:
-        {
-           switch(f1apMsg->choice.successfulOutcome->value.present)
-           {
-              case SuccessfulOutcome__value_PR_ResetAcknowledge:
-                 {
-                    DU_LOG("\nINFO  -->  F1Reset Acknowledgement is received successfully ");
-                    break;
-                 }
-              case SuccessfulOutcome__value_PR_UEContextSetupResponse:
-                 {
-                    DU_LOG("\nINFO  -->  F1AP : UE ContextSetupResponse received");
-                    f1apMsgDb.dlRrcMsgCount++; /* keeping DL RRC Msg Count */
-                    break;
-                 }
-              default:
-                 {
-                    DU_LOG("\nERROR  -->  F1AP : Invalid type of successful outcome message [%d]",\
-                          f1apMsg->choice.successfulOutcome->value.present);
-                    return;
-                 }
-           }/* End of switch(successfulOutcome) */
-           break;
-        } 
+         {
+            switch(f1apMsg->choice.successfulOutcome->value.present)
+            {
+               case SuccessfulOutcome__value_PR_ResetAcknowledge:
+                  {
+                     DU_LOG("\nINFO  -->  F1Reset Acknowledgement is received successfully ");
+                     break;
+                  }
+               case SuccessfulOutcome__value_PR_UEContextSetupResponse:
+                  {
+                     DU_LOG("\nINFO  -->  F1AP : UE ContextSetupResponse received");
+                     f1apMsgDb.dlRrcMsgCount++; /* keeping DL RRC Msg Count */
+                     break;
+                  }
+               case SuccessfulOutcome__value_PR_UEContextModificationResponse:
+                  {
+                     DU_LOG("\nINFO  -->  F1AP : UE Context Modification Response received");
+                     break;
+                  }
+               case SuccessfulOutcome__value_PR_UEContextReleaseComplete:
+                  {
+                      DU_LOG("\nINFO  -->  F1AP : UE Context release complete received");
+                      break;
+                  }
+               default:
+                  {
+                     DU_LOG("\nERROR  -->  F1AP : Invalid type of successful outcome message [%d]",\
+                           f1apMsg->choice.successfulOutcome->value.present);
+                     return;
+                  }
+            }/* End of switch(successfulOutcome) */
+            break;
+         } 
       default:
-        {
-           DU_LOG("\nERROR  -->  F1AP : Invalid type of f1apMsg->present [%d]",f1apMsg->present);
-           return;
-        }
+         {
+            DU_LOG("\nERROR  -->  F1AP : Invalid type of f1apMsg->present [%d]",f1apMsg->present);
+            return;
+         }
    }/* End of switch(f1apMsg->present) */
 
 } /* End of F1APMsgHdlr */