Merge "[JIRA ID- ODUHIGH-462] [ISSUE ID ODUHIGH-477] Adding support for drx configura...
authorHarshita Lal <harshita.lal@radisys.com>
Tue, 11 Oct 2022 06:47:30 +0000 (06:47 +0000)
committerGerrit Code Review <gerrit@o-ran-sc.org>
Tue, 11 Oct 2022 06:47:30 +0000 (06:47 +0000)
docs/README
docs/installation-guide.rst
docs/user-guide.rst
src/5gnrmac/lwr_mac_fsm.c
src/5gnrsch/sch_common.c
src/cu_stub/cu_f1ap_msg_hdl.c
src/cu_stub/cu_f1ap_msg_hdl.h
src/phy_stub/phy_stub.h
src/phy_stub/phy_stub_msg_hdl.c

index 8b5056d..e64a093 100644 (file)
@@ -55,12 +55,18 @@ C. Pre-requisite for O1 Interface (Required only if run with O1 interface enable
    d. Open the oamVesConfig.json and edit the details of OAM VES collector.
    e. Open the smoVesConfig.json and edit the details of SMO VES collector.
    f. Open the netconfConfig.json and edit the details of Netopeer server.
-   g. Install the yang modules and load initial configuration
+   
+3. Install the yang modules and load initial configuration:
 
    $cd l2/build/scripts
    $sudo ./load_yang.sh
 
-   h. To enable Standard Defined VES format:
+4. Start Netopeer2-server:
+
+   $cd l2/build/scripts
+   $sudo ./netopeer-server.sh start
+
+5. In case standard defined VES format is to be enabled (this step is optional): 
       
       cd l2/src/o1/ves
       
@@ -68,10 +74,6 @@ C. Pre-requisite for O1 Interface (Required only if run with O1 interface enable
       
       #define StdDef
 
-3. Start Netopeer2-server:
-   $cd l2/build/scripts
-   $sudo ./netopeer-server.sh start
-
 
 D. How to Clean and Build:
 --------------------------
@@ -178,7 +180,7 @@ PS: If O1 interface is enabled, IP should match those configured in step C.2.a.
        ./odu
 
 PS: CU stub and RIC stub must be run (in no particular sequence) before ODU
-
+    In case O1 is enabled and SMO is not available run section H to start the stack.
 
 G. How to test with Intel L1:
 -----------------------------
@@ -250,27 +252,40 @@ II. Execution
                ./odu
 
 
-H. How to execute the Health Check : get alarm-list
-----------------------------------------------------
-   
-   Steps:
+H. Push cell and slice configuration over O1 using netopeer-cli
+---------------------------------------------------------------
+   When O-DU High is run with O1 enabled it waits for initial cell configuration to be pushed by SMO before starting the stack. In case the SMO is not available then these configurations can be pushed via netopeer-cli as follows:
 
-   1. Start Netconf netopeer client 
-   
-   2. Connect to the server with 
+      $cd l2/build/config
+      $netopeer2-cli
+       > connect --login netconf
+       Interactive SSH Authentication
+       Type your password:
+       Password: netconf!
+       > edit-config --target candidate --config=cellConfig.xml
+       > OK
+       > commit
+       > OK
+       > edit-config --target candidate --config=rrmPolicy.xml
+       > OK
+       > commit
+       > OK
+
+   For pushing these configurations in subsequent runs please edit cellConfig.xml and rrmPolicy.xml and increment number in the <id> tag to a new value e.g.
 
-        user: netconf
-        pwd:  netconf!
+    <id>rrm-2</id 
 
-   3. Send a Netconf get request for alarms xpath
 
-   Here are the steps as executed in the terminal 
+I. How to execute the Health Check using netopeer-cli : get alarm-list
+-----------------------------------------------------------------------
+    
+   In case the SMO is not available the alarm list can be checked using netopeer-cli as follows:
 
       $netopeer2-cli
        > connect --login netconf
        Interactive SSH Authentication
        Type your password:
-       Password:
+       Password: netconf!
        > get --filter-xpath /o-ran-sc-odu-alarm-v1:odu/alarms
        DATA
        <odu xmlns="urn:o-ran:odu:alarm:1.0">
@@ -287,15 +302,6 @@ H. How to execute the Health Check : get alarm-list
 
    The XML output is a list of active alarms in the O-DU High system.
 
-I. Push cell and slice configuration over O1 using netopeer-cli
----------------------------------------------------------------
-   When O-DU High is run with O1 enabled it waits for cell configuration to be pushed by SMO. In case the SMO is not available then these configurations can be pushed via netopeer-cli as follows.
-   1. Follow step H.1 and H.2.
-   2. update cellConfig.xml and rrmPolicy.xml.
-      $cd l2/build/config
-      $edit-config --target candidate --config=cellConfig.xml
-      $edit-config --target candidate --config=rrmPolicy.xml
-
 
 J. Troubleshooting Netconf server issues
 ----------------------------------------
@@ -303,4 +309,4 @@ J. Troubleshooting Netconf server issues
 
    $cd l2/build/scripts
    $sudo ./troubleshoot_netconf.sh cleanup
-   execute section C.2.f, C.3 again
+   execute section C.3 and C.4 again
index aced1ed..3a74891 100644 (file)
@@ -150,26 +150,26 @@ Setting up Netconf server (Only if O1 interface enabled)
       | Open the oamVesConfig.json and edit the details of OAM VES collector.
       | Open the smoVesConfig.json and edit the details of SMO VES collector.
       | Open the netconfConfig.json and edit the details of Netopeer server.
-      | Install the yang modules and load initial configuration.
+
+- Install the yang modules and load initial configuration.
 
       - Ubuntu :
       
       | $cd <O-DU High Directory>/l2/build/scripts
       | $sudo ./load_yang.sh
 
-    - To enable Standard Defined VES format:      
-      
-      | cd l2/src/o1/ves
-            
-      | Enable the Macro "StdDef" in file VesUtils.h      
-      | #define StdDef
-
 - Start Netopeer2-server:
 
    - Ubuntu :
        | cd <O-DU High Directory>/l2/build/scripts
        | sudo ./netopeer-server.sh start
 
+- In case standard defined VES format is to be enabled (this step is optional): 
+      
+      | cd l2/src/o1/ves
+            
+      | Enable the Macro "StdDef" in file VesUtils.h      
+      | #define StdDef
 
 Compilation
 ===========
index 18dac0e..b24fb63 100644 (file)
@@ -57,8 +57,8 @@ PS: If O1 interface is enabled, IPs should match those configured in "startup_co
 
       - ./odu
 
-PS: CU stub and RIC stub must be run (in no particular sequence) before ODU. 
-    In case O1 is enabled and SMO is not available follow section E below.
+PS: CU stub and RIC stub must be run (in no particular sequence) before ODU.
+    In case O1 is enabled and SMO is not available run section D to start the stack.
 
 II. Execution - Using Docker Images
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -66,17 +66,17 @@ II. Execution - Using Docker Images
 The call flow between O-DU High and CU Stub can be achieved by executing docker containers.
 
 - Pull the last built docker images:
-    -  docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:6.0.4
-    -  docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:6.0.4
+    -  docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:6.0.3
+    -  docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:6.0.3
 
 - Run CU Stub docker:
     - docker run -it --privileged --net=host --entrypoint bash
-      nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:6.0.4
+      nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:6.0.3
     - ./cu_stub
 
 - Run ODU docker:
     - docker run -it --privileged --net=host --entrypoint bash
-      nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:6.0.4
+      nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:6.0.3
     - ./odu
 
 
@@ -205,28 +205,39 @@ Note: UL IQ-Sample request and response are needed by Intel O-DU Low in timer mo
 these are guarded under INTEL_TIMER_MODE flag which can be enabled using compilation option "PHY_MODE=TIMER", as
 mentioned in section B.I.1.d .
 
+D. Push cell and slice configuration over O1 using netopeer-cli
+---------------------------------------------------------------
+   When O-DU High is run with O1 enabled it waits for initial cell configuration to be pushed by SMO before starting the stack. In case the SMO is not available then these configurations can be pushed via netopeer-cli as follows:
 
-D. Health Check execution: get alarm-list
--------------------------------------------
-
-To execute the get alarm-list flow, following steps are required to be executed:
+      | $cd l2/build/config
+      | $netopeer2-cli
+      |  > connect --login netconf
+      |  Interactive SSH Authentication
+      |  Type your password:
+      |  Password: netconf!
+      |  > edit-config --target candidate --config=cellConfig.xml
+      |  > OK
+      |  > commit
+      |  > OK
+      |  > edit-config --target candidate --config=rrmPolicy.xml
+      |  > OK
+      |  > commit
+      |  > OK
 
-   1.  Start Netconf netopeer client 
-   
-   2. Connect to the server with 
+   For pushing these configurations in subsequent runs please edit cellConfig.xml and rrmPolicy.xml and increment number in the <id> tag to a new value e.g.
 
-      | user: netconf
-      | pwd:  netconf!
+    <id>rrm-2</id
 
-   3. Send a Netconf get request for alarms xpath
+E. How to execute the Health Check using netopeer-cli : get alarm-list
+-----------------------------------------------------------------------
 
-Here are the steps as executed in the terminal 
+   In case the SMO is not available the alarm list can be checked using netopeer-cli as follows:
 
      |  netopeer2-cli
      |  > connect --login netconf
      |  Interactive SSH Authentication
      |  Type your password:
-     |  Password:
+     |  Password: netconf!
      |  > get --filter-xpath /o-ran-sc-odu-alarm-v1\:odu/alarms
      |  DATA
      |  <odu xmlns=\"urn\:o-ran\:odu\:alarm\:1.0\">
@@ -243,14 +254,3 @@ Here are the steps as executed in the terminal
 
 The XML output is a list of active alarms in the O-DU High system.
 
-E. Push cell and slice configuration over O1 using netopeer-cli
----------------------------------------------------------------
-
-When O-DU High is run with O1 enabled it waits for cell configuration to be pushed by SMO. In case the SMO is not available then these configurations can be pushed via netopeer-cli as follows.
-
-   1. Follow step D.1 and D.2.
-   2. update cellConfig.xml and rrmPolicy.xml.
-
-      | $cd <O-DU High Directory>/l2/build/config
-      | $edit-config --target candidate --config=cellConfig.xml
-      | $edit-config --target candidate --config=rrmPolicy.xml
index e3d256f..63a86c5 100644 (file)
@@ -2001,7 +2001,7 @@ uint8_t lwr_mac_procConfigReqEvt(void *msg)
    uint8_t slotIdx = 0; 
    uint8_t symbolIdx =0;
 #endif   
-   uint8_t index = 0;
+   uint16_t index = 0;
    uint16_t *cellId =NULLP;
    uint16_t cellIdx =0;
    uint32_t msgLen = 0;
@@ -2062,7 +2062,11 @@ uint8_t lwr_mac_procConfigReqEvt(void *msg)
    configReq = (fapi_config_req_t *)(cfgReqQElem + 1);
    memset(configReq, 0, sizeof(fapi_config_req_t));
    fillMsgHeader(&configReq->header, FAPI_CONFIG_REQUEST, sizeof(fapi_config_req_t));
+#ifdef NR_TDD
+   configReq->number_of_tlvs = 25 + 1 + MAX_TDD_PERIODICITY_SLOTS * MAX_SYMB_PER_SLOT;
+#else
    configReq->number_of_tlvs = 25;
+#endif
    msgLen = sizeof(configReq->number_of_tlvs);
 
    if(macCfgParams.dlCarrCfg.pres)
index a16cda5..bc5ca0f 100644 (file)
@@ -1972,7 +1972,8 @@ uint8_t schCalculateUlTbs(SchUeCb *ueCb, SlotTimingInfo puschTime, uint8_t symbL
  *******************************************************************/
 bool schProcessSrOrBsrReq(SchCellCb *cell, SlotTimingInfo currTime, uint8_t ueId, bool isRetx, SchUlHqProcCb **hqP)
 {
-   bool k2Found = FALSE, ret = RFAILED;
+   bool k2Found = FALSE;
+   uint8_t ret = RFAILED;
    uint8_t startSymb = 0, symbLen = 0;
    uint8_t k2TblIdx = 0, k2Index = 0, k2Val = 0;
    uint16_t startPrb = 0;
@@ -2047,7 +2048,7 @@ bool schProcessSrOrBsrReq(SchCellCb *cell, SlotTimingInfo currTime, uint8_t ueId
          break;
       }
    }
-
+   
    if(k2Found == true)
    {
       ret = schCalculateUlTbs(ueCb, puschTime, symbLen, &startPrb, &totDataReq, isRetx, *hqP);
@@ -2097,7 +2098,12 @@ bool schProcessSrOrBsrReq(SchCellCb *cell, SlotTimingInfo currTime, uint8_t ueId
          updateBsrAndLcList(&((*hqP)->ulLcPrbEst.defLcList), ueCb->bsrInfo, RFAILED);
       }
    }
-   return (ret);
+   else
+   {
+      DU_LOG("\nERROR  -->  SCH : schProcessSrOrBsrReq(): K2 value is not found");
+      return false;     
+   }
+   return true;
 }
 
 
index 3b8ac6e..f292045 100644 (file)
@@ -1514,8 +1514,27 @@ uint8_t  BuildDLRRCContainer(CuUeCb *ueCb, uint8_t rrcMsgType, RRCContainer_t *rr
    }
    else if(rrcMsgType == RRC_SETUP_COMPLETE)
    {
-      DU_LOG("\nINFO --> F1AP : Sending Security mode command");
-      char secModeBuf[9]={0x00, 0x02, 0x22, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00};
+      DU_LOG("\nINFO --> F1AP : Sending NAS Security mode command");
+      char secModeBuf[30]={0x00, 0x02, 0x2e, 0x82, 0xaf, 0xc0, 0x7d, 0x1c, 0x4e, 0xfc, 0x80, 0x0f, 0xc0, 
+                          0x0b, 0xa0, 0x20, 0x40, 0x9e, 0x0e, 0x1e, 0x0e, 0x1c, 0x26, 0xc0, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00};
+      bufLen =30;
+      rrcContainer->size = bufLen;
+      CU_ALLOC(rrcContainer->buf, rrcContainer->size);
+      if(rrcContainer->buf != NULLP)
+      {     
+         memset(rrcContainer->buf, 0, bufLen);
+         memcpy(rrcContainer->buf, secModeBuf, bufLen);
+      }
+      else
+      {     
+         DU_LOG("\nERROR  -->  F1AP : Memory allocation failure for RRC Container buffer");
+         ret = RFAILED;
+      }     
+   }
+   else if(rrcMsgType == NAS_SECURITY_MODE_COMPLETE)
+   {
+      DU_LOG("\nINFO --> F1AP : Sending RRC Security mode command");
+      char secModeBuf[9]={0x00, 0x03, 0x22, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00};
       bufLen =9;
       rrcContainer->size = bufLen;
       CU_ALLOC(rrcContainer->buf, rrcContainer->size);
@@ -1530,11 +1549,11 @@ uint8_t BuildDLRRCContainer(CuUeCb *ueCb, uint8_t rrcMsgType, RRCContainer_t *rr
          ret = RFAILED;
       }
    }
-   else if(rrcMsgType == SECURITY_MODE_COMPLETE)
+   else if(rrcMsgType == RRC_SECURITY_MODE_COMPLETE)
    {
       /*Hardcoded RRC Container from reference logs*/
       DU_LOG("\nINFO --> F1AP : Sending Registration accept");
-      char buf[14] ={0x00, 0x03, 0x2a, 0x80, 0xaf, 0xc0, 0x08, 0x40, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00};
+      char buf[14] ={0x00, 0x04, 0x2a, 0x80, 0xaf, 0xc0, 0x08, 0x40, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00};
       bufLen =14;
       rrcContainer->size = bufLen;
       CU_ALLOC(rrcContainer->buf, rrcContainer->size);
@@ -1768,8 +1787,11 @@ uint8_t setDlRRCMsgType(CuUeCb *ueCb)
       case RRC_SETUP_COMPLETE:
          rrcMsgType = RRC_SETUP_COMPLETE;
          break;
-      case SECURITY_MODE_COMPLETE:
-         rrcMsgType = SECURITY_MODE_COMPLETE;
+      case NAS_SECURITY_MODE_COMPLETE:
+         rrcMsgType = NAS_SECURITY_MODE_COMPLETE;
+         break;
+      case RRC_SECURITY_MODE_COMPLETE:
+         rrcMsgType = RRC_SECURITY_MODE_COMPLETE;
          break;
       case REGISTRATION_COMPLETE:
          rrcMsgType = REGISTRATION_COMPLETE;
@@ -9772,10 +9794,15 @@ uint8_t procUlRrcMsg(uint32_t duId, F1AP_PDU_t *f1apMsg)
       rrcMsgType = setDlRRCMsgType(ueCb);
       if(rrcMsgType == RRC_SETUP_COMPLETE)
       {
-         DU_LOG("\nINFO  -->  F1AP: Sending DL RRC MSG for Security Mode Command"); 
+         DU_LOG("\nINFO  -->  F1AP: Sending DL RRC MSG for NAS Security Mode Command");
+         ret = BuildAndSendDLRRCMessageTransfer(duId, ueCb, srbId, rrcMsgType);
+      }
+      if(rrcMsgType == NAS_SECURITY_MODE_COMPLETE)
+      {
+         DU_LOG("\nINFO  -->  F1AP: Sending DL RRC MSG for RRC Security Mode Command"); 
          ret = BuildAndSendDLRRCMessageTransfer(duId, ueCb, srbId, rrcMsgType);
       }
-      else if(rrcMsgType == SECURITY_MODE_COMPLETE)
+      else if(rrcMsgType == RRC_SECURITY_MODE_COMPLETE)
       {
          DU_LOG("\nINFO  -->  F1AP: Sending DL RRC MSG for RRC Registration Accept");
          BuildAndSendDLRRCMessageTransfer(duId, ueCb, srbId, rrcMsgType);
index 100b6ed..1de45b9 100644 (file)
@@ -151,7 +151,8 @@ typedef enum
 {
    RRC_SETUP=1,
    RRC_SETUP_COMPLETE,
-   SECURITY_MODE_COMPLETE,
+   NAS_SECURITY_MODE_COMPLETE,
+   RRC_SECURITY_MODE_COMPLETE,
    REGISTRATION_COMPLETE,
    UE_CONTEXT_SETUP_RSP,
    RRC_RECONFIG_COMPLETE,
index 48097cf..ecc4b2b 100644 (file)
@@ -70,7 +70,8 @@ typedef struct ueCb
    bool     msg5ShortBsrSent;
    bool     msg5Sent;
    bool     dlDedMsg;
-   bool     msgSecurityModeComp;
+   bool     msgNasSecurityModeComp;
+   bool     msgRrcSecurityModeComp;
    bool     msgRrcReconfigComp;
    bool     msgRegistrationComp;
    uint8_t  rlcSnForSrb1;           /* Sequence number of PDU at RLC for AM mode */
@@ -105,7 +106,8 @@ typedef enum
    MSG_TYPE_MSG3,
    MSG_TYPE_SHORT_BSR,
    MSG_TYPE_MSG5,
-   MSG_TYPE_SECURITY_MODE_COMPLETE,
+   MSG_TYPE_NAS_SECURITY_MODE_COMPLETE,
+   MSG_TYPE_RRC_SECURITY_MODE_COMPLETE,
    MSG_TYPE_REGISTRATION_COMPLETE,
    MSG_TYPE_RRC_RECONFIG_COMPLETE
 }MsgType;
index 1b1694d..269d444 100644 (file)
@@ -419,10 +419,15 @@ uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_
          phyDb.ueDb.ueCb[ueId-1].msg5Sent = true;
          type = MSG_TYPE_MSG5;
       }
-      else if(!phyDb.ueDb.ueCb[ueId-1].msgSecurityModeComp)
+      else if(!phyDb.ueDb.ueCb[ueId-1].msgNasSecurityModeComp)
       {
-         phyDb.ueDb.ueCb[ueId-1].msgSecurityModeComp = true;
-         type = MSG_TYPE_SECURITY_MODE_COMPLETE;
+         phyDb.ueDb.ueCb[ueId-1].msgNasSecurityModeComp = true;
+         type = MSG_TYPE_NAS_SECURITY_MODE_COMPLETE;
+      }
+      else if(!phyDb.ueDb.ueCb[ueId-1].msgRrcSecurityModeComp)
+      {
+         phyDb.ueDb.ueCb[ueId-1].msgRrcSecurityModeComp = true;
+         type = MSG_TYPE_RRC_SECURITY_MODE_COMPLETE;
       }
       else if(!phyDb.ueDb.ueCb[ueId-1].msgRegistrationComp)
       {
@@ -533,8 +538,35 @@ uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_
          byteIdx += msg5PduLen; /* 4 bytes of header : MAC+RLC */
          break;
       }
+      
+      case MSG_TYPE_NAS_SECURITY_MODE_COMPLETE:
+      {
+        /* For NAS security mode complete where RRC Container is dummy
+          *
+          * MAC subheader format is R/F/LCId/L (2/3 bytes)
+          * LCId is 1 for SRB1
+          * L is length of PDU i.e 6bytes here 
+          * From 38.321 section 6.1.1
+          *
+          * RLC subheader for AM PDU is D/C/P/SI/SN (2 bytes for 12-bit SN)
+          * From 38.322, section 6.2.2.4
+          */
+         DU_LOG("\nDEBUG  -->  PHY_STUB: Forming NAS SECURITY MODE COMPLETE PDU");
+         uint8_t  pduLen = 93; /* Length of PDU */
+         pduLen += 2; /* RLC subheader */
+         uint8_t msg[] = {1, pduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 0x3a, 0x2a, 0x3f, 
+                          0x02, 0x75, 0xa0, 0xa0, 0xc0, 0x80, 0x3f, 0x00, 0x2f, 0x3b, 0x80, 0x04, 0x9a, 0xa2, 0x81, 0x09, 0x80, 0xc0, 
+                          0x28, 0x04, 0xf8, 0xb8, 0x80, 0x1d, 0xbf, 0x00, 0x20, 0x8c, 0x80, 0x05, 0xf9, 0x00, 0x78, 0x88, 0x7a, 0x88, 
+                          0xd9, 0x00, 0x00, 0x00, 0x03, 0x08, 0x00, 0x81, 0x97, 0x02, 0x78, 0x38, 0x78, 0x38, 0x17, 0x82, 0x82, 0x00, 
+                          0x80, 0x00, 0x00, 0xa9, 0x00, 0x78, 0x88, 0x00, 0x00, 0x00, 0x8b, 0x83, 0xf8, 0x38, 0x60, 0x20, 0x0c, 0xc0, 
+                          0x50, 0x0c, 0x00, 0x80, 0x3a, 0x00, 0x00, 0x48, 0x29, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00};
 
-      case MSG_TYPE_SECURITY_MODE_COMPLETE:
+         pduLen += 2;  /* 2 bytes of MAC header */
+         memcpy(pdu, &msg, pduLen);
+         byteIdx += pduLen; /* 4 bytes of header : MAC+RLC */
+break;
+      }
+      case MSG_TYPE_RRC_SECURITY_MODE_COMPLETE:
       {
          /* For security mode complete where RRC Container is dummy
           *
@@ -546,7 +578,7 @@ uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_
           * RLC subheader for AM PDU is D/C/P/SI/SN (2 bytes for 12-bit SN)
           * From 38.322, section 6.2.2.4
           */
-         DU_LOG("\nDEBUG  -->  PHY_STUB: Forming SECURITY MODE COMPLETE PDU");
+         DU_LOG("\nDEBUG  -->  PHY_STUB: Forming RRC SECURITY MODE COMPLETE PDU");
          uint8_t  pduLen = 12; /* Length of PDU */
          pduLen += 2; /* RLC subheader */
          uint8_t msg[] = {1, pduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 0x2a, 0x40, \