[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [lwip-users] Sending data more than 1472 bytes using UDP

From: Mohammad Tavakoli
Subject: Re: [lwip-users] Sending data more than 1472 bytes using UDP
Date: Tue, 6 Oct 2020 15:54:13 +0330

I reckon that maybe it is useful to send my code:
uint32_t  aa[4001];
struct pbuf* GK_pbuf;
err_t GK_err;
int main(){
  for(i = 0; i <= 4000; ++i){
      aa[i] = (i % 30) + 0x30; 
GK_pbuf = pbuf_alloc(PBUF_TRANSPORT, 1600, PBUF_RAM);
  while (1)

and in  udp_echoserver_init.c file:

void udp_echoserver_init(void)
  ip4addr_aton("", &serverIP);  
   struct udp_pcb *upcb;
   err_t err;
   upcb = udp_new();
   if (upcb)
      err = udp_bind(upcb, &serverIP , 7);
      if(err == ERR_OK)
        udp_recv(upcb, udp_echoserver_receive_callback, NULL);

void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
  udp_connect(upcb, addr, port);
  ip4addr_aton("", &remoteIP);
  for(iii = 0; iii <= 9; ++iii){
        GH_err = pbuf_take(GK_pbuf, aa + (iii * 1472), 1472);
        Gn_err = udp_sendto(upcb, GK_pbuf, &remoteIP, 7);
        // Gn_err = udp_send(upcb, GK_pbuf);
        HAL_Delay(50); //50ms

On Tue, Oct 6, 2020 at 3:32 PM Mohammad Tavakoli <tavakoli.irsa@gmail.com> wrote:
Thank you for your answer. What do you mean by lwIP interrupt? where I can find it? I am also willing to know I should use udp_send() or udp_sendto() in that ISR.

On Tue, Oct 6, 2020 at 3:11 PM Jon Bean <jbean@beandigital.co.uk> wrote:

Hi Mohammad

I had to do something similar on a TI MCU. I chose to send multiple packets that were less than the MTU. Basically I called the transmit route from the LWIP interrupt. Each time the interrupt was called it would send a data packet that was not more than the MTU. I had some flags to know if I still needed to keep sending data or if I can stop. This seemed to work OK for my application.



On 06/10/2020 12:32, Mohammad Tavakoli wrote:
I made a TCP server on STM32F407 using lwIP version 2.1.2 and it worked fine. Now for some reasons I need to run a UDP server on the MCU. I tried and it worked fine for data size below 1472 bytes. Yet the desired data length is around 16KB to 20KB.
1. I searched and found that IP_FRAG should  be  defined 1 to allow send data over MTU size. It is enabled by default. I read from an email [1] that IP_FRAG_MAX_MTU should be also changed to a proper value. However I cannot realize where it is!
2. Another approach employed by me is to send chopped data whose size are below 1472 bytes in a for loop but the for loop only executes first time and the MCU goes stop status. How I must send data in a for loop?


lwip-users mailing list

Virus-free. www.avast.com
lwip-users mailing list

reply via email to

[Prev in Thread] Current Thread [Next in Thread]