From fc1274311978ee4f4913d0fb145ee276e3750b9e Mon Sep 17 00:00:00 2001 From: Martin/Geno Date: Sun, 1 Jul 2018 17:00:32 +0200 Subject: [PATCH 1/3] add respondd-module-lldp --- net/respondd-module-lldp/Makefile | 21 ++++++++++ net/respondd-module-lldp/README.md | 14 +++++++ net/respondd-module-lldp/src/Makefile | 6 +++ net/respondd-module-lldp/src/respondd.c | 51 +++++++++++++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 net/respondd-module-lldp/Makefile create mode 100644 net/respondd-module-lldp/README.md create mode 100644 net/respondd-module-lldp/src/Makefile create mode 100644 net/respondd-module-lldp/src/respondd.c diff --git a/net/respondd-module-lldp/Makefile b/net/respondd-module-lldp/Makefile new file mode 100644 index 0000000..272f245 --- /dev/null +++ b/net/respondd-module-lldp/Makefile @@ -0,0 +1,21 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=respondd-module-lldp +PKG_VERSION:=1 +PKG_RELEASE:=1 + +include $(INCLUDE_DIR)/package.mk + +define Package/respondd-module-lldp + SECTION:=gluon + CATEGORY:=Gluon + TITLE:=adds lldp usage neighbours provider to respondd + DEPENDS:=+respondd +lldpd +endef + +define Package/respondd-module-lldp/install + $(INSTALL_DIR) $(1)/usr/lib/respondd + $(CP) $(PKG_BUILD_DIR)/respondd.so $(1)/usr/lib/respondd/lldp.so +endef + +$(eval $(call BuildPackage,respondd-module-lldp)) diff --git a/net/respondd-module-lldp/README.md b/net/respondd-module-lldp/README.md new file mode 100644 index 0000000..0181011 --- /dev/null +++ b/net/respondd-module-lldp/README.md @@ -0,0 +1,14 @@ +This module adds a respondd lldp usage neighbours provider. +The format is the following: + +```json +{ + "neighbours": { + "lldp": { + "01:00:00:00:00:01": { + "02:00:00:00:00:01" : {"name":"a","descr":"b"} + } + } + } +} +``` diff --git a/net/respondd-module-lldp/src/Makefile b/net/respondd-module-lldp/src/Makefile new file mode 100644 index 0000000..a1d416a --- /dev/null +++ b/net/respondd-module-lldp/src/Makefile @@ -0,0 +1,6 @@ +all: respondd.so + +CFLAGS += -Wall + +respondd.so: respondd.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -std=c11 -shared -fPIC -D_GNU_SOURCE -o $@ $^ $(LDLIBS) -llldpctl diff --git a/net/respondd-module-lldp/src/respondd.c b/net/respondd-module-lldp/src/respondd.c new file mode 100644 index 0000000..dc941c8 --- /dev/null +++ b/net/respondd-module-lldp/src/respondd.c @@ -0,0 +1,51 @@ +#include +#include +#include +#include + +static struct json_object * respondd_provider_neighbours(void) { + lldpctl_conn_t *conn; + lldpctl_atom_t *ifaces, *iface, *port, *neighbors, *neighbor; + const char *ctlname, *neighmac, *portmac; + struct json_object *ret, *ret_lldp, *neighbors_obj; + + ret_lldp = json_object_new_object(); + + ctlname = lldpctl_get_default_transport(); + conn = lldpctl_new_name(ctlname, NULL, NULL, NULL); + ifaces = lldpctl_get_interfaces(conn); + lldpctl_atom_foreach(ifaces, iface) { + port = lldpctl_get_port(iface); + // check if Port ID Subtype is MAC address + if (lldpctl_atom_get_int(port, lldpctl_k_port_id_subtype) != LLDP_PORTID_SUBTYPE_LLADDR) + continue; + + portmac = lldpctl_atom_get_str(port, lldpctl_k_port_id); + if (!portmac) + continue; + + neighbors_obj = json_object_new_object(); + neighbors = lldpctl_atom_get(port, lldpctl_k_port_neighbors); + lldpctl_atom_foreach(neighbors, neighbor) { + // check if Chassis ID Subtype is MAC address + if (lldpctl_atom_get_int(neighbor, lldpctl_k_chassis_id_subtype) != LLDP_CHASSISID_SUBTYPE_LLADDR) + continue; + + neighmac = lldpctl_atom_get_str(neighbor, lldpctl_k_chassis_id); + if (!neighmac) + continue; + + json_object_object_add(neighbors_obj, neighmac, json_object_new_object()); + } + json_object_object_add(ret_lldp, portmac, neighbors_obj); + } + + ret = json_object_new_object(); + json_object_object_add(ret, "lldp", ret_lldp); + return ret; +} + +const struct respondd_provider_info respondd_providers[] = { + {"neighbours", respondd_provider_neighbours}, + {} +}; From 4dcb731d26524d8c69cfdf3643babf31ba6e0a3e Mon Sep 17 00:00:00 2001 From: Martin/Geno Date: Fri, 7 Dec 2018 17:36:21 +0100 Subject: [PATCH 2/3] Done? (untested) --- net/respondd-module-lldp/README.md | 4 +--- net/respondd-module-lldp/src/respondd.c | 10 ++++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/net/respondd-module-lldp/README.md b/net/respondd-module-lldp/README.md index 0181011..2295156 100644 --- a/net/respondd-module-lldp/README.md +++ b/net/respondd-module-lldp/README.md @@ -5,9 +5,7 @@ The format is the following: { "neighbours": { "lldp": { - "01:00:00:00:00:01": { - "02:00:00:00:00:01" : {"name":"a","descr":"b"} - } + "01:00:00:00:00:01": [ "02:00:00:00:00:01" ] } } } diff --git a/net/respondd-module-lldp/src/respondd.c b/net/respondd-module-lldp/src/respondd.c index dc941c8..6a8ddf0 100644 --- a/net/respondd-module-lldp/src/respondd.c +++ b/net/respondd-module-lldp/src/respondd.c @@ -7,7 +7,7 @@ static struct json_object * respondd_provider_neighbours(void) { lldpctl_conn_t *conn; lldpctl_atom_t *ifaces, *iface, *port, *neighbors, *neighbor; const char *ctlname, *neighmac, *portmac; - struct json_object *ret, *ret_lldp, *neighbors_obj; + struct json_object *ret, *ret_lldp, *neighbors_array; ret_lldp = json_object_new_object(); @@ -24,7 +24,7 @@ static struct json_object * respondd_provider_neighbours(void) { if (!portmac) continue; - neighbors_obj = json_object_new_object(); + neighbors_array = json_object_new_array(); neighbors = lldpctl_atom_get(port, lldpctl_k_port_neighbors); lldpctl_atom_foreach(neighbors, neighbor) { // check if Chassis ID Subtype is MAC address @@ -35,10 +35,12 @@ static struct json_object * respondd_provider_neighbours(void) { if (!neighmac) continue; - json_object_object_add(neighbors_obj, neighmac, json_object_new_object()); + json_object_array_add(neighbors_array, neighmac); } - json_object_object_add(ret_lldp, portmac, neighbors_obj); + lldpctl_atom_dec_ref(neighbors); + json_object_object_add(ret_lldp, portmac, neighbors_array); } + lldpctl_release(conn); ret = json_object_new_object(); json_object_object_add(ret, "lldp", ret_lldp); From 53cc1f5882f4474fd5180c09deddb8c1079127c5 Mon Sep 17 00:00:00 2001 From: genofire Date: Sun, 21 Aug 2022 19:27:03 +0200 Subject: [PATCH 3/3] fix: parse mac as json struct - maybe --- net/respondd-module-lldp/src/respondd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/respondd-module-lldp/src/respondd.c b/net/respondd-module-lldp/src/respondd.c index 6a8ddf0..2629e6e 100644 --- a/net/respondd-module-lldp/src/respondd.c +++ b/net/respondd-module-lldp/src/respondd.c @@ -35,7 +35,7 @@ static struct json_object * respondd_provider_neighbours(void) { if (!neighmac) continue; - json_object_array_add(neighbors_array, neighmac); + json_object_array_add(neighbors_array, json_object_new_string(neighmac)); } lldpctl_atom_dec_ref(neighbors); json_object_object_add(ret_lldp, portmac, neighbors_array);