/* * $Id: defaults.h,v 1.17 2006/06/09 11:46:49 psavola Exp $ * * Authors: * Lars Fenneberg * * This software is Copyright 1996,1997 by the above mentioned author(s), * All Rights Reserved. * * The license which is distributed with this software in the file COPYRIGHT * applies to this software. If your distribution is missing this file, you * may request it from . * */ #ifndef DEFAULTS_H #define DEFAULTS_H #include #include #include /* maximum message size for incoming and outgoing RSs and RAs */ #define MSG_SIZE 4096 #define MAX2(X,Y) ( (( X ) >= ( Y )) ? ( X ) : ( Y )) /* Router Configuration Variables: */ /* For each multicast interface: */ #define DFLT_IgnoreIfMissing 0 #define DFLT_AdvSendAdv 0 #define DFLT_MaxRtrAdvInterval 600 #define DFLT_MinRtrAdvInterval(iface) (0.33 * (iface)->MaxRtrAdvInterval) #define DFLT_AdvManagedFlag 0 #define DFLT_AdvOtherConfigFlag 0 #define DFLT_AdvLinkMTU 0 #define DFLT_AdvReachableTime 0 #define DFLT_AdvRetransTimer 0 #define DFLT_AdvCurHopLimit 64 /* as per RFC 1700 or the next incarnation of it :) */ #define DFLT_AdvDefaultLifetime(iface) MAX2(1, (int)(3.0 * (iface)->MaxRtrAdvInterval)) #define DFLT_MinDelayBetweenRAs MIN_DELAY_BETWEEN_RAS #define DFLT_AdvDefaultPreference 0 /* Options sent with RA */ #define DFLT_AdvSourceLLAddress 1 /* Each prefix has an associated: */ #define DFLT_AdvValidLifetime 2592000 /* seconds */ #define DFLT_AdvOnLinkFlag 1 #define DFLT_AdvPreferredLifetime 604800 /* seconds */ #define DFLT_AdvAutonomousFlag 1 /* Each route has an associated: */ #define DFLT_AdvRouteLifetime(iface) (3 * (iface)->MaxRtrAdvInterval) #define DFLT_AdvRoutePreference 0 /* medium*/ /* RDNSS */ #define DFLT_AdvRDNSSPreference 8 /* medium */ #define DFLT_AdvRDNSSOpenFlag 0 #define DFLT_AdvRDNSSLifetime(iface) (iface)->MaxRtrAdvInterval /* Protocol (RFC2461) constants: */ /* Router constants: */ #define MAX_INITIAL_RTR_ADVERT_INTERVAL 16 #define MAX_INITIAL_RTR_ADVERTISEMENTS 3 #define MAX_FINAL_RTR_ADVERTISEMENTS 3 #define MIN_DELAY_BETWEEN_RAS 3.0 #define MIN_DELAY_BETWEEN_RAS_MIPv6 (30.0/1000.0) #define MAX_RA_DELAY_TIME (1000.0/2.0) /* milliseconds */ /* Host constants: */ #define MAX_RTR_SOLICITATION_DELAY 1 #define RTR_SOLICITATION_INTERVAL 4 #define MAX_RTR_SOLICITATIONS 3 /* Node constants: */ #define MAX_MULTICAST_SOLICIT 3 #define MAX_UNICAST_SOLICIT 3 #define MAX_ANYCAST_DELAY_TIME 1 #define MAX_NEIGHBOR_ADVERTISEMENT 3 #define REACHABLE_TIME 30000 /* milliseconds */ #define RETRANS_TIMER 1000 /* milliseconds */ #define DELAY_FIRST_PROBE_TIME 5 #define MIN_RANDOM_FACTOR (1.0/2.0) #define MAX_RANDOM_FACTOR (3.0/2.0) /* MAX and MIN (RFC2461), Mobile IPv6 extensions will override if in use */ #define MIN_MaxRtrAdvInterval 4 #define MAX_MaxRtrAdvInterval 1800 #define MIN_MinRtrAdvInterval 3 #define MAX_MinRtrAdvInterval(iface) (0.75 * (iface)->MaxRtrAdvInterval) #define MIN_AdvDefaultLifetime(iface) (MAX2(1,(iface)->MaxRtrAdvInterval)) #define MAX_AdvDefaultLifetime 9000 #define MIN_AdvLinkMTU 1280 #define MAX_AdvReachableTime 3600000 /* 1 hour in milliseconds */ #define MAX_AdvCurHopLimit 255 #define MAX_PrefixLen 128 /* * Mobile IPv6 extensions, off by default */ #define DFLT_AdvRouterAddr 0 #define DFLT_AdvHomeAgentFlag 0 #define DFLT_AdvIntervalOpt 0 #define DFLT_AdvHomeAgentInfo 0 /* Option types (defined also at least in glibc 2.2's netinet/icmp6.h) */ #ifndef ND_OPT_RTR_ADV_INTERVAL #define ND_OPT_RTR_ADV_INTERVAL 7 #endif #ifndef ND_OPT_HOME_AGENT_INFO #define ND_OPT_HOME_AGENT_INFO 8 #endif /* de-facto codepoint used by many implementations was '9', the official IANA assignment will be '24' */ #undef ND_OPT_ROUTE_INFORMATION #define ND_OPT_ROUTE_INFORMATION 24 /* XXX: some libc's like KAME already had nd_opt_route_info! */ struct nd_opt_route_info_local /* route information */ { uint8_t nd_opt_ri_type; uint8_t nd_opt_ri_len; uint8_t nd_opt_ri_prefix_len; uint8_t nd_opt_ri_flags_reserved; uint32_t nd_opt_ri_lifetime; struct in6_addr nd_opt_ri_prefix; }; /* the reserved field is 8 bits and we're interested of the middle two: 000xx000 */ #define ND_OPT_RI_PRF_SHIFT 3 #define ND_OPT_RI_PRF_MASK (3 << ND_OPT_RI_PRF_SHIFT) /* 00011000 = 0x18 */ #undef ND_OPT_RDNSS_INFORMATION #define ND_OPT_RDNSS_INFORMATION 25 /* */ struct nd_opt_rdnss_info_local { uint8_t nd_opt_rdnssi_type; uint8_t nd_opt_rdnssi_len; uint16_t nd_opt_rdnssi_pref_flag_reserved; uint32_t nd_opt_rdnssi_lifetime; struct in6_addr nd_opt_rdnssi_addr1; struct in6_addr nd_opt_rdnssi_addr2; struct in6_addr nd_opt_rdnssi_addr3; }; /* pref/flag/reserved field : yyyyx00000000000 (big endian) - 00000000yyyyx000 (little indian); where yyyy = pref, x = flag */ #if BYTE_ORDER == BIG_ENDIAN #define ND_OPT_RDNSSI_PREF_SHIFT 12 #else #define ND_OPT_RDNSSI_PREF_SHIFT 4 #endif #define ND_OPT_RDNSSI_PREF_MASK (0xf << ND_OPT_RDNSSI_PREF_SHIFT) /* Flags */ #ifndef ND_RA_FLAG_HOME_AGENT #define ND_RA_FLAG_HOME_AGENT 0x20 #endif #ifndef ND_OPT_PI_FLAG_RADDR #define ND_OPT_PI_FLAG_RADDR 0x20 #endif #ifndef ND_OPT_RDNSSI_FLAG_S #if BYTE_ORDER == BIG_ENDIAN #define ND_OPT_RDNSSI_FLAG_S 0x0800 #else #define ND_OPT_RDNSSI_FLAG_S 0x0008 #endif #endif /* Configurable values */ #define DFLT_HomeAgentPreference 0 #define DFLT_HomeAgentLifetime(iface) ((iface)->AdvDefaultLifetime) /* Other */ #define MIN_MinRtrAdvInterval_MIPv6 (3.0/100.0) #define MIN_MaxRtrAdvInterval_MIPv6 (7.0/100.0) #define RTR_SOLICITATION_INTERVAL_MIPv6 1 /* Recommended value by MIPv6 */ #define Cautious_MaxRtrAdvInterval (2.0/10.0) #define Cautious_MaxRtrAdvInterval_Leeway (2.0/100.0) #define MIN_HomeAgentLifetime 1 /* 0 must NOT be used */ #define MAX_HomeAgentLifetime 65520 /* 18.2 hours in secs */ /* #define MAX_RTR_SOLICITATIONS This MAY be ignored by MIPv6 */ /* NEMO extensions, off by default */ #define DFLT_AdvMobRtrSupportFlag 0 /* Flags */ #ifndef ND_OPT_HAI_FLAG_SUPPORT_MR #if BYTE_ORDER == BIG_ENDIAN #define ND_OPT_HAI_FLAG_SUPPORT_MR 0x8000 #else /* BYTE_ORDER == LITTLE_ENDIAN */ #define ND_OPT_HAI_FLAG_SUPPORT_MR 0x0080 #endif #endif #endif