shared-state-async
https://github.com/libremesh/lime-packages/blob/master/packages/shared-state-asyncReadme
Build with debugging enabledmake package/feeds/libremesh/shared-state-async/clean package/feeds/libremesh/shared-state-async/compile -j$(nproc) CONFIG_DEBUG=yCopy on verde e bluscp -O bin/packages/mips_24kc/libremesh/shared-state-async_*.ipk root@[fe80::ea94:f6ff:fe68:3364%usbe1]:/tmp/ scp -O bin/packages/mips_24kc/libremesh/shared-state-async_*.ipk root@[fe80::6670:2ff:fede:c51e%usbe1]:/tmp/Installopkg install --force-reinstall /tmp/shared-state-async_*.ipkRun with gdbgdbserver :9000 shared-state-asyncAttach with remote OpenWrt gdbscripts/remote-gdb [fe80::ea94:f6ff:fe68:3364%usbe0]:9000 ./build_dir/target-mips_24kc_musl/shared-state-async-*/shared-state-async scripts/remote-gdb [fe80::6670:2ff:fede:c51e%usbe0]:9000 ./build_dir/target-mips_24kc_musl/shared-state-async-*/shared-state-async break shared-state-async.cc:55 run listen run sync bat-hosts fe80::ea94:f6ff:fe68:3364%br-lan run sync bat-hosts fe80::d237:45ff:fefc:3cdd%br-lanStressing the serverwhile Builds/build-lime-shared-state-async-node-Desktop-Debug/shared-state-async sync bat-hosts fe80::ea94:f6ff:fe68:3364%usbeth0; do echo ------------------------------------------------------------------- ;done while shared-state-async sync bat-hosts fe80::ea94:f6ff:fe68:3364%br-lan; do echo ------------------------------------------------------------------- ;done=== Interesting Readings
VoCore2: Develop for OpenWrt on Qt Creator
https://vonger.cn/?p=14657=== Plugin related notes
Plugins must be registered into shared-state-async by using the config file. UCI infrastructure is preferredmSc="plugin_name" uci set shared-state.${mSc}=dataType uci set shared-state.${mSc}.name='plugin-name' uci set shared-state.${mSc}.scope='community' uci set shared-state.${mSc}.ttl='1200' uci set shared-state.${mSc}.update_interval='120' uci commit shared-state
Publishers must be located at /usr/share/shared-state/publishers
All Publishers will be called at least once using shared-state-async-publish-allSync is called automatically by shared-state-async according to "update_interval" parameter
"ttl" stands for "time to live" and will decrease until 0.
Data contents will be erased if "ttl" reaches 0.
Makefile
# Shared State
#
# Copyright (C) 2023-2024 Gioacchino Mazzurco <gio@eigenlab.org>
# Copyright (c) 2023 Javier Jorge <jjorge@inti.gob.ar>
# Copyright (c) 2023 Instituto Nacional de Tecnología Industrial
# Copyright (C) 2023-2024 Asociación Civil Altermundi <info@altermundi.net>
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the
# Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.
# See the GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>
#
# SPDX-License-Identifier: AGPL-3.0-only
include $(TOPDIR)/rules.mk
GIT_COMMIT_DATE:=$(shell git log -n 1 --pretty=%ad --date=short . )
GIT_COMMIT_TSTAMP:=$(shell git log -n 1 --pretty=%at . )
PKG_NAME:=shared-state-async
PKG_VERSION=$(GIT_COMMIT_DATE)-$(GIT_COMMIT_TSTAMP)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/libremesh/shared-state-async.git
PKG_SOURCE_VERSION:=db58e3d16e8658417956f9bb42e7e87f6aadcd4d
PKG_MAINTAINER:=Asociación Civil Altermundi <info@altermundi.net>
PKG_LICENSE:=AGPL-3.0
HOST_BUILD_PREFIX:=$(STAGING_DIR_HOST)
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk
include $(INCLUDE_DIR)/host-build.mk
define Package/$(PKG_NAME)
TITLE:=shared-state C++ async re-implementation
CATEGORY:=LibreMesh
# TODO: Statically linking libstdcpp instead of depending on it and then
# stripping unused symbols might reduce space usage, until this is the
# only package to use it
DEPENDS:=+libstdcpp
endef
define Package/$(PKG_NAME)/description
shared-state re-written in C++20 and corotuines to handle information exchange between network nodes more efficiently.
endef
# Otherwise OpenWrt's CPPFLAGS are ignored
TARGET_CFLAGS += $(TARGET_CPPFLAGS)
CMAKE_OPTIONS += -DCMAKE_VERBOSE_MAKEFILE=ON
# Disable Cpptrace as it depends on zlib and doesn't seems to work anyway on
# OpenWrt even with CONFIG_DEBUG=y it prints out
# Stack trace (most recent call first):
# #0 0x00000000
# #1 0x00000000
# #2 0x00000000
CMAKE_OPTIONS += -DSS_CPPTRACE_STACKTRACE=OFF
define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/shared-state-async $(1)/usr/bin/
$(CP) ./files/* $(1)/
# TODO: Remove this line once discovery is reimplemented in C++
$(CP) ../shared-state/files/usr/bin/shared-state-get_candidates_neigh $(1)/usr/bin/shared-state-async-discover
endef
$(eval $(call BuildPackage,$(PKG_NAME)))