From: Nandakumar Raghavan Date: Mon, 15 Jan 2024 14:39:35 +0000 (+0000) Subject: networkd: Adding DHCPv4 private options to D-BUS X-Git-Tag: v256-rc1~1112 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ee8f3e489e200c05e23bb3d7c6c75804df58e752;p=thirdparty%2Fsystemd.git networkd: Adding DHCPv4 private options to D-BUS Currently DHCPv4 private options are not exposed in D-BUS. This change is to include those private options into D-BUS --- diff --git a/src/network/networkd-json.c b/src/network/networkd-json.c index 9ca54db5ed5..b2bcc1bf75e 100644 --- a/src/network/networkd-json.c +++ b/src/network/networkd-json.c @@ -2,6 +2,7 @@ #include +#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); }