Replaced unik-olsrd with olsr.org
[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 olsr.org.
6  *
7  * UniK olsrd 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  * UniK olsrd 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
23
24 #ifndef _OLSR_PACKET
25 #define _OLSR_PACKET
26
27 #include "olsr_protocol.h"
28 #include "interfaces.h"
29
30
31
32
33 union hna_netmask
34 {
35   olsr_u32_t v4;
36   olsr_u16_t v6;
37 };
38
39 struct hello_neighbor
40 {
41   olsr_u8_t             status;
42   olsr_u8_t             link;
43   union olsr_ip_addr    main_address;
44   union olsr_ip_addr    address;
45   struct hello_neighbor *next;
46 };
47
48
49
50 struct hello_message
51 {
52   double                 vtime;
53   double                 htime;
54   union olsr_ip_addr     source_addr;
55   olsr_u16_t             packet_seq_number;
56   olsr_u8_t              hop_count;
57   olsr_u8_t              ttl;
58   olsr_u8_t              willingness;
59   struct hello_neighbor  *neighbors;
60   
61 };
62
63
64 struct tc_mpr_addr
65 {
66
67   union olsr_ip_addr address;
68   struct tc_mpr_addr *next;
69 };
70
71
72 struct tc_message
73 {
74   double              vtime;
75   union olsr_ip_addr  source_addr;
76   union olsr_ip_addr  originator;
77   olsr_u16_t          packet_seq_number;
78   olsr_u8_t           hop_count;
79   olsr_u8_t           ttl;
80   olsr_u16_t          ansn;
81   struct tc_mpr_addr  *multipoint_relay_selector_address;
82 };
83
84
85
86 /*
87  *HNA message format:
88  *NET
89  *NETMASK
90  *NET
91  *NETMASK
92  *......
93  */
94
95 struct hna_net_addr
96 {
97   union olsr_ip_addr  net;
98   union hna_netmask   netmask; /* IPv4 netmask */
99   struct hna_net_addr *next;
100 };
101
102
103 struct hna_message
104 {
105   double               vtime;
106   union olsr_ip_addr   originator;
107   olsr_u16_t           packet_seq_number;
108   olsr_u8_t            hop_count;
109   olsr_u8_t            hna_ttl;
110   struct hna_net_addr  *hna_net;
111 };
112
113
114 /*
115  *MID messages - format:
116  *
117  *ADDR
118  *ADDR
119  *ADDR
120  *.....
121  */
122
123 struct mid_alias
124 {
125   union olsr_ip_addr alias_addr;
126   struct mid_alias   *next;
127 };
128
129 struct mid_message
130 {
131   double             vtime;
132   union olsr_ip_addr mid_origaddr;  /* originator's address */
133   olsr_u8_t          mid_hopcnt;    /* number of hops to destination */
134   olsr_u8_t          mid_ttl;       /* ttl */
135   olsr_u16_t         mid_seqno;     /* sequence number */
136   union olsr_ip_addr addr;          /* main address */
137   struct mid_alias   *mid_addr;     /* variable length */
138 };
139
140
141 struct unknown_message
142 {
143   olsr_u16_t          seqno;
144   union olsr_ip_addr originator;
145   olsr_u8_t          type;
146 };
147
148
149 int
150 olsr_build_hello_packet(struct hello_message *, struct interface *);
151
152 int
153 olsr_build_tc_packet(struct tc_message *);
154
155 void
156 olsr_destroy_hello_message(struct hello_message *);
157
158 void
159 olsr_destroy_mid_message(struct mid_message *);
160
161 void
162 olsr_destroy_hna_message(struct hna_message *);
163
164 void
165 olsr_destroy_tc_message(struct tc_message *);
166
167
168
169 #endif