]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp-server-lease: move functions to build json format
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 2 Jan 2024 21:07:05 +0000 (06:07 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 11 Mar 2024 16:57:17 +0000 (01:57 +0900)
No functional change, just preparation for later commits.

src/libsystemd-network/dhcp-server-lease-internal.h
src/libsystemd-network/sd-dhcp-server-lease.c
src/network/networkd-json.c

index 49bc173307fca41c4443abd5c09d750d1998189b..82ad1b0aedcac92dbf34b317370219b396d66368 100644 (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);
index db1d0464ae8c07ec85a1bab035279e90237f4c82..deec9356a1d3f88712d4231c420e0c339fad8f6b 100644 (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);
+}
index 57bea190f5078f43e85b1ddc1bd9b360f64853aa..88df71b0536dba3a58b831f0f86db048a3b09cdf 100644 (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;