Use new, daemon-less sysrepo for YANG management

Updating all dependencies so that we're using the new sysrepo. The easiest way
there was via bringing in the new buildroot as well, which meant:

- new RAUC, hence no patch needed anymore,
- newer systemd, hence an updated patch,
- New spdlog and fmt, which means that the version we ship in
  submodules/dependencies no longer works. Fix that by just relying on
  systemwide spdlog.
- uboot-tools needed a patch because there's no /var/lock,
- OpenSSH was previously started autmagically, now we're explicitly
  adding that to the list of packages (I really like SSH, don't you?).

New sysrepo means that there's no `sysrepod` anymore, which required
changing a bunch of other units so that they are not marked as
`PartOf=sysrepod.service` anymore. Also, the command-line options for
`sysrepocfg` and `sysrepoctl` changed.

I had to patch buildroot so that it doesn't create SSH keys for the
NETCONF server at build time, and that all required modules are actually
installed. It turns out that new sysrepo doesn't really install
anything, and the fun only starts with Netopeer2. Their install scripts
a wee bit picky, but hey, we have bash, we can make it work.

On the other hand, installation of *our* YANG modules is a bit hairy.
There's just too much parallel activities going on, and therefore I have
no idea how robust our callout to `sysrepoctl --apply` really is. As a
cherry on top, `sysrepocfg` is particularly inconsistent when it comes
to how the **** one is supposed to provision the initial config, etc
etc. In the end, I ended up with a big hammer.

Installation of all non-netopeer2 YANG modules now happens from just a
single script, the previous way was very fragile and failed quite often
-- probably because that "wonderful" new way of installing a module and
possibly enabling a feature and also importing some data which might or
might not be the required initial data, so *THAT* thing, depended on
whether there already was or was not another SW connection. Wonderful.
If only there was a oneliner for that, then we could have avoided all
this stupid boilerplate. Oh well.

On the other hand, the `cla-sysrepod` is now properly signalling its
"up-and-running" status to systemd, *and* this up-and-running state is
only reached once the configuration has been propagated to the optical
HW. As a result, the HW watchdog will recover from an upload of a broken
FW (or, alternatively, it will keep rebooting if the optical HW is
FUBAR -- pick your poison, sir).

Change-Id: I4b65a8fb345bfe7907a331d0de16294af1c36a78
diff --git a/.zuul.yaml b/.zuul.yaml
index bd3854f..5067b81 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -1,6 +1,6 @@
 - job:
     name: czechlight-clearfog
-    parent: run-ci-build-sh-f31
+    parent: run-ci-build-sh-f32
     timeout: 3600
     post-timeout: 600
     vars:
@@ -15,17 +15,14 @@
       - CzechLight/velia
       - CzechLight/lldp-systemd-networkd-sysrepo
       - github/CESNET/libyang
-      - github/sysrepo/libredblack
       - github/sysrepo/sysrepo
       - github/CESNET/libnetconf2
       - github/CESNET/Netopeer2
       - github/onqtam/doctest
       - github/docopt/docopt.cpp
-      - github/gabime/spdlog
       - github/rollbear/trompeloeil
       - github/tplgy/cppcodec
       - github/AmokHuginnsson/replxx
-      - github/pybind/pybind11
       - github/Kistler-Group/sdbus-cpp
 
 - job:
diff --git a/Config.in b/Config.in
index 4de0d4a..86cefb9 100644
--- a/Config.in
+++ b/Config.in
@@ -2,7 +2,7 @@
 
 config CZECHLIGHT_NETCONF
 	bool "Complete NETCONF server and HW drivers"
-	select BR2_PACKAGE_NETOPEER2_SERVER
+	select BR2_PACKAGE_NETOPEER2
 	select BR2_PACKAGE_CLA_SYSREPO
 	default true
 	help
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/cla-i2c-adt7463.service b/board/czechlight/common/overlay/usr/lib/systemd/system/cla-i2c-adt7463.service
index 7c5f7fe..dde5b6b 100644
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/cla-i2c-adt7463.service
+++ b/board/czechlight/common/overlay/usr/lib/systemd/system/cla-i2c-adt7463.service
@@ -4,7 +4,7 @@
 ConditionKernelCommandLine=|czechlight=sdn-roadm-line
 ConditionKernelCommandLine=|czechlight=sdn-roadm-coherent-a-d
 ConditionKernelCommandLine=|czechlight=sdn-inline
-Before=sysrepod.service
+Before=netopeer2.service
 
 [Service]
 Type=oneshot
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/cla-install-yang-ietf-hardware.service b/board/czechlight/common/overlay/usr/lib/systemd/system/cla-install-yang-ietf-hardware.service
deleted file mode 100644
index 51fc8cc..0000000
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/cla-install-yang-ietf-hardware.service
+++ /dev/null
@@ -1,19 +0,0 @@
-[Unit]
-Description=Install YANG model ietf-hardware-state and its dependencies
-Requires=sysrepod.service
-ConditionKernelCommandLine=|czechlight=sdn-roadm-line
-ConditionKernelCommandLine=|czechlight=sdn-roadm-add-drop
-ConditionKernelCommandLine=|czechlight=sdn-roadm-coherent-a-d
-ConditionKernelCommandLine=|czechlight=sdn-inline
-ConditionKernelCommandLine=|czechlight=calibration-box
-ConditionPathExistsGlob=!/etc/sysrepo/yang/ietf-hardware-state@2018-03-13yang
-Before=cla-install-yang-sdn-roadm-line.service cla-install-yang-sdn-roadm-add-drop.service cla-install-yang-sdn-roadm-coherent-a-d.service cla-install-yang-sdn-inline.service cla-install-yang-calibration-box.service
-
-[Service]
-Type=oneshot
-ExecStart=/usr/bin/sysrepoctl --install --yang /usr/share/cla-sysrepo/yang/iana-hardware@2018-03-13.yang
-ExecStart=/usr/bin/sysrepoctl --install --yang /usr/share/cla-sysrepo/yang/ietf-hardware-state@2018-03-13.yang
-ExecStart=/usr/bin/sysrepoctl --module ietf-hardware-state --feature-enable hardware-sensor
-
-[Install]
-WantedBy=multi-user.target
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-CL-ROADMv2.service b/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-CL-ROADMv2.service
deleted file mode 120000
index 1beafb9..0000000
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-CL-ROADMv2.service
+++ /dev/null
@@ -1 +0,0 @@
-../cla-CL-ROADMv2.service
\ No newline at end of file
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-STATIC-CL-ROADMv2.service b/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-STATIC-CL-ROADMv2.service
deleted file mode 120000
index 0dcdd20..0000000
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-STATIC-CL-ROADMv2.service
+++ /dev/null
@@ -1 +0,0 @@
-../cla-STATIC-CL-ROADMv2.service
\ No newline at end of file
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-install-yang-CL-ROADMv2.service b/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-install-yang-CL-ROADMv2.service
deleted file mode 120000
index 7af2690..0000000
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-install-yang-CL-ROADMv2.service
+++ /dev/null
@@ -1 +0,0 @@
-../cla-install-yang-CL-ROADMv2.service
\ No newline at end of file
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-install-yang-STATIC-CL-ROADMv2.service b/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-install-yang-STATIC-CL-ROADMv2.service
deleted file mode 120000
index a7cdfe5..0000000
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-install-yang-STATIC-CL-ROADMv2.service
+++ /dev/null
@@ -1 +0,0 @@
-../cla-install-yang-STATIC-CL-ROADMv2.service
\ No newline at end of file
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-install-yang-ietf-hardware.service b/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-install-yang-ietf-hardware.service
deleted file mode 120000
index a3806a0..0000000
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/cla-install-yang-ietf-hardware.service
+++ /dev/null
@@ -1 +0,0 @@
-../cla-install-yang-ietf-hardware.service
\ No newline at end of file
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/netopeer2-server.service b/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/netopeer2-server.service
deleted file mode 120000
index da297bb..0000000
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/netopeer2-server.service
+++ /dev/null
@@ -1 +0,0 @@
-../netopeer2-server.service
\ No newline at end of file
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/netopeer2.service b/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/netopeer2.service
new file mode 120000
index 0000000..89c2903
--- /dev/null
+++ b/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/netopeer2.service
@@ -0,0 +1 @@
+../netopeer2.service
\ No newline at end of file
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/sysrepo-plugind.service b/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/sysrepo-plugind.service
deleted file mode 120000
index 18d911d..0000000
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/sysrepo-plugind.service
+++ /dev/null
@@ -1 +0,0 @@
-../sysrepo-plugind.service
\ No newline at end of file
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/sysrepod.service b/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/sysrepod.service
deleted file mode 120000
index a248cd0..0000000
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/multi-user.target.wants/sysrepod.service
+++ /dev/null
@@ -1 +0,0 @@
-../sysrepod.service
\ No newline at end of file
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/netopeer2-server.service b/board/czechlight/common/overlay/usr/lib/systemd/system/netopeer2-server.service
deleted file mode 100644
index ce102d4..0000000
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/netopeer2-server.service
+++ /dev/null
@@ -1,20 +0,0 @@
-[Unit]
-Description=A NETCONF server on top of sysrepo
-After=syslog.target network.target sysrepod.service
-Requires=sysrepod.service
-PartOf=sysrepod.service
-StartLimitIntervalSec=0
-
-[Service]
-Type=forking
-ExecStart=/usr/bin/netopeer2-server
-PIDFile=/var/run/netopeer2-server.pid
-PrivateTmp=yes
-PrivateDevices=yes
-ProtectSystem=yes
-ProtectHome=yes
-SystemCallArchitectures=native
-Restart=always
-
-[Install]
-WantedBy=multi-user.target
diff --git a/board/czechlight/common/overlay/usr/lib/systemd/system/sysrepod.service b/board/czechlight/common/overlay/usr/lib/systemd/system/sysrepod.service
deleted file mode 100644
index 42ffd41..0000000
--- a/board/czechlight/common/overlay/usr/lib/systemd/system/sysrepod.service
+++ /dev/null
@@ -1,19 +0,0 @@
-[Unit]
-Description=Sysrepo YANG configuration storage and management
-After=syslog.target network.target
-PartOf=netopeer2-server.service
-StartLimitIntervalSec=0
-
-[Service]
-Type=forking
-ExecStart=/usr/bin/sysrepod
-PIDFile=/var/run/sysrepod.pid
-PrivateTmp=yes
-PrivateDevices=yes
-ProtectSystem=yes
-ProtectHome=yes
-SystemCallArchitectures=native
-Restart=always
-
-[Install]
-WantedBy=multi-user.target
diff --git a/board/czechlight/common/patches/rauc/0001-curl-Enable-decoding-from-server-s-Content-Encoding.patch b/board/czechlight/common/patches/rauc/0001-curl-Enable-decoding-from-server-s-Content-Encoding.patch
deleted file mode 100644
index 83a0498..0000000
--- a/board/czechlight/common/patches/rauc/0001-curl-Enable-decoding-from-server-s-Content-Encoding.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 256274e4ca5786b4e68011fcb1b31272e278141d Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= <jan.kundrat@cesnet.cz>
-Date: Thu, 5 Dec 2019 17:03:06 +0100
-Subject: [PATCH] curl: Enable decoding from server's Content-Encoding
-
-I would like to consume RAUC bundles straight from our CI environment
-which uses OpenStack Swift as a backend for artifact storage, and
-OpenDev's Zuul as the CI runner. As it happens, our CI jobs sends file
-content to Swift with a Content-Encoding: gzip [1], and Swift appears to
-always send the file with that Content-Encoding no matter what
-Accept-Encoding the HTTP client sends in their request.
-
-This patch simply uses curl's list of default supported Content-Encoding
-decoders (that's the special magic "" value of this header). The end
-result is that our boxes can now fetch stuff from our CI environment
-without any problems.
-
-[1] https://review.opendev.org/688154
----
- src/network.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/network.c b/src/network.c
-index ade9f21..5793093 100644
---- a/src/network.c
-+++ b/src/network.c
-@@ -93,6 +93,7 @@ static gboolean transfer(RaucTransfer *xfer, GError **error)
- 	curl_easy_setopt(curl, CURLOPT_XFERINFODATA, xfer);
- 	curl_easy_setopt(curl, CURLOPT_FAILONERROR, xfer);
- 	curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
-+	curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, ""); /* decode all supported Accept-Encoding headers */
- 
- 	/* set error buffer empty before perorming a request */
- 	errbuf[0] = 0;
--- 
-2.21.0
-
diff --git a/board/czechlight/common/patches/systemd/sd_lldp.patch b/board/czechlight/common/patches/systemd/sd_lldp.patch
index ca32358..d858e12 100644
--- a/board/czechlight/common/patches/systemd/sd_lldp.patch
+++ b/board/czechlight/common/patches/systemd/sd_lldp.patch
@@ -1,33 +1,32 @@
-From 9b8b7ba40accbd303a3378d75022d6d92a2b7771 Mon Sep 17 00:00:00 2001
+From 1cdab502f703bdca754d7d55b9017d25c492c0c9 Mon Sep 17 00:00:00 2001
 From: Tomas Pecka <peckato1@fit.cvut.cz>
 Date: Mon, 7 Sep 2020 18:26:47 +0200
 Subject: [PATCH] Move sd_lldp to libsystemd
 
-Make sd_lldp public in libsystemd. Clients can therefore operate
+This makes sd_lldp public in libsystemd. Clients can therefore operate
 with LLDP structures and files (e.g. parse LLDP neighbours).
 ---
  meson.build                            |   1 +
- src/fuzz/meson.build                   |   9 +-
  src/libsystemd-network/lldp-internal.h |  39 --
- src/libsystemd-network/lldp-neighbor.c | 769 -------------------------
- src/libsystemd-network/lldp-neighbor.h |  91 ---
+ src/libsystemd-network/lldp-neighbor.c | 792 -------------------------
+ src/libsystemd-network/lldp-neighbor.h |  92 ---
  src/libsystemd-network/lldp-network.c  |  78 ---
  src/libsystemd-network/lldp-network.h  |   6 -
  src/libsystemd-network/meson.build     |   6 -
  src/libsystemd-network/sd-lldp.c       | 498 ----------------
- src/libsystemd-network/test-lldp.c     | 379 ------------
- src/libsystemd/libsystemd.sym          |  41 ++
+ src/libsystemd-network/test-lldp.c     | 378 ------------
+ src/libsystemd/libsystemd.sym          |  39 ++
  src/libsystemd/meson.build             |   6 +
  src/libsystemd/sd-lldp/lldp-internal.h |  39 ++
- src/libsystemd/sd-lldp/lldp-neighbor.c | 769 +++++++++++++++++++++++++
- src/libsystemd/sd-lldp/lldp-neighbor.h |  91 +++
+ src/libsystemd/sd-lldp/lldp-neighbor.c | 792 +++++++++++++++++++++++++
+ src/libsystemd/sd-lldp/lldp-neighbor.h |  92 +++
  src/libsystemd/sd-lldp/lldp-network.c  |  78 +++
  src/libsystemd/sd-lldp/lldp-network.h  |   6 +
  src/libsystemd/sd-lldp/sd-lldp.c       | 498 ++++++++++++++++
- src/libsystemd/sd-lldp/test-lldp.c     | 379 ++++++++++++
+ src/libsystemd/sd-lldp/test-lldp.c     | 378 ++++++++++++
  src/systemd/meson.build                |   2 +-
  src/test/meson.build                   |  10 +-
- 21 files changed, 1919 insertions(+), 1876 deletions(-)
+ 20 files changed, 1935 insertions(+), 1895 deletions(-)
  delete mode 100644 src/libsystemd-network/lldp-internal.h
  delete mode 100644 src/libsystemd-network/lldp-neighbor.c
  delete mode 100644 src/libsystemd-network/lldp-neighbor.h
@@ -44,10 +43,10 @@
  create mode 100644 src/libsystemd/sd-lldp/test-lldp.c
 
 diff --git a/meson.build b/meson.build
-index 8ccc947e37..1c2099d093 100644
+index a5d1ed3d4d..45cc47f604 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -1398,6 +1398,7 @@ includes = include_directories('src/basic',
+@@ -1552,6 +1552,7 @@ includes = include_directories('src/basic',
                                 'src/libsystemd/sd-event',
                                 'src/libsystemd/sd-hwdb',
                                 'src/libsystemd/sd-id128',
@@ -55,33 +54,6 @@
                                 'src/libsystemd/sd-netlink',
                                 'src/libsystemd/sd-network',
                                 'src/libsystemd/sd-resolve',
-diff --git a/src/fuzz/meson.build b/src/fuzz/meson.build
-index c88812d1de..8171bf58c1 100644
---- a/src/fuzz/meson.build
-+++ b/src/fuzz/meson.build
-@@ -33,8 +33,8 @@ fuzzers += [
-          []],
- 
-         [['src/fuzz/fuzz-lldp.c'],
--         [libshared,
--          libsystemd_network],
-+         [libbasic,libshared_static,libsystemd_static
-+          ],
-          []],
- 
-         [['src/fuzz/fuzz-ndisc-rs.c',
-@@ -43,8 +43,9 @@ fuzzers += [
-           'src/libsystemd-network/icmp6-util.h',
-           'src/systemd/sd-dhcp6-client.h',
-           'src/systemd/sd-ndisc.h'],
--         [libshared,
--          libsystemd_network],
-+         [libsystemd_network,
-+          libshared
-+          ],
-          []],
- 
-         [['src/fuzz/fuzz-json.c'],
 diff --git a/src/libsystemd-network/lldp-internal.h b/src/libsystemd-network/lldp-internal.h
 deleted file mode 100644
 index 9598438dba..0000000000
@@ -129,10 +101,10 @@
 -sd_lldp_event lldp_event_from_string(const char *s) _pure_;
 diff --git a/src/libsystemd-network/lldp-neighbor.c b/src/libsystemd-network/lldp-neighbor.c
 deleted file mode 100644
-index 9bae4a3c6e..0000000000
+index 02645b2bcd..0000000000
 --- a/src/libsystemd-network/lldp-neighbor.c
 +++ /dev/null
-@@ -1,769 +0,0 @@
+@@ -1,792 +0,0 @@
 -/* SPDX-License-Identifier: LGPL-2.1+ */
 -
 -#include "alloc-util.h"
@@ -143,7 +115,7 @@
 -#include "lldp-internal.h"
 -#include "lldp-neighbor.h"
 -#include "memory-util.h"
--#include "missing.h"
+-#include "missing_network.h"
 -#include "unaligned.h"
 -
 -static void lldp_neighbor_id_hash_func(const LLDPNeighborID *id, struct siphash *state) {
@@ -185,6 +157,7 @@
 -        free(n->port_description);
 -        free(n->system_name);
 -        free(n->system_description);
+-        free(n->mud_url);
 -        free(n->chassis_id_as_string);
 -        free(n->port_id_as_string);
 -        free(n);
@@ -427,9 +400,20 @@
 -
 -                        break;
 -
--                case SD_LLDP_TYPE_PRIVATE:
+-                case SD_LLDP_TYPE_PRIVATE: {
 -                        if (length < 4)
 -                                log_lldp("Found private TLV that is too short, ignoring.");
+-                        else {
+-                                /* RFC 8520: MUD URL */
+-                                if (memcmp(p, SD_LLDP_OUI_MUD, sizeof(SD_LLDP_OUI_MUD)) == 0 &&
+-                                    p[sizeof(SD_LLDP_OUI_MUD)] == SD_LLDP_OUI_SUBTYPE_MUD_USAGE_DESCRIPTION) {
+-                                        r = parse_string(&n->mud_url, p + sizeof(SD_LLDP_OUI_MUD) + 1,
+-                                                         length - 1 - sizeof(SD_LLDP_OUI_MUD));
+-                                        if (r < 0)
+-                                                return r;
+-                                }
+-                        }
+-                }
 -
 -                        break;
 -                }
@@ -728,6 +712,17 @@
 -        return 0;
 -}
 -
+-_public_ int sd_lldp_neighbor_get_mud_url(sd_lldp_neighbor *n, const char **ret) {
+-        assert_return(n, -EINVAL);
+-        assert_return(ret, -EINVAL);
+-
+-        if (!n->mud_url)
+-                return -ENODATA;
+-
+-        *ret = n->mud_url;
+-        return 0;
+-}
+-
 -_public_ int sd_lldp_neighbor_get_system_capabilities(sd_lldp_neighbor *n, uint16_t *ret) {
 -        assert_return(n, -EINVAL);
 -        assert_return(ret, -EINVAL);
@@ -904,10 +899,10 @@
 -}
 diff --git a/src/libsystemd-network/lldp-neighbor.h b/src/libsystemd-network/lldp-neighbor.h
 deleted file mode 100644
-index 62dbff42ca..0000000000
+index 74175edf54..0000000000
 --- a/src/libsystemd-network/lldp-neighbor.h
 +++ /dev/null
-@@ -1,91 +0,0 @@
+@@ -1,92 +0,0 @@
 -/* SPDX-License-Identifier: LGPL-2.1+ */
 -#pragma once
 -
@@ -964,6 +959,7 @@
 -        char *port_description;
 -        char *system_name;
 -        char *system_description;
+-        char *mud_url;
 -
 -        uint16_t port_vlan_id;
 -
@@ -1001,7 +997,7 @@
 -bool lldp_neighbor_equal(const sd_lldp_neighbor *a, const sd_lldp_neighbor *b);
 diff --git a/src/libsystemd-network/lldp-network.c b/src/libsystemd-network/lldp-network.c
 deleted file mode 100644
-index 870584c0db..0000000000
+index 53e329734b..0000000000
 --- a/src/libsystemd-network/lldp-network.c
 +++ /dev/null
 @@ -1,78 +0,0 @@
@@ -1012,7 +1008,7 @@
 -
 -#include "fd-util.h"
 -#include "lldp-network.h"
--#include "missing.h"
+-#include "missing_network.h"
 -#include "socket-util.h"
 -
 -int lldp_network_bind_raw_socket(int ifindex) {
@@ -1096,10 +1092,10 @@
 -
 -int lldp_network_bind_raw_socket(int ifindex);
 diff --git a/src/libsystemd-network/meson.build b/src/libsystemd-network/meson.build
-index 56d470ff68..88a72aa900 100644
+index 7fa0c67956..517ffd1471 100644
 --- a/src/libsystemd-network/meson.build
 +++ b/src/libsystemd-network/meson.build
-@@ -33,12 +33,6 @@ sources = files('''
+@@ -34,12 +34,6 @@ sources = files('''
          sd-dhcp6-lease.c
          dhcp-identifier.h
          dhcp-identifier.c
@@ -1114,7 +1110,7 @@
  network_internal_h = files('network-internal.h')
 diff --git a/src/libsystemd-network/sd-lldp.c b/src/libsystemd-network/sd-lldp.c
 deleted file mode 100644
-index 1f28c5731f..0000000000
+index d3606cf501..0000000000
 --- a/src/libsystemd-network/sd-lldp.c
 +++ /dev/null
 @@ -1,498 +0,0 @@
@@ -1586,7 +1582,7 @@
 -
 -_public_ int sd_lldp_set_neighbors_max(sd_lldp *lldp, uint64_t m) {
 -        assert_return(lldp, -EINVAL);
--        assert_return(m <= 0, -EINVAL);
+-        assert_return(m > 0, -EINVAL);
 -
 -        lldp->neighbors_max = m;
 -        lldp_make_space(lldp, 0);
@@ -1618,17 +1614,16 @@
 -}
 diff --git a/src/libsystemd-network/test-lldp.c b/src/libsystemd-network/test-lldp.c
 deleted file mode 100644
-index 7406f94ce0..0000000000
+index a2ac65095f..0000000000
 --- a/src/libsystemd-network/test-lldp.c
 +++ /dev/null
-@@ -1,379 +0,0 @@
+@@ -1,378 +0,0 @@
 -/* SPDX-License-Identifier: LGPL-2.1+ */
 -
 -#include <arpa/inet.h>
 -#include <errno.h>
 -#include <net/ethernet.h>
 -#include <stdio.h>
--#include <string.h>
 -#include <unistd.h>
 -
 -#include "sd-event.h"
@@ -2002,34 +1997,19 @@
 -        return 0;
 -}
 diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym
-index 5ec42e0f1f..48021b86d3 100644
+index 1e654b49ea..d584ac2faf 100644
 --- a/src/libsystemd/libsystemd.sym
 +++ b/src/libsystemd/libsystemd.sym
-@@ -681,4 +681,45 @@ LIBSYSTEMD_243 {
- global:
-         sd_bus_object_vtable_format;
-         sd_event_source_disable_unref;
+@@ -720,4 +720,43 @@ global:
+ 
+         sd_journal_enumerate_available_data;
+         sd_journal_enumerate_available_unique;
 +
-+        sd_lldp_new;
-+        sd_lldp_ref;
-+        sd_lldp_unref;
 +        sd_lldp_start;
-+        sd_lldp_stop;
-+        sd_lldp_attach_event;
-+        sd_lldp_detach_event;
-+        sd_lldp_get_event;
-+        sd_lldp_set_callback;
-+        sd_lldp_set_ifindex;
-+        sd_lldp_set_neighbors_max;
-+        sd_lldp_match_capabilities;
-+        sd_lldp_set_filter_address;
-+        sd_lldp_get_neighbors;
-+        sd_lldp_neighbor_from_raw;
-+        sd_lldp_neighbor_ref;
++		sd_lldp_neighbor_ref;
 +        sd_lldp_neighbor_unref;
 +        sd_lldp_neighbor_get_source_address;
 +        sd_lldp_neighbor_get_destination_address;
-+        sd_lldp_neighbor_get_timestamp;
 +        sd_lldp_neighbor_get_raw;
 +        sd_lldp_neighbor_get_chassis_id;
 +        sd_lldp_neighbor_get_chassis_id_as_string;
@@ -2042,6 +2022,7 @@
 +        sd_lldp_neighbor_get_mud_url;
 +        sd_lldp_neighbor_get_system_capabilities;
 +        sd_lldp_neighbor_get_enabled_capabilities;
++        sd_lldp_neighbor_from_raw;
 +        sd_lldp_neighbor_tlv_rewind;
 +        sd_lldp_neighbor_tlv_next;
 +        sd_lldp_neighbor_tlv_get_type;
@@ -2049,10 +2030,22 @@
 +        sd_lldp_neighbor_tlv_get_oui;
 +        sd_lldp_neighbor_tlv_is_oui;
 +        sd_lldp_neighbor_tlv_get_raw;
-+
- } LIBSYSTEMD_241;
++        sd_lldp_neighbor_get_timestamp;
++        sd_lldp_start;
++        sd_lldp_stop;
++        sd_lldp_attach_event;
++        sd_lldp_detach_event;
++        sd_lldp_get_event;
++        sd_lldp_set_callback;
++        sd_lldp_set_ifindex;
++        sd_lldp_new;
++        sd_lldp_get_neighbors;
++        sd_lldp_set_neighbors_max;
++        sd_lldp_match_capabilities;
++        sd_lldp_set_filter_address;
+ } LIBSYSTEMD_245;
 diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build
-index 77fe6e780f..e60853959f 100644
+index aa1ed9b7dd..db28fbcf37 100644
 --- a/src/libsystemd/meson.build
 +++ b/src/libsystemd/meson.build
 @@ -70,6 +70,12 @@ libsystemd_sources = files('''
@@ -2066,8 +2059,8 @@
 +        sd-lldp/lldp-network.c
 +        sd-lldp/lldp-network.h
          sd-netlink/generic-netlink.c
+         sd-netlink/generic-netlink.h
          sd-netlink/netlink-internal.h
-         sd-netlink/netlink-message.c
 diff --git a/src/libsystemd/sd-lldp/lldp-internal.h b/src/libsystemd/sd-lldp/lldp-internal.h
 new file mode 100644
 index 0000000000..9598438dba
@@ -2115,10 +2108,10 @@
 +sd_lldp_event lldp_event_from_string(const char *s) _pure_;
 diff --git a/src/libsystemd/sd-lldp/lldp-neighbor.c b/src/libsystemd/sd-lldp/lldp-neighbor.c
 new file mode 100644
-index 0000000000..9bae4a3c6e
+index 0000000000..02645b2bcd
 --- /dev/null
 +++ b/src/libsystemd/sd-lldp/lldp-neighbor.c
-@@ -0,0 +1,769 @@
+@@ -0,0 +1,792 @@
 +/* SPDX-License-Identifier: LGPL-2.1+ */
 +
 +#include "alloc-util.h"
@@ -2129,7 +2122,7 @@
 +#include "lldp-internal.h"
 +#include "lldp-neighbor.h"
 +#include "memory-util.h"
-+#include "missing.h"
++#include "missing_network.h"
 +#include "unaligned.h"
 +
 +static void lldp_neighbor_id_hash_func(const LLDPNeighborID *id, struct siphash *state) {
@@ -2171,6 +2164,7 @@
 +        free(n->port_description);
 +        free(n->system_name);
 +        free(n->system_description);
++        free(n->mud_url);
 +        free(n->chassis_id_as_string);
 +        free(n->port_id_as_string);
 +        free(n);
@@ -2413,9 +2407,20 @@
 +
 +                        break;
 +
-+                case SD_LLDP_TYPE_PRIVATE:
++                case SD_LLDP_TYPE_PRIVATE: {
 +                        if (length < 4)
 +                                log_lldp("Found private TLV that is too short, ignoring.");
++                        else {
++                                /* RFC 8520: MUD URL */
++                                if (memcmp(p, SD_LLDP_OUI_MUD, sizeof(SD_LLDP_OUI_MUD)) == 0 &&
++                                    p[sizeof(SD_LLDP_OUI_MUD)] == SD_LLDP_OUI_SUBTYPE_MUD_USAGE_DESCRIPTION) {
++                                        r = parse_string(&n->mud_url, p + sizeof(SD_LLDP_OUI_MUD) + 1,
++                                                         length - 1 - sizeof(SD_LLDP_OUI_MUD));
++                                        if (r < 0)
++                                                return r;
++                                }
++                        }
++                }
 +
 +                        break;
 +                }
@@ -2714,6 +2719,17 @@
 +        return 0;
 +}
 +
++_public_ int sd_lldp_neighbor_get_mud_url(sd_lldp_neighbor *n, const char **ret) {
++        assert_return(n, -EINVAL);
++        assert_return(ret, -EINVAL);
++
++        if (!n->mud_url)
++                return -ENODATA;
++
++        *ret = n->mud_url;
++        return 0;
++}
++
 +_public_ int sd_lldp_neighbor_get_system_capabilities(sd_lldp_neighbor *n, uint16_t *ret) {
 +        assert_return(n, -EINVAL);
 +        assert_return(ret, -EINVAL);
@@ -2890,10 +2906,10 @@
 +}
 diff --git a/src/libsystemd/sd-lldp/lldp-neighbor.h b/src/libsystemd/sd-lldp/lldp-neighbor.h
 new file mode 100644
-index 0000000000..62dbff42ca
+index 0000000000..74175edf54
 --- /dev/null
 +++ b/src/libsystemd/sd-lldp/lldp-neighbor.h
-@@ -0,0 +1,91 @@
+@@ -0,0 +1,92 @@
 +/* SPDX-License-Identifier: LGPL-2.1+ */
 +#pragma once
 +
@@ -2950,6 +2966,7 @@
 +        char *port_description;
 +        char *system_name;
 +        char *system_description;
++        char *mud_url;
 +
 +        uint16_t port_vlan_id;
 +
@@ -2987,7 +3004,7 @@
 +bool lldp_neighbor_equal(const sd_lldp_neighbor *a, const sd_lldp_neighbor *b);
 diff --git a/src/libsystemd/sd-lldp/lldp-network.c b/src/libsystemd/sd-lldp/lldp-network.c
 new file mode 100644
-index 0000000000..870584c0db
+index 0000000000..53e329734b
 --- /dev/null
 +++ b/src/libsystemd/sd-lldp/lldp-network.c
 @@ -0,0 +1,78 @@
@@ -2998,7 +3015,7 @@
 +
 +#include "fd-util.h"
 +#include "lldp-network.h"
-+#include "missing.h"
++#include "missing_network.h"
 +#include "socket-util.h"
 +
 +int lldp_network_bind_raw_socket(int ifindex) {
@@ -3083,7 +3100,7 @@
 +int lldp_network_bind_raw_socket(int ifindex);
 diff --git a/src/libsystemd/sd-lldp/sd-lldp.c b/src/libsystemd/sd-lldp/sd-lldp.c
 new file mode 100644
-index 0000000000..1f28c5731f
+index 0000000000..d3606cf501
 --- /dev/null
 +++ b/src/libsystemd/sd-lldp/sd-lldp.c
 @@ -0,0 +1,498 @@
@@ -3555,7 +3572,7 @@
 +
 +_public_ int sd_lldp_set_neighbors_max(sd_lldp *lldp, uint64_t m) {
 +        assert_return(lldp, -EINVAL);
-+        assert_return(m <= 0, -EINVAL);
++        assert_return(m > 0, -EINVAL);
 +
 +        lldp->neighbors_max = m;
 +        lldp_make_space(lldp, 0);
@@ -3587,17 +3604,16 @@
 +}
 diff --git a/src/libsystemd/sd-lldp/test-lldp.c b/src/libsystemd/sd-lldp/test-lldp.c
 new file mode 100644
-index 0000000000..7406f94ce0
+index 0000000000..a2ac65095f
 --- /dev/null
 +++ b/src/libsystemd/sd-lldp/test-lldp.c
-@@ -0,0 +1,379 @@
+@@ -0,0 +1,378 @@
 +/* SPDX-License-Identifier: LGPL-2.1+ */
 +
 +#include <arpa/inet.h>
 +#include <errno.h>
 +#include <net/ethernet.h>
 +#include <stdio.h>
-+#include <string.h>
 +#include <unistd.h>
 +
 +#include "sd-event.h"
@@ -3971,18 +3987,18 @@
 +        return 0;
 +}
 diff --git a/src/systemd/meson.build b/src/systemd/meson.build
-index 75c48b07a5..887421bee0 100644
+index 62baf7784e..090f06087b 100644
 --- a/src/systemd/meson.build
 +++ b/src/systemd/meson.build
-@@ -12,6 +12,7 @@ _systemd_headers = '''
-         sd-journal.h
+@@ -13,6 +13,7 @@ _systemd_headers = '''
          sd-login.h
          sd-messages.h
+         sd-path.h
 +        sd-lldp.h
  '''.split()
  
  # https://github.com/mesonbuild/meson/issues/1633
-@@ -25,7 +26,6 @@ _not_installed_headers = '''
+@@ -28,7 +29,6 @@ _not_installed_headers = '''
          sd-dhcp-server.h
          sd-ipv4acd.h
          sd-ipv4ll.h
@@ -3991,22 +4007,22 @@
          sd-netlink.h
          sd-network.h
 diff --git a/src/test/meson.build b/src/test/meson.build
-index de31e977bc..680d1dec6b 100644
+index 132989f197..1b7d2d6e6d 100644
 --- a/src/test/meson.build
 +++ b/src/test/meson.build
-@@ -1010,6 +1010,11 @@ tests += [
+@@ -1037,6 +1037,11 @@ tests += [
           [],
           []],
  
 +        [['src/libsystemd/sd-lldp/test-lldp.c'],
-+         [libbasic,libshared_static,libsystemd_static
-+          ],
++         [libsystemd_static,
++          libshared],
 +         []],
 +
  ]
  
- # test-bus-vtable-cc.cc is a symlink and symlinks get lost in containers on FuzzBuzz.
-@@ -1098,11 +1103,6 @@ tests += [
+ if cxx_cmd != ''
+@@ -1122,11 +1127,6 @@ tests += [
           [libshared,
            libsystemd_network],
           []],
diff --git a/board/czechlight/common/patches/uboot-tools/0001-fw_-env-do-not-rely-on-var-lock.patch b/board/czechlight/common/patches/uboot-tools/0001-fw_-env-do-not-rely-on-var-lock.patch
new file mode 100644
index 0000000..b9bddab
--- /dev/null
+++ b/board/czechlight/common/patches/uboot-tools/0001-fw_-env-do-not-rely-on-var-lock.patch
@@ -0,0 +1,61 @@
+From e09ad9a33840ed83b91dd3901492ecf99ab89076 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= <jan.kundrat@cesnet.cz>
+Date: Wed, 21 Oct 2020 23:06:21 +0200
+Subject: [PATCH] fw_*env: do not rely on /var/lock
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+...because these are not available under the new Buildroot.
+
+Signed-off-by: Jan Kundrát <jan.kundrat@cesnet.cz>
+---
+ tools/env/README        | 2 +-
+ tools/env/fw_env_main.c | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/tools/env/README b/tools/env/README
+index 709251383c..480a893202 100644
+--- a/tools/env/README
++++ b/tools/env/README
+@@ -59,5 +59,5 @@ this environment instance. On NAND this is used to limit the range
+ within which bad blocks are skipped, on NOR it is not used.
+ 
+ To prevent losing changes to the environment and to prevent confusing the MTD
+-drivers, a lock file at /var/lock/fw_printenv.lock is used to serialize access
++drivers, a lock file at /run/fw_printenv.lock is used to serialize access
+ to the environment.
+diff --git a/tools/env/fw_env_main.c b/tools/env/fw_env_main.c
+index 26ba6624cd..4c84b13cfc 100644
+--- a/tools/env/fw_env_main.c
++++ b/tools/env/fw_env_main.c
+@@ -72,7 +72,7 @@ void usage_printenv(void)
+ 		" -c, --config         configuration file, default:" CONFIG_FILE "\n"
+ #endif
+ 		" -n, --noheader       do not repeat variable name in output\n"
+-		" -l, --lock           lock node, default:/var/lock\n"
++		" -l, --lock           lock node, default:/run\n"
+ 		"\n");
+ }
+ 
+@@ -87,7 +87,7 @@ void usage_env_set(void)
+ #ifdef CONFIG_FILE
+ 		" -c, --config         configuration file, default:" CONFIG_FILE "\n"
+ #endif
+-		" -l, --lock           lock node, default:/var/lock\n"
++		" -l, --lock           lock node, default:/run\n"
+ 		" -s, --script         batch mode to minimize writes\n"
+ 		"\n"
+ 		"Examples:\n"
+@@ -205,7 +205,7 @@ int parse_setenv_args(int argc, char *argv[])
+ 
+ int main(int argc, char *argv[])
+ {
+-	char *lockname = "/var/lock/" CMD_PRINTENV ".lock";
++	char *lockname = "/run/" CMD_PRINTENV ".lock";
+ 	int lockfd = -1;
+ 	int retval = EXIT_SUCCESS;
+ 	char *_cmdname;
+-- 
+2.28.0
+
diff --git a/configs/czechlight_clearfog_defconfig b/configs/czechlight_clearfog_defconfig
index 1c75875..922287e 100644
--- a/configs/czechlight_clearfog_defconfig
+++ b/configs/czechlight_clearfog_defconfig
@@ -10,6 +10,7 @@
 BR2_PER_PACKAGE_DIRECTORIES=y
 BR2_SSP_STRONG=y
 BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
 BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY=y
 BR2_TARGET_OPTIMIZATION="-Wno-psabi"
 BR2_TARGET_GENERIC_HOSTNAME="czechlight"
@@ -43,24 +44,21 @@
 BR2_PACKAGE_PICOCOM=y
 BR2_PACKAGE_PMBUS_PEEK=y
 BR2_PACKAGE_SPI_TOOLS=y
-BR2_PACKAGE_UBOOT_TOOLS=y
 BR2_PACKAGE_CA_CERTIFICATES=y
-BR2_PACKAGE_LIBSSH=y
-BR2_PACKAGE_LIBSSH_SERVER=y
 BR2_PACKAGE_LIBGPIOD_TOOLS=y
 BR2_PACKAGE_MSTPD=y
+BR2_PACKAGE_NETOPEER2_CLI=y
 BR2_PACKAGE_NGHTTP2_CXX=y
 BR2_PACKAGE_ETHTOOL=y
 BR2_PACKAGE_IPROUTE2=y
 BR2_PACKAGE_NETCONF_CLI=y
-BR2_PACKAGE_NETOPEER2_CLI=y
+BR2_PACKAGE_OPENSSH=y
 BR2_PACKAGE_TCPDUMP=y
 BR2_PACKAGE_BASH=y
 BR2_PACKAGE_INOTIFY_TOOLS=y
 BR2_PACKAGE_DDRESCUE=y
 BR2_PACKAGE_RAUC=y
 BR2_PACKAGE_RAUC_NETWORK=y
-BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY=y
 BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y
 # BR2_PACKAGE_SYSTEMD_HWDB is not set
 BR2_PACKAGE_SYSTEMD_RANDOMSEED=y
@@ -87,11 +85,11 @@
 # BR2_TARGET_UBOOT_FORMAT_BIN is not set
 BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
 BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-spl.kwb"
-BR2_TARGET_UBOOT_BOOT_SCRIPT=y
-BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/boot.scr.txt"
 BR2_PACKAGE_HOST_DOSFSTOOLS=y
 BR2_PACKAGE_HOST_GENIMAGE=y
 BR2_PACKAGE_HOST_MTOOLS=y
+BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y
+BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/boot.scr.txt"
 CZECHLIGHT_CFG_FS_SIZE="256M"
 CZECHLIGHT_CFG_FS_PERSIST_SYSREPO=y
 CZECHLIGHT_CFG_FS_PERSIST_KEYS=y
@@ -103,6 +101,6 @@
 CZECHLIGHT_RAUC_SLOT_B_ROOTFS_DEV="/dev/mmcblk0p3"
 CZECHLIGHT_RAUC_SLOT_B_CFG_DEV="/dev/mmcblk0p4"
 BR2_PACKAGE_GAMMARUS=y
-BR2_PACKAGE_VELIA=y
 BR2_PACKAGE_LLDP_SYSTEMD_NETWORKD_SYSREPO=y
+BR2_PACKAGE_VELIA=y
 CZECHLIGHT_NETCONF=y
diff --git a/dev-setup-git.sh b/dev-setup-git.sh
index 1f9aedc..6a98dca 100755
--- a/dev-setup-git.sh
+++ b/dev-setup-git.sh
@@ -9,20 +9,19 @@
 CZECHLIGHT_BR2_EXT_LOC="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 cat > local.mk <<EOF
 DOCOPT_CPP_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/docopt.cpp
-SPDLOG_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/spdlog
 REPLXX_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/replxx
 CPPCODEC_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/cppcodec
+SDBUS_CPP_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/sdbus-cpp
+
 LIBYANG_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/libyang
 SYSREPO_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/sysrepo
+HOST_SYSREPO_POST_RSYNC_HOOKS += HOST_SYSREPO_PATCH_USE_FAKE_DEV_SHM
 LIBNETCONF2_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/libnetconf2
-NETOPEER2_KEYSTORED_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/Netopeer2
-NETOPEER2_SERVER_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/Netopeer2
-NETOPEER2_CLI_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/Netopeer2
+NETOPEER2_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/Netopeer2
+
 CLA_SYSREPO_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo
 NETCONF_CLI_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/netconf-cli
 GAMMARUS_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/gammarus
-PYBIND11_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/pybind11
-SDBUS_CPP_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/cla-sysrepo/submodules/dependencies/sdbus-cpp
 VELIA_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/velia
 LLDP_SYSTEMD_NETWORKD_SYSREPO_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/lldp-systemd-networkd-sysrepo
 
diff --git a/doc/architecture.md b/doc/architecture.md
index 369f9d8..14817c1 100644
--- a/doc/architecture.md
+++ b/doc/architecture.md
@@ -50,7 +50,7 @@
 
 - An [init shell script](../package/czechlight-cfg-fs/init-czechlight.sh) sets up `overlayfs` so that rootfs' `/etc` is writable, but all changes are discarded on reboot.
 
-- Some parts of `/etc` are persistent ([sysrepo configuration in the `startup` datastore](../package/czechlight-cfg-fs/sysrepo-persistent-cfg.service), [SSH keys for NETCONF](../package/czechlight-cfg-fs/netopeer2-keystored-persistent-keys.service), [SSH keys for local shell](../package/czechlight-cfg-fs/openssh-persistent-keys.service)).
+- Some parts of `/etc` are persistent ([sysrepo configuration in the `startup` datastore](../package/czechlight-cfg-fs/sysrepo-persistent-cfg.service), [SSH keys for local shell](../package/czechlight-cfg-fs/openssh-persistent-keys.service)).
 These are copied from `/cfg`, our R/W configuration partition, into their "final" destination.
 
 - Bootup is controlled via systemd and its targets; it's a pretty stock configuration.
@@ -59,7 +59,7 @@
 
 - Some LEDs are [set up from userspace](../package/czechlight-clearfog-leds/)
 
-- The most important services are `sysrepod`, `sysrepo-plugind`, `netopper2-server` which together provide a NETCONF server with a YANG data store, and `cla-sysrepod` which contains code that talks to the optical modules.
+- The most important services are `sysrepo-plugind`, `netopeer2` which together provide a NETCONF server with a YANG data store, and `cla-sysrepod` which contains code that talks to the optical modules.
 
 - There's also a web UI along with [a poor man's RESTCONF](../package/gammarus/) implementation that I'm ashamed of.
 But hey, once there's a RESTCONF server for sysrepo, I'll use it, I swear!
diff --git a/package/cla-sysrepo/cla-appliance.service.in b/package/cla-sysrepo/cla-appliance.service.in
index 82d01d2..8058606 100644
--- a/package/cla-sysrepo/cla-appliance.service.in
+++ b/package/cla-sysrepo/cla-appliance.service.in
@@ -1,14 +1,14 @@
 [Unit]
 Description=CzechLight __MODEL__ driver
-After=syslog.target network.target sysrepod.service
+After=syslog.target network.target czechlight-install-yang.service
 Before=rauc-mark-good.service
-Requires=sysrepod.service
-PartOf=sysrepod.service
+PartOf=netopeer2.service
+Requires=czechlight-install-yang.service
 StartLimitIntervalSec=0
 ConditionKernelCommandLine=czechlight=__MODEL__
 
 [Service]
-Type=simple
+Type=notify
 ExecStart=/usr/bin/cla-sysrepod --io-log-level=5 --properties-log-level=5 --sr-bridge-log-level=5 --sysrepo-log-level=3 --appliance=__MODEL__
 PrivateTmp=yes
 PrivateDevices=no
diff --git a/package/cla-sysrepo/cla-install-yang.service.in b/package/cla-sysrepo/cla-install-yang.service.in
deleted file mode 100644
index 34b67c8..0000000
--- a/package/cla-sysrepo/cla-install-yang.service.in
+++ /dev/null
@@ -1,16 +0,0 @@
-[Unit]
-Description=Install YANG and initial data for __MODEL__
-Requires=sysrepod.service
-ConditionKernelCommandLine=czechlight=__MODEL__
-ConditionPathExistsGlob=!/etc/sysrepo/yang/__YANG__@*.yang
-Before=sysrepod.service
-
-[Service]
-Type=oneshot
-ExecStart=/usr/bin/sysrepoctl --install --yang /usr/share/cla-sysrepo/yang/__YANG__.yang
-ExecStart=/usr/bin/sysrepoctl --module __YANG__ --feature-enable __FEATURE__
-ExecStart=/usr/bin/sysrepocfg --datastore=startup --import=/usr/share/cla-sysrepo/yang/__MODEL__.json __YANG__
-ExecStart=/bin/cp -a /etc/sysrepo /cfg/etc/
-
-[Install]
-WantedBy=multi-user.target
diff --git a/package/cla-sysrepo/cla-sysrepo.mk b/package/cla-sysrepo/cla-sysrepo.mk
index f5e9239..cf3366c 100644
--- a/package/cla-sysrepo/cla-sysrepo.mk
+++ b/package/cla-sysrepo/cla-sysrepo.mk
@@ -6,47 +6,27 @@
 CLA_SYSREPO_CONF_OPTS = -DTHREADS_PTHREAD_ARG:STRING=-pthread
 CLA_SYSREPO_LICENSE_FILES = LICENSE.md
 
-define CLA_SYSREPO_ONE_MODEL_INSTALL_1
+define CLA_SYSREPO_PREPARE_SERVICE
 	sed \
 		-e "s/__MODEL__/$1/g" \
-		-e "s/__YANG__/$2/g" \
-		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/cla-sysrepo/cla-install-yang.service.in \
-		> $(TARGET_DIR)/usr/lib/systemd/system/cla-install-yang-$1.service
-endef
-
-define CLA_SYSREPO_ONE_MODEL_INSTALL_2
-	sed -i '/__FEATURE__/d' $(TARGET_DIR)/usr/lib/systemd/system/cla-install-yang-$1.service
-	sed \
-		-e "s/__MODEL__/$1/g" \
-		-e "s/__YANG__/$2/g" \
 		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/cla-sysrepo/cla-appliance.service.in \
 		> $(TARGET_DIR)/usr/lib/systemd/system/cla-$1.service
-	mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants
-	ln -sf ../cla-install-yang-$1.service \
-		$(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
 	ln -sf ../cla-$1.service \
 		$(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
 endef
 
-define CLA_SYSREPO_ONE_MODEL_W_FEATURE
-	$(call CLA_SYSREPO_ONE_MODEL_INSTALL_1,$1,$2)
-	# FIXME: multiple features...
-	sed -i 's|__FEATURE__|ExecStart=/usr/bin/sysrepoctl --module $2 --feature-enable $3\n__FEATURE__|' \
-		$(TARGET_DIR)/usr/lib/systemd/system/cla-install-yang-$1.service
-	$(call CLA_SYSREPO_ONE_MODEL_INSTALL_2,$1,$2)
-endef
-
-define CLA_SYSREPO_ONE_MODEL
-	$(call CLA_SYSREPO_ONE_MODEL_INSTALL_1,$1,$2)
-	$(call CLA_SYSREPO_ONE_MODEL_INSTALL_2,$1,$2)
-endef
-
 define CLA_SYSREPO_INSTALL_INIT_SYSTEMD
-	$(call CLA_SYSREPO_ONE_MODEL_W_FEATURE,sdn-roadm-add-drop,czechlight-roadm-device,hw-add-drop-20)
-	$(call CLA_SYSREPO_ONE_MODEL_W_FEATURE,sdn-roadm-line,czechlight-roadm-device,hw-line-9)
-	$(call CLA_SYSREPO_ONE_MODEL,sdn-roadm-coherent-a-d,czechlight-coherent-add-drop)
-	$(call CLA_SYSREPO_ONE_MODEL,sdn-inline,czechlight-inline-amp)
-	$(call CLA_SYSREPO_ONE_MODEL,calibration-box,czechlight-calibration-device)
+	$(INSTALL) -m 0755 -t $(TARGET_DIR)/usr/bin/ \
+		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/cla-sysrepo/czechlight-install-yang.sh
+	mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants
+	$(INSTALL) -D -m 0644 -t $(TARGET_DIR)/usr/lib/systemd/system/ \
+		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/cla-sysrepo/czechlight-install-yang.service
+
+	$(call CLA_SYSREPO_PREPARE_SERVICE,sdn-roadm-add-drop)
+	$(call CLA_SYSREPO_PREPARE_SERVICE,sdn-roadm-line)
+	$(call CLA_SYSREPO_PREPARE_SERVICE,sdn-roadm-coherent-a-d)
+	$(call CLA_SYSREPO_PREPARE_SERVICE,sdn-inline)
+	$(call CLA_SYSREPO_PREPARE_SERVICE,calibration-box)
 endef
 
 # FIXME: calibration-box really needs a drop-in file with increased timeout...
diff --git a/package/cla-sysrepo/czechlight-install-yang.service b/package/cla-sysrepo/czechlight-install-yang.service
new file mode 100644
index 0000000..21deb1a
--- /dev/null
+++ b/package/cla-sysrepo/czechlight-install-yang.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Install CzechLight YANG models
+After=netopeer2-setup.service cfg.mount
+Requires=netopeer2-setup.service cfg.mount
+Before=netopeer2.service
+
+[Service]
+Type=oneshot
+ExecStart=/bin/bash /usr/bin/czechlight-install-yang.sh
+
+[Install]
+WantedBy=multi-user.target
diff --git a/package/cla-sysrepo/czechlight-install-yang.sh b/package/cla-sysrepo/czechlight-install-yang.sh
new file mode 100755
index 0000000..a528a0c
--- /dev/null
+++ b/package/cla-sysrepo/czechlight-install-yang.sh
@@ -0,0 +1,85 @@
+#!/bin/bash
+
+set -ex
+
+IETF_HW_STATE=0
+YANG_ROADM=0
+YANG_COHERENT=0
+YANG_INLINE=0
+YANG_CALIBRATION=0
+
+YANG_DIR=/usr/share/cla-sysrepo/yang
+REPO=/etc/sysrepo/yang
+
+for ARG in $(cat /proc/cmdline); do
+    case "${ARG}" in
+        czechlight=*)
+            CZECHLIGHT="${ARG:11}"
+            ;;
+    esac
+done
+
+case "${CZECHLIGHT}" in
+    sdn-roadm-line)
+        YANG_ROADM=1
+        WITH_FEATURE=hw-line-9
+        IETF_HW_STATE=1
+        ;;
+    sdn-roadm-add-drop)
+        YANG_ROADM=1
+        WITH_FEATURE=hw-add-drop-20
+        IETF_HW_STATE=1
+        ;;
+    sdn-roadm-coherent-a-d)
+        IETF_HW_STATE=1
+        YANG_COHERENT=1
+        ;;
+    sdn-inline)
+        IETF_HW_STATE=1
+        YANG_INLINE=1
+        ;;
+    calibration-box)
+        YANG_CALIBRATION=1
+        ;;
+esac
+
+if [[ ${IETF_HW_STATE} == 1 && ! -f ${REPO}/ietf-hardware-state@2018-03-13.yang ]]; then
+    sysrepoctl --search-dirs ${YANG_DIR} --install ${YANG_DIR}/iana-hardware@2018-03-13.yang
+    sysrepoctl --search-dirs ${YANG_DIR} --install ${YANG_DIR}/ietf-hardware-state@2018-03-13.yang
+    sysrepoctl --change ietf-hardware-state --permissions 0664 --enable-feature hardware-sensor --apply
+fi
+
+if [[ ${YANG_ROADM} == 1 && ! -f ${REPO}/czechlight-roadm-device@2019-09-30.yang ]]; then
+    sysrepoctl --search-dirs ${YANG_DIR} --install ${YANG_DIR}/czechlight-roadm-device.yang
+    sysrepoctl --change czechlight-roadm-device --group optics --permissions 0664 --apply
+    if [[ ${WITH_FEATURE} ]]; then
+        sysrepoctl --change czechlight-roadm-device --enable-feature ${WITH_FEATURE}
+    fi
+    sysrepocfg --datastore=startup --format=json --module=czechlight-roadm-device --import="${YANG_DIR}/${CZECHLIGHT}.json"
+fi
+
+if [[ ${YANG_COHERENT} == 1 && ! -f ${REPO}/czechlight-coherent-add-drop@2019-09-30.yang ]]; then
+    sysrepoctl --search-dirs ${YANG_DIR} --install ${YANG_DIR}/czechlight-coherent-add-drop.yang
+    sysrepoctl --change czechlight-coherent-add-drop --group optics --permissions 0664 --apply
+    sysrepocfg --datastore=startup --format=json --module=czechlight-coherent-add-drop --new-data="${YANG_DIR}/${CZECHLIGHT}.json"
+fi
+
+if [[ ${YANG_INLINE} == 1 && ! -f ${REPO}/czechlight-inline-amp@2019-09-30.yang ]]; then
+    sysrepoctl --search-dirs ${YANG_DIR} --install ${YANG_DIR}/czechlight-inline-amp.yang
+    sysrepoctl --change czechlight-inline-amp --group optics --permissions 0664 --apply
+    sysrepocfg --datastore=startup --format=json --module=czechlight-inline-amp --import="${YANG_DIR}/${CZECHLIGHT}.json"
+fi
+
+if [[ ${YANG_CALIBRATION} == 1 && ! -f ${REPO}/czechlight-calibration-device@2019-06-25.yang ]]; then
+    sysrepoctl --search-dirs ${YANG_DIR} --install ${YANG_DIR}/czechlight-calibration-device.yang
+    sysrepoctl --change czechlight-calibration-device --group optics --permissions 0664 --apply
+    sysrepocfg --datastore=startup --format=json --module=czechlight-calibration-device --import="${YANG_DIR}/${CZECHLIGHT}.json"
+fi
+
+if [[ ! -f ${REPO}/czechlight-lldp@2020-08-25.yang ]]; then
+    sysrepoctl --search-dirs /usr/share/lldp-systemd-networkd-sysrepo/yang --install /usr/share/lldp-systemd-networkd-sysrepo/yang/czechlight-lldp.yang
+    sysrepoctl --change czechlight-lldp --permissions 0664 --apply
+fi
+
+mkdir -p /cfg/etc/sysrepo/
+cp -a /etc/sysrepo/data /etc/sysrepo/yang /cfg/etc/sysrepo/
diff --git a/package/czechlight-cfg-fs/Config.in b/package/czechlight-cfg-fs/Config.in
index 81fe19f..0a3dfa6 100644
--- a/package/czechlight-cfg-fs/Config.in
+++ b/package/czechlight-cfg-fs/Config.in
@@ -27,14 +27,14 @@
 
 endif # BR2_PACKAGE_SYSREPO
 
-if BR2_PACKAGE_NETOPEER2_KEYSTORED
+if BR2_PACKAGE_NETOPEER2
 
 config CZECHLIGHT_CFG_FS_PERSIST_KEYS
 	bool "Persist host keys for OpenSSH and Netopeer2"
 	default Y
 	help
-	  Save OpenSSH's key material and netopeer2-keystored's SSH keys into /cfg
+	  Save OpenSSH's key material and netopeer2's SSH keys into /cfg
 
-endif # BR2_PACKAGE_NETOPEER2_KEYSTORED
+endif # BR2_PACKAGE_NETOPEER2
 
 endif # BR2_PACKAGE_CZECHLIGHT_CFG_FS
diff --git a/package/czechlight-cfg-fs/czechlight-cfg-fs.mk b/package/czechlight-cfg-fs/czechlight-cfg-fs.mk
index 888dc34..c9d1c57 100644
--- a/package/czechlight-cfg-fs/czechlight-cfg-fs.mk
+++ b/package/czechlight-cfg-fs/czechlight-cfg-fs.mk
@@ -35,10 +35,6 @@
 			$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-cfg-fs/openssh-persistent-keys.service \
 			$(TARGET_DIR)/usr/lib/systemd/system/
 		ln -sf ../openssh-persistent-keys.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
-		$(INSTALL) -D -m 0644 \
-			$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-cfg-fs/netopeer2-keystored-persistent-keys.service \
-			$(TARGET_DIR)/usr/lib/systemd/system/
-		ln -sf ../netopeer2-keystored-persistent-keys.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
 	$(endif)
 endef
 
diff --git a/package/czechlight-cfg-fs/netopeer2-keystored-persistent-keys.service b/package/czechlight-cfg-fs/netopeer2-keystored-persistent-keys.service
deleted file mode 100644
index 773f293..0000000
--- a/package/czechlight-cfg-fs/netopeer2-keystored-persistent-keys.service
+++ /dev/null
@@ -1,13 +0,0 @@
-[Unit]
-Description=Store NETCONF SSH host keys into /cfg
-After=cfg.mount netopeer2-keystored-init-keys.service
-Requires=cfg.mount netopeer2-keystored-init-keys.service
-ConditionPathExists=!/cfg/etc/keystored/keys
-
-[Service]
-Type=oneshot
-ExecStartPre=/bin/mkdir -p /cfg/etc
-ExecStart=/bin/cp -a /etc/keystored /cfg/etc/
-
-[Install]
-WantedBy=multi-user.target
diff --git a/package/czechlight-cfg-fs/sysrepo-persistent-cfg.service b/package/czechlight-cfg-fs/sysrepo-persistent-cfg.service
index e965fdf..598d792 100644
--- a/package/czechlight-cfg-fs/sysrepo-persistent-cfg.service
+++ b/package/czechlight-cfg-fs/sysrepo-persistent-cfg.service
@@ -1,8 +1,8 @@
 [Unit]
 Description=Persisting persistent sysrepo datastores to /cfg
-After=sysrepod.service cfg.mount
-Requires=cfg.mount
+After=netopeer2.service cfg.mount
+Requires=netopeer2.service cfg.mount
 
 [Service]
 Type=simple
-ExecStart=/bin/sh -c 'while true; do inotifywait -e CLOSE_WRITE /etc/sysrepo/data/*.startup /etc/sysrepo/data/*.persist && mkdir -p /cfg/etc/sysrepo/data/ && cp -a /etc/sysrepo/data/*.startup /etc/sysrepo/data/*.persist /cfg/etc/sysrepo/data/; done'
+ExecStart=/bin/sh -c 'while true; do inotifywait -e CLOSE_WRITE /etc/sysrepo/data/*.startup && mkdir -p /cfg/etc/sysrepo/data/ && cp -a /etc/sysrepo/data/*.startup /cfg/etc/sysrepo/data/; done'
diff --git a/package/czechlight-rauc/rauc-hook.sh b/package/czechlight-rauc/rauc-hook.sh
index 64a536a..55d82b9 100755
--- a/package/czechlight-rauc/rauc-hook.sh
+++ b/package/czechlight-rauc/rauc-hook.sh
@@ -28,4 +28,12 @@
     ;;
 esac
 
+if [[ -f /lib/libsysrepo.so.0.7 ]]; then
+  # Updating from old sysrepo with incompatible repository layout
+  rm -rf ${RAUC_SLOT_MOUNT_POINT}/etc/sysrepo
+  # No more netopeer2-keystored, different config
+  rm -rf ${RAUC_SLOT_MOUNT_POINT}/etc/keystored
+  echo "sysrepo configuration not preserved"
+fi
+
 exit 0
diff --git a/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo-install-yang.service b/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo-install-yang.service
deleted file mode 100644
index 003f7e2..0000000
--- a/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo-install-yang.service
+++ /dev/null
@@ -1,14 +0,0 @@
-[Unit]
-Description=Install YANG and initial data for lldp-systemd-networkd-sysrepo
-Requires=sysrepod.service
-Before=sysrepod.service
-
-[Service]
-Type=oneshot
-ExecStart=/usr/bin/sysrepoctl --install --yang /usr/share/lldp-systemd-networkd-sysrepo/yang/czechlight-lldp.yang
-ExecStart=/usr/bin/sysrepoctl --install --yang /usr/share/lldp-systemd-networkd-sysrepo/yang/iana-afn-safi@2013-07-04.yang
-ExecStart=/usr/bin/sysrepoctl --install --yang /usr/share/lldp-systemd-networkd-sysrepo/yang/ietf-inet-types@2013-07-15.yang
-ExecStart=/bin/cp -a /etc/sysrepo /cfg/etc/
-
-[Install]
-WantedBy=multi-user.target
diff --git a/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo.mk b/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo.mk
index 84f6252..f6a17cb 100644
--- a/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo.mk
+++ b/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo.mk
@@ -8,13 +8,9 @@
 LLDP_SYSTEMD_NETWORKD_SYSREPO_LICENSE_FILES = LICENSE.md
 
 define LLDP_SYSTEMD_NETWORKD_SYSREPO_INSTALL_INIT_SYSTEMD
-        mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
-        $(INSTALL) -D -m 0644 \
-                $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo.service \
-                $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo-install-yang.service \
-                $(TARGET_DIR)/usr/lib/systemd/system/
+        $(INSTALL) -D -m 0644 -t $(TARGET_DIR)/usr/lib/systemd/system/ \
+                $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo.service
         ln -sf ../lldp-systemd-networkd-sysrepo.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
-        ln -sf ../lldp-systemd-networkd-sysrepo-install-yang.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
 endef
 
 $(eval $(cmake-package))
diff --git a/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo.service b/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo.service
index 94c7f62..aec9176 100644
--- a/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo.service
+++ b/package/lldp-systemd-networkd-sysrepo/lldp-systemd-networkd-sysrepo.service
@@ -1,7 +1,8 @@
 [Unit]
 Description=lldp-systemd-networkd-sysrepo is a sysrepo application announcing LLDP neighbours from systemd-networkd.
-After=syslog.target network.target sysrepod.service
-Requires=sysrepod.service
+After=syslog.target network.target czechlight-install-yang.service
+Requires=czechlight-install-yang.service
+PartOf=netopeer2.service
 
 [Service]
 Type=simple
diff --git a/submodules/buildroot b/submodules/buildroot
index 6dd98e9..0b9f0c0 160000
--- a/submodules/buildroot
+++ b/submodules/buildroot
@@ -1 +1 @@
-Subproject commit 6dd98e9fc0fcbe0a3dd2a44a19d1e052393195ad
+Subproject commit 0b9f0c0225d7059e23eff45c7a1d3123e92af061
diff --git a/submodules/cla-sysrepo b/submodules/cla-sysrepo
index db9cd27..967df71 160000
--- a/submodules/cla-sysrepo
+++ b/submodules/cla-sysrepo
@@ -1 +1 @@
-Subproject commit db9cd2761ec0c16dab01828993229c51c113d878
+Subproject commit 967df712c39d1b4065a69da41c5682d4090aaa64
diff --git a/submodules/gammarus b/submodules/gammarus
index 054bb5e..8344e28 160000
--- a/submodules/gammarus
+++ b/submodules/gammarus
@@ -1 +1 @@
-Subproject commit 054bb5eb03fb5ac750eb6290f740c0fb8cdecffb
+Subproject commit 8344e288344e5b4ad67e497157bb6375b1ee0456
diff --git a/submodules/lldp-systemd-networkd-sysrepo b/submodules/lldp-systemd-networkd-sysrepo
index 3b669e6..ea3e5f1 160000
--- a/submodules/lldp-systemd-networkd-sysrepo
+++ b/submodules/lldp-systemd-networkd-sysrepo
@@ -1 +1 @@
-Subproject commit 3b669e6108501de411039b4972f8a6a34b882e6d
+Subproject commit ea3e5f1fb2f05cf9c5a890c3ba3f99d35643e806
diff --git a/submodules/netconf-cli b/submodules/netconf-cli
index 1701d73..43e12e7 160000
--- a/submodules/netconf-cli
+++ b/submodules/netconf-cli
@@ -1 +1 @@
-Subproject commit 1701d731e29d9fa57163177f5877a0d56958d201
+Subproject commit 43e12e73d7c4231774b1f9ec08981aa0f3d7a65c
diff --git a/submodules/velia b/submodules/velia
index e8239a7..6efb8ca 160000
--- a/submodules/velia
+++ b/submodules/velia
@@ -1 +1 @@
-Subproject commit e8239a7822832db56d2a8c4295a1b5cdff516469
+Subproject commit 6efb8ca9ae45205a4a0f71855a64e45a47b0bfe4