diff --git a/board/czechlight/common/patches/systemd/0009-networkctl-JSON-output-in-networkctl-lldp.patch b/board/czechlight/common/patches/systemd/0009-networkctl-JSON-output-in-networkctl-lldp.patch
new file mode 100644
index 0000000..5d43f1d
--- /dev/null
+++ b/board/czechlight/common/patches/systemd/0009-networkctl-JSON-output-in-networkctl-lldp.patch
@@ -0,0 +1,203 @@
+From 7479e9e720909a2d2360f684e85821195301dce2 Mon Sep 17 00:00:00 2001
+From: Tomas Pecka <peckato1@users.noreply.github.com>
+Date: Wed, 6 Oct 2021 10:11:31 +0200
+Subject: [PATCH 9/9] networkctl: JSON output in networkctl lldp
+
+`networkctl lldp` now outputs also in JSON format when `--json=*`
+argument passed. The LLDP neighbors are listed in per interface lists.
+---
+ src/network/networkctl.c | 123 ++++++++++++++++++++++++++-------------
+ 1 file changed, 82 insertions(+), 41 deletions(-)
+
+diff --git a/src/network/networkctl.c b/src/network/networkctl.c
+index 89abaf26da..124ee8f0c7 100644
+--- a/src/network/networkctl.c
++++ b/src/network/networkctl.c
+@@ -2510,6 +2510,7 @@ typedef struct LLDPUserdata {
+ 
+         char *link_name;
+         Table *table;
++        JsonVariant **json_list;
+ } LLDPUserdata;
+ 
+ static int lldp_neighbours_varlink_reply(Varlink *link, JsonVariant *parameters, const char *error_id, VarlinkReplyFlags flags, void *userdata) {
+@@ -2556,6 +2557,26 @@ static int lldp_neighbours_varlink_reply(Varlink *link, JsonVariant *parameters,
+         if (udata->capabilities_all)
+                 *(udata->capabilities_all) |= entry.capabilities;
+ 
++        if (udata->json_list) {
++                _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
++
++                capabilities = lldp_capabilities_to_string(entry.capabilities, false);
++
++                r = json_build(&v, JSON_BUILD_OBJECT(
++                                        JSON_BUILD_PAIR("neighbor", JSON_BUILD_OBJECT(
++                                        JSON_BUILD_PAIR_CONDITION(entry.chassis_id, "chassisId", JSON_BUILD_STRING(entry.chassis_id)),
++                                        JSON_BUILD_PAIR_CONDITION(entry.port_id, "portId", JSON_BUILD_STRING(entry.port_id)),
++                                        JSON_BUILD_PAIR_CONDITION(entry.system_name, "systemName", JSON_BUILD_STRING(entry.system_name)),
++                                        JSON_BUILD_PAIR_CONDITION(entry.port_description, "portDescription", JSON_BUILD_STRING(entry.port_description)),
++                                        JSON_BUILD_PAIR_CONDITION(entry.capabilities, "enabledCapabilities", JSON_BUILD_STRING(capabilities))))));
++                if (r < 0)
++                        return r;
++
++                r = json_variant_append_array(udata->json_list, v);
++                if (r < 0)
++                        return r;
++        }
++
+         return 0;
+ }
+ 
+@@ -2568,10 +2589,10 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
+         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
+         _cleanup_(link_info_array_freep) LinkInfo *links = NULL;
+         _cleanup_(table_unrefp) Table *table = NULL;
++        _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
+         int neighbors_count = 0;
+         uint16_t capabilities_all = 0;
+         LLDPUserdata udata = {};
+-        TableCell *cell;
+ 
+         r = varlink_connect_address(&link, address);
+         if (r < 0)
+@@ -2592,50 +2613,58 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
+         if (c < 0)
+                 return c;
+ 
+-        (void) pager_open(arg_pager_flags);
++        if (arg_json_format_flags == JSON_FORMAT_OFF) {
++                TableCell *cell;
+ 
+-        table = table_new("link",
+-                          "chassis id",
+-                          "system name",
+-                          "caps",
+-                          "port id",
+-                          "port description");
+-        if (!table)
+-                return log_oom();
++                (void) pager_open(arg_pager_flags);
+ 
+-        if (arg_full)
+-                table_set_width(table, 0);
++                table = table_new("link",
++                                  "chassis id",
++                                  "system name",
++                                  "caps",
++                                  "port id",
++                                  "port description");
++                if (!table)
++                        return log_oom();
+ 
+-        table_set_header(table, arg_legend);
++                if (arg_full)
++                        table_set_width(table, 0);
+ 
+-        assert_se(cell = table_get_cell(table, 0, 0));
+-        table_set_minimum_width(table, cell, 16);
+-        table_set_maximum_width(table, cell, 16);
++                table_set_header(table, arg_legend);
+ 
+-        assert_se(cell = table_get_cell(table, 0, 1));
+-        table_set_minimum_width(table, cell, 17);
+-        table_set_maximum_width(table, cell, 17);
++                assert_se(cell = table_get_cell(table, 0, 0));
++                table_set_minimum_width(table, cell, 16);
++                table_set_maximum_width(table, cell, 16);
+ 
+-        assert_se(cell = table_get_cell(table, 0, 2));
+-        table_set_minimum_width(table, cell, 16);
+-        table_set_maximum_width(table, cell, 16);
++                assert_se(cell = table_get_cell(table, 0, 1));
++                table_set_minimum_width(table, cell, 17);
++                table_set_maximum_width(table, cell, 17);
+ 
+-        assert_se(cell = table_get_cell(table, 0, 3));
+-        table_set_minimum_width(table, cell, 11);
+-        table_set_maximum_width(table, cell, 11);
++                assert_se(cell = table_get_cell(table, 0, 2));
++                table_set_minimum_width(table, cell, 16);
++                table_set_maximum_width(table, cell, 16);
+ 
+-        assert_se(cell = table_get_cell(table, 0, 4));
+-        table_set_minimum_width(table, cell, 17);
+-        table_set_maximum_width(table, cell, 17);
++                assert_se(cell = table_get_cell(table, 0, 3));
++                table_set_minimum_width(table, cell, 11);
++                table_set_maximum_width(table, cell, 11);
+ 
+-        assert_se(cell = table_get_cell(table, 0, 5));
+-        table_set_minimum_width(table, cell, 16);
+-        table_set_maximum_width(table, cell, 16);
++                assert_se(cell = table_get_cell(table, 0, 4));
++                table_set_minimum_width(table, cell, 17);
++                table_set_maximum_width(table, cell, 17);
+ 
+-        if (table_set_empty_string(table, "n/a") < 0)
+-                return log_oom();
++                assert_se(cell = table_get_cell(table, 0, 5));
++                table_set_minimum_width(table, cell, 16);
++                table_set_maximum_width(table, cell, 16);
++
++                if (table_set_empty_string(table, "n/a") < 0)
++                        return log_oom();
+ 
+-        udata.table = table;
++                udata.table = table;
++        } else {
++                r = json_build(&v, JSON_BUILD_EMPTY_OBJECT);
++                if (r < 0)
++                        return r;
++        }
+ 
+         udata.neighbors_count = &neighbors_count;
+         udata.capabilities_all = &capabilities_all;
+@@ -2643,10 +2672,14 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
+         varlink_set_userdata(link, &udata);
+ 
+         for (int i = 0; i < c; i++) {
+-                _cleanup_(json_variant_unrefp) JsonVariant *cparams = NULL;
++                _cleanup_(json_variant_unrefp) JsonVariant *cparams = NULL, *neighbors = NULL;
+ 
+                 udata.link_name = links[i].name;
+ 
++                if (arg_json_format_flags != JSON_FORMAT_OFF) {
++                        udata.json_list = &neighbors;
++                }
++
+                 r = json_build(&cparams, JSON_BUILD_OBJECT(
+                                         JSON_BUILD_PAIR("ifindex", JSON_BUILD_UNSIGNED(links[i].ifindex))));
+                 if (r < 0)
+@@ -2659,15 +2692,23 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
+                 r = varlink_observe_complete(link);
+                 if (r < 0)
+                         return r;
++
++                if (!json_variant_is_blank_array(neighbors)) {
++                        json_variant_set_field(&v, links[i].name, neighbors);
++                }
+         }
+ 
+-        r = table_print(table, NULL);
+-        if (r < 0)
+-                return table_log_print_error(r);
++        if (arg_json_format_flags == JSON_FORMAT_OFF) {
++                r = table_print(table, NULL);
++                if (r < 0)
++                        return table_log_print_error(r);
+ 
+-        if (arg_legend) {
+-                lldp_capabilities_legend(capabilities_all);
+-                printf("\n%i neighbors listed.\n", neighbors_count);
++                if (arg_legend) {
++                        lldp_capabilities_legend(capabilities_all);
++                        printf("\n%i neighbors listed.\n", neighbors_count);
++                }
++        } else {
++                json_variant_dump(v, arg_json_format_flags, NULL, NULL);
+         }
+ 
+         return 0;
+-- 
+2.33.0
+
