X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=inline;f=src%2Flibsystemd-network%2Fsd-dhcp6-client.c;h=3db1cb09dbe88cd40f047dde7665bd30388a9be5;hb=cc22955cfefb4bd6e7a135f1ec95fb5a07ba9ce3;hp=a432bbfc488d768c803385a02f2375d71a096c34;hpb=3e43b2cd97bd82efe6a09e8b9b2e6b5f33f578a0;p=elogind.git diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index a432bbfc4..3db1cb09d 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -158,6 +158,13 @@ int sd_dhcp6_client_set_mac(sd_dhcp6_client *client, const uint8_t *addr, return 0; } +static int client_ensure_duid(sd_dhcp6_client *client) +{ + if (client->duid_len != 0) + return 0; + return dhcp_identifier_set_duid_en(&client->duid, &client->duid_len); +} + int sd_dhcp6_client_set_duid(sd_dhcp6_client *client, uint16_t type, uint8_t *duid, size_t duid_len) { @@ -378,6 +385,7 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) { if (r < 0) return r; + assert (client->duid_len); r = dhcp6_option_append(&opt, &optlen, DHCP6_OPTION_CLIENTID, client->duid_len, &client->duid); if (r < 0) @@ -1108,6 +1116,10 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) if (r < 0) return r; + r = client_ensure_duid(client); + if (r < 0) + return r; + r = dhcp6_network_bind_udp_socket(client->index, NULL); if (r < 0) return r; @@ -1205,7 +1217,6 @@ sd_dhcp6_client *sd_dhcp6_client_unref(sd_dhcp6_client *client) { int sd_dhcp6_client_new(sd_dhcp6_client **ret) { _cleanup_dhcp6_client_unref_ sd_dhcp6_client *client = NULL; - int r; size_t t; assert_return(ret, -EINVAL); @@ -1222,11 +1233,6 @@ int sd_dhcp6_client_new(sd_dhcp6_client **ret) client->fd = -1; - /* initialize DUID */ - r = dhcp_identifier_set_duid_en(&client->duid, &client->duid_len); - if (r < 0) - return r; - client->req_opts_len = ELEMENTSOF(default_req_opts); client->req_opts = new0(be16_t, client->req_opts_len);