size_t pos = 0;
int r;
bool clientid = false;
- uint8_t *id = NULL;
- size_t id_len;
uint32_t lt_t1 = ~0, lt_t2 = ~0;
assert(client);
break;
case SD_DHCP6_OPTION_SERVERID:
- r = dhcp6_lease_get_serverid(lease, &id, &id_len);
- if (r >= 0 && id) {
+ r = dhcp6_lease_get_serverid(lease, NULL, NULL);
+ if (r >= 0) {
log_dhcp6_client(client, "%s contains multiple serverids",
dhcp6_message_type_to_string(message->type));
return -EINVAL;
}
if (client->state != DHCP6_STATE_INFORMATION_REQUEST) {
- r = dhcp6_lease_get_serverid(lease, &id, &id_len);
- if (r < 0)
+ r = dhcp6_lease_get_serverid(lease, NULL, NULL);
+ if (r < 0) {
log_dhcp6_client(client, "%s has no server id",
dhcp6_message_type_to_string(message->type));
- return r;
- }
+ return -EINVAL;
+ }
- if (lease->ia.addresses) {
- lease->ia.ia_na.lifetime_t1 = htobe32(lt_t1);
- lease->ia.ia_na.lifetime_t2 = htobe32(lt_t2);
- }
+ } else {
+ if (lease->ia.addresses) {
+ lease->ia.ia_na.lifetime_t1 = htobe32(lt_t1);
+ lease->ia.ia_na.lifetime_t2 = htobe32(lt_t2);
+ }
- if (lease->pd.addresses) {
- lease->pd.ia_pd.lifetime_t1 = htobe32(lt_t1);
- lease->pd.ia_pd.lifetime_t2 = htobe32(lt_t2);
+ if (lease->pd.addresses) {
+ lease->pd.ia_pd.lifetime_t1 = htobe32(lt_t1);
+ lease->pd.ia_pd.lifetime_t2 = htobe32(lt_t2);
+ }
}
return 0;
int dhcp6_lease_get_serverid(sd_dhcp6_lease *lease, uint8_t **id, size_t *len) {
assert_return(lease, -EINVAL);
- assert_return(id, -EINVAL);
- assert_return(len, -EINVAL);
- *id = lease->serverid;
- *len = lease->serverid_len;
+ if (!lease->serverid)
+ return -ENOMSG;
+
+ if (id)
+ *id = lease->serverid;
+ if (len)
+ *len = lease->serverid_len;
return 0;
}