* more fixups for the generated .c file
[olsrd.git] / src / packet.h
1 /*
2  * The olsr.org Optimized Link-State Routing daemon(olsrd)
3  * Copyright (c) 2004, Andreas T√łnnesen(andreto@olsr.org)
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without 
7  * modification, are permitted provided that the following conditions 
8  * are met:
9  *
10  * * Redistributions of source code must retain the above copyright 
11  *   notice, this list of conditions and the following disclaimer.
12  * * Redistributions in binary form must reproduce the above copyright 
13  *   notice, this list of conditions and the following disclaimer in 
14  *   the documentation and/or other materials provided with the 
15  *   distribution.
16  * * Neither the name of olsr.org, olsrd nor the names of its 
17  *   contributors may be used to endorse or promote products derived 
18  *   from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
24  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
28  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
30  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
31  * POSSIBILITY OF SUCH DAMAGE.
32  *
33  * Visit http://www.olsr.org for more information.
34  *
35  * If you find this software useful feel free to make a donation
36  * to the project. For more information see the website or contact
37  * the copyright holders.
38  *
39  * $Id: packet.h,v 1.17 2005/05/29 12:47:45 br1 Exp $
40  */
41
42 #ifndef _OLSR_PACKET
43 #define _OLSR_PACKET
44
45 #include "olsr_protocol.h"
46 #include "interfaces.h"
47
48 struct hello_neighbor
49 {
50   olsr_u8_t             status;
51   olsr_u8_t             link;
52   double                link_quality;
53   double                neigh_link_quality;
54   union olsr_ip_addr    main_address;
55   union olsr_ip_addr    address;
56   struct hello_neighbor *next;
57 };
58
59 struct hello_message
60 {
61   double                 vtime;
62   double                 htime;
63   union olsr_ip_addr     source_addr;
64   olsr_u16_t             packet_seq_number;
65   olsr_u8_t              hop_count;
66   olsr_u8_t              ttl;
67   olsr_u8_t              willingness;
68   struct hello_neighbor  *neighbors;
69   
70 };
71
72 struct tc_mpr_addr
73 {
74   double             link_quality;
75   double             neigh_link_quality;
76   union olsr_ip_addr address;
77   struct tc_mpr_addr *next;
78 };
79
80 struct tc_message
81 {
82   double              vtime;
83   union olsr_ip_addr  source_addr;
84   union olsr_ip_addr  originator;
85   olsr_u16_t          packet_seq_number;
86   olsr_u8_t           hop_count;
87   olsr_u8_t           ttl;
88   olsr_u16_t          ansn;
89   struct tc_mpr_addr  *multipoint_relay_selector_address;
90 };
91
92 /*
93  *HNA message format:
94  *NET
95  *NETMASK
96  *NET
97  *NETMASK
98  *......
99  */
100
101 struct hna_net_addr
102 {
103   union olsr_ip_addr  net;
104   union hna_netmask   netmask; /* IPv4 netmask */
105   struct hna_net_addr *next;
106 };
107
108
109 struct hna_message
110 {
111   double               vtime;
112   union olsr_ip_addr   originator;
113   olsr_u16_t           packet_seq_number;
114   olsr_u8_t            hop_count;
115   olsr_u8_t            hna_ttl;
116   struct hna_net_addr  *hna_net;
117 };
118
119
120 /*
121  *MID messages - format:
122  *
123  *ADDR
124  *ADDR
125  *ADDR
126  *.....
127  */
128
129 struct mid_alias
130 {
131   union olsr_ip_addr alias_addr;
132   struct mid_alias   *next;
133 };
134
135 struct mid_message
136 {
137   double             vtime;
138   union olsr_ip_addr mid_origaddr;  /* originator's address */
139   olsr_u8_t          mid_hopcnt;    /* number of hops to destination */
140   olsr_u8_t          mid_ttl;       /* ttl */
141   olsr_u16_t         mid_seqno;     /* sequence number */
142   union olsr_ip_addr addr;          /* main address */
143   struct mid_alias   *mid_addr;     /* variable length */
144 };
145
146
147 struct unknown_message
148 {
149   olsr_u16_t          seqno;
150   union olsr_ip_addr originator;
151   olsr_u8_t          type;
152 };
153
154
155 void
156 olsr_free_hello_packet(struct hello_message *);
157
158 int
159 olsr_build_hello_packet(struct hello_message *, struct interface *);
160
161 void 
162 olsr_free_tc_packet(struct tc_message *);
163
164 int
165 olsr_build_tc_packet(struct tc_message *);
166
167 void
168 olsr_free_mid_packet(struct mid_message *);
169
170 void
171 olsr_free_hna_packet(struct hna_message *);
172
173 #endif