diff options
author | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2017-12-07 17:41:09 +0100 |
---|---|---|
committer | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2017-12-07 17:41:09 +0100 |
commit | 4ff15a75c56531fa2d3858d8250dcef1af4e75b6 (patch) | |
tree | 8410799a1bf43210ac4fe600595488a2907149e2 /proto/radv/radv.h | |
parent | cd80c9b0700ef9533a19ab19d66c38a1722c4e08 (diff) | |
parent | 98bb80a243b58c43453e9be69d19d0350286549c (diff) |
Merge commit '98bb80a243b58c43453e9be69d19d0350286549c' into int-new
Diffstat (limited to 'proto/radv/radv.h')
-rw-r--r-- | proto/radv/radv.h | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/proto/radv/radv.h b/proto/radv/radv.h index 8324bb67..4672e3b2 100644 --- a/proto/radv/radv.h +++ b/proto/radv/radv.h @@ -35,6 +35,7 @@ #define DEFAULT_MAX_RA_INT 600 #define DEFAULT_MIN_DELAY 3 #define DEFAULT_CURRENT_HOP_LIMIT 64 +#define DEFAULT_LINGER_TIME 300 #define DEFAULT_VALID_LIFETIME 86400 #define DEFAULT_PREFERRED_LIFETIME 14400 @@ -64,6 +65,9 @@ struct radv_iface_config u32 max_ra_int; u32 min_delay; + u32 linger_time; /* How long a dead prefix should still be advertised with 0 + lifetime */ + u8 rdnss_local; /* Global list is not used for RDNSS */ u8 dnssl_local; /* Global list is not used for DNSSL */ @@ -75,7 +79,7 @@ struct radv_iface_config u32 current_hop_limit; u32 default_lifetime; u8 default_lifetime_sensitive; /* Whether default_lifetime depends on trigger */ - u8 default_preference; /* Default Router Preference (RFC 4191) */ + u8 default_preference; /* Default Router Preference (RFC 4191) */ }; struct radv_prefix_config @@ -118,6 +122,19 @@ struct radv_proto u8 active; /* Whether radv is active w.r.t. triggers */ }; +struct radv_prefix /* One prefix we advertise */ +{ + node n; + net_addr_ip6 prefix; + + u8 alive; /* Is the prefix alive? If not, we advertise it + with 0 lifetime, so clients stop using it */ + u8 mark; /* A temporary mark for processing */ + btime expires; /* The time when we drop this prefix from + advertising. It is valid only if !alive. */ + struct radv_prefix_config *cf; /* The config tied to this prefix */ +}; + struct radv_iface { node n; @@ -125,6 +142,9 @@ struct radv_iface struct radv_iface_config *cf; /* Related config, must be updated in reconfigure */ struct iface *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) */ + btime prefix_expires; /* When the soonest prefix expires (0 = none dead) */ timer *timer; struct object_lock *lock; @@ -132,12 +152,13 @@ struct radv_iface btime last; /* Time of last sending of RA */ 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_CHANGE 2 /* Change of options or prefixes */ #define RA_EV_RS 3 /* Received RS */ +#define RA_EV_GC 4 /* Internal garbage collection of prefixes */ /* Default Router Preferences (RFC 4191) */ #define RA_PREF_LOW 0x18 |