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
+