sd-dhcp-server-lease: move functions to build json format

No functional change, just preparation for later commits.
This commit is contained in:
Yu Watanabe
2024-01-03 06:07:05 +09:00
parent 5a2f378362
commit b923ada838
3 changed files with 69 additions and 63 deletions

View File

@@ -5,6 +5,7 @@
#include "dhcp-client-id-internal.h"
#include "dhcp-server-internal.h"
#include "json.h"
#include "time-util.h"
typedef struct sd_dhcp_server_lease {
@@ -31,3 +32,6 @@ int dhcp_server_set_lease(sd_dhcp_server *server, be32_t address, DHCPRequest *r
int dhcp_server_cleanup_expired_leases(sd_dhcp_server *server);
sd_dhcp_server_lease* dhcp_server_get_static_lease(sd_dhcp_server *server, const DHCPRequest *req);
int dhcp_server_bound_leases_append_json(sd_dhcp_server *server, JsonVariant **v);
int dhcp_server_static_leases_append_json(sd_dhcp_server *server, JsonVariant **v);

View File

@@ -204,3 +204,66 @@ int sd_dhcp_server_set_static_lease(
TAKE_PTR(lease);
return 0;
}
static int dhcp_server_lease_append_json(sd_dhcp_server_lease *lease, JsonVariant **ret) {
assert(lease);
assert(ret);
return json_build(ret,
JSON_BUILD_OBJECT(
JSON_BUILD_PAIR_BYTE_ARRAY("ClientId", lease->client_id.raw, lease->client_id.size),
JSON_BUILD_PAIR_IN4_ADDR_NON_NULL("Address", &(struct in_addr) { .s_addr = lease->address }),
JSON_BUILD_PAIR_STRING_NON_EMPTY("Hostname", lease->hostname)));
}
int dhcp_server_bound_leases_append_json(sd_dhcp_server *server, JsonVariant **v) {
_cleanup_(json_variant_unrefp) JsonVariant *array = NULL;
sd_dhcp_server_lease *lease;
int r;
assert(server);
assert(v);
HASHMAP_FOREACH(lease, server->bound_leases_by_client_id) {
_cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
r = dhcp_server_lease_append_json(lease, &w);
if (r < 0)
return r;
r = json_variant_merge_objectb(&w,
JSON_BUILD_OBJECT(
JSON_BUILD_PAIR_UNSIGNED("ExpirationUSec", lease->expiration)));
if (r < 0)
return r;
r = json_variant_append_array(&array, w);
if (r < 0)
return r;
}
return json_variant_set_field_non_null(v, "Leases", array);
}
int dhcp_server_static_leases_append_json(sd_dhcp_server *server, JsonVariant **v) {
_cleanup_(json_variant_unrefp) JsonVariant *array = NULL;
sd_dhcp_server_lease *lease;
int r;
assert(server);
assert(v);
HASHMAP_FOREACH(lease, server->static_leases_by_client_id) {
_cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
r = dhcp_server_lease_append_json(lease, &w);
if (r < 0)
return r;
r = json_variant_append_array(&array, w);
if (r < 0)
return r;
}
return json_variant_set_field_non_null(v, "StaticLeases", array);
}

View File

@@ -890,67 +890,6 @@ static int pref64_append_json(Link *link, JsonVariant **v) {
return json_variant_set_field_non_null(v, "NDisc", w);
}
static int dhcp_server_offered_leases_append_json(Link *link, JsonVariant **v) {
_cleanup_(json_variant_unrefp) JsonVariant *array = NULL;
sd_dhcp_server_lease *lease;
int r;
assert(link);
assert(v);
if (!link->dhcp_server)
return 0;
HASHMAP_FOREACH(lease, link->dhcp_server->bound_leases_by_client_id) {
struct in_addr address = { .s_addr = lease->address };
r = json_variant_append_arrayb(
&array,
JSON_BUILD_OBJECT(
JSON_BUILD_PAIR_BYTE_ARRAY(
"ClientId",
lease->client_id.raw,
lease->client_id.size),
JSON_BUILD_PAIR_IN4_ADDR_NON_NULL("Address", &address),
JSON_BUILD_PAIR_STRING_NON_EMPTY("Hostname", lease->hostname),
JSON_BUILD_PAIR_FINITE_USEC(
"ExpirationUSec", lease->expiration)));
if (r < 0)
return r;
}
return json_variant_set_field_non_null(v, "Leases", array);
}
static int dhcp_server_static_leases_append_json(Link *link, JsonVariant **v) {
_cleanup_(json_variant_unrefp) JsonVariant *array = NULL;
sd_dhcp_server_lease *lease;
int r;
assert(link);
assert(v);
if (!link->dhcp_server)
return 0;
HASHMAP_FOREACH(lease, link->dhcp_server->static_leases_by_client_id) {
struct in_addr address = { .s_addr = lease->address };
r = json_variant_append_arrayb(
&array,
JSON_BUILD_OBJECT(
JSON_BUILD_PAIR_BYTE_ARRAY(
"ClientId",
lease->client_id.raw,
lease->client_id.size),
JSON_BUILD_PAIR_IN4_ADDR_NON_NULL("Address", &address)));
if (r < 0)
return r;
}
return json_variant_set_field_non_null(v, "StaticLeases", array);
}
static int dhcp_server_append_json(Link *link, JsonVariant **v) {
_cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
int r;
@@ -968,11 +907,11 @@ static int dhcp_server_append_json(Link *link, JsonVariant **v) {
if (r < 0)
return r;
r = dhcp_server_offered_leases_append_json(link, &w);
r = dhcp_server_bound_leases_append_json(link->dhcp_server, &w);
if (r < 0)
return r;
r = dhcp_server_static_leases_append_json(link, &w);
r = dhcp_server_static_leases_append_json(link->dhcp_server, &w);
if (r < 0)
return r;