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
index 5d43f1d..f85c6c3 100644
--- 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
@@ -1,4 +1,4 @@
-From 7479e9e720909a2d2360f684e85821195301dce2 Mon Sep 17 00:00:00 2001
+From f681abcf74f1a03f64fbcec15c33aae026dcdf51 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
@@ -6,27 +6,35 @@
 `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(-)
+ src/network/networkctl.c | 136 +++++++++++++++++++++++++--------------
+ 1 file changed, 88 insertions(+), 48 deletions(-)
 
 diff --git a/src/network/networkctl.c b/src/network/networkctl.c
-index 89abaf26da..124ee8f0c7 100644
+index 9fbeed6908..0f48aa4bf7 100644
 --- a/src/network/networkctl.c
 +++ b/src/network/networkctl.c
-@@ -2510,6 +2510,7 @@ typedef struct LLDPUserdata {
+@@ -2507,12 +2507,14 @@ typedef struct LLDPUserdata {
+         uint16_t capabilities_all;
+ 
+         Table *table;
++        JsonVariant *json;
  
          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;
+ static void lldp_userdata_freep(LLDPUserdata* p) {
+         table_unref(p->table);
++        json_variant_unref(p->json);
+ }
  
-+        if (udata->json_list) {
+ static int lldp_neighbors_varlink_reply(Varlink *link, JsonVariant *parameters, const char *error_id, VarlinkReplyFlags flags, void *userdata) {
+@@ -2556,6 +2558,34 @@ static int lldp_neighbors_varlink_reply(Varlink *link, JsonVariant *parameters,
+         udata->neighbors_count += 1;
+         udata->capabilities_all |= entry.capabilities;
+ 
++        if (udata->json) {
 +                _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
++                _cleanup_(json_variant_unrefp) JsonVariant *neighbors = NULL;
 +
 +                capabilities = lldp_capabilities_to_string(entry.capabilities, false);
 +
@@ -40,7 +48,14 @@
 +                if (r < 0)
 +                        return r;
 +
-+                r = json_variant_append_array(udata->json_list, v);
++
++                neighbors = json_variant_ref(json_variant_by_key(udata->json, udata->link_name));
++
++                r = json_variant_append_array(&neighbors, v);
++                if (r < 0)
++                        return r;
++
++                r = json_variant_set_field(&udata->json, udata->link_name, neighbors);
 +                if (r < 0)
 +                        return r;
 +        }
@@ -48,156 +63,134 @@
          return 0;
  }
  
-@@ -2568,10 +2589,10 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
+@@ -2568,7 +2598,6 @@ 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 = {};
+         _cleanup_(lldp_userdata_freep) 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)
+@@ -2590,47 +2619,54 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
                  return c;
  
--        (void) pager_open(arg_pager_flags);
+         pager_open(arg_pager_flags);
+-
+-        udata.table = table_new("link",
+-                                "chassis id",
+-                                "system name",
+-                                "caps",
+-                                "port id",
+-                                "port description");
+-        if (!udata.table)
+-                return log_oom();
+-
+-        if (arg_full)
+-                table_set_width(udata.table, 0);
+-
+-        table_set_header(udata.table, arg_legend);
+-
+-        assert_se(cell = table_get_cell(udata.table, 0, 0));
+-        table_set_minimum_width(udata.table, cell, 16);
+-        table_set_maximum_width(udata.table, cell, 16);
+-
+-        assert_se(cell = table_get_cell(udata.table, 0, 1));
+-        table_set_minimum_width(udata.table, cell, 17);
+-        table_set_maximum_width(udata.table, cell, 17);
+-
+-        assert_se(cell = table_get_cell(udata.table, 0, 2));
+-        table_set_minimum_width(udata.table, cell, 16);
+-        table_set_maximum_width(udata.table, cell, 16);
+-
+-        assert_se(cell = table_get_cell(udata.table, 0, 3));
+-        table_set_minimum_width(udata.table, cell, 11);
+-        table_set_maximum_width(udata.table, cell, 11);
+-
+-        assert_se(cell = table_get_cell(udata.table, 0, 4));
+-        table_set_minimum_width(udata.table, cell, 17);
+-        table_set_maximum_width(udata.table, cell, 17);
+-
+-        assert_se(cell = table_get_cell(udata.table, 0, 5));
+-        table_set_minimum_width(udata.table, cell, 16);
+-        table_set_maximum_width(udata.table, cell, 16);
+-
+-        if (table_set_empty_string(udata.table, "n/a") < 0)
+-                return log_oom();
 +        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)
++                udata.table = table_new("link",
++                                        "chassis id",
++                                        "system name",
++                                        "caps",
++                                        "port id",
++                                        "port description");
++                if (!udata.table)
 +                        return log_oom();
- 
--        udata.table = table;
-+                udata.table = table;
++
++                if (arg_full)
++                        table_set_width(udata.table, 0);
++
++                table_set_header(udata.table, arg_legend);
++
++                assert_se(cell = table_get_cell(udata.table, 0, 0));
++                table_set_minimum_width(udata.table, cell, 16);
++                table_set_maximum_width(udata.table, cell, 16);
++
++                assert_se(cell = table_get_cell(udata.table, 0, 1));
++                table_set_minimum_width(udata.table, cell, 17);
++                table_set_maximum_width(udata.table, cell, 17);
++
++                assert_se(cell = table_get_cell(udata.table, 0, 2));
++                table_set_minimum_width(udata.table, cell, 16);
++                table_set_maximum_width(udata.table, cell, 16);
++
++                assert_se(cell = table_get_cell(udata.table, 0, 3));
++                table_set_minimum_width(udata.table, cell, 11);
++                table_set_maximum_width(udata.table, cell, 11);
++
++                assert_se(cell = table_get_cell(udata.table, 0, 4));
++                table_set_minimum_width(udata.table, cell, 17);
++                table_set_maximum_width(udata.table, cell, 17);
++
++                assert_se(cell = table_get_cell(udata.table, 0, 5));
++                table_set_minimum_width(udata.table, cell, 16);
++                table_set_maximum_width(udata.table, cell, 16);
++
++                if (table_set_empty_string(udata.table, "n/a") < 0)
++                        return log_oom();
 +        } else {
-+                r = json_build(&v, JSON_BUILD_EMPTY_OBJECT);
++                r = json_build(&udata.json, 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)
+@@ -2653,13 +2689,17 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
                          return r;
-+
-+                if (!json_variant_is_blank_array(neighbors)) {
-+                        json_variant_set_field(&v, links[i].name, neighbors);
-+                }
          }
  
--        r = table_print(table, NULL);
+-        r = table_print(udata.table, NULL);
 -        if (r < 0)
 -                return table_log_print_error(r);
 +        if (arg_json_format_flags == JSON_FORMAT_OFF) {
-+                r = table_print(table, NULL);
++                r = table_print(udata.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);
+-                lldp_capabilities_legend(udata.capabilities_all);
+-                printf("\n%i neighbors listed.\n", udata.neighbors_count);
 +                if (arg_legend) {
-+                        lldp_capabilities_legend(capabilities_all);
-+                        printf("\n%i neighbors listed.\n", neighbors_count);
++                        lldp_capabilities_legend(udata.capabilities_all);
++                        printf("\n%i neighbors listed.\n", udata.neighbors_count);
 +                }
 +        } else {
-+                json_variant_dump(v, arg_json_format_flags, NULL, NULL);
++                json_variant_dump(udata.json, arg_json_format_flags, NULL, NULL);
          }
  
          return 0;
 -- 
-2.33.0
+2.34.1
 
