3 != 2
[olsrd.git] / src / defs.h
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org)
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  *   notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above copyright
14  *   notice, this list of conditions and the following disclaimer in
15  *   the documentation and/or other materials provided with the
16  *   distribution.
17  * * Neither the name of olsr.org, olsrd nor the names of its
18  *   contributors may be used to endorse or promote products derived
19  *   from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  * Visit http://www.olsr.org for more information.
35  *
36  * If you find this software useful feel free to make a donation
37  * to the project. For more information see the website or contact
38  * the copyright holders.
39  *
40  */
41
42 #ifndef _OLSR_DEFS
43 #define _OLSR_DEFS
44
45 /* Common includes */
46 #include <sys/time.h>
47 #include <sys/times.h>
48 #include <sys/socket.h>
49 #include <netinet/in.h>
50 #include <stdio.h>
51 #include <stdlib.h>
52 #include <string.h>
53 #include <errno.h>
54 #include <time.h>
55
56 #include "olsr_protocol.h"
57 #include "olsr_cfg.h"
58
59 extern const char olsrd_version[];
60 extern const char build_date[];
61 extern const char build_host[];
62
63 #ifndef OLSRD_GLOBAL_CONF_FILE
64 #define OLSRD_CONF_FILE_NAME    "olsrd.conf"
65 #define OLSRD_GLOBAL_CONF_FILE  "/etc/" OLSRD_CONF_FILE_NAME
66 #endif
67
68 #define MAXMESSAGESIZE          1500    /* max broadcast size */
69 #define UDP_IPV4_HDRSIZE        28
70 #define UDP_IPV6_HDRSIZE        62
71
72 /* Debug helper macro */
73 #ifdef DEBUG
74 #define olsr_debug(lvl, format, args...) do {                           \
75     OLSR_PRINTF(lvl, "%s (%s:%d): ", __func__, __FILE__, __LINE__);     \
76     OLSR_PRINTF(lvl, (format), ##args);                                 \
77   } while (0)
78 #endif
79
80 extern FILE *debug_handle;
81
82 #ifdef NODEBUG
83 #define OLSR_PRINTF(lvl, format, args...) do { } while(0)
84 #else
85 #define OLSR_PRINTF(lvl, format, args...) do {                    \
86     if((olsr_cnf->debug_level >= (lvl)) && debug_handle)          \
87       fprintf(debug_handle, (format), ##args);                    \
88   } while (0)
89 #endif
90
91 /*
92  * Provides a timestamp s1 milliseconds in the future according
93  * to system ticks returned by times(2)
94 */
95 #define GET_TIMESTAMP(s1)       olsr_getTimestamp(s1)
96
97 /* Compute the time in milliseconds when a timestamp will expire. */
98 #define TIME_DUE(s1)   olsr_getTimeDue(s1)
99
100 /* Returns TRUE if a timestamp is expired */
101 #define TIMED_OUT(s1)   olsr_isTimedOut(s1)
102
103 #define ARRAYSIZE(x)    (sizeof(x)/sizeof(*(x)))
104 #ifndef MAX
105 #define MAX(x,y)        ((x) > (y) ? (x) : (y))
106 #endif
107 #ifndef MIN
108 #define MIN(x,y)        ((x) < (y) ? (x) : (y))
109 #endif
110
111 #define INLINE inline __attribute__((always_inline))
112
113 /*
114  * On ARM, the compiler spits out additional warnings if called
115  * with -Wcast-align if you cast e.g. char* -> int*. While this
116  * is fine, most of that warnings are un-critical. Also the ARM
117  * CPU will throw BUS_ERROR if alignment does not fit. For this,
118  * we add an additional cast to (void *) to prevent the warning.
119  */
120 #define ARM_NOWARN_ALIGN(x) ((void *)(x))
121 #define CONST_ARM_NOWARN_ALIGN(x) ((const void *)(x))
122
123 /*
124  * A somewhat safe version of strncpy and strncat. Note, that
125  * BSD/Solaris strlcpy()/strlcat() differ in implementation, while
126  * the BSD compiler prints out a warning if you use plain strcpy().
127  */
128
129 static INLINE char *
130 strscpy(char *dest, const char *src, size_t size)
131 {
132   register size_t l = 0;
133 #if !defined(NODEBUG) && defined(DEBUG)
134   if (NULL == dest)
135     fprintf(stderr, "Warning: dest is NULL in strscpy!\n");
136   if (NULL == src)
137     fprintf(stderr, "Warning: src is NULL in strscpy!\n");
138 #endif
139   if (NULL != dest && NULL != src) {
140     /* src does not need to be null terminated */
141     if (0 < size--)
142       while (l < size && 0 != src[l])
143         l++;
144     dest[l] = 0;
145   }
146   return strncpy(dest, src, l);
147 }
148
149 static INLINE char *
150 strscat(char *dest, const char *src, size_t size)
151 {
152   register size_t l = strlen(dest);
153   return strscpy(dest + l, src, size > l ? size - l : 0);
154 }
155
156 /*
157  * Queueing macros
158  */
159
160 /* First "argument" is NOT a pointer! */
161
162 #define QUEUE_ELEM(pre, new) do { \
163     (pre).next->prev = (new);         \
164     (new)->next = (pre).next;         \
165     (new)->prev = &(pre);             \
166     (pre).next = (new);               \
167   } while (0)
168
169 #define DEQUEUE_ELEM(elem) do { \
170     (elem)->prev->next = (elem)->next;     \
171     (elem)->next->prev = (elem)->prev;     \
172   } while (0)
173
174 #define CLOSE(fd)  do { close(fd); (fd) = -1; } while (0)
175
176 /*
177  * Global olsrd configuragtion
178  */
179 extern struct olsrd_config *olsr_cnf;
180
181 /* Timer data */
182 extern uint32_t now_times;              /* current idea of times(2) reported uptime */
183 extern struct olsr_cookie_info *def_timer_ci;
184
185 #if defined WIN32
186 extern bool olsr_win32_end_request;
187 extern bool olsr_win32_end_flag;
188 #endif
189
190 /*
191  *IPC functions
192  *These are moved to a plugin soon
193  * soon... duh!
194  */
195
196 int ipc_init(void);
197
198 #if 0
199 int ipc_input(int);
200 #endif
201
202 int shutdown_ipc(void);
203
204 int ipc_output(struct olsr *);
205
206 #endif
207
208 /*
209  * Local Variables:
210  * c-basic-offset: 2
211  * indent-tabs-mode: nil
212  * End:
213  */