]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp-client-id: introduce json_dispatch_client_id() 30879/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 11 Jan 2024 07:55:53 +0000 (16:55 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 11 Jan 2024 08:03:25 +0000 (17:03 +0900)
src/libsystemd-network/dhcp-client-id-internal.h
src/libsystemd-network/sd-dhcp-client-id.c

index 72f13de24e8b36a0b3982c228b0ce2369026c02b..655f17b2e9531c653ef812657a17e11edd8f83c2 100644 (file)
@@ -4,6 +4,7 @@
 #include "sd-dhcp-client-id.h"
 
 #include "dhcp-duid-internal.h"
+#include "json.h"
 #include "macro.h"
 #include "siphash24.h"
 #include "sparse-endian.h"
@@ -55,3 +56,5 @@ static inline bool client_id_data_size_is_valid(size_t size) {
 
 void client_id_hash_func(const sd_dhcp_client_id *client_id, struct siphash *state);
 int client_id_compare_func(const sd_dhcp_client_id *a, const sd_dhcp_client_id *b);
+
+int json_dispatch_client_id(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
index 5752a44e8a629e2e6d90b93c64e5d03cbbe68d17..cab04f05e5f6212faa95f5a7196c6bfbd643bd06 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "alloc-util.h"
 #include "dhcp-client-id-internal.h"
+#include "iovec-util.h"
 #include "unaligned.h"
 #include "utf8.h"
 
@@ -177,3 +178,19 @@ int client_id_compare_func(const sd_dhcp_client_id *a, const sd_dhcp_client_id *
 
         return memcmp_nn(a->raw, a->size, b->raw, b->size);
 }
+
+int json_dispatch_client_id(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+        sd_dhcp_client_id *client_id = ASSERT_PTR(userdata);
+        _cleanup_(iovec_done) struct iovec iov = {};
+        int r;
+
+        r = json_dispatch_byte_array_iovec(name, variant, flags, &iov);
+        if (r < 0)
+                return r;
+
+        r = sd_dhcp_client_id_set_raw(client_id, iov.iov_base, iov.iov_len);
+        if (r < 0)
+                return json_log(variant, flags, r, "Failed to set DHCP client ID from JSON field '%s': %m", strna(name));
+
+        return 0;
+}