Warning, cross-references for /kernel/lwip/core/init.c need to be fixed.
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 #include "lwip/opt.h"
0040
0041 #include "lwip/init.h"
0042 #include "lwip/stats.h"
0043 #include "lwip/sys.h"
0044 #include "lwip/mem.h"
0045 #include "lwip/memp.h"
0046 #include "lwip/pbuf.h"
0047 #include "lwip/netif.h"
0048 #include "lwip/sockets.h"
0049 #include "lwip/ip.h"
0050 #include "lwip/raw.h"
0051 #include "lwip/udp.h"
0052 #include "lwip/tcp.h"
0053 #include "lwip/snmp_msg.h"
0054 #include "lwip/autoip.h"
0055 #include "lwip/igmp.h"
0056 #include "lwip/dns.h"
0057 #include "netif/etharp.h"
0058
0059
0060
0061
0062 #ifndef BYTE_ORDER
0063 #error "BYTE_ORDER is not defined, you have to define it in your cc.h"
0064 #endif
0065 #if (!IP_SOF_BROADCAST && IP_SOF_BROADCAST_RECV)
0066 #error "If you want to use broadcast filter per pcb on recv operations, you have to define IP_SOF_BROADCAST=1 in your lwipopts.h"
0067 #endif
0068 #if (!LWIP_ARP && ARP_QUEUEING)
0069 #error "If you want to use ARP Queueing, you have to define LWIP_ARP=1 in your lwipopts.h"
0070 #endif
0071 #if (!LWIP_UDP && LWIP_UDPLITE)
0072 #error "If you want to use UDP Lite, you have to define LWIP_UDP=1 in your lwipopts.h"
0073 #endif
0074 #if (!LWIP_UDP && LWIP_SNMP)
0075 #error "If you want to use SNMP, you have to define LWIP_UDP=1 in your lwipopts.h"
0076 #endif
0077 #if (!LWIP_UDP && LWIP_DHCP)
0078 #error "If you want to use DHCP, you have to define LWIP_UDP=1 in your lwipopts.h"
0079 #endif
0080 #if (!LWIP_UDP && LWIP_IGMP)
0081 #error "If you want to use IGMP, you have to define LWIP_UDP=1 in your lwipopts.h"
0082 #endif
0083 #if (!LWIP_UDP && LWIP_DNS)
0084 #error "If you want to use DNS, you have to define LWIP_UDP=1 in your lwipopts.h"
0085 #endif
0086 #if (LWIP_ARP && (ARP_TABLE_SIZE > 0x7f))
0087 #error "If you want to use ARP, ARP_TABLE_SIZE must fit in an s8_t, so, you have to reduce it in your lwipopts.h"
0088 #endif
0089 #if (LWIP_ARP && ARP_QUEUEING && (MEMP_NUM_ARP_QUEUE<=0))
0090 #error "If you want to use ARP Queueing, you have to define MEMP_NUM_ARP_QUEUE>=1 in your lwipopts.h"
0091 #endif
0092 #if (LWIP_RAW && (MEMP_NUM_RAW_PCB<=0))
0093 #error "If you want to use RAW, you have to define MEMP_NUM_RAW_PCB>=1 in your lwipopts.h"
0094 #endif
0095 #if (LWIP_UDP && (MEMP_NUM_UDP_PCB<=0))
0096 #error "If you want to use UDP, you have to define MEMP_NUM_UDP_PCB>=1 in your lwipopts.h"
0097 #endif
0098 #if (LWIP_TCP && (MEMP_NUM_TCP_PCB<=0))
0099 #error "If you want to use TCP, you have to define MEMP_NUM_TCP_PCB>=1 in your lwipopts.h"
0100 #endif
0101 #if (LWIP_TCP && (TCP_WND > 0xffff))
0102 #error "If you want to use TCP, TCP_WND must fit in an u16_t, so, you have to reduce it in your lwipopts.h"
0103 #endif
0104 #if (LWIP_TCP && (TCP_SND_QUEUELEN > 0xffff))
0105 #error "If you want to use TCP, TCP_SND_QUEUELEN must fit in an u16_t, so, you have to reduce it in your lwipopts.h"
0106 #endif
0107 #if (LWIP_TCP && ((TCP_MAXRTX > 12) || (TCP_SYNMAXRTX > 12)))
0108 #error "If you want to use TCP, TCP_MAXRTX and TCP_SYNMAXRTX must less or equal to 12 (due to tcp_backoff table), so, you have to reduce them in your lwipopts.h"
0109 #endif
0110 #if (LWIP_TCP && TCP_LISTEN_BACKLOG && (TCP_DEFAULT_LISTEN_BACKLOG < 0) || (TCP_DEFAULT_LISTEN_BACKLOG > 0xff))
0111 #error "If you want to use TCP backlog, TCP_DEFAULT_LISTEN_BACKLOG must fit into an u8_t"
0112 #endif
0113 #if (LWIP_IGMP && (MEMP_NUM_IGMP_GROUP<=1))
0114 #error "If you want to use IGMP, you have to define MEMP_NUM_IGMP_GROUP>1 in your lwipopts.h"
0115 #endif
0116 #if (PPP_SUPPORT && (NO_SYS==1))
0117 #error "If you want to use PPP, you have to define NO_SYS=0 in your lwipopts.h"
0118 #endif
0119 #if (LWIP_NETIF_API && (NO_SYS==1))
0120 #error "If you want to use NETIF API, you have to define NO_SYS=0 in your lwipopts.h"
0121 #endif
0122 #if ((LWIP_SOCKET || LWIP_NETCONN) && (NO_SYS==1))
0123 #error "If you want to use Sequential API, you have to define NO_SYS=0 in your lwipopts.h"
0124 #endif
0125 #if ((LWIP_NETCONN || LWIP_SOCKET) && (MEMP_NUM_TCPIP_MSG_API<=0))
0126 #error "If you want to use Sequential API, you have to define MEMP_NUM_TCPIP_MSG_API>=1 in your lwipopts.h"
0127 #endif
0128 #if (!LWIP_NETCONN && LWIP_SOCKET)
0129 #error "If you want to use Socket API, you have to define LWIP_NETCONN=1 in your lwipopts.h"
0130 #endif
0131 #if (((!LWIP_DHCP) || (!LWIP_AUTOIP)) && LWIP_DHCP_AUTOIP_COOP)
0132 #error "If you want to use DHCP/AUTOIP cooperation mode, you have to define LWIP_DHCP=1 and LWIP_AUTOIP=1 in your lwipopts.h"
0133 #endif
0134 #if (((!LWIP_DHCP) || (!LWIP_ARP)) && DHCP_DOES_ARP_CHECK)
0135 #error "If you want to use DHCP ARP checking, you have to define LWIP_DHCP=1 and LWIP_ARP=1 in your lwipopts.h"
0136 #endif
0137 #if (!LWIP_ARP && LWIP_AUTOIP)
0138 #error "If you want to use AUTOIP, you have to define LWIP_ARP=1 in your lwipopts.h"
0139 #endif
0140 #if (LWIP_SNMP && (SNMP_CONCURRENT_REQUESTS<=0))
0141 #error "If you want to use SNMP, you have to define SNMP_CONCURRENT_REQUESTS>=1 in your lwipopts.h"
0142 #endif
0143 #if (LWIP_SNMP && (SNMP_TRAP_DESTINATIONS<=0))
0144 #error "If you want to use SNMP, you have to define SNMP_TRAP_DESTINATIONS>=1 in your lwipopts.h"
0145 #endif
0146 #if (LWIP_TCP && ((LWIP_EVENT_API && LWIP_CALLBACK_API) || (!LWIP_EVENT_API && !LWIP_CALLBACK_API)))
0147 #error "One and exactly one of LWIP_EVENT_API and LWIP_CALLBACK_API has to be enabled in your lwipopts.h"
0148 #endif
0149
0150 #if ((NO_SYS==0) && (MEMP_NUM_SYS_TIMEOUT < (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT)))
0151 #error "MEMP_NUM_SYS_TIMEOUT is too low to accomodate all required timeouts"
0152 #endif
0153 #if (IP_REASSEMBLY && (MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS))
0154 #error "MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS doesn't make sense since each struct ip_reassdata must hold 2 pbufs at least!"
0155 #endif
0156 #if (MEM_LIBC_MALLOC && MEM_USE_POOLS)
0157 #error "MEM_LIBC_MALLOC and MEM_USE_POOLS may not both be simultaneously enabled in your lwipopts.h"
0158 #endif
0159 #if (MEM_USE_POOLS && !MEMP_USE_CUSTOM_POOLS)
0160 #error "MEM_USE_POOLS requires custom pools (MEMP_USE_CUSTOM_POOLS) to be enabled in your lwipopts.h"
0161 #endif
0162 #if (PBUF_POOL_BUFSIZE <= MEM_ALIGNMENT)
0163 #error "PBUF_POOL_BUFSIZE must be greater than MEM_ALIGNMENT or the offset may take the full first pbuf"
0164 #endif
0165 #if (TCP_QUEUE_OOSEQ && !LWIP_TCP)
0166 #error "TCP_QUEUE_OOSEQ requires LWIP_TCP"
0167 #endif
0168 #if (DNS_LOCAL_HOSTLIST && !DNS_LOCAL_HOSTLIST_IS_DYNAMIC && !(defined(DNS_LOCAL_HOSTLIST_INIT)))
0169 #error "you have to define define DNS_LOCAL_HOSTLIST_INIT {{'host1', 0x123}, {'host2', 0x234}} to initialize DNS_LOCAL_HOSTLIST"
0170 #endif
0171 #if PPP_SUPPORT && !PPPOS_SUPPORT & !PPPOE_SUPPORT
0172 #error "PPP_SUPPORT needs either PPPOS_SUPPORT or PPPOE_SUPPORT turned on"
0173 #endif
0174
0175
0176
0177
0178 #ifdef MEMP_NUM_TCPIP_MSG
0179 #error "MEMP_NUM_TCPIP_MSG option is deprecated. Remove it from your lwipopts.h."
0180 #endif
0181 #ifdef MEMP_NUM_API_MSG
0182 #error "MEMP_NUM_API_MSG option is deprecated. Remove it from your lwipopts.h."
0183 #endif
0184 #ifdef TCP_REXMIT_DEBUG
0185 #error "TCP_REXMIT_DEBUG option is deprecated. Remove it from your lwipopts.h."
0186 #endif
0187 #ifdef RAW_STATS
0188 #error "RAW_STATS option is deprecated. Remove it from your lwipopts.h."
0189 #endif
0190 #ifdef ETHARP_QUEUE_FIRST
0191 #error "ETHARP_QUEUE_FIRST option is deprecated. Remove it from your lwipopts.h."
0192 #endif
0193 #ifdef ETHARP_ALWAYS_INSERT
0194 #error "ETHARP_ALWAYS_INSERT option is deprecated. Remove it from your lwipopts.h."
0195 #endif
0196 #if SO_REUSE
0197
0198
0199 #error "SO_REUSE currently unavailable, this was a hack"
0200 #endif
0201
0202 #ifdef LWIP_DEBUG
0203 static void
0204 lwip_sanity_check(void)
0205 {
0206
0207 #if LWIP_NETCONN
0208 if (MEMP_NUM_NETCONN > (MEMP_NUM_TCP_PCB+MEMP_NUM_TCP_PCB_LISTEN+MEMP_NUM_UDP_PCB+MEMP_NUM_RAW_PCB))
0209 LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: MEMP_NUM_NETCONN should be less than the sum of MEMP_NUM_{TCP,RAW,UDP}_PCB+MEMP_NUM_TCP_PCB_LISTEN\n"));
0210 #endif
0211 #if LWIP_TCP
0212 if (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN)
0213 LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN\n"));
0214 if (TCP_SND_BUF < 2 * TCP_MSS)
0215 LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SND_BUF must be at least as much as (2 * TCP_MSS) for things to work smoothly\n"));
0216 if (TCP_SND_QUEUELEN < (2 * (TCP_SND_BUF/TCP_MSS)))
0217 LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SND_QUEUELEN must be at least as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work\n"));
0218 if (TCP_SNDLOWAT > TCP_SND_BUF)
0219 LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SNDLOWAT must be less than or equal to TCP_SND_BUF.\n"));
0220 if (TCP_WND > (PBUF_POOL_SIZE*PBUF_POOL_BUFSIZE))
0221 LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_WND is larger than space provided by PBUF_POOL_SIZE*PBUF_POOL_BUFSIZE\n"));
0222 if (TCP_WND < TCP_MSS)
0223 LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_WND is smaller than MSS\n"));
0224 #endif
0225 }
0226 #else
0227 #define lwip_sanity_check()
0228 #endif
0229
0230
0231
0232
0233 void
0234 lwip_init(void)
0235 {
0236
0237 lwip_sanity_check();
0238
0239
0240 stats_init();
0241 sys_init();
0242 mem_init();
0243 memp_init();
0244 pbuf_init();
0245 netif_init();
0246 #if LWIP_SOCKET
0247 lwip_socket_init();
0248 #endif
0249 ip_init();
0250 #if LWIP_ARP
0251 etharp_init();
0252 #endif
0253 #if LWIP_RAW
0254 raw_init();
0255 #endif
0256 #if LWIP_UDP
0257 udp_init();
0258 #endif
0259 #if LWIP_TCP
0260 tcp_init();
0261 #endif
0262 #if LWIP_SNMP
0263 snmp_init();
0264 #endif
0265 #if LWIP_AUTOIP
0266 autoip_init();
0267 #endif
0268 #if LWIP_IGMP
0269 igmp_init();
0270 #endif
0271 #if LWIP_DNS
0272 dns_init();
0273 #endif
0274 }