\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
}\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
{\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
*
* @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;
}
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
/* 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"
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
**********************************************************************/
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
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;
}
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