Hi*,
We are working on EVM6670 with CCS 5.0.1 and pdk_C6670_1_0_0_15.
Below providing the code , which calling netfp_encodeSrb & Netfp_decodeSrb on the same core(CORE 0).
Qmss_QueueHnd srbEncQueueHandle, srbDecQueueHandle, srbEnc1QueueHandle, srbDec1QueueHandle;
uint32_t gtpTunnelId;
Netfp_UserSecCfg userSecCfg;
uint8_t myEncKey[16] =
{0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x00};
uint8_t myMacKey[16] =
{0x1F, 0x1E, 0x1D, 0x1C, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x00};
Netfp_UserSecHandle ueSecHandle,ueSecHandle_dec;
srbEncQueueHandle = Qmss_queueOpen(Qmss_QueueType_GENERAL_PURPOSE_QUEUE,
QMSS_PARAM_NOT_SPECIFIED, &isAllocated);
if (srbEncQueueHandle == NULL)
{
System_printf ("Error: Unable to open the SRB Encode Queue\n");
return ;
}
srbDecQueueHandle = Qmss_queueOpen(Qmss_QueueType_GENERAL_PURPOSE_QUEUE,
QMSS_PARAM_NOT_SPECIFIED, &isAllocated);
if (srbDecQueueHandle == NULL)
{
System_printf ("Error: Unable to open the SRB Decode Queue\n");
return ;
}
Netfp_FlowHandle gtpuFlowHandle;
gtpuFlowHandle = Netfp_findFlow ("GTPU-FP-Flow");
userSecCfg.authMode = Netfp_AuthMode_CMAC;
userSecCfg.srbCipherMode = Netfp_CipherMode_AES_CTR;
userSecCfg.drbCipherMode = Netfp_CipherMode_AES_CTR;//Netfp_CipherMode_NULL;
userSecCfg.hKeyRrcInt = myMacKey;
userSecCfg.hKeyRrcEnc = myEncKey;
userSecCfg.hKeyUpEnc = myEncKey;
userSecCfg.ueId = 0;
userSecCfg.srbFlowHandle = gtpuFlowHandle;
userSecCfg.initialCountC = 0;
userSecCfg.chSrb1Enc = srbEncQueueHandle;
userSecCfg.chSrb1Dec = srbDecQueueHandle;
userSecCfg.chSrb2Enc = srbEncQueueHandle;
userSecCfg.chSrb2Dec = srbDecQueueHandle;
if ((Netfp_createUserSecContext (&userSecCfg, &ueSecHandle)) < 0)
{
System_printf( "Error: Netfp_createUserSecContext() failed\n");
}
else
System_printf("Netfp Creation Successful\n");
gtpTunnelId = 0xDEAD0000;
Ti_Pkt* ptrPkt;
Ti_Pkt* ptrRxPkt;
uint32_t dataBufferLen, packetLen;
uint16_t ueId;
uint8_t qci, rxBearerId;
ETHHDR* ptrEthHeader;
IPHDR_EDIT* ptrIPHeader;
UDPHDR* ptrUDPHeader;
GTPUHDR* ptrGTPUHdr;
uint8_t* ptrDataPayload;
uint8_t* ptrPDCPHeader;
uint8_t* tunnelInfo = (uint8_t*)>pTunnelId;
/* Allocate a packet from the heap */
ptrPkt = Pktlib_allocPacket (netfpHeaderHeap, 128);
if (ptrPkt == NULL)
return ;
/* Set the length of the data payload. */
packetLen = 7;
/* Get the data buffer & length */
Pktlib_getDataBuffer(ptrPkt, &ptrDataBuffer, &dataBufferLen);
ptrDataBuffer[0] = 0; //Considering it as a PDCP header
ptrDataBuffer[1] = 1;
ptrDataBuffer[2] = 2;
ptrDataBuffer[3] = 3;
ptrDataBuffer[4] = 4;
ptrDataBuffer[5] = 5;
ptrDataBuffer[6] = 6;
Pktlib_setPacketLen(ptrPkt, packetLen);
Pktlib_setDataBufferLen(ptrPkt, packetLen);
appWritebackBuffer(ptrDataBuffer, packetLen);
Pktlib_writebackPkt(ptrPkt);
System_printf("Original\n");
for (index = 0; index < packetLen; index++)
{
System_printf (" %x ", *(ptrDataBuffer + index));
}
System_printf("\n");
/* Call encode SRB slow path */
if (0 != Netfp_encodeSrb (ueSecHandle, ptrPkt, 0, 1))
System_printf("SRB encode error\n");
System_printf("after encode amit\n");
/* Set the index and loop around waiting for the packet to come post ciphering. */
index = 0;
uint8_t* ptrRxDataBuffer;
uint32_t rxDataBufferLen;
uint32_t rxCountC;
/* Did we get the packet? */
while( (ptrRxPkt = (Ti_Pkt *)QMSS_DESC_PTR(Qmss_queuePop (srbEncQueueHandle)))== NULL);
Pktlib_getDataBuffer (ptrRxPkt, &ptrRxDataBuffer, &rxDataBufferLen);
Pktlib_setPacketLen(ptrRxPkt, rxDataBufferLen);
Pktlib_setDataBufferLen(ptrRxPkt, rxDataBufferLen);
appWritebackBuffer(ptrRxDataBuffer, rxDataBufferLen);
Pktlib_writebackPkt(ptrRxPkt);
System_printf("Encoded\n");
for (index = 0; index < rxDataBufferLen; index++)
{
System_printf ("%x ", *(ptrRxDataBuffer + index));
}
System_printf("\n");
/* Sanity Check: Ensure the received buffer length includes the MAC-I for LTE_CP and PDCP header for LTE */
if (rxDataBufferLen != packetLen + 4)
{
System_printf ("Error: Sent %d bytes Got %d bytes\n", packetLen, rxDataBufferLen);
}
Netfp_getPacketId (ptrRxPkt, &ueId, &qci, &rxBearerId);
System_printf ("Debug: Received packet for UE %d QCI %d Bearer Id %d\n", ueId, qci, rxBearerId);
if (0 != Netfp_decodeSrb (ueSecHandle_dec, ptrRxPkt, 0, 1))
System_printf("SRB decode error\n");
while(( ptrRxPkt = (Ti_Pkt *)QMSS_DESC_PTR(Qmss_queuePop (srbDecQueueHandle)))== NULL);
Pktlib_getDataBuffer (ptrRxPkt, &ptrRxDataBuffer, &rxDataBufferLen);
Pktlib_setPacketLen(ptrRxPkt, rxDataBufferLen);
Pktlib_setDataBufferLen(ptrRxPkt, rxDataBufferLen);
appWritebackBuffer(ptrRxDataBuffer, rxDataBufferLen);
Pktlib_writebackPkt(ptrRxPkt);
/* Sanity Check: Ensure the received buffer length includes the MAC-I for LTE_CP and no CountC for LTE */
if (rxDataBufferLen != packetLen + 4)
{
System_printf ("Error: Sent %d bytes Got %d bytes\n", packetLen, rxDataBufferLen);
}
System_printf("Decoded\n");
/* Sanity Check: Compare the received packet with the transmitted packet. */
for (index = 0; index < rxDataBufferLen; index++)
{
System_printf ("%x ",*(ptrRxDataBuffer + index));
}
System_printf("\n");
/* Packet was received; test passed. Cleanup the packet. */
Pktlib_freePacket(ptrRxPkt);
return ;
The Output, which i am getting;
Original 0 1 2 3 4 5 6
Encoded 0 f7 cb a9 59 7f 61 d2 52 25 d4
Decoded 0 5d 29 ba 90 53 c1 61 15 8e 85
Expected O/p; Decoded 0 1 2 3 4 5 6 d2 52 25 d4