Added CVS Id fields to all ca nd h files
[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 $
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
52
53 struct hello_message
54 {
55   double                 vtime;
56   double                 htime;
57   union olsr_ip_addr     source_addr;
58   olsr_u16_t             packet_seq_number;
59   olsr_u8_t              hop_count;
60   olsr_u8_t              ttl;
61   olsr_u8_t              willingness;
62   struct hello_neighbor  *neighbors;
63   
64 };
65
66
67 struct tc_mpr_addr
68 {
69
70   union olsr_ip_addr address;
71   struct tc_mpr_addr *next;
72 };
73
74
75 struct tc_message
76 {
77   double              vtime;
78   union olsr_ip_addr  source_addr;
79   union olsr_ip_addr  originator;
80   olsr_u16_t          packet_seq_number;
81   olsr_u8_t           hop_count;
82   olsr_u8_t           ttl;
83   olsr_u16_t          ansn;
84   struct tc_mpr_addr  *multipoint_relay_selector_address;
85 };
86
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
171
172 #endif