Cleanup in lq_packet.h
[olsrd.git] / src / lq_packet.h
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
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_LQ_PACKET_H
43 #define _OLSR_LQ_PACKET_H
44
45 #include "olsr_types.h"
46 #include "olsr_time.h"
47 #include "ipcalc.h"
48
49 #define LQ_HELLO_MESSAGE      201
50 #define LQ_TC_MESSAGE         202
51
52
53 /* deserialized OLSR header */
54
55 struct olsr_common {
56   uint8_t type;
57   uint16_t size;
58   uint32_t vtime;
59   union olsr_ip_addr orig;
60   uint8_t ttl;
61   uint8_t hops;
62   uint16_t seqno;
63 };
64
65 /* deserialized LQ_HELLO */
66
67 struct lq_hello_neighbor {
68   uint8_t link_type;
69   uint8_t neigh_type;
70   union olsr_ip_addr addr;
71   struct lq_hello_neighbor *next;
72   olsr_linkcost cost;
73 };
74
75 struct lq_hello_message {
76   struct olsr_common comm;
77   uint32_t htime;
78   uint8_t will;
79   struct lq_hello_neighbor *neigh;
80 };
81
82 /* serialized LQ_HELLO */
83
84 struct lq_hello_info_header {
85   uint8_t link_code;
86   uint8_t reserved;
87   uint16_t size;
88 };
89
90 static INLINE void
91 pkt_get_u8(const uint8_t ** p, uint8_t * var)
92 {
93   *var = *(const uint8_t *)(*p);
94   *p += sizeof(uint8_t);
95 }
96 static INLINE void
97 pkt_get_u16(const uint8_t ** p, uint16_t * var)
98 {
99   *var = ntohs(**((const uint16_t **)p));
100   *p += sizeof(uint16_t);
101 }
102 static INLINE void
103 pkt_get_u32(const uint8_t ** p, uint32_t * var)
104 {
105   *var = ntohl(**((const uint32_t **)p));
106   *p += sizeof(uint32_t);
107 }
108 static INLINE void
109 pkt_get_s8(const uint8_t ** p, int8_t * var)
110 {
111   *var = *(const int8_t *)(*p);
112   *p += sizeof(int8_t);
113 }
114 static INLINE void
115 pkt_get_s16(const uint8_t ** p, int16_t * var)
116 {
117   *var = ntohs(**((const int16_t **)p));
118   *p += sizeof(int16_t);
119 }
120 static INLINE void
121 pkt_get_s32(const uint8_t ** p, int32_t * var)
122 {
123   *var = ntohl(**((const int32_t **)p));
124   *p += sizeof(int32_t);
125 }
126 static INLINE void
127 pkt_get_reltime(const uint8_t ** p, uint32_t * var)
128 {
129   *var = me_to_reltime(**p);
130   *p += sizeof(uint8_t);
131 }
132 static INLINE void
133 pkt_get_ipaddress(const uint8_t ** p, union olsr_ip_addr *var)
134 {
135   memcpy(var, *p, olsr_cnf->ipsize);
136   *p += olsr_cnf->ipsize;
137 }
138 static INLINE void
139 pkt_get_prefixlen(const uint8_t ** p, uint8_t * var)
140 {
141   *var = netmask_to_prefix(*p, olsr_cnf->ipsize);
142   *p += olsr_cnf->ipsize;
143 }
144
145 static INLINE void
146 pkt_ignore_u8(const uint8_t ** p)
147 {
148   *p += sizeof(uint8_t);
149 }
150 static INLINE void
151 pkt_ignore_u16(const uint8_t ** p)
152 {
153   *p += sizeof(uint16_t);
154 }
155 static INLINE void
156 pkt_ignore_u32(const uint8_t ** p)
157 {
158   *p += sizeof(uint32_t);
159 }
160 static INLINE void
161 pkt_ignore_s8(const uint8_t ** p)
162 {
163   *p += sizeof(int8_t);
164 }
165 static INLINE void
166 pkt_ignore_s16(const uint8_t ** p)
167 {
168   *p += sizeof(int16_t);
169 }
170 static INLINE void
171 pkt_ignore_s32(const uint8_t ** p)
172 {
173   *p += sizeof(int32_t);
174 }
175 static INLINE void
176 pkt_ignore_ipaddress(const uint8_t ** p)
177 {
178   *p += olsr_cnf->ipsize;
179 }
180 static INLINE void
181 pkt_ignore_prefixlen(const uint8_t ** p)
182 {
183   *p += olsr_cnf->ipsize;
184 }
185
186 static INLINE void
187 pkt_put_u8(uint8_t ** p, uint8_t var)
188 {
189   *(uint8_t *) (*p) = var;
190   *p += sizeof(uint8_t);
191 }
192 static INLINE void
193 pkt_put_u16(uint8_t ** p, uint16_t var)
194 {
195   *(uint16_t *) (*p) = htons(var);
196   *p += sizeof(uint16_t);
197 }
198 static INLINE void
199 pkt_put_u32(uint8_t ** p, uint32_t var)
200 {
201   *(uint32_t *) (*p) = htonl(var);
202   *p += sizeof(uint32_t);
203 }
204 static INLINE void
205 pkt_put_s8(uint8_t ** p, int8_t var)
206 {
207   *(int8_t *) (*p) = var;
208   *p += sizeof(int8_t);
209 }
210 static INLINE void
211 pkt_put_s16(uint8_t ** p, int16_t var)
212 {
213   *(int16_t *) (*p) = htons(var);
214   *p += sizeof(int16_t);
215 }
216 static INLINE void
217 pkt_put_s32(uint8_t ** p, int32_t var)
218 {
219   *(int32_t *) (*p) = htonl(var);
220   *p += sizeof(int32_t);
221 }
222 static INLINE void
223 pkt_put_reltime(uint8_t ** p, uint32_t var)
224 {
225   **p = reltime_to_me(var);
226   *p += sizeof(uint8_t);
227 }
228 static INLINE void
229 pkt_put_ipaddress(uint8_t ** p, const union olsr_ip_addr *var)
230 {
231   memcpy(*p, var, olsr_cnf->ipsize);
232   *p += olsr_cnf->ipsize;
233 }
234 static INLINE void
235 pkt_put_prefixlen(uint8_t ** p, uint8_t var)
236 {
237   prefix_to_netmask(*p, olsr_cnf->ipsize, var);
238   *p += olsr_cnf->ipsize;
239 }
240
241 void destroy_lq_hello(struct lq_hello_message *lq_hello);
242
243 #endif
244
245 /*
246  * Local Variables:
247  * c-basic-offset: 2
248  * indent-tabs-mode: nil
249  * End:
250  */