This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

NDK Jumbo packets - can be used with UDP?

I can't seem to get the NDK to send jumbo packets using UDP.  I'm using the latest NDK (2.20.4.26), recompiled for the OMAPL137 ARM processor using the wiki instructions (http://processors.wiki.ti.com/index.php/Rebuilding_the_NDK_Core), with _INCLUDE_JUMBOFRAME_SUPPORT added to all the Build.xs files.  My application does appear to send TCP jumbo packets successfully, but UDP packets cause "EMAC_sendPacket() returned error 00000005" messages.

The instructions for the sendto command in the API (SPRU524) say "For a datagram type socket, the send operation always copies one packet's worth of data. If the buffer size is too large to be transmitted in a single packet, an error code of EMSGSIZE is returned."  Does this mean the jumbo packets cannot be sent, ever, over UDP?  If they can be sent, or if there is a workaround, I would appreciate any suggestions.

 

  • Hi Greg,

    Did you get solution for your problem?

    I'm facing same problem, I got this error: EMAC_sendPacket() returned error 32000038

    Any suggestions ?

    Thank you,

    Uma 

  • No, I never solved this problem.  I guessed from the EMAC architecture and NDK documentation that jumbo UDP packets are not supported, but I did not get confirmation from TI about this.

    Regards,

    Greg

  • Greg,

    NDK have jumbo packet buffer manager(PBM) for handling jumbo frames.

    It is capable of handling memory allocations only up to 3068 bytes (MMALLOC_MAXSIZE).

    Jumbo frames, i.e., packets typically larger than 1500 bytes in size, and that could be as large as 10K bytes.

     Refer to the source file JUMBO_PBM.C under \SRC\OS\JUMBO_PBM.C.

     In the case of UDP, size(Length of the data buffer) is larger than actual on your end.

    That is the reason you are getting the error: EMSGSIZE (Message too long).

     You can set the transmit size like 1500bytes of each UDP sent with loop.