Rev Author Line No. Line
3328 povik 1 /**
2 * \defgroup uipopt Configuration options for uIP
3 * @{
4 *
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.
10 */
11  
12 /**
13 * \file
14 * Configuration options for uIP.
15 * \author Adam Dunkels <adam@dunkels.com>
16 *
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.
21 */
22  
23 /*
24 * Copyright (c) 2001-2003, Adam Dunkels.
25 * All rights reserved.
26 *
27 * Redistribution and use in source and binary forms, with or without
28 * modification, are permitted provided that the following conditions
29 * are met:
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
37 * written permission.
38 *
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.
50 *
51 * This file is part of the uIP TCP/IP stack.
52 *
53 * $Id: uipopt.h,v 1.16.2.5 2003/10/07 13:22:51 adam Exp $
54 *
55 */
56  
57 #ifndef __UIPOPT_H__
58 #define __UIPOPT_H__
59  
60 /*------------------------------------------------------------------------------*/
61 /**
62 * \defgroup uipopttypedef uIP type definitions
63 * @{
64 */
65  
66 /**
67 * The 8-bit unsigned data type.
68 *
69 * This may have to be tweaked for your particular compiler. "unsigned
70 * char" works for most compilers.
71 */
72 typedef unsigned char u8_t;
73  
74 /**
75 * The 16-bit unsigned data type.
76 *
77 * This may have to be tweaked for your particular compiler. "unsigned
78 * short" works for most compilers.
79 */
80 typedef unsigned short u16_t;
81  
82 /**
83 * The statistics data type.
84 *
85 * This datatype determines how high the statistics counters are able
86 * to count.
87 */
88 typedef unsigned short uip_stats_t;
89  
90 /** @} */
91  
92 /*------------------------------------------------------------------------------*/
93  
94 /**
95 * \defgroup uipoptstaticconf Static configuration options
96 * @{
97 *
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.
104 *
105 * All of these should be changed to suit your project.
106 */
107  
108 /**
109 * Determines if uIP should use a fixed IP address or not.
110 *
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.
114 *
115 * \hideinitializer
116 */
117 #define UIP_FIXEDADDR 1
118  
119 /**
120 * Ping IP address asignment.
121 *
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.
126 *
127 * \note This works only if UIP_FIXEDADDR is 0.
128 *
129 * \hideinitializer
130 */
131 #define UIP_PINGADDRCONF 0
132  
133  
134 #define UIP_IPADDR0 192U /**< The first octet of the IP address of
135 this uIP node, if UIP_FIXEDADDR is
136 1. \hideinitializer */
137 #define UIP_IPADDR1 168U /**< The second octet of the IP address of
138 this uIP node, if UIP_FIXEDADDR is
139 1. \hideinitializer */
140 #define UIP_IPADDR2 0U /**< The third octet of the IP address of
141 this uIP node, if UIP_FIXEDADDR is
142 1. \hideinitializer */
143 #define UIP_IPADDR3 8U /**< The fourth octet of the IP address of
144 this uIP node, if UIP_FIXEDADDR is
145 1. \hideinitializer */
146  
147 #define UIP_NETMASK0 255 /**< The first octet of the netmask of
148 this uIP node, if UIP_FIXEDADDR is
149 1. \hideinitializer */
150 #define UIP_NETMASK1 255 /**< The second octet of the netmask of
151 this uIP node, if UIP_FIXEDADDR is
152 1. \hideinitializer */
153 #define UIP_NETMASK2 255 /**< The third octet of the netmask of
154 this uIP node, if UIP_FIXEDADDR is
155 1. \hideinitializer */
156 #define UIP_NETMASK3 0 /**< The fourth octet of the netmask of
157 this uIP node, if UIP_FIXEDADDR is
158 1. \hideinitializer */
159  
160 #define UIP_DRIPADDR0 192 /**< The first octet of the IP address of
161 the default router, if UIP_FIXEDADDR is
162 1. \hideinitializer */
163 #define UIP_DRIPADDR1 168 /**< The second octet of the IP address of
164 the default router, if UIP_FIXEDADDR is
165 1. \hideinitializer */
166 #define UIP_DRIPADDR2 0 /**< The third octet of the IP address of
167 the default router, if UIP_FIXEDADDR is
168 1. \hideinitializer */
169 #define UIP_DRIPADDR3 1 /**< The fourth octet of the IP address of
170 the default router, if UIP_FIXEDADDR is
171 1. \hideinitializer */
172  
173  
174  
175 /**
176 * Specifies if the uIP ARP module should be compiled with a fixed
177 * Ethernet MAC address or not.
178 *
179 * If this configuration option is 0, the macro uip_setethaddr() can
180 * be used to specify the Ethernet address at run-time.
181 *
182 * \hideinitializer
183 */
184 #define UIP_FIXEDETHADDR 1
185  
186 #define UIP_ETHADDR0 0x00 /**< The first octet of the Ethernet
187 address if UIP_FIXEDETHADDR is
188 1. \hideinitializer */
189 #define UIP_ETHADDR1 0x02 /**< The second octet of the Ethernet
190 address if UIP_FIXEDETHADDR is
191 1. \hideinitializer */
192 #define UIP_ETHADDR2 0x04 /**< The third octet of the Ethernet
193 address if UIP_FIXEDETHADDR is
194 1. \hideinitializer */
195 #define UIP_ETHADDR3 0x08 /**< The fourth octet of the Ethernet
196 address if UIP_FIXEDETHADDR is
197 1. \hideinitializer */
198 #define UIP_ETHADDR4 0x0A /**< The fifth octet of the Ethernet
199 address if UIP_FIXEDETHADDR is
200 1. \hideinitializer */
201 #define UIP_ETHADDR5 0x0D /**< The sixth octet of the Ethernet
202 address if UIP_FIXEDETHADDR is
203 1. \hideinitializer */
204  
205 /** @} */
206 /*------------------------------------------------------------------------------*/
207 /**
208 * \defgroup uipoptip IP configuration options
209 * @{
210 *
211 */
212 /**
213 * The IP TTL (time to live) of IP packets sent by uIP.
214 *
215 * This should normally not be changed.
216 */
217 #define UIP_TTL 255
218  
219 /**
220 * Turn on support for IP packet reassembly.
221 *
222 * uIP supports reassembly of fragmented IP packets. This features
223 * requires an additonal amount of RAM to hold the reassembly buffer
224 * and the reassembly code size is approximately 700 bytes. The
225 * reassembly buffer is of the same size as the uip_buf buffer
226 * (configured by UIP_BUFSIZE).
227 *
228 * \note IP packet reassembly is not heavily tested.
229 *
230 * \hideinitializer
231 */
232 #define UIP_REASSEMBLY 1
233  
234 /**
235 * The maximum time an IP fragment should wait in the reassembly
236 * buffer before it is dropped.
237 *
238 */
239 #define UIP_REASS_MAXAGE 40
240  
241 /** @} */
242  
243 /*------------------------------------------------------------------------------*/
244 /**
245 * \defgroup uipoptudp UDP configuration options
246 * @{
247 *
248 * \note The UDP support in uIP is still not entirely complete; there
249 * is no support for sending or receiving broadcast or multicast
250 * packets, but it works well enough to support a number of vital
251 * applications such as DNS queries, though
252 */
253  
254 /**
255 * Toggles wether UDP support should be compiled in or not.
256 *
257 * \hideinitializer
258 */
259 #define UIP_UDP 1
260  
261 /**
262 * Toggles if UDP checksums should be used or not.
263 *
264 * \note Support for UDP checksums is currently not included in uIP,
265 * so this option has no function.
266 *
267 * \hideinitializer
268 */
269 #define UIP_UDP_CHECKSUMS 0
270  
271 /**
272 * The maximum amount of concurrent UDP connections.
273 *
274 * \hideinitializer
275 */
276 #define UIP_UDP_CONNS 2
277  
278 /**
279 * The name of the function that should be called when UDP datagrams arrive.
280 *
281 * \hideinitializer
282 */
283 #define UIP_UDP_APPCALL udp_appcall
284  
285 /** @} */
286 /*------------------------------------------------------------------------------*/
287 /**
288 * \defgroup uipopttcp TCP configuration options
289 * @{
290 */
291  
292 /**
293 * Determines if support for opening connections from uIP should be
294 * compiled in.
295 *
296 * If the applications that are running on top of uIP for this project
297 * do not need to open outgoing TCP connections, this configration
298 * option can be turned off to reduce the code size of uIP.
299 *
300 * \hideinitializer
301 */
302 #define UIP_ACTIVE_OPEN 1
303  
304 /**
305 * The maximum number of simultaneously open TCP connections.
306 *
307 * Since the TCP connections are statically allocated, turning this
308 * configuration knob down results in less RAM used. Each TCP
309 * connection requires approximatly 30 bytes of memory.
310 *
311 * \hideinitializer
312 */
313 #define UIP_CONNS 25
314  
315 /**
316 * The maximum number of simultaneously listening TCP ports.
317 *
318 * Each listening TCP port requires 2 bytes of memory.
319 *
320 * \hideinitializer
321 */
322 #define UIP_LISTENPORTS 10
323  
324 /**
325 * The size of the advertised receiver's window.
326 *
327 * Should be set low (i.e., to the size of the uip_buf buffer) is the
328 * application is slow to process incoming data, or high (32768 bytes)
329 * if the application processes data quickly.
330 *
331 * \hideinitializer
332 */
333 #define UIP_RECEIVE_WINDOW 32768
334  
335 /**
336 * Determines if support for TCP urgent data notification should be
337 * compiled in.
338 *
339 * Urgent data (out-of-band data) is a rarely used TCP feature that
340 * very seldom would be required.
341 *
342 * \hideinitializer
343 */
344 #define UIP_URGDATA 1
345  
346 /**
347 * The initial retransmission timeout counted in timer pulses.
348 *
349 * This should not be changed.
350 */
351 #define UIP_RTO 3
352  
353 /**
354 * The maximum number of times a segment should be retransmitted
355 * before the connection should be aborted.
356 *
357 * This should not be changed.
358 */
359 #define UIP_MAXRTX 8
360  
361 /**
362 * The maximum number of times a SYN segment should be retransmitted
363 * before a connection request should be deemed to have been
364 * unsuccessful.
365 *
366 * This should not need to be changed.
367 */
368 #define UIP_MAXSYNRTX 3
369  
370 /**
371 * The TCP maximum segment size.
372 *
373 * This is should not be to set to more than UIP_BUFSIZE - UIP_LLH_LEN - 40.
374 */
375 #define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - 40)
376  
377 /**
378 * How long a connection should stay in the TIME_WAIT state.
379 *
380 * This configiration option has no real implication, and it should be
381 * left untouched.
382 */
383 #define UIP_TIME_WAIT_TIMEOUT 120
384  
385  
386 /** @} */
387 /*------------------------------------------------------------------------------*/
388 /**
389 * \defgroup uipoptarp ARP configuration options
390 * @{
391 */
392  
393 /**
394 * The size of the ARP table.
395 *
396 * This option should be set to a larger value if this uIP node will
397 * have many connections from the local network.
398 *
399 * \hideinitializer
400 */
401 #define UIP_ARPTAB_SIZE 8
402  
403 /**
404 * The maxium age of ARP table entries measured in 10ths of seconds.
405 *
406 * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD
407 * default).
408 */
409 #define UIP_ARP_MAXAGE 120
410  
411 /** @} */
412  
413 /*------------------------------------------------------------------------------*/
414  
415 /**
416 * \defgroup uipoptgeneral General configuration options
417 * @{
418 */
419  
420 /**
421 * The size of the uIP packet buffer.
422 *
423 * The uIP packet buffer should not be smaller than 60 bytes, and does
424 * not need to be larger than 1500 bytes. Lower size results in lower
425 * TCP throughput, larger size results in higher TCP throughput.
426 *
427 * \hideinitializer
428 */
429 #define UIP_BUFSIZE 1500
430  
431  
432 /**
433 * Determines if statistics support should be compiled in.
434 *
435 * The statistics is useful for debugging and to show the user.
436 *
437 * \hideinitializer
438 */
439 #define UIP_STATISTICS 1
440  
441 /**
442 * Determines if logging of certain events should be compiled in.
443 *
444 * This is useful mostly for debugging. The function uip_log()
445 * must be implemented to suit the architecture of the project, if
446 * logging is turned on.
447 *
448 * \hideinitializer
449 */
450 #define UIP_LOGGING 0
451  
452 /**
453 * Print out a uIP log message.
454 *
455 * This function must be implemented by the module that uses uIP, and
456 * is called by uIP whenever a log message is generated.
457 */
458 void uip_log(char *msg);
459  
460 /**
461 * The link level header length.
462 *
463 * This is the offset into the uip_buf where the IP header can be
464 * found. For Ethernet, this should be set to 14. For SLIP, this
465 * should be set to 0.
466 *
467 * \hideinitializer
468 */
469 #define UIP_LLH_LEN 14
470  
471  
472 /** @} */
473 /*------------------------------------------------------------------------------*/
474 /**
475 * \defgroup uipoptcpu CPU architecture configuration
476 * @{
477 *
478 * The CPU architecture configuration is where the endianess of the
479 * CPU on which uIP is to be run is specified. Most CPUs today are
480 * little endian, and the most notable exception are the Motorolas
481 * which are big endian. The BYTE_ORDER macro should be changed to
482 * reflect the CPU architecture on which uIP is to be run.
483 */
484 #ifndef LITTLE_ENDIAN
485 #define LITTLE_ENDIAN 3412
486 #endif /* LITTLE_ENDIAN */
487 #ifndef BIG_ENDIAN
488 #define BIG_ENDIAN 1234
489 #endif /* BIGE_ENDIAN */
490  
491 /**
492 * The byte order of the CPU architecture on which uIP is to be run.
493 *
494 * This option can be either BIG_ENDIAN (Motorola byte order) or
495 * LITTLE_ENDIAN (Intel byte order).
496 *
497 * \hideinitializer
498 */
499 #ifndef BYTE_ORDER
500 #define BYTE_ORDER LITTLE_ENDIAN
501 #endif /* BYTE_ORDER */
502  
503 /** @} */
504 /*------------------------------------------------------------------------------*/
505  
506 /**
507 * \defgroup uipoptapp Appication specific configurations
508 * @{
509 *
510 * An uIP application is implemented using a single application
511 * function that is called by uIP whenever a TCP/IP event occurs. The
512 * name of this function must be registered with uIP at compile time
513 * using the UIP_APPCALL definition.
514 *
515 * uIP applications can store the application state within the
516 * uip_conn structure by specifying the size of the application
517 * structure with the UIP_APPSTATE_SIZE macro.
518 *
519 * The file containing the definitions must be included in the
520 * uipopt.h file.
521 *
522 * The following example illustrates how this can look.
523 \code
524  
525 void httpd_appcall(void);
526 #define UIP_APPCALL httpd_appcall
527  
528 struct httpd_state {
529 u8_t state;
530 u16_t count;
531 char *dataptr;
532 char *script;
533 };
534 #define UIP_APPSTATE_SIZE (sizeof(struct httpd_state))
535 \endcode
536 */
537  
538 /**
539 * \var #define UIP_APPCALL
540 *
541 * The name of the application function that uIP should call in
542 * response to TCP/IP events.
543 *
544 */
545  
546 /**
547 * \var #define UIP_APPSTATE_SIZE
548 *
549 * The size of the application state that is to be stored in the
550 * uip_conn structure.
551 */
552 /** @} */
553  
554 /* Include the header file for the application program that should be
555 used. If you don't use the example web server, you should change
556 this. */
557 #include "httpd.h"
558  
559  
560 #endif /* __UIPOPT_H__ */