LQ messages are now processed. MPRs are selected based on the link
[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.9 2004/11/05 20:58:10 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 #if defined USE_LINK_QUALITY
47   double                link_quality;
48   double                neigh_link_quality;
49 #endif
50   union olsr_ip_addr    main_address;
51   union olsr_ip_addr    address;
52   struct hello_neighbor *next;
53 };
54
55 struct hello_message
56 {
57   double                 vtime;
58   double                 htime;
59   union olsr_ip_addr     source_addr;
60   olsr_u16_t             packet_seq_number;
61   olsr_u8_t              hop_count;
62   olsr_u8_t              ttl;
63   olsr_u8_t              willingness;
64   struct hello_neighbor  *neighbors;
65   
66 };
67
68 struct tc_mpr_addr
69 {
70 #if defined USE_LINK_QUALITY
71   double             link_quality;
72 #endif
73   union olsr_ip_addr address;
74   struct tc_mpr_addr *next;
75 };
76
77 struct tc_message
78 {
79   double              vtime;
80   union olsr_ip_addr  source_addr;
81   union olsr_ip_addr  originator;
82   olsr_u16_t          packet_seq_number;
83   olsr_u8_t           hop_count;
84   olsr_u8_t           ttl;
85   olsr_u16_t          ansn;
86   struct tc_mpr_addr  *multipoint_relay_selector_address;
87 };
88
89 /*
90  *HNA message format:
91  *NET
92  *NETMASK
93  *NET
94  *NETMASK
95  *......
96  */
97
98 struct hna_net_addr
99 {
100   union olsr_ip_addr  net;
101   union hna_netmask   netmask; /* IPv4 netmask */
102   struct hna_net_addr *next;
103 };
104
105
106 struct hna_message
107 {
108   double               vtime;
109   union olsr_ip_addr   originator;
110   olsr_u16_t           packet_seq_number;
111   olsr_u8_t            hop_count;
112   olsr_u8_t            hna_ttl;
113   struct hna_net_addr  *hna_net;
114 };
115
116
117 /*
118  *MID messages - format:
119  *
120  *ADDR
121  *ADDR
122  *ADDR
123  *.....
124  */
125
126 struct mid_alias
127 {
128   union olsr_ip_addr alias_addr;
129   struct mid_alias   *next;
130 };
131
132 struct mid_message
133 {
134   double             vtime;
135   union olsr_ip_addr mid_origaddr;  /* originator's address */
136   olsr_u8_t          mid_hopcnt;    /* number of hops to destination */
137   olsr_u8_t          mid_ttl;       /* ttl */
138   olsr_u16_t         mid_seqno;     /* sequence number */
139   union olsr_ip_addr addr;          /* main address */
140   struct mid_alias   *mid_addr;     /* variable length */
141 };
142
143
144 struct unknown_message
145 {
146   olsr_u16_t          seqno;
147   union olsr_ip_addr originator;
148   olsr_u8_t          type;
149 };
150
151
152 int
153 olsr_build_hello_packet(struct hello_message *, struct interface *);
154
155 int
156 olsr_build_tc_packet(struct tc_message *);
157
158 void
159 olsr_destroy_hello_message(struct hello_message *);
160
161 void
162 olsr_destroy_mid_message(struct mid_message *);
163
164 void
165 olsr_destroy_hna_message(struct hna_message *);
166
167 void
168 olsr_destroy_tc_message(struct tc_message *);
169
170 #endif