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> http://www.squires-eng.com

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

 

 

 

From: [email protected]
[mailto:[email protected]] On Behalf Of
[email protected]
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
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users

 

_______________________________________________
lwip-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to