EVE 1.0
uipopt.h
Go to the documentation of this file.
1 /**
2  * \defgroup uipopt Configuration options for uIP
3  * \ingroup uip
4  * @{
5  *
6  * uIP is configured using the per-project configuration file
7  * "uipopt.h". This file contains all compile-time options for uIP and
8  * should be tweaked to match each specific project. The uIP
9  * distribution contains a documented example "uipopt.h" that can be
10  * copied and modified for each project.
11  *
12  * \note Contiki does not use the uipopt.h file to configure uIP, but
13  * uses a per-port uip-conf.h file that should be edited instead.
14  */
15 
16 /**
17  * \file
18  * Configuration options for uIP.
19  * \author Adam Dunkels <adam@dunkels.com>
20  *
21  * This file is used for tweaking various configuration options for
22  * uIP. You should make a copy of this file into one of your project's
23  * directories instead of editing this example "uipopt.h" file that
24  * comes with the uIP distribution.
25  */
26 
27 /*
28  * Copyright (c) 2001-2003, Adam Dunkels.
29  * All rights reserved.
30  *
31  * Redistribution and use in source and binary forms, with or without
32  * modification, are permitted provided that the following conditions
33  * are met:
34  * 1. Redistributions of source code must retain the above copyright
35  * notice, this list of conditions and the following disclaimer.
36  * 2. Redistributions in binary form must reproduce the above copyright
37  * notice, this list of conditions and the following disclaimer in the
38  * documentation and/or other materials provided with the distribution.
39  * 3. The name of the author may not be used to endorse or promote
40  * products derived from this software without specific prior
41  * written permission.
42  *
43  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
44  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
45  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
47  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
48  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
49  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
50  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
51  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
52  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
53  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
54  *
55  * This file is part of the uIP TCP/IP stack.
56  *
57  *
58  */
59 
60 #ifndef UIPOPT_H_
61 #define UIPOPT_H_
62 
63 #ifndef UIP_LITTLE_ENDIAN
64 #define UIP_LITTLE_ENDIAN 3412
65 #endif /* UIP_LITTLE_ENDIAN */
66 #ifndef UIP_BIG_ENDIAN
67 #define UIP_BIG_ENDIAN 1234
68 #endif /* UIP_BIG_ENDIAN */
69 
70 #include "contiki-conf.h"
71 
72 #ifndef CONTIKI_DEFAULT_CONF_H
73 #error BUG: contiki-conf.h should include default conf
74 #endif
75 
76 /*------------------------------------------------------------------------------*/
77 
78 /**
79  * \defgroup uipoptstaticconf Static configuration options
80  * \ingroup uipopt
81  * @{
82  *
83  * These configuration options can be used for setting the IP address
84  * settings statically, but only if UIP_FIXEDADDR is set to 1. The
85  * configuration options for a specific node includes IP address,
86  * netmask and default router as well as the Ethernet address. The
87  * netmask, default router and Ethernet address are applicable only
88  * if uIP should be run over Ethernet.
89  *
90  * This options are meaningful only for the IPv4 code.
91  *
92  * All of these should be changed to suit your project.
93  */
94 
95 /**
96  * Determines if uIP should use a fixed IP address or not.
97  *
98  * If uIP should use a fixed IP address, the settings are set in the
99  * uipopt.h file. If not, the macros uip_sethostaddr(),
100  * uip_setdraddr() and uip_setnetmask() should be used instead.
101  *
102  * \hideinitializer
103  */
104 #define UIP_FIXEDADDR 0
105 
106 /**
107  * Ping IP address assignment.
108  *
109  * uIP uses a "ping" packets for setting its own IP address if this
110  * option is set. If so, uIP will start with an empty IP address and
111  * the destination IP address of the first incoming "ping" (ICMP echo)
112  * packet will be used for setting the hosts IP address.
113  *
114  * \note This works only if UIP_FIXEDADDR is 0.
115  *
116  * \hideinitializer
117  */
118 #ifdef UIP_CONF_PINGADDRCONF
119 #define UIP_PINGADDRCONF (UIP_CONF_PINGADDRCONF)
120 #else /* UIP_CONF_PINGADDRCONF */
121 #define UIP_PINGADDRCONF 0
122 #endif /* UIP_CONF_PINGADDRCONF */
123 
124 
125 /**
126  * Specifies if the uIP ARP module should be compiled with a fixed
127  * Ethernet MAC address or not.
128  *
129  * If this configuration option is 0, the macro uip_setethaddr() can
130  * be used to specify the Ethernet address at run-time.
131  *
132  * \hideinitializer
133  */
134 #define UIP_FIXEDETHADDR 0
135 
136 /** @} */
137 /*------------------------------------------------------------------------------*/
138 
139 /**
140  * \defgroup uipoptgeneral General configuration options
141  * \ingroup uipopt
142  * @{
143  */
144 
145 /**
146  * The link level header length.
147  *
148  * This is the offset into the uip_buf where the IP header can be
149  * found. For Ethernet, this should be set to 14. For SLIP, this
150  * should be set to 0.
151  *
152  * \note we probably won't use this constant for other link layers than
153  * ethernet as they have variable header length (this is due to variable
154  * number and type of address fields and to optional security features)
155  * E.g.: 802.15.4 -> 2 + (1/2*4/8) + 0/5/6/10/14
156  * 802.11 -> 4 + (6*3/4) + 2
157  * \hideinitializer
158  */
159 #ifdef UIP_CONF_LLH_LEN
160 #define UIP_LLH_LEN (UIP_CONF_LLH_LEN)
161 #else /* UIP_LLH_LEN */
162 #define UIP_LLH_LEN 0
163 #endif /* UIP_CONF_LLH_LEN */
164 
165 /**
166  * The size of the uIP packet buffer.
167  *
168  * The uIP packet buffer should not be smaller than 60 bytes, and does
169  * not need to be larger than 1514 bytes. Lower size results in lower
170  * TCP throughput, larger size results in higher TCP throughput.
171  *
172  * \hideinitializer
173  */
174 #ifndef UIP_CONF_BUFFER_SIZE
175 #define UIP_BUFSIZE (UIP_LINK_MTU + UIP_LLH_LEN)
176 #else /* UIP_CONF_BUFFER_SIZE */
177 #define UIP_BUFSIZE (UIP_CONF_BUFFER_SIZE)
178 #endif /* UIP_CONF_BUFFER_SIZE */
179 
180 
181 /**
182  * Determines if statistics support should be compiled in.
183  *
184  * The statistics is useful for debugging and to show the user.
185  *
186  * \hideinitializer
187  */
188 #ifndef UIP_CONF_STATISTICS
189 #define UIP_STATISTICS 0
190 #else /* UIP_CONF_STATISTICS */
191 #define UIP_STATISTICS (UIP_CONF_STATISTICS)
192 #endif /* UIP_CONF_STATISTICS */
193 
194 /**
195  * Determines if logging of certain events should be compiled in.
196  *
197  * This is useful mostly for debugging. The function uip_log()
198  * must be implemented to suit the architecture of the project, if
199  * logging is turned on.
200  *
201  * \hideinitializer
202  */
203 #ifndef UIP_CONF_LOGGING
204 #define UIP_LOGGING 0
205 #else /* UIP_CONF_LOGGING */
206 #define UIP_LOGGING (UIP_CONF_LOGGING)
207 #endif /* UIP_CONF_LOGGING */
208 
209 /**
210  * Broadcast support.
211  *
212  * This flag configures IP broadcast support. This is useful only
213  * together with UDP.
214  *
215  * \hideinitializer
216  *
217  */
218 #ifndef UIP_CONF_BROADCAST
219 #define UIP_BROADCAST 0
220 #else /* UIP_CONF_BROADCAST */
221 #define UIP_BROADCAST (UIP_CONF_BROADCAST)
222 #endif /* UIP_CONF_BROADCAST */
223 
224 /**
225  * Print out a uIP log message.
226  *
227  * This function must be implemented by the module that uses uIP, and
228  * is called by uIP whenever a log message is generated.
229  */
230 void uip_log(char *msg);
231 
232 /** @} */
233 /*------------------------------------------------------------------------------*/
234 /**
235  * \defgroup uipoptip IP configuration options
236  * \ingroup uipopt
237  * @{
238  *
239  */
240 /**
241  * The IP TTL (time to live) of IP packets sent by uIP.
242  *
243  * This should normally not be changed.
244  */
245 #ifdef UIP_CONF_TTL
246 #define UIP_TTL UIP_CONF_TTL
247 #else /* UIP_CONF_TTL */
248 #define UIP_TTL 64
249 #endif /* UIP_CONF_TTL */
250 
251 /**
252  * The maximum time an IP fragment should wait in the reassembly
253  * buffer before it is dropped.
254  *
255  */
256 #define UIP_REASS_MAXAGE 60 /*60s*/
257 
258 /**
259  * Turn on support for IP packet reassembly.
260  *
261  * uIP supports reassembly of fragmented IP packets. This features
262  * requires an additional amount of RAM to hold the reassembly buffer
263  * and the reassembly code size is approximately 700 bytes. The
264  * reassembly buffer is of the same size as the uip_buf buffer
265  * (configured by UIP_BUFSIZE).
266  *
267  * \note IP packet reassembly is not heavily tested.
268  *
269  * \hideinitializer
270  */
271 #ifdef UIP_CONF_REASSEMBLY
272 #define UIP_REASSEMBLY (UIP_CONF_REASSEMBLY)
273 #else /* UIP_CONF_REASSEMBLY */
274 #define UIP_REASSEMBLY 0
275 #endif /* UIP_CONF_REASSEMBLY */
276 /** @} */
277 
278 /*------------------------------------------------------------------------------*/
279 /**
280  * \defgroup uipoptipv6 IPv6 configuration options
281  * \ingroup uipopt
282  * @{
283  *
284  */
285 
286 /** The maximum transmission unit at the IP Layer*/
287 #define UIP_LINK_MTU 1280
288 
289 #ifndef UIP_CONF_IPV6
290 /** Do we use IPv6 or not (default: no) */
291 #define UIP_CONF_IPV6 0
292 #endif
293 
294 #ifndef UIP_CONF_IPV6_QUEUE_PKT
295 /** Do we do per %neighbor queuing during address resolution (default: no) */
296 #define UIP_CONF_IPV6_QUEUE_PKT 0
297 #endif
298 
299 #ifndef UIP_CONF_IPV6_CHECKS
300 /** Do we do IPv6 consistency checks (highly recommended, default: yes) */
301 #define UIP_CONF_IPV6_CHECKS 1
302 #endif
303 
304 #ifndef UIP_CONF_IPV6_REASSEMBLY
305 /** Do we do IPv6 fragmentation (default: no) */
306 #define UIP_CONF_IPV6_REASSEMBLY 0
307 #endif
308 
309 #ifndef UIP_CONF_NETIF_MAX_ADDRESSES
310 /** Default number of IPv6 addresses associated to the node's interface */
311 #define UIP_CONF_NETIF_MAX_ADDRESSES 3
312 #endif
313 
314 #ifndef UIP_CONF_DS6_PREFIX_NBU
315 /** Default number of IPv6 prefixes associated to the node's interface */
316 #define UIP_CONF_DS6_PREFIX_NBU 2
317 #endif
318 
319 #ifndef UIP_CONF_DS6_DEFRT_NBU
320 /** Minimum number of default routers */
321 #define UIP_CONF_DS6_DEFRT_NBU 2
322 #endif
323 /** @} */
324 
325 /*------------------------------------------------------------------------------*/
326 /**
327  * \defgroup uipoptudp UDP configuration options
328  * \ingroup uipopt
329  * @{
330  *
331  * \note The UDP support in uIP is still not entirely complete; there
332  * is no support for sending or receiving broadcast or multicast
333  * packets, but it works well enough to support a number of vital
334  * applications such as DNS queries, though
335  */
336 
337 /**
338  * Toggles whether UDP support should be compiled in or not.
339  *
340  * \hideinitializer
341  */
342 #ifdef UIP_CONF_UDP
343 #define UIP_UDP UIP_CONF_UDP
344 #else /* UIP_CONF_UDP */
345 #define UIP_UDP 1
346 #endif /* UIP_CONF_UDP */
347 
348 /**
349  * Toggles if UDP checksums should be used or not.
350  *
351  * \note Support for UDP checksums is currently not included in uIP,
352  * so this option has no function.
353  *
354  * \hideinitializer
355  */
356 #ifdef UIP_CONF_UDP_CHECKSUMS
357 #define UIP_UDP_CHECKSUMS (UIP_CONF_UDP_CHECKSUMS)
358 #else
359 #define UIP_UDP_CHECKSUMS (UIP_CONF_IPV6)
360 #endif
361 
362 /**
363  * The maximum amount of concurrent UDP connections.
364  *
365  * \hideinitializer
366  */
367 #ifdef UIP_CONF_UDP_CONNS
368 #define UIP_UDP_CONNS (UIP_CONF_UDP_CONNS)
369 #else /* UIP_CONF_UDP_CONNS */
370 #define UIP_UDP_CONNS 10
371 #endif /* UIP_CONF_UDP_CONNS */
372 
373 /**
374  * The name of the function that should be called when UDP datagrams arrive.
375  *
376  * \hideinitializer
377  */
378 
379 
380 /** @} */
381 /*------------------------------------------------------------------------------*/
382 /**
383  * \defgroup uipopttcp TCP configuration options
384  * \ingroup uipopt
385  * @{
386  */
387 
388 /**
389  * Toggles whether TCP support should be compiled in or not.
390  *
391  * \hideinitializer
392  */
393 #ifdef UIP_CONF_TCP
394 #define UIP_TCP (UIP_CONF_TCP)
395 #else /* UIP_CONF_TCP */
396 #define UIP_TCP 1
397 #endif /* UIP_CONF_TCP */
398 
399 /**
400  * Determines if support for opening connections from uIP should be
401  * compiled in.
402  *
403  * If the applications that are running on top of uIP for this project
404  * do not need to open outgoing TCP connections, this configuration
405  * option can be turned off to reduce the code size of uIP.
406  *
407  * \hideinitializer
408  */
409 #ifndef UIP_CONF_ACTIVE_OPEN
410 #define UIP_ACTIVE_OPEN 1
411 #else /* UIP_CONF_ACTIVE_OPEN */
412 #define UIP_ACTIVE_OPEN (UIP_CONF_ACTIVE_OPEN)
413 #endif /* UIP_CONF_ACTIVE_OPEN */
414 
415 /**
416  * The maximum number of simultaneously open TCP connections.
417  *
418  * Since the TCP connections are statically allocated, turning this
419  * configuration knob down results in less RAM used. Each TCP
420  * connection requires approximately 30 bytes of memory.
421  *
422  * \hideinitializer
423  */
424 #ifndef UIP_CONF_MAX_CONNECTIONS
425 #define UIP_CONNS 10
426 #else /* UIP_CONF_MAX_CONNECTIONS */
427 #define UIP_CONNS (UIP_CONF_MAX_CONNECTIONS)
428 #endif /* UIP_CONF_MAX_CONNECTIONS */
429 
430 
431 /**
432  * The maximum number of simultaneously listening TCP ports.
433  *
434  * Each listening TCP port requires 2 bytes of memory.
435  *
436  * \hideinitializer
437  */
438 #ifndef UIP_CONF_MAX_LISTENPORTS
439 #define UIP_LISTENPORTS 20
440 #else /* UIP_CONF_MAX_LISTENPORTS */
441 #define UIP_LISTENPORTS (UIP_CONF_MAX_LISTENPORTS)
442 #endif /* UIP_CONF_MAX_LISTENPORTS */
443 
444 /**
445  * Determines if support for TCP urgent data notification should be
446  * compiled in.
447  *
448  * Urgent data (out-of-band data) is a rarely used TCP feature that
449  * very seldom would be required.
450  *
451  * \hideinitializer
452  */
453 #define UIP_URGDATA 0
454 
455 /**
456  * The initial retransmission timeout counted in timer pulses.
457  *
458  * This should not be changed.
459  */
460 #define UIP_RTO 3
461 
462 /**
463  * The maximum number of times a segment should be retransmitted
464  * before the connection should be aborted.
465  *
466  * This should not be changed.
467  */
468 #define UIP_MAXRTX 8
469 
470 /**
471  * The maximum number of times a SYN segment should be retransmitted
472  * before a connection request should be deemed to have been
473  * unsuccessful.
474  *
475  * This should not need to be changed.
476  */
477 #define UIP_MAXSYNRTX 5
478 
479 /**
480  * The TCP maximum segment size.
481  *
482  * This is should not be to set to more than
483  * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN.
484  */
485 #ifdef UIP_CONF_TCP_MSS
486 #if UIP_CONF_TCP_MSS > (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
487 #error UIP_CONF_TCP_MSS is too large for the current UIP_BUFSIZE
488 #endif /* UIP_CONF_TCP_MSS > (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) */
489 #define UIP_TCP_MSS (UIP_CONF_TCP_MSS)
490 #else /* UIP_CONF_TCP_MSS */
491 #define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
492 #endif /* UIP_CONF_TCP_MSS */
493 
494 /**
495  * The size of the advertised receiver's window.
496  *
497  * Should be set low (i.e., to the size of the uip_buf buffer) if the
498  * application is slow to process incoming data, or high (32768 bytes)
499  * if the application processes data quickly.
500  *
501  * \hideinitializer
502  */
503 #ifndef UIP_CONF_RECEIVE_WINDOW
504 #define UIP_RECEIVE_WINDOW (UIP_TCP_MSS)
505 #else
506 #define UIP_RECEIVE_WINDOW (UIP_CONF_RECEIVE_WINDOW)
507 #endif
508 
509 /**
510  * How long a connection should stay in the TIME_WAIT state.
511  *
512  * This can be reduced for faster entry into power saving modes.
513  */
514 #ifndef UIP_CONF_WAIT_TIMEOUT
515 #define UIP_TIME_WAIT_TIMEOUT 120
516 #else
517 #define UIP_TIME_WAIT_TIMEOUT UIP_CONF_WAIT_TIMEOUT
518 #endif
519 
520 /** @} */
521 /*------------------------------------------------------------------------------*/
522 /**
523  * \defgroup uipoptarp ARP configuration options
524  * \ingroup uipopt
525  * @{
526  */
527 
528 /**
529  * The size of the ARP table.
530  *
531  * This option should be set to a larger value if this uIP node will
532  * have many connections from the local network.
533  *
534  * \hideinitializer
535  */
536 #ifdef UIP_CONF_ARPTAB_SIZE
537 #define UIP_ARPTAB_SIZE (UIP_CONF_ARPTAB_SIZE)
538 #else
539 #define UIP_ARPTAB_SIZE 8
540 #endif
541 
542 /**
543  * The maximum age of ARP table entries measured in 10ths of seconds.
544  *
545  * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD
546  * default).
547  */
548 #define UIP_ARP_MAXAGE 120
549 
550 
551 /** @} */
552 
553 /*------------------------------------------------------------------------------*/
554 
555 /**
556  * \defgroup uipoptmac layer 2 options (for ipv6)
557  * \ingroup uipopt
558  * @{
559  */
560 
561 #define UIP_DEFAULT_PREFIX_LEN 64
562 
563 /** @} */
564 
565 /*------------------------------------------------------------------------------*/
566 
567 /**
568  * \defgroup uipoptsics 6lowpan options (for ipv6)
569  * \ingroup uipopt
570  * @{
571  */
572 /**
573  * Timeout for packet reassembly at the 6lowpan layer
574  * (should be < 60s)
575  */
576 #ifdef SICSLOWPAN_CONF_MAXAGE
577 #define SICSLOWPAN_REASS_MAXAGE (SICSLOWPAN_CONF_MAXAGE)
578 #else
579 #define SICSLOWPAN_REASS_MAXAGE 20
580 #endif
581 
582 /**
583  * Do we compress the IP header or not (default: no)
584  */
585 #ifndef SICSLOWPAN_CONF_COMPRESSION
586 #define SICSLOWPAN_CONF_COMPRESSION 0
587 #endif
588 
589 /**
590  * If we use IPHC compression, how many address contexts do we support
591  */
592 #ifndef SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS
593 #define SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS 1
594 #endif
595 
596 /**
597  * Do we support 6lowpan fragmentation
598  */
599 #ifndef SICSLOWPAN_CONF_FRAG
600 #define SICSLOWPAN_CONF_FRAG 0
601 #endif
602 
603 /** @} */
604 
605 /*------------------------------------------------------------------------------*/
606 /**
607  * \defgroup uipoptcpu CPU architecture configuration
608  * \ingroup uipopt
609  * @{
610  *
611  * The CPU architecture configuration is where the endianess of the
612  * CPU on which uIP is to be run is specified. Most CPUs today are
613  * little endian, and the most notable exception are the Motorolas
614  * which are big endian. The BYTE_ORDER macro should be changed to
615  * reflect the CPU architecture on which uIP is to be run.
616  */
617 
618 /**
619  * The byte order of the CPU architecture on which uIP is to be run.
620  *
621  * This option can be either UIP_BIG_ENDIAN (Motorola byte order) or
622  * UIP_LITTLE_ENDIAN (Intel byte order).
623  *
624  * \hideinitializer
625  */
626 #ifdef UIP_CONF_BYTE_ORDER
627 #define UIP_BYTE_ORDER (UIP_CONF_BYTE_ORDER)
628 #else /* UIP_CONF_BYTE_ORDER */
629 #define UIP_BYTE_ORDER (UIP_LITTLE_ENDIAN)
630 #endif /* UIP_CONF_BYTE_ORDER */
631 
632 /** @} */
633 /*------------------------------------------------------------------------------*/
634 
635 /**
636  * \defgroup uipoptapp Application specific configurations
637  * \ingroup uipopt
638  * @{
639  *
640  * An uIP application is implemented using a single application
641  * function that is called by uIP whenever a TCP/IP event occurs. The
642  * name of this function must be registered with uIP at compile time
643  * using the UIP_APPCALL definition.
644  *
645  * uIP applications can store the application state within the
646  * uip_conn structure by specifying the type of the application
647  * structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.
648  *
649  * The file containing the definitions must be included in the
650  * uipopt.h file.
651  *
652  * The following example illustrates how this can look.
653  \code
654 
655  void httpd_appcall(void);
656  #define UIP_APPCALL httpd_appcall
657 
658  struct httpd_state {
659  uint8_t state;
660  uint16_t count;
661  char *dataptr;
662  char *script;
663  };
664  typedef struct httpd_state uip_tcp_appstate_t
665  \endcode
666 */
667 
668 /**
669  * \var #define UIP_APPCALL
670  *
671  * The name of the application function that uIP should call in
672  * response to TCP/IP events.
673  *
674  */
675 
676 /**
677  * \var typedef uip_tcp_appstate_t
678  *
679  * The type of the application state that is to be stored in the
680  * uip_conn structure. This usually is typedef:ed to a struct holding
681  * application state information.
682  */
683 
684 /**
685  * \var typedef uip_udp_appstate_t
686  *
687  * The type of the application state that is to be stored in the
688  * uip_conn structure. This usually is typedef:ed to a struct holding
689  * application state information.
690  */
691 /** @} */
692 
693 /** @} */
694 
695 #endif /* UIPOPT_H_ */
void uip_log(char *msg)