Deserialization of new LQ packet types compiles. Not tested at all, yet.
[olsrd.git] / src / packet.h
1 /*
2  * OLSR ad-hoc routing table management protocol
3  * Copyright (C) 2004 Andreas T√łnnesen (andreto@ifi.uio.no)
4  *
5  * This file is part of the olsr.org OLSR daemon.
6  *
7  * olsr.org is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * olsr.org is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with olsr.org; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  * 
21  * 
22  * $Id: packet.h,v 1.7 2004/11/02 22:55:42 tlopatic Exp $
23  *
24  */
25
26
27 #ifndef _OLSR_PACKET
28 #define _OLSR_PACKET
29
30 #include "olsr_protocol.h"
31 #include "interfaces.h"
32
33
34
35
36 union hna_netmask
37 {
38   olsr_u32_t v4;
39   olsr_u16_t v6;
40 };
41
42 struct hello_neighbor
43 {
44   olsr_u8_t             status;
45   olsr_u8_t             link;
46   union olsr_ip_addr    main_address;
47   union olsr_ip_addr    address;
48   struct hello_neighbor *next;
49 };
50
51 struct hello_message
52 {
53   double                 vtime;
54   double                 htime;
55   union olsr_ip_addr     source_addr;
56   olsr_u16_t             packet_seq_number;
57   olsr_u8_t              hop_count;
58   olsr_u8_t              ttl;
59   olsr_u8_t              willingness;
60   struct hello_neighbor  *neighbors;
61   
62 };
63
64 #if defined USE_LINK_QUALITY
65 struct lq_hello_neighbor
66 {
67   olsr_u8_t                link_type;
68   olsr_u8_t                neigh_type;
69   double                   link_quality;
70   union olsr_ip_addr       addr;
71   struct lq_hello_neighbor *next;
72 };
73
74 struct lq_hello_message
75 {
76   double                   vtime;
77   double                   htime;
78   union olsr_ip_addr       main;
79   olsr_u16_t               seqno;
80   olsr_u8_t                hops;
81   olsr_u8_t                ttl;
82   olsr_u8_t                will;
83   struct lq_hello_neighbor *neigh;
84 };
85 #endif
86
87 struct tc_mpr_addr
88 {
89
90   union olsr_ip_addr address;
91   struct tc_mpr_addr *next;
92 };
93
94 struct tc_message
95 {
96   double              vtime;
97   union olsr_ip_addr  source_addr;
98   union olsr_ip_addr  originator;
99   olsr_u16_t          packet_seq_number;
100   olsr_u8_t           hop_count;
101   olsr_u8_t           ttl;
102   olsr_u16_t          ansn;
103   struct tc_mpr_addr  *multipoint_relay_selector_address;
104 };
105
106 #if defined USE_LINK_QUALITY
107 struct lq_tc_neighbor
108 {
109   double                link_quality;
110   union olsr_ip_addr    main;
111   struct lq_tc_neighbor *next;
112 };
113
114 struct lq_tc_message
115 {
116   double                vtime;
117   union olsr_ip_addr    main;
118   union olsr_ip_addr    orig;
119   olsr_u16_t            seqno;
120   olsr_u8_t             hops;
121   olsr_u8_t             ttl;
122   olsr_u16_t            ansn;
123   struct lq_tc_neighbor *neigh;
124 };
125 #endif
126
127 /*
128  *HNA message format:
129  *NET
130  *NETMASK
131  *NET
132  *NETMASK
133  *......
134  */
135
136 struct hna_net_addr
137 {
138   union olsr_ip_addr  net;
139   union hna_netmask   netmask; /* IPv4 netmask */
140   struct hna_net_addr *next;
141 };
142
143
144 struct hna_message
145 {
146   double               vtime;
147   union olsr_ip_addr   originator;
148   olsr_u16_t           packet_seq_number;
149   olsr_u8_t            hop_count;
150   olsr_u8_t            hna_ttl;
151   struct hna_net_addr  *hna_net;
152 };
153
154
155 /*
156  *MID messages - format:
157  *
158  *ADDR
159  *ADDR
160  *ADDR
161  *.....
162  */
163
164 struct mid_alias
165 {
166   union olsr_ip_addr alias_addr;
167   struct mid_alias   *next;
168 };
169
170 struct mid_message
171 {
172   double             vtime;
173   union olsr_ip_addr mid_origaddr;  /* originator's address */
174   olsr_u8_t          mid_hopcnt;    /* number of hops to destination */
175   olsr_u8_t          mid_ttl;       /* ttl */
176   olsr_u16_t         mid_seqno;     /* sequence number */
177   union olsr_ip_addr addr;          /* main address */
178   struct mid_alias   *mid_addr;     /* variable length */
179 };
180
181
182 struct unknown_message
183 {
184   olsr_u16_t          seqno;
185   union olsr_ip_addr originator;
186   olsr_u8_t          type;
187 };
188
189
190 int
191 olsr_build_hello_packet(struct hello_message *, struct interface *);
192
193 int
194 olsr_build_tc_packet(struct tc_message *);
195
196 void
197 olsr_destroy_hello_message(struct hello_message *);
198
199 void
200 olsr_destroy_mid_message(struct mid_message *);
201
202 void
203 olsr_destroy_hna_message(struct hna_message *);
204
205 void
206 olsr_destroy_tc_message(struct tc_message *);
207
208 #if defined USE_LINK_QUALITY
209 int
210 olsr_build_lq_hello_packet(struct lq_hello_message *, struct interface *);
211
212 int
213 olsr_build_lq_tc_packet(struct lq_tc_message *);
214
215 void
216 olsr_destroy_lq_hello_message(struct lq_hello_message *);
217
218 void
219 olsr_destroy_lq_tc_message(struct lq_tc_message *);
220 #endif
221
222 #endif