mirror of
https://github.com/systemd/systemd.git
synced 2026-07-18 13:30:13 +00:00
sd-dhcp-server-lease: move functions to build json format
No functional change, just preparation for later commits.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user