diff --git a/board/czechlight/clearfog/overlay/usr/lib/systemd/system-generators/osc b/board/czechlight/clearfog/overlay/usr/lib/systemd/system-generators/eth-links
similarity index 70%
rename from board/czechlight/clearfog/overlay/usr/lib/systemd/system-generators/osc
rename to board/czechlight/clearfog/overlay/usr/lib/systemd/system-generators/eth-links
index ffaa6d1..a6f45ae 100755
--- a/board/czechlight/clearfog/overlay/usr/lib/systemd/system-generators/osc
+++ b/board/czechlight/clearfog/overlay/usr/lib/systemd/system-generators/eth-links
@@ -4,6 +4,21 @@
 
 mkdir -p /run/systemd/network
 
+# custom names for ethernet ports (bypassing systemd's predictive naming)
+cat > /run/systemd/network/30-eth0.link <<EOF
+[Match]
+Path=platform-f1070000.ethernet
+[Link]
+Name=eth0
+EOF
+
+cat > /run/systemd/network/30-eth1.link <<EOF
+[Match]
+Path=platform-f1030000.ethernet
+[Link]
+Name=eth1
+EOF
+
 # custom names for OSC channels
 if grep -q '\<czechlight=sdn-roadm-line.*\>' /proc/cmdline; then
 	ETH2_NAME=osc
@@ -11,6 +26,8 @@
 	ETH2_NAME=oscW
 	ETH3_NAME=oscE
 	ETH4_NAME=sfp3
+else
+	ETH2_NAME=eth2
 fi
 
 if [[ -n "${ETH2_NAME+set}" ]] ; then
diff --git a/board/czechlight/common/patches/systemd/0001-network-Serialize-LLDP-neighbor-to-JSON-format.patch b/board/czechlight/common/patches/systemd/0001-network-Serialize-LLDP-neighbor-to-JSON-format.patch
index 79fcb9d..b0c1d62 100644
--- a/board/czechlight/common/patches/systemd/0001-network-Serialize-LLDP-neighbor-to-JSON-format.patch
+++ b/board/czechlight/common/patches/systemd/0001-network-Serialize-LLDP-neighbor-to-JSON-format.patch
@@ -1,7 +1,7 @@
-From 8d3bd15463b31c5b3347239317fcf1f41d467838 Mon Sep 17 00:00:00 2001
+From dadca2c91fa18a18445659b41f182b0793dce566 Mon Sep 17 00:00:00 2001
 From: Tomas Pecka <peckato1@users.noreply.github.com>
 Date: Thu, 7 Oct 2021 11:16:57 +0200
-Subject: [PATCH 1/9] network: Serialize LLDP neighbor to JSON format
+Subject: [PATCH 1/7] network: Serialize LLDP neighbor to JSON format
 
 Add functions serializing LLDP neighbors to JSON (JsonVariant).
 
@@ -15,7 +15,7 @@
  3 files changed, 71 insertions(+), 1 deletion(-)
 
 diff --git a/src/libsystemd-network/lldp-neighbor.c b/src/libsystemd-network/lldp-neighbor.c
-index 44847b2b92..cacad8adea 100644
+index 6672409d75..5fb7669e09 100644
 --- a/src/libsystemd-network/lldp-neighbor.c
 +++ b/src/libsystemd-network/lldp-neighbor.c
 @@ -5,6 +5,7 @@
@@ -26,14 +26,14 @@
  #include "lldp-neighbor.h"
  #include "memory-util.h"
  #include "missing_network.h"
-@@ -790,3 +791,24 @@ int sd_lldp_neighbor_get_timestamp(sd_lldp_neighbor *n, clockid_t clock, uint64_
+@@ -794,3 +795,24 @@ int sd_lldp_neighbor_get_timestamp(sd_lldp_neighbor *n, clockid_t clock, uint64_
          *ret = triple_timestamp_by_clock(&n->timestamp, clock);
          return 0;
  }
 +
 +_public_ int sd_lldp_neighbor_build_json(sd_lldp_neighbor *n, JsonVariant **ret) {
 +        const char *chassis_id = NULL, *port_id = NULL, *system_name = NULL, *port_description = NULL;
-+        uint16_t cc;
++        uint16_t cc = 0;
 +        bool valid_cc;
 +
 +        (void) sd_lldp_neighbor_get_chassis_id_as_string(n, &chassis_id);
@@ -52,7 +52,7 @@
 +                                                JSON_BUILD_PAIR_CONDITION(port_description, "portDescription", JSON_BUILD_STRING(port_description))))));
 +}
 diff --git a/src/libsystemd-network/sd-lldp-rx.c b/src/libsystemd-network/sd-lldp-rx.c
-index 34bdcb644b..ae4d2d599c 100644
+index 0479cff5f5..ec1a0bae54 100644
 --- a/src/libsystemd-network/sd-lldp-rx.c
 +++ b/src/libsystemd-network/sd-lldp-rx.c
 @@ -10,6 +10,7 @@
@@ -63,7 +63,7 @@
  #include "lldp-neighbor.h"
  #include "lldp-network.h"
  #include "lldp-rx-internal.h"
-@@ -492,7 +493,50 @@ int sd_lldp_rx_get_neighbors(sd_lldp_rx *lldp_rx, sd_lldp_neighbor ***ret) {
+@@ -491,7 +492,50 @@ int sd_lldp_rx_get_neighbors(sd_lldp_rx *lldp_rx, sd_lldp_neighbor ***ret) {
          return k;
  }
  
@@ -116,7 +116,7 @@
          assert_return(m > 0, -EINVAL);
  
 diff --git a/src/systemd/sd-lldp-rx.h b/src/systemd/sd-lldp-rx.h
-index bfeac14ce3..8a538b2444 100644
+index 504d7f59c1..ec9b8edf76 100644
 --- a/src/systemd/sd-lldp-rx.h
 +++ b/src/systemd/sd-lldp-rx.h
 @@ -32,6 +32,8 @@ _SD_BEGIN_DECLARATIONS;
@@ -125,7 +125,7 @@
  
 +typedef struct JsonVariant JsonVariant;
 +
- typedef enum sd_lldp_rx_event_t {
+ __extension__ typedef enum sd_lldp_rx_event_t {
          SD_LLDP_RX_EVENT_ADDED,
          SD_LLDP_RX_EVENT_REMOVED,
 @@ -67,10 +69,12 @@ int sd_lldp_rx_match_capabilities(sd_lldp_rx *lldp_rx, uint16_t mask);
@@ -142,5 +142,5 @@
  /* Access to LLDP frame metadata */
  int sd_lldp_neighbor_get_source_address(sd_lldp_neighbor *n, struct ether_addr* address);
 -- 
-2.35.1
+2.41.0
 
diff --git a/board/czechlight/common/patches/systemd/0002-network-Add-varlink-server.patch b/board/czechlight/common/patches/systemd/0002-network-Add-varlink-server.patch
index 6302127..bb16f0c 100644
--- a/board/czechlight/common/patches/systemd/0002-network-Add-varlink-server.patch
+++ b/board/czechlight/common/patches/systemd/0002-network-Add-varlink-server.patch
@@ -1,25 +1,25 @@
-From 210ae903e7f5e4813feaea9bbac1f03fa3be42cc Mon Sep 17 00:00:00 2001
+From 00b203ad445b40faf5836a3ca9a6c1ec89165c23 Mon Sep 17 00:00:00 2001
 From: Tomas Pecka <peckato1@users.noreply.github.com>
 Date: Tue, 24 Aug 2021 14:59:40 +0200
-Subject: [PATCH 2/9] network: Add varlink server
+Subject: [PATCH 2/7] network: Add varlink server
 
 Add a varlink server. In the next commits, we will implement a method
 that queries the LLDP neighbors.
 ---
  src/network/meson.build        |  2 ++
  src/network/networkd-manager.c |  7 +++++++
- src/network/networkd-manager.h |  3 +++
+ src/network/networkd-manager.h | 11 +++++++----
  src/network/networkd-varlink.c | 34 ++++++++++++++++++++++++++++++++++
  src/network/networkd-varlink.h |  7 +++++++
- 5 files changed, 53 insertions(+)
+ 5 files changed, 57 insertions(+), 4 deletions(-)
  create mode 100644 src/network/networkd-varlink.c
  create mode 100644 src/network/networkd-varlink.h
 
 diff --git a/src/network/meson.build b/src/network/meson.build
-index 48d185195c..d93e815fdf 100644
+index b09c18dbbd..90ae4ed238 100644
 --- a/src/network/meson.build
 +++ b/src/network/meson.build
-@@ -137,6 +137,8 @@ sources = files(
+@@ -145,6 +145,8 @@ sources = files(
          'networkd-sysctl.h',
          'networkd-util.c',
          'networkd-util.h',
@@ -27,20 +27,20 @@
 +        'networkd-varlink.h',
          'networkd-wifi.c',
          'networkd-wifi.h',
-         'tc/cake.c',
+         'networkd-wiphy.c',
 diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
-index 9d790224cc..5e4c5e38b4 100644
+index cdfd29bc0e..9f859408a1 100644
 --- a/src/network/networkd-manager.c
 +++ b/src/network/networkd-manager.c
-@@ -41,6 +41,7 @@
+@@ -44,6 +44,7 @@
  #include "networkd-routing-policy-rule.h"
  #include "networkd-speed-meter.h"
  #include "networkd-state-file.h"
 +#include "networkd-varlink.h"
  #include "networkd-wifi.h"
+ #include "networkd-wiphy.h"
  #include "ordered-set.h"
- #include "path-lookup.h"
-@@ -544,6 +545,8 @@ Manager* manager_free(Manager *m) {
+@@ -667,6 +668,8 @@ Manager* manager_free(Manager *m) {
  
          m->fw_ctx = fw_ctx_free(m->fw_ctx);
  
@@ -49,7 +49,7 @@
          return mfree(m);
  }
  
-@@ -553,6 +556,10 @@ int manager_start(Manager *m) {
+@@ -676,6 +679,10 @@ int manager_start(Manager *m) {
  
          assert(m);
  
@@ -61,7 +61,7 @@
          if (r < 0)
                  return log_error_errno(r, "Failed to initialize speed meter: %m");
 diff --git a/src/network/networkd-manager.h b/src/network/networkd-manager.h
-index 36313589a3..a0c0336ce5 100644
+index 40e6092f85..dfdd44baf8 100644
 --- a/src/network/networkd-manager.h
 +++ b/src/network/networkd-manager.h
 @@ -16,6 +16,7 @@
@@ -72,15 +72,37 @@
  
  struct Manager {
          sd_netlink *rtnl;
-@@ -95,6 +96,8 @@ struct Manager {
-         FirewallContext *fw_ctx;
+@@ -62,8 +63,8 @@ struct Manager {
+         bool has_product_uuid;
+         bool product_uuid_requested;
  
+-        char* dynamic_hostname;
+-        char* dynamic_timezone;
++        char *dynamic_hostname;
++        char *dynamic_timezone;
+ 
+         Set *rules;
+ 
+@@ -100,10 +101,12 @@ struct Manager {
          OrderedSet *request_queue;
+ 
+         Hashmap *tuntap_fds_by_name;
 +
 +        VarlinkServer *varlink_server;
  };
  
  int manager_new(Manager **ret, bool test_mode);
+-Manager* manager_free(Manager *m);
++Manager *manager_free(Manager *m);
+ 
+ int manager_setup(Manager *m);
+ int manager_start(Manager *m);
+@@ -115,4 +118,4 @@ int manager_enumerate(Manager *m);
+ int manager_set_hostname(Manager *m, const char *hostname);
+ int manager_set_timezone(Manager *m, const char *timezone);
+ 
+-DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
++DEFINE_TRIVIAL_CLEANUP_FUNC(Manager *, manager_free);
 diff --git a/src/network/networkd-varlink.c b/src/network/networkd-varlink.c
 new file mode 100644
 index 0000000000..57d8acb967
@@ -135,5 +157,5 @@
 +int manager_varlink_init(Manager *m);
 +void manager_varlink_done(Manager *m);
 -- 
-2.35.1
+2.41.0
 
diff --git a/board/czechlight/common/patches/systemd/0003-network-Add-LLDP-neighbors-method-to-varlink-server.patch b/board/czechlight/common/patches/systemd/0003-network-Add-LLDP-neighbors-method-to-varlink-server.patch
index 95bb683..dd32934 100644
--- a/board/czechlight/common/patches/systemd/0003-network-Add-LLDP-neighbors-method-to-varlink-server.patch
+++ b/board/czechlight/common/patches/systemd/0003-network-Add-LLDP-neighbors-method-to-varlink-server.patch
@@ -1,7 +1,7 @@
-From 2196678308d40ac4bb236776f5d9c23b87480759 Mon Sep 17 00:00:00 2001
+From a4a99d8b33b07401f5f5098b668398dddb5321d3 Mon Sep 17 00:00:00 2001
 From: Tomas Pecka <peckato1@users.noreply.github.com>
 Date: Wed, 1 Sep 2021 08:30:20 +0200
-Subject: [PATCH 3/9] network: Add LLDP neighbors method to varlink server
+Subject: [PATCH 3/7] network: Add LLDP neighbors method to varlink server
 
 Add a method to varlink server that will allow streaming the list of
 LLDP neighbors on a particular link. The method's argument is the ifindex
@@ -114,5 +114,5 @@
  }
  
 -- 
-2.35.1
+2.41.0
 
diff --git a/board/czechlight/common/patches/systemd/0004-varlink-Implement-varlink_observe_complete.patch b/board/czechlight/common/patches/systemd/0004-varlink-Implement-varlink_observe_complete.patch
index a181c0e..b2b337f 100644
--- a/board/czechlight/common/patches/systemd/0004-varlink-Implement-varlink_observe_complete.patch
+++ b/board/czechlight/common/patches/systemd/0004-varlink-Implement-varlink_observe_complete.patch
@@ -1,7 +1,7 @@
-From 072ebba1de115cb31a71f6398c17a1bfdb383ee8 Mon Sep 17 00:00:00 2001
+From 542b30b98c67c7407053bd5526ab080cc8090fb2 Mon Sep 17 00:00:00 2001
 From: Tomas Pecka <peckato1@users.noreply.github.com>
 Date: Thu, 9 Sep 2021 09:19:05 +0200
-Subject: [PATCH 4/9] varlink: Implement varlink_observe_complete
+Subject: [PATCH 4/7] varlink: Implement varlink_observe_complete
 
 In some cases one doesn't want to run the sd_event loop just to obtain
 results from varlink replies in the "continues" mode.
@@ -16,10 +16,10 @@
  2 files changed, 32 insertions(+)
 
 diff --git a/src/shared/varlink.c b/src/shared/varlink.c
-index e0038dfd28..7e5c9657f8 100644
+index 4f7ac97689..d7892693d1 100644
 --- a/src/shared/varlink.c
 +++ b/src/shared/varlink.c
-@@ -1440,6 +1440,37 @@ int varlink_observeb(Varlink *v, const char *method, ...) {
+@@ -1450,6 +1450,37 @@ int varlink_observeb(Varlink *v, const char *method, ...) {
          return varlink_observe(v, method, parameters);
  }
  
@@ -58,7 +58,7 @@
                  Varlink *v,
                  const char *method,
 diff --git a/src/shared/varlink.h b/src/shared/varlink.h
-index 66a1ff630e..9bc836e1f9 100644
+index 9518cd9098..a424411ce6 100644
 --- a/src/shared/varlink.h
 +++ b/src/shared/varlink.h
 @@ -92,6 +92,7 @@ int varlink_invokeb(Varlink *v, const char *method, ...);
@@ -70,5 +70,5 @@
  /* Enqueue a final reply */
  int varlink_reply(Varlink *v, JsonVariant *parameters);
 -- 
-2.35.1
+2.41.0
 
diff --git a/board/czechlight/common/patches/systemd/0007-networkctl-lldp-now-uses-varlink-call.patch b/board/czechlight/common/patches/systemd/0005-networkctl-lldp-now-uses-varlink-call.patch
similarity index 76%
rename from board/czechlight/common/patches/systemd/0007-networkctl-lldp-now-uses-varlink-call.patch
rename to board/czechlight/common/patches/systemd/0005-networkctl-lldp-now-uses-varlink-call.patch
index 44d0f82..3511700 100644
--- a/board/czechlight/common/patches/systemd/0007-networkctl-lldp-now-uses-varlink-call.patch
+++ b/board/czechlight/common/patches/systemd/0005-networkctl-lldp-now-uses-varlink-call.patch
@@ -1,16 +1,16 @@
-From 1e805d15da85b85dfd54684557da1415b0294903 Mon Sep 17 00:00:00 2001
+From ed72d91efb80888846267f72e9214470eaca4ce6 Mon Sep 17 00:00:00 2001
 From: Tomas Pecka <peckato1@users.noreply.github.com>
 Date: Wed, 15 Sep 2021 14:42:34 +0200
-Subject: [PATCH 7/9] networkctl: lldp now uses varlink call
+Subject: [PATCH 5/7] networkctl: lldp now uses varlink call
 
 `networkctl lldp` now uses varlink call to the networkd to query LLDP
 neighbor data.
 ---
- src/network/networkctl.c | 215 +++++++++++++++++++++++++--------------
- 1 file changed, 139 insertions(+), 76 deletions(-)
+ src/network/networkctl.c | 183 ++++++++++++++++++++++++++-------------
+ 1 file changed, 123 insertions(+), 60 deletions(-)
 
 diff --git a/src/network/networkctl.c b/src/network/networkctl.c
-index 46c08b5549..a10f3f3fc7 100644
+index a2e216e779..bab6cf5433 100644
 --- a/src/network/networkctl.c
 +++ b/src/network/networkctl.c
 @@ -36,6 +36,7 @@
@@ -29,7 +29,7 @@
  #include "verbs.h"
  #include "wifi-util.h"
  
-@@ -2479,14 +2481,103 @@ static void lldp_capabilities_legend(uint16_t x) {
+@@ -2439,14 +2441,103 @@ static void lldp_capabilities_legend(uint16_t x) {
          puts("");
  }
  
@@ -136,23 +136,23 @@
          r = sd_netlink_open(&rtnl);
          if (r < 0)
                  return log_error_errno(r, "Failed to connect to netlink: %m");
-@@ -2497,103 +2588,75 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
+@@ -2457,80 +2548,52 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
  
          pager_open(arg_pager_flags);
  
 -        table = table_new("link",
--                          "chassis id",
--                          "system name",
+-                          "chassis-id",
+-                          "system-name",
 -                          "caps",
--                          "port id",
--                          "port description");
+-                          "port-id",
+-                          "port-description");
 -        if (!table)
 +        udata.table = table_new("link",
-+                                "chassis id",
-+                                "system name",
++                                "chassis-id",
++                                "system-name",
 +                                "caps",
-+                                "port id",
-+                                "port description");
++                                "port-id",
++                                "port-description");
 +        if (!udata.table)
                  return log_oom();
  
@@ -161,58 +161,15 @@
 +                table_set_width(udata.table, 0);
  
 -        table_set_header(table, arg_legend);
-+        table_set_header(udata.table, arg_legend);
- 
--        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(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(table, 0, 1));
--        table_set_minimum_width(table, cell, 17);
--        table_set_maximum_width(table, cell, 17);
-+        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(table, 0, 2));
--        table_set_minimum_width(table, cell, 16);
--        table_set_maximum_width(table, cell, 16);
-+        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(table, 0, 3));
 -        table_set_minimum_width(table, cell, 11);
--        table_set_maximum_width(table, cell, 11);
-+        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(table, 0, 4));
--        table_set_minimum_width(table, cell, 17);
--        table_set_maximum_width(table, cell, 17);
-+        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(table, 0, 5));
--        table_set_minimum_width(table, cell, 16);
--        table_set_maximum_width(table, cell, 16);
-+        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(table, "n/a") < 0)
-+        if (table_set_empty_string(udata.table, "n/a") < 0)
-                 return log_oom();
+-        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
++        table_set_header(udata.table, arg_legend);
  
 -        for (int i = 0; i < c; i++) {
 -                _cleanup_fclose_ FILE *f = NULL;
-+        varlink_set_userdata(link, &udata);
- 
+-
 -                r = open_lldp_neighbors(links[i].ifindex, &f);
 -                if (r == -ENOENT)
 -                        continue;
@@ -220,13 +177,17 @@
 -                        log_warning_errno(r, "Failed to open LLDP data for %i, ignoring: %m", links[i].ifindex);
 -                        continue;
 -                }
--
++        assert_se(cell = table_get_cell(udata.table, 0, 3));
++        table_set_minimum_width(udata.table, cell, 11);
++        table_set_ersatz_string(udata.table, TABLE_ERSATZ_DASH);
+ 
 -                for (;;) {
--                        _cleanup_free_ char *capabilities = NULL;
 -                        const char *chassis_id = NULL, *port_id = NULL, *system_name = NULL, *port_description = NULL;
 -                        _cleanup_(sd_lldp_neighbor_unrefp) sd_lldp_neighbor *n = NULL;
+-                        _cleanup_free_ char *capabilities = NULL;
 -                        uint16_t cc;
--
++        varlink_set_userdata(link, &udata);
+ 
 -                        r = next_lldp_neighbor(f, &n);
 -                        if (r < 0) {
 -                                log_warning_errno(r, "Failed to read neighbor data: %m");
@@ -286,5 +247,5 @@
  
          return 0;
 -- 
-2.35.1
+2.41.0
 
diff --git a/board/czechlight/common/patches/systemd/0005-networkctl-lldp-uses-table_empty_string-instead-of-s.patch b/board/czechlight/common/patches/systemd/0005-networkctl-lldp-uses-table_empty_string-instead-of-s.patch
deleted file mode 100644
index ed0db4f..0000000
--- a/board/czechlight/common/patches/systemd/0005-networkctl-lldp-uses-table_empty_string-instead-of-s.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From d17ff9b2b0f3f0d2bfb54f9e3e965874e6df1974 Mon Sep 17 00:00:00 2001
-From: Tomas Pecka <peckato1@users.noreply.github.com>
-Date: Thu, 7 Oct 2021 14:11:45 +0200
-Subject: [PATCH 5/9] networkctl: lldp uses table_empty_string instead of strna
-
----
- src/network/networkctl.c | 13 ++++++++-----
- 1 file changed, 8 insertions(+), 5 deletions(-)
-
-diff --git a/src/network/networkctl.c b/src/network/networkctl.c
-index 68dd4b185c..30cd75eec0 100644
---- a/src/network/networkctl.c
-+++ b/src/network/networkctl.c
-@@ -2529,6 +2529,9 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
-         assert_se(cell = table_get_cell(table, 0, 5));
-         table_set_minimum_width(table, cell, 16);
- 
-+        if (table_set_empty_string(table, "n/a") < 0)
-+                return log_oom();
-+
-         for (int i = 0; i < c; i++) {
-                 _cleanup_fclose_ FILE *f = NULL;
- 
-@@ -2590,11 +2593,11 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
- 
-                         r = table_add_many(table,
-                                            TABLE_STRING, links[i].name,
--                                           TABLE_STRING, strna(chassis_id),
--                                           TABLE_STRING, strna(system_name),
--                                           TABLE_STRING, strna(capabilities),
--                                           TABLE_STRING, strna(port_id),
--                                           TABLE_STRING, strna(port_description));
-+                                           TABLE_STRING, chassis_id,
-+                                           TABLE_STRING, system_name,
-+                                           TABLE_STRING, capabilities,
-+                                           TABLE_STRING, port_id,
-+                                           TABLE_STRING, port_description);
-                         if (r < 0)
-                                 return table_log_add_error(r);
- 
--- 
-2.35.1
-
diff --git a/board/czechlight/common/patches/systemd/0008-networkctl-allow-format-LLDP-capabilities-string-wit.patch b/board/czechlight/common/patches/systemd/0006-networkctl-allow-format-LLDP-capabilities-string-wit.patch
similarity index 85%
rename from board/czechlight/common/patches/systemd/0008-networkctl-allow-format-LLDP-capabilities-string-wit.patch
rename to board/czechlight/common/patches/systemd/0006-networkctl-allow-format-LLDP-capabilities-string-wit.patch
index 8e89013..2b318a1 100644
--- a/board/czechlight/common/patches/systemd/0008-networkctl-allow-format-LLDP-capabilities-string-wit.patch
+++ b/board/czechlight/common/patches/systemd/0006-networkctl-allow-format-LLDP-capabilities-string-wit.patch
@@ -1,7 +1,7 @@
-From de6ad887e413ee3e66e368f707e08ea84aa72a91 Mon Sep 17 00:00:00 2001
+From a36487ec3e3a5d1bbfb11747bf48354c962a097a Mon Sep 17 00:00:00 2001
 From: Tomas Pecka <peckato1@users.noreply.github.com>
 Date: Wed, 15 Sep 2021 14:30:19 +0200
-Subject: [PATCH 8/9] networkctl: allow format LLDP capabilities string without
+Subject: [PATCH 6/7] networkctl: allow format LLDP capabilities string without
  dots
 
 Allows formatting the LLDP capabilities string without the dots
@@ -11,10 +11,10 @@
  1 file changed, 9 insertions(+), 6 deletions(-)
 
 diff --git a/src/network/networkctl.c b/src/network/networkctl.c
-index a10f3f3fc7..9fbeed6908 100644
+index bab6cf5433..04a89e015f 100644
 --- a/src/network/networkctl.c
 +++ b/src/network/networkctl.c
-@@ -2431,21 +2431,24 @@ static int link_status(int argc, char *argv[], void *userdata) {
+@@ -2391,21 +2391,24 @@ static int link_status(int argc, char *argv[], void *userdata) {
          return 0;
  }
  
@@ -44,7 +44,7 @@
          return ret;
  }
  
-@@ -2537,7 +2540,7 @@ static int lldp_neighbors_varlink_reply(Varlink *link, JsonVariant *parameters,
+@@ -2497,7 +2500,7 @@ static int lldp_neighbors_varlink_reply(Varlink *link, JsonVariant *parameters,
                  return r;
  
          if (udata->table) {
@@ -54,5 +54,5 @@
                  r = table_add_many(udata->table,
                                  TABLE_STRING, udata->link_name,
 -- 
-2.35.1
+2.41.0
 
diff --git a/board/czechlight/common/patches/systemd/0006-networkctl-lldp-table-now-ellpsizes-via-table-functi.patch b/board/czechlight/common/patches/systemd/0006-networkctl-lldp-table-now-ellpsizes-via-table-functi.patch
deleted file mode 100644
index 9b5b54c..0000000
--- a/board/czechlight/common/patches/systemd/0006-networkctl-lldp-table-now-ellpsizes-via-table-functi.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From 5aa44bfdab3215cf495442fb931a23f88a66d1c7 Mon Sep 17 00:00:00 2001
-From: Tomas Pecka <peckato1@users.noreply.github.com>
-Date: Thu, 7 Oct 2021 14:16:53 +0200
-Subject: [PATCH 6/9] networkctl: lldp table now ellpsizes via table functions
-
-Tables can now ellipize on their own so there is no need to manually
-call ellpsize on the table data.
-
-To achieve compatibility with previous versions the table columns are
-set to have the exact same size as before, therefore the minimum and
-maximum widths for the columns in the output.
----
- src/network/networkctl.c | 32 +++++++-------------------------
- 1 file changed, 7 insertions(+), 25 deletions(-)
-
-diff --git a/src/network/networkctl.c b/src/network/networkctl.c
-index 30cd75eec0..46c08b5549 100644
---- a/src/network/networkctl.c
-+++ b/src/network/networkctl.c
-@@ -2513,21 +2513,27 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
- 
-         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, 1));
-         table_set_minimum_width(table, cell, 17);
-+        table_set_maximum_width(table, cell, 17);
- 
-         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, 3));
-         table_set_minimum_width(table, cell, 11);
-+        table_set_maximum_width(table, cell, 11);
- 
-         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, 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();
-@@ -2544,7 +2550,7 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
-                 }
- 
-                 for (;;) {
--                        _cleanup_free_ char *cid = NULL, *pid = NULL, *sname = NULL, *pdesc = NULL, *capabilities = NULL;
-+                        _cleanup_free_ char *capabilities = NULL;
-                         const char *chassis_id = NULL, *port_id = NULL, *system_name = NULL, *port_description = NULL;
-                         _cleanup_(sd_lldp_neighbor_unrefp) sd_lldp_neighbor *n = NULL;
-                         uint16_t cc;
-@@ -2562,30 +2568,6 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
-                         (void) sd_lldp_neighbor_get_system_name(n, &system_name);
-                         (void) sd_lldp_neighbor_get_port_description(n, &port_description);
- 
--                        if (chassis_id) {
--                                cid = ellipsize(chassis_id, 17, 100);
--                                if (cid)
--                                        chassis_id = cid;
--                        }
--
--                        if (port_id) {
--                                pid = ellipsize(port_id, 17, 100);
--                                if (pid)
--                                        port_id = pid;
--                        }
--
--                        if (system_name) {
--                                sname = ellipsize(system_name, 16, 100);
--                                if (sname)
--                                        system_name = sname;
--                        }
--
--                        if (port_description) {
--                                pdesc = ellipsize(port_description, 16, 100);
--                                if (pdesc)
--                                        port_description = pdesc;
--                        }
--
-                         if (sd_lldp_neighbor_get_enabled_capabilities(n, &cc) >= 0) {
-                                 capabilities = lldp_capabilities_to_string(cc);
-                                 all |= cc;
--- 
-2.35.1
-
diff --git a/board/czechlight/common/patches/systemd/0009-networkctl-JSON-output-in-networkctl-lldp.patch b/board/czechlight/common/patches/systemd/0007-networkctl-JSON-output-in-networkctl-lldp.patch
similarity index 61%
rename from board/czechlight/common/patches/systemd/0009-networkctl-JSON-output-in-networkctl-lldp.patch
rename to board/czechlight/common/patches/systemd/0007-networkctl-JSON-output-in-networkctl-lldp.patch
index fc6a699..460af8d 100644
--- a/board/czechlight/common/patches/systemd/0009-networkctl-JSON-output-in-networkctl-lldp.patch
+++ b/board/czechlight/common/patches/systemd/0007-networkctl-JSON-output-in-networkctl-lldp.patch
@@ -1,19 +1,19 @@
-From 2fda28e34623cd24752ecad2dcea14f7ab46cb02 Mon Sep 17 00:00:00 2001
+From 49cc847aeedacaabdb285b7cdea0e6ccede6042e 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
+Subject: [PATCH 7/7] 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 | 118 ++++++++++++++++++++++++++-------------
- 1 file changed, 79 insertions(+), 39 deletions(-)
+ src/network/networkctl.c | 84 +++++++++++++++++++++++++++++-----------
+ 1 file changed, 62 insertions(+), 22 deletions(-)
 
 diff --git a/src/network/networkctl.c b/src/network/networkctl.c
-index 9fbeed6908..0f48aa4bf7 100644
+index 04a89e015f..2eb21ad4ff 100644
 --- a/src/network/networkctl.c
 +++ b/src/network/networkctl.c
-@@ -2507,12 +2507,14 @@ typedef struct LLDPUserdata {
+@@ -2467,12 +2467,14 @@ typedef struct LLDPUserdata {
          uint16_t capabilities_all;
  
          Table *table;
@@ -28,7 +28,7 @@
  }
  
  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,
+@@ -2516,6 +2518,34 @@ static int lldp_neighbors_varlink_reply(Varlink *link, JsonVariant *parameters,
          udata->neighbors_count += 1;
          udata->capabilities_all |= entry.capabilities;
  
@@ -63,7 +63,7 @@
          return 0;
  }
  
-@@ -2568,7 +2598,6 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
+@@ -2528,7 +2558,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_(lldp_userdata_freep) LLDPUserdata udata = {};
@@ -71,7 +71,7 @@
  
          r = varlink_connect_address(&link, address);
          if (r < 0)
-@@ -2590,47 +2619,54 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
+@@ -2550,24 +2579,31 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
                  return c;
  
          pager_open(arg_pager_flags);
@@ -79,77 +79,37 @@
 +                TableCell *cell;
 +
 +                udata.table = table_new("link",
-+                                        "chassis id",
-+                                        "system name",
++                                        "chassis-id",
++                                        "system-name",
 +                                        "caps",
-+                                        "port id",
-+                                        "port description");
++                                        "port-id",
++                                        "port-description");
 +                if (!udata.table)
 +                        return log_oom();
  
 -        udata.table = table_new("link",
--                                "chassis id",
--                                "system name",
+-                                "chassis-id",
+-                                "system-name",
 -                                "caps",
--                                "port id",
--                                "port description");
+-                                "port-id",
+-                                "port-description");
 -        if (!udata.table)
 -                return log_oom();
--
--        if (arg_full)
--                table_set_width(udata.table, 0);
 +                if (arg_full)
 +                        table_set_width(udata.table, 0);
  
--        table_set_header(udata.table, arg_legend);
+-        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, 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, 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, 2));
-+                table_set_minimum_width(udata.table, cell, 16);
-+                table_set_maximum_width(udata.table, cell, 16);
- 
+-        table_set_header(udata.table, arg_legend);
+-
 -        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);
+-        table_set_ersatz_string(udata.table, TABLE_ERSATZ_DASH);
 +                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, 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);
-+                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 (table_set_empty_string(udata.table, "n/a") < 0)
-+                        return log_oom();
++                table_set_ersatz_string(udata.table, TABLE_ERSATZ_DASH);
 +        } else {
 +                r = json_build(&udata.json, JSON_BUILD_EMPTY_OBJECT);
 +                if (r < 0)
@@ -158,7 +118,7 @@
  
          varlink_set_userdata(link, &udata);
  
-@@ -2653,13 +2689,17 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
+@@ -2590,13 +2626,17 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) {
                          return r;
          }
  
@@ -183,5 +143,5 @@
  
          return 0;
 -- 
-2.35.1
+2.41.0
 
