VirtualBox

source: vbox/trunk/src/VBox/NetworkServices/NAT/lwipopts.h@ 56292

Last change on this file since 56292 was 55993, checked in by vboxsync, 10 years ago

Nat/Net: add svn:keywords property forgotten in r98135.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 6.0 KB
Line 
1/* $Id: lwipopts.h 55993 2015-05-21 04:28:52Z vboxsync $ */
2/** @file
3 * NAT Network - lwIP configuration options.
4 */
5
6/*
7 * Copyright (C) 2013-2014 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef _VBOX_NETNAT_LWIP_OPTS_H_
19#define _VBOX_NETNAT_LWIP_OPTS_H_
20
21#include <iprt/mem.h>
22#include <iprt/alloca.h> /* This may include malloc.h (msc), which is something that has
23 * to be done before redefining any of the functions therein. */
24#include <iprt/rand.h> /* see LWIP_RAND() definition */
25
26/* lwip/sockets.h assumes that if FD_SET is defined (in case of Innotek GCC
27 * its definition is dragged through iprt/types.h) then struct timeval is
28 * defined as well, but it's not the case. So include it manually. */
29#ifdef RT_OS_OS2
30# include <sys/time.h>
31#endif
32
33/** Make lwIP use the libc malloc, or more precisely (see below) the IPRT
34 * memory allocation functions. */
35#define MEM_LIBC_MALLOC 1
36
37/** Set proper memory alignment. */
38#if HC_ARCH_BITS == 64
39# define MEM_ALIGNMENT 8
40#else
41#define MEM_ALIGNMENT 4
42#endif
43
44/* Padding before Ethernet header to make IP header aligned */
45#define ETH_PAD_SIZE 2
46
47/* IP */
48#define IP_REASSEMBLY 1
49#define IP_REASS_MAX_PBUFS 128
50
51
52
53/** Increase maximum TCP window size. */
54#define TCP_WND 32768
55
56/** Increase TCP maximum segment size. */
57#define TCP_MSS 1460
58
59/** Enable queueing of out-of-order segments. */
60#define TCP_QUEUE_OOSEQ 1
61
62/** TCP sender buffer space (bytes). */
63#define TCP_SND_BUF (32 * TCP_MSS)
64
65/* TCP sender buffer space (pbufs). This must be at least = 2 *
66 TCP_SND_BUF/TCP_MSS for things to work. */
67#define TCP_SND_QUEUELEN 128
68
69/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
70 sends a lot of data out of ROM (or other static memory), this
71 should be set high.
72
73 NB: This is for PBUF_ROM and PBUF_REF pbufs only!
74
75 Number of PBUF_POOL pbufs is controlled by PBUF_POOL_SIZE that,
76 somewhat confusingly, breaks MEMP_NUM_* pattern.
77
78 PBUF_RAM pbufs are allocated with mem_malloc (with MEM_LIBC_MALLOC
79 set to 1 this is just system malloc), not memp_malloc. */
80#define MEMP_NUM_PBUF (1024 * 4)
81
82
83/* MEMP_NUM_MLD6_GROUP: Maximum number of IPv6 multicast groups that
84 can be joined.
85
86 We need to be able to join solicited node multicast for each
87 address (potentially different) and two groups for DHCP6. All
88 routers multicast is hardcoded in ip6.c and does not require
89 explicit joining. Provide also for a few extra groups just in
90 case. */
91#define MEMP_NUM_MLD6_GROUP (LWIP_IPV6_NUM_ADDRESSES + /* dhcp6 */ 2 + /* extra */ 8)
92
93
94/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
95 segments. */
96#define MEMP_NUM_TCP_SEG (MEMP_NUM_TCP_PCB * TCP_SND_QUEUELEN / 2)
97
98/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
99 connections. */
100#define MEMP_NUM_TCP_PCB 128
101
102/* MEMP_NUM_TCPIP_MSG_*: the number of struct tcpip_msg, which is used
103 for sequential API communication and incoming packets. Used in
104 src/api/tcpip.c. */
105#define MEMP_NUM_TCPIP_MSG_API 128
106#define MEMP_NUM_TCPIP_MSG_INPKT 1024
107
108/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
109 per active UDP "connection". */
110#define MEMP_NUM_UDP_PCB 32
111
112/* Pbuf options */
113/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
114 This is only for PBUF_POOL pbufs, primarily used by netif drivers.
115
116 This should have been named with the MEMP_NUM_ prefix (cf.
117 MEMP_NUM_PBUF for PBUF_ROM and PBUF_REF) as it controls the size of
118 yet another memp_malloc() pool. */
119#define PBUF_POOL_SIZE (1024 * 4)
120
121/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool.
122 Use default that is based on TCP_MSS and PBUF_LINK_HLEN. */
123#undef PBUF_POOL_BUFSIZE
124
125/** Turn on support for lightweight critical region protection. Leaving this
126 * off uses synchronization code in pbuf.c which is totally polluted with
127 * races. All the other lwip source files would fall back to semaphore-based
128 * synchronization, but pbuf.c is just broken, leading to incorrect allocation
129 * and as a result to assertions due to buffers being double freed. */
130#define SYS_LIGHTWEIGHT_PROT 1
131
132/** Attempt to get rid of htons etc. macro issues. */
133#undef LWIP_PREFIX_BYTEORDER_FUNCS
134
135#define LWIP_TCPIP_CORE_LOCKING_INPUT 0
136#define LWIP_TCPIP_CORE_LOCKING 0
137#define LWIP_TCP 1
138#define LWIP_SOCKET 0
139#define LWIP_ARP 1
140#define ARP_PROXY 1
141#define LWIP_ETHERNET 1
142#define LWIP_COMPAT_SOCKETS 0
143#define LWIP_COMPAT_MUTEX 1
144
145#define LWIP_IPV6 1
146#define LWIP_IPV6_FORWARD 1
147#define LWIP_ND6_PROXY 1
148
149#define LWIP_ND6_ALLOW_RA_UPDATES (!LWIP_IPV6_FORWARD)
150#define LWIP_IPV6_SEND_ROUTER_SOLICIT (!LWIP_IPV6_FORWARD)
151/* IPv6 autoconfig we don't need in proxy, but it required for very seldom cases
152 * iSCSI over intnet with IPv6
153 */
154#define LWIP_IPV6_AUTOCONFIG 1
155#if LWIP_IPV6_FORWARD /* otherwise use the default from lwip/opt.h */
156#define LWIP_IPV6_DUP_DETECT_ATTEMPTS 0
157#endif
158
159#define LWIP_IPV6_FRAG 1
160
161/**
162 * aka Slirp mode.
163 */
164#define LWIP_CONNECTION_PROXY 1
165#define IP_FORWARD 1
166
167/* MEMP_NUM_SYS_TIMEOUT: the number of simultaneously active
168 timeouts. */
169#define MEMP_NUM_SYS_TIMEOUT 16
170
171
172/* this is required for IPv6 and IGMP needs */
173#define LWIP_RAND() RTRandU32()
174
175/* Debugging stuff. */
176#ifdef DEBUG
177# define LWIP_DEBUG
178# include "lwip-log.h"
179
180# define LWIP_PROXY_DEBUG LWIP_DBG_OFF
181#endif /* DEBUG */
182
183/* printf formatter definitions */
184#define U16_F "hu"
185#define S16_F "hd"
186#define X16_F "hx"
187#define U32_F "u"
188#define S32_F "d"
189#define X32_F "x"
190
191/* Redirect libc memory alloc functions to IPRT. */
192#define malloc(x) RTMemAlloc(x)
193#define realloc(x,y) RTMemRealloc((x), (y))
194#define free(x) RTMemFree(x)
195
196#endif /* _VBOX_NETNAT_LWIP_OPTS_H_ */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette