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/7] network: Serialize LLDP neighbor to JSON format

Add functions serializing LLDP neighbors to JSON (JsonVariant).

The entry contains a chassis id, system name and port id of the remote
neighbor. Also it possibly contains an integer coding the enabled system
capabilities and port description.
---
 src/libsystemd-network/lldp-neighbor.c | 22 ++++++++++++
 src/libsystemd-network/sd-lldp-rx.c    | 46 +++++++++++++++++++++++++-
 src/systemd/sd-lldp-rx.h               |  4 +++
 3 files changed, 71 insertions(+), 1 deletion(-)

diff --git a/src/libsystemd-network/lldp-neighbor.c b/src/libsystemd-network/lldp-neighbor.c
index 6672409d75..5fb7669e09 100644
--- a/src/libsystemd-network/lldp-neighbor.c
+++ b/src/libsystemd-network/lldp-neighbor.c
@@ -5,6 +5,7 @@
 #include "ether-addr-util.h"
 #include "hexdecoct.h"
 #include "in-addr-util.h"
+#include "json.h"
 #include "lldp-neighbor.h"
 #include "memory-util.h"
 #include "missing_network.h"
@@ -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 = 0;
+        bool valid_cc;
+
+        (void) sd_lldp_neighbor_get_chassis_id_as_string(n, &chassis_id);
+        (void) sd_lldp_neighbor_get_port_id_as_string(n, &port_id);
+        (void) sd_lldp_neighbor_get_system_name(n, &system_name);
+        (void) sd_lldp_neighbor_get_port_description(n, &port_description);
+
+        valid_cc = sd_lldp_neighbor_get_enabled_capabilities(n, &cc) >= 0;
+
+        return json_build(ret, JSON_BUILD_OBJECT(
+                                JSON_BUILD_PAIR("neighbor", JSON_BUILD_OBJECT(
+                                                JSON_BUILD_PAIR("chassisId", JSON_BUILD_STRING(chassis_id)),
+                                                JSON_BUILD_PAIR("systemName", JSON_BUILD_STRING(system_name)),
+                                                JSON_BUILD_PAIR_CONDITION(valid_cc, "enabledCapabilities", JSON_BUILD_UNSIGNED(cc)),
+                                                JSON_BUILD_PAIR("portId", JSON_BUILD_STRING(port_id)),
+                                                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 0479cff5f5..ec1a0bae54 100644
--- a/src/libsystemd-network/sd-lldp-rx.c
+++ b/src/libsystemd-network/sd-lldp-rx.c
@@ -10,6 +10,7 @@
 #include "ether-addr-util.h"
 #include "event-util.h"
 #include "fd-util.h"
+#include "json.h"
 #include "lldp-neighbor.h"
 #include "lldp-network.h"
 #include "lldp-rx-internal.h"
@@ -491,7 +492,50 @@ int sd_lldp_rx_get_neighbors(sd_lldp_rx *lldp_rx, sd_lldp_neighbor ***ret) {
         return k;
 }
 
-int sd_lldp_rx_set_neighbors_max(sd_lldp_rx *lldp_rx, uint64_t m) {
+_public_ int sd_lldp_rx_get_neighbors_json(sd_lldp_rx *lldp, JsonVariant ***ret) {
+        int i, j, r, n = 0;
+        _cleanup_free_ sd_lldp_neighbor **l = NULL;
+        JsonVariant **v = NULL;
+
+        assert_return(lldp, -EINVAL);
+        assert_return(ret, -EINVAL);
+
+        r = sd_lldp_rx_get_neighbors(lldp, &l);
+        if (r < 0)
+                return r;
+
+        n = r;
+
+        v = new0(JsonVariant*, n);
+        if (!v)
+                return -ENOMEM;
+
+        for (i = 0; i < n; i++) {
+                r = sd_lldp_neighbor_build_json(l[i], v + i);
+                if (r < 0)
+                        goto clear;
+                else
+                        sd_lldp_neighbor_unref(l[i]);
+        }
+
+        *ret = v;
+
+        for (i = 0; i < n; j++)
+
+        return n;
+
+clear:
+        for (j = i; j < n; j++)
+                sd_lldp_neighbor_unref(l[j]);
+
+        for (j = 0; j < i; j++)
+                json_variant_unrefp(v + j);
+
+        free(v);
+        return r;
+}
+
+_public_ int sd_lldp_rx_set_neighbors_max(sd_lldp_rx *lldp_rx, uint64_t m) {
         assert_return(lldp_rx, -EINVAL);
         assert_return(m > 0, -EINVAL);
 
diff --git a/src/systemd/sd-lldp-rx.h b/src/systemd/sd-lldp-rx.h
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;
 typedef struct sd_lldp_rx sd_lldp_rx;
 typedef struct sd_lldp_neighbor sd_lldp_neighbor;
 
+typedef struct JsonVariant JsonVariant;
+
 __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);
 int sd_lldp_rx_set_filter_address(sd_lldp_rx *lldp_rx, const struct ether_addr *address);
 
 int sd_lldp_rx_get_neighbors(sd_lldp_rx *lldp_rx, sd_lldp_neighbor ***neighbors);
+int sd_lldp_rx_get_neighbors_json(sd_lldp_rx *lldp, JsonVariant ***neighbors);
 
 int sd_lldp_neighbor_from_raw(sd_lldp_neighbor **ret, const void *raw, size_t raw_size);
 sd_lldp_neighbor *sd_lldp_neighbor_ref(sd_lldp_neighbor *n);
 sd_lldp_neighbor *sd_lldp_neighbor_unref(sd_lldp_neighbor *n);
+int sd_lldp_neighbor_build_json(sd_lldp_neighbor *n, JsonVariant **ret);
 
 /* Access to LLDP frame metadata */
 int sd_lldp_neighbor_get_source_address(sd_lldp_neighbor *n, struct ether_addr* address);
-- 
2.41.0

