mirror of
https://github.com/systemd/systemd
synced 2024-10-04 15:21:01 +00:00
Merge pull request #20987 from yuwata/sd-dhcp6-enum-cleanups
sd-dhcp6-client: enum cleanups
This commit is contained in:
commit
df618f259a
|
@ -2100,19 +2100,6 @@ Table=1234</programlisting></para>
|
|||
<literal>information-request</literal>. Defaults to unset.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>RapidCommit=</varname></term>
|
||||
<listitem>
|
||||
<para>Takes a boolean. The DHCPv6 client can obtain configuration parameters from a DHCPv6 server through
|
||||
a rapid two-message exchange (solicit and reply). When the rapid commit option is enabled by both
|
||||
the DHCPv6 client and the DHCPv6 server, the two-message exchange is used, rather than the default
|
||||
four-message exchange (solicit, advertise, request, and reply). The two-message exchange provides
|
||||
faster client configuration and is beneficial in environments in which networks are under a heavy load.
|
||||
See <ulink url="https://tools.ietf.org/html/rfc3315#section-17.2.1">RFC 3315</ulink> for details.
|
||||
Defaults to true.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
|
|
|
@ -93,6 +93,7 @@ typedef struct DHCP6IA {
|
|||
|
||||
typedef struct sd_dhcp6_client sd_dhcp6_client;
|
||||
|
||||
bool dhcp6_option_can_request(uint16_t option);
|
||||
int dhcp6_option_append(uint8_t **buf, size_t *buflen, uint16_t code,
|
||||
size_t optlen, const void *optval);
|
||||
int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, const DHCP6IA *ia);
|
||||
|
|
|
@ -24,6 +24,193 @@
|
|||
#define DHCP6_OPTION_IA_PD_LEN (sizeof(struct ia_pd))
|
||||
#define DHCP6_OPTION_IA_TA_LEN (sizeof(struct ia_ta))
|
||||
|
||||
bool dhcp6_option_can_request(uint16_t option) {
|
||||
/* See Client ORO field in
|
||||
* https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#dhcpv6-parameters-2 */
|
||||
|
||||
switch (option) {
|
||||
case SD_DHCP6_OPTION_CLIENTID:
|
||||
case SD_DHCP6_OPTION_SERVERID:
|
||||
case SD_DHCP6_OPTION_IA_NA:
|
||||
case SD_DHCP6_OPTION_IA_TA:
|
||||
case SD_DHCP6_OPTION_IAADDR:
|
||||
case SD_DHCP6_OPTION_ORO:
|
||||
case SD_DHCP6_OPTION_PREFERENCE:
|
||||
case SD_DHCP6_OPTION_ELAPSED_TIME:
|
||||
case SD_DHCP6_OPTION_RELAY_MSG:
|
||||
case SD_DHCP6_OPTION_AUTH:
|
||||
case SD_DHCP6_OPTION_UNICAST:
|
||||
case SD_DHCP6_OPTION_STATUS_CODE:
|
||||
case SD_DHCP6_OPTION_RAPID_COMMIT:
|
||||
case SD_DHCP6_OPTION_USER_CLASS:
|
||||
case SD_DHCP6_OPTION_VENDOR_CLASS:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_VENDOR_OPTS:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_INTERFACE_ID:
|
||||
case SD_DHCP6_OPTION_RECONF_MSG:
|
||||
case SD_DHCP6_OPTION_RECONF_ACCEPT:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_SIP_SERVER_DOMAIN_NAME:
|
||||
case SD_DHCP6_OPTION_SIP_SERVER_ADDRESS:
|
||||
case SD_DHCP6_OPTION_DNS_SERVERS:
|
||||
case SD_DHCP6_OPTION_DOMAIN_LIST:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_IA_PD:
|
||||
case SD_DHCP6_OPTION_IA_PD_PREFIX:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_NIS_SERVERS:
|
||||
case SD_DHCP6_OPTION_NISP_SERVERS:
|
||||
case SD_DHCP6_OPTION_NIS_DOMAIN_NAME:
|
||||
case SD_DHCP6_OPTION_NISP_DOMAIN_NAME:
|
||||
case SD_DHCP6_OPTION_SNTP_SERVERS:
|
||||
case SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME:
|
||||
case SD_DHCP6_OPTION_BCMCS_SERVER_D:
|
||||
case SD_DHCP6_OPTION_BCMCS_SERVER_A:
|
||||
case SD_DHCP6_OPTION_GEOCONF_CIVIC:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_REMOTE_ID:
|
||||
case SD_DHCP6_OPTION_SUBSCRIBER_ID:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_CLIENT_FQDN:
|
||||
case SD_DHCP6_OPTION_PANA_AGENT:
|
||||
case SD_DHCP6_OPTION_NEW_POSIX_TIMEZONE:
|
||||
case SD_DHCP6_OPTION_NEW_TZDB_TIMEZONE:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_ERO:
|
||||
case SD_DHCP6_OPTION_LQ_QUERY:
|
||||
case SD_DHCP6_OPTION_CLIENT_DATA:
|
||||
case SD_DHCP6_OPTION_CLT_TIME:
|
||||
case SD_DHCP6_OPTION_LQ_RELAY_DATA:
|
||||
case SD_DHCP6_OPTION_LQ_CLIENT_LINK:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_MIP6_HNIDF:
|
||||
case SD_DHCP6_OPTION_MIP6_VDINF:
|
||||
case SD_DHCP6_OPTION_V6_LOST:
|
||||
case SD_DHCP6_OPTION_CAPWAP_AC_V6:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_RELAY_ID:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_IPV6_ADDRESS_MOS:
|
||||
case SD_DHCP6_OPTION_IPV6_FQDN_MOS:
|
||||
case SD_DHCP6_OPTION_NTP_SERVER:
|
||||
case SD_DHCP6_OPTION_V6_ACCESS_DOMAIN:
|
||||
case SD_DHCP6_OPTION_SIP_UA_CS_LIST:
|
||||
case SD_DHCP6_OPTION_BOOTFILE_URL:
|
||||
case SD_DHCP6_OPTION_BOOTFILE_PARAM:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_CLIENT_ARCH_TYPE:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_NII:
|
||||
case SD_DHCP6_OPTION_GEOLOCATION:
|
||||
case SD_DHCP6_OPTION_AFTR_NAME:
|
||||
case SD_DHCP6_OPTION_ERP_LOCAL_DOMAIN_NAME:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_RSOO:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_PD_EXCLUDE:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_VSS:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_MIP6_IDINF:
|
||||
case SD_DHCP6_OPTION_MIP6_UDINF:
|
||||
case SD_DHCP6_OPTION_MIP6_HNP:
|
||||
case SD_DHCP6_OPTION_MIP6_HAA:
|
||||
case SD_DHCP6_OPTION_MIP6_HAF:
|
||||
case SD_DHCP6_OPTION_RDNSS_SELECTION:
|
||||
case SD_DHCP6_OPTION_KRB_PRINCIPAL_NAME:
|
||||
case SD_DHCP6_OPTION_KRB_REALM_NAME:
|
||||
case SD_DHCP6_OPTION_KRB_DEFAULT_REALM_NAME:
|
||||
case SD_DHCP6_OPTION_KRB_KDC:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_CLIENT_LINKLAYER_ADDR:
|
||||
case SD_DHCP6_OPTION_LINK_ADDRESS:
|
||||
case SD_DHCP6_OPTION_RADIUS:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_SOL_MAX_RT:
|
||||
case SD_DHCP6_OPTION_INF_MAX_RT:
|
||||
case SD_DHCP6_OPTION_ADDRSEL:
|
||||
case SD_DHCP6_OPTION_ADDRSEL_TABLE:
|
||||
case SD_DHCP6_OPTION_V6_PCP_SERVER:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_DHCPV4_MSG:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_DHCP4_O_DHCP6_SERVER:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_S46_RULE:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_S46_BR:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_S46_DMR:
|
||||
case SD_DHCP6_OPTION_S46_V4V6BIND:
|
||||
case SD_DHCP6_OPTION_S46_PORTPARAMS:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_S46_CONT_MAPE:
|
||||
case SD_DHCP6_OPTION_S46_CONT_MAPT:
|
||||
case SD_DHCP6_OPTION_S46_CONT_LW:
|
||||
case SD_DHCP6_OPTION_4RD:
|
||||
case SD_DHCP6_OPTION_4RD_MAP_RULE:
|
||||
case SD_DHCP6_OPTION_4RD_NON_MAP_RULE:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_LQ_BASE_TIME:
|
||||
case SD_DHCP6_OPTION_LQ_START_TIME:
|
||||
case SD_DHCP6_OPTION_LQ_END_TIME:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_CAPTIVE_PORTAL:
|
||||
case SD_DHCP6_OPTION_MPL_PARAMETERS:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_ANI_ATT:
|
||||
case SD_DHCP6_OPTION_ANI_NETWORK_NAME:
|
||||
case SD_DHCP6_OPTION_ANI_AP_NAME:
|
||||
case SD_DHCP6_OPTION_ANI_AP_BSSID:
|
||||
case SD_DHCP6_OPTION_ANI_OPERATOR_ID:
|
||||
case SD_DHCP6_OPTION_ANI_OPERATOR_REALM:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_S46_PRIORITY:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_MUD_URL_V6:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_V6_PREFIX64:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_F_BINDING_STATUS:
|
||||
case SD_DHCP6_OPTION_F_CONNECT_FLAGS:
|
||||
case SD_DHCP6_OPTION_F_DNS_REMOVAL_INFO:
|
||||
case SD_DHCP6_OPTION_F_DNS_HOST_NAME:
|
||||
case SD_DHCP6_OPTION_F_DNS_ZONE_NAME:
|
||||
case SD_DHCP6_OPTION_F_DNS_FLAGS:
|
||||
case SD_DHCP6_OPTION_F_EXPIRATION_TIME:
|
||||
case SD_DHCP6_OPTION_F_MAX_UNACKED_BNDUPD:
|
||||
case SD_DHCP6_OPTION_F_MCLT:
|
||||
case SD_DHCP6_OPTION_F_PARTNER_LIFETIME:
|
||||
case SD_DHCP6_OPTION_F_PARTNER_LIFETIME_SENT:
|
||||
case SD_DHCP6_OPTION_F_PARTNER_DOWN_TIME:
|
||||
case SD_DHCP6_OPTION_F_PARTNER_RAW_CLT_TIME:
|
||||
case SD_DHCP6_OPTION_F_PROTOCOL_VERSION:
|
||||
case SD_DHCP6_OPTION_F_KEEPALIVE_TIME:
|
||||
case SD_DHCP6_OPTION_F_RECONFIGURE_DATA:
|
||||
case SD_DHCP6_OPTION_F_RELATIONSHIP_NAME:
|
||||
case SD_DHCP6_OPTION_F_SERVER_FLAGS:
|
||||
case SD_DHCP6_OPTION_F_SERVER_STATE:
|
||||
case SD_DHCP6_OPTION_F_START_TIME_OF_STATE:
|
||||
case SD_DHCP6_OPTION_F_STATE_EXPIRATION_TIME:
|
||||
case SD_DHCP6_OPTION_RELAY_PORT:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_V6_SZTP_REDIRECT:
|
||||
case SD_DHCP6_OPTION_S46_BIND_IPV6_PREFIX:
|
||||
return true;
|
||||
case SD_DHCP6_OPTION_IA_LL:
|
||||
case SD_DHCP6_OPTION_LLADDR:
|
||||
case SD_DHCP6_OPTION_SLAP_QUAD:
|
||||
return false;
|
||||
case SD_DHCP6_OPTION_V6_DOTS_RI:
|
||||
case SD_DHCP6_OPTION_V6_DOTS_ADDRESS:
|
||||
case SD_DHCP6_OPTION_IPV6_ADDRESS_ANDSF:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static int option_append_hdr(uint8_t **buf, size_t *buflen, uint16_t optcode, size_t optlen) {
|
||||
DHCP6Option *option;
|
||||
|
||||
|
@ -273,7 +460,7 @@ int dhcp6_option_append_fqdn(uint8_t **buf, size_t *buflen, const char *fqdn) {
|
|||
if (dns_name_is_single_label(fqdn))
|
||||
r--;
|
||||
|
||||
r = dhcp6_option_append(buf, buflen, SD_DHCP6_OPTION_FQDN, 1 + r, buffer);
|
||||
r = dhcp6_option_append(buf, buflen, SD_DHCP6_OPTION_CLIENT_FQDN, 1 + r, buffer);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
Copyright © 2014 Intel Corporation. All rights reserved.
|
||||
***/
|
||||
|
||||
#include <errno.h>
|
||||
#include <netinet/ip6.h>
|
||||
#include <netinet/udp.h>
|
||||
|
||||
|
@ -36,57 +37,83 @@ enum {
|
|||
DHCP6_PORT_CLIENT = 546,
|
||||
};
|
||||
|
||||
#define DHCP6_INF_TIMEOUT 1 * USEC_PER_SEC
|
||||
#define DHCP6_INF_MAX_RT 120 * USEC_PER_SEC
|
||||
#define DHCP6_SOL_MAX_DELAY 1 * USEC_PER_SEC
|
||||
#define DHCP6_SOL_TIMEOUT 1 * USEC_PER_SEC
|
||||
#define DHCP6_SOL_MAX_RT 120 * USEC_PER_SEC
|
||||
#define DHCP6_REQ_TIMEOUT 1 * USEC_PER_SEC
|
||||
#define DHCP6_REQ_MAX_RT 120 * USEC_PER_SEC
|
||||
#define DHCP6_INF_TIMEOUT (1 * USEC_PER_SEC)
|
||||
#define DHCP6_INF_MAX_RT (120 * USEC_PER_SEC)
|
||||
#define DHCP6_SOL_MAX_DELAY (1 * USEC_PER_SEC)
|
||||
#define DHCP6_SOL_TIMEOUT (1 * USEC_PER_SEC)
|
||||
#define DHCP6_SOL_MAX_RT (120 * USEC_PER_SEC)
|
||||
#define DHCP6_REQ_TIMEOUT (1 * USEC_PER_SEC)
|
||||
#define DHCP6_REQ_MAX_RT (120 * USEC_PER_SEC)
|
||||
#define DHCP6_REQ_MAX_RC 10
|
||||
#define DHCP6_REN_TIMEOUT 10 * USEC_PER_SEC
|
||||
#define DHCP6_REN_MAX_RT 600 * USEC_PER_SEC
|
||||
#define DHCP6_REB_TIMEOUT 10 * USEC_PER_SEC
|
||||
#define DHCP6_REB_MAX_RT 600 * USEC_PER_SEC
|
||||
#define DHCP6_REN_TIMEOUT (10 * USEC_PER_SEC)
|
||||
#define DHCP6_REN_MAX_RT (600 * USEC_PER_SEC)
|
||||
#define DHCP6_REB_TIMEOUT (10 * USEC_PER_SEC)
|
||||
#define DHCP6_REB_MAX_RT (600 * USEC_PER_SEC)
|
||||
|
||||
enum DHCP6State {
|
||||
DHCP6_STATE_STOPPED = 0,
|
||||
DHCP6_STATE_INFORMATION_REQUEST = 1,
|
||||
DHCP6_STATE_SOLICITATION = 2,
|
||||
DHCP6_STATE_REQUEST = 3,
|
||||
DHCP6_STATE_BOUND = 4,
|
||||
DHCP6_STATE_RENEW = 5,
|
||||
DHCP6_STATE_REBIND = 6,
|
||||
};
|
||||
typedef enum DHCP6State {
|
||||
DHCP6_STATE_STOPPED,
|
||||
DHCP6_STATE_INFORMATION_REQUEST,
|
||||
DHCP6_STATE_SOLICITATION,
|
||||
DHCP6_STATE_REQUEST,
|
||||
DHCP6_STATE_BOUND,
|
||||
DHCP6_STATE_RENEW,
|
||||
DHCP6_STATE_REBIND,
|
||||
_DHCP6_STATE_MAX,
|
||||
_DHCP6_STATE_INVALID = -EINVAL,
|
||||
} DHCP6State;
|
||||
|
||||
enum {
|
||||
DHCP6_SOLICIT = 1,
|
||||
DHCP6_ADVERTISE = 2,
|
||||
DHCP6_REQUEST = 3,
|
||||
DHCP6_CONFIRM = 4,
|
||||
DHCP6_RENEW = 5,
|
||||
DHCP6_REBIND = 6,
|
||||
DHCP6_REPLY = 7,
|
||||
DHCP6_RELEASE = 8,
|
||||
DHCP6_DECLINE = 9,
|
||||
DHCP6_RECONFIGURE = 10,
|
||||
DHCP6_INFORMATION_REQUEST = 11,
|
||||
DHCP6_RELAY_FORW = 12,
|
||||
DHCP6_RELAY_REPL = 13,
|
||||
_DHCP6_MESSAGE_MAX = 14,
|
||||
};
|
||||
/* https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#dhcpv6-parameters-1 */
|
||||
typedef enum DHCP6MessageType {
|
||||
DHCP6_MESSAGE_SOLICIT = 1, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_ADVERTISE = 2, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_REQUEST = 3, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_CONFIRM = 4, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_RENEW = 5, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_REBIND = 6, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_REPLY = 7, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_RELEASE = 8, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_DECLINE = 9, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_RECONFIGURE = 10, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_INFORMATION_REQUEST = 11, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_RELAY_FORWARD = 12, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_RELAY_REPLY = 13, /* RFC 8415 */
|
||||
DHCP6_MESSAGE_LEASE_QUERY = 14, /* RFC 5007 */
|
||||
DHCP6_MESSAGE_LEASE_QUERY_REPLY = 15, /* RFC 5007 */
|
||||
DHCP6_MESSAGE_LEASE_QUERY_DONE = 16, /* RFC 5460 */
|
||||
DHCP6_MESSAGE_LEASE_QUERY_DATA = 17, /* RFC 5460 */
|
||||
DHCP6_MESSAGE_RECONFIGURE_REQUEST = 18, /* RFC 6977 */
|
||||
DHCP6_MESSAGE_RECONFIGURE_REPLY = 19, /* RFC 6977 */
|
||||
DHCP6_MESSAGE_DHCPV4_QUERY = 20, /* RFC 7341 */
|
||||
DHCP6_MESSAGE_DHCPV4_RESPONSE = 21, /* RFC 7341 */
|
||||
DHCP6_MESSAGE_ACTIVE_LEASE_QUERY = 22, /* RFC 7653 */
|
||||
DHCP6_MESSAGE_START_TLS = 23, /* RFC 7653 */
|
||||
DHCP6_MESSAGE_BINDING_UPDATE = 24, /* RFC 8156 */
|
||||
DHCP6_MESSAGE_BINDING_REPLY = 25, /* RFC 8156 */
|
||||
DHCP6_MESSAGE_POOL_REQUEST = 26, /* RFC 8156 */
|
||||
DHCP6_MESSAGE_POOL_RESPONSE = 27, /* RFC 8156 */
|
||||
DHCP6_MESSAGE_UPDATE_REQUEST = 28, /* RFC 8156 */
|
||||
DHCP6_MESSAGE_UPDATE_REQUEST_ALL = 29, /* RFC 8156 */
|
||||
DHCP6_MESSAGE_UPDATE_DONE = 30, /* RFC 8156 */
|
||||
DHCP6_MESSAGE_CONNECT = 31, /* RFC 8156 */
|
||||
DHCP6_MESSAGE_CONNECT_REPLY = 32, /* RFC 8156 */
|
||||
DHCP6_MESSAGE_DISCONNECT = 33, /* RFC 8156 */
|
||||
DHCP6_MESSAGE_STATE = 34, /* RFC 8156 */
|
||||
DHCP6_MESSAGE_CONTACT = 35, /* RFC 8156 */
|
||||
_DHCP6_MESSAGE_TYPE_MAX,
|
||||
_DHCP6_MESSAGE_TYPE_INVALID = -EINVAL,
|
||||
} DHCP6MessageType;
|
||||
|
||||
enum {
|
||||
typedef enum DHCP6NTPSubOption {
|
||||
DHCP6_NTP_SUBOPTION_SRV_ADDR = 1,
|
||||
DHCP6_NTP_SUBOPTION_MC_ADDR = 2,
|
||||
DHCP6_NTP_SUBOPTION_SRV_FQDN = 3,
|
||||
};
|
||||
} DHCP6NTPSubOption;
|
||||
|
||||
/*
|
||||
* RFC 8415, RFC 5007 and RFC 7653 status codes:
|
||||
* https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#dhcpv6-parameters-5
|
||||
*/
|
||||
enum {
|
||||
typedef enum DHCP6Status {
|
||||
DHCP6_STATUS_SUCCESS = 0,
|
||||
DHCP6_STATUS_UNSPEC_FAIL = 1,
|
||||
DHCP6_STATUS_NO_ADDRS_AVAIL = 2,
|
||||
|
@ -110,11 +137,12 @@ enum {
|
|||
DHCP6_STATUS_SERVER_SHUTTING_DOWN = 20,
|
||||
DHCP6_STATUS_DNS_UPDATE_NOT_SUPPORTED = 21,
|
||||
DHCP6_STATUS_EXCESSIVE_TIME_SKEW = 22,
|
||||
_DHCP6_STATUS_MAX = 23,
|
||||
};
|
||||
_DHCP6_STATUS_MAX,
|
||||
_DHCP6_STATUS_INVALID = -EINVAL,
|
||||
} DHCP6Status;
|
||||
|
||||
enum {
|
||||
DHCP6_FQDN_FLAG_S = (1 << 0),
|
||||
DHCP6_FQDN_FLAG_O = (1 << 1),
|
||||
DHCP6_FQDN_FLAG_N = (1 << 2),
|
||||
};
|
||||
typedef enum DHCP6FQDNFlag {
|
||||
DHCP6_FQDN_FLAG_S = 1 << 0,
|
||||
DHCP6_FQDN_FLAG_O = 1 << 1,
|
||||
DHCP6_FQDN_FLAG_N = 1 << 2,
|
||||
} DHCP6FQDNFlag;
|
||||
|
|
|
@ -35,16 +35,16 @@
|
|||
#define IRT_MINIMUM (600 * USEC_PER_SEC)
|
||||
|
||||
/* what to request from the server, addresses (IA_NA) and/or prefixes (IA_PD) */
|
||||
enum {
|
||||
DHCP6_REQUEST_IA_NA = 1,
|
||||
DHCP6_REQUEST_IA_TA = 2, /* currently not used */
|
||||
DHCP6_REQUEST_IA_PD = 4,
|
||||
};
|
||||
typedef enum DHCP6RequestIA {
|
||||
DHCP6_REQUEST_IA_NA = 1 << 0,
|
||||
DHCP6_REQUEST_IA_TA = 1 << 1, /* currently not used */
|
||||
DHCP6_REQUEST_IA_PD = 1 << 2,
|
||||
} DHCP6RequestIA;
|
||||
|
||||
struct sd_dhcp6_client {
|
||||
unsigned n_ref;
|
||||
|
||||
enum DHCP6State state;
|
||||
DHCP6State state;
|
||||
sd_event *event;
|
||||
int event_priority;
|
||||
int ifindex;
|
||||
|
@ -58,7 +58,7 @@ struct sd_dhcp6_client {
|
|||
DHCP6IA ia_pd;
|
||||
sd_event_source *timeout_t1;
|
||||
sd_event_source *timeout_t2;
|
||||
unsigned request;
|
||||
DHCP6RequestIA request_ia;
|
||||
be32_t transaction_id;
|
||||
usec_t transaction_start;
|
||||
struct sd_dhcp6_lease *lease;
|
||||
|
@ -96,20 +96,42 @@ static const uint16_t default_req_opts[] = {
|
|||
SD_DHCP6_OPTION_SNTP_SERVERS,
|
||||
};
|
||||
|
||||
const char * dhcp6_message_type_table[_DHCP6_MESSAGE_MAX] = {
|
||||
[DHCP6_SOLICIT] = "SOLICIT",
|
||||
[DHCP6_ADVERTISE] = "ADVERTISE",
|
||||
[DHCP6_REQUEST] = "REQUEST",
|
||||
[DHCP6_CONFIRM] = "CONFIRM",
|
||||
[DHCP6_RENEW] = "RENEW",
|
||||
[DHCP6_REBIND] = "REBIND",
|
||||
[DHCP6_REPLY] = "REPLY",
|
||||
[DHCP6_RELEASE] = "RELEASE",
|
||||
[DHCP6_DECLINE] = "DECLINE",
|
||||
[DHCP6_RECONFIGURE] = "RECONFIGURE",
|
||||
[DHCP6_INFORMATION_REQUEST] = "INFORMATION-REQUEST",
|
||||
[DHCP6_RELAY_FORW] = "RELAY-FORW",
|
||||
[DHCP6_RELAY_REPL] = "RELAY-REPL",
|
||||
const char * dhcp6_message_type_table[_DHCP6_MESSAGE_TYPE_MAX] = {
|
||||
[DHCP6_MESSAGE_SOLICIT] = "Solicit",
|
||||
[DHCP6_MESSAGE_ADVERTISE] = "Advertise",
|
||||
[DHCP6_MESSAGE_REQUEST] = "Request",
|
||||
[DHCP6_MESSAGE_CONFIRM] = "Confirm",
|
||||
[DHCP6_MESSAGE_RENEW] = "Renew",
|
||||
[DHCP6_MESSAGE_REBIND] = "Rebind",
|
||||
[DHCP6_MESSAGE_REPLY] = "Reply",
|
||||
[DHCP6_MESSAGE_RELEASE] = "Release",
|
||||
[DHCP6_MESSAGE_DECLINE] = "Decline",
|
||||
[DHCP6_MESSAGE_RECONFIGURE] = "Reconfigure",
|
||||
[DHCP6_MESSAGE_INFORMATION_REQUEST] = "Information Request",
|
||||
[DHCP6_MESSAGE_RELAY_FORWARD] = "Relay Forward",
|
||||
[DHCP6_MESSAGE_RELAY_REPLY] = "Relay Reply",
|
||||
[DHCP6_MESSAGE_LEASE_QUERY] = "Lease Query",
|
||||
[DHCP6_MESSAGE_LEASE_QUERY_REPLY] = "Lease Query Reply",
|
||||
[DHCP6_MESSAGE_LEASE_QUERY_DONE] = "Lease Query Done",
|
||||
[DHCP6_MESSAGE_LEASE_QUERY_DATA] = "Lease Query Data",
|
||||
[DHCP6_MESSAGE_RECONFIGURE_REQUEST] = "Reconfigure Request",
|
||||
[DHCP6_MESSAGE_RECONFIGURE_REPLY] = "Reconfigure Reply",
|
||||
[DHCP6_MESSAGE_DHCPV4_QUERY] = "DHCPv4 Query",
|
||||
[DHCP6_MESSAGE_DHCPV4_RESPONSE] = "DHCPv4 Response",
|
||||
[DHCP6_MESSAGE_ACTIVE_LEASE_QUERY] = "Active Lease Query",
|
||||
[DHCP6_MESSAGE_START_TLS] = "Start TLS",
|
||||
[DHCP6_MESSAGE_BINDING_UPDATE] = "Binding Update",
|
||||
[DHCP6_MESSAGE_BINDING_REPLY] = "Binding Reply",
|
||||
[DHCP6_MESSAGE_POOL_REQUEST] = "Pool Request",
|
||||
[DHCP6_MESSAGE_POOL_RESPONSE] = "Pool Response",
|
||||
[DHCP6_MESSAGE_UPDATE_REQUEST] = "Update Request",
|
||||
[DHCP6_MESSAGE_UPDATE_REQUEST_ALL] = "Update Request All",
|
||||
[DHCP6_MESSAGE_UPDATE_DONE] = "Update Done",
|
||||
[DHCP6_MESSAGE_CONNECT] = "Connect",
|
||||
[DHCP6_MESSAGE_CONNECT_REPLY] = "Connect Reply",
|
||||
[DHCP6_MESSAGE_DISCONNECT] = "Disconnect",
|
||||
[DHCP6_MESSAGE_STATE] = "State",
|
||||
[DHCP6_MESSAGE_CONTACT] = "Contact",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_type, int);
|
||||
|
@ -145,7 +167,7 @@ DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_status, int);
|
|||
#define DHCP6_CLIENT_DONT_DESTROY(client) \
|
||||
_cleanup_(sd_dhcp6_client_unrefp) _unused_ sd_dhcp6_client *_dont_destroy_##client = sd_dhcp6_client_ref(client)
|
||||
|
||||
static int client_start(sd_dhcp6_client *client, enum DHCP6State state);
|
||||
static int client_start(sd_dhcp6_client *client, DHCP6State state);
|
||||
|
||||
int sd_dhcp6_client_set_callback(
|
||||
sd_dhcp6_client *client,
|
||||
|
@ -465,7 +487,7 @@ int sd_dhcp6_client_set_request_option(sd_dhcp6_client *client, uint16_t option)
|
|||
assert_return(client, -EINVAL);
|
||||
assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
|
||||
|
||||
if (option <= 0 || option >= UINT8_MAX)
|
||||
if (!dhcp6_option_can_request(option))
|
||||
return -EINVAL;
|
||||
|
||||
for (t = 0; t < client->req_opts_len; t++)
|
||||
|
@ -538,7 +560,7 @@ int sd_dhcp6_client_get_prefix_delegation(sd_dhcp6_client *client, int *delegati
|
|||
assert_return(client, -EINVAL);
|
||||
assert_return(delegation, -EINVAL);
|
||||
|
||||
*delegation = FLAGS_SET(client->request, DHCP6_REQUEST_IA_PD);
|
||||
*delegation = FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -546,7 +568,7 @@ int sd_dhcp6_client_get_prefix_delegation(sd_dhcp6_client *client, int *delegati
|
|||
int sd_dhcp6_client_set_prefix_delegation(sd_dhcp6_client *client, int delegation) {
|
||||
assert_return(client, -EINVAL);
|
||||
|
||||
SET_FLAG(client->request, DHCP6_REQUEST_IA_PD, delegation);
|
||||
SET_FLAG(client->request_ia, DHCP6_REQUEST_IA_PD, delegation);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -555,7 +577,7 @@ int sd_dhcp6_client_get_address_request(sd_dhcp6_client *client, int *request) {
|
|||
assert_return(client, -EINVAL);
|
||||
assert_return(request, -EINVAL);
|
||||
|
||||
*request = FLAGS_SET(client->request, DHCP6_REQUEST_IA_NA);
|
||||
*request = FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -563,7 +585,7 @@ int sd_dhcp6_client_get_address_request(sd_dhcp6_client *client, int *request) {
|
|||
int sd_dhcp6_client_set_address_request(sd_dhcp6_client *client, int request) {
|
||||
assert_return(client, -EINVAL);
|
||||
|
||||
SET_FLAG(client->request, DHCP6_REQUEST_IA_NA, request);
|
||||
SET_FLAG(client->request_ia, DHCP6_REQUEST_IA_NA, request);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -668,11 +690,11 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
|
||||
switch(client->state) {
|
||||
case DHCP6_STATE_INFORMATION_REQUEST:
|
||||
message->type = DHCP6_INFORMATION_REQUEST;
|
||||
message->type = DHCP6_MESSAGE_INFORMATION_REQUEST;
|
||||
|
||||
if (client->mudurl) {
|
||||
r = dhcp6_option_append(&opt, &optlen,
|
||||
SD_DHCP6_OPTION_MUD_URL, strlen(client->mudurl),
|
||||
SD_DHCP6_OPTION_MUD_URL_V6, strlen(client->mudurl),
|
||||
client->mudurl);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -681,14 +703,14 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
break;
|
||||
|
||||
case DHCP6_STATE_SOLICITATION:
|
||||
message->type = DHCP6_SOLICIT;
|
||||
message->type = DHCP6_MESSAGE_SOLICIT;
|
||||
|
||||
r = dhcp6_option_append(&opt, &optlen,
|
||||
SD_DHCP6_OPTION_RAPID_COMMIT, 0, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_NA)) {
|
||||
if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA)) {
|
||||
r = dhcp6_option_append_ia(&opt, &optlen,
|
||||
&client->ia_na);
|
||||
if (r < 0)
|
||||
|
@ -703,7 +725,7 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
|
||||
if (client->mudurl) {
|
||||
r = dhcp6_option_append(&opt, &optlen,
|
||||
SD_DHCP6_OPTION_MUD_URL, strlen(client->mudurl),
|
||||
SD_DHCP6_OPTION_MUD_URL_V6, strlen(client->mudurl),
|
||||
client->mudurl);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -728,7 +750,7 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
return r;
|
||||
}
|
||||
|
||||
if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_PD)) {
|
||||
if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD)) {
|
||||
r = dhcp6_option_append_pd(&opt, &optlen, &client->ia_pd, &client->hint_pd_prefix);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -740,9 +762,9 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
case DHCP6_STATE_RENEW:
|
||||
|
||||
if (client->state == DHCP6_STATE_REQUEST)
|
||||
message->type = DHCP6_REQUEST;
|
||||
message->type = DHCP6_MESSAGE_REQUEST;
|
||||
else
|
||||
message->type = DHCP6_RENEW;
|
||||
message->type = DHCP6_MESSAGE_RENEW;
|
||||
|
||||
r = dhcp6_option_append(&opt, &optlen, SD_DHCP6_OPTION_SERVERID,
|
||||
client->lease->serverid_len,
|
||||
|
@ -750,7 +772,7 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_NA) && client->lease->ia.addresses) {
|
||||
if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA) && client->lease->ia.addresses) {
|
||||
r = dhcp6_option_append_ia(&opt, &optlen,
|
||||
&client->lease->ia);
|
||||
if (r < 0)
|
||||
|
@ -765,7 +787,7 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
|
||||
if (client->mudurl) {
|
||||
r = dhcp6_option_append(&opt, &optlen,
|
||||
SD_DHCP6_OPTION_MUD_URL, strlen(client->mudurl),
|
||||
SD_DHCP6_OPTION_MUD_URL_V6, strlen(client->mudurl),
|
||||
client->mudurl);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -789,7 +811,7 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
return r;
|
||||
}
|
||||
|
||||
if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_PD) && client->lease->pd.addresses) {
|
||||
if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD) && client->lease->pd.addresses) {
|
||||
r = dhcp6_option_append_pd(&opt, &optlen, &client->lease->pd, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -798,9 +820,9 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
break;
|
||||
|
||||
case DHCP6_STATE_REBIND:
|
||||
message->type = DHCP6_REBIND;
|
||||
message->type = DHCP6_MESSAGE_REBIND;
|
||||
|
||||
if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_NA)) {
|
||||
if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA)) {
|
||||
r = dhcp6_option_append_ia(&opt, &optlen, &client->lease->ia);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -814,7 +836,7 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
|
||||
if (client->mudurl) {
|
||||
r = dhcp6_option_append(&opt, &optlen,
|
||||
SD_DHCP6_OPTION_MUD_URL, strlen(client->mudurl),
|
||||
SD_DHCP6_OPTION_MUD_URL_V6, strlen(client->mudurl),
|
||||
client->mudurl);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -838,7 +860,7 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
return r;
|
||||
}
|
||||
|
||||
if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_PD)) {
|
||||
if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD)) {
|
||||
r = dhcp6_option_append_pd(&opt, &optlen, &client->lease->pd, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -849,6 +871,8 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
|||
case DHCP6_STATE_STOPPED:
|
||||
case DHCP6_STATE_BOUND:
|
||||
return -EINVAL;
|
||||
default:
|
||||
assert_not_reached();
|
||||
}
|
||||
|
||||
r = dhcp6_option_append(&opt, &optlen, SD_DHCP6_OPTION_ORO,
|
||||
|
@ -926,7 +950,7 @@ static int client_timeout_t1(sd_event_source *s, uint64_t usec, void *userdata)
|
|||
static int client_timeout_resend_expire(sd_event_source *s, uint64_t usec, void *userdata) {
|
||||
sd_dhcp6_client *client = userdata;
|
||||
DHCP6_CLIENT_DONT_DESTROY(client);
|
||||
enum DHCP6State state;
|
||||
DHCP6State state;
|
||||
|
||||
assert(s);
|
||||
assert(client);
|
||||
|
@ -1017,6 +1041,8 @@ static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userda
|
|||
case DHCP6_STATE_STOPPED:
|
||||
case DHCP6_STATE_BOUND:
|
||||
return 0;
|
||||
default:
|
||||
assert_not_reached();
|
||||
}
|
||||
|
||||
if (max_retransmit_count > 0 &&
|
||||
|
@ -1041,8 +1067,8 @@ static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userda
|
|||
client->retransmit_time += init_retransmit_time / 10;
|
||||
|
||||
} else {
|
||||
if (max_retransmit_time > 0 &&
|
||||
client->retransmit_time > max_retransmit_time / 2)
|
||||
assert(max_retransmit_time > 0);
|
||||
if (client->retransmit_time > max_retransmit_time / 2)
|
||||
client->retransmit_time = client_timeout_compute_random(max_retransmit_time);
|
||||
else
|
||||
client->retransmit_time += client_timeout_compute_random(client->retransmit_time);
|
||||
|
@ -1270,7 +1296,7 @@ static int client_parse_message(
|
|||
|
||||
break;
|
||||
|
||||
case SD_DHCP6_OPTION_FQDN:
|
||||
case SD_DHCP6_OPTION_CLIENT_FQDN:
|
||||
r = dhcp6_lease_set_fqdn(lease, optval, optlen);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -1323,7 +1349,7 @@ static int client_receive_reply(sd_dhcp6_client *client, DHCP6Message *reply, si
|
|||
assert(client);
|
||||
assert(reply);
|
||||
|
||||
if (reply->type != DHCP6_REPLY)
|
||||
if (reply->type != DHCP6_MESSAGE_REPLY)
|
||||
return 0;
|
||||
|
||||
r = dhcp6_lease_new(&lease);
|
||||
|
@ -1354,7 +1380,7 @@ static int client_receive_advertise(sd_dhcp6_client *client, DHCP6Message *adver
|
|||
uint8_t pref_advertise = 0, pref_lease = 0;
|
||||
int r;
|
||||
|
||||
if (advertise->type != DHCP6_ADVERTISE)
|
||||
if (advertise->type != DHCP6_MESSAGE_ADVERTISE)
|
||||
return 0;
|
||||
|
||||
r = dhcp6_lease_new(&lease);
|
||||
|
@ -1426,26 +1452,12 @@ static int client_receive_message(
|
|||
return 0;
|
||||
}
|
||||
|
||||
switch(message->type) {
|
||||
case DHCP6_SOLICIT:
|
||||
case DHCP6_REQUEST:
|
||||
case DHCP6_CONFIRM:
|
||||
case DHCP6_RENEW:
|
||||
case DHCP6_REBIND:
|
||||
case DHCP6_RELEASE:
|
||||
case DHCP6_DECLINE:
|
||||
case DHCP6_INFORMATION_REQUEST:
|
||||
case DHCP6_RELAY_FORW:
|
||||
case DHCP6_RELAY_REPL:
|
||||
return 0;
|
||||
|
||||
case DHCP6_ADVERTISE:
|
||||
case DHCP6_REPLY:
|
||||
case DHCP6_RECONFIGURE:
|
||||
break;
|
||||
|
||||
default:
|
||||
log_dhcp6_client(client, "Unknown message type %d", message->type);
|
||||
if (!IN_SET(message->type, DHCP6_MESSAGE_ADVERTISE, DHCP6_MESSAGE_REPLY, DHCP6_MESSAGE_RECONFIGURE)) {
|
||||
const char *type_str = dhcp6_message_type_to_string(message->type);
|
||||
if (type_str)
|
||||
log_dhcp6_client(client, "Received unexpected %s message, ignoring.", type_str);
|
||||
else
|
||||
log_dhcp6_client(client, "Received unsupported message type %u, ignoring.", message->type);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1507,6 +1519,8 @@ static int client_receive_message(
|
|||
|
||||
case DHCP6_STATE_STOPPED:
|
||||
return 0;
|
||||
default:
|
||||
assert_not_reached();
|
||||
}
|
||||
|
||||
log_dhcp6_client(client, "Recv %s",
|
||||
|
@ -1520,14 +1534,14 @@ static int client_get_lifetime(sd_dhcp6_client *client, uint32_t *lifetime_t1,
|
|||
assert_return(client, -EINVAL);
|
||||
assert_return(client->lease, -EINVAL);
|
||||
|
||||
if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_NA) && client->lease->ia.addresses) {
|
||||
if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA) && client->lease->ia.addresses) {
|
||||
*lifetime_t1 = be32toh(client->lease->ia.ia_na.lifetime_t1);
|
||||
*lifetime_t2 = be32toh(client->lease->ia.ia_na.lifetime_t2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (FLAGS_SET(client->request, DHCP6_REQUEST_IA_PD) && client->lease->pd.addresses) {
|
||||
if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD) && client->lease->pd.addresses) {
|
||||
*lifetime_t1 = be32toh(client->lease->pd.ia_pd.lifetime_t1);
|
||||
*lifetime_t2 = be32toh(client->lease->pd.ia_pd.lifetime_t2);
|
||||
|
||||
|
@ -1537,7 +1551,7 @@ static int client_get_lifetime(sd_dhcp6_client *client, uint32_t *lifetime_t1,
|
|||
return -ENOMSG;
|
||||
}
|
||||
|
||||
static int client_start(sd_dhcp6_client *client, enum DHCP6State state) {
|
||||
static int client_start(sd_dhcp6_client *client, DHCP6State state) {
|
||||
int r;
|
||||
usec_t timeout, time_now;
|
||||
uint32_t lifetime_t1, lifetime_t2;
|
||||
|
@ -1637,6 +1651,8 @@ static int client_start(sd_dhcp6_client *client, enum DHCP6State state) {
|
|||
client->state = state;
|
||||
|
||||
return 0;
|
||||
default:
|
||||
assert_not_reached();
|
||||
}
|
||||
|
||||
client->transaction_id = random_u32() & htobe32(0x00ffffff);
|
||||
|
@ -1675,7 +1691,7 @@ int sd_dhcp6_client_is_running(sd_dhcp6_client *client) {
|
|||
}
|
||||
|
||||
int sd_dhcp6_client_start(sd_dhcp6_client *client) {
|
||||
enum DHCP6State state = DHCP6_STATE_SOLICITATION;
|
||||
DHCP6State state = DHCP6_STATE_SOLICITATION;
|
||||
int r;
|
||||
|
||||
assert_return(client, -EINVAL);
|
||||
|
@ -1686,7 +1702,7 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) {
|
|||
if (client->state != DHCP6_STATE_STOPPED)
|
||||
return -EBUSY;
|
||||
|
||||
if (!client->information_request && !client->request)
|
||||
if (!client->information_request && client->request_ia == 0)
|
||||
return -EINVAL;
|
||||
|
||||
r = client_reset(client);
|
||||
|
@ -1814,7 +1830,7 @@ int sd_dhcp6_client_new(sd_dhcp6_client **ret) {
|
|||
.ia_na.type = SD_DHCP6_OPTION_IA_NA,
|
||||
.ia_pd.type = SD_DHCP6_OPTION_IA_PD,
|
||||
.ifindex = -1,
|
||||
.request = DHCP6_REQUEST_IA_NA,
|
||||
.request_ia = DHCP6_REQUEST_IA_NA,
|
||||
.fd = -1,
|
||||
.req_opts_len = ELEMENTSOF(default_req_opts),
|
||||
.hint_pd_prefix.iapdprefix.lifetime_preferred = (be32_t) -1,
|
||||
|
|
|
@ -63,12 +63,16 @@ static int test_client_basic(sd_event *e) {
|
|||
assert_se(sd_dhcp6_client_set_fqdn(client, "~host") == -EINVAL);
|
||||
assert_se(sd_dhcp6_client_set_fqdn(client, "~host.domain") == -EINVAL);
|
||||
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_CLIENTID) == 0);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_CLIENTID) == -EINVAL);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DNS_SERVERS) == -EEXIST);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NTP_SERVER) == -EEXIST);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_SNTP_SERVERS) == -EEXIST);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DOMAIN_LIST) == -EEXIST);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, 10) == 0);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, 10) == -EINVAL);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NIS_SERVERS) == 0);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NISP_SERVERS) == 0);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NIS_SERVERS) == -EEXIST);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_NISP_SERVERS) == -EEXIST);
|
||||
|
||||
assert_se(sd_dhcp6_client_set_information_request(client, 1) >= 0);
|
||||
v = 0;
|
||||
|
@ -450,7 +454,7 @@ static int test_advertise_option(sd_event *e) {
|
|||
|
||||
assert_se(dhcp6_lease_new(&lease) >= 0);
|
||||
|
||||
assert_se(advertise->type == DHCP6_ADVERTISE);
|
||||
assert_se(advertise->type == DHCP6_MESSAGE_ADVERTISE);
|
||||
assert_se((be32toh(advertise->transaction_id) & 0x00ffffff) ==
|
||||
0x0fb4e5);
|
||||
|
||||
|
@ -617,7 +621,7 @@ static int test_client_send_reply(DHCP6Message *request) {
|
|||
log_debug("/* %s */", __func__);
|
||||
|
||||
reply.transaction_id = request->transaction_id;
|
||||
reply.type = DHCP6_REPLY;
|
||||
reply.type = DHCP6_MESSAGE_REPLY;
|
||||
|
||||
memcpy(msg_reply, &reply.transaction_id, 4);
|
||||
|
||||
|
@ -642,7 +646,7 @@ static int test_client_verify_request(DHCP6Message *request, size_t len) {
|
|||
|
||||
log_debug("/* %s */", __func__);
|
||||
|
||||
assert_se(request->type == DHCP6_REQUEST);
|
||||
assert_se(request->type == DHCP6_MESSAGE_REQUEST);
|
||||
assert_se(dhcp6_lease_new(&lease) >= 0);
|
||||
|
||||
len -= sizeof(DHCP6Message);
|
||||
|
@ -696,7 +700,7 @@ static int test_client_verify_request(DHCP6Message *request, size_t len) {
|
|||
assert_se(optlen == 2);
|
||||
|
||||
break;
|
||||
case SD_DHCP6_OPTION_FQDN:
|
||||
case SD_DHCP6_OPTION_CLIENT_FQDN:
|
||||
assert_se(!found_fqdn);
|
||||
found_fqdn = true;
|
||||
|
||||
|
@ -725,7 +729,7 @@ static int test_client_send_advertise(DHCP6Message *solicit) {
|
|||
log_debug("/* %s */", __func__);
|
||||
|
||||
advertise.transaction_id = solicit->transaction_id;
|
||||
advertise.type = DHCP6_ADVERTISE;
|
||||
advertise.type = DHCP6_MESSAGE_ADVERTISE;
|
||||
|
||||
memcpy(msg_advertise, &advertise.transaction_id, 4);
|
||||
|
||||
|
@ -746,7 +750,7 @@ static int test_client_verify_solicit(DHCP6Message *solicit, size_t len) {
|
|||
|
||||
log_debug("/* %s */", __func__);
|
||||
|
||||
assert_se(solicit->type == DHCP6_SOLICIT);
|
||||
assert_se(solicit->type == DHCP6_MESSAGE_SOLICIT);
|
||||
|
||||
len -= sizeof(DHCP6Message);
|
||||
|
||||
|
@ -784,7 +788,7 @@ static int test_client_verify_solicit(DHCP6Message *solicit, size_t len) {
|
|||
|
||||
break;
|
||||
|
||||
case SD_DHCP6_OPTION_FQDN:
|
||||
case SD_DHCP6_OPTION_CLIENT_FQDN:
|
||||
assert_se(!found_fqdn);
|
||||
found_fqdn = true;
|
||||
|
||||
|
@ -859,7 +863,7 @@ static int test_client_verify_information_request(DHCP6Message *information_requ
|
|||
|
||||
log_debug("/* %s */", __func__);
|
||||
|
||||
assert_se(information_request->type == DHCP6_INFORMATION_REQUEST);
|
||||
assert_se(information_request->type == DHCP6_MESSAGE_INFORMATION_REQUEST);
|
||||
assert_se(dhcp6_lease_new(&lease) >= 0);
|
||||
|
||||
len -= sizeof(DHCP6Message);
|
||||
|
|
|
@ -1459,12 +1459,6 @@ static int dhcp6_configure(Link *link) {
|
|||
if (r < 0)
|
||||
return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set ifindex: %m");
|
||||
|
||||
if (link->network->dhcp6_rapid_commit) {
|
||||
r = sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_RAPID_COMMIT);
|
||||
if (r < 0)
|
||||
return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set request flag for rapid commit: %m");
|
||||
}
|
||||
|
||||
if (link->network->dhcp6_mudurl) {
|
||||
r = sd_dhcp6_client_set_request_mud_url(client, link->network->dhcp6_mudurl);
|
||||
if (r < 0)
|
||||
|
|
|
@ -242,7 +242,6 @@ DHCPv6.UseDNS, config_parse_dhcp_use_dns,
|
|||
DHCPv6.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp6_use_hostname)
|
||||
DHCPv6.UseDomains, config_parse_dhcp_use_domains, AF_INET6, 0
|
||||
DHCPv6.UseNTP, config_parse_dhcp_use_ntp, AF_INET6, 0
|
||||
DHCPv6.RapidCommit, config_parse_bool, 0, offsetof(Network, dhcp6_rapid_commit)
|
||||
DHCPv6.MUDURL, config_parse_mud_url, 0, offsetof(Network, dhcp6_mudurl)
|
||||
DHCPv6.RequestOptions, config_parse_dhcp_request_options, AF_INET6, 0
|
||||
DHCPv6.UserClass, config_parse_dhcp_user_or_vendor_class, AF_INET6, offsetof(Network, dhcp6_user_class)
|
||||
|
@ -528,11 +527,12 @@ DHCP.RouteMetric, config_parse_dhcp_or_ra_route_metri
|
|||
DHCP.RouteTable, config_parse_dhcp_or_ra_route_table, (RTPROT_DHCP<<16) | AF_UNSPEC, 0
|
||||
DHCP.UseTimezone, config_parse_bool, 0, offsetof(Network, dhcp_use_timezone)
|
||||
DHCP.ListenPort, config_parse_uint16, 0, offsetof(Network, dhcp_client_port)
|
||||
DHCP.RapidCommit, config_parse_bool, 0, offsetof(Network, dhcp6_rapid_commit)
|
||||
DHCP.RapidCommit, config_parse_warn_compat, DISABLED_LEGACY, 0
|
||||
DHCP.ForceDHCPv6PDOtherInformation, config_parse_bool, 0, offsetof(Network, dhcp6_force_pd_other_information)
|
||||
DHCPv4.UseDomainName, config_parse_dhcp_use_domains, AF_INET, 0
|
||||
DHCPv4.CriticalConnection, config_parse_tristate, 0, offsetof(Network, dhcp_critical)
|
||||
DHCPv6.RouteMetric, config_parse_dhcp_or_ra_route_metric, AF_INET6, 0
|
||||
DHCPv6.RapidCommit, config_parse_warn_compat, DISABLED_LEGACY, 0
|
||||
IPv6AcceptRA.DenyList, config_parse_in_addr_prefixes, AF_INET6, offsetof(Network, ndisc_deny_listed_prefix)
|
||||
IPv6AcceptRA.BlackList, config_parse_in_addr_prefixes, AF_INET6, offsetof(Network, ndisc_deny_listed_prefix)
|
||||
TrafficControlQueueingDiscipline.Parent, config_parse_qdisc_parent, _QDISC_KIND_INVALID, 0
|
||||
|
|
|
@ -403,7 +403,6 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
|
|||
.dhcp6_use_dns = true,
|
||||
.dhcp6_use_hostname = true,
|
||||
.dhcp6_use_ntp = true,
|
||||
.dhcp6_rapid_commit = true,
|
||||
.dhcp6_duid.type = _DUID_TYPE_INVALID,
|
||||
|
||||
.dhcp6_pd = -1,
|
||||
|
|
|
@ -174,7 +174,6 @@ struct Network {
|
|||
bool dhcp6_use_hostname;
|
||||
bool dhcp6_use_ntp;
|
||||
bool dhcp6_use_ntp_set;
|
||||
bool dhcp6_rapid_commit;
|
||||
bool dhcp6_route_table;
|
||||
bool dhcp6_route_table_set;
|
||||
bool dhcp6_route_table_set_explicitly;
|
||||
|
|
|
@ -24,7 +24,7 @@ int main(int argc, char **argv) {
|
|||
test_table(bond_primary_reselect, NETDEV_BOND_PRIMARY_RESELECT);
|
||||
test_table(bond_xmit_hash_policy, NETDEV_BOND_XMIT_HASH_POLICY);
|
||||
test_table(dhcp6_message_status, DHCP6_STATUS);
|
||||
test_table_sparse(dhcp6_message_type, DHCP6_MESSAGE); /* enum starts from 1 */
|
||||
test_table_sparse(dhcp6_message_type, DHCP6_MESSAGE_TYPE); /* enum starts from 1 */
|
||||
test_table(dhcp_use_domains, DHCP_USE_DOMAINS);
|
||||
test_table(duplex, DUP);
|
||||
test_table(ip6tnl_mode, NETDEV_IP6_TNL_MODE);
|
||||
|
|
|
@ -39,44 +39,151 @@ enum {
|
|||
SD_DHCP6_CLIENT_EVENT_INFORMATION_REQUEST = 13,
|
||||
};
|
||||
|
||||
/* https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#dhcpv6-parameters-2 */
|
||||
enum {
|
||||
SD_DHCP6_OPTION_CLIENTID = 1,
|
||||
SD_DHCP6_OPTION_SERVERID = 2,
|
||||
SD_DHCP6_OPTION_IA_NA = 3,
|
||||
SD_DHCP6_OPTION_IA_TA = 4,
|
||||
SD_DHCP6_OPTION_IAADDR = 5,
|
||||
SD_DHCP6_OPTION_ORO = 6,
|
||||
SD_DHCP6_OPTION_PREFERENCE = 7,
|
||||
SD_DHCP6_OPTION_ELAPSED_TIME = 8,
|
||||
SD_DHCP6_OPTION_RELAY_MSG = 9,
|
||||
SD_DHCP6_OPTION_CLIENTID = 1, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_SERVERID = 2, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_IA_NA = 3, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_IA_TA = 4, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_IAADDR = 5, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_ORO = 6, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_PREFERENCE = 7, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_ELAPSED_TIME = 8, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_RELAY_MSG = 9, /* RFC 8415 */
|
||||
/* option code 10 is unassigned */
|
||||
SD_DHCP6_OPTION_AUTH = 11,
|
||||
SD_DHCP6_OPTION_UNICAST = 12,
|
||||
SD_DHCP6_OPTION_STATUS_CODE = 13,
|
||||
SD_DHCP6_OPTION_RAPID_COMMIT = 14,
|
||||
SD_DHCP6_OPTION_USER_CLASS = 15,
|
||||
SD_DHCP6_OPTION_VENDOR_CLASS = 16,
|
||||
SD_DHCP6_OPTION_VENDOR_OPTS = 17,
|
||||
SD_DHCP6_OPTION_INTERFACE_ID = 18,
|
||||
SD_DHCP6_OPTION_RECONF_MSG = 19,
|
||||
SD_DHCP6_OPTION_RECONF_ACCEPT = 20,
|
||||
|
||||
SD_DHCP6_OPTION_AUTH = 11, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_UNICAST = 12, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_STATUS_CODE = 13, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_RAPID_COMMIT = 14, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_USER_CLASS = 15, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_VENDOR_CLASS = 16, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_VENDOR_OPTS = 17, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_INTERFACE_ID = 18, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_RECONF_MSG = 19, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_RECONF_ACCEPT = 20, /* RFC 8415 */
|
||||
SD_DHCP6_OPTION_SIP_SERVER_DOMAIN_NAME = 21, /* RFC 3319 */
|
||||
SD_DHCP6_OPTION_SIP_SERVER_ADDRESS = 22, /* RFC 3319 */
|
||||
SD_DHCP6_OPTION_DNS_SERVERS = 23, /* RFC 3646 */
|
||||
SD_DHCP6_OPTION_DOMAIN_LIST = 24, /* RFC 3646 */
|
||||
SD_DHCP6_OPTION_IA_PD = 25, /* RFC 3633, prefix delegation */
|
||||
SD_DHCP6_OPTION_IA_PD_PREFIX = 26, /* RFC 3633, prefix delegation */
|
||||
|
||||
SD_DHCP6_OPTION_IA_PD = 25, /* RFC 3633, RFC 8415 */
|
||||
SD_DHCP6_OPTION_IA_PD_PREFIX = 26, /* RFC 3633, RFC 8415 */
|
||||
SD_DHCP6_OPTION_NIS_SERVERS = 27, /* RFC 3898 */
|
||||
SD_DHCP6_OPTION_NISP_SERVERS = 28, /* RFC 3898 */
|
||||
SD_DHCP6_OPTION_NIS_DOMAIN_NAME = 29, /* RFC 3898 */
|
||||
SD_DHCP6_OPTION_NISP_DOMAIN_NAME = 30, /* RFC 3898 */
|
||||
SD_DHCP6_OPTION_SNTP_SERVERS = 31, /* RFC 4075, deprecated */
|
||||
SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME = 32, /* RFC 8415, sec. 21.23 */
|
||||
|
||||
SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME = 32, /* RFC 4242, 8415, sec. 21.23 */
|
||||
SD_DHCP6_OPTION_BCMCS_SERVER_D = 33, /* RFC 4280 */
|
||||
SD_DHCP6_OPTION_BCMCS_SERVER_A = 34, /* RFC 4280 */
|
||||
/* option code 35 is unassigned */
|
||||
|
||||
SD_DHCP6_OPTION_FQDN = 39, /* RFC 4704 */
|
||||
|
||||
SD_DHCP6_OPTION_GEOCONF_CIVIC = 36, /* RFC 4776 */
|
||||
SD_DHCP6_OPTION_REMOTE_ID = 37, /* RFC 4649 */
|
||||
SD_DHCP6_OPTION_SUBSCRIBER_ID = 38, /* RFC 4580 */
|
||||
SD_DHCP6_OPTION_CLIENT_FQDN = 39, /* RFC 4704 */
|
||||
SD_DHCP6_OPTION_PANA_AGENT = 40, /* RFC 5192 */
|
||||
SD_DHCP6_OPTION_NEW_POSIX_TIMEZONE = 41, /* RFC 4833 */
|
||||
SD_DHCP6_OPTION_NEW_TZDB_TIMEZONE = 42, /* RFC 4833 */
|
||||
SD_DHCP6_OPTION_ERO = 43, /* RFC 4994 */
|
||||
SD_DHCP6_OPTION_LQ_QUERY = 44, /* RFC 5007 */
|
||||
SD_DHCP6_OPTION_CLIENT_DATA = 45, /* RFC 5007 */
|
||||
SD_DHCP6_OPTION_CLT_TIME = 46, /* RFC 5007 */
|
||||
SD_DHCP6_OPTION_LQ_RELAY_DATA = 47, /* RFC 5007 */
|
||||
SD_DHCP6_OPTION_LQ_CLIENT_LINK = 48, /* RFC 5007 */
|
||||
SD_DHCP6_OPTION_MIP6_HNIDF = 49, /* RFC 6610 */
|
||||
SD_DHCP6_OPTION_MIP6_VDINF = 50, /* RFC 6610 */
|
||||
SD_DHCP6_OPTION_V6_LOST = 51, /* RFC 5223 */
|
||||
SD_DHCP6_OPTION_CAPWAP_AC_V6 = 52, /* RFC 5417 */
|
||||
SD_DHCP6_OPTION_RELAY_ID = 53, /* RFC 5460 */
|
||||
SD_DHCP6_OPTION_IPV6_ADDRESS_MOS = 54, /* RFC 5678 */
|
||||
SD_DHCP6_OPTION_IPV6_FQDN_MOS = 55, /* RFC 5678 */
|
||||
SD_DHCP6_OPTION_NTP_SERVER = 56, /* RFC 5908 */
|
||||
SD_DHCP6_OPTION_MUD_URL = 112, /* RFC 8250 */
|
||||
|
||||
/* option codes 89-142 are unassigned */
|
||||
SD_DHCP6_OPTION_V6_ACCESS_DOMAIN = 57, /* RFC 5986 */
|
||||
SD_DHCP6_OPTION_SIP_UA_CS_LIST = 58, /* RFC 6011 */
|
||||
SD_DHCP6_OPTION_BOOTFILE_URL = 59, /* RFC 5970 */
|
||||
SD_DHCP6_OPTION_BOOTFILE_PARAM = 60, /* RFC 5970 */
|
||||
SD_DHCP6_OPTION_CLIENT_ARCH_TYPE = 61, /* RFC 5970 */
|
||||
SD_DHCP6_OPTION_NII = 62, /* RFC 5970 */
|
||||
SD_DHCP6_OPTION_GEOLOCATION = 63, /* RFC 6225 */
|
||||
SD_DHCP6_OPTION_AFTR_NAME = 64, /* RFC 6334 */
|
||||
SD_DHCP6_OPTION_ERP_LOCAL_DOMAIN_NAME = 65, /* RFC 6440 */
|
||||
SD_DHCP6_OPTION_RSOO = 66, /* RFC 6422 */
|
||||
SD_DHCP6_OPTION_PD_EXCLUDE = 67, /* RFC 6603 */
|
||||
SD_DHCP6_OPTION_VSS = 68, /* RFC 6607 */
|
||||
SD_DHCP6_OPTION_MIP6_IDINF = 69, /* RFC 6610 */
|
||||
SD_DHCP6_OPTION_MIP6_UDINF = 70, /* RFC 6610 */
|
||||
SD_DHCP6_OPTION_MIP6_HNP = 71, /* RFC 6610 */
|
||||
SD_DHCP6_OPTION_MIP6_HAA = 72, /* RFC 6610 */
|
||||
SD_DHCP6_OPTION_MIP6_HAF = 73, /* RFC 6610 */
|
||||
SD_DHCP6_OPTION_RDNSS_SELECTION = 74, /* RFC 6731 */
|
||||
SD_DHCP6_OPTION_KRB_PRINCIPAL_NAME = 75, /* RFC 6784 */
|
||||
SD_DHCP6_OPTION_KRB_REALM_NAME = 76, /* RFC 6784 */
|
||||
SD_DHCP6_OPTION_KRB_DEFAULT_REALM_NAME = 77, /* RFC 6784 */
|
||||
SD_DHCP6_OPTION_KRB_KDC = 78, /* RFC 6784 */
|
||||
SD_DHCP6_OPTION_CLIENT_LINKLAYER_ADDR = 79, /* RFC 6939 */
|
||||
SD_DHCP6_OPTION_LINK_ADDRESS = 80, /* RFC 6977 */
|
||||
SD_DHCP6_OPTION_RADIUS = 81, /* RFC 7037 */
|
||||
SD_DHCP6_OPTION_SOL_MAX_RT = 82, /* RFC 7083, RFC 8415 */
|
||||
SD_DHCP6_OPTION_INF_MAX_RT = 83, /* RFC 7083, RFC 8415 */
|
||||
SD_DHCP6_OPTION_ADDRSEL = 84, /* RFC 7078 */
|
||||
SD_DHCP6_OPTION_ADDRSEL_TABLE = 85, /* RFC 7078 */
|
||||
SD_DHCP6_OPTION_V6_PCP_SERVER = 86, /* RFC 7291 */
|
||||
SD_DHCP6_OPTION_DHCPV4_MSG = 87, /* RFC 7341 */
|
||||
SD_DHCP6_OPTION_DHCP4_O_DHCP6_SERVER = 88, /* RFC 7341 */
|
||||
SD_DHCP6_OPTION_S46_RULE = 89, /* RFC 7598 */
|
||||
SD_DHCP6_OPTION_S46_BR = 90, /* RFC 7598, RFC 8539 */
|
||||
SD_DHCP6_OPTION_S46_DMR = 91, /* RFC 7598 */
|
||||
SD_DHCP6_OPTION_S46_V4V6BIND = 92, /* RFC 7598 */
|
||||
SD_DHCP6_OPTION_S46_PORTPARAMS = 93, /* RFC 7598 */
|
||||
SD_DHCP6_OPTION_S46_CONT_MAPE = 94, /* RFC 7598 */
|
||||
SD_DHCP6_OPTION_S46_CONT_MAPT = 95, /* RFC 7598 */
|
||||
SD_DHCP6_OPTION_S46_CONT_LW = 96, /* RFC 7598 */
|
||||
SD_DHCP6_OPTION_4RD = 97, /* RFC 7600 */
|
||||
SD_DHCP6_OPTION_4RD_MAP_RULE = 98, /* RFC 7600 */
|
||||
SD_DHCP6_OPTION_4RD_NON_MAP_RULE = 99, /* RFC 7600 */
|
||||
SD_DHCP6_OPTION_LQ_BASE_TIME = 100, /* RFC 7653 */
|
||||
SD_DHCP6_OPTION_LQ_START_TIME = 101, /* RFC 7653 */
|
||||
SD_DHCP6_OPTION_LQ_END_TIME = 102, /* RFC 7653 */
|
||||
SD_DHCP6_OPTION_CAPTIVE_PORTAL = 103, /* RFC 8910 */
|
||||
SD_DHCP6_OPTION_MPL_PARAMETERS = 104, /* RFC 7774 */
|
||||
SD_DHCP6_OPTION_ANI_ATT = 105, /* RFC 7839 */
|
||||
SD_DHCP6_OPTION_ANI_NETWORK_NAME = 106, /* RFC 7839 */
|
||||
SD_DHCP6_OPTION_ANI_AP_NAME = 107, /* RFC 7839 */
|
||||
SD_DHCP6_OPTION_ANI_AP_BSSID = 108, /* RFC 7839 */
|
||||
SD_DHCP6_OPTION_ANI_OPERATOR_ID = 109, /* RFC 7839 */
|
||||
SD_DHCP6_OPTION_ANI_OPERATOR_REALM = 110, /* RFC 7839 */
|
||||
SD_DHCP6_OPTION_S46_PRIORITY = 111, /* RFC 8026 */
|
||||
SD_DHCP6_OPTION_MUD_URL_V6 = 112, /* RFC 8520 */
|
||||
SD_DHCP6_OPTION_V6_PREFIX64 = 113, /* RFC 8115 */
|
||||
SD_DHCP6_OPTION_F_BINDING_STATUS = 114, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_CONNECT_FLAGS = 115, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_DNS_REMOVAL_INFO = 116, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_DNS_HOST_NAME = 117, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_DNS_ZONE_NAME = 118, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_DNS_FLAGS = 119, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_EXPIRATION_TIME = 120, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_MAX_UNACKED_BNDUPD = 121, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_MCLT = 122, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_PARTNER_LIFETIME = 123, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_PARTNER_LIFETIME_SENT = 124, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_PARTNER_DOWN_TIME = 125, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_PARTNER_RAW_CLT_TIME = 126, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_PROTOCOL_VERSION = 127, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_KEEPALIVE_TIME = 128, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_RECONFIGURE_DATA = 129, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_RELATIONSHIP_NAME = 130, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_SERVER_FLAGS = 131, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_SERVER_STATE = 132, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_START_TIME_OF_STATE = 133, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_F_STATE_EXPIRATION_TIME = 134, /* RFC 8156 */
|
||||
SD_DHCP6_OPTION_RELAY_PORT = 135, /* RFC 8357 */
|
||||
SD_DHCP6_OPTION_V6_SZTP_REDIRECT = 136, /* RFC 8572 */
|
||||
SD_DHCP6_OPTION_S46_BIND_IPV6_PREFIX = 137, /* RFC 8539 */
|
||||
SD_DHCP6_OPTION_IA_LL = 138, /* RFC 8947 */
|
||||
SD_DHCP6_OPTION_LLADDR = 139, /* RFC 8947 */
|
||||
SD_DHCP6_OPTION_SLAP_QUAD = 140, /* RFC 8948 */
|
||||
SD_DHCP6_OPTION_V6_DOTS_RI = 141, /* RFC 8973 */
|
||||
SD_DHCP6_OPTION_V6_DOTS_ADDRESS = 142, /* RFC 8973 */
|
||||
SD_DHCP6_OPTION_IPV6_ADDRESS_ANDSF = 143, /* RFC 6153 */
|
||||
/* option codes 144-65535 are unassigned */
|
||||
};
|
||||
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
[Match]
|
||||
Name=veth99
|
||||
|
||||
[Network]
|
||||
DHCP=ipv6
|
||||
|
||||
[DHCPv6]
|
||||
RapidCommit=false
|
|
@ -4012,7 +4012,6 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
|
|||
'dhcp-client-ipv4-only.network',
|
||||
'dhcp-client-ipv4-use-routes-use-gateway.network',
|
||||
'dhcp-client-ipv6-only.network',
|
||||
'dhcp-client-ipv6-rapid-commit.network',
|
||||
'dhcp-client-keep-configuration-dhcp-on-stop.network',
|
||||
'dhcp-client-keep-configuration-dhcp.network',
|
||||
'dhcp-client-listen-port.network',
|
||||
|
@ -4193,8 +4192,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
|
|||
self.assertNotRegex(output, r'9.9.9.9 via 192.168.5.[0-9]* proto dhcp src 192.168.5.[0-9]* metric 1024')
|
||||
|
||||
def test_dhcp_client_ipv4_ipv6(self):
|
||||
copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-ipv6-only.network',
|
||||
'dhcp-client-ipv4-only.network')
|
||||
copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-ipv4-only.network')
|
||||
start_networkd()
|
||||
self.wait_online(['veth-peer:carrier'])
|
||||
start_dnsmasq()
|
||||
|
@ -4247,30 +4245,6 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
|
|||
self.assertTrue(search_words_in_dnsmasq_log('client provides name: test-hostname'))
|
||||
self.assertTrue(search_words_in_dnsmasq_log('26:mtu'))
|
||||
|
||||
def test_dhcp6_client_settings_rapidcommit_true(self):
|
||||
copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-ipv6-only.network')
|
||||
start_networkd()
|
||||
self.wait_online(['veth-peer:carrier'])
|
||||
start_dnsmasq()
|
||||
self.wait_online(['veth99:routable', 'veth-peer:routable'])
|
||||
|
||||
output = check_output('ip address show dev veth99')
|
||||
print(output)
|
||||
self.assertRegex(output, '12:34:56:78:9a:bc')
|
||||
self.assertTrue(search_words_in_dnsmasq_log('14:rapid-commit', True))
|
||||
|
||||
def test_dhcp6_client_settings_rapidcommit_false(self):
|
||||
copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-ipv6-rapid-commit.network')
|
||||
start_networkd()
|
||||
self.wait_online(['veth-peer:carrier'])
|
||||
start_dnsmasq()
|
||||
self.wait_online(['veth99:routable', 'veth-peer:routable'])
|
||||
|
||||
output = check_output('ip address show dev veth99')
|
||||
print(output)
|
||||
self.assertRegex(output, '12:34:56:78:9a:bc')
|
||||
self.assertFalse(search_words_in_dnsmasq_log('14:rapid-commit', True))
|
||||
|
||||
def test_dhcp_client_settings_anonymize(self):
|
||||
copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-anonymize.network')
|
||||
start_networkd()
|
||||
|
|
Loading…
Reference in a new issue