Network API now allows for multiple network devices (although the
[people/oremanj/gpxe.git] / src / proto / uip / uipopt.h
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$
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    0
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 #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 */
145
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 */
158
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 */
171
172 /**
173  * Specifies if the uIP ARP module should be compiled with a fixed
174  * Ethernet MAC address or not.
175  *
176  * If this configuration option is 0, the macro uip_setethaddr() can
177  * be used to specify the Ethernet address at run-time.
178  *
179  * \hideinitializer
180  */
181 #define UIP_FIXEDETHADDR 0
182
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 */
201
202 /** @} */
203 /*------------------------------------------------------------------------------*/
204 /**
205  * \defgroup uipoptip IP configuration options
206  * @{
207  *
208  */
209 /**
210  * The IP TTL (time to live) of IP packets sent by uIP.
211  *
212  * This should normally not be changed.
213  */
214 #define UIP_TTL         255
215
216 /**
217  * Turn on support for IP packet reassembly.
218  *
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).
224  *
225  * \note IP packet reassembly is not heavily tested.
226  *
227  * \hideinitializer
228  */
229 #define UIP_REASSEMBLY 0
230
231 /**
232  * The maximum time an IP fragment should wait in the reassembly
233  * buffer before it is dropped.
234  *
235  */
236 #define UIP_REASS_MAXAGE 40
237
238 /** @} */
239
240 /*------------------------------------------------------------------------------*/
241 /**
242  * \defgroup uipoptudp UDP configuration options
243  * @{
244  *
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
249  */
250
251 /**
252  * Toggles wether UDP support should be compiled in or not.
253  *
254  * \hideinitializer
255  */
256 #define UIP_UDP           1
257
258 /**
259  * Toggles if UDP checksums should be used or not.
260  *
261  * \note Support for UDP checksums is currently not included in uIP,
262  * so this option has no function.
263  *
264  * \hideinitializer
265  */
266 #define UIP_UDP_CHECKSUMS 0
267
268 /**
269  * The maximum amount of concurrent UDP connections.
270  *
271  * \hideinitializer
272  */
273 #define UIP_UDP_CONNS    10
274
275 /**
276  * The name of the function that should be called when UDP datagrams arrive.
277  *
278  * \hideinitializer
279  */
280 extern void uip_udp_appcall ( void );
281 #define UIP_UDP_APPCALL  uip_udp_appcall
282
283 /** @} */
284 /*------------------------------------------------------------------------------*/
285 /**
286  * \defgroup uipopttcp TCP configuration options
287  * @{
288  */
289
290 /**
291  * Determines if support for opening connections from uIP should be
292  * compiled in.
293  *
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.
297  *
298  * \hideinitializer
299  */
300 #define UIP_ACTIVE_OPEN 1
301
302 /**
303  * The maximum number of simultaneously open TCP connections.
304  *
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.
308  *
309  * \hideinitializer
310  */
311 #define UIP_CONNS       10
312
313 /**
314  * The maximum number of simultaneously listening TCP ports.
315  *
316  * Each listening TCP port requires 2 bytes of memory.
317  *
318  * \hideinitializer
319  */
320 #define UIP_LISTENPORTS 10
321
322 /**
323  * The size of the advertised receiver's window.
324  *
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.
328  *
329  * \hideinitializer
330  */
331 #define UIP_RECEIVE_WINDOW   32768
332
333 /**
334  * Determines if support for TCP urgent data notification should be
335  * compiled in.
336  *
337  * Urgent data (out-of-band data) is a rarely used TCP feature that
338  * very seldom would be required.
339  *
340  * \hideinitializer
341  */
342 #define UIP_URGDATA      1
343
344 /**
345  * The initial retransmission timeout counted in timer pulses.
346  *
347  * This should not be changed.
348  */
349 #define UIP_RTO         3
350
351 /**
352  * The maximum number of times a segment should be retransmitted
353  * before the connection should be aborted.
354  *
355  * This should not be changed.
356  */
357 #define UIP_MAXRTX      8
358
359 /**
360  * The maximum number of times a SYN segment should be retransmitted
361  * before a connection request should be deemed to have been
362  * unsuccessful.
363  *
364  * This should not need to be changed.
365  */
366 #define UIP_MAXSYNRTX      3
367
368 /**
369  * The TCP maximum segment size.
370  *
371  * This is should not be to set to more than UIP_BUFSIZE - UIP_LLH_LEN - 40.
372  */
373 #define UIP_TCP_MSS     (UIP_BUFSIZE - UIP_LLH_LEN - 40)
374
375 /**
376  * How long a connection should stay in the TIME_WAIT state.
377  *
378  * This configiration option has no real implication, and it should be
379  * left untouched.
380  */ 
381 #define UIP_TIME_WAIT_TIMEOUT 120
382
383
384 /** @} */
385 /*------------------------------------------------------------------------------*/
386 /**
387  * \defgroup uipoptarp ARP configuration options
388  * @{
389  */
390
391 /**
392  * The size of the ARP table.
393  *
394  * This option should be set to a larger value if this uIP node will
395  * have many connections from the local network.
396  *
397  * \hideinitializer
398  */
399 #define UIP_ARPTAB_SIZE 8
400
401 /**
402  * The maxium age of ARP table entries measured in 10ths of seconds.
403  *
404  * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD
405  * default).
406  */
407 #define UIP_ARP_MAXAGE 120
408
409 /** @} */
410
411 /*------------------------------------------------------------------------------*/
412
413 /**
414  * \defgroup uipoptgeneral General configuration options
415  * @{
416  */
417
418 /**
419  * The size of the uIP packet buffer.
420  *
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.
424  *
425  * \hideinitializer
426  */
427 #define UIP_BUFSIZE     1500
428
429
430 /**
431  * Determines if statistics support should be compiled in.
432  *
433  * The statistics is useful for debugging and to show the user.
434  *
435  * \hideinitializer
436  */
437 #define UIP_STATISTICS  0
438
439 /**
440  * Determines if logging of certain events should be compiled in.
441  *
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.
445  *
446  * \hideinitializer
447  */
448 #define UIP_LOGGING     0
449
450 /**
451  * Print out a uIP log message.
452  *
453  * This function must be implemented by the module that uses uIP, and
454  * is called by uIP whenever a log message is generated.
455  */
456 void uip_log(char *msg);
457
458 /**
459  * The link level header length.
460  *
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.
464  *
465  * \hideinitializer
466  */
467 #define UIP_LLH_LEN     0
468
469
470 /** @} */
471 /*------------------------------------------------------------------------------*/
472 /**
473  * \defgroup uipoptcpu CPU architecture configuration
474  * @{
475  *
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.
481  */
482 #ifndef LITTLE_ENDIAN
483 #define LITTLE_ENDIAN  3412
484 #endif /* LITTLE_ENDIAN */
485 #ifndef BIG_ENDIAN
486 #define BIG_ENDIAN     1234
487 #endif /* BIGE_ENDIAN */
488
489 /**
490  * The byte order of the CPU architecture on which uIP is to be run.
491  *
492  * This option can be either BIG_ENDIAN (Motorola byte order) or
493  * LITTLE_ENDIAN (Intel byte order).
494  *
495  * \hideinitializer
496  */
497 #ifndef BYTE_ORDER
498 #define BYTE_ORDER     LITTLE_ENDIAN
499 #endif /* BYTE_ORDER */
500
501 /** @} */
502 /*------------------------------------------------------------------------------*/
503
504 /**
505  * \defgroup uipoptapp Appication specific configurations
506  * @{
507  *
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.
512  *
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.
516  *
517  * The file containing the definitions must be included in the
518  * uipopt.h file.
519  *
520  * The following example illustrates how this can look.
521  \code
522
523 void httpd_appcall(void);
524 #define UIP_APPCALL     httpd_appcall
525
526 struct httpd_state {
527   u8_t state; 
528   u16_t count;
529   char *dataptr;
530   char *script;
531 };
532 #define UIP_APPSTATE_SIZE (sizeof(struct httpd_state))
533  \endcode
534  */
535
536 /**
537  * \var #define UIP_APPCALL
538  *
539  * The name of the application function that uIP should call in
540  * response to TCP/IP events.
541  *
542  */
543 extern void uip_tcp_appcall ( void );
544 #define UIP_APPCALL uip_tcp_appcall
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 #define UIP_APPSTATE_SIZE sizeof ( void * )
553 /** @} */
554
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
557    this. */
558 //#include "httpd.h"
559
560
561 #endif /* __UIPOPT_H__ */