/**
- * 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,
/* draft-bhandari-dhc-class-based-prefix, not yet standardized */
DHCPV6_OPT_PREFIX_CLASS = EXT_PREFIX_CLASS,
#endif
+#ifdef EXT_CER_ID
+ /* draft-donley-dhc-cer-id-option-03 */
+ DHCPV6_OPT_CER_ID = EXT_CER_ID,
+#endif
};
enum dhcpv6_opt_npt {
_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);
uint8_t key[16];
} _packed;
+struct dhcpv6_cer_id {
+ uint16_t type;
+ uint16_t len;
+ uint16_t reserved;
+ uint16_t auth_type;
+ uint8_t auth[16];
+ struct in6_addr addr;
+} _packed;
+
#define dhcpv6_for_each_option(start, end, otype, olen, odata)\
for (uint8_t *_o = (uint8_t*)(start); _o + 4 <= (uint8_t*)(end) &&\
STATE_RA_PREFIX,
STATE_RA_DNS,
STATE_AFTR_NAME,
+ STATE_VENDORCLASS,
+ STATE_USERCLASS,
+ STATE_CER,
_STATE_MAX
};
uint16_t length;
};
-int init_dhcpv6(const char *ifname, bool strict_options, 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);