build: move build data into its own include file
[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 #ifndef OLSRD_GLOBAL_CONF_FILE
60 #define OLSRD_CONF_FILE_NAME    "olsrd.conf"
61 #define OLSRD_GLOBAL_CONF_FILE  "/etc/" OLSRD_CONF_FILE_NAME
62 #endif /* OLSRD_GLOBAL_CONF_FILE */
63
64 #define MAXMESSAGESIZE          1500    /* max broadcast size */
65 #define UDP_IPV4_HDRSIZE        28
66 #define UDP_IPV6_HDRSIZE        62
67
68 /* Debug helper macro */
69 #ifdef DEBUG
70 #define olsr_debug(lvl, format, args...) do {                           \
71     OLSR_PRINTF(lvl, "%s (%s:%d): ", __func__, __FILE__, __LINE__);     \
72     OLSR_PRINTF(lvl, (format), ##args);                                 \
73   } while (0)
74 #endif /* DEBUG */
75
76 extern FILE *debug_handle;
77
78 #ifdef NODEBUG
79 #define OLSR_PRINTF(lvl, format, args...) do { } while(0)
80 #else /* NODEBUG */
81 #define OLSR_PRINTF(lvl, format, args...) do {                    \
82     if((olsr_cnf->debug_level >= (lvl)) && debug_handle)          \
83       fprintf(debug_handle, (format), ##args);                    \
84   } while (0)
85 #endif /* NODEBUG */
86
87 /*
88  * Provides a timestamp s1 milliseconds in the future according
89  * to system ticks returned by times(2)
90 */
91 #define GET_TIMESTAMP(s1)       olsr_getTimestamp(s1)
92
93 /* Compute the time in milliseconds when a timestamp will expire. */
94 #define TIME_DUE(s1)   olsr_getTimeDue(s1)
95
96 /* Returns TRUE if a timestamp is expired */
97 #define TIMED_OUT(s1)   olsr_isTimedOut(s1)
98
99 #ifndef ARRAYSIZE
100 #define ARRAYSIZE(x)    (sizeof(x)/sizeof(*(x)))
101 #endif /* ARRAYSIZE */
102 #ifndef MAX
103 #define MAX(x,y)        ((x) > (y) ? (x) : (y))
104 #endif /* MAX */
105 #ifndef MIN
106 #define MIN(x,y)        ((x) < (y) ? (x) : (y))
107 #endif /* MIN */
108
109 #define INLINE inline __attribute__((always_inline))
110
111 /*
112  * On ARM, the compiler spits out additional warnings if called
113  * with -Wcast-align if you cast e.g. char* -> int*. While this
114  * is fine, most of that warnings are un-critical. Also the ARM
115  * CPU will throw BUS_ERROR if alignment does not fit. For this,
116  * we add an additional cast to (void *) to prevent the warning.
117  */
118 #define ARM_NOWARN_ALIGN(x) ((void *)(x))
119 #define CONST_ARM_NOWARN_ALIGN(x) ((const void *)(x))
120
121 /*
122  * A somewhat safe version of strncpy and strncat. Note, that
123  * BSD/Solaris strlcpy()/strlcat() differ in implementation, while
124  * the BSD compiler prints out a warning if you use plain strcpy().
125  */
126
127 static INLINE char *
128 strscpy(char *dest, const char *src, size_t size)
129 {
130   register size_t l = 0;
131 #if !defined(NODEBUG) && defined(DEBUG)
132   if (NULL == dest)
133     fprintf(stderr, "Warning: dest is NULL in strscpy!\n");
134   if (NULL == src)
135     fprintf(stderr, "Warning: src is NULL in strscpy!\n");
136 #endif /* !defined(NODEBUG) && defined(DEBUG) */
137   if (!dest || !src) {
138     return NULL;
139   }
140
141   /* src does not need to be null terminated */
142   if (0 < size--)
143     while (l < size && 0 != src[l])
144       l++;
145   dest[l] = 0;
146
147   return strncpy(dest, src, l);
148 }
149
150 static INLINE char *
151 strscat(char *dest, const char *src, size_t size)
152 {
153   register size_t l = strlen(dest);
154   return strscpy(dest + l, src, size > l ? size - l : 0);
155 }
156
157 /*
158  * Queueing macros
159  */
160
161 /* First "argument" is NOT a pointer! */
162
163 #define QUEUE_ELEM(pre, new) do { \
164     (pre).next->prev = (new);         \
165     (new)->next = (pre).next;         \
166     (new)->prev = &(pre);             \
167     (pre).next = (new);               \
168   } while (0)
169
170 #define DEQUEUE_ELEM(elem) do { \
171     (elem)->prev->next = (elem)->next;     \
172     (elem)->next->prev = (elem)->prev;     \
173   } while (0)
174
175 #define CLOSE(fd)  do { close(fd); (fd) = -1; } while (0)
176
177 /*
178  * Global olsrd configuragtion
179  */
180 extern struct olsrd_config *olsr_cnf;
181
182 /* Timer data */
183 extern uint32_t now_times;              /* current idea of times(2) reported uptime */
184 extern struct olsr_cookie_info *def_timer_ci;
185
186 #if defined _WIN32
187 extern bool olsr_win32_end_request;
188 extern bool olsr_win32_end_flag;
189 #endif /* defined _WIN32 */
190
191 /*
192  *IPC functions
193  *These are moved to a plugin soon
194  * soon... duh!
195  */
196
197 int ipc_init(void);
198
199 int shutdown_ipc(void);
200
201 int ipc_output(struct olsr *);
202
203 #endif /* _OLSR_DEFS */
204
205 /*
206  * Local Variables:
207  * c-basic-offset: 2
208  * indent-tabs-mode: nil
209  * End:
210  */