Buildroot update

* Updated buildroot
* Removed sd-lldp.patch for the old systemd, replaced with systemd's
  pull request #20333 [1]
* Added updated velia that works with the new systemd patch.
* Updated velia dependencies as we now require nlohmann/json
  (json-for-modern-cpp)
* Updated netconf-cli because we need new code that fixes build against
  boost 1.77 [2]

[1] https://github.com/systemd/systemd/pull/20333
[2] https://gerrit.cesnet.cz/c/CzechLight/netconf-cli/+/5071

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