lwip-users
[Top][All Lists]
Advanced

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

RE: [lwip-users] Problem doing UDP multicast receive using netconn API


From: BMW Cyclist
Subject: RE: [lwip-users] Problem doing UDP multicast receive using netconn API
Date: Sat, 31 Jul 2010 10:55:30 -0400

Simon,

 

Good call! Indeed, I had failed to set the NETIF_FLAG_IGMP bit in the netif's flags. Now that I've done that, the function call to join the multicast group now returns an error code of zero (i.e. no error).

 

Moreover, I've uncommented the netconn_bind call and have now successfully received a multicast packet (from the proper multicast group address) using netconn_recv().

 

So I am now past a major hurdle, thanks to your assistance.

 

Thank you for your "spot on" help.

 

Best Regards,

 

Dave Squires

 

-----------------------------------

SQUIRES ENGINEERING, INC.

2604 Lowell Circle

Melbourne, FL 32935-2215

phone:  (321) 242-8611

website: http://www.squires-eng.com

-----------------------------------

 

 

 

From: address@hidden [mailto:address@hidden On Behalf Of address@hidden
Sent: Saturday, July 31, 2010 1:57 AM
To: Mailing list for lwIP users
Subject: Re: [lwip-users] Problem doing UDP multicast receive using netconn API

 

Do you have NETIF_FLAG_IGMP set in your netif's flags?

Honestly, I haven't used IGMP so far, but looking at the code of igmp_joingroup(), which is called by netconn_join_leave_group, ERR_VAL is the default return value, which means that your netif isn't correctly detected (either it does not have NETIF_FLAG_IGMP set in its netif->flags or the IP address is wrong, which can't be the problem from reading your code).

Simon


David K Squires wrote:

Dear Group Members,

 

I am struggling to try to receive UDP multicast messages with the Atmel UC3A lwip 1.3.2 port.

 

I have been successfully sending UDP multicast packets with lwip for a couple of years using the netconn API. But now I need to receive them in a different FreeRTOS task.

 

Here are the particulars:               Multicast Group Address = 224.0.0.0, destination UDP port = 55555

 

I've enabled the IGMP code in lwip and everything builds fine. I have coded up several attempts to set up to receive UDP multicast packets for the above group and port as follows:

 

=============================== Code snippet ================================================

(other includes here)

 

/* lwIP includes. */

#include "lwip/api.h"

#include "lwip/memp.h"

#include "lwip/inet.h"

#include "lwip/ip_addr.h"

#include "lwip/udp.h"

 

(other includes here)

 

my_task_function()

{

   struct ip_addr s_mcast_ip_addr;           // MCAST IP Address

   struct netconn *conn;

   int lwip_status;

   err_t err;

 

   /* Multicast Group IP address bytes are specified in MS to LS order here */

   /* The group address is 224.0.0.0 */

   IP4_ADDR(&s_mcast_ip_addr,(NetConfig_s.udp_mcast_group_addr.addr >> 24) & 0xff,

                                                    (NetConfig_s.udp_mcast_group_addr.addr >> 16) & 0xff,

                                                    (NetConfig_s.udp_mcast_group_addr.addr >>  8) & 0xff,

                                                    (NetConfig_s.udp_mcast_group_addr.addr & 0xff));

               

    // Create a new UDP connection

   conn = netconn_new(NETCONN_UDP);

 

   // Note: the above call returns a valid pointer (non-zero)

               

    // Bind to the multicast group address 224.0.0.0 and UDP port 55555  (is this call needed??)

    // lwip_status = netconn_bind(conn, &s_mcast_ip_addr, NetConfig_s.udp_dest_port);

               

   // Allow packets from ANY remote host on any port. Is this call needed?????

   // I suspect this call is not needed for UDP

   // netconn_connect(conn, &s_remote_ip_addr, 0);                      //  what do we use for "Any UDP Port?"

               

   err = netconn_join_leave_group (conn,                                             // netconn *

                                                          &s_mcast_ip_addr,                              // Multicast Group Address (32-bits: 224.0.0.0)

                                                          &NetConfig_s.ip_addr,       // Local interface IP address = 192.168.1.21

                                                          NETCONN_JOIN);                  // We want to join this multicast group

 

=============================================================================================

The code from which this snippet was taken compiles fine with no errors or warnings.

 

The problem seems to be in the netconn_join_leave_group function call. It returns err = -9 (ERR_VAL).

 

The first parameter, conn, is non-zero, indicating a reasonable, initialized struct netconn  pointer.

 

The second parameter has been checked and really is 224.0.0.0.

 

The third parameter is a pointer to struct ip_addr which is initialized with the IP address of our local Ethernet interface.

 

As you can see, I've commented out calls to the netconn_bind and netconn_connect functions; it's not clear whether or not these are necessary.

 

Examples of using this function seem to be non-existent, hence my decision to post  a humble cry for help on the lwip forum.

 

Incidentally, I've patched the Atmel UC3A MACB driver to allow all broadcast and multicast packets to be passed to lwip. However, I am not yet to the point where this matters, given the above error scenario.

 

Any help would be greatly appreciated.

 

Thanks,

 

Dave Squires

 

-----------------------------------

SQUIRES ENGINEERING, INC.

2604 Lowell Circle

Melbourne, FL 32935-2215

phone:  (321) 242-8611

website: http://www.squires-eng.com

-----------------------------------

 

 
 
_______________________________________________
lwip-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/lwip-users

 


reply via email to

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