Thanks Jens , your Question has pointed out the problem , now I can receive the packets too. my hardware MAC is stm32f427 and I had the multicast filter enabled so I changed some line on the MAC initialization from macinit.MulticastFramesFilter = ETH_MULTICASTFRAMESFILTER_PERFECT; to macinit.MulticastFramesFilter = ETH_MULTICASTFRAMESFILTER_NONE; and after that the board can receive the packets, may be I need to make use of the filter in the future.
Thanks again. Best Regards, Amr Elsayed. RA @ E-JUST <http://ejust.edu.eg/>. Founder & Engineer @ DIY-Life <http://www.the-diy-life.co/>. eng.amralsa...@gmail.com +201223240852. On 11 July 2018 at 19:30, Jens Nielsen <d...@telia.com> wrote: > Hi > > On which hardware? You may have to enable reception of multicast frames in > your ethernet controller > > BR /Jens > > > On 2018-07-11 02:12, Amr Elsayed wrote: > > Dear LWIP users and team, > I am trying to send and receive IGMP multicast messages using RAW API's , > I can only send but can not receive back the messages by a board running > the same code (without sending packets).On wireshark I can see the "IGMP > Membership report Group " packets for both devices and I can also see the > UDP messages I send periodically to the multicast IP, but on receiver board > having the same code that I also share below I can not receive back the > Multicast messages and the udp_recv set callback function is never called. > also i tried to put a breakpoint in ip4_input inside the if condition of > the multicast packets but the breakpoint is never getting fired. > if (ip4_addr_ismulticast(ip4_current_dest_addr())) { > // ... > } > so this may do means that the sent UDP message have something wrong > despite that I can see the packet on wireshark ? > I have netif->flags|= NETIF_FLAG_IGMP; and i am sure igmp_start() is > called. > to summarize the problem I do have I can join IGMP group and send UDP > messages to the multicast IP as on wireshark but I can not receive that > message on another board running the same code. > > code: > #define MULTICAST_PORT 9533 > static char multicast_ip[] = "238.0.0.8"; > > static char dummyData[] = "Hello from board"; > #define UDP_APP_INTERVAL 5000 > static struct udp_pcb *multiAppPcb; > static ip_addr_t multicastIp; > static uint32_t multiAppTime = 0 ; > // prototypes > void multicast_init(void); > int multicast_send_data(const char* buff,uint16_t len );. > static void multicast_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, > const ip_addr_t *addr, u16_t port); > > void main( void ){ > // .. initializations > LWIP_Init(); > multicast_init(); > while(1) > { > MX_LWIP_Process(hal_time); > // only on sender board.. > if(time - multiAppTime > UDP_APP_INTERVAL) > { > multiAppTime = time ; > uint16_t totLen = strlen(dummyData); > multicast_send_data(dummyData,totLen); > } > } > > void > multicast_init(void) > { > multicastIp.addr = ipaddr_addr(multicast_ip); > multiAppPcb = udp_new_ip_type(IPADDR_TYPE_ANY); > if (multiAppPcb != NULL) { > > err_t err; > > err = udp_bind(multiAppPcb, IP_ADDR_ANY, MULTICAST_PORT); > if (err == ERR_OK) { > #if LWIP_IGMP > err_t iret = > igmp_joingroup(IP_ADDR_ANY,(const struct ip4_addr *)(&multicastIp)); > if(iret){ > initErr = 1 ; > return ; > } > #endif // LWIP_IGMP > udp_set_multicast_netif_addr(multiAppPcb,(const struct ip4_addr > *)(&multicastIp)); > udp_set_multicast_ttl(multiAppPcb,5); > > udp_recv(multiAppPcb, multicast_recv, multiAppPcb); > > } else { > /* abort? output diagnostic? */ > initErr = 1; > } > } else { > /* abort? output diagnostic? */ > initErr = 1; > } > } > int multicast_send_data(const char* buff,uint16_t len ) > { > err_t err; > if (initErr == 1) > return 1 ; > struct pbuf *p = pbuf_alloc(PBUF_RAW,len,PBUF_RAM); > int ret = 0 ; > if(p == NULL) > return 1 ; > if(pbuf_take(p,buff,len) != ERR_OK) > { > ret = 1 ; > goto udp_app_send_end; > } > err = udp_sendto(multiAppPcb, p, &multicastIp, MULTICAST_PORT) ; > if(err != ERR_OK) > ret = 1 ; > udp_app_send_end: > pbuf_free(p); > return ret ; > } > static void > multicast_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, > const ip_addr_t *addr, u16_t port) > { > LWIP_UNUSED_ARG(arg); > if (p != NULL) { > /* send received packet back to sender */ > //udp_sendto(upcb, p, addr, port); > char* recv_buff = (char*) mem_malloc(p->tot_len); > if(recv_buff){ > extract_payload(p,recv_buff); > multicast_recv_callback(recv_buff,p->tot_len); > }else{ > > multicast_recv_callback(NULL,p->tot_len); > } > > /* free the pbuf */ > pbuf_free(p); > } > } > void extract_payload(struct pbuf *p,char *payload) > { > struct pbuf *q = p ; > while(q) > { > for(int i = 0 ; i < q->len ; i++ ) > { > payload[i] =((char*)(q->payload))[i]; > } > q = p->next; > } > } > void multicast_recv_callback(char* buff, int len ) > { > if(buff != NULL){ > > > }else{ > // invalid > } > > > } > > ------------------------------------------------------------ > ----------------------------------------------- > Best Regards, > Amr Elsayed. > RA @ E-JUST <http://ejust.edu.eg/>. > Founder & Engineer @ DIY-Life <http://www.the-diy-life.co/>. > eng.amralsa...@gmail.com > +201223240852. > > > > [image: Mailtrack] > <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> > Sender > notified by > Mailtrack > <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> > 07/11/18, > 1:58:47 AM > > > _______________________________________________ > lwip-users mailing > listlwip-users@nongnu.orghttps://lists.nongnu.org/mailman/listinfo/lwip-users > > > > _______________________________________________ > lwip-users mailing list > lwip-users@nongnu.org > https://lists.nongnu.org/mailman/listinfo/lwip-users > [image: Mailtrack] <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> Sender notified by Mailtrack <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> 07/11/18, 8:58:02 PM
_______________________________________________ lwip-users mailing list lwip-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/lwip-users