Paul Archer | 1 Sep 2011 02:41
Picon

hajot@...)

On Tue, Aug 30, 2011 at 10:13 PM, Kieran Mansley <kieran@...> wrote:
> If you have the time to add a brief "getting started with PPP" guide to
> the lwIP wiki, it would be much appreciated as this seems to be a common
> problem.

Done
http://lwip.wikia.com/wiki/PPP#PPP_from_an_application_perspective

I hope that is in the correct place. if anyone wants to have a read an
comment/fix any mistakes feel free to.
I might add a section on debugging PPP (as it can be hard to know if
you got the username/password correct)

--

-- 
----
Regards
Paul Archer
ptarcher@...
vincent cui | 1 Sep 2011 05:16

Re: FreeRTOS / lwip multiple connections

H chiston:

 

I redesign my webserver to support mult-connection.  I create a new task to deal with HTTP request, it will delete it by itself.

The main task will go to accept new connection.

 

Vincent Cui
Sr.Firmware Engineer
Mobile: +8613482482211
Tel: +86 21 34612525x6104
Fax: +86 21 34619770
E-Mail: vincent.cui <at> enlogic.com
Shanghai EnLogic Electric Technology Co., Ltd.
Address: 1104-1106, Building A, No.391, Guiping Road, Xuhui District, Shanghai, 200233
http://www.enlogic.com

 

From: lwip-users-bounces+vincent.cui=enlogic.com <at> nongnu.org [mailto:lwip-users-bounces+vincent.cui=enlogic.com <at> nongnu.org] On Behalf Of Christoph Kronen
Sent: 2011
830 15:31
To: Mailing list for lwIP users
Subject: Re: [lwip-users] FreeRTOS / lwip multiple connections

 

Hi Vincent,

I changed the receiving process to be nonblocking, it wasn't like this in the first place. The code below has the same entry point as your "vHandler_HTTP(__pstNewConn);", it gets called when the connection is already established.

My problem was the following: I needed to check for new data received via Ethernet as well as new data from a Sendqueue in the same task. So netconn_recv() could not be blocking. In another topic, Simon Goldschmitt suggested to use lwIP 1.3.1 and to set "LWIP_SO_RCVTIMEO" to make netconn_recv() nonblocking. Unfortunately this crashed my Sam7X all the time.

So what I do now, is to peek into the receive mailbox and only if there is data I start the netconn_recv() process. Probably horrible programming, but it works for now.

Richard suggested to use semaphores on TCP events, that sounds much cleaner and I will definitely try to do it that way. But then I would need a FreeRTOS function like "WaitForMultipleObjects", since the Task needs to wake up for either a TCP event semaphore OR a new element in my SendQueue.

The CommandInterpreter from Richards socket example (thanks !) works for my Sam7X and I am in the process of rewriting it to have the same functionality as the code below.

<at> Vincent: You said your webserver is able to have multiple connections, could you give me a tip on that ? Do you have a small code example for "multiconnection socket" part ?

Thank you very much,

Christoph

static void vProcessSpeedtest( struct netconn *pxNetCon )
{
struct netbuf *pxRxBuffer;
struct pbuf *dummybuffer;
unsigned char *pcRxString;
xTCP_TXBuff * TXPointer = 0;
unsigned short usLength;
    while (1)
    {
        // Peek into the Receive mailbox
        if ( pdTRUE == xQueuePeek((pxNetCon->recvmbox),&dummybuffer,0))
        {
            pxRxBuffer = netconn_recv( pxNetCon );
            if( pxRxBuffer != NULL )
            {
                do
                {
                    netbuf_data( pxRxBuffer, ( void * ) &pcRxString, &usLength );
                  
                    //use the incoming data at this point

                }   while ( netbuf_next(pxRxBuffer) >=0 );
                netbuf_delete( pxRxBuffer );
            }
            else break;
        }
        // Check the Transmit Queue for Data and send it
        if ( xQueueReceive( xTXPointerQueue, &TXPointer, 0 ))
        {
            netconn_write(pxNetCon, TXPointer->data, TXPointer->length, NETCONN_NOFLAG);
            vFreeTCPBuffer(TXPointer);
        }
        vTaskDelay( 1 / portTICK_RATE_MS );
    }
    netconn_close( pxNetCon );
}



-------- Original-Nachricht --------
Datum: Tue, 30 Aug 2011 03:28:07 +0000
Von: vincent cui <vincent.cui <at> enlogic.com>
An: Mailing list for lwIP users <lwip-users <at> nongnu.org>
Betreff: Re: [lwip-users] FreeRTOS / lwip multiple connections

Hi Chistoph:

 

 

 

 

 

 

The "lwIP Embedded Webserver Demo" is what I took as a starting point. I removed the webserver functionality, now I have a task that

 

 

  • checks for incoming data (nonblocking)

 

  • checks a Queue for outgoing data (nonblocking)

 

  • wait 1 ms (to prevent 100% cpu usage)

 

  • repeat :-)

 

 

 

the LwIP webserver demo code is following, I don’t know how do  you infer it is noblocking for incoming data and outgoing ….

 

 

Where to wait 1 ms .

 

 

 

 

void  WebServer_Handler(void *pdata)

 

 

{

 

 

         struct netconn  *__pstConn, *__pstNewConn;

 

 

                                                       

 

 

    __pstConn = netconn_new(NETCONN_TCP);

 

 

    netconn_bind(__pstConn, NULL,80);

 

 

    netconn_listen(__pstConn);

 

 

 

 

         for(;;)

 

 

         {

 

 

                   __pstNewConn = netconn_accept(__pstConn);

 

 

                  

 

 

                   if(__pstNewConn != NULL)

 

 

                   {                          

 

 

                            vHandler_HTTP(__pstNewConn);

 

 

                            while(netconn_delete(__pstNewConn) != ERR_OK)

 

 

                            {

 

 

                                     vTaskDelay(10);

 

 

                            }

 

 

                   }

 

 

    }

 

 

}

 

 

 

 

 

 

 

 

Vincent Cui
Sr.Firmware Engineer
Mobile: +8613482482211
Tel: +86 21 34612525x6104
Fax: +86 21 34619770
E-Mail: vincent.cui <at> enlogic.com

Shanghai EnLogic Electric Technology Co., Ltd.
Address: 1104-1106, Building A, No.391, Guiping Road, Xuhui District, Shanghai, 200233
http://www.enlogic.com

 

 

 

 

 

From: lwip-users-bounces+vincent.cui=enlogic.com <at> nongnu.org [mailto:lwip-users-bounces+vincent.cui=enlogic.com <at> nongnu.org] On Behalf Of Christoph Kronen
Sent: 2011
829 0:48
To: lwip-users <at> nongnu.org
Subject: [lwip-users] FreeRTOS / lwip multiple connections

 

 

 

 

Hi all,

I am using FreeRTOS 7.0.1 on a Sam7X512 and upgraded the contributed port lwIP 1.3.0 to 1.3.2.

The "lwIP Embedded Webserver Demo" is what I took as a starting point. I removed the webserver functionality, now I have a task that

 

 

  • checks for incoming data (nonblocking)

 

  • checks a Queue for outgoing data (nonblocking)

 

  • wait 1 ms (to prevent 100% cpu usage)

 

  • repeat :-)

 


This works pretty well, I get around 1400 kbyte/s RX and TX.
Now to my question: Is it possible/difficult/easy to transform this functionality to accept multiple connections on the same port ? At the moment I am using the netconn API, so I guess I have to switch to the Socket API ?

I read through Richards thread on his "FreeRTOS/lwip Win32 simulator" project and it sounds as if it is quite difficult to have multiple connections in a multithreaded environment. Unfortunately I could not find other helpful topics or contributed examples.

I am rather new to FreeRTOS and lwIP, so please excuse me if I am missing something obvious :-)

Please give me some comments / suggestions / tips / pushes into the right direction.

Thank you very much !

Christoph

 

 

_______________________________________________
lwip-users mailing list
lwip-users@...
https://lists.nongnu.org/mailman/listinfo/lwip-users
Wolfgang Stich | 1 Sep 2011 08:41
Favicon

DHCP works but ping doesn't reply

Hi

 

I’ve a strange problem, I am using FreeRTOS 4.7.2 with lwIP 1.3.2 (or better I try to upgrade from lwIP 1.2.0 to 1.3.2) based on a AVR32. I am using AVR32 Software Framework and its sys_arch port. I’ll get a IP from the dhcp server but I can’t ping the device (no reply). lwIP Stats show me, there have been some proterr occurred.

 

Here are my lwIP Options:

 

/*This file has been prepared for Doxygen automatic documentation generation.*/

/*! \file *********************************************************************

*

* \brief lwIP configuration for AVR32 UC3.

*

* - Compiler:           GNU GCC for AVR32

* - Supported devices:  All AVR32 devices can be used.

* - AppNote:

*

* \author               Atmel Corporation: http://www.atmel.com \n

*                       Support and FAQ: http://support.atmel.no/

*

*****************************************************************************/

 

/* Copyright (c) 2009 Atmel Corporation. All rights reserved.

*

* Redistribution and use in source and binary forms, with or without

* modification, are permitted provided that the following conditions are met:

*

* 1. Redistributions of source code must retain the above copyright notice, this

* list of conditions and the following disclaimer.

*

* 2. Redistributions in binary form must reproduce the above copyright notice,

* this list of conditions and the following disclaimer in the documentation

* and/or other materials provided with the distribution.

*

* 3. The name of Atmel may not be used to endorse or promote products derived

* from this software without specific prior written permission.

*

* 4. This software may only be redistributed and used in connection with an Atmel

* AVR product.

*

* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED

* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF

* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE

* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR

* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND

* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS

* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE

*

*/

#ifndef __LWIPOPTS_H__

#define __LWIPOPTS_H__

 

/* Include user defined options first */

// #include "conf_eth.h"

#include <ethernet_resource.h>

#include "lwip/debug.h"

#include "tracedump.h"

 

#undef LWIP_PLATFORM_DIAG

#define LWIP_PLATFORM_DIAG(x)   //NAKED_TRACE_COM2 x

#undef LWIP_PLATFORM_ASSERT

#define LWIP_PLATFORM_ASSERT(x)   //NAKED_TRACE_COM2(x)

 

 

/* Define default values for unconfigured parameters. */

#define LWIP_NOASSERT 1 // To suppress some errors for now (no debug output)

 

/* Platform specific locking */

 

/*

* enable SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection

* for certain critical regions during buffer allocation, deallocation and memory

* allocation and deallocation.

*/

#define SYS_LIGHTWEIGHT_PROT            1

 

/* ---------- Memory options ---------- */

 

/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which

   lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2

   byte alignment -> define MEM_ALIGNMENT to 2. */

#define MEM_ALIGNMENT                   4

 

/* MEM_SIZE: the size of the heap memory. If the application will send

a lot of data that needs to be copied, this should be set high. */

#define MEM_SIZE                        4 * 1024

 

/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application

   sends a lot of data out of ROM (or other static memory), this

   should be set high. */

#define MEMP_NUM_PBUF                   4

 

/* Number of raw connection PCBs */

#define MEMP_NUM_RAW_PCB                0

 

#if (TFTP_USED == 1)

  /* ---------- UDP options ---------- */

  #define LWIP_UDP                1

  #define UDP_TTL                 255

  /* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One

     per active UDP "connection". */

  #define MEMP_NUM_UDP_PCB        1

#else

  /* ---------- UDP options ---------- */

  #define LWIP_UDP                1

  #define UDP_TTL                 255

  /* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One

     per active UDP "connection". */

  #define MEMP_NUM_UDP_PCB        2

#endif

/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP

   connections. */

#define MEMP_NUM_TCP_PCB                10

/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP

   connections. */

#define MEMP_NUM_TCP_PCB_LISTEN         8

/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP

   segments. */

#define MEMP_NUM_TCP_SEG                8

/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active

   timeouts. */

#define MEMP_NUM_SYS_TIMEOUT            8

 

/* The following four are used only with the sequential API and can be

   set to 0 if the application only will use the raw API. */

/* MEMP_NUM_NETBUF: the number of struct netbufs. */

#define MEMP_NUM_NETBUF                 12

/* MEMP_NUM_NETCONN: the number of struct netconns. */

#define MEMP_NUM_NETCONN                12

 

 

/* ---------- Pbuf options ---------- */

/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */

 

#define PBUF_POOL_SIZE                  10

 

/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */

 

#define PBUF_POOL_BUFSIZE               512

 

/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a

   link level header. Defaults to 14 for Ethernet. */

 

#define PBUF_LINK_HLEN                  14

 

 

/**

* DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a

* NETCONN_RAW. The queue size value itself is platform-dependent, but is passed

* to sys_mbox_new() when the recvmbox is created.

*/

#define DEFAULT_RAW_RECVMBOX_SIZE       6

 

/**

* DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a

* NETCONN_UDP. The queue size value itself is platform-dependent, but is passed

* to sys_mbox_new() when the recvmbox is created.

*/

#define DEFAULT_UDP_RECVMBOX_SIZE       6

 

/**

* DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a

* NETCONN_TCP. The queue size value itself is platform-dependent, but is passed

* to sys_mbox_new() when the recvmbox is created.

*/

#define DEFAULT_TCP_RECVMBOX_SIZE       6

 

 

/**

* DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections.

* The queue size value itself is platform-dependent, but is passed to

* sys_mbox_new() when the acceptmbox is created.

*/

#define DEFAULT_ACCEPTMBOX_SIZE         6

 

/* ---------- ARP options ---------- */

 

/** Number of active hardware address, IP address pairs cached */

#define ARP_TABLE_SIZE                  5

 

/**

* If enabled, outgoing packets are queued during hardware address

* resolution.

*

* This feature has not stabilized yet. Single-packet queueing is

* believed to be stable, multi-packet queueing is believed to

* clash with the TCP segment queueing.

*

* As multi-packet-queueing is currently disabled, enabling this

* _should_ work, but we need your testing feedback on lwip-users.

*

*/

#undef  ARP_QUEUEING

// #define  ARP_QUEUEING   0

 

 

/* ---------- IP options ---------- */

/* Define IP_FORWARD to 1 if you wish to have the ability to forward

   IP packets across network interfaces. If you are going to run lwIP

   on a device with only one network interface, define this to 0. */

#define IP_FORWARD                      0

 

/* If defined to 1, IP options are allowed (but not parsed). If

   defined to 0, all packets with IP options are dropped. */

#define IP_OPTIONS                      1

 

/** IP reassembly and segmentation. Even if they both deal with IP

*  fragments, note that these are orthogonal, one dealing with incoming

*  packets, the other with outgoing packets

*/

 

/** Reassemble incoming fragmented IP packets */

#define IP_REASSEMBLY                   0

 

 

/* ---------- ICMP options ---------- */

 

#define ICMP_TTL                        255

 

/* ---------- RAW options ---------- */

 

#define LWIP_RAW                        0

 

//#define RAW_TTL                        (IP_DEFAULT_TTL)

 

/* ---------- DHCP options ---------- */

 

#define LWIP_DHCP                       1

 

/* 1 if you want to do an ARP check on the offered address

   (recommended). */

#define DHCP_DOES_ARP_CHECK             1

 

/* ---------- SNMP options ---------- */

 

 

/* ---------- TCP options ---------- */

#define LWIP_TCP                        1

 

#define TCP_TTL                         255

 

#define TCP_WND                         2048

 

 

/* Controls if TCP should queue segments that arrive out of

   order. Define to 0 if your device is low on memory. */

#define TCP_QUEUE_OOSEQ                 1

 

/* TCP Maximum segment size. */

#define TCP_MSS                         1024

 

/* TCP sender buffer space (bytes). */

#define TCP_SND_BUF                     2048

 

/* TCP sender buffer space (pbufs). This must be at least = 2 *

   TCP_SND_BUF/TCP_MSS for things to work. */

#define TCP_SND_QUEUELEN                6 * TCP_SND_BUF/TCP_MSS

 

 

/* Maximum number of retransmissions of data segments. */

#define TCP_MAXRTX                      6

 

/* Maximum number of retransmissions of SYN segments. */

#define TCP_SYNMAXRTX                   6

 

 

/*

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

   ---------- Thread options ----------

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

*/

/**

* TCPIP_THREAD_NAME: The name assigned to the main tcpip thread.

*/

#define TCPIP_THREAD_NAME              "TCP/IP"

 

/**

* TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread.

* The stack size value itself is platform-dependent, but is passed to

* sys_thread_new() when the thread is created.

*/

#define TCPIP_THREAD_STACKSIZE          lwipINTERFACE_STACK_SIZE

 

/**

* TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread.

* The priority value itself is platform-dependent, but is passed to

* sys_thread_new() when the thread is created.

*/

#define TCPIP_THREAD_PRIO               lwipINTERFACE_TASK_PRIORITY

 

/**

* TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages

* The queue size value itself is platform-dependent, but is passed to

* sys_mbox_new() when tcpip_init is called.

*/

#define TCPIP_MBOX_SIZE                 6

 

 

/**

* DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread.

* The stack size value itself is platform-dependent, but is passed to

* sys_thread_new() when the thread is created.

*/

#define DEFAULT_THREAD_STACKSIZE        configMINIMAL_STACK_SIZE

 

 

 

/* ---------- Socket Options ---------- */

 

#ifdef __GNUC__

// Do not use the lwip timeval structure.

#define LWIP_TIMEVAL_PRIVATE            0

// Use the gnu libc struct timeval instead.

#include <sys/time.h>

#endif

 

 

/* ---------- Statistics options ---------- */

#define LWIP_STATS                1

 

#define LWIP_STATS_DISPLAY        0

 

#if LWIP_STATS

 

#define LINK_STATS  1

#define IP_STATS    1

#define ICMP_STATS  1

#define UDP_STATS   1

#define TCP_STATS   1

#define MEM_STATS   1

#define MEMP_STATS  1

#define PBUF_STATS  1

#define SYS_STATS   1

#endif /* LWIP_STATS */

 

/* ---------- PPP options ---------- */

 

 

/* ---------- Lwip Debug options ---------- */

 

#undef LWIP_DEBUG

 

 

 

#define DBG_TYPES_ON                    0xff

 

#define ETHARP_DEBUG                    DBG_OFF

 

#define NETIF_DEBUG                     DBG_OFF

 

#define PBUF_DEBUG                      DBG_ON

 

#define API_LIB_DEBUG                   DBG_OFF

 

#define API_MSG_DEBUG                   DBG_ON

 

#define SOCKETS_DEBUG                   DBG_OFF

 

#define ICMP_DEBUG                      DBG_OFF

 

#define INET_DEBUG                      DBG_OFF

 

#define IP_DEBUG                        DBG_OFF

 

#define IP_REASS_DEBUG                  DBG_OFF

 

#define RAW_DEBUG                       DBG_OFF

 

#define MEM_DEBUG                       DBG_OFF

 

#define MEMP_DEBUG                      DBG_OFF

 

#define SYS_DEBUG                       DBG_OFF

 

#define TCP_DEBUG                       DBG_ON

 

#define TCP_INPUT_DEBUG                 DBG_OFF

 

#define TCP_FR_DEBUG                    DBG_OFF

 

#define TCP_RTO_DEBUG                   DBG_OFF

 

#define TCP_CWND_DEBUG                  DBG_OFF

 

#define TCP_WND_DEBUG                   DBG_OFF

 

#define TCP_OUTPUT_DEBUG                DBG_OFF

 

#define TCP_RST_DEBUG                   DBG_OFF

 

#define TCP_QLEN_DEBUG                  DBG_OFF

 

#define UDP_DEBUG                       DBG_OFF

 

#define TCPIP_DEBUG                     DBG_OFF

 

#define DBG_MIN_LEVEL                   LWIP_DBG_LEVEL_SEVERE

 

 

// \note For a list of all possible lwIP configurations, check http://lwip.wikia.com/wiki/Lwipopts.h

 

#endif /* __LWIPOPTS_H__ */

 

 

 

My ICMP options:

 

/*

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

   ---------- ICMP options ----------

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

*/

/**

* LWIP_ICMP==1: Enable ICMP module inside the IP stack.

* Be careful, disable that make your product non-compliant to RFC1122

*/

#ifndef LWIP_ICMP

#define LWIP_ICMP                       1

#endif

 

/**

* ICMP_TTL: Default value for Time-To-Live used by ICMP packets.

*/

#ifndef ICMP_TTL

#define ICMP_TTL                       (IP_DEFAULT_TTL)

#endif

 

/**

* LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only)

*/

#ifndef LWIP_BROADCAST_PING

#define LWIP_BROADCAST_PING             1

#endif

 

/**

* LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only)

*/

#ifndef LWIP_MULTICAST_PING

#define LWIP_MULTICAST_PING             1

#endif

 

 

 

_______________________________________________
lwip-users mailing list
lwip-users@...
https://lists.nongnu.org/mailman/listinfo/lwip-users
vincent cui | 1 Sep 2011 08:50

Re: DHCP works but ping doesn't reply

Please make sure ICMP is enable

 

Vincent Cui
Sr.Firmware Engineer
Mobile: +8613482482211
Tel: +86 21 34612525x6104
Fax: +86 21 34619770
E-Mail: vincent.cui <at> enlogic.com
Shanghai EnLogic Electric Technology Co., Ltd.
Address: 1104-1106, Building A, No.391, Guiping Road, Xuhui District, Shanghai, 200233
http://www.enlogic.com

 

From: lwip-users-bounces+vincent.cui=enlogic.com-qX2TKyscuCcdnm+yROfE0A@public.gmane.org [mailto:lwip-users-bounces+vincent.cui=enlogic.com-qX2TKyscuCcdnm+yROfE0A@public.gmane.org] On Behalf Of Wolfgang Stich
Sent: 2011
91 14:42
To: lwip-users-qX2TKyscuCcdnm+yROfE0A@public.gmane.org
Subject: [lwip-users] DHCP works but ping doesn't reply

 

Hi

 

I’ve a strange problem, I am using FreeRTOS 4.7.2 with lwIP 1.3.2 (or better I try to upgrade from lwIP 1.2.0 to 1.3.2) based on a AVR32. I am using AVR32 Software Framework and its sys_arch port. I’ll get a IP from the dhcp server but I can’t ping the device (no reply). lwIP Stats show me, there have been some proterr occurred.

 

Here are my lwIP Options:

 

/*This file has been prepared for Doxygen automatic documentation generation.*/

/*! \file *********************************************************************

*

* \brief lwIP configuration for AVR32 UC3.

*

* - Compiler:           GNU GCC for AVR32

* - Supported devices:  All AVR32 devices can be used.

* - AppNote:

*

* \author               Atmel Corporation: http://www.atmel.com \n

*                       Support and FAQ: http://support.atmel.no/

*

*****************************************************************************/

 

/* Copyright (c) 2009 Atmel Corporation. All rights reserved.

*

* Redistribution and use in source and binary forms, with or without

* modification, are permitted provided that the following conditions are met:

*

* 1. Redistributions of source code must retain the above copyright notice, this

* list of conditions and the following disclaimer.

*

* 2. Redistributions in binary form must reproduce the above copyright notice,

* this list of conditions and the following disclaimer in the documentation

* and/or other materials provided with the distribution.

*

* 3. The name of Atmel may not be used to endorse or promote products derived

* from this software without specific prior written permission.

*

* 4. This software may only be redistributed and used in connection with an Atmel

* AVR product.

*

* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED

* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF

* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE

* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR

* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND

* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS

* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE

*

*/

#ifndef __LWIPOPTS_H__

#define __LWIPOPTS_H__

 

/* Include user defined options first */

// #include "conf_eth.h"

#include <ethernet_resource.h>

#include "lwip/debug.h"

#include "tracedump.h"

 

#undef LWIP_PLATFORM_DIAG

#define LWIP_PLATFORM_DIAG(x)   //NAKED_TRACE_COM2 x

#undef LWIP_PLATFORM_ASSERT

#define LWIP_PLATFORM_ASSERT(x)   //NAKED_TRACE_COM2(x)

 

 

/* Define default values for unconfigured parameters. */

#define LWIP_NOASSERT 1 // To suppress some errors for now (no debug output)

 

/* Platform specific locking */

 

/*

* enable SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection

* for certain critical regions during buffer allocation, deallocation and memory

* allocation and deallocation.

*/

#define SYS_LIGHTWEIGHT_PROT            1

 

/* ---------- Memory options ---------- */

 

/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which

   lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2

   byte alignment -> define MEM_ALIGNMENT to 2. */

#define MEM_ALIGNMENT                   4

 

/* MEM_SIZE: the size of the heap memory. If the application will send

a lot of data that needs to be copied, this should be set high. */

#define MEM_SIZE                        4 * 1024

 

/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application

   sends a lot of data out of ROM (or other static memory), this

   should be set high. */

#define MEMP_NUM_PBUF                   4

 

/* Number of raw connection PCBs */

#define MEMP_NUM_RAW_PCB                0

 

#if (TFTP_USED == 1)

  /* ---------- UDP options ---------- */

  #define LWIP_UDP                1

  #define UDP_TTL                 255

  /* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One

     per active UDP "connection". */

  #define MEMP_NUM_UDP_PCB        1

#else

  /* ---------- UDP options ---------- */

  #define LWIP_UDP                1

  #define UDP_TTL                 255

  /* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One

     per active UDP "connection". */

  #define MEMP_NUM_UDP_PCB        2

#endif

/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP

   connections. */

#define MEMP_NUM_TCP_PCB                10

/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP

   connections. */

#define MEMP_NUM_TCP_PCB_LISTEN         8

/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP

   segments. */

#define MEMP_NUM_TCP_SEG                8

/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active

   timeouts. */

#define MEMP_NUM_SYS_TIMEOUT            8

 

/* The following four are used only with the sequential API and can be

   set to 0 if the application only will use the raw API. */

/* MEMP_NUM_NETBUF: the number of struct netbufs. */

#define MEMP_NUM_NETBUF                 12

/* MEMP_NUM_NETCONN: the number of struct netconns. */

#define MEMP_NUM_NETCONN                12

 

 

/* ---------- Pbuf options ---------- */

/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */

 

#define PBUF_POOL_SIZE                  10

 

/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */

 

#define PBUF_POOL_BUFSIZE               512

 

/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a

   link level header. Defaults to 14 for Ethernet. */

 

#define PBUF_LINK_HLEN                  14

 

 

/**

* DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a

* NETCONN_RAW. The queue size value itself is platform-dependent, but is passed

* to sys_mbox_new() when the recvmbox is created.

*/

#define DEFAULT_RAW_RECVMBOX_SIZE       6

 

/**

* DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a

* NETCONN_UDP. The queue size value itself is platform-dependent, but is passed

* to sys_mbox_new() when the recvmbox is created.

*/

#define DEFAULT_UDP_RECVMBOX_SIZE       6

 

/**

* DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a

* NETCONN_TCP. The queue size value itself is platform-dependent, but is passed

* to sys_mbox_new() when the recvmbox is created.

*/

#define DEFAULT_TCP_RECVMBOX_SIZE       6

 

 

/**

* DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections.

* The queue size value itself is platform-dependent, but is passed to

* sys_mbox_new() when the acceptmbox is created.

*/

#define DEFAULT_ACCEPTMBOX_SIZE         6

 

/* ---------- ARP options ---------- */

 

/** Number of active hardware address, IP address pairs cached */

#define ARP_TABLE_SIZE                  5

 

/**

* If enabled, outgoing packets are queued during hardware address

* resolution.

*

* This feature has not stabilized yet. Single-packet queueing is

* believed to be stable, multi-packet queueing is believed to

* clash with the TCP segment queueing.

*

* As multi-packet-queueing is currently disabled, enabling this

* _should_ work, but we need your testing feedback on lwip-users.

*

*/

#undef  ARP_QUEUEING

// #define  ARP_QUEUEING   0

 

 

/* ---------- IP options ---------- */

/* Define IP_FORWARD to 1 if you wish to have the ability to forward

   IP packets across network interfaces. If you are going to run lwIP

   on a device with only one network interface, define this to 0. */

#define IP_FORWARD                      0

 

/* If defined to 1, IP options are allowed (but not parsed). If

   defined to 0, all packets with IP options are dropped. */

#define IP_OPTIONS                      1

 

/** IP reassembly and segmentation. Even if they both deal with IP

*  fragments, note that these are orthogonal, one dealing with incoming

*  packets, the other with outgoing packets

*/

 

/** Reassemble incoming fragmented IP packets */

#define IP_REASSEMBLY                   0

 

 

/* ---------- ICMP options ---------- */

 

#define ICMP_TTL                        255

 

/* ---------- RAW options ---------- */

 

#define LWIP_RAW                        0

 

//#define RAW_TTL                        (IP_DEFAULT_TTL)

 

/* ---------- DHCP options ---------- */

 

#define LWIP_DHCP                       1

 

/* 1 if you want to do an ARP check on the offered address

   (recommended). */

#define DHCP_DOES_ARP_CHECK             1

 

/* ---------- SNMP options ---------- */

 

 

/* ---------- TCP options ---------- */

#define LWIP_TCP                        1

 

#define TCP_TTL                         255

 

#define TCP_WND                         2048

 

 

/* Controls if TCP should queue segments that arrive out of

   order. Define to 0 if your device is low on memory. */

#define TCP_QUEUE_OOSEQ                 1

 

/* TCP Maximum segment size. */

#define TCP_MSS                         1024

 

/* TCP sender buffer space (bytes). */

#define TCP_SND_BUF                     2048

 

/* TCP sender buffer space (pbufs). This must be at least = 2 *

   TCP_SND_BUF/TCP_MSS for things to work. */

#define TCP_SND_QUEUELEN                6 * TCP_SND_BUF/TCP_MSS

 

 

/* Maximum number of retransmissions of data segments. */

#define TCP_MAXRTX                      6

 

/* Maximum number of retransmissions of SYN segments. */

#define TCP_SYNMAXRTX                   6

 

 

/*

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

   ---------- Thread options ----------

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

*/

/**

* TCPIP_THREAD_NAME: The name assigned to the main tcpip thread.

*/

#define TCPIP_THREAD_NAME              "TCP/IP"

 

/**

* TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread.

* The stack size value itself is platform-dependent, but is passed to

* sys_thread_new() when the thread is created.

*/

#define TCPIP_THREAD_STACKSIZE          lwipINTERFACE_STACK_SIZE

 

/**

* TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread.

* The priority value itself is platform-dependent, but is passed to

* sys_thread_new() when the thread is created.

*/

#define TCPIP_THREAD_PRIO               lwipINTERFACE_TASK_PRIORITY

 

/**

* TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages

* The queue size value itself is platform-dependent, but is passed to

* sys_mbox_new() when tcpip_init is called.

*/

#define TCPIP_MBOX_SIZE                 6

 

 

/**

* DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread.

* The stack size value itself is platform-dependent, but is passed to

* sys_thread_new() when the thread is created.

*/

#define DEFAULT_THREAD_STACKSIZE        configMINIMAL_STACK_SIZE

 

 

 

/* ---------- Socket Options ---------- */

 

#ifdef __GNUC__

// Do not use the lwip timeval structure.

#define LWIP_TIMEVAL_PRIVATE            0

// Use the gnu libc struct timeval instead.

#include <sys/time.h>

#endif

 

 

/* ---------- Statistics options ---------- */

#define LWIP_STATS                1

 

#define LWIP_STATS_DISPLAY        0

 

#if LWIP_STATS

 

#define LINK_STATS  1

#define IP_STATS    1

#define ICMP_STATS  1

#define UDP_STATS   1

#define TCP_STATS   1

#define MEM_STATS   1

#define MEMP_STATS  1

#define PBUF_STATS  1

#define SYS_STATS   1

#endif /* LWIP_STATS */

 

/* ---------- PPP options ---------- */

 

 

/* ---------- Lwip Debug options ---------- */

 

#undef LWIP_DEBUG

 

 

 

#define DBG_TYPES_ON                    0xff

 

#define ETHARP_DEBUG                    DBG_OFF

 

#define NETIF_DEBUG                     DBG_OFF

 

#define PBUF_DEBUG                      DBG_ON

 

#define API_LIB_DEBUG                   DBG_OFF

 

#define API_MSG_DEBUG                   DBG_ON

 

#define SOCKETS_DEBUG                   DBG_OFF

 

#define ICMP_DEBUG                      DBG_OFF

 

#define INET_DEBUG                      DBG_OFF

 

#define IP_DEBUG                        DBG_OFF

 

#define IP_REASS_DEBUG                  DBG_OFF

 

#define RAW_DEBUG                       DBG_OFF

 

#define MEM_DEBUG                       DBG_OFF

 

#define MEMP_DEBUG                      DBG_OFF

 

#define SYS_DEBUG                       DBG_OFF

 

#define TCP_DEBUG                       DBG_ON

 

#define TCP_INPUT_DEBUG                 DBG_OFF

 

#define TCP_FR_DEBUG                    DBG_OFF

 

#define TCP_RTO_DEBUG                   DBG_OFF

 

#define TCP_CWND_DEBUG                  DBG_OFF

 

#define TCP_WND_DEBUG                   DBG_OFF

 

#define TCP_OUTPUT_DEBUG                DBG_OFF

 

#define TCP_RST_DEBUG                   DBG_OFF

 

#define TCP_QLEN_DEBUG                  DBG_OFF

 

#define UDP_DEBUG                       DBG_OFF

 

#define TCPIP_DEBUG                     DBG_OFF

 

#define DBG_MIN_LEVEL                   LWIP_DBG_LEVEL_SEVERE

 

 

// \note For a list of all possible lwIP configurations, check http://lwip.wikia.com/wiki/Lwipopts.h

 

#endif /* __LWIPOPTS_H__ */

 

 

 

My ICMP options:

 

/*

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

   ---------- ICMP options ----------

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

*/

/**

* LWIP_ICMP==1: Enable ICMP module inside the IP stack.

* Be careful, disable that make your product non-compliant to RFC1122

*/

#ifndef LWIP_ICMP

#define LWIP_ICMP                       1

#endif

 

/**

* ICMP_TTL: Default value for Time-To-Live used by ICMP packets.

*/

#ifndef ICMP_TTL

#define ICMP_TTL                       (IP_DEFAULT_TTL)

#endif

 

/**

* LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only)

*/

#ifndef LWIP_BROADCAST_PING

#define LWIP_BROADCAST_PING             1

#endif

 

/**

* LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only)

*/

#ifndef LWIP_MULTICAST_PING

#define LWIP_MULTICAST_PING             1

#endif

 

 

 

_______________________________________________
lwip-users mailing list
lwip-users@...
https://lists.nongnu.org/mailman/listinfo/lwip-users
Wolfgang Stich | 1 Sep 2011 09:12
Favicon

Re: DHCP works but ping doesn't reply (vincent cui)

Furthermore, i realized, no socket connection works, but dhcp works?

My ICMP options:

/*
   ----------------------------------
   ---------- ICMP options ----------
   ----------------------------------
*/
/**
* LWIP_ICMP==1: Enable ICMP module inside the IP stack.
* Be careful, disable that make your product non-compliant to RFC1122
*/
#ifndef LWIP_ICMP
#define LWIP_ICMP                       1
#endif

/**
* ICMP_TTL: Default value for Time-To-Live used by ICMP packets.
*/
#ifndef ICMP_TTL
#define ICMP_TTL                       (IP_DEFAULT_TTL)
#endif

/**
* LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only)
*/
#ifndef LWIP_BROADCAST_PING
#define LWIP_BROADCAST_PING             1
#endif

/**
* LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only)
*/
#ifndef LWIP_MULTICAST_PING
#define LWIP_MULTICAST_PING             1
#endif
vincent cui | 1 Sep 2011 09:13

Re: DHCP works but ping doesn't reply (vincent cui)

That's possible...
I use freertros and lwIP 1.3.2 too. It works well 

锘?Vincent Cui
Sr.Firmware Engineer
Mobile: +8613482482211
Tel: +86 21 34612525x6104
Fax: +86 21 34619770
E-Mail: vincent.cui <at> enlogic.com
Shanghai EnLogic Electric Technology Co., Ltd.
Address: 1104-1106, Building A, No.391, Guiping Road, Xuhui District, Shanghai, 200233
http://www.enlogic.com

-----Original Message-----
From: lwip-users-bounces+vincent.cui=enlogic.com <at> nongnu.org
[mailto:lwip-users-bounces+vincent.cui=enlogic.com <at> nongnu.org] On Behalf Of Wolfgang Stich
Sent: 2011年9月1日 15:13
To: lwip-users <at> nongnu.org
Subject: Re: [lwip-users] DHCP works but ping doesn't reply (vincent cui)

Furthermore, i realized, no socket connection works, but dhcp works?

My ICMP options:

/*
   ----------------------------------
   ---------- ICMP options ----------
   ----------------------------------
*/
/**
* LWIP_ICMP==1: Enable ICMP module inside the IP stack.
* Be careful, disable that make your product non-compliant to RFC1122
*/
#ifndef LWIP_ICMP
#define LWIP_ICMP                       1
#endif

/**
* ICMP_TTL: Default value for Time-To-Live used by ICMP packets.
*/
#ifndef ICMP_TTL
#define ICMP_TTL                       (IP_DEFAULT_TTL)
#endif

/**
* LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only)
*/
#ifndef LWIP_BROADCAST_PING
#define LWIP_BROADCAST_PING             1
#endif

/**
* LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only)
*/
#ifndef LWIP_MULTICAST_PING
#define LWIP_MULTICAST_PING             1
#endif

_______________________________________________
lwip-users mailing list
lwip-users <at> nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

_______________________________________________
lwip-users mailing list
lwip-users <at> nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users
Simon Goldschmidt | 1 Sep 2011 09:28
Picon
Picon

Re: lwip tcp hangup

vincent cui <vincent.cui <at> enlogic.com> wrote:
> Does the backlog parameter in lwIP_listen works? 
> It mean the max connection number at same time. Right ?

Here's what the standard says about the backlog parameter:

"The backlog argument provides a hint to the implementation which the 
implementation shall use to limit the number of outstanding connections in 
the socket's listen queue."

To us, this always meant that the backlog is the number of connections that are accepted internally
(SYN-ACK sent) and not yet received by the application code (using accept()).

What you want (number of connections to one port) is a different thing. You'd have to implement it manually
by either closing the listening port and reopening it later or by closing all new connections when your
maximum number of parallel connections is reached.

Simon
--

-- 
NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie!		
Jetzt informieren: http://www.gmx.net/de/go/freephone

_______________________________________________
lwip-users mailing list
lwip-users <at> nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users
vincent cui | 1 Sep 2011 09:32

Re: lwip tcp hangup

Actually, I find http request is done one by one. New connection will setup after old connection closed. 
I wonder to know, how lwIP does mult connection .

锘?Vincent Cui
Sr.Firmware Engineer
Mobile: +8613482482211
Tel: +86 21 34612525x6104
Fax: +86 21 34619770
E-Mail: vincent.cui <at> enlogic.com
Shanghai EnLogic Electric Technology Co., Ltd.
Address: 1104-1106, Building A, No.391, Guiping Road, Xuhui District, Shanghai, 200233
http://www.enlogic.com


-----Original Message-----
From: lwip-users-bounces+vincent.cui=enlogic.com <at> nongnu.org
[mailto:lwip-users-bounces+vincent.cui=enlogic.com <at> nongnu.org] On Behalf Of Simon Goldschmidt
Sent: 2011年9月1日 15:29
To: Mailing list for lwIP users
Subject: Re: [lwip-users] lwip tcp hangup

vincent cui <vincent.cui <at> enlogic.com> wrote:
> Does the backlog parameter in lwIP_listen works? 
> It mean the max connection number at same time. Right ?

Here's what the standard says about the backlog parameter:

"The backlog argument provides a hint to the implementation which the 
implementation shall use to limit the number of outstanding connections in 
the socket's listen queue."

To us, this always meant that the backlog is the number of connections that are accepted internally
(SYN-ACK sent) and not yet received by the application code (using accept()).

What you want (number of connections to one port) is a different thing. You'd have to implement it manually
by either closing the listening port and reopening it later or by closing all new connections when your
maximum number of parallel connections is reached.

Simon
-- 
NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie!		
Jetzt informieren: http://www.gmx.net/de/go/freephone


_______________________________________________
lwip-users mailing list
lwip-users <at> nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

_______________________________________________
lwip-users mailing list
lwip-users <at> nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users
Simon Goldschmidt | 1 Sep 2011 09:58
Picon
Picon

Re: lwip tcp hangup

vincent cui <vincent.cui <at> enlogic.com> wrote:
> Actually, I find http request is done one by one. New connection will
> setup after old connection closed. 
> I wonder to know, how lwIP does mult connection .

I'm afraid I don't understand what you're asking??

Simon
--

-- 
NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie!		
Jetzt informieren: http://www.gmx.net/de/go/freephone

_______________________________________________
lwip-users mailing list
lwip-users <at> nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users
Simon Goldschmidt | 1 Sep 2011 10:09
Picon
Picon

Re: lwip tcp hangup

vincent cui <vincent.cui@...> wrote:
> I mean I don't make lwIP do mult connection, it always deal with
> connection  one by one

lwIP certainly allows multiple parallel connections, but I don't understand what you mean by "making lwIP
do mult connection".

Simon
--

-- 
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de

Gmane