[PATCH] package: add new poe-common package

Sander Vanheule sander at svanheule.net
Thu Jan 25 05:00:33 PST 2024


Create a new package to generate configuration files for devices capable
of delivering power via PoE. The configuration file at /etc/config/poe
can be used by PoE daemons to configure the hardware in an implementation
specific way.

This is part of the core packages because it needs to be in sync with
the format of board.json, from which the config file is generated. The
config file structure is based on the current config file of the
realtek-poe package, but should be (and remain) implementation
independent. With a common basis, a common (LuCI) configuration
interface also becomes possible in the future.

For a device with a power budget of 130W and ports lan1-lan8 mapping to
PSE outputs 8-1, /etc/config/poe could look like (lan1-lan6 omitted):
	config global
		option budget '130'

	config port
		option name 'lan8'
		option id '1'
		option enable '1'

	config port
		option name 'lan7'
		option id '2'
		option enable '1'

	[...]

Signed-off-by: Sander Vanheule <sander at svanheule.net>
---
 package/network/config/poe-common/Makefile    | 37 ++++++++++++++++
 .../poe-common/files/etc/uci-defaults/30_poe  | 42 +++++++++++++++++++
 2 files changed, 79 insertions(+)
 create mode 100644 package/network/config/poe-common/Makefile
 create mode 100755 package/network/config/poe-common/files/etc/uci-defaults/30_poe

diff --git a/package/network/config/poe-common/Makefile b/package/network/config/poe-common/Makefile
new file mode 100644
index 000000000000..a7970b4b5b15
--- /dev/null
+++ b/package/network/config/poe-common/Makefile
@@ -0,0 +1,37 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=poe-common
+PGK_VERSION:=1
+PKG_RELEASE:=1
+
+PKG_MAINTAINER:=Sander Vanheule <sander at svanheule.net>
+PKG_LICENSE:=GPL-2.0-or-later
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/poe-common
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=Common base files for PoE
+  DEPENDS:=+libubox +libuci
+endef
+
+define Package/poe-common/conffiles
+/etc/config/poe
+endef
+
+define Package/poe-common/description
+ Common base files for PoE configuration and control
+endef
+
+define Package/poe-common/install
+	$(INSTALL_DIR) $(1)/etc/uci-defaults/
+	$(INSTALL_CONF) ./files/etc/uci-defaults/30_poe $(1)/etc/uci-defaults/
+endef
+
+define Build/Compile
+endef
+
+$(eval $(call BuildPackage,poe-common))
diff --git a/package/network/config/poe-common/files/etc/uci-defaults/30_poe b/package/network/config/poe-common/files/etc/uci-defaults/30_poe
new file mode 100755
index 000000000000..3a429402c59b
--- /dev/null
+++ b/package/network/config/poe-common/files/etc/uci-defaults/30_poe
@@ -0,0 +1,42 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+[ -e /etc/config/poe ] && exit 0
+
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
+
+CFG=/etc/board.json
+
+json_init
+json_load_file "${CFG}"
+
+json_is_a poe object || exit 0
+
+umask 055
+touch /etc/config/poe
+
+json_select poe
+	json_get_vars budget
+
+	uci add poe global
+	uci set poe. at global[-1].budget="$budget"
+
+	if json_is_a ports array; then
+		json_get_values ports ports
+		id='1'
+
+		for port in $ports; do
+			uci -q batch <<-EOF
+				add poe port
+				set poe. at port[-1].name='$port'
+				set poe. at port[-1].id='$id'
+				set poe. at port[-1].enable='1'
+			EOF
+			let id=id+1
+		done
+	fi
+json_select ..
+
+uci commit
+
+exit 0
-- 
2.43.0




More information about the openwrt-devel mailing list