Process LQ_TC messages. Made link quality features configurable. Set
[olsrd.git] / src / lq_packet.h
1 /*
2  * OLSR ad-hoc routing table management protocol
3  * Copyright (C) 2004 Thomas Lopatic (thomas@lopatic.de)
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: lq_packet.h,v 1.3 2004/11/07 20:09:11 tlopatic Exp $
23  *
24  */
25
26 #define LQ_HELLO_MESSAGE      5
27 #define LQ_TC_MESSAGE         6
28
29 // deserialized OLSR header
30
31 struct olsr_common
32 {
33   olsr_u8_t          type;
34   double             vtime;
35   olsr_u16_t         size;
36   union olsr_ip_addr orig;
37   olsr_u8_t          ttl;
38   olsr_u8_t          hops;
39   olsr_u16_t         seqno;
40 };
41
42 // serialized IPv4 OLSR header
43
44 struct olsr_header_v4
45 {
46   olsr_u8_t  type;
47   olsr_u8_t  vtime;
48   olsr_u16_t size;
49   olsr_u32_t orig;
50   olsr_u8_t  ttl;
51   olsr_u8_t  hops;
52   olsr_u16_t seqno;
53 };
54
55 // serialized IPv6 OLSR header
56
57 struct olsr_header_v6
58 {
59   olsr_u8_t     type;
60   olsr_u8_t     vtime;
61   olsr_u16_t    size;
62   unsigned char orig[16];
63   olsr_u8_t     ttl;
64   olsr_u8_t     hops;
65   olsr_u16_t    seqno;
66 };
67
68 // deserialized LQ_HELLO
69
70 struct lq_hello_neighbor
71 {
72   olsr_u8_t                link_type;
73   olsr_u8_t                neigh_type;
74   double                   link_quality;
75   double                   neigh_link_quality;
76   union olsr_ip_addr       addr;
77   struct lq_hello_neighbor *next;
78 };
79
80 struct lq_hello_message
81 {
82   struct olsr_common       comm;
83   double                   htime;
84   olsr_u8_t                will;
85   struct lq_hello_neighbor *neigh;
86 };
87
88 // serialized LQ_HELLO
89
90 struct lq_hello_info_header
91 {
92   olsr_u8_t  link_code;
93   olsr_u8_t  reserved;
94   olsr_u16_t size;
95 };
96
97 struct lq_hello_header
98 {
99   olsr_u16_t reserved;
100   olsr_u8_t  htime;
101   olsr_u8_t  will;
102 };
103
104 // deserialized LQ_TC
105
106 struct lq_tc_neighbor
107 {
108   double                link_quality;
109   double                neigh_link_quality;
110   union olsr_ip_addr    main;
111   struct lq_tc_neighbor *next;
112 };
113
114 struct lq_tc_message
115 {
116   struct olsr_common    comm;
117   union olsr_ip_addr    from;
118   olsr_u16_t            ansn;
119   struct lq_tc_neighbor *neigh;
120 };
121
122 // serialized LQ_TC
123
124 struct lq_tc_header
125 {
126   olsr_u16_t ansn;
127   olsr_u16_t reserved;
128 };
129
130 void olsr_output_lq_hello(void *para);
131
132 void olsr_output_lq_tc(void *para);
133
134 void olsr_input_lq_hello(union olsr_message *ser, struct interface *inif,
135                          union olsr_ip_addr *from);
136
137 void olsr_input_lq_tc(union olsr_message *ser, struct interface *inif,
138                       union olsr_ip_addr *from);