sd-dhcp-client/networkd: add transient hostname support
This commit is contained in:
@@ -43,6 +43,7 @@ struct DHCPLease {
|
||||
be32_t router;
|
||||
struct in_addr **dns;
|
||||
uint16_t mtu;
|
||||
char *hostname;
|
||||
};
|
||||
|
||||
typedef struct DHCPLease DHCPLease;
|
||||
@@ -241,6 +242,33 @@ int sd_dhcp_client_get_dns(sd_dhcp_client *client, struct in_addr ***addr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sd_dhcp_client_get_hostname(sd_dhcp_client *client, const char **hostname)
|
||||
{
|
||||
assert_return(client, -EINVAL);
|
||||
assert_return(hostname, -EINVAL);
|
||||
|
||||
switch (client->state) {
|
||||
case DHCP_STATE_INIT:
|
||||
case DHCP_STATE_SELECTING:
|
||||
case DHCP_STATE_INIT_REBOOT:
|
||||
case DHCP_STATE_REBOOTING:
|
||||
case DHCP_STATE_REQUESTING:
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
case DHCP_STATE_BOUND:
|
||||
case DHCP_STATE_RENEWING:
|
||||
case DHCP_STATE_REBINDING:
|
||||
if (client->lease->hostname)
|
||||
*hostname = client->lease->hostname;
|
||||
else
|
||||
return -ENOENT;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sd_dhcp_client_prefixlen(const struct in_addr *addr)
|
||||
{
|
||||
int len = 0;
|
||||
@@ -829,6 +857,14 @@ static int client_parse_offer(uint8_t code, uint8_t len, const uint8_t *option,
|
||||
|
||||
break;
|
||||
|
||||
case DHCP_OPTION_HOST_NAME:
|
||||
if (len >= 1) {
|
||||
free(lease->hostname);
|
||||
lease->hostname = strndup((const char *)option, len);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case DHCP_OPTION_RENEWAL_T1_TIME:
|
||||
if (len == 4) {
|
||||
memcpy(&val, option, 4);
|
||||
|
||||
Reference in New Issue
Block a user