[Epic-Id: ODUHIGH-576][Task-Id: ODUHIGH-600][SubTask-Id: ODUHIGH-602]|[NFAPI_Branch... 31/12931/5
authorpborla <pborla@radisys.com>
Tue, 28 May 2024 05:04:37 +0000 (10:34 +0530)
committerpborla <pborla@radisys.com>
Wed, 29 May 2024 11:43:36 +0000 (17:13 +0530)
Change-Id: I2f3e919f42c5ad6c056c99472ff69272d4854135
Signed-off-by: pborla <pborla@radisys.com>
src/5gnrmac/lwr_mac_ex_ms.c
src/5gnrmac/nfapi_common.c
src/5gnrmac/nfapi_common.h
src/5gnrmac/nfapi_udp_p7.c
src/pnf_stub/pnf_stub.c
src/pnf_stub/pnf_stub.h
src/pnf_stub/pnf_stub_p5_msg_hdl.c
src/pnf_stub/pnf_stub_sctp.h

index 41077f5..bdea2ee 100644 (file)
@@ -20,6 +20,7 @@
 \r
 #include "common_def.h"\r
 #include "mac_utils.h"\r
+#include "lwr_mac.h"\r
 #include "lwr_mac_fsm.h"\r
 #include "lwr_mac_phy.h"\r
 #ifdef INTEL_FAPI\r
@@ -162,6 +163,75 @@ void callFlowlwrMacActvTsk(Pst *pst)
 }\r
 #endif\r
 \r
+#ifdef NFAPI_ENABLED\r
+/**************************************************************************\r
+* @brief process param response received from PNF_STUB, fill p7TransInfo \r
+* parameter and send the param reponse to lwr mac for furthur processing\r
+*\r
+* @details\r
+*\r
+*     Function : sendParamRspToLowerMacFsm \r
+*\r
+*     Functionality:\r
+*           process param response received from PNF_STUB, fill p7TransInfo\r
+*     parameter and send the param reponse to lwr mac for furthur processing\r
+*\r
+* @param[in]  Param response buffer\r
+* @return ROK     - success\r
+*         RFAILED - failure\r
+***************************************************************************/\r
+\r
+uint8_t sendParamRspToLowerMacFsm(Buffer *mBuf)\r
+{\r
+   uint8_t pnfAdd[4];\r
+   uint8_t errorCode = 1,idx=0,numtlv=0;\r
+   uint16_t port=0, tag =0, len=0;\r
+   CmInetIpAddr vnfIp;\r
+   char newIp[INET_ADDRSTRLEN];\r
+   memset(newIp, 0, INET_ADDRSTRLEN);\r
+   \r
+   DU_LOG("\nINFO  -->  LWR MAC: Extracting information from param resp message");\r
+   //Upacking error code and number of tlv as per : 5G nFAPI Specification,\r
+   //section 3.2.2 PARAM.response, Table 3-14\r
+   CMCHKPK(oduUnpackUInt8, &(errorCode), mBuf);\r
+   if(errorCode != 0)\r
+   {\r
+      DU_LOG("\nERROR  -->  LWR MAC: Param rsp errorCode is %d", errorCode);\r
+      return RFAILED;\r
+   }\r
+\r
+   CMCHKPK(oduUnpackUInt8, &(numtlv), mBuf);\r
+   \r
+   //unpacking P7 PNF Address Ipv4 tlv mentioned in table 3-15\r
+   CMCHKPK(oduUnpackUInt16, &(tag), mBuf);\r
+   CMCHKPK(oduUnpackUInt16, &(len), mBuf);\r
+   for(idx=0; idx<4; idx++)\r
+   {\r
+      CMCHKPK(oduUnpackUInt8, &(pnfAdd[idx]), mBuf);\r
+   }\r
+   \r
+   //unpacking P7 PNF Port tlv mentioned in table 3-15\r
+   CMCHKPK(oduUnpackUInt16, &(tag), mBuf);\r
+   CMCHKPK(oduUnpackUInt16, &(len), mBuf);\r
+   CMCHKPK(oduUnpackUInt16, &(port), mBuf);\r
+   if (inet_ntop(AF_INET, pnfAdd, newIp, INET_ADDRSTRLEN) == NULL) \r
+   {\r
+      DU_LOG("\nERROR  -->  LWR MAC: failed to convert the pnf ip");\r
+      return RFAILED;\r
+   }\r
+   cmInetAddr((S8*)newIp, &vnfIp);\r
+\r
+   //storing the information in vnf db\r
+   vnfDb.p7TransInfo.destIpv4Address = vnfIp;\r
+   vnfDb.p7TransInfo.destIpv4Port = port;\r
+   vnfDb.p7TransInfo.destIpNetAddr.address = CM_INET_NTOH_UINT32(vnfDb.p7TransInfo.destIpv4Address);\r
+   vnfDb.p7TransInfo.destIpNetAddr.port = vnfDb.p7TransInfo.destIpv4Port;\r
+   DU_LOG("\nINFO  -->  LWR MAC: Sending param response message body buffer to lower mac");\r
+   //sendEventToLowerMacFsm(PARAM_RESPONSE, 0, mBuf); TODO \r
+   return ROK;\r
+}\r
+#endif\r
+\r
 /**************************************************************************\r
  * @brief Task Activation callback function. \r
  *\r
@@ -264,25 +334,48 @@ uint8_t lwrMacActvTsk(Pst *pst, Buffer *mBuf)
                {\r
                    nFapi_p5_hdr     p5Hdr;\r
                    nFapi_msg_header msgHdr;\r
-                   NfapiPnfEvent msgType = 0;\r
-\r
+                   EventState phyEvent;\r
+                   NfapiPnfEvent nfapiPnfEvent;\r
+            \r
                    nFapiExtractP5Hdr(&p5Hdr, mBuf);\r
                    nFapiExtractMsgHdr(&msgHdr, mBuf);\r
                    \r
                    if(msgHdr.sRU_termination_type != NFAPI_P5_P7_SRU_TYPE)\r
                    {\r
+                      ODU_PUT_MSG_BUF(mBuf);\r
                       DU_LOG("\nERROR  --> NFAPI_VNF: Incorrect SRU Termination Type:%d",\\r
-                               msgHdr.sRU_termination_type);\r
+                            msgHdr.sRU_termination_type);\r
                       return RFAILED;\r
                    }\r
-                   msgType = convertNfapiP5TagValToMsgId(msgHdr.msg_id);\r
-                   if(msgType == PNF_MAX_EVENT)\r
+                   if(convertNfapiP5TagValToMsgId(msgHdr.msg_id, &nfapiPnfEvent, &phyEvent)!=ROK)\r
                    {\r
+                      ODU_PUT_MSG_BUF(mBuf);\r
                       DU_LOG("\nERROR  --> NFAPI_VNF: Incorrect NFAPI MsgID received:%d",\\r
-                               msgHdr.msg_id);\r
+                            msgHdr.msg_id);\r
                       return RFAILED;\r
                    }\r
-                   sendEventToNfapiVnfFsm(msgType, &p5Hdr, &msgHdr, mBuf);\r
+                   if(nfapiPnfEvent!= PNF_MAX_EVENT)\r
+                   {\r
+                      sendEventToNfapiVnfFsm(nfapiPnfEvent, &p5Hdr, &msgHdr, mBuf);\r
+                   }\r
+                   else if(phyEvent != MAX_EVENT)\r
+                   {\r
+\r
+                      if(phyEvent == PARAM_RESPONSE)\r
+                      {\r
+                         if(sendParamRspToLowerMacFsm(mBuf) != ROK)\r
+                         {\r
+                            ODU_PUT_MSG_BUF(mBuf);\r
+                            DU_LOG("\nERROR  --> NFAPI_VNF: Failed to process param response");\r
+                            return RFAILED;\r
+                         }\r
+                           \r
+                      }\r
+                      else\r
+                      {\r
+                         sendEventToLowerMacFsm(phyEvent, msgHdr.length, mBuf);  \r
+                      }\r
+                   }\r
                    ODU_PUT_MSG_BUF(mBuf);\r
                    break;\r
                }\r
index 1330837..1607f47 100644 (file)
@@ -139,55 +139,98 @@ void nFapiExtractMsgHdr(nFapi_msg_header *msgHdr, Buffer *mBuf)
  *
  * @params 
  *         [IN]: tagVal from (SCF 225 Table 2-7 "Dedicated nFAPI messages")
- *         [OUT]: NfapiPnfEvent
+ *         [IN]: Nfapi Pnf Event
+ *         [IN]: Phy Event State
+ *         [OUT]: ROK or RFAILED 
  *
  * *******************************************************************************/
-NfapiPnfEvent convertNfapiP5TagValToMsgId(uint16_t tagVal)
+uint8_t convertNfapiP5TagValToMsgId(uint16_t tagVal, NfapiPnfEvent *nfapiPnfEvent, EventState *phyEvent)
 {
+   *nfapiPnfEvent=PNF_MAX_EVENT;
+   *phyEvent=MAX_EVENT;
 
    switch(tagVal)
    {
       case TAG_NFAPI_PNF_READY_IND:
         {
-           return PNF_READY_IND;
+           *(nfapiPnfEvent)  = PNF_READY_IND;
+           break;
         }
       case TAG_NFAPI_PNF_PARAM_REQ:
         {
-           return PNF_PARAM_REQ;
+           *(nfapiPnfEvent)  = PNF_PARAM_REQ;
+           break;
         }
       case TAG_NFAPI_PNF_PARAM_RESP:
         {
-           return PNF_PARAM_RESP;
+           *(nfapiPnfEvent)  = PNF_PARAM_RESP;
+           break;
         }
       case TAG_NFAPI_PNF_CONFIG_REQ:
         {
-           return PNF_CONFIG_REQ;
+           *(nfapiPnfEvent)  = PNF_CONFIG_REQ;
+           break;
         }
       case TAG_NFAPI_PNF_CONFIG_RESP:
         {
-           return PNF_CONFIG_RESP;
+           *(nfapiPnfEvent)  = PNF_CONFIG_RESP;
+           break;
         }
       case TAG_NFAPI_PNF_START_REQ:
         {
-           return PNF_START_REQ;
+           *(nfapiPnfEvent)  = PNF_START_REQ;
+           break;
         }
       case TAG_NFAPI_PNF_START_RESP:
         {
-           return PNF_START_RESP;
+           *(nfapiPnfEvent)  = PNF_START_RESP;
+           break;
         }
       case TAG_NFAPI_PNF_STOP_REQ:
         {
-           return PNF_STOP_REQ;
+           *(nfapiPnfEvent)  = PNF_STOP_REQ;
+           break;
         }
       case TAG_NFAPI_PNF_STOP_RESP:
         {
-           return PNF_STOP_RESP;
+           *nfapiPnfEvent = PNF_STOP_RESP;
+           break;
+        }
+      case FAPI_PARAM_REQUEST:
+        {
+           *(phyEvent) = PARAM_REQUEST;
+           break;
+        }
+      case FAPI_PARAM_RESPONSE: 
+        {
+           *(phyEvent) = PARAM_RESPONSE;
+           break;
+        }
+      case FAPI_CONFIG_REQUEST:
+        {
+           *(phyEvent) = CONFIG_REQUEST;
+           break;
+        }
+      case FAPI_CONFIG_RESPONSE: 
+        {
+           *(phyEvent) = CONFIG_RESPONSE;
+           break;
+        }
+      case FAPI_START_REQUEST:
+        {
+           *(phyEvent) = START_REQUEST;
+           break;
+        }
+      case FAPI_STOP_REQUEST:
+        {
+           *(phyEvent) = STOP_REQUEST;
+           break;
         }
       default:
         {
            DU_LOG("\n Incorrect TAG VALUE of NFAPI P5 Messages:%d",tagVal);
-           return PNF_MAX_EVENT;
+           return RFAILED;
         }
    }
-   return PNF_MAX_EVENT;
+   return ROK;
 }
index 22f843c..2c9f613 100644 (file)
@@ -112,7 +112,7 @@ void nfapiFillMsgHdr(Buffer *mBuf, uint8_t phyId, uint16_t msgId, uint32_t msgle
 void nFapiExtractP5Hdr(nFapi_p5_hdr *p5Hdr, Buffer *mBuf);
 void nFapiExtractMsgHdr(nFapi_msg_header *msgHdr, Buffer *mBuf);
 
-NfapiPnfEvent convertNfapiP5TagValToMsgId(uint16_t tagVal);
+uint8_t convertNfapiP5TagValToMsgId(uint16_t tagVal,  NfapiPnfEvent *nfapiPnfEvent, EventState *phyEvent);
 uint8_t nfapiP7UdpRecvMsg();
 
 #endif
index b3f93ed..54b3644 100644 (file)
@@ -19,6 +19,7 @@
 /* This file is the entry point for UDP P7 */
 
 #include "common_def.h"
+#include "lwr_mac.h"
 #include "du_app_p7udp_inf.h"
 #include "nfapi_interface.h"
 #include "nfapi_vnf_fsm.h"
index a62dd00..9797cab 100644 (file)
@@ -272,6 +272,112 @@ void nFapiExtractMsgHdr(nFapi_msg_header *msgHdr, Buffer *mBuf)
     return;
 }
 
+/*********************************************************************************
+ *
+ * @Function Name: convertIpStringToUInt8
+ *
+ *
+ * @Functionality: 
+ *    convert the ip address and store in uint8_t array[4]
+ *
+ * @params 
+ *         [IN]: Ip address which needs to convert
+ *         [IN]: Array to store the result
+ *
+ * *******************************************************************************/
+void convertIpStringToUInt8(const char *ip_str, uint8_t ip_address[]) 
+{
+    char ip_copy[16];
+    strncpy(ip_copy, ip_str, sizeof(ip_copy) - 1);
+    ip_copy[sizeof(ip_copy) - 1] = '\0';  // Ensure null-terminated
+
+    char *token = strtok(ip_copy, ".");
+    for (int i = 0; token != NULL && i < 4; i++) {
+        ip_address[i] = (uint8_t)atoi(token);  // Convert each token to an integer
+        token = strtok(NULL, ".");
+    }
+}
+
+/*********************************************************************************
+ *
+ * @Function Name: fillTlvOfArrayOfUint8 
+ *
+ *
+ * @Functionality: 
+ *    fill tlv of array of size uint8 
+ *
+ * @params 
+ *         [IN]: Buffer, tag, length, value
+ *
+ * *******************************************************************************/
+void fillTlvOfArrayOfUint8(Buffer *mBuf, uint16_t tag, uint16_t length, uint8_t *value)
+{
+   uint8_t arraySize=4;
+   CMCHKPK(oduPackPostUInt16, tag, mBuf);
+   CMCHKPK(oduPackPostUInt16, length, mBuf);
+   for(uint8_t idx=0;idx<arraySize;idx++)
+   {
+      CMCHKPK(oduPackPostUInt8, value[idx], mBuf);
+   }
+}
+
+/*********************************************************************************
+ *
+ * @Function Name: fillTlvOfSizeUint8 
+ *
+ *
+ * @Functionality: 
+ *    fill tlv of size uint8 
+ *
+ * @params 
+ *         [IN]: Buffer, tag, length, value
+ *
+ * *******************************************************************************/
+void fillTlvOfSizeUint8(Buffer *mBuf, uint16_t tag, uint16_t length, uint8_t value)
+{
+   CMCHKPK(oduPackPostUInt16, tag, mBuf);
+   CMCHKPK(oduPackPostUInt16, length, mBuf);
+   CMCHKPK(oduPackPostUInt8, value, mBuf);
+}
+
+/*********************************************************************************
+ *
+ * @Function Name: fillTlvOfSizeUint16 
+ *
+ *
+ * @Functionality: 
+ *    fill tlv of size uint16 
+ *
+ * @params 
+ *         [IN]: Buffer, tag, length, value
+ *
+ * *******************************************************************************/
+void fillTlvOfSizeUint16(Buffer *mBuf, uint16_t tag, uint16_t length, uint16_t value)
+{
+   CMCHKPK(oduPackPostUInt16, tag, mBuf);
+   CMCHKPK(oduPackPostUInt16, length, mBuf);
+   CMCHKPK(oduPackPostUInt16, value, mBuf);
+}
+
+/*********************************************************************************
+ *
+ * @Function Name: fillTlvOfSizeUint32 
+ *
+ *
+ * @Functionality: 
+ *    fill tlv of size uint32 
+ *
+ * @params 
+ *         [IN]: Buffer, tag, length, value
+ *
+ * *******************************************************************************/
+void fillTlvOfSizeUint32(Buffer *mBuf, uint16_t tag, uint16_t length, uint32_t value)
+{
+   CMCHKPK(oduPackPostUInt16, tag, mBuf);
+   CMCHKPK(oduPackPostUInt16, length, mBuf);
+   CMCHKPK(oduPackPostUInt32, value, mBuf);
+}
+
 /**********************************************************************
 End of file
 **********************************************************************/
index 7551ed9..427b2a4 100644 (file)
@@ -64,4 +64,10 @@ void nfapiFillP5Hdr(Buffer *mBuf);
 void nfapiFillMsgHdr(Buffer *mBuf, uint8_t phyId, uint16_t msgId, uint32_t msgLen);
 void nFapiExtractP5Hdr(nFapi_p5_hdr *p5Hdr, Buffer *mBuf);
 void nFapiExtractMsgHdr(nFapi_msg_header *msgHdr, Buffer *mBuf);
+void convertIpStringToUInt8(const char *ip_str, uint8_t ip_address[]); 
+void fillTlvOfArrayOfUint8(Buffer *mBuf, uint16_t tag, uint16_t length, uint8_t *value);
+void fillTlvOfSizeUint8(Buffer *mBuf, uint16_t tag, uint16_t length, uint8_t value);
+void fillTlvOfSizeUint16(Buffer *mBuf, uint16_t tag, uint16_t length, uint16_t value);
+void fillTlvOfSizeUint32(Buffer *mBuf, uint16_t tag, uint16_t length, uint32_t value);
+
 #endif
index 136280d..b8b9fc2 100644 (file)
@@ -233,20 +233,118 @@ uint8_t buildAndSendPnfStopResp()
 
 uint8_t buildAndSendParamResp()
 {
+   uint8_t index = 0;
+   uint8_t pnfAdd[4];
    Buffer *mBuf = NULLP;
+   uint32_t len = 20+sizeof(fapi_param_resp_t); //As per 5G nFAPI Specification, figure 2–21 Combined P5 message (PARAM.response),
+                                                //where value 20 is calculated based on = 2 + 8 + 6 + ( 4 + L1 )
 
    if (ODU_GET_MSG_BUF(PNF_APP_MEM_REG, PNF_POOL, &mBuf) != ROK)
    {
       DU_LOG("\nERROR  --> NFAPI_PNF : Memory allocation failed in pnf_readyInd");
       return RFAILED;
    }
+
    nfapiFillP5Hdr(mBuf);
-   nfapiFillMsgHdr(mBuf, 0, FAPI_PARAM_RESPONSE, 0);
-   CMCHKPK(oduPackPostUInt8, 0, mBuf); 
-   CMCHKPK(oduPackPostUInt8, 1, mBuf);
-   //TODO->
-   //Fill TLVs
+   nfapiFillMsgHdr(mBuf, 0, FAPI_PARAM_RESPONSE, len);
+
+   //As per 5G nFAPI Specification, section 3.2.2 PARAM.response
+   CMCHKPK(oduPackPostUInt8, 0, mBuf);  //Error Code
+   CMCHKPK(oduPackPostUInt8, 3, mBuf);  //Num TLVs = 3 
+   
+   /* As per table 3-15 nFAPI TLVs included in PARAM.response when the PHY instance is in IDLE state 
+    * Since we are only supporting ipv4 that's why fiiling only P7 PNF Address
+    * Ipv4 and P7 PNF Port */
+   convertIpStringToUInt8(LOCAL_IP_PNF, pnfAdd);
+   fillTlvOfArrayOfUint8(mBuf, TAG_NFAPI_P7_PNF_ADD_IPV4, sizeof(pnfAdd), pnfAdd);  /* P7 PNF Address Ipv4 */
+   fillTlvOfSizeUint16(mBuf, TAG_NFAPI_P7_PNF_PORT, sizeof(uint16_t), PNF_P5_SCTP_PORT); /* P7 PNF Port */
+   
+   /* filling 5G_FAPI_MSG_BODY */
+   CMCHKPK(oduPackPostUInt16, TAG_NFAPI_5G_FAPI_MSG_BODY, mBuf); //5G_FAPI_MSG_BODY tag
+   CMCHKPK(oduPackPostUInt16, sizeof(fapi_param_resp_t), mBuf); // 5G_FAPI_MSG_BODY length
+
+   //As per 5G FAPI: PHY API, section 3.3.1.2 PARAM.response, Table 3-5
+   //PARAM.response message body
+   CMCHKPK(oduPackPostUInt8, 0, mBuf);  //Error Code
+   CMCHKPK(oduPackPostUInt8, 54, mBuf);  //Num TLVs = 54
+
+   
+   //As per 5G FAPI: PHY API, section 3.3.1.2 PARAM.response, Table 3-8 PARAM TLVs
+   /* Cell Params */
+   fillTlvOfSizeUint16(mBuf,FAPI_RELEASE_CAPABILITY_TAG, sizeof(uint16_t), 1);
+   fillTlvOfSizeUint16(mBuf,FAPI_PHY_STATE_TAG, sizeof(uint16_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_SKIP_BLANK_DL_CONFIG_TAG, sizeof(uint8_t),  0);
+   fillTlvOfSizeUint8(mBuf, FAPI_SKIP_BLANK_UL_CONFIG_TAG,  sizeof(uint8_t),  0);
+   fillTlvOfSizeUint8(mBuf, FAPI_NUM_CONFIG_TLVS_TO_REPORT_TYPE_TAG,  sizeof(uint8_t),  0);
+
+   /* Carrier Params */
+   fillTlvOfSizeUint8(mBuf, FAPI_CYCLIC_PREFIX_TAG, sizeof(uint8_t),  1);
+   fillTlvOfSizeUint8(mBuf, FAPI_SUPPORTED_SUBCARRIER_SPACING_DL_TAG,  sizeof(uint8_t),  1);
+   fillTlvOfSizeUint16(mBuf,FAPI_SUPPORTED_BANDWIDTH_DL_TAG, sizeof(uint16_t), 1);
+   fillTlvOfSizeUint8(mBuf, FAPI_SUPPORTED_SUBCARRIER_SPACING_UL_TAG, sizeof(uint8_t),  0);
+   fillTlvOfSizeUint16(mBuf,FAPI_SUPPORTED_BANDWIDTH_UL_TAG, sizeof(uint16_t), 0);
 
+   /* PDCCH Param*/
+   fillTlvOfSizeUint8(mBuf, FAPI_CCE_MAPPING_TYPE_TAG,  sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_CORESET_OUTSIDE_FIRST_3_OFDM_SYMS_OF_SLOT_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PRECODER_GRANULARITY_CORESET_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PDCCH_MU_MIMO_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PDCCH_PRECODER_CYCLING_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_MAX_PDCCHS_PER_SLOT_TAG,  sizeof(uint8_t), 0);
+
+   /* PUCCH Param */
+   fillTlvOfSizeUint8(mBuf, FAPI_PUCCH_FORMATS_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_MAX_PUCCHS_PER_SLOT_TAG, sizeof(uint8_t), 0);
+
+   /* PDSCH Param */
+   fillTlvOfSizeUint8(mBuf, FAPI_PDSCH_MAPPING_TYPE_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PDSCH_ALLOCATION_TYPES_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PDSCH_VRB_TO_PRB_MAPPING_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PDSCH_CBG_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PDSCH_DMRS_CONFIG_TYPES_TAG,  sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PDSCH_DMRS_MAX_LENGTH_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PDSCH_DMRS_ADDITIONAL_POS_TAG,  sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_MAX_PDSCHS_TBS_PER_SLOT_TAG,  sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_MAX_NUMBER_MIMO_LAYERS_PDSCH_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_SUPPORTED_MAX_MODULATION_ORDER_DL_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_MAX_MU_MIMO_USERS_DL_TAG,  sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PDSCH_DATA_IN_DMRS_SYMBOLS_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PREMPTIONSUPPORT_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PDSCH_NON_SLOT_SUPPORT_TAG, sizeof(uint8_t), 0);
+
+   /* PUSCH Param */
+   fillTlvOfSizeUint8(mBuf, FAPI_UCI_MUX_ULSCH_IN_PUSCH_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_UCI_ONLY_PUSCH_TAG,  sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PUSCH_FREQUENCY_HOPPING_TAG,  sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PUSCH_DMRS_CONFIG_TYPES_TAG,  sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PUSCH_DMRS_MAX_LEN_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PUSCH_DMRS_ADDITIONAL_POS_TAG,  sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PUSCH_CBG_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PUSCH_MAPPING_TYPE_TAG,  sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PUSCH_ALLOCATION_TYPES_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PUSCH_VRB_TO_PRB_MAPPING_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PUSCH_MAX_PTRS_PORTS_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_MAX_PDUSCHS_TBS_PER_SLOT_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_MAX_NUMBER_MIMO_LAYERS_NON_CB_PUSCH_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_SUPPORTED_MODULATION_ORDER_UL_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_MAX_MU_MIMO_USERS_UL_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_DFTS_OFDM_SUPPORT_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PUSCH_AGGREGATION_FACTOR_TAG,  sizeof(uint8_t), 0);
+
+   /* PRACH Params */
+   fillTlvOfSizeUint8(mBuf, FAPI_PRACH_LONG_FORMATS_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PRACH_SHORT_FORMATS_TAG, sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_PRACH_RESTRICTED_SETS_TAG,  sizeof(uint8_t), 0);
+   fillTlvOfSizeUint8(mBuf, FAPI_MAX_PRACH_FD_OCCASIONS_IN_A_SLOT_TAG, sizeof(uint8_t), 0);
+
+   /* MEASUREMENT TAG */
+   fillTlvOfSizeUint8(mBuf, FAPI_RSSI_MEASUREMENT_SUPPORT_TAG,  sizeof(uint8_t), 0);
+
+   DU_LOG("\nINFO   --> NFAPI_PNF: Sending PARAM_RESP ");
+   if(pnfP5SctpSend(mBuf) == RFAILED)
+   {
+      ODU_PUT_MSG_BUF(mBuf);
+   }
    return ROK;
 }
 
index 7912cb7..b352484 100644 (file)
@@ -54,10 +54,10 @@ typedef struct pnfP5SctpAssocCb
 
 typedef struct pnfP5SctpIpAddr
 {
- bool      ipV4Pres;
- uint32_t  ipV4Addr;
- bool      ipV6Pres;
- uint8_t   ipV6Addr[MAX_IPV6_LEN];
  bool      ipV4Pres;
  uint32_t  ipV4Addr;
  bool      ipV6Pres;
  uint8_t   ipV6Addr[MAX_IPV6_LEN];
 }PnfP5SctpIpAddr;
 
 typedef struct pnfP5SctpDestInfo