From 70065660870a96a73666c2a7d3aa7e480a6597ea Mon Sep 17 00:00:00 2001
From: Amin Ben Romdhane <amin.benromdhane@iopsys.eu>
Date: Fri, 14 Apr 2023 12:21:46 +0200
Subject: [PATCH] bbfdm: Add bbfdmd deamon

---
 {bbf => bbfdm}/Config_bbfdm.in                |  0
 {bbf => bbfdm}/Makefile                       | 34 +++++++-
 bbfdm/files/etc/config/bbfdmd                 |  6 ++
 {bbf => bbfdm}/files/etc/config/userinterface |  0
 .../files/etc/firewall.userinterface          |  0
 bbfdm/files/etc/init.d/bbfdmd                 | 82 +++++++++++++++++++
 {bbf => bbfdm}/files/etc/init.d/userinterface |  2 +-
 .../uci-defaults/93-userinterface-firewall    |  0
 .../etc/uci-defaults/94-userinterface-json    |  0
 {bbf => bbfdm}/files/lib/upgrade/keep.d/bbf   |  0
 .../files/lib/upgrade/keep.d/userinterface    |  0
 11 files changed, 119 insertions(+), 5 deletions(-)
 rename {bbf => bbfdm}/Config_bbfdm.in (100%)
 rename {bbf => bbfdm}/Makefile (85%)
 create mode 100644 bbfdm/files/etc/config/bbfdmd
 rename {bbf => bbfdm}/files/etc/config/userinterface (100%)
 rename {bbf => bbfdm}/files/etc/firewall.userinterface (100%)
 create mode 100644 bbfdm/files/etc/init.d/bbfdmd
 rename {bbf => bbfdm}/files/etc/init.d/userinterface (93%)
 rename {bbf => bbfdm}/files/etc/uci-defaults/93-userinterface-firewall (100%)
 rename {bbf => bbfdm}/files/etc/uci-defaults/94-userinterface-json (100%)
 rename {bbf => bbfdm}/files/lib/upgrade/keep.d/bbf (100%)
 rename {bbf => bbfdm}/files/lib/upgrade/keep.d/userinterface (100%)

diff --git a/bbf/Config_bbfdm.in b/bbfdm/Config_bbfdm.in
similarity index 100%
rename from bbf/Config_bbfdm.in
rename to bbfdm/Config_bbfdm.in
diff --git a/bbf/Makefile b/bbfdm/Makefile
similarity index 85%
rename from bbf/Makefile
rename to bbfdm/Makefile
index faca3b1ab..46acb9324 100644
--- a/bbf/Makefile
+++ b/bbfdm/Makefile
@@ -4,16 +4,17 @@
 
 include $(TOPDIR)/rules.mk
 
-PKG_NAME:=libbbf_dm
-PKG_VERSION:=7.0.1
+PKG_NAME:=bbfdm
+PKG_VERSION:=1.0.0
 
 PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/bbf.git
-PKG_SOURCE_VERSION:=4515b6319870aaa4b415bb66a4c60a91a1fa6592
+PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/bbfdm.git
+PKG_SOURCE_VERSION:=0a4105c931f2cba8fec2ffdc813f170903ea3e90
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
 PKG_MIRROR_HASH:=skip
 
 PKG_RELEASE=$(PKG_SOURCE_VERSION)
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
 
 PKG_LICENSE:=LGPL-2.1
 PKG_LICENSE_FILES:=LICENSE
@@ -69,6 +70,15 @@ define Package/libbbf_dm-wolfssl
   VARIANT:=wolfssl
 endef
 
+define Package/bbfdmd
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=TRx69
+  TITLE:=Datamodel ubus backend
+  DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +libbbf_api +PACKAGE_libbbf_dm-mbedtls:libbbf_dm-mbedtls \
+  		   +PACKAGE_libbbf_dm-openssl:libbbf_dm-openssl +PACKAGE_libbbf_dm-wolfssl:libbbf_dm-wolfssl
+endef
+
 define Package/userinterface
   SECTION:=utils
   CATEGORY:=Utilities
@@ -150,6 +160,12 @@ ifeq ($(BUILD_VARIANT),mbedtls)
 CMAKE_OPTIONS += -DWITH_MBEDTLS=ON
 endif
 
+ifeq ($(CONFIG_PACKAGE_bbfdmd),y)
+CMAKE_OPTIONS += -DBBFDMD_ENABLED=ON
+CMAKE_OPTIONS += \
+	-DBBFDMD_MAX_MSG_LEN:Integer=10485760
+endif
+
 define Package/libbbf_api/install
 	$(INSTALL_DIR) $(1)/lib
 	$(CP) $(PKG_BUILD_DIR)/libbbf_api/libbbf_api.so $(1)/lib/
@@ -182,6 +198,15 @@ define Package/libbbf_dm/default/prerm
 	exit 0
 endef
 
+define Package/bbfdmd/install
+	$(INSTALL_DIR) $(1)/etc/init.d
+	$(INSTALL_DIR) $(1)/etc/config
+	$(INSTALL_DIR) $(1)/usr/sbin
+	$(INSTALL_BIN) ./files/etc/init.d/bbfdmd $(1)/etc/init.d/bbfdmd
+	$(INSTALL_CONF) ./files/etc/config/bbfdmd $(1)/etc/config/bbfdmd
+	$(INSTALL_BIN) $(PKG_BUILD_DIR)/bbfdmd/src/bbfdmd $(1)/usr/sbin/
+endef
+
 define Package/userinterface/install
 	$(INSTALL_DIR) $(1)/etc/config
 	$(INSTALL_DIR) $(1)/etc/uci-defaults
@@ -222,4 +247,5 @@ $(eval $(call BuildPackage,libbbf_dm-openssl))
 $(eval $(call BuildPackage,libbbf_dm-wolfssl))
 $(eval $(call BuildPackage,libbbf_dm-mbedtls))
 
+$(eval $(call BuildPackage,bbfdmd))
 $(eval $(call BuildPackage,userinterface))
diff --git a/bbfdm/files/etc/config/bbfdmd b/bbfdm/files/etc/config/bbfdmd
new file mode 100644
index 000000000..7e4421491
--- /dev/null
+++ b/bbfdm/files/etc/config/bbfdmd
@@ -0,0 +1,6 @@
+
+config globals 'globals'
+	option loglevel '1'
+	option refresh_time '10'
+	option transaction_timeout '10'
+
diff --git a/bbf/files/etc/config/userinterface b/bbfdm/files/etc/config/userinterface
similarity index 100%
rename from bbf/files/etc/config/userinterface
rename to bbfdm/files/etc/config/userinterface
diff --git a/bbf/files/etc/firewall.userinterface b/bbfdm/files/etc/firewall.userinterface
similarity index 100%
rename from bbf/files/etc/firewall.userinterface
rename to bbfdm/files/etc/firewall.userinterface
diff --git a/bbfdm/files/etc/init.d/bbfdmd b/bbfdm/files/etc/init.d/bbfdmd
new file mode 100644
index 000000000..0d6274234
--- /dev/null
+++ b/bbfdm/files/etc/init.d/bbfdmd
@@ -0,0 +1,82 @@
+#!/bin/sh /etc/rc.common
+
+START=96
+STOP=10
+
+USE_PROCD=1
+PROG=/usr/sbin/bbfdmd
+
+log() {
+	echo "${@}"|logger -t bbfdmd.init -p info
+}
+
+validate_bbfdmd_globals_section()
+{
+	uci_validate_section bbfdmd globals "globals" \
+		'enabled:bool:true' \
+		'debug:bool:false' \
+		'loglevel:uinteger' \
+		'sock:string' \
+		'transaction_timeout:string'
+}
+
+configure_bbfdmd()
+{
+	local enabled debug sock transaction_timeout
+
+	config_load bbfdmd
+
+	validate_bbfdmd_globals_section || {
+		log "Validation of bbf section failed"
+		return 1;
+	}
+
+	[ "${enabled}" -eq 0 ] && return 0
+
+	procd_set_param command ${PROG}
+	if [ "${debug}" -eq 1 ]; then
+		procd_set_param stdout 1
+		procd_set_param stderr 1
+	fi
+
+	if [ -f "${sock}" ]; then
+		procd_append_param command -s "${sock}"
+	fi
+
+	if [ -n "${transaction_timeout}" ]; then
+		procd_append_param command -t "${transaction_timeout}"
+	fi
+}
+
+apply_sysctl_configuration() {
+	local sysctl_conf
+
+	sysctl_conf="/etc/bbfdm/sysctl.conf"
+	
+	[ -f "${sysctl_conf}" ] || touch "${sysctl_conf}"
+
+	sysctl -e -p "${sysctl_conf}" >&-
+}
+
+start_service() {
+	local sysctl_reload
+
+	ubus -t 5 wait_for network.device
+	[ "$?" -eq 0 ] && sysctl_reload=1
+
+	procd_open_instance bbf
+	configure_bbfdmd
+	procd_set_param respawn
+	procd_close_instance
+
+	[ "${sysctl_reload}" -eq 1 ] && apply_sysctl_configuration
+}
+
+reload_service() {
+	apply_sysctl_configuration
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger "bbfdmd"
+}
diff --git a/bbf/files/etc/init.d/userinterface b/bbfdm/files/etc/init.d/userinterface
similarity index 93%
rename from bbf/files/etc/init.d/userinterface
rename to bbfdm/files/etc/init.d/userinterface
index 26bc3d5f2..90ecf202a 100644
--- a/bbf/files/etc/init.d/userinterface
+++ b/bbfdm/files/etc/init.d/userinterface
@@ -22,7 +22,7 @@ start_service() {
 	fi
 
 	# Inject firewall rules
-	procd_open_instance usp
+	procd_open_instance userinterface
 	/etc/firewall.userinterface
 	procd_close_instance
 }
diff --git a/bbf/files/etc/uci-defaults/93-userinterface-firewall b/bbfdm/files/etc/uci-defaults/93-userinterface-firewall
similarity index 100%
rename from bbf/files/etc/uci-defaults/93-userinterface-firewall
rename to bbfdm/files/etc/uci-defaults/93-userinterface-firewall
diff --git a/bbf/files/etc/uci-defaults/94-userinterface-json b/bbfdm/files/etc/uci-defaults/94-userinterface-json
similarity index 100%
rename from bbf/files/etc/uci-defaults/94-userinterface-json
rename to bbfdm/files/etc/uci-defaults/94-userinterface-json
diff --git a/bbf/files/lib/upgrade/keep.d/bbf b/bbfdm/files/lib/upgrade/keep.d/bbf
similarity index 100%
rename from bbf/files/lib/upgrade/keep.d/bbf
rename to bbfdm/files/lib/upgrade/keep.d/bbf
diff --git a/bbf/files/lib/upgrade/keep.d/userinterface b/bbfdm/files/lib/upgrade/keep.d/userinterface
similarity index 100%
rename from bbf/files/lib/upgrade/keep.d/userinterface
rename to bbfdm/files/lib/upgrade/keep.d/userinterface
-- 
GitLab