Process LQ_TC messages. Made link quality features configurable. Set
[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.10 2004/11/07 20:09: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 #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   double             neigh_link_quality;
73 #endif
74   union olsr_ip_addr address;
75   struct tc_mpr_addr *next;
76 };
77
78 struct tc_message
79 {
80   double              vtime;
81   union olsr_ip_addr  source_addr;
82   union olsr_ip_addr  originator;
83   olsr_u16_t          packet_seq_number;
84   olsr_u8_t           hop_count;
85   olsr_u8_t           ttl;
86   olsr_u16_t          ansn;
87   struct tc_mpr_addr  *multipoint_relay_selector_address;
88 };
89
90 /*
91  *HNA message format:
92  *NET
93  *NETMASK
94  *NET
95  *NETMASK
96  *......
97  */
98
99 struct hna_net_addr
100 {
101   union olsr_ip_addr  net;
102   union hna_netmask   netmask; /* IPv4 netmask */
103   struct hna_net_addr *next;
104 };
105
106
107 struct hna_message
108 {
109   double               vtime;
110   union olsr_ip_addr   originator;
111   olsr_u16_t           packet_seq_number;
112   olsr_u8_t            hop_count;
113   olsr_u8_t            hna_ttl;
114   struct hna_net_addr  *hna_net;
115 };
116
117
118 /*
119  *MID messages - format:
120  *
121  *ADDR
122  *ADDR
123  *ADDR
124  *.....
125  */
126
127 struct mid_alias
128 {
129   union olsr_ip_addr alias_addr;
130   struct mid_alias   *next;
131 };
132
133 struct mid_message
134 {
135   double             vtime;
136   union olsr_ip_addr mid_origaddr;  /* originator's address */
137   olsr_u8_t          mid_hopcnt;    /* number of hops to destination */
138   olsr_u8_t          mid_ttl;       /* ttl */
139   olsr_u16_t         mid_seqno;     /* sequence number */
140   union olsr_ip_addr addr;          /* main address */
141   struct mid_alias   *mid_addr;     /* variable length */
142 };
143
144
145 struct unknown_message
146 {
147   olsr_u16_t          seqno;
148   union olsr_ip_addr originator;
149   olsr_u8_t          type;
150 };
151
152
153 int
154 olsr_build_hello_packet(struct hello_message *, struct interface *);
155
156 int
157 olsr_build_tc_packet(struct tc_message *);
158
159 void
160 olsr_destroy_hello_message(struct hello_message *);
161
162 void
163 olsr_destroy_mid_message(struct mid_message *);
164
165 void
166 olsr_destroy_hna_message(struct hna_message *);
167
168 void
169 olsr_destroy_tc_message(struct tc_message *);
170
171 #endif