/**
- * Copyright (C) 2012-2013 Steven Barth <steven@midlink.org>
+ * Copyright (C) 2012-2014 Steven Barth <steven@midlink.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License v2 as published by
#define DHCPV6_REB_MAX_RT 600
#define DHCPV6_INF_MAX_RT 3600
+#define DEFAULT_MIN_UPDATE_INTERVAL 30
+
enum dhcvp6_opt {
DHCPV6_OPT_CLIENTID = 1,
DHCPV6_OPT_SERVERID = 2,
DHCPV6_OPT_AUTH = 11,
DHCPV6_OPT_STATUS = 13,
DHCPV6_OPT_RAPID_COMMIT = 14,
+ DHCPV6_OPT_USER_CLASS = 15,
+ DHCPV6_OPT_VENDOR_CLASS = 16,
DHCPV6_OPT_RECONF_MESSAGE = 19,
DHCPV6_OPT_RECONF_ACCEPT = 20,
DHCPV6_OPT_DNS_SERVERS = 23,
_DHCPV6_Status_Max
};
+enum dhcpv6_config {
+ DHCPV6_STRICT_OPTIONS = 1,
+ DHCPV6_CLIENT_FQDN = 2,
+ DHCPV6_ACCEPT_RECONFIGURE = 4,
+};
+
typedef int(reply_handler)(enum dhcpv6_msg orig, const int rc,
const void *opt, const void *end);
STATE_SEARCH,
STATE_IA_NA,
STATE_IA_PD,
+ STATE_IA_PD_INIT,
STATE_CUSTOM_OPTS,
STATE_SNTP_IP,
STATE_NTP_IP,
STATE_RA_PREFIX,
STATE_RA_DNS,
STATE_AFTR_NAME,
+ STATE_VENDORCLASS,
+ STATE_USERCLASS,
_STATE_MAX
};
uint32_t t1;
uint32_t t2;
uint16_t class;
+ uint32_t iaid;
};
+struct odhcp6c_request_prefix {
+ uint32_t iaid;
+ uint16_t length;
+};
-int init_dhcpv6(const char *ifname, int request_pd, int sol_timeout);
+int init_dhcpv6(const char *ifname, unsigned int client_options, int sol_timeout);
void dhcpv6_set_ia_mode(enum odhcp6c_ia_mode na, enum odhcp6c_ia_mode pd);
int dhcpv6_request(enum dhcpv6_msg type);
int dhcpv6_poll_reconfigure(void);
// State manipulation
void odhcp6c_clear_state(enum odhcp6c_state state);
void odhcp6c_add_state(enum odhcp6c_state state, const void *data, size_t len);
+void odhcp6c_append_state(enum odhcp6c_state state, const void *data, size_t len);
void odhcp6c_insert_state(enum odhcp6c_state state, size_t offset, 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);