From fc1274311978ee4f4913d0fb145ee276e3750b9e Mon Sep 17 00:00:00 2001 From: Martin/Geno Date: Sun, 1 Jul 2018 17:00:32 +0200 Subject: [PATCH] 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}, + {} +};