Ethernet for Nucleo and Disco board STM32F746 works with gcc and arm. IAC is untested

Dependents:   STM32F746_iothub_client_sample_mqtt DISCO-F746NG_Ethernet Nucleo_F746ZG_Ethernet thethingsiO-DISCO_F746NG-mqtt ... more

lwip/net/net_decl_lwip.h

Committer:
DieterGraef
Date:
2016-06-23
Revision:
1:28ba13dd96f7
Parent:
0:d26c1b55cfca

File content as of revision 1:28ba13dd96f7:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) Microsoft Corporation.  All rights reserved.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef _NET_DECL_LWIP_H_
#define _NET_DECL_LWIP_H_

#ifndef TCPIP_LWIP
#include <lwip_selector.h>
#endif 

#ifndef TCPIP_LWIP
#error Only include net_decl_lwip.h when using LWIP stack
#endif

#include "network_defines_lwip.h"

#define NO_SYS 0
#define ERRNO  1


#ifdef PLATFORM_DEPENDENT__MEM_SIZE
#define MEM_SIZE PLATFORM_DEPENDENT__MEM_SIZE
#else
#define MEM_SIZE MEM_SIZE__default
#endif

#ifdef PLATFORM_DEPENDENT__MEMP_NUM_PBUF
#define MEMP_NUM_PBUF PLATFORM_DEPENDENT__MEMP_NUM_PBUF
#else
#define MEMP_NUM_PBUF MEMP_NUM_PBUF__default
#endif

#ifdef PLATFORM_DEPENDENT__MEMP_NUM_UDP_PCB
#define MEMP_NUM_UDP_PCB PLATFORM_DEPENDENT__MEMP_NUM_UDP_PCB
#else
#define MEMP_NUM_UDP_PCB MEMP_NUM_UDP_PCB__default
#endif

#ifdef PLATFORM_DEPENDENT__MEMP_NUM_TCP_PCB
#define MEMP_NUM_TCP_PCB PLATFORM_DEPENDENT__MEMP_NUM_TCP_PCB
#else
#define MEMP_NUM_TCP_PCB MEMP_NUM_TCP_PCB__default
#endif

#ifdef PLATFORM_DEPENDENT__MEMP_NUM_TCP_PCB_LISTEN
#define MEMP_NUM_TCP_PCB_LISTEN PLATFORM_DEPENDENT__MEMP_NUM_TCP_PCB_LISTEN
#else
#define MEMP_NUM_TCP_PCB_LISTEN MEMP_NUM_TCP_PCB_LISTEN__default
#endif

#ifdef PLATFORM_DEPENDENT__MEMP_NUM_TCP_SEG
#define MEMP_NUM_TCP_SEG PLATFORM_DEPENDENT__MEMP_NUM_TCP_SEG
#else
#define MEMP_NUM_TCP_SEG MEMP_NUM_TCP_SEG__default
#endif

#ifdef PLATFORM_DEPENDENT__MEMP_NUM_SYS_TIMEOUT
#define MEMP_NUM_SYS_TIMEOUT PLATFORM_DEPENDENT__MEMP_NUM_SYS_TIMEOUT
#else
#define MEMP_NUM_SYS_TIMEOUT MEMP_NUM_SYS_TIMEOUT__default
#endif

#ifdef PLATFORM_DEPENDENT__MEMP_NUM_NETBUF
#define MEMP_NUM_NETBUF PLATFORM_DEPENDENT__MEMP_NUM_NETBUF
#else
#define MEMP_NUM_NETBUF MEMP_NUM_NETBUF__default
#endif

#ifdef PLATFORM_DEPENDENT__MEMP_NUM_NETCONN
#define MEMP_NUM_NETCONN PLATFORM_DEPENDENT__MEMP_NUM_NETCONN
#else
#define MEMP_NUM_NETCONN MEMP_NUM_NETCONN__default
#endif

#ifdef PLATFORM_DEPENDENT__PBUF_POOL_SIZE
#define PBUF_POOL_SIZE PLATFORM_DEPENDENT__PBUF_POOL_SIZE
#else
#define PBUF_POOL_SIZE PBUF_POOL_SIZE__default
#endif

#ifdef PLATFORM_DEPENDENT__PBUF_POOL_BUFSIZE
#define PBUF_POOL_BUFSIZE PLATFORM_DEPENDENT__PBUF_POOL_BUFSIZE
#else
#define PBUF_POOL_BUFSIZE PBUF_POOL_BUFSIZE__default
#endif

#ifdef PLATFORM_DEPENDENT__TCP_MSS
#define TCP_MSS PLATFORM_DEPENDENT__TCP_MSS
#else
#define TCP_MSS TCP_MSS__default
#endif

#ifdef PLATFORM_DEPENDENT__TCP_SND_BUF
#define TCP_SND_BUF PLATFORM_DEPENDENT__TCP_SND_BUF
#else
#define TCP_SND_BUF TCP_SND_BUF__default
#endif

#ifdef PLATFORM_DEPENDENT__TCP_SND_QUEUELEN
#define TCP_SND_QUEUELEN PLATFORM_DEPENDENT__TCP_SND_QUEUELEN
#else
#define TCP_SND_QUEUELEN TCP_SND_QUEUELEN__default
#endif

#ifdef PLATFORM_DEPENDENT__TCP_WND
#define TCP_WND PLATFORM_DEPENDENT__TCP_WND
#else
#define TCP_WND TCP_WND__default
#endif

#ifdef PLATFORM_DEPENDENT__TCP_SNDLOWAT
#define TCP_SNDLOWAT PLATFORM_DEPENDENT__TCP_SNDLOWAT
#else
#define TCP_SNDLOWAT TCP_SNDLOWAT__default
#endif

//--//

/* LWIP options that are the same for all configurations */

/* 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. */
#ifndef MEM_ALIGNMENT
#define MEM_ALIGNMENT           4
#endif

/* These two control whether reclaimer functions should be compiled
   in. Should always be turned on (1). */
#ifndef MEM_RECLAIM
#define MEM_RECLAIM             1
#endif
#ifndef MEMP_RECLAIM
#define MEMP_RECLAIM            1
#endif

#ifndef ETH_PAD_SIZE
#define ETH_PAD_SIZE            0
#endif

/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
   link level header. */
#ifndef PBUF_LINK_HLEN
#define PBUF_LINK_HLEN          (14 + ETH_PAD_SIZE)
#endif

/* ---------- TCP options ---------- */
#ifndef LWIP_TCP
#define LWIP_TCP                1
#endif
#ifndef TCP_TTL
#define TCP_TTL                 255
#endif

#ifndef TCP_OVERSIZE
#define TCP_OVERSIZE            TCP_MSS
#endif

/* Controls if TCP should queue segments that arrive out of
   order. Define to 0 if your device is low on memory. */
#ifndef TCP_QUEUE_OOSEQ
#define TCP_QUEUE_OOSEQ         0
#endif

/* Maximum number of retransmissions of data segments. */
#ifndef TCP_MAXRTX
#define TCP_MAXRTX              6
#endif

/* Maximum number of retransmissions of SYN segments. */
#ifndef TCP_SYNMAXRTX
#define TCP_SYNMAXRTX           4
#endif

/* ---------- ARP options ---------- */
#ifndef ARP_TABLE_SIZE
#define ARP_TABLE_SIZE          10
#endif
#ifndef ARP_QUEUEING
#define ARP_QUEUEING            0
#endif

/* ---------- 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. */
#ifndef IP_FORWARD
#define IP_FORWARD              1
#endif

/* If defined to 1, IP options are allowed (but not parsed). If
   defined to 0, all packets with IP options are dropped. */
#ifndef IP_OPTIONS
#define IP_OPTIONS              1
#endif

/* IP reassembly and segmentation.These are orthogonal even
 * if they both deal with IP fragments */
#ifndef IP_REASSEMBLY
#define IP_REASSEMBLY           1
#endif
#ifndef IP_FRAG
#define IP_FRAG                 1
#endif

/* ---------- ICMP options ---------- */
#ifndef ICMP_TTL
#define ICMP_TTL                255
#endif

/* ---------- DHCP options ---------- */
/* Define LWIP_DHCP to 1 if you want DHCP configuration of
   interfaces. */
#ifndef LWIP_DHCP
#define LWIP_DHCP               1
#endif

/* 1 if you want to do an ARP check on the offered address
   (recommended). */
#ifndef DHCP_DOES_ARP_CHECK
#define DHCP_DOES_ARP_CHECK     0
#endif

/* ---------- UDP options ---------- */
#ifndef LWIP_UDP
#define LWIP_UDP                1
#endif
#ifndef UDP_TTL
#define UDP_TTL                 255
#endif

/* ---------- Statistics options ---------- */
#ifndef LWIP_STATS
#define LWIP_STATS              0
#endif

/** SYS_LIGHTWEIGHT_PROT
 * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task
 * protection for certain critical regions during buffer allocation
 * and deallocation and memory allocation and deallocation.
 */
#ifndef SYS_LIGHTWEIGHT_PROT
#define SYS_LIGHTWEIGHT_PROT    1
#endif

#ifndef LWIP_COMPAT_SOCKETS
#define LWIP_COMPAT_SOCKETS     1
#endif

#ifndef LWIP_PROVIDE_ERRNO
#define LWIP_PROVIDE_ERRNO      1
#endif

/* ---------- SNMP options ---------- */
#ifndef LWIP_SNMP
#define LWIP_SNMP               0 /*LwIP 1.2.0*/
#endif
#ifndef LWIP_IGMP
#define LWIP_IGMP               1 /*LwIP 1.2.0*/
#endif

// thread priorities are in VDK terms - 1 is highest, 30 is lowest
#ifndef TCPIP_THREAD_PRIO
#define TCPIP_THREAD_PRIO       5
#endif
#ifndef DEFAULT_THREAD_PRIO
#define DEFAULT_THREAD_PRIO     10
#endif
#ifndef LOW_THREAD_PRIO
#define LOW_THREAD_PRIO         29
#endif

//--// RAM size estimate macro

#if 0 // TODO - implement similar for LWIP
#define NETWORK_RAM_SIZE_ESTIMATE() (\
    _NETWORK_SIZEOF_NONE + \
    NETWORK_MULTICAST_LIST_SIZE        * (_NETWORK_SIZEOF_MCLISTSIZE) + \
    NETWORK_PACKET_POOL_0__NUM_PACKETS * (NETWORK_PACKET_POOL_0__PACKET_SIZE + _NETWORK_SIZEOF_DCU) + \
    NETWORK_PACKET_POOL_1__NUM_PACKETS * (NETWORK_PACKET_POOL_1__PACKET_SIZE + _NETWORK_SIZEOF_DCU) + \
    NETWORK_PACKET_POOL_2__NUM_PACKETS * (NETWORK_PACKET_POOL_2__PACKET_SIZE + _NETWORK_SIZEOF_DCU) + \
    NETWORK_PACKET_POOL_3__NUM_PACKETS * (NETWORK_PACKET_POOL_3__PACKET_SIZE + _NETWORK_SIZEOF_DCU) + \
    NETWORK_PACKET_POOL_4__NUM_PACKETS * (NETWORK_PACKET_POOL_4__PACKET_SIZE + _NETWORK_SIZEOF_DCU) + \
    NETWORK_PACKET_POOL_5__NUM_PACKETS * (NETWORK_PACKET_POOL_5__PACKET_SIZE + _NETWORK_SIZEOF_DCU) + \
    _NETWORK_TOTAL_PACKET_COUNT        * _NETWORK_SIZEOF_PACKET_OVERHEAD     + \
    NETWORK_NUM_IFACES                 * _NETWORK_SIZEOF_IFACE        + \
    NETWORK_ROUTINGTABLE_SIZE          * _NETWORK_SIZEOF_ROUTINGTABLE + \
    NETWORK_ARP_NUM_TABLE_ENTRIES      * _NETWORK_SIZEOF_ARP_ENTRY    + \
    NETWORK_TCP_NUM_PORTS__SUPPORTED   * _NETWORK_SIZEOF_TCPPORT      + \
    NETWORK_UDP_NUM_PORTS__SUPPORTED   * _NETWORK_SIZEOF_UDPPORT      + \
    NETWORK_FRAG_TABLE_SIZE            * _NETWORK_SIZEOF_FRAG_ENTRY   + \
    NETWORK_NAT_NUM_ENTRIES            * _NETWORK_SIZEOF_NAT_ENTRY )    \

typedef char NETWORK_COMPILE_TIME_ASSERT[NETWORK_MEMORY_POOL__SIZE - NETWORK_RAM_SIZE_ESTIMATE()];
#endif

#endif //_NET_DECL_LWIP_H_