info: java: update workspace
[olsrd.git] / src / defs.h
1 /*
2  * The olsr.org Optimized Link-State Routing daemon (olsrd)
3  *
4  * (c) by the OLSR project
5  *
6  * See our Git repository to find out who worked on this file
7  * and thus is a copyright holder on it.
8  *
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  *
15  * * Redistributions of source code must retain the above copyright
16  *   notice, this list of conditions and the following disclaimer.
17  * * Redistributions in binary form must reproduce the above copyright
18  *   notice, this list of conditions and the following disclaimer in
19  *   the documentation and/or other materials provided with the
20  *   distribution.
21  * * Neither the name of olsr.org, olsrd nor the names of its
22  *   contributors may be used to endorse or promote products derived
23  *   from this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36  * POSSIBILITY OF SUCH DAMAGE.
37  *
38  * Visit http://www.olsr.org for more information.
39  *
40  * If you find this software useful feel free to make a donation
41  * to the project. For more information see the website or contact
42  * the copyright holders.
43  *
44  */
45
46 #ifndef _OLSR_DEFS
47 #define _OLSR_DEFS
48
49 /* Common includes */
50 #include "common/string_handling.h"
51
52 #include <sys/time.h>
53 #include <sys/times.h>
54 #include <sys/socket.h>
55 #include <netinet/in.h>
56 #include <stdio.h>
57 #include <stdlib.h>
58 #include <string.h>
59 #include <errno.h>
60 #include <time.h>
61
62 #ifdef _WIN32
63 #include "compat.h"
64 #endif /* _WIN32 */
65
66 #include "compiler.h"
67 #include "olsr_protocol.h"
68 #include "olsr_cfg.h"
69
70 #ifndef OLSRD_GLOBAL_CONF_FILE
71 #define OLSRD_CONF_FILE_NAME    "olsrd.conf"
72 #define OLSRD_GLOBAL_CONF_FILE  "/etc/olsrd/" OLSRD_CONF_FILE_NAME
73 #endif /* OLSRD_GLOBAL_CONF_FILE */
74
75 #define MAXMESSAGESIZE          1500    /* max broadcast size */
76 #define UDP_IPV4_HDRSIZE        28
77 #define UDP_IPV6_HDRSIZE        62
78
79 /* Debug helper macro */
80 #ifdef DEBUG
81 #define olsr_debug(lvl, format, args...) do {                           \
82     OLSR_PRINTF(lvl, "%s (%s:%d): ", __func__, __FILE__, __LINE__);     \
83     OLSR_PRINTF(lvl, (format), ##args);                                 \
84   } while (0)
85 #endif /* DEBUG */
86
87 extern FILE *debug_handle;
88
89 #ifdef NODEBUG
90 #define OLSR_PRINTF(lvl, format, args...) do { } while(0)
91 #else /* NODEBUG */
92 #define OLSR_PRINTF(lvl, format, args...) do {                    \
93     if((!olsr_cnf || olsr_cnf->debug_level >= (lvl)) && debug_handle)          \
94       fprintf(debug_handle, (format), ##args);                    \
95   } while (0)
96 #endif /* NODEBUG */
97
98 /*
99  * Provides a timestamp s1 milliseconds in the future according
100  * to system ticks returned by times(2)
101 */
102 #define GET_TIMESTAMP(s1)       olsr_getTimestamp(s1)
103
104 /* Compute the time in milliseconds when a timestamp will expire. */
105 #define TIME_DUE(s1)   olsr_getTimeDue(s1)
106
107 /* Returns TRUE if a timestamp is expired */
108 #define TIMED_OUT(s1)   olsr_isTimedOut(s1)
109
110 #ifndef ARRAYSIZE
111 #define ARRAYSIZE(x)    (sizeof(x)/sizeof(*(x)))
112 #endif /* ARRAYSIZE */
113 #ifndef MAX
114 #define MAX(x,y)        ((x) > (y) ? (x) : (y))
115 #endif /* MAX */
116 #ifndef MIN
117 #define MIN(x,y)        ((x) < (y) ? (x) : (y))
118 #endif /* MIN */
119
120 /*
121  * Queueing macros
122  */
123
124 /* First "argument" is NOT a pointer! */
125
126 #define QUEUE_ELEM(pre, new) do { \
127     (pre).next->prev = (new);         \
128     (new)->next = (pre).next;         \
129     (new)->prev = &(pre);             \
130     (pre).next = (new);               \
131   } while (0)
132
133 #define DEQUEUE_ELEM(elem) do { \
134     (elem)->prev->next = (elem)->next;     \
135     (elem)->next->prev = (elem)->prev;     \
136   } while (0)
137
138 #define CLOSE(fd)  do { close(fd); (fd) = -1; } while (0)
139
140 /*
141  * Global olsrd configuragtion
142  */
143 extern struct olsrd_config *olsr_cnf;
144
145 /* Timer data */
146 extern uint32_t now_times;              /* current idea of times(2) reported uptime */
147 extern struct olsr_cookie_info *def_timer_ci;
148
149 /*
150  *IPC functions
151  *These are moved to a plugin soon
152  * soon... duh!
153  */
154
155 int ipc_init(void);
156
157 int shutdown_ipc(void);
158
159 int ipc_output(struct olsr *);
160
161 #endif /* _OLSR_DEFS */
162
163 /*
164  * Local Variables:
165  * c-basic-offset: 2
166  * indent-tabs-mode: nil
167  * End:
168  */