mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 00:14:32 +09:00
sd-dhcp-server: add api to get address from hostname, based on lease data
This commit is contained in:
@@ -1711,3 +1711,38 @@ int sd_dhcp_server_set_lease_file(sd_dhcp_server *server, int dir_fd, const char
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int find_lease_address(Hashmap *h, const char *name, struct in_addr *ret) {
|
||||
int r;
|
||||
|
||||
assert(name);
|
||||
|
||||
sd_dhcp_server_lease *lease;
|
||||
HASHMAP_FOREACH(lease, h) {
|
||||
if (!lease->hostname)
|
||||
continue;
|
||||
|
||||
r = dns_name_equal(lease->hostname, name);
|
||||
if (r <= 0)
|
||||
continue;
|
||||
|
||||
if (ret)
|
||||
ret->s_addr = lease->address;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
int sd_dhcp_server_get_lease_address_by_name(sd_dhcp_server *server, const char *name, struct in_addr *ret) {
|
||||
int r;
|
||||
|
||||
assert_return(server, -EINVAL);
|
||||
assert_return(dns_name_is_valid(name), -EINVAL);
|
||||
|
||||
r = find_lease_address(server->static_leases_by_address, name, ret);
|
||||
if (r != -ENOENT)
|
||||
return r;
|
||||
|
||||
return find_lease_address(server->bound_leases_by_address, name, ret);
|
||||
}
|
||||
|
||||
@@ -98,6 +98,8 @@ int sd_dhcp_server_is_in_relay_mode(sd_dhcp_server *server);
|
||||
int sd_dhcp_server_set_relay_target(sd_dhcp_server *server, const struct in_addr* address);
|
||||
int sd_dhcp_server_set_relay_agent_information(sd_dhcp_server *server, const char* circuit_id, const char* remote_id);
|
||||
|
||||
int sd_dhcp_server_get_lease_address_by_name(sd_dhcp_server *server, const char *name, struct in_addr *ret);
|
||||
|
||||
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_dhcp_server, sd_dhcp_server_unref);
|
||||
|
||||
_SD_END_DECLARATIONS;
|
||||
|
||||
Reference in New Issue
Block a user