[Task-ID: ODUHIGH-432]Fix to send correct RLC header and PDCP SN for RRC messages... 81/7981/2
authorlal.harshita <Harshita.Lal@radisys.com>
Thu, 24 Mar 2022 12:08:49 +0000 (17:38 +0530)
committerlal.harshita <Harshita.Lal@radisys.com>
Fri, 25 Mar 2022 08:32:07 +0000 (14:02 +0530)
Signed-off-by: lal.harshita <Harshita.Lal@radisys.com>
Change-Id: I1f9d950eee94c1b11caf0b2f192bea65eb490607
Signed-off-by: lal.harshita <Harshita.Lal@radisys.com>
src/5gnrmac/mac_msg_hdl.c
src/du_app/du_f1ap_msg_hdl.c
src/phy_stub/phy_stub.h
src/phy_stub/phy_stub_msg_hdl.c

index e59e9bb..37755d8 100644 (file)
@@ -343,10 +343,11 @@ uint8_t lcId, uint16_t pduLen, uint8_t *pdu)
    ulData->slotInfo.cellId = cellId;
 
    /* Filling pdu info */
-   if(lcId == SRB1_LCID || lcId == SRB2_LCID)
-   {
+   if(lcId != SRB0_LCID)
+      ulData->pduInfo[ulData->numPdu].commCh = false;
+   else
       ulData->pduInfo[ulData->numPdu].commCh = true;
-   }
+
    ulData->pduInfo[ulData->numPdu].lcId = lcId;
    ulData->pduInfo[ulData->numPdu].pduBuf = pdu;
    ulData->pduInfo[ulData->numPdu].pduLen = pduLen;
index 1279b69..b7e8262 100644 (file)
@@ -14296,6 +14296,8 @@ uint8_t BuildAndSendUeContextModRsp(DuUeCb *ueCb)
          ret = RFAILED;
          break;
       }
+
+      ret = ROK;
       break;
    }
    FreeUeContextModResp(f1apMsg);
index ffa77bc..f40c568 100644 (file)
@@ -58,6 +58,8 @@ typedef struct ueCb
    bool     msgSecurityModeComp;
    bool           msgRrcReconfiguration;
    bool           msgRegistrationComp;
+   uint8_t  rlcSnForSrb1;           /* Sequence number of PDU at RLC for AM mode */
+   uint8_t  pdcpSn;                 /* Sequence number of PDU at PDCP */
 }UeCb;
 
 /* Database to store information for all UE */
index 89c58fd..7098e0a 100644 (file)
@@ -423,132 +423,154 @@ uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_
    switch(type)
    {
       case MSG_TYPE_MSG3: 
-        {
-           DU_LOG("\nDEBUG  -->  PHY_STUB: Forming MSG3 PDU ");
-           /* For Initial RRC setup Request,
-              MAC subheader format is R/R/LCId (1byte)
-              LCId is CCCH(0)
-              From 38.321 section 6.1.1
-            */
-           pdu[byteIdx++] = 0;
-           /* Hardcoding MAC PDU */
-           pdu[byteIdx++] = 16;
-           pdu[byteIdx++] = 00;
-           pdu[byteIdx++] = 00;
-           pdu[byteIdx++] = 00;
-           pdu[byteIdx++] = 00;
-           pdu[byteIdx++] = 103;
-
-           break;
-        }
+         {
+            DU_LOG("\nDEBUG  -->  PHY_STUB: Forming MSG3 PDU ");
+            /* For Initial RRC setup Request,
+               MAC subheader format is R/R/LCId (1byte)
+               LCId is CCCH(0)
+               From 38.321 section 6.1.1
+               */
+            pdu[byteIdx++] = 0;
+            /* Hardcoding MAC PDU */
+            pdu[byteIdx++] = 16;
+            pdu[byteIdx++] = 00;
+            pdu[byteIdx++] = 00;
+            pdu[byteIdx++] = 00;
+            pdu[byteIdx++] = 00;
+            pdu[byteIdx++] = 103;
+
+            break;
+         }
       case MSG_TYPE_SHORT_BSR:
-      {
-        DU_LOG("\nDEBUG  -->  PHY_STUB: Forming SHORT BSR PDU ");
-        uint8_t lcgId = 0;
-        uint8_t bufferSizeIdx = 6;
-
-        /* For Short BSR
-           MAC subheader format is R/R/LcId (1Byte)
-           LCId is 61
-           From 38.321 section 6.1.1
-         */
-        pdu[byteIdx++] = 61;    // LCID
-        pdu[byteIdx++] = (lcgId << 5) | bufferSizeIdx;
-
-        break;
-      }
+         {
+            DU_LOG("\nDEBUG  -->  PHY_STUB: Forming SHORT BSR PDU ");
+            uint8_t lcgId = 0;
+            uint8_t bufferSizeIdx = 6;
+
+            /* For Short BSR
+               MAC subheader format is R/R/LcId (1Byte)
+               LCId is 61
+               From 38.321 section 6.1.1
+               */
+            pdu[byteIdx++] = 61;    // LCID
+            pdu[byteIdx++] = (lcgId << 5) | bufferSizeIdx;
+
+            break;
+         }
 
       case MSG_TYPE_MSG5:
       {
-        DU_LOG("\nDEBUG  -->  PHY_STUB: Forming MSG5 PDU");
-        uint8_t  msg5PduLen = 33;
-        /* For RRC setup complete
-           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
-         */
-        uint8_t msg5[] = {1, msg5PduLen, 0, 0, 16, 0, 5, 223, 128, 16, 94, \
-           64, 3, 64, 68, 252, 97, 0, 0, 0, 0, 4, 0, 0, 4, 68, 11, 128, \
-              184, 56, 0, 0, 0, 0, 0};
-
-        msg5PduLen += 2;  /* 2bytes of header */
-        memcpy(pdu, &msg5, msg5PduLen);
-        byteIdx += msg5PduLen; /* 2 bytes of header */
-        break;
+         /* For RRC setup complete
+          *
+          * 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 MSG5 PDU");
+         uint8_t  msg5PduLen = 33; /* Length of MSG5 */
+         msg5PduLen += 2; /* RLC subheader */
+         uint8_t msg5[] = {1, msg5PduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 16, 0, \
+            5, 223, 128, 16, 94, 64, 3, 64, 68, 252, 97, 0, 0, 0, 0, 4, 0, 0, 4, 68, 11, 128, 184, 56, 0, 0, 0, 0, 0};
+
+         msg5PduLen += 2;  /* 2 bytes of MAC header */
+         memcpy(pdu, &msg5, msg5PduLen);
+         byteIdx += msg5PduLen; /* 4 bytes of header : MAC+RLC */
+         break;
       }
 
       case MSG_TYPE_SECURITY_MODE_COMPLETE:
       {
-        DU_LOG("\nDEBUG  -->  PHY_STUB: Forming SECURITY MODE COMPLETE PDU");
-        uint8_t  pduLen = 12;
-        /* For 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
-         */
-        uint8_t msg[] = {1, pduLen, 0, 3, 0x2a, 0x40, 0, 0, 0, 0, 0, 0, 0, 0};
-
-        pduLen += 2;  /* 2bytes of header */
-        memcpy(pdu, &msg, pduLen);
-        byteIdx += pduLen; /* 2 bytes of header */
-        break;
+         /* For 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 SECURITY MODE COMPLETE PDU");
+         uint8_t  pduLen = 12; /* Length of PDU */
+         pduLen += 2; /* RLC subheader */
+         uint8_t msg[] = {1, pduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 0x2a, 0x40, \
+            0, 0, 0, 0, 0, 0, 0, 0};
+
+         pduLen += 2;  /* 2 bytes of MAC header */
+         memcpy(pdu, &msg, pduLen);
+         byteIdx += pduLen; /* 4 bytes of header : MAC+RLC */
+         break;
       }
+
       case MSG_TYPE_REGISTRATION_COMPLETE:
       {
-          
-         DU_LOG("\nDEBUG  -->  PHY_STUB: Forming RRC REGISTRATION COMPLETE PDU");
-         uint8_t  pduLen = 12;
-         /* For rrc reconfig 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
-         */
-         uint8_t msg[] = {1, pduLen, 0, 0x04, 0x3a, 0x81, 0xbf, 0, 0x21, 0x80, 0, \
-         0, 0, 0};
-       
-         pduLen += 2;  /* 2bytes of header */
-         memcpy(pdu, &msg, pduLen);
-         byteIdx += pduLen; /* 2 bytes of header */
-          break;
+         /* For rrc reconfig 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 RRC REGISTRATION COMPLETE PDU");
+         uint8_t  pduLen = 12; /* Length of PDU */
+         pduLen += 2; /* RLC subheader */
+         uint8_t msg[] = {1, pduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 0x3a, 0x81, \
+            0xbf, 0, 0x21, 0x80, 0, 0, 0, 0};
+
+         pduLen += 2;  /* 2 bytes of MAC header */
+         memcpy(pdu, &msg, pduLen);
+         byteIdx += pduLen; /* 4 bytes of header : MAC+RLC */
+         break;
       }
+
       case MSG_TYPE_RRC_RECONFIG_COMPLETE:
       {
+         /* For rrc reconfig 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 RRC RECONFIGURATION COMPLETE PDU");
-         uint8_t  pduLen = 14;
-        /* For rrc reconfig 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
-        */
-        uint8_t msg[] = {1, pduLen, 0, 6, 8, 64, 0, 0, 0, 0, \
-                         0, 0, 0, 0, 0};
-       
-        pduLen += 2;  /* 2bytes of header */
-        memcpy(pdu, &msg, pduLen);
-        byteIdx += pduLen; /* 2 bytes of header */
-        break;
+         uint8_t  pduLen = 13; /* PDU length */
+         pduLen += 2; /* RLC sub header */
+         uint8_t msg[] = {1, pduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 8, 64, 0, 0,\
+            0, 0, 0, 0, 0, 0, 0};
+
+         pduLen += 2;  /* 2bytes of MAC header */
+         memcpy(pdu, &msg, pduLen);
+         byteIdx += pduLen; /* 4 bytes of header : MAC+RLC*/
+         break;
 
       }
-      
+
       default:
-        break;
+      break;
    } /* End of switch(type) */
+
    /* Filling MAC SDU for Padding bytes*/
    if(byteIdx < pduInfo->pdu_length)
    {
       /* For Padding
-        MAC subheader format is R/R/LCId (1byte)
-        LCId is 63 for padding
-        From 38.321 section 6.1.1
-       */
+         MAC subheader format is R/R/LCId (1byte)
+         LCId is 63 for padding
+         From 38.321 section 6.1.1
+         */
       pdu[byteIdx++] = 63;
 
       for(; byteIdx < pduInfo->pdu_length; byteIdx++)
-        pdu[byteIdx] = 0;
+         pdu[byteIdx] = 0;
    }
    msgLen += pduInfo->pdu_length;
 
@@ -1491,10 +1513,27 @@ uint8_t l1SendStatusPdu()
    msgLen = 3;
 
    /* For RLC Status PDU
-      MAC subheader format is R/F/LCId/L (2/3 bytes)
-      LCId is 4 for DRB1
-      L is length of Status PDU i.e 3 bytes
-      From 38.321 section 6.1.1
+    * MAC subheader format is R/F/LCId/L (2/3 bytes)
+    * LCId is 4 for DRB1
+    * L is length of Status PDU i.e 3 bytes
+    * From 38.321 section 6.1.1
+    *
+    * RLC Status PDU format :
+    * ---------------------------------
+    * |D/C|CPT|    ACK_SN             |
+    * ---------------------------------
+    * |            ACK_SN             |
+    * ---------------------------------
+    * |E1 | R | R | R | R | R | R | R |
+    * ---------------------------------
+    *  
+    * Here, D/C bit = 0 for Control PDU
+    * CPT bit = 0 since control pdu type is Status PDU
+    * ACK_SN = 0 as of now, this can be changed based on the 
+    * scenario being tested
+    * E1 = 0 because no NACK_SN, E1, E2 and E3 follows it
+    * R = 0 i.e. reserved bits
+    * From Spec 38.322 section 6.2.2.5
     */
    uint8_t statusPdu[] = {4, msgLen, 0, 0, 0};
    msgLen += 2;  /* 2bytes of header */