]> git.decadent.org.uk Git - odhcp6c.git/blobdiff - src/odhcp6c.h
Merge remote-tracking branch 'up/master' into hnet
[odhcp6c.git] / src / odhcp6c.h
index 16a26fec2fa2c06e626655d78047171ff4a23bb5..e0f6f62ce386515b73df1fea85f8e7582d7e677d 100644 (file)
@@ -51,6 +51,10 @@ enum dhcvp6_opt {
        DHCPV6_OPT_NTP_SERVER = 56,
        DHCPV6_OPT_SIP_SERVER_D = 21,
        DHCPV6_OPT_SIP_SERVER_A = 22,
+       DHCPV6_OPT_AFTR_NAME = 64,
+       DHCPV6_OPT_PD_EXCLUDE = 67,
+        /* draft-bhandari-dhc-class-based-prefix */
+       DHCPV6_OPT_PREFIX_CLASS = 200, /* NOT STANDARDIZED! */
 };
 
 enum dhcpv6_opt_npt {
@@ -131,6 +135,17 @@ struct dhcpv6_duid {
        uint8_t data[128];
 } _packed;
 
+struct dhcpv6_auth_reconfigure {
+       uint16_t type;
+       uint16_t len;
+       uint8_t protocol;
+       uint8_t algorithm;
+       uint8_t rdm;
+       uint64_t replay;
+       uint8_t reconf_type;
+       uint8_t key[16];
+} _packed;
+
 
 #define dhcpv6_for_each_option(start, end, otype, olen, odata)\
        for (uint8_t *_o = (uint8_t*)(start); _o + 4 <= (uint8_t*)(end) &&\
@@ -145,6 +160,10 @@ struct dhcpv6_server_cand {
        int16_t preference;
        uint8_t duid_len;
        uint8_t duid[130];
+       void *ia_na;
+       void *ia_pd;
+       size_t ia_na_len;
+       size_t ia_pd_len;
 };
 
 
@@ -165,6 +184,7 @@ enum odhcp6c_state {
        STATE_RA_ROUTE,
        STATE_RA_PREFIX,
        STATE_RA_DNS,
+       STATE_AFTR_NAME,
        _STATE_MAX
 };
 
@@ -197,6 +217,7 @@ struct odhcp6c_entry {
        struct in6_addr target;
        uint32_t valid;
        uint32_t preferred;
+        uint32_t prefix_class;
 };
 
 
@@ -212,6 +233,7 @@ int set_rtnetlink_addr(int ifindex, const struct in6_addr *addr,
 int script_init(const char *path, const char *ifname);
 ssize_t script_unhexlify(uint8_t *dst, size_t len, const char *src);
 void script_call(const char *status);
+void script_delay_call(const char *status, int timeout);
 
 bool odhcp6c_signal_process(void);
 uint64_t odhcp6c_get_milli_time(void);
@@ -221,6 +243,7 @@ void odhcp6c_random(void *buf, size_t len);
 void odhcp6c_clear_state(enum odhcp6c_state state);
 void odhcp6c_add_state(enum odhcp6c_state state, const void *data, size_t len);
 size_t odhcp6c_remove_state(enum odhcp6c_state state, size_t offset, size_t len);
+void* odhcp6c_move_state(enum odhcp6c_state state, size_t *len);
 void* odhcp6c_get_state(enum odhcp6c_state state, size_t *len);
 
 // Entry manipulation
@@ -229,3 +252,4 @@ void odhcp6c_update_entry(enum odhcp6c_state state, struct odhcp6c_entry *new);
 void odhcp6c_update_entry_safe(enum odhcp6c_state state, struct odhcp6c_entry *new, uint32_t safe);
 
 void odhcp6c_expire(void);
+uint32_t odhcp6c_elapsed(void);