version 1.1.1.1, 2017/08/22 12:33:54
|
version 1.1.1.2, 2021/03/17 19:50:23
|
Line 53 struct radv_config
|
Line 53 struct radv_config
|
ip_addr trigger_prefix; /* Prefix of a trigger route, if defined */ |
ip_addr trigger_prefix; /* Prefix of a trigger route, if defined */ |
u8 trigger_pxlen; /* Pxlen of a trigger route, if defined */ |
u8 trigger_pxlen; /* Pxlen of a trigger route, if defined */ |
u8 trigger_valid; /* Whether a trigger route is defined */ |
u8 trigger_valid; /* Whether a trigger route is defined */ |
|
u8 propagate_routes; /* Do we propagate more specific routes (RFC 4191)? */ |
|
u32 max_linger_time; /* Maximum of interface route_linger_time */ |
}; |
}; |
|
|
struct radv_iface_config |
struct radv_iface_config |
Line 62 struct radv_iface_config
|
Line 64 struct radv_iface_config
|
list rdnss_list; /* Local list of RDNSS configs (struct radv_rdnss_config) */ |
list rdnss_list; /* Local list of RDNSS configs (struct radv_rdnss_config) */ |
list dnssl_list; /* Local list of DNSSL configs (struct radv_dnssl_config) */ |
list dnssl_list; /* Local list of DNSSL configs (struct radv_dnssl_config) */ |
|
|
u32 min_ra_int; /* Standard options from RFC 4261 */ | u32 min_ra_int; /* Standard options from RFC 4861 */ |
u32 max_ra_int; |
u32 max_ra_int; |
u32 min_delay; |
u32 min_delay; |
|
|
|
u32 prefix_linger_time; /* How long we advertise dead prefixes with lifetime 0 */ |
|
u32 route_linger_time; /* How long we advertise dead routes with lifetime 0 */ |
|
|
u8 rdnss_local; /* Global list is not used for RDNSS */ |
u8 rdnss_local; /* Global list is not used for RDNSS */ |
u8 dnssl_local; /* Global list is not used for DNSSL */ |
u8 dnssl_local; /* Global list is not used for DNSSL */ |
|
|
u8 managed; /* Standard options from RFC 4261 */ | u8 managed; /* Standard options from RFC 4861 */ |
u8 other_config; |
u8 other_config; |
u32 link_mtu; |
u32 link_mtu; |
u32 reachable_time; |
u32 reachable_time; |
u32 retrans_timer; |
u32 retrans_timer; |
u32 current_hop_limit; |
u32 current_hop_limit; |
u32 default_lifetime; |
u32 default_lifetime; |
|
u32 route_lifetime; /* Lifetime for the RFC 4191 routes */ |
u8 default_lifetime_sensitive; /* Whether default_lifetime depends on trigger */ |
u8 default_lifetime_sensitive; /* Whether default_lifetime depends on trigger */ |
|
u8 route_lifetime_sensitive; /* Whether route_lifetime depends on trigger */ |
u8 default_preference; /* Default Router Preference (RFC 4191) */ |
u8 default_preference; /* Default Router Preference (RFC 4191) */ |
|
u8 route_preference; /* Specific Route Preference (RFC 4191) */ |
}; |
}; |
|
|
struct radv_prefix_config |
struct radv_prefix_config |
Line 87 struct radv_prefix_config
|
Line 95 struct radv_prefix_config
|
uint pxlen; |
uint pxlen; |
|
|
u8 skip; /* Do not include this prefix to RA */ |
u8 skip; /* Do not include this prefix to RA */ |
u8 onlink; /* Standard options from RFC 4261 */ | u8 onlink; /* Standard options from RFC 4861 */ |
u8 autonomous; |
u8 autonomous; |
u32 valid_lifetime; |
u32 valid_lifetime; |
u32 preferred_lifetime; |
u32 preferred_lifetime; |
Line 113 struct radv_dnssl_config
|
Line 121 struct radv_dnssl_config
|
char *domain; /* Domain for DNS search list, in processed form */ |
char *domain; /* Domain for DNS search list, in processed form */ |
}; |
}; |
|
|
|
/* |
|
* One more specific route as per RFC 4191. |
|
* |
|
* Note that it does *not* contain the next hop field. The next hop is always |
|
* the router sending the advertisment and the more specific route only allows |
|
* overriding the preference of the route. |
|
*/ |
|
struct radv_route |
|
{ |
|
struct fib_node n; |
|
u32 lifetime; /* Lifetime from an attribute */ |
|
u8 lifetime_set; /* Whether lifetime is defined */ |
|
u8 preference; /* Preference of the route, RA_PREF_* */ |
|
u8 preference_set; /* Whether preference is defined */ |
|
u8 valid; /* Whethe route is valid or withdrawn */ |
|
bird_clock_t changed; /* Last time when the route changed */ |
|
}; |
|
|
struct proto_radv | struct radv_proto |
{ |
{ |
struct proto p; |
struct proto p; |
list iface_list; /* List of active ifaces */ |
list iface_list; /* List of active ifaces */ |
|
u8 valid; /* Router is valid for forwarding, used for shutdown */ |
u8 active; /* Whether radv is active w.r.t. triggers */ |
u8 active; /* Whether radv is active w.r.t. triggers */ |
|
u8 fib_up; /* FIB table (routes) is initialized */ |
|
struct fib routes; /* FIB table of specific routes (struct radv_route) */ |
|
bird_clock_t prune_time; /* Next time of route table pruning */ |
}; |
}; |
|
|
|
struct radv_prefix /* One prefix we advertise */ |
|
{ |
|
node n; |
|
ip_addr prefix; |
|
u8 len; |
|
u8 valid; /* Is the prefix valid? If not, we advertise it |
|
with 0 lifetime, so clients stop using it */ |
|
u8 mark; /* A temporary mark for processing */ |
|
bird_clock_t changed; /* Last time when the prefix changed */ |
|
struct radv_prefix_config *cf; /* The config tied to this prefix */ |
|
}; |
|
|
struct radv_iface |
struct radv_iface |
{ |
{ |
node n; |
node n; |
struct proto_radv *ra; | struct radv_proto *ra; |
struct radv_iface_config *cf; /* Related config, must be updated in reconfigure */ |
struct radv_iface_config *cf; /* Related config, must be updated in reconfigure */ |
struct iface *iface; |
struct iface *iface; |
struct ifa *addr; /* Link-local address of iface */ |
struct ifa *addr; /* Link-local address of iface */ |
|
struct pool *pool; /* A pool for interface-specific things */ |
|
list prefixes; /* The prefixes we advertise (struct radv_prefix) */ |
|
bird_clock_t prune_time; /* Next time of prefix list pruning */ |
|
bird_clock_t valid_time; /* Cached packet is valid until first linger timeout */ |
|
|
timer *timer; |
timer *timer; |
struct object_lock *lock; |
struct object_lock *lock; |
Line 135 struct radv_iface
|
Line 180 struct radv_iface
|
|
|
bird_clock_t last; /* Time of last sending of RA */ |
bird_clock_t last; /* Time of last sending of RA */ |
u16 plen; /* Length of prepared RA in tbuf, or 0 if not valid */ |
u16 plen; /* Length of prepared RA in tbuf, or 0 if not valid */ |
byte initial; /* List of active ifaces */ | byte initial; /* How many RAs are still to be sent as initial */ |
}; |
}; |
|
|
#define RA_EV_INIT 1 /* Switch to initial mode */ |
#define RA_EV_INIT 1 /* Switch to initial mode */ |
Line 148 struct radv_iface
|
Line 193 struct radv_iface
|
#define RA_PREF_HIGH 0x08 |
#define RA_PREF_HIGH 0x08 |
#define RA_PREF_MASK 0x18 |
#define RA_PREF_MASK 0x18 |
|
|
|
/* Attributes */ |
|
#define EA_RA_PREFERENCE EA_CODE(EAP_RADV, 0) |
|
#define EA_RA_LIFETIME EA_CODE(EAP_RADV, 1) |
|
|
#ifdef LOCAL_DEBUG |
#ifdef LOCAL_DEBUG |
#define RADV_FORCE_DEBUG 1 |
#define RADV_FORCE_DEBUG 1 |
#else |
#else |
#define RADV_FORCE_DEBUG 0 |
#define RADV_FORCE_DEBUG 0 |
#endif |
#endif |
#define RADV_TRACE(flags, msg, args...) do { if ((ra->p.debug & flags) || RADV_FORCE_DEBUG) \ | #define RADV_TRACE(flags, msg, args...) do { if ((p->p.debug & flags) || RADV_FORCE_DEBUG) \ |
log(L_TRACE "%s: " msg, ra->p.name , ## args ); } while(0) | log(L_TRACE "%s: " msg, p->p.name , ## args ); } while(0) |
|
|
|
|
/* radv.c */ |
/* radv.c */ |
Line 163 void radv_iface_notify(struct radv_iface *ifa, int eve
|
Line 211 void radv_iface_notify(struct radv_iface *ifa, int eve
|
|
|
/* packets.c */ |
/* packets.c */ |
int radv_process_domain(struct radv_dnssl_config *cf); |
int radv_process_domain(struct radv_dnssl_config *cf); |
void radv_send_ra(struct radv_iface *ifa, int shutdown); | void radv_send_ra(struct radv_iface *ifa); |
int radv_sk_open(struct radv_iface *ifa); |
int radv_sk_open(struct radv_iface *ifa); |
|
|
|
|