aodv.h revision 127668
1139749Simp/* @(#) $Header: /tcpdump/master/tcpdump/aodv.h,v 1.3 2003/09/13 01:34:42 guy Exp $ (LBL) */
2158078Smarcel/*
3158078Smarcel * Copyright (c) 2003 Bruce M. Simpson <bms@spc.org>
4158078Smarcel * All rights reserved.
5119815Smarcel *
6119815Smarcel * Redistribution and use in source and binary forms, with or without
7119815Smarcel * modification, are permitted provided that the following conditions
8119815Smarcel * are met:
9119815Smarcel * 1. Redistributions of source code must retain the above copyright
10119815Smarcel *    notice, this list of conditions and the following disclaimer.
11119815Smarcel * 2. Redistributions in binary form must reproduce the above copyright
12119815Smarcel *    notice, this list of conditions and the following disclaimer in the
13119815Smarcel *    documentation and/or other materials provided with the distribution.
14119815Smarcel * 3. All advertising materials mentioning features or use of this software
15119815Smarcel *    must display the following acknowledgement:
16119815Smarcel *        This product includes software developed by Bruce M. Simpson.
17119815Smarcel * 4. Neither the name of Bruce M. Simpson nor the names of co-
18119815Smarcel *    contributors may be used to endorse or promote products derived
19119815Smarcel *    from this software without specific prior written permission.
20119815Smarcel *
21119815Smarcel * THIS SOFTWARE IS PROVIDED BY Bruce M. Simpson AND CONTRIBUTORS
22119815Smarcel * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
23119815Smarcel * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24119815Smarcel * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL Bruce M. Simpson OR CONTRIBUTORS
25119815Smarcel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26119815Smarcel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27119815Smarcel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28119815Smarcel * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29119815Smarcel * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30119815Smarcel * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31119815Smarcel * POSSIBILITY OF SUCH DAMAGE.
32119815Smarcel */
33119815Smarcel#ifndef _AODV_H_
34119815Smarcel#define _AODV_H_
35119815Smarcel
36119815Smarcelstruct aodv_rreq {
37119815Smarcel	u_int8_t	rreq_type;	/* AODV message type (1) */
38119815Smarcel	u_int8_t	rreq_flags;	/* various flags */
39119815Smarcel	u_int8_t	rreq_zero0;	/* reserved, set to zero */
40119815Smarcel	u_int8_t	rreq_hops;	/* number of hops from originator */
41119815Smarcel	u_int32_t	rreq_id;	/* request ID */
42119815Smarcel	u_int32_t	rreq_da;	/* destination IPv4 address */
43119815Smarcel	u_int32_t	rreq_ds;	/* destination sequence number */
44119815Smarcel	u_int32_t	rreq_oa;	/* originator IPv4 address */
45158058Smarcel	u_int32_t	rreq_os;	/* originator sequence number */
46158058Smarcel};
47119815Smarcel#ifdef INET6
48119815Smarcelstruct aodv_rreq6 {
49119815Smarcel	u_int8_t	rreq_type;	/* AODV message type (1) */
50119815Smarcel	u_int8_t	rreq_flags;	/* various flags */
51119815Smarcel	u_int8_t	rreq_zero0;	/* reserved, set to zero */
52119815Smarcel	u_int8_t	rreq_hops;	/* number of hops from originator */
53119815Smarcel	u_int32_t	rreq_id;	/* request ID */
54246243Savg	struct in6_addr	rreq_da;	/* destination IPv6 address */
55246300Smarius	u_int32_t	rreq_ds;	/* destination sequence number */
56119815Smarcel	struct in6_addr	rreq_oa;	/* originator IPv6 address */
57119815Smarcel	u_int32_t	rreq_os;	/* originator sequence number */
58119815Smarcel};
59119815Smarcelstruct aodv_rreq6_draft_01 {
60119815Smarcel	u_int8_t	rreq_type;	/* AODV message type (16) */
61119815Smarcel	u_int8_t	rreq_flags;	/* various flags */
62119815Smarcel	u_int8_t	rreq_zero0;	/* reserved, set to zero */
63119815Smarcel	u_int8_t	rreq_hops;	/* number of hops from originator */
64119815Smarcel	u_int32_t	rreq_id;	/* request ID */
65158058Smarcel	u_int32_t	rreq_ds;	/* destination sequence number */
66158058Smarcel	u_int32_t	rreq_os;	/* originator sequence number */
67158058Smarcel	struct in6_addr	rreq_da;	/* destination IPv6 address */
68158058Smarcel	struct in6_addr	rreq_oa;	/* originator IPv6 address */
69119815Smarcel};
70119815Smarcel#endif
71158058Smarcel
72119815Smarcel#define	RREQ_JOIN	0x80		/* join (reserved for multicast */
73119815Smarcel#define	RREQ_REPAIR	0x40		/* repair (reserved for multicast */
74246300Smarius#define	RREQ_GRAT	0x20		/* gratuitous RREP */
75158078Smarcel#define	RREQ_DEST	0x10		/* destination only */
76158078Smarcel#define	RREQ_UNKNOWN	0x08		/* unknown destination sequence num */
77158078Smarcel#define	RREQ_FLAGS_MASK	0xF8		/* mask for rreq_flags */
78158078Smarcel
79158058Smarcelstruct aodv_rrep {
80158058Smarcel	u_int8_t	rrep_type;	/* AODV message type (2) */
81158078Smarcel	u_int8_t	rrep_flags;	/* various flags */
82158078Smarcel	u_int8_t	rrep_ps;	/* prefix size */
83169646Smarcel	u_int8_t	rrep_hops;	/* number of hops from o to d */
84158078Smarcel	u_int32_t	rrep_da;	/* destination IPv4 address */
85261998Smarcel	u_int32_t	rrep_ds;	/* destination sequence number */
86158058Smarcel	u_int32_t	rrep_oa;	/* originator IPv4 address */
87158058Smarcel	u_int32_t	rrep_life;	/* lifetime of this route */
88223874Sjhb};
89158058Smarcel#ifdef INET6
90158058Smarcelstruct aodv_rrep6 {
91158058Smarcel	u_int8_t	rrep_type;	/* AODV message type (2) */
92158058Smarcel	u_int8_t	rrep_flags;	/* various flags */
93158058Smarcel	u_int8_t	rrep_ps;	/* prefix size */
94158058Smarcel	u_int8_t	rrep_hops;	/* number of hops from o to d */
95158058Smarcel	struct in6_addr	rrep_da;	/* destination IPv6 address */
96158058Smarcel	u_int32_t	rrep_ds;	/* destination sequence number */
97158058Smarcel	struct in6_addr	rrep_oa;	/* originator IPv6 address */
98158078Smarcel	u_int32_t	rrep_life;	/* lifetime of this route */
99158078Smarcel};
100158058Smarcelstruct aodv_rrep6_draft_01 {
101158058Smarcel	u_int8_t	rrep_type;	/* AODV message type (17) */
102188472Skaiw	u_int8_t	rrep_flags;	/* various flags */
103158078Smarcel	u_int8_t	rrep_ps;	/* prefix size */
104158078Smarcel	u_int8_t	rrep_hops;	/* number of hops from o to d */
105158078Smarcel	u_int32_t	rrep_ds;	/* destination sequence number */
106158078Smarcel	struct in6_addr	rrep_da;	/* destination IPv6 address */
107158078Smarcel	struct in6_addr	rrep_oa;	/* originator IPv6 address */
108158078Smarcel	u_int32_t	rrep_life;	/* lifetime of this route */
109158078Smarcel};
110158078Smarcel#endif
111158078Smarcel
112158078Smarcel#define	RREP_REPAIR		0x80	/* repair (reserved for multicast */
113158078Smarcel#define	RREP_ACK		0x40	/* acknowledgement required */
114158078Smarcel#define	RREP_FLAGS_MASK		0xC0	/* mask for rrep_flags */
115230327Seadler#define	RREP_PREFIX_MASK	0x1F	/* mask for prefix size */
116158078Smarcel
117264761Smariusstruct rerr_unreach {
118264761Smarius	u_int32_t	u_da;	/* IPv4 address */
119228947Skib	u_int32_t	u_ds;	/* sequence number */
120249803Seadler};
121232967Skib#ifdef INET6
122229971Skibstruct rerr_unreach6 {
123229971Skib	struct in6_addr	u_da;	/* IPv6 address */
124229379Skevlo	u_int32_t	u_ds;	/* sequence number */
125229379Skevlo};
126229379Skevlostruct rerr_unreach6_draft_01 {
127229379Skevlo	struct in6_addr	u_da;	/* IPv6 address */
128266436Smarius	u_int32_t	u_ds;	/* sequence number */
129275439Smav};
130200257Smav#endif
131189407Sjhb
132200230Smarcelstruct aodv_rerr {
133223672Shselasky	u_int8_t	rerr_type;	/* AODV message type (3 or 18) */
134223672Shselasky	u_int8_t	rerr_flags;	/* various flags */
135204533Sdelphij	u_int8_t	rerr_zero0;	/* reserved, set to zero */
136204533Sdelphij	u_int8_t	rerr_dc;	/* destination count */
137232639Sremko	union {
138232639Sremko		struct	rerr_unreach dest[1];
139158058Smarcel#ifdef INET6
140158058Smarcel		struct	rerr_unreach6 dest6[1];
141119815Smarcel		struct	rerr_unreach6_draft_01 dest6_draft_01[1];
142119815Smarcel#endif
143246300Smarius	} r;
144246300Smarius};
145119815Smarcel
146158058Smarcel#define RERR_NODELETE		0x80	/* don't delete the link */
147119815Smarcel#define RERR_FLAGS_MASK		0x80	/* mask for rerr_flags */
148158058Smarcel
149158058Smarcelstruct aodv_rrep_ack {
150158058Smarcel	u_int8_t	ra_type;
151158058Smarcel	u_int8_t	ra_zero0;
152119815Smarcel};
153158058Smarcel
154158058Smarcelunion aodv {
155158058Smarcel	struct aodv_rreq rreq;
156158058Smarcel	struct aodv_rrep rrep;
157158058Smarcel	struct aodv_rerr rerr;
158158058Smarcel	struct aodv_rrep_ack rrep_ack;
159158058Smarcel#ifdef INET6
160158058Smarcel	struct aodv_rreq6 rreq6;
161158058Smarcel	struct aodv_rreq6_draft_01 rreq6_draft_01;
162158058Smarcel	struct aodv_rrep6 rrep6;
163119815Smarcel	struct aodv_rrep6_draft_01 rrep6_draft_01;
164119815Smarcel#endif
165119815Smarcel};
166119815Smarcel
167119815Smarcel#define	AODV_RREQ		1	/* route request */
168119815Smarcel#define	AODV_RREP		2	/* route response */
169246300Smarius#define	AODV_RERR		3	/* error report */
170253654Smarcel#define	AODV_RREP_ACK		4	/* route response acknowledgement */
171119815Smarcel
172119815Smarcel#define AODV_V6_DRAFT_01_RREQ		16	/* IPv6 route request */
173119815Smarcel#define AODV_V6_DRAFT_01_RREP		17	/* IPv6 route response */
174158058Smarcel#define AODV_V6_DRAFT_01_RERR		18	/* IPv6 error report */
175119815Smarcel#define AODV_V6_DRAFT_01_RREP_ACK	19	/* IPV6 route response acknowledgment */
176119815Smarcel
177119815Smarcelstruct aodv_ext {
178119815Smarcel	u_int8_t	type;		/* extension type */
179119815Smarcel	u_int8_t	length;		/* extension length */
180119815Smarcel};
181119815Smarcel
182119815Smarcelstruct aodv_hello {
183253654Smarcel	struct	aodv_ext	eh;		/* extension header */
184253654Smarcel	u_int32_t		interval;	/* expect my next hello in
185253654Smarcel						 * (n) ms */
186253654Smarcel};
187253654Smarcel
188119815Smarcel#define	AODV_EXT_HELLO	1
189119815Smarcel
190253654Smarcel#endif /* _AODV_H_ */
191119815Smarcel