0

I have a client/server LWIP program, I want to use multicast features so I used IGMP library did the following setting like this:

  1. Setting .IOC

Enable LWIP_IGMP

Enable LWIP_MULTICAST_TX_OPTION

Enable LWIP_IP4

  1. in ethernet.c

netif->flags |= NETIF_FLAG_IGMP

  1. in stm32f7xx_hal_eth.c (ETH_MACDMAConfig)

macinit.PromiscuousMode = ETH_PROMISCUOUS_MODE_ENABLE;

macinit.MulticastFramesFilter = ETH_MULTICASTFRAMESFILTER_NONE;

and i implemented code like this :

 void UDP_Multicast_init(void *arg)
{
   struct ip4_addr ipgroup, localIP;
   struct udp_pcb *upcb;
   char msg[] = "hello";
   struct pbuf* p;
   p = pbuf_alloc(PBUF_TRANSPORT,sizeof(msg),PBUF_RAM);
   memcpy (p->payload, msg, sizeof(msg));

   IP4_ADDR(&ipgroup, 224, 224, 0, 1); //Multicast IP address.
   IP4_ADDR(&localIP, 192, 168, 1, 99); //Interface IP address
   #if LWIP_IGMP
      igmp_joingroup((ip4_addr_t *)(&localIP),(ip4_addr_t *)(&ipgroup));
   #endif
   upcb = ( struct udp_pcb*) udp_new();

   MulticastStart(); //binding connection to the port 10

   udp_recv(upcb, UDP_callback, NULL);
   udp_sendto(upcb,p,&ipgroup,10);
}

void UDP_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p,
        const ip_addr_t *addr, u16_t port)
{
    printf("test");
}

and I try to see in wireshark, iplocal successfully joins into the multicast address, and sends a data to the multicast address. enter image description here

but the callback function cannot be executed.

is there something missing?? thanks for the response.

0 Answers0