2 * \defgroup uipopt Configuration options for uIP
5 * uIP is configured using the per-project configuration file
6 * "uipopt.h". This file contains all compile-time options for uIP and
7 * should be tweaked to match each specific project. The uIP
8 * distribution contains a documented example "uipopt.h" that can be
9 * copied and modified for each project.
14 * Configuration options for uIP.
15 * \author Adam Dunkels <adam@dunkels.com>
17 * This file is used for tweaking various configuration options for
18 * uIP. You should make a copy of this file into one of your project's
19 * directories instead of editing this example "uipopt.h" file that
20 * comes with the uIP distribution.
24 * Copyright (c) 2001-2003, Adam Dunkels.
25 * All rights reserved.
27 * Redistribution and use in source and binary forms, with or without
28 * modification, are permitted provided that the following conditions
30 * 1. Redistributions of source code must retain the above copyright
31 * notice, this list of conditions and the following disclaimer.
32 * 2. Redistributions in binary form must reproduce the above copyright
33 * notice, this list of conditions and the following disclaimer in the
34 * documentation and/or other materials provided with the distribution.
35 * 3. The name of the author may not be used to endorse or promote
36 * products derived from this software without specific prior
39 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
40 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
41 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
42 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
43 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
44 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
45 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
46 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
47 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
48 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
49 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
51 * This file is part of the uIP TCP/IP stack.
60 /*------------------------------------------------------------------------------*/
62 * \defgroup uipopttypedef uIP type definitions
67 * The 8-bit unsigned data type.
69 * This may have to be tweaked for your particular compiler. "unsigned
70 * char" works for most compilers.
72 typedef unsigned char u8_t;
75 * The 16-bit unsigned data type.
77 * This may have to be tweaked for your particular compiler. "unsigned
78 * short" works for most compilers.
80 typedef unsigned short u16_t;
83 * The statistics data type.
85 * This datatype determines how high the statistics counters are able
88 typedef unsigned short uip_stats_t;
92 /*------------------------------------------------------------------------------*/
95 * \defgroup uipoptstaticconf Static configuration options
98 * These configuration options can be used for setting the IP address
99 * settings statically, but only if UIP_FIXEDADDR is set to 1. The
100 * configuration options for a specific node includes IP address,
101 * netmask and default router as well as the Ethernet address. The
102 * netmask, default router and Ethernet address are appliciable only
103 * if uIP should be run over Ethernet.
105 * All of these should be changed to suit your project.
109 * Determines if uIP should use a fixed IP address or not.
111 * If uIP should use a fixed IP address, the settings are set in the
112 * uipopt.h file. If not, the macros uip_sethostaddr(),
113 * uip_setdraddr() and uip_setnetmask() should be used instead.
117 #define UIP_FIXEDADDR 0
120 * Ping IP address asignment.
122 * uIP uses a "ping" packets for setting its own IP address if this
123 * option is set. If so, uIP will start with an empty IP address and
124 * the destination IP address of the first incoming "ping" (ICMP echo)
125 * packet will be used for setting the hosts IP address.
127 * \note This works only if UIP_FIXEDADDR is 0.
131 #define UIP_PINGADDRCONF 0
133 #define UIP_IPADDR0 0 /**< The first octet of the IP address of
134 this uIP node, if UIP_FIXEDADDR is
135 1. \hideinitializer */
136 #define UIP_IPADDR1 0 /**< The second octet of the IP address of
137 this uIP node, if UIP_FIXEDADDR is
138 1. \hideinitializer */
139 #define UIP_IPADDR2 0 /**< The third octet of the IP address of
140 this uIP node, if UIP_FIXEDADDR is
141 1. \hideinitializer */
142 #define UIP_IPADDR3 0 /**< The fourth octet of the IP address of
143 this uIP node, if UIP_FIXEDADDR is
144 1. \hideinitializer */
146 #define UIP_NETMASK0 0 /**< The first octet of the netmask of
147 this uIP node, if UIP_FIXEDADDR is
148 1. \hideinitializer */
149 #define UIP_NETMASK1 0 /**< The second octet of the netmask of
150 this uIP node, if UIP_FIXEDADDR is
151 1. \hideinitializer */
152 #define UIP_NETMASK2 0 /**< The third octet of the netmask of
153 this uIP node, if UIP_FIXEDADDR is
154 1. \hideinitializer */
155 #define UIP_NETMASK3 0 /**< The fourth octet of the netmask of
156 this uIP node, if UIP_FIXEDADDR is
157 1. \hideinitializer */
159 #define UIP_DRIPADDR0 0 /**< The first octet of the IP address of
160 the default router, if UIP_FIXEDADDR is
161 1. \hideinitializer */
162 #define UIP_DRIPADDR1 0 /**< The second octet of the IP address of
163 the default router, if UIP_FIXEDADDR is
164 1. \hideinitializer */
165 #define UIP_DRIPADDR2 0 /**< The third octet of the IP address of
166 the default router, if UIP_FIXEDADDR is
167 1. \hideinitializer */
168 #define UIP_DRIPADDR3 0 /**< The fourth octet of the IP address of
169 the default router, if UIP_FIXEDADDR is
170 1. \hideinitializer */
173 * Specifies if the uIP ARP module should be compiled with a fixed
174 * Ethernet MAC address or not.
176 * If this configuration option is 0, the macro uip_setethaddr() can
177 * be used to specify the Ethernet address at run-time.
181 #define UIP_FIXEDETHADDR 0
183 #define UIP_ETHADDR0 0x00 /**< The first octet of the Ethernet
184 address if UIP_FIXEDETHADDR is
185 1. \hideinitializer */
186 #define UIP_ETHADDR1 0xbd /**< The second octet of the Ethernet
187 address if UIP_FIXEDETHADDR is
188 1. \hideinitializer */
189 #define UIP_ETHADDR2 0x3b /**< The third octet of the Ethernet
190 address if UIP_FIXEDETHADDR is
191 1. \hideinitializer */
192 #define UIP_ETHADDR3 0x33 /**< The fourth octet of the Ethernet
193 address if UIP_FIXEDETHADDR is
194 1. \hideinitializer */
195 #define UIP_ETHADDR4 0x05 /**< The fifth octet of the Ethernet
196 address if UIP_FIXEDETHADDR is
197 1. \hideinitializer */
198 #define UIP_ETHADDR5 0x71 /**< The sixth octet of the Ethernet
199 address if UIP_FIXEDETHADDR is
200 1. \hideinitializer */
203 /*------------------------------------------------------------------------------*/
205 * \defgroup uipoptip IP configuration options
210 * The IP TTL (time to live) of IP packets sent by uIP.
212 * This should normally not be changed.
217 * Turn on support for IP packet reassembly.
219 * uIP supports reassembly of fragmented IP packets. This features
220 * requires an additonal amount of RAM to hold the reassembly buffer
221 * and the reassembly code size is approximately 700 bytes. The
222 * reassembly buffer is of the same size as the uip_buf buffer
223 * (configured by UIP_BUFSIZE).
225 * \note IP packet reassembly is not heavily tested.
229 #define UIP_REASSEMBLY 0
232 * The maximum time an IP fragment should wait in the reassembly
233 * buffer before it is dropped.
236 #define UIP_REASS_MAXAGE 40
240 /*------------------------------------------------------------------------------*/
242 * \defgroup uipoptudp UDP configuration options
245 * \note The UDP support in uIP is still not entirely complete; there
246 * is no support for sending or receiving broadcast or multicast
247 * packets, but it works well enough to support a number of vital
248 * applications such as DNS queries, though
252 * Toggles wether UDP support should be compiled in or not.
259 * Toggles if UDP checksums should be used or not.
261 * \note Support for UDP checksums is currently not included in uIP,
262 * so this option has no function.
266 #define UIP_UDP_CHECKSUMS 0
269 * The maximum amount of concurrent UDP connections.
273 #define UIP_UDP_CONNS 10
276 * The name of the function that should be called when UDP datagrams arrive.
280 extern void uip_udp_appcall ( void );
281 #define UIP_UDP_APPCALL uip_udp_appcall
284 /*------------------------------------------------------------------------------*/
286 * \defgroup uipopttcp TCP configuration options
291 * Determines if support for opening connections from uIP should be
294 * If the applications that are running on top of uIP for this project
295 * do not need to open outgoing TCP connections, this configration
296 * option can be turned off to reduce the code size of uIP.
300 #define UIP_ACTIVE_OPEN 1
303 * The maximum number of simultaneously open TCP connections.
305 * Since the TCP connections are statically allocated, turning this
306 * configuration knob down results in less RAM used. Each TCP
307 * connection requires approximatly 30 bytes of memory.
314 * The maximum number of simultaneously listening TCP ports.
316 * Each listening TCP port requires 2 bytes of memory.
320 #define UIP_LISTENPORTS 10
323 * The size of the advertised receiver's window.
325 * Should be set low (i.e., to the size of the uip_buf buffer) is the
326 * application is slow to process incoming data, or high (32768 bytes)
327 * if the application processes data quickly.
331 #define UIP_RECEIVE_WINDOW 32768
334 * Determines if support for TCP urgent data notification should be
337 * Urgent data (out-of-band data) is a rarely used TCP feature that
338 * very seldom would be required.
342 #define UIP_URGDATA 1
345 * The initial retransmission timeout counted in timer pulses.
347 * This should not be changed.
352 * The maximum number of times a segment should be retransmitted
353 * before the connection should be aborted.
355 * This should not be changed.
360 * The maximum number of times a SYN segment should be retransmitted
361 * before a connection request should be deemed to have been
364 * This should not need to be changed.
366 #define UIP_MAXSYNRTX 3
369 * The TCP maximum segment size.
371 * This is should not be to set to more than UIP_BUFSIZE - UIP_LLH_LEN - 40.
373 #define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - 40)
376 * How long a connection should stay in the TIME_WAIT state.
378 * This configiration option has no real implication, and it should be
381 #define UIP_TIME_WAIT_TIMEOUT 120
385 /*------------------------------------------------------------------------------*/
387 * \defgroup uipoptarp ARP configuration options
392 * The size of the ARP table.
394 * This option should be set to a larger value if this uIP node will
395 * have many connections from the local network.
399 #define UIP_ARPTAB_SIZE 8
402 * The maxium age of ARP table entries measured in 10ths of seconds.
404 * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD
407 #define UIP_ARP_MAXAGE 120
411 /*------------------------------------------------------------------------------*/
414 * \defgroup uipoptgeneral General configuration options
419 * The size of the uIP packet buffer.
421 * The uIP packet buffer should not be smaller than 60 bytes, and does
422 * not need to be larger than 1500 bytes. Lower size results in lower
423 * TCP throughput, larger size results in higher TCP throughput.
427 #define UIP_BUFSIZE 1500
431 * Determines if statistics support should be compiled in.
433 * The statistics is useful for debugging and to show the user.
437 #define UIP_STATISTICS 0
440 * Determines if logging of certain events should be compiled in.
442 * This is useful mostly for debugging. The function uip_log()
443 * must be implemented to suit the architecture of the project, if
444 * logging is turned on.
448 #define UIP_LOGGING 0
451 * Print out a uIP log message.
453 * This function must be implemented by the module that uses uIP, and
454 * is called by uIP whenever a log message is generated.
456 void uip_log(char *msg);
459 * The link level header length.
461 * This is the offset into the uip_buf where the IP header can be
462 * found. For Ethernet, this should be set to 14. For SLIP, this
463 * should be set to 0.
467 #define UIP_LLH_LEN 14
471 /*------------------------------------------------------------------------------*/
473 * \defgroup uipoptcpu CPU architecture configuration
476 * The CPU architecture configuration is where the endianess of the
477 * CPU on which uIP is to be run is specified. Most CPUs today are
478 * little endian, and the most notable exception are the Motorolas
479 * which are big endian. The BYTE_ORDER macro should be changed to
480 * reflect the CPU architecture on which uIP is to be run.
482 #ifndef LITTLE_ENDIAN
483 #define LITTLE_ENDIAN 3412
484 #endif /* LITTLE_ENDIAN */
486 #define BIG_ENDIAN 1234
487 #endif /* BIGE_ENDIAN */
490 * The byte order of the CPU architecture on which uIP is to be run.
492 * This option can be either BIG_ENDIAN (Motorola byte order) or
493 * LITTLE_ENDIAN (Intel byte order).
498 #define BYTE_ORDER LITTLE_ENDIAN
499 #endif /* BYTE_ORDER */
502 /*------------------------------------------------------------------------------*/
505 * \defgroup uipoptapp Appication specific configurations
508 * An uIP application is implemented using a single application
509 * function that is called by uIP whenever a TCP/IP event occurs. The
510 * name of this function must be registered with uIP at compile time
511 * using the UIP_APPCALL definition.
513 * uIP applications can store the application state within the
514 * uip_conn structure by specifying the size of the application
515 * structure with the UIP_APPSTATE_SIZE macro.
517 * The file containing the definitions must be included in the
520 * The following example illustrates how this can look.
523 void httpd_appcall(void);
524 #define UIP_APPCALL httpd_appcall
532 #define UIP_APPSTATE_SIZE (sizeof(struct httpd_state))
537 * \var #define UIP_APPCALL
539 * The name of the application function that uIP should call in
540 * response to TCP/IP events.
543 extern void uip_tcp_appcall ( void );
544 #define UIP_APPCALL uip_tcp_appcall
547 * \var #define UIP_APPSTATE_SIZE
549 * The size of the application state that is to be stored in the
550 * uip_conn structure.
552 #define UIP_APPSTATE_SIZE sizeof ( void * )
555 /* Include the header file for the application program that should be
556 used. If you don't use the example web server, you should change
561 #endif /* __UIPOPT_H__ */