]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: Adding DHCPv4 private options to D-BUS
authorNandakumar Raghavan <naraghavan@microsoft.com>
Mon, 15 Jan 2024 14:39:35 +0000 (14:39 +0000)
committerLennart Poettering <lennart@poettering.net>
Thu, 18 Jan 2024 08:41:23 +0000 (09:41 +0100)
Currently DHCPv4 private options are not exposed in D-BUS.
This change is to include those private options into D-BUS

src/network/networkd-json.c

index 9ca54db5ed5408b59bf00a50a25c8611dcc9897e..b2bcc1bf75eeb80bea6da60ef838f7e5ec0e05fe 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <linux/nexthop.h>
 
+#include "dhcp-lease-internal.h"
 #include "dhcp-server-lease-internal.h"
 #include "dhcp6-internal.h"
 #include "dhcp6-lease-internal.h"
@@ -1170,6 +1171,29 @@ static int dhcp_client_pd_append_json(Link *link, JsonVariant **v) {
         return json_variant_set_field_non_null(v, "6rdPrefix", array);
 }
 
+static int dhcp_client_private_options_append_json(Link *link, JsonVariant **v) {
+        _cleanup_(json_variant_unrefp) JsonVariant *array = NULL;
+        int r;
+
+        assert(link);
+        assert(v);
+
+        if (!link->dhcp_lease)
+                return 0;
+
+        LIST_FOREACH(options, option, link->dhcp_lease->private_options) {
+
+                r = json_variant_append_arrayb(
+                                &array,
+                                JSON_BUILD_OBJECT(
+                                               JSON_BUILD_PAIR_UNSIGNED("Option", option->tag),
+                                               JSON_BUILD_PAIR_HEX("PrivateOptionData", option->data, option->length)));
+                if (r < 0)
+                        return 0;
+        }
+        return json_variant_set_field_non_null(v, "PrivateOptions", array);
+}
+
 static int dhcp_client_append_json(Link *link, JsonVariant **v) {
         _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
         int r;
@@ -1188,6 +1212,10 @@ static int dhcp_client_append_json(Link *link, JsonVariant **v) {
         if (r < 0)
                 return r;
 
+        r = dhcp_client_private_options_append_json(link, &w);
+        if (r < 0)
+                return r;
+
         return json_variant_set_field_non_null(v, "DHCPv4Client", w);
 }