ra: align RA update interval with RFC4861 (FS#964)
[project/odhcp6c.git] / src / odhcp6c.h
index 5ebea2949b7b591494833e5ae7a76161b0e5caa2..1d9bd3e6e554921d374cd54d228b0807579e7d0d 100644 (file)
@@ -32,7 +32,7 @@
 #define DHCPV6_REB_MAX_RT 600
 #define DHCPV6_INF_MAX_RT 120
 
-#define DEFAULT_MIN_UPDATE_INTERVAL 30
+#define RA_MIN_ADV_INTERVAL 3   /* RFC 4861 paragraph 6.2.1 */
 
 enum dhcvp6_opt {
        DHCPV6_OPT_CLIENTID = 1,
@@ -227,6 +227,7 @@ struct dhcpv6_server_cand {
        int16_t preference;
        uint8_t duid_len;
        uint8_t duid[130];
+       struct in6_addr server_addr;
        uint32_t sol_max_rt;
        uint32_t inf_max_rt;
        void *ia_na;
@@ -282,6 +283,10 @@ enum dhcpv6_mode {
        DHCPV6_STATEFUL
 };
 
+enum ra_config {
+       RA_RDNSS_DEFAULT_LIFETIME = 1,
+};
+
 enum odhcp6c_ia_mode {
        IA_MODE_NONE,
        IA_MODE_TRY,
@@ -339,6 +344,7 @@ bool odhcp6c_signal_process(void);
 uint64_t odhcp6c_get_milli_time(void);
 int odhcp6c_random(void *buf, size_t len);
 bool odhcp6c_is_bound(void);
+bool odhcp6c_addr_in_scope(const struct in6_addr *addr);
 
 // State manipulation
 void odhcp6c_clear_state(enum odhcp6c_state state);
@@ -350,7 +356,8 @@ void* odhcp6c_move_state(enum odhcp6c_state state, size_t *len);
 void* odhcp6c_get_state(enum odhcp6c_state state, size_t *len);
 
 // Entry manipulation
-bool odhcp6c_update_entry(enum odhcp6c_state state, struct odhcp6c_entry *new, uint32_t safe, bool filterexcess);
+bool odhcp6c_update_entry(enum odhcp6c_state state, struct odhcp6c_entry *new,
+                               uint32_t safe, unsigned int holdoff_interval);
 
 void odhcp6c_expire(void);
 uint32_t odhcp6c_elapsed(void);