lwip-users
[Top][All Lists]
Advanced

[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(){
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_LWIP_Init();
  udp_echoserver_init();
  for(i = 0; i <= 4000; ++i){
      aa[i] = (i % 30) + 0x30; 
  }
GK_pbuf = pbuf_alloc(PBUF_TRANSPORT, 1600, PBUF_RAM);
  while (1)
  {
      ethernetif_input(&gnetif);
      sys_check_timeouts();
  }
}


and in  udp_echoserver_init.c file:

void udp_echoserver_init(void)
{
  ip4addr_aton("192.168.1.18", &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("192.168.1.88", &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
    }
  udp_disconnect(upcb);
  pbuf_free(p); 
}

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.

Regards

Jon

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?

[1]http://lwip.100.n7.nabble.com/Sending-a-large-amount-of-data-using-UDP-td35933.html  

_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Virus-free. www.avast.com
_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

reply via email to

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