Added code that generates LQ_HELLO and LQ_TC messages. Code compiles but
[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.6 2004/11/01 19:27:11 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       main;
71   union olsr_ip_addr       addr;
72   struct lq_hello_neighbor *next;
73 };
74
75 struct lq_hello_message
76 {
77   double                   vtime;
78   double                   htime;
79   union olsr_ip_addr       main;
80   olsr_u16_t               seqno;
81   olsr_u8_t                hops;
82   olsr_u8_t                ttl;
83   olsr_u8_t                will;
84   struct lq_hello_neighbor *neigh;
85 };
86 #endif
87
88 struct tc_mpr_addr
89 {
90
91   union olsr_ip_addr address;
92   struct tc_mpr_addr *next;
93 };
94
95 struct tc_message
96 {
97   double              vtime;
98   union olsr_ip_addr  source_addr;
99   union olsr_ip_addr  originator;
100   olsr_u16_t          packet_seq_number;
101   olsr_u8_t           hop_count;
102   olsr_u8_t           ttl;
103   olsr_u16_t          ansn;
104   struct tc_mpr_addr  *multipoint_relay_selector_address;
105 };
106
107 #if defined USE_LINK_QUALITY
108 struct lq_tc_neighbor
109 {
110   double                link_quality;
111   union olsr_ip_addr    main;
112   struct lq_tc_neighbor *next;
113 };
114
115 struct lq_tc_message
116 {
117   double                vtime;
118   union olsr_ip_addr    main;
119   union olsr_ip_addr    orig;
120   olsr_u16_t            seqno;
121   olsr_u8_t             hops;
122   olsr_u8_t             ttl;
123   olsr_u16_t            ansn;
124   struct lq_tc_neighbor *neigh;
125 };
126 #endif
127
128 /*
129  *HNA message format:
130  *NET
131  *NETMASK
132  *NET
133  *NETMASK
134  *......
135  */
136
137 struct hna_net_addr
138 {
139   union olsr_ip_addr  net;
140   union hna_netmask   netmask; /* IPv4 netmask */
141   struct hna_net_addr *next;
142 };
143
144
145 struct hna_message
146 {
147   double               vtime;
148   union olsr_ip_addr   originator;
149   olsr_u16_t           packet_seq_number;
150   olsr_u8_t            hop_count;
151   olsr_u8_t            hna_ttl;
152   struct hna_net_addr  *hna_net;
153 };
154
155
156 /*
157  *MID messages - format:
158  *
159  *ADDR
160  *ADDR
161  *ADDR
162  *.....
163  */
164
165 struct mid_alias
166 {
167   union olsr_ip_addr alias_addr;
168   struct mid_alias   *next;
169 };
170
171 struct mid_message
172 {
173   double             vtime;
174   union olsr_ip_addr mid_origaddr;  /* originator's address */
175   olsr_u8_t          mid_hopcnt;    /* number of hops to destination */
176   olsr_u8_t          mid_ttl;       /* ttl */
177   olsr_u16_t         mid_seqno;     /* sequence number */
178   union olsr_ip_addr addr;          /* main address */
179   struct mid_alias   *mid_addr;     /* variable length */
180 };
181
182
183 struct unknown_message
184 {
185   olsr_u16_t          seqno;
186   union olsr_ip_addr originator;
187   olsr_u8_t          type;
188 };
189
190
191 int
192 olsr_build_hello_packet(struct hello_message *, struct interface *);
193
194 int
195 olsr_build_tc_packet(struct tc_message *);
196
197 void
198 olsr_destroy_hello_message(struct hello_message *);
199
200 void
201 olsr_destroy_mid_message(struct mid_message *);
202
203 void
204 olsr_destroy_hna_message(struct hna_message *);
205
206 void
207 olsr_destroy_tc_message(struct tc_message *);
208
209 #if defined USE_LINK_QUALITY
210 int
211 olsr_build_lq_hello_packet(struct lq_hello_message *, struct interface *);
212
213 int
214 olsr_build_lq_tc_packet(struct lq_tc_message *);
215
216 void
217 olsr_destroy_lq_hello_message(struct lq_hello_message *);
218
219 void
220 olsr_destroy_lq_tc_message(struct lq_tc_message *);
221 #endif
222
223 #endif