1/*
2 *   $Id: defaults.h,v 1.21 2008/03/31 09:37:31 psavola Exp $
3 *
4 *   Authors:
5 *    Lars Fenneberg		<lf@elemental.net>
6 *
7 *   This software is Copyright 1996,1997 by the above mentioned author(s),
8 *   All Rights Reserved.
9 *
10 *   The license which is distributed with this software in the file COPYRIGHT
11 *   applies to this software. If your distribution is missing this file, you
12 *   may request it from <pekkas@netcore.fi>.
13 *
14 */
15
16#ifndef DEFAULTS_H
17#define DEFAULTS_H
18
19#include <config.h>
20#include <includes.h>
21#include <radvd.h>
22
23/* maximum message size for incoming and outgoing RSs and RAs */
24
25#define MSG_SIZE			4096
26
27#define MAX2(X,Y) ( (( X ) >=  ( Y )) ? ( X ) : ( Y ))
28
29
30/* Router Configuration Variables: */
31
32/* For each multicast interface: */
33
34#define DFLT_IgnoreIfMissing		0
35#define DFLT_AdvSendAdv			0
36#define DFLT_MaxRtrAdvInterval		600
37#define DFLT_MinRtrAdvInterval(iface)	(0.33 * (iface)->MaxRtrAdvInterval)
38#define DFLT_AdvManagedFlag		0
39#define DFLT_AdvOtherConfigFlag		0
40#define DFLT_AdvLinkMTU			0
41#define DFLT_AdvReachableTime		0
42#define DFLT_AdvRetransTimer		0
43#define DFLT_AdvCurHopLimit		64	/* as per RFC 1700 or the
44						   next incarnation of it :) */
45#define DFLT_AdvDefaultLifetime(iface)	MAX2(1, (int)(3.0 * (iface)->MaxRtrAdvInterval))
46#define DFLT_MinDelayBetweenRAs		MIN_DELAY_BETWEEN_RAS
47#define DFLT_AdvDefaultPreference	0
48
49/* Options sent with RA */
50
51#define DFLT_AdvSourceLLAddress		1
52
53/* Each prefix has an associated: */
54
55#define DFLT_AdvValidLifetime		86400 /* seconds */
56#define DFLT_AdvOnLinkFlag		1
57#define DFLT_AdvPreferredLifetime	14400 /* seconds */
58#define DFLT_AdvAutonomousFlag		1
59
60/* Each route has an associated: */
61#define DFLT_AdvRouteLifetime(iface)	(3 * (iface)->MaxRtrAdvInterval)
62
63#define DFLT_AdvRoutePreference		0 /* medium*/
64
65/* RDNSS */
66#define DFLT_AdvRDNSSPreference				8 /* medium */
67#define DFLT_AdvRDNSSOpenFlag				0
68#define DFLT_AdvRDNSSLifetime(iface)			(iface)->MaxRtrAdvInterval
69
70/* Protocol (RFC4861) constants: */
71
72/* Router constants: */
73
74#define MAX_INITIAL_RTR_ADVERT_INTERVAL	16
75#define MAX_INITIAL_RTR_ADVERTISEMENTS	3
76#define MAX_FINAL_RTR_ADVERTISEMENTS	3
77#define MIN_DELAY_BETWEEN_RAS		3.0
78#define MIN_DELAY_BETWEEN_RAS_MIPv6     (30.0/1000.0)
79#define MAX_RA_DELAY_TIME		(1000.0/2.0) /* milliseconds */
80
81/* Host constants: */
82
83#define MAX_RTR_SOLICITATION_DELAY	1
84#define RTR_SOLICITATION_INTERVAL	4
85#define MAX_RTR_SOLICITATIONS		3
86
87/* Node constants: */
88
89#define MAX_MULTICAST_SOLICIT		3
90#define MAX_UNICAST_SOLICIT		3
91#define MAX_ANYCAST_DELAY_TIME		1
92#define MAX_NEIGHBOR_ADVERTISEMENT	3
93#define REACHABLE_TIME			30000 /* milliseconds */
94#define RETRANS_TIMER			1000 /* milliseconds */
95#define DELAY_FIRST_PROBE_TIME		5
96#define MIN_RANDOM_FACTOR		(1.0/2.0)
97#define MAX_RANDOM_FACTOR		(3.0/2.0)
98
99/* MAX and MIN (RFC4861), Mobile IPv6 extensions will override if in use */
100
101#define MIN_MaxRtrAdvInterval		4
102#define MAX_MaxRtrAdvInterval		1800
103
104#define MIN_MinRtrAdvInterval		3
105#define MAX_MinRtrAdvInterval(iface)	(0.75 * (iface)->MaxRtrAdvInterval)
106
107#define MIN_AdvDefaultLifetime(iface)	(MAX2(1,(iface)->MaxRtrAdvInterval))
108#define MAX_AdvDefaultLifetime		9000
109
110#define	MIN_AdvLinkMTU			1280
111#define	MAX_AdvLinkMTU			131072
112
113#define MIN_AdvReachableTime		100
114#define MAX_AdvReachableTime		3600000 /* 1 hour in milliseconds */
115
116#define MIN_AdvRetransTimer		10
117#define MAX_AdvRetransTimer		3600000
118
119#define MIN_AdvCurHopLimit		2
120#define MAX_AdvCurHopLimit		255
121
122#define MAX_PrefixLen			128
123
124/*
125 * Mobile IPv6 extensions, off by default
126 */
127
128#define DFLT_AdvRouterAddr		0
129#define DFLT_AdvHomeAgentFlag		0
130#define DFLT_AdvIntervalOpt		0
131#define DFLT_AdvHomeAgentInfo		0
132
133/* Option types (defined also at least in glibc 2.2's netinet/icmp6.h) */
134
135#ifndef ND_OPT_RTR_ADV_INTERVAL
136#define ND_OPT_RTR_ADV_INTERVAL         7
137#endif
138#ifndef ND_OPT_HOME_AGENT_INFO
139#define ND_OPT_HOME_AGENT_INFO          8
140#endif
141
142/* de-facto codepoint used by many implementations was '9',
143   the official IANA assignment is '24' */
144#undef ND_OPT_ROUTE_INFORMATION
145#define  ND_OPT_ROUTE_INFORMATION	24
146
147/* XXX: some libc's like KAME already had nd_opt_route_info! */
148struct nd_opt_route_info_local     /* route information */
149  {
150    uint8_t   nd_opt_ri_type;
151    uint8_t   nd_opt_ri_len;
152    uint8_t   nd_opt_ri_prefix_len;
153    uint8_t   nd_opt_ri_flags_reserved;
154    uint32_t  nd_opt_ri_lifetime;
155    struct in6_addr  nd_opt_ri_prefix;
156  };
157
158/* the reserved field is 8 bits and we're interested of the middle two: 000xx000 */
159#define ND_OPT_RI_PRF_SHIFT	3
160#define ND_OPT_RI_PRF_MASK	(3 << ND_OPT_RI_PRF_SHIFT) /* 00011000 = 0x18 */
161
162#undef ND_OPT_RDNSS_INFORMATION
163#define  ND_OPT_RDNSS_INFORMATION	25
164
165/* */
166struct nd_opt_rdnss_info_local
167{
168	uint8_t   			nd_opt_rdnssi_type;
169	uint8_t   			nd_opt_rdnssi_len;
170	uint16_t   			nd_opt_rdnssi_pref_flag_reserved;
171	uint32_t			nd_opt_rdnssi_lifetime;
172	struct in6_addr		nd_opt_rdnssi_addr1;
173	struct in6_addr		nd_opt_rdnssi_addr2;
174	struct in6_addr		nd_opt_rdnssi_addr3;
175};
176/* pref/flag/reserved field : yyyyx00000000000 (big endian) - 00000000yyyyx000 (little indian); where yyyy = pref, x = flag */
177#if BYTE_ORDER == BIG_ENDIAN
178#define ND_OPT_RDNSSI_PREF_SHIFT	12
179#else
180#define ND_OPT_RDNSSI_PREF_SHIFT	4
181#endif
182#define ND_OPT_RDNSSI_PREF_MASK		(0xf << ND_OPT_RDNSSI_PREF_SHIFT)
183
184/* Flags */
185
186#ifndef ND_RA_FLAG_HOME_AGENT
187#define ND_RA_FLAG_HOME_AGENT		0x20
188#endif
189#ifndef ND_OPT_PI_FLAG_RADDR
190#define ND_OPT_PI_FLAG_RADDR		0x20
191#endif
192#ifndef ND_OPT_RDNSSI_FLAG_S
193#if BYTE_ORDER == BIG_ENDIAN
194#define ND_OPT_RDNSSI_FLAG_S         0x0800
195#else
196#define ND_OPT_RDNSSI_FLAG_S         0x0008
197#endif
198#endif
199
200/* Configurable values */
201
202#define DFLT_HomeAgentPreference	0
203#define DFLT_HomeAgentLifetime(iface)	((iface)->AdvDefaultLifetime)
204
205/* Other */
206
207#define MIN_MinRtrAdvInterval_MIPv6	(3.0/100.0)
208#define MIN_MaxRtrAdvInterval_MIPv6	(7.0/100.0)
209#define RTR_SOLICITATION_INTERVAL_MIPv6	1 /* Recommended value by MIPv6 */
210
211#define Cautious_MaxRtrAdvInterval      (2.0/10.0)
212#define Cautious_MaxRtrAdvInterval_Leeway      (2.0/100.0)
213
214#define MIN_HomeAgentLifetime		1 /* 0 must NOT be used */
215#define MAX_HomeAgentLifetime		65520 /* 18.2 hours in secs */
216
217/* #define MAX_RTR_SOLICITATIONS This MAY be ignored by MIPv6 */
218
219/* NEMO extensions, off by default */
220#define DFLT_AdvMobRtrSupportFlag      	0
221
222/* Flags */
223
224#ifndef ND_OPT_HAI_FLAG_SUPPORT_MR
225#if BYTE_ORDER == BIG_ENDIAN
226#define ND_OPT_HAI_FLAG_SUPPORT_MR	0x8000
227#else /* BYTE_ORDER == LITTLE_ENDIAN */
228#define ND_OPT_HAI_FLAG_SUPPORT_MR	0x0080
229#endif
230#endif
231
232#endif
233