Compare commits

...

102 Commits

Author SHA1 Message Date
Lwithwma Brahma
9f2ffbed49 R#33747 DUT reboot when configured multiple IPTV network
setting the lookup method to group_ip_src_ip_vid, to avoid reboot
while using multiple IPTV network.

Testing done:
- by configuring multiple IPTV network, as tag on WAN and untagged on LAN.
- by configuring network as untagged on both WAN and LAN.
- by sending join and leave to upstream server on both the above scenarios.

Change-Id: I806363ccde7336548d2321c2f247f709de379245
2025-11-27 11:09:53 +00:00
Jakob Olsson
ceb5a9f2e4 map-agent: 6.5.0.5 2025-11-27 12:03:22 +01:00
Vivek Kumar Dutta
cb8623a862 netmngr: 1.2.4 2025-11-27 14:28:45 +05:30
Vivek Dutta
c6672e3cf0 self-diagnostics: fix datamodel access
(cherry picked from commit ab5e3a42b9)

Co-authored-by: Vivek Kumar Dutta <vivek.dutta@iopsys.eu>
2025-11-27 14:21:59 +05:30
Amin Ben Romdhane
75d0b18f09 wifidmd: 1.4.5 2025-11-27 09:32:02 +01:00
Reidar Cederqvist
806f685d74 sulu: Update sulu to version 5.3.0 2025-11-26 16:42:55 +01:00
Jakob Olsson
e412cfa36d map-agent: 6.5.0.4
This time with the correct package hash
2025-11-26 15:30:00 +01:00
Jakob Olsson
55967685ef Revert "map-agent: 6.5.0.4"
This reverts commit 6fb90643c7.
2025-11-26 15:29:22 +01:00
Sukru Senli
3655ae9d79 mosquitto-auth-plugin: add SIGHUP support for dynamic ACL reload
Enable dynamic reloading of subnet ACL configuration via SIGHUP signal
  without disconnecting clients. Register MOSQ_EVT_RELOAD callback to
  reload ACL rules when mosquitto receives SIGHUP.
2025-11-26 10:47:27 +01:00
George Yang
d526ee41cd voicemngr-1.2.5 and dectmngr-3.7.13
Fix incorrect missed call entry generated in DECT call list
2025-11-25 16:25:33 +01:00
Vivek Kumar Dutta
c7315af615 bbfdm: 1.18.14 2025-11-25 19:29:02 +05:30
Vivek Kumar Dutta
4d414af657 netmode: 1.1.10
(cherry picked from commit e97d29ed6b)
2025-11-25 18:42:48 +05:30
Vivek Kumar Dutta
074e0c1cd1 dhcpmngr: 1.1.3 2025-11-25 17:44:07 +05:30
Vivek Kumar Dutta
6b81616883 netmngr: 1.2.3 2025-11-25 17:36:44 +05:30
Amin Ben Romdhane
ee3144f736 bbfdm: update critical_services to use new dmmap DHCPv4/DHCPv6 paths 2025-11-25 12:36:35 +01:00
Mohd Husaam Mehdi
c96eceed2d ethmngr: add support to set MTU for Ethernet.Link. 2025-11-25 16:21:30 +05:30
Amin Ben Romdhane
dac23ee614 decollector: 6.2.3.4 2025-11-25 11:18:33 +01:00
Amin Ben Romdhane
cc312af2f3 ieee1905: 8.7.42 2025-11-25 11:17:26 +01:00
Amin Ben Romdhane
e506f6462c bbfdm: 1.18.13 2025-11-25 11:15:57 +01:00
Jakob Olsson
6fb90643c7 map-agent: 6.5.0.4 2025-11-24 16:58:09 +01:00
Markus Gothe
7e82a1c907 libqos: econet: Add 'pon' interface support. 2025-11-24 15:51:03 +01:00
Vivek Kumar Dutta
9bf94f688c netmngr: 1.2.2 2025-11-21 20:10:23 +05:30
Elena Vengerova
ebf0e949b4 libwifi: 7.22.10; map-agent: 6.5.0.3 2025-11-21 16:06:08 +04:00
Elena Vengerova
2766fef0c3 map-agent: use different prefixes for AP and STA MLD objects 2025-11-21 12:01:40 +00:00
Amin Ben Romdhane
a73cd73fe1 decollector: 6.2.3.3 2025-11-21 12:10:29 +01:00
Amin Ben Romdhane
0df826868a wifidmd: 1.4.4 2025-11-21 12:06:27 +01:00
Vivek Kumar Dutta
2ed0a4ec01 bridgemngr: fix SSID reference in lowerlayers 2025-11-21 16:30:40 +05:30
Reidar Cederqvist
944ef75d57 sulu: update to version 5.2.12 2025-11-20 18:36:52 +01:00
Vivek Dutta
b3cfbc8536 netmode: reboot to apply mode change 2025-11-20 18:36:48 +01:00
Vivek Kumar Dutta
36928bdcb9 netmode: 1.1.9 2025-11-20 20:23:26 +05:30
Vivek Kumar Dutta
b8634e5bec sysmngr: 1.1.3 2025-11-20 19:02:29 +05:30
Vivek Kumar Dutta
a0ba20647d dmcli-plugins: 2.2.6 2025-11-20 13:59:32 +05:30
Vivek Kumar Dutta
642544f579 dmcli: 1.9.4 2025-11-20 13:59:03 +05:30
Jakob Olsson
f71042d2eb map-agent: 6.5.0.2 2025-11-19 17:28:19 +01:00
Jakob Olsson
40c9c7ac7c map-controller: 6.4.4.13 2025-11-19 16:59:20 +01:00
Jakob Olsson
f9a046f0b4 map-agent: 6.5.0.1 2025-11-19 12:24:33 +01:00
Mohd Husaam Mehdi
a7ea8701b9 bridgemngr: option to copy pbit from cvlan to svlan 2025-11-19 16:10:50 +05:30
Jakob Olsson
718fde966f map-controller: 6.4.4.12 2025-11-19 10:17:54 +01:00
Vivek Kumar Dutta
e198ed73c7 parental-control: remove dhcp.leases from keep.d
(cherry picked from commit 92b0d5aed2)
2025-11-19 14:31:36 +05:30
Husaam Mehdi
5e7a131b64 parentalcontrol: remove dhcp.leases usages & add HostRef dm 2025-11-19 12:40:59 +05:30
Jakob Olsson
7816cc1e49 map-agent: 6.5.0.0 2025-11-18 17:51:49 +01:00
Reidar Cederqvist
28d70c56c8 sulu: update to version 5.2.11 2025-11-18 12:31:07 +01:00
Vivek Kumar Dutta
2c9a35eb8c logmngr: prepone to start before most of the apps 2025-11-18 12:50:04 +05:30
Vivek Kumar Dutta
0779d9f121 netmngr: align active port refreshing with cwmp sessions 2025-11-18 10:25:55 +05:30
Vivek Kumar Dutta
afa5f38654 icwmp: publish session status 2025-11-18 10:25:54 +05:30
Amin Ben Romdhane
1eeb06fd36 decollector: 6.2.3.2 2025-11-17 16:43:06 +01:00
Reidar Cederqvist
d64bf6ceea sulu: update to version 5.2.10 2025-11-14 14:11:55 +01:00
Vivek Kumar Dutta
c28f5afe45 dhcpmngr: fix setting DNSServer option 2025-11-14 18:02:04 +05:30
Vivek Dutta
1ed383bee7 sulu: Fix overriding config
(cherry picked from commit 5b5a9bb231)

Co-authored-by: Vivek Kumar Dutta <vivek.dutta@iopsys.eu>
2025-11-13 23:13:50 +05:30
Reidar Cederqvist
8236cd4093 sulu: update to version 5.2.9 2025-11-13 17:31:33 +01:00
Reidar Cederqvist
46a09d8f8d sulu: update to version 5.2.8 2025-11-13 17:31:24 +01:00
Vivek Kumar Dutta
61c7afe582 obuspa: 10.0.7.7
(cherry picked from commit d39d28e6d8)
2025-11-13 19:22:12 +05:30
Jakob Olsson
258449fc11 map-agent: 6.4.3.11 2025-11-13 14:04:58 +01:00
Amin Ben Romdhane
f5db3d3d45 decollector: 6.2.3.1 2025-11-13 12:46:22 +01:00
Jakob Olsson
a0c6545534 map-plugins: 1.2.7 2025-11-12 17:02:30 +01:00
Jakob Olsson
96d18ad234 map-controller: 6.4.4.11 2025-11-12 17:00:45 +01:00
George Yang
18c9bef5f8 libvoice-airoha: 1.1.8 and dectmngr: 3.7.12
For Airoha: fix no audio on DECT caused by Airoha 2025Q2 SDK
2025-11-12 12:49:39 +01:00
Vivek Kumar Dutta
bd3b904c15 usermngr: 1.4.7 2025-11-12 17:02:31 +05:30
Suvendhu Hansa
350ced4c32 usermngr: fix passwdqc options 2025-11-12 16:52:27 +05:30
Vivek Kumar Dutta
b4e735e731 hostmngr: 1.4.2 2025-11-12 15:52:22 +05:30
Jakob Olsson
e96e2328a7 map-agent: 6.4.3.10 2025-11-11 17:43:58 +01:00
Jakob Olsson
c8c6b5ab4b map-agent: 6.4.3.9 2025-11-11 15:21:10 +01:00
Vivek Kumar Dutta
9bd7e17835 dhcpmngr: 1.1.1 2025-11-11 19:12:06 +05:30
Vivek Kumar Dutta
fa703437e1 hostmngr: update hostname on dhcp renew 2025-11-11 18:58:00 +05:30
Vivek Kumar Dutta
cfc335aed8 sysmngr: rename restart option to reboot in upgrade 2025-11-11 18:50:35 +05:30
Vivek Kumar Dutta
1139c21f34 sysmngr: fwbank option to restart with upgrade 2025-11-11 18:37:28 +05:30
Markus Gothe
6af6728603 obuspa: Don't add empty whitespace to reqopts. 2025-11-11 13:40:32 +01:00
Vivek Kumar Dutta
5a208be259 firewallmngr: align internal port with external port range 2025-11-11 14:11:21 +05:30
Vivek Kumar Dutta
8764f317d0 dhcpmngr: align with dmmap schema 2025-11-11 12:09:45 +05:30
Vivek Kumar Dutta
c2e9144819 icwmp: DHCP re-discovery if ACS not reachable 2025-11-11 11:18:32 +05:30
Vivek Kumar Dutta
fc9f946be7 sysmngr: update fwbank cache on sysupgrade event 2025-11-11 11:04:38 +05:30
Markus Gothe
2aed4dc8f5 qosmngr: Refine fix for QoS on EN7523.
It seems like it is the rules conflicting
and not the overflow itself causing the
issue. Disable the use of custom IFC
rules on EN7523.
2025-11-11 00:48:00 +01:00
Markus Gothe
ce1b42e095 qosmngr: airoha: Fix QoS issue with EN7523+IFC.
When the LUT1 IFC table overflows it seems to
affect tagged TCP-based VLAN traffic and
ingress flows are not properly setup in HW NAT.
2025-11-10 19:25:28 +01:00
Vivek Kumar Dutta
8fee332f4c dnsmngr: Fix interface references 2025-11-10 21:49:51 +05:30
Jakob Olsson
ca78501dba map-agent: set START order 97
Map-agent init.d script sets up the appropriate UCI configurations, and must run before map-controller with start order 98
2025-11-10 15:13:20 +01:00
Amin Ben Romdhane
9280ddd093 libeasy: 7.5.1 2025-11-10 13:11:15 +01:00
Amin Ben Romdhane
15563ca117 map-plugins: 1.2.6 2025-11-10 13:09:41 +01:00
Amin Ben Romdhane
0718730d6b wifidmd: add timing-based wait logic to detect completion of wifi reload 2025-11-10 12:04:22 +00:00
Vivek Kumar Dutta
f9ad16934c sysmngr: fallback to full backup if usr_data partition missing 2025-11-10 17:21:36 +05:30
Jakob Olsson
966dbd6038 ieee1905: 8.7.41 2025-11-07 17:55:19 +01:00
Reidar Cederqvist
b1809e6993 sulu: update to version 5.2.7 2025-11-07 16:55:09 +01:00
Jakob Olsson
ad8b8b2a55 map-controller: 6.4.4.10 2025-11-07 16:15:52 +01:00
Jakob Olsson
6bf1cae138 map-agent: 6.4.3.8 2025-11-07 16:15:13 +01:00
Vivek Kumar Dutta
92c3d6d721 firewallmngr: support for RemainingLeaseTime in NAT 2025-11-07 11:30:38 +05:30
Amin Ben Romdhane
853a0c840c wifidmd: 1.4.3 2025-11-06 13:08:55 +01:00
Jakob Olsson
49bcef77aa ieee1905: 8.7.40 2025-11-06 12:37:16 +01:00
Anjan Chanda
fa8e9fc3ef decollector: 6.2.3.0 2025-11-06 12:27:22 +01:00
Anjan Chanda
e3eec0d7ab libwifi: 7.22.9 2025-11-06 11:35:03 +01:00
Sukru Senli
74339e6216 netmode: set MTU on WAN device section 2025-11-05 16:14:55 +01:00
Sukru Senli
8197f9ad93 netmode: expose MTU as supported argument for PPPoE 2025-11-05 16:14:52 +01:00
Vivek Kumar Dutta
1f96c3d295 sysmngr: 1.1.1 2025-11-05 15:47:15 +05:30
Vivek Kumar Dutta
d1d57ca528 icwmp: 9.10.8 2025-11-05 15:46:26 +05:30
Amin Ben Romdhane
10428fbda0 wifimngr: 20.1.9 2025-11-05 10:47:59 +01:00
Amin Ben Romdhane
8e5d4c53ff decollector: 6.2.2.8 2025-11-05 10:46:51 +01:00
Amin Ben Romdhane
1fb22dfe8c wifidmd: 1.4.2 2025-11-05 10:45:39 +01:00
Vivek Kumar Dutta
99fe2c2b2a icwmp: align with opconf 2025-11-04 21:27:46 +05:30
Vivek Kumar Dutta
c153911acf sysmngr: align with opconf 2025-11-04 20:16:07 +05:30
Vivek Kumar Dutta
31cd59b33c obuspa: 10.0.7.6 2025-11-03 22:00:43 +05:30
Jakob Olsson
21e6193e0a map-agent: 6.4.3.7 2025-11-03 17:00:56 +01:00
Jakob Olsson
3af94e2180 map-controller: 6.4.4.9 2025-11-03 17:00:29 +01:00
Filip Matusiak
df91d06078 map-plugins: allow for local compile 2025-11-03 12:35:17 +01:00
Vivek Kumar Dutta
ea090f50e1 icwmp: Support to install opconf 2025-11-03 11:33:42 +05:30
75 changed files with 987 additions and 455 deletions

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=bbfdm
PKG_VERSION:=1.18.12
PKG_VERSION:=1.18.14
USE_LOCAL:=0
ifneq ($(USE_LOCAL),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/bbfdm.git
PKG_SOURCE_VERSION:=adfdb54d625b952c533670f093dae008782ff56a
PKG_SOURCE_VERSION:=a0347e59b69d8e0b20d6c26b7ddb02450813545d
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -10,10 +10,8 @@
"/etc/bbfdm/dmmap/PPP",
"/etc/bbfdm/dmmap/Routing",
"/etc/config/dhcp",
"/etc/bbfdm/dmmap/dmmap_dhcp",
"/etc/bbfdm/dmmap/dmmap_dhcp_client",
"/etc/bbfdm/dmmap/dmmap_dhcp_relay",
"/etc/bbfdm/dmmap/dmmap_dhcpv6",
"/etc/bbfdm/dmmap/DHCPv4",
"/etc/bbfdm/dmmap/DHCPv6",
"/etc/config/time",
"/etc/bbfdm/dmmap/dmmap_time",
"/etc/config/mapcontroller",
@@ -36,10 +34,8 @@
"/etc/bbfdm/dmmap/PPP",
"/etc/bbfdm/dmmap/Routing",
"/etc/config/dhcp",
"/etc/bbfdm/dmmap/dmmap_dhcp",
"/etc/bbfdm/dmmap/dmmap_dhcp_client",
"/etc/bbfdm/dmmap/dmmap_dhcp_relay",
"/etc/bbfdm/dmmap/dmmap_dhcpv6",
"/etc/bbfdm/dmmap/DHCPv4",
"/etc/bbfdm/dmmap/DHCPv6",
"/etc/config/mapcontroller",
"/etc/config/wireless",
"/etc/bbfdm/dmmap/WiFi",

View File

@@ -5,6 +5,12 @@ config BRIDGEMNGR_BRIDGE_VLAN
help
Set this option to use bridge-vlan as backend for VLAN objects.
config BRIDGEMNGR_COPY_PBITS
bool "Copy pbits from cvlan to svlan"
default y
help
Set this option to copy cvlan pbits to svlan pbits by default (driver vlan).
config BRIDGEMNGR_BRIDGE_VENDOR_EXT
bool "Use bridge BBF vendor extensions"
default y

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=bridgemngr
PKG_VERSION:=1.1.4
PKG_VERSION:=1.1.6
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/network/bridgemngr.git
PKG_SOURCE_VERSION:=e5e0d9adfc919c25d88a867d42a9c500cb09f834
PKG_SOURCE_VERSION:=882f8c8cc9a97372297d192cc916c4f8ffe7c25a
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif
@@ -51,6 +51,10 @@ ifeq ($(CONFIG_BRIDGEMNGR_BRIDGE_VLAN),y)
TARGET_CFLAGS += -DBRIDGE_VLAN_BACKEND
endif
ifeq ($(CONFIG_BRIDGEMNGR_COPY_PBITS),y)
TARGET_CFLAGS+=-DBRIDGEMNGR_COPY_PBITS
endif
define Package/bridgemngr/install
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DIR) $(1)/etc/config

View File

@@ -6,12 +6,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=decollector
PKG_VERSION:=6.2.2.7
PKG_VERSION:=6.2.3.4
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=9d1399c09f55da14a8de55828ba57c0e296ce62f
PKG_SOURCE_VERSION:=aa09f90ca39101a0a33ec9c61993a944671e0724
PKG_SOURCE_URL:=https://dev.iopsys.eu/multi-ap/decollector.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip

View File

@@ -2,13 +2,13 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=dectmngr
PKG_RELEASE:=3
PKG_VERSION:=3.7.11
PKG_VERSION:=3.7.13
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/dectmngr.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=815ee44808169b8e1efa2cac44bd7d238ad33cdc
PKG_SOURCE_VERSION:=5c2720563b3ed889e9d4de6fdb9b0f6a9d584094
PKG_MIRROR_HASH:=skip
endif

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=dhcpmngr
PKG_VERSION:=1.0.6
PKG_VERSION:=1.1.3
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/network/dhcpmngr.git
PKG_SOURCE_VERSION:=986f66608959f4f589009d580b046e250d8c620d
PKG_SOURCE_VERSION:=5c10fc1228c7e62f18315df57460dd8a876964e3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

48
dmcli-plugins/Makefile Normal file
View File

@@ -0,0 +1,48 @@
#
# Copyright (c) 2023 Genexis Netherlands B.V. All rights reserved.
# This Software and its content are protected by the Dutch Copyright Act
# ('Auteurswet'). All and any copying and distribution of the software
# and its content without authorization by Genexis Netherlands B.V. is
# prohibited. The prohibition includes every form of reproduction and
# distribution.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=dmcli-plugins
PKG_LICENSE:=PROPRIETARY GENEXIS
PKG_VERSION:=2.2.6
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/gnx/dmcli-plugin-easydm.git
PKG_SOURCE_VERSION:=bc8b8527e8a41bdba73cb277a3c6c3b42b045153
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip
PKG_BUILD_PARALLEL:=1
include $(INCLUDE_DIR)/package.mk
define Package/dmcli-plugins
SECTION:=tools
CATEGORY:=Genexis
TITLE:=Easy-to-use data model on top of TR181
URL:=http://genexis.eu
DEPENDS:=+dmcli
endef
define Package/dmcli-plugins/description
EasyDM offers a user-friendly approach to configuring TR-181
simplifying the process with its intuitive interface.
endef
define Build/Compile
true
endef
define Package/dmcli-plugins/install
$(INSTALL_DIR) $(1)/usr/lib/dmcli/plugins
$(CP) $(PKG_BUILD_DIR)/src/*.js $(1)/usr/lib/dmcli/plugins/
endef
$(eval $(call BuildPackage,dmcli-plugins))

9
dmcli/Config.in Normal file
View File

@@ -0,0 +1,9 @@
if PACKAGE_dmcli
config DMCLI_REMOTE_CONNECTION
bool "Add dmcli remote controller configuration"
default n
help
This adds a usp controller configuration for dmcli remote connection from different machine/laptop/server.
endif

75
dmcli/Makefile Normal file
View File

@@ -0,0 +1,75 @@
#
# Copyright (c) 2021 Genexis Netherlands B.V. All rights reserved.
# This Software and its content are protected by the Dutch Copyright Act
# ('Auteurswet'). All and any copying and distribution of the software
# and its content without authorization by Genexis Netherlands B.V. is
# prohibited. The prohibition includes every form of reproduction and
# distribution.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=dmcli
PKG_LICENSE:=PROPRIETARY GENEXIS
PKG_VERSION:=1.9.4
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/gnx/dmcli.git
PKG_SOURCE_VERSION:=6171e208611ba4ea1abdab2b70a8fa30f55476ca
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip
PKG_BUILD_PARALLEL:=1
include $(INCLUDE_DIR)/package.mk
define Package/dmcli
SECTION:=tools
CATEGORY:=Genexis
TITLE:=DMCLI (datamodel-based CLI)
URL:=http://genexis.eu
DEPENDS:=+usp-js +DMCLI_REMOTE_CONNECTION:mosquitto-auth-plugin +shadow-utils +@BUSYBOX_CONFIG_ADDUSER
endef
define Package/dmcli/description
CLI to view and configure datamodels of CPE
endef
define Package/dmcli/conffiles
/etc/dmcli/dmcli.conf
endef
define Package/dmcli/config
source "$(SOURCE)/Config.in"
endef
define Package/dmcli/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/dmcli $(1)/usr/bin/
$(INSTALL_DIR) $(1)/usr/lib/dmcli
$(CP) $(PKG_BUILD_DIR)/common $(1)/usr/lib/dmcli/
mv $(1)/usr/lib/dmcli/common/os_qjs.js $(1)/usr/lib/dmcli/common/os.js
rm $(1)/usr/lib/dmcli/common/os_node.js
$(CP) $(PKG_BUILD_DIR)/core $(1)/usr/lib/dmcli/
$(CP) $(PKG_BUILD_DIR)/cli $(1)/usr/lib/dmcli/
$(CP) $(PKG_BUILD_DIR)/data $(1)/usr/lib/dmcli/
$(CP) $(PKG_BUILD_DIR)/plugins $(1)/usr/lib/dmcli/
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_DATA) ./files/etc/uci-defaults/36-dmcli $(1)/etc/uci-defaults/
ifeq ($(CONFIG_DMCLI_REMOTE_CONNECTION),y)
$(INSTALL_DATA) ./files/etc/uci-defaults/36-dmcli-remote $(1)/etc/uci-defaults/
else
$(INSTALL_DATA) ./files/etc/uci-defaults/36-dmcli-remote-remove $(1)/etc/uci-defaults/
endif
$(INSTALL_DIR) $(1)/etc/dmcli
$(CP) ./files/etc/dmcli/dmcli.acl $(1)/etc/dmcli/
$(CP) ./files/etc/dmcli/dmcli.conf $(1)/etc/dmcli/
$(INSTALL_DIR) $(1)/etc/users/roles/
$(INSTALL_DATA) ./files/etc/users/roles/operator.json $(1)/etc/users/roles/
endef
$(eval $(call BuildPackage,dmcli))

View File

@@ -0,0 +1,4 @@
user operator
topic read /usp/operator/controller/reply-to
topic read /usp/operator/controller
topic write /usp/operator/endpoint

View File

@@ -0,0 +1,45 @@
{
"Settings": {
"USP": {
"ActiveConnectionProfile": "local",
"ConnectionProfile": [
{
"Name": "local",
"Host": "127.0.0.1",
"Port": 9002,
"Username": "operator",
"Protocol": "ws",
"FromId": "oui:000F94:device-controller-operator",
"PublishEndpoint": "/usp/operator/endpoint",
"SubscribeEndpoint": "/usp/operator/controller"
}
],
"Session": {
"AutoStart": false
},
"Notification": {
"LogTo": "console",
"Format": "brief",
"LogFile": "usp-notification.log"
}
},
"CLI": {
"Home": "/",
"Color": "true",
"Mode": "Command",
"ShowCommandTime": false,
"SortDMTree": false
},
"Prompt": {
"Auto": true,
"Color": "default",
"SelectedBackgroundColor": "yellow",
"PageSize": "3",
"AutoPromptOnEmptyCommand": false,
"AutoPromptInstanceNumbers": false
},
"Log": {
"Level": "Error"
}
}
}

View File

@@ -0,0 +1,120 @@
#!/bin/sh
. /lib/functions.sh
. /lib/functions/iopsys-environment.sh
. /usr/share/libubox/jshn.sh
DMCLI_CONF="/etc/dmcli/dmcli.conf"
CONTROLLER_ID='oui:000F94:device-controller-operator'
DMCLI_RESP_TOPIC="/usp/operator/endpoint"
DMCLI_CTRL_TOPIC="/usp/operator/controller"
DMCLI_PORT="9002"
grep -q "^operator:" /etc/passwd || {
adduser -g 'Operator' -D -H -s /usr/bin/dmcli --home '/usr/lib/dmcli' 'operator'
hash=""
if type get_operator_password_hash > /dev/null 2>&1; then
hash=$(get_operator_password_hash)
fi
if [ -z "$hash" ]; then
hash='$6$zP4Wk/VQJOLwwofC$teuhnYFQBcA8YUZo/Q0quDMi4SsOHmfBcyvt5VNchPnzgwF1nfNNliC3yBVW22NwmwttPEWeBEBfnMTBB0rYs/'
fi
echo "operator:${hash}" | chpasswd -e
}
grep -q "^/usr/bin/dmcli$" /etc/shells || {
echo '/usr/bin/dmcli' >> /etc/shells
}
uci -q del_list sshd.@sshd[0].AllowUsers='operator'
uci -q add_list sshd.@sshd[0].AllowUsers='operator'
uci -q delete users.operator
uci -q set users.operator=user
uci -q set users.operator.enabled=1
uci -q set users.operator.shell='dmcli'
uci -q set users.operator.member_roles='operator'
if [ -f "/etc/config/mosquitto" ]; then
uci_add mosquitto listener dmcli_local
uci_set mosquitto dmcli_local enabled 1
uci_set mosquitto dmcli_local port "${DMCLI_PORT}"
uci_set mosquitto dmcli_local protocol 'websockets'
uci_set mosquitto dmcli_local acl_file '/etc/dmcli/dmcli.acl'
uci_set mosquitto dmcli_local no_remote_access '1'
uci_set mosquitto dmcli_local allow_anonymous '1'
fi
if [ -f "/etc/config/obuspa" ]; then
uci_add obuspa mqtt mqtt_operator
uci_set obuspa mqtt_operator BrokerAddress '127.0.0.1'
uci_set obuspa mqtt_operator BrokerPort '1883'
uci_set obuspa mqtt_operator TransportProtocol 'TCP/IP'
uci_add obuspa mtp mtp_operator
uci_set obuspa mtp_operator Protocol 'MQTT'
uci_set obuspa mtp_operator ResponseTopicConfigured "${DMCLI_RESP_TOPIC}"
uci_set obuspa mtp_operator mqtt 'mqtt_operator'
uci_add obuspa controller controller_operator
uci_set obuspa controller_operator EndpointID "${CONTROLLER_ID}"
uci_set obuspa controller_operator Protocol 'MQTT'
uci_set obuspa controller_operator Topic "${DMCLI_CTRL_TOPIC}"
uci_set obuspa controller_operator mqtt 'mqtt_operator'
uci_set obuspa controller_operator assigned_role_name 'operator'
fi
_get_endpoint_id() {
local id serial oui
id="$(uci -q get obuspa.localagent.EndpointID)"
if [ -n "${id}" ]; then
echo "${id}"
return 0
fi
serial="$(db -q get device.deviceinfo.SerialNumber)"
oui="$(db -q get device.deviceinfo.ManufacturerOUI)"
echo "os::${oui}-${serial//+/%2B}"
}
update_dmcli_conf() {
local endpointid confTmpFile
local port fromid publish subscribe toid
if [ -f "${DMCLI_CONF}" ]; then
endpointid="$(_get_endpoint_id)"
json_load_file "${DMCLI_CONF}" || return
json_select "Settings" || return
json_select "USP" || return
json_select "ConnectionProfile" || return
json_select "1" || return
json_get_var port "Port"
json_get_var fromid "FromId"
json_get_var publish "PublishEndpoint"
json_get_var subscribe "SubscribeEndpoint"
json_get_var toid "ToId"
json_add_int "Port" "${DMCLI_PORT}"
json_add_string "FromId" "${CONTROLLER_ID}"
json_add_string "PublishEndpoint" "${DMCLI_RESP_TOPIC}"
json_add_string "SubscribeEndpoint" "${DMCLI_CTRL_TOPIC}"
json_add_string "ToId" "${endpointid}"
json_select ..
json_select ..
json_select ..
json_select ..
if [ "${port}" != "${DMCLI_PORT}" ] || [ "${fromid}" != "${CONTROLLER_ID}" ] || \
[ "${publish}" != "${DMCLI_RESP_TOPIC}" ] || [ "${subscribe}" != "${DMCLI_CTRL_TOPIC}" ] || \
[ "${toid}" != "${endpointid}" ]; then
confTmpFile="$(mktemp -u -p "$(dirname "$DMCLI_CONF")" "$(basename "$DMCLI_CONF").XXXXXXX")"
json_pretty
json_dump > "${confTmpFile}" || return
mv -f "${confTmpFile}" "${DMCLI_CONF}" || return
fi
fi
}
update_dmcli_conf || exit

View File

@@ -0,0 +1,14 @@
#!/bin/sh
. /lib/functions.sh
if [ -f "/etc/config/mosquitto" ]; then
uci_add mosquitto listener dmcli
uci_set mosquitto dmcli enabled 1
uci_set mosquitto dmcli port '9003'
uci_set mosquitto dmcli protocol 'websockets'
uci_set mosquitto dmcli auth_plugin '/usr/lib/mosquitto_auth_plugin.so'
uci_set mosquitto dmcli acl_file '/etc/dmcli/dmcli.acl'
fi
exit 0

View File

@@ -0,0 +1,9 @@
#!/bin/sh
. /lib/functions.sh
if [ -f "/etc/config/mosquitto" ]; then
uci_remove mosquitto dmcli
fi
exit 0

View File

@@ -0,0 +1,14 @@
{
"tr181": {
"name": "operator",
"instance": 6,
"permission": [
{
"object": "Device.",
"perm": [
"PERMIT_ALL"
]
}
]
}
}

7
dmcli/src/Makefile Normal file
View File

@@ -0,0 +1,7 @@
all: dmcli
dmcli: main.c
$(CC) $(CFLAGS) -Wall -Werror -o $@ $^
clean:
rm -f dmcli

32
dmcli/src/main.c Normal file
View File

@@ -0,0 +1,32 @@
/*
* Copyright (c) 2021 Genexis Netherlands B.V. All rights reserved.
* This Software and its content are protected by the Dutch Copyright Act
* ('Auteurswet'). All and any copying and distribution of the software
* and its content without authorization by Genexis Netherlands B.V. is
* prohibited. The prohibition includes every form of reproduction and
* distribution.
*/
#include <stdio.h>
#include <string.h>
#include <unistd.h>
/* C Wrapper for operator to login to the CLI via ssh: the shell in
* the passwd file cannot be a script that requires an interpreter. */
int main(int argc, char *argv[])
{
char *cmd[3 + (argc > 1 ? argc - 1 : 0)];
cmd[0] = "/usr/bin/qjs";
cmd[1] = "/usr/lib/dmcli/cli/main.js";
cmd[2] = NULL;
if (argc > 1) {
memcpy(&cmd[2], &argv[1], (argc - 1) * sizeof(char *));
cmd[2 + argc - 1] = NULL;
}
execv(cmd[0], cmd);
fprintf(stderr, "%s: command not found\n", cmd[0]);
return 127;
}

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=dnsmngr
PKG_VERSION:=1.0.18
PKG_VERSION:=1.0.19
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/network/dnsmngr.git
PKG_SOURCE_VERSION:=80fa147e6f1f0d9c1a62a62a693ff3adaef45363
PKG_SOURCE_VERSION:=205938aa1f686d5b43460e4a17f3900ed82bd29f
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ethmngr
PKG_VERSION:=3.1.3
PKG_VERSION:=3.1.4
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/hal/ethmngr.git
PKG_SOURCE_VERSION:=7bc8297e1a74adb522f7635bab4f93a1a2620216
PKG_SOURCE_VERSION:=0283fb5cb74a7baca46c4360da680757c57c86ac
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=firewallmngr
PKG_VERSION:=1.0.10
PKG_VERSION:=1.0.12
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/network/firewallmngr.git
PKG_SOURCE_VERSION:=05ad0d6f7f21520eecd05429c14d1963de2a8463
PKG_SOURCE_VERSION:=30319c67fb4db285a2bcd272b1c10bc040eecf19
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -110,7 +110,7 @@ configure_send_op125() {
if [ "${uci}" = "network" ]; then
new_send_opt="$sendopt $opt125"
[ -n "${sendopt}" ] && new_send_opt="$sendopt $opt125" || new_send_opt="$opt125"
uci -q set network."${intf}".sendopts="$new_send_opt"
else
new_send_opt="$sendopt$opt125"
@@ -228,7 +228,7 @@ enable_dhcp_option125() {
if [ "${proto}" = "dhcp" ]; then
if [ ${req125_present} -eq 0 ]; then
newreqopts="$reqopts 125"
[ -n "${reqopts}" ] && newreqopts="$reqopts 125" || newreqopts="125"
uci -q set network."${wan}".reqopts="$newreqopts"
fi

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=hostmngr
PKG_VERSION:=1.4.0
PKG_VERSION:=1.4.2
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=230d55ae6769e1ebde02cef3f718e6c4cf1b1962
PKG_SOURCE_VERSION:=ac50f621e19f74b7af4e4b8c1e810503507cc3dd
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/hostmngr.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip

View File

@@ -8,13 +8,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=icwmp
PKG_VERSION:=9.10.5
PKG_VERSION:=9.10.10
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/icwmp.git
PKG_SOURCE_VERSION:=7f4a159f6ff49584655e57bb801218eb083fba67
PKG_SOURCE_VERSION:=63251b6c9789b1428604af0a5c1d23d32d14a8b8
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif
@@ -84,6 +84,7 @@ define Package/icwmp/install
$(INSTALL_BIN) $(PKG_BUILD_DIR)/icwmpd $(1)/usr/sbin/icwmpd
$(INSTALL_DATA) ./files/etc/config/cwmp $(1)/etc/config/cwmp
$(INSTALL_BIN) ./files/etc/init.d/icwmpd $(1)/etc/init.d/icwmpd
$(INSTALL_BIN) ./files/etc/uci-defaults/50-cwmp-align-keep-config $(1)/etc/uci-defaults/
$(INSTALL_BIN) ./files/etc/uci-defaults/85-cwmp-set-userid $(1)/etc/uci-defaults/
$(INSTALL_BIN) ./files/etc/uci-defaults/90-cwmpfirewall $(1)/etc/uci-defaults/
$(INSTALL_BIN) ./files/etc/uci-defaults/95-set-random-inform-time $(1)/etc/uci-defaults/

View File

@@ -42,7 +42,9 @@ config cpe 'cpe'
option periodic_notify_interval '10'
option incoming_rule 'Port_Only'
option active_notif_throttle '0'
option fw_upgrade_keep_settings '1'
#option KeepConfig '1'
#option KeepOpConf '1'
#option ConfigScope 'UserOnly'
option clock_sync_timeout '128'
option disable_datatype_check '0'
#list allowed_cr_ip '10.5.1.0/24'

View File

@@ -97,7 +97,9 @@ validate_cpe_section()
'periodic_notify_enable:bool' \
'enable:bool:1' \
'periodic_notify_interval:uinteger' \
'fw_upgrade_keep_settings:bool'
'KeepConfig:bool' \
'KeepOpConf:bool' \
'ConfigScope:string'
}
validate_defaults() {
@@ -168,13 +170,21 @@ start_service() {
stop_service()
{
local switch_bank
local switch_bank KeepConfig KeepOpConf ConfigScope
copy_cwmp_varstate_files_to_etc
switch_bank=$(uci -q -c /var/state/ get icwmp.cpe.switch_bank)
if [ -n "$switch_bank" ] && [ "$switch_bank" = "1" ]; then
[ -x /etc/sysmngr/fwbank ] && /etc/sysmngr/fwbank call copy_config
if [ "$switch_bank" = "1" ] && [ -x /etc/sysmngr/fwbank ]; then
KeepConfig="$(uci -q get cwmp.cpe.KeepConfig)"
KeepOpConf="$(uci -q get cwmp.cpe.KeepOpConf)"
ConfigScope="$(uci -q get cwmp.cpe.ConfigScope)"
json_init
[ -n "${KeepConfig}" ] && json_add_boolean "keep_config" "${KeepConfig}"
[ -n "${KeepOpConf}" ] && json_add_boolean "keep_opconf" "${KeepOpConf}"
[ -n "${ConfigScope}" ] && json_add_string "config_scope" "${ConfigScope}"
json_dump| /etc/sysmngr/fwbank call copy_config
fi
}

View File

@@ -0,0 +1,7 @@
#!/bin/sh
keep_settings="$(uci -q get cwmp.cpe.fw_upgrade_keep_settings)"
if [ -n "${keep_settings}" ]; then
uci -q delete cwmp.cpe.fw_upgrade_keep_settings
uci -q set cwmp.cpe.KeepConfig="${keep_settings}"
fi

View File

@@ -6,12 +6,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ieee1905
PKG_VERSION:=8.7.39
PKG_VERSION:=8.7.42
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=85fa0fe16d6a5a3452422b72186f6bbb16a13c62
PKG_SOURCE_VERSION:=2e7d1377794b8d4f8aad252265110b09b129fdc8
PKG_SOURCE_URL:=https://dev.iopsys.eu/multi-ap/ieee1905.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=libeasy
PKG_VERSION:=7.5.0
PKG_VERSION:=7.5.1
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=18f93677bb4d33ebb6249324a5043294f0eae16c
PKG_SOURCE_VERSION:=b981f7e1bd51f66041cd0c25d15af74ae1e3bc75
PKG_SOURCE_URL:=https://dev.iopsys.eu/hal/libeasy.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=libqos
PKG_VERSION:=7.2.109
PKG_VERSION:=7.2.110
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/libqos.git
PKG_SOURCE_VERSION:=4948d372c3d7e43a0ba9aee517dbb83b94bba3dc
PKG_SOURCE_VERSION:=b36f26d6d14c8fa65b4559381f6a43219d55e93a
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=libvoice-airoha
PKG_RELEASE:=1
PKG_VERSION:=1.1.7
PKG_VERSION:=1.1.8
PKG_LICENSE:=PROPRIETARY
PKG_LICENSE_FILES:=LICENSE
@@ -17,7 +17,7 @@ LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/$(PKG_NAME).git
PKG_SOURCE_VERSION:=3a30086a68a3409f0396acb01380f91daabf7a2f
PKG_SOURCE_VERSION:=9763c574ec69e2aa492db4f1296d4bcd53776fba
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -25,6 +25,5 @@ db commit
# configure the PCM for DECT/DCX81
[ -f "/proc/device-tree/aliases/dcx81-uart" ] && {
uci set dect.global.pcm_fsync='SHORT_LF'
uci set dect.global.pcm_slot_start='8'
uci set dect.global.dect_channel_start='3'
}

View File

@@ -6,12 +6,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=libwifi
PKG_VERSION:=7.22.6
PKG_VERSION:=7.22.10
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=ddeb681a9f99202b1ded6c965591bb8c1f5cb05d
PKG_SOURCE_VERSION:=4759a74db66dd0b4bfa6707683129a317ae42779
PKG_SOURCE_URL:=https://dev.iopsys.eu/hal/libwifi.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip

View File

@@ -1,6 +1,6 @@
#!/bin/sh /etc/rc.common
START=12
START=09
USE_PROCD=1

View File

@@ -6,9 +6,9 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=map-agent
PKG_VERSION:=6.4.3.6
PKG_VERSION:=6.5.0.5
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=e37b8f1a4b988b907416161e3c8fe83cd39597c3
PKG_SOURCE_VERSION:=5734cb47c704e75378eaccc823a7da9f47304c99
PKG_MAINTAINER:=Jakob Olsson <jakob.olsson@iopsys.eu>
PKG_LICENSE:=BSD-3-Clause

View File

@@ -1,6 +1,6 @@
#!/bin/sh /etc/rc.common
START=98
START=97
STOP=20
USE_PROCD=1

View File

@@ -70,7 +70,8 @@ generate_multiap_config() {
ifprefix_radio=""
if is_logan; then
uci set mapagent.agent.mld_prefix="bss"
uci set mapagent.agent.mld_ap_prefix="bss"
uci set mapagent.agent.mld_sta_prefix="sta"
ifname_sta=""
case "$band" in
2g)

View File

@@ -6,9 +6,9 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=map-controller
PKG_VERSION:=6.4.4.8
PKG_VERSION:=6.4.4.13
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=a863fc3a9d248b0be7385524e0680155ff614467
PKG_SOURCE_VERSION:=bd0fb2b63830e19038d9495517c03fdc3900cdfa
PKG_MAINTAINER:=Jakob Olsson <jakob.olsson@genexis.eu>
LOCAL_DEV=0

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=map-plugins
PKG_VERSION:=1.2.5
PKG_VERSION:=1.2.7
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=05c0aa02b60b27aa57bf80b8fb068b1ee8bfc8ac
PKG_SOURCE_VERSION:=dd873ca4e2cb321302dae1955da24d1be271b2b1
PKG_SOURCE_URL:=https://dev.iopsys.eu/multi-ap/map-plugins.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip
@@ -71,5 +71,11 @@ define Build/Compile
$(foreach p,$(plugins),$(call Build/Compile/map-plugins-$(p), $(1)))
endef
ifeq ($(LOCAL_DEV),1)
define Build/Prepare
rsync -r --exclude=.* ~/git/map-plugins/ $(PKG_BUILD_DIR)/
endef
endif
$(eval $(call BuildPackage,map-plugins))
$(eval $(foreach p,$(ppkg),$(call BuildPackage,$(p))))

View File

@@ -235,7 +235,7 @@ configure_mcpd() {
setup_mcast_mode() {
# set the mode at chip to allow both tagged and untagged multicast forwarding
bs /b/c iptv lookup_method=group_ip_src_ip
bs /b/c iptv lookup_method=group_ip_src_ip_vid
}
configure_mcast() {

View File

@@ -14,7 +14,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=mosquitto-auth-plugin
PKG_VERSION:=1.2.0
PKG_VERSION:=1.2.1
PKG_MAINTAINER:=Erik Karlsson <erik.karlsson@genexis.eu>
PKG_LICENSE:=EPL-2.0

View File

@@ -53,6 +53,7 @@ typedef struct {
user_acl_t users[MAX_USERS];
int user_count;
mosquitto_plugin_id_t *identifier;
char *config_file;
} plugin_data_t;
/* Parse CIDR notation for IPv4 or IPv6 (e.g., "192.168.1.0/24" or "2001:db8::/32") */
@@ -548,6 +549,30 @@ static int basic_auth_callback(int event, void *event_data, void *userdata)
return check_subnet_on_auth(pdata, ed);
}
static int reload_callback(int event, void *event_data, void *userdata)
{
plugin_data_t *pdata = userdata;
if (pdata == NULL)
return MOSQ_ERR_SUCCESS;
mosquitto_log_printf(MOSQ_LOG_NOTICE,
"subnet_acl: Reloading subnet ACL configuration from '%s'",
pdata->config_file ? pdata->config_file : "(none)");
/* Reload subnet ACL configuration */
if (load_subnet_acl_config(pdata, pdata->config_file) != 0) {
mosquitto_log_printf(MOSQ_LOG_ERR,
"subnet_acl: Failed to reload subnet ACL configuration, keeping old config");
return MOSQ_ERR_UNKNOWN;
}
mosquitto_log_printf(MOSQ_LOG_NOTICE,
"subnet_acl: Reload complete, now tracking %d user(s)", pdata->user_count);
return MOSQ_ERR_SUCCESS;
}
int mosquitto_plugin_version(int supported_version_count,
const int *supported_versions)
{
@@ -576,8 +601,20 @@ int mosquitto_plugin_init(mosquitto_plugin_id_t *identifier,
pdata->identifier = identifier;
/* Store config file path for reload */
if (config_file != NULL) {
pdata->config_file = strdup(config_file);
if (pdata->config_file == NULL) {
free(pdata);
return MOSQ_ERR_NOMEM;
}
} else {
pdata->config_file = NULL;
}
/* Load subnet ACL configuration */
if (load_subnet_acl_config(pdata, config_file) != 0) {
free(pdata->config_file);
free(pdata);
return MOSQ_ERR_UNKNOWN;
}
@@ -588,6 +625,20 @@ int mosquitto_plugin_init(mosquitto_plugin_id_t *identifier,
if (rc != MOSQ_ERR_SUCCESS) {
mosquitto_log_printf(MOSQ_LOG_ERR,
"subnet_acl: Failed to register authentication callback");
free(pdata->config_file);
free(pdata);
return rc;
}
/* Register reload callback to handle SIGHUP */
rc = mosquitto_callback_register(identifier, MOSQ_EVT_RELOAD,
reload_callback, NULL, pdata);
if (rc != MOSQ_ERR_SUCCESS) {
mosquitto_log_printf(MOSQ_LOG_ERR,
"subnet_acl: Failed to register reload callback");
mosquitto_callback_unregister(identifier, MOSQ_EVT_BASIC_AUTH,
basic_auth_callback, NULL);
free(pdata->config_file);
free(pdata);
return rc;
}
@@ -609,6 +660,9 @@ int mosquitto_plugin_cleanup(void *user_data,
if (pdata) {
mosquitto_callback_unregister(pdata->identifier, MOSQ_EVT_BASIC_AUTH,
basic_auth_callback, NULL);
mosquitto_callback_unregister(pdata->identifier, MOSQ_EVT_RELOAD,
reload_callback, NULL);
free(pdata->config_file);
free(pdata);
}

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=netmngr
PKG_VERSION:=1.2.0
PKG_VERSION:=1.2.4
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/network/netmngr.git
PKG_SOURCE_VERSION:=ff08a8cc5c860056a022e5376a973dee5a323595
PKG_SOURCE_VERSION:=8240c6089cdd44f268db135920800b8fc1d65ca9
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=netmode
PKG_VERSION:=1.1.8
PKG_VERSION:=1.1.10
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_LICENSE:=GPL-2.0-only

View File

@@ -1,6 +1,6 @@
#!/bin/sh /etc/rc.common
START=10
START=11
USE_PROCD=1
. /lib/functions.sh

View File

@@ -59,6 +59,8 @@ l3_network_config() {
uci -q set network.wan.device="$wandev"
uci -q set network.wan6.device="$wandev"
uci -q set network.WAN.mtu="$NETMODE_mtu"
uci -q delete network.wan.dns
if [ -n "$NETMODE_dns_servers" ]; then
dns_servers="$(echo $NETMODE_dns_servers | tr ',' ' ')"

View File

@@ -57,6 +57,8 @@ l3_network_pppoe_config() {
uci -q set network.wan.device="$wandev"
uci -q set network.wan6.device="$wandev"
uci -q set network.WAN.mtu="$NETMODE_mtu"
uci -q delete network.wan.dns
if [ -n "$NETMODE_dns_servers" ]; then
dns_servers="$(echo $NETMODE_dns_servers | tr ',' ' ')"

View File

@@ -58,6 +58,8 @@ l3_network_config() {
uci -q set network.wan.device="$wandev"
uci -q set network.wan6.device="$wandev"
uci -q set network.WAN.mtu="$NETMODE_mtu"
uci -q delete network.wan.dns
if [ -n "$NETMODE_dns_servers" ]; then
dns_servers="$(echo $NETMODE_dns_servers | tr ',' ' ')"

View File

@@ -43,6 +43,12 @@
"required": false,
"type": "integer"
},
{
"name": "mtu",
"description": "MTU",
"required": false,
"type": "integer"
},
{
"name": "dns_servers",
"description": "DNS Servers",

View File

@@ -1,21 +1,11 @@
#!/bin/sh
# This script is to cleanup dmmap and restart datamodel related services
# This script is to restart related datamodel microservices
# when wan mode changes
if [ -d "/etc/bbfdm/dmmap/" ]; then
rm -rf /etc/bbfdm/dmmap/*
fi
# If device is booting up, no need to restart services
if [ ! -f /var/run/boot_complete ]; then
return 0
fi
if [ -x "/etc/init.d/bbfdm.services" ]; then
/etc/init.d/bbfdm.services restart
fi
if [ -x "/etc/init.d/bbfdmd" ]; then
/etc/init.d/bbfdmd restart
fi
reboot &

View File

@@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=obuspa
PKG_VERSION:=10.0.7.5
PKG_VERSION:=10.0.7.7
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)

View File

@@ -715,7 +715,7 @@ start_service() {
mkdir -p /tmp/obuspa/
config_load obuspa
config_get_bool enabled global enabled 0
config_get_bool enabled global enabled 1
procd_open_instance ${CONFIGURATION}
if [ "${enabled}" -eq 1 ]; then

View File

@@ -53,13 +53,7 @@ add_mdns_advertise() {
json_dump > /etc/umdns/obuspa_mdns.json
}
config_load obuspa
config_get_bool enable_obuspa global enabled 1
if [ "${enable_obuspa}" -eq 1 ]; then
role="$(get_device_role)"
if [ "${role}" == "gateway" ]; then
add_mdns_advertise
fi
role="$(get_device_role)"
if [ "${role}" == "gateway" ]; then
add_mdns_advertise
fi

View File

@@ -19,19 +19,11 @@ get_access_role()
configure_dhcp_options() {
local enabled inerface discovery
config_load obuspa
config_get_bool enabled global enabled 1
config_get interface global interface
config_get_bool discovery global dhcp_discovery 1
if [ "${enabled}" -eq 0 ]; then
return 0
fi
if [ "${discovery}" -eq 0 ]; then
return 0
fi
if [ -z "${interface}" ]; then
role="$(get_access_role)"
@@ -66,12 +58,12 @@ configure_dhcp_options() {
if [ "${proto}" = "dhcp" ]; then
if [ ${req125_present} -eq 0 ]; then
newreqopts="$reqopts 125"
[ -n "${reqopts}" ] && newreqopts="$reqopts 125" || newreqopts="125"
uci -q set network."${interface}".reqopts="$newreqopts"
fi
if [ ${send124_present} -eq 0 ]; then
newsendopts="${sendopts} 124:00:00:0D:E9:04:03:75:73:70"
[ -n "${sendopts}" ] && newsendopts="${sendopts} 124:00:00:0D:E9:04:03:75:73:70" || newsendopts="124:00:00:0D:E9:04:03:75:73:70"
uci -q set network."${interface}".sendopts="$newsendopts"
fi
fi

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=parental-control
PKG_VERSION:=1.4.3
PKG_VERSION:=1.4.4
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/network/parental-control.git
PKG_SOURCE_VERSION:=f7ec652c763bf6ffd550bf7d51b2c125774b79af
PKG_SOURCE_VERSION:=d0eabdda9790d1df3cec30589c97214731108367
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif
@@ -83,9 +83,6 @@ define Package/parental-control/install
$(INSTALL_DATA) ./files/etc/uci-defaults/95-firewall_parentalcontrol.ucidefaults $(1)/etc/uci-defaults/
$(INSTALL_DATA) ./files/etc/uci-defaults/35-migrate_urlfilter.ucidefaults $(1)/etc/uci-defaults/
$(INSTALL_DIR) $(1)/lib/upgrade/keep.d
$(INSTALL_DATA) ./files/lib/upgrade/keep.d/parentalcontrol $(1)/lib/upgrade/keep.d/parentalcontrol
$(BBFDM_REGISTER_SERVICES) -v ${VENDOR_PREFIX} ./bbfdm_service.json $(1) parentalcontrol
$(INSTALL_DATA) ./files/etc/uci-defaults/40-parental_control_update_bundle_path $(1)/etc/uci-defaults/

View File

@@ -311,31 +311,6 @@ handle_schedule() {
generate_ip_rule "$utc_start_relative_day" "$utc_end_relative_day" "$utc_start_time" "$utc_stop_time" "$target"
}
# Function that parses input for MAC addresses or hostnames
parse_macs_or_hostnames() {
local input="$1"
local lease_file="/tmp/dhcp.leases"
[ -f "$lease_file" ] || lease_file="/etc/parentalcontrol/dhcp.leases"
[ -f "$lease_file" ] || { log "Error: No DHCP lease file found."; return 1; }
for item in $input; do
case "$item" in
??:??:??:??:??:??)
# It's a MAC address, print it as is
echo "$item"
;;
*)
# Assume it's a hostname and search for its MAC address in the leases file
mac=$(awk -v hostname="$item" '$4 == hostname {print $2}' "$lease_file")
if [ -n "$mac" ]; then
echo "$mac"
fi
;;
esac
done
}
handle_bedtime() {
local mac_addresses="$1"
local mac
@@ -370,38 +345,61 @@ handle_internet_break() {
done
}
parse_macs() {
local maclist="$1"
local m mac
for m in $maclist; do
# trim whitespace
mac="$(echo "$m" | tr -d ' \t\r\n')"
# validate format
if echo "$mac" | grep -qE '^[0-9A-Fa-f]{2}(:[0-9A-Fa-f]{2}){5}$'; then
echo "$mac"
else
log "parse_macs(): Invalid MAC in mac list: '$mac'"
fi
done
}
handle_profile() {
local profile_section="$1"
local internet_break_enable bedtime_enable hostlist
local internet_break_enable bedtime_enable hostlist maclist
config_get hostlist "$profile_section" "host"
config_get_bool internet_break_enable "$profile_section" "internet_break_enable" 0
config_get_bool bedtime_enable "$profile_section" "bedtime_enable" 0
if [ -z "$hostlist" ]; then
if [ $internet_break_enable -eq 0 ] && [ $bedtime_enable -eq 0 ]; then
return
fi
ACCESS_RULE=""
config_get hostlist "$profile_section" "host"
config_get maclist "$profile_section" "mac"
# convert hostnames to mac addresses if needed
# and replace newlines with space because it messes up the for loops in
# handle_internet_break and handle_bedtime functions
local mac_addresses="$(parse_macs_or_hostnames "${hostlist}" | tr '\n' ' ')"
# If both lists are empty, nothing to do
if [ -z "$hostlist" ] && [ -z "$maclist" ]; then
return
fi
# default value of Hosts.AccessControl.{i}.Enable is false,
# so, if not defined in uci as 1, assume 0
config_get_bool internet_break_enable "$profile_section" "internet_break_enable" 0
if [ $internet_break_enable -gt 0 ]; then
handle_internet_break "${mac_addresses}"
# handle_internet_break may have loaded schedules uci
# so, reload parentalcontrol
config_load "parentalcontrol"
fi
ACCESS_RULE=""
config_get_bool bedtime_enable "$profile_section" "bedtime_enable" 0
if [ $bedtime_enable -gt 0 ]; then
handle_bedtime "${mac_addresses}"
fi
# both uci options contain mac addresses
# one is given directly by the user
# other is resolved by the data model from Hosts.Host object
local mac_addresses="$(parse_macs "${hostlist} ${maclist}" | awk '{ if (NF && !seen[$0]++) { print $0 } }' | tr '\n' ' ')"
# default value of Hosts.AccessControl.{i}.Enable is false,
# so, if not defined in uci as 1, assume 0
if [ $internet_break_enable -gt 0 ]; then
handle_internet_break "${mac_addresses}"
# handle_internet_break may have loaded schedules uci
# so, reload parentalcontrol
config_load "parentalcontrol"
fi
if [ $bedtime_enable -gt 0 ]; then
handle_bedtime "${mac_addresses}"
fi
}
add_internet_schedule_rules() {
@@ -567,38 +565,44 @@ remove_internet_schedule_rules() {
fi
}
get_host_ip_from_mac() {
local mac="$1"
local ip=""
# Validate MAC format
if ! echo "$mac" | grep -qE '^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$'; then
log "get_host_ip_from_mac(): Invalid MAC address format '$mac'"
return 1
fi
# Try to find IP from ARP table
ip="$(cat /proc/net/arp | awk -v mac="$mac" 'tolower($4) == tolower(mac) {print $1; exit}')"
if [ -n "$ip" ]; then
URLFILTER_IPS="${URLFILTER_IPS} ${ip}"
return 0
else
log "get_host_ip_from_mac(): No IP found for MAC $mac in ARP table"
return 1
fi
}
# Global array for resolved IPs
URLFILTER_IPS=""
# Resolve hostname or MAC to IP from lease_file
get_host_ip() {
local host="$1"
local ip
local lease_file="/tmp/dhcp.leases"
[ -f "$lease_file" ] || lease_file="/etc/parentalcontrol/dhcp.leases"
[ -f "$lease_file" ] || { log "Error: get_host_ip(): No DHCP lease file found."; return 1; }
# try DHCP lease lookup
ip="$(awk -v h="$host" '
{
mac=$2; ipaddr=$3; name=$4
if (h == name || h == mac) { print ipaddr; exit }
}' "$lease_file")"
[ -n "$ip" ] && URLFILTER_IPS="$URLFILTER_IPS $ip"
}
# Process each profile section
resolve_profile_hosts() {
local section="$1"
local hostlist
local hostlist maclist h m
config_get hostlist "$section" host
[ -z "$hostlist" ] && return
config_get maclist "$section" mac
for h in $hostlist; do
get_host_ip "$h"
get_host_ip_from_mac "$h"
done
for m in $maclist; do
get_host_ip_from_mac "$m"
done
}

View File

@@ -1 +0,0 @@
/etc/parentalcontrol/dhcp.leases

View File

@@ -411,33 +411,35 @@ hw_commit_all() {
/userfs/bin/qosrule discpline Enable 0
fi
if [ -x /userfs/bin/blapi_cmd ]; then
echo 1 > /proc/ifc_send_to_ppe
for tc in $(seq 0 7); do
if [ -s "/tmp/qos/dscp_values_${tc}_4" ]; then
sort -un "/tmp/qos/dscp_values_${tc}_4" | awk 'NR==1{first=$1;last=$1;next}
$1 == last+1 {last=$1;next}
{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1");first=$1;last=first}
END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1")}'
fi
if [ -s "/tmp/qos/dscp_values_${tc}_6" ]; then
[ -s "/tmp/qos/dscp_values_${tc}_4" ] && sort -un "/tmp/qos/dscp_values_${tc}_6" | awk 'NR==1{first=$1;last=$1;next}
$1 == last+1 {last=$1;next}
{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 0");first=$1;last=first}
END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 0")}'
sort -un "/tmp/qos/dscp_values_${tc}_6" | awk 'NR==1{first=$1;last=$1;next}
$1 == last+1 {last=$1;next}
{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1");first=$1;last=first}
END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1")}'
fi
done
fi
if ! strings /proc/device-tree/compatible | grep -qFx econet,en7523; then
if [ -x /userfs/bin/blapi_cmd ]; then
echo 1 > /proc/ifc_send_to_ppe
for tc in $(seq 0 7); do
if [ -s "/tmp/qos/dscp_values_${tc}_4" ]; then
sort -un "/tmp/qos/dscp_values_${tc}_4" | awk 'NR==1{first=$1;last=$1;next}
$1 == last+1 {last=$1;next}
{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1");first=$1;last=first}
END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1")}'
fi
if [ -s "/tmp/qos/dscp_values_${tc}_6" ]; then
[ -s "/tmp/qos/dscp_values_${tc}_4" ] && sort -un "/tmp/qos/dscp_values_${tc}_6" | awk 'NR==1{first=$1;last=$1;next}
$1 == last+1 {last=$1;next}
{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 0");first=$1;last=first}
END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 0")}'
sort -un "/tmp/qos/dscp_values_${tc}_6" | awk 'NR==1{first=$1;last=$1;next}
$1 == last+1 {last=$1;next}
{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1");first=$1;last=first}
END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1")}'
fi
done
fi
if [ -x /userfs/bin/ifc ]; then
echo 1 > /proc/ifc_send_to_ppe
for pbit in $(seq 0 7); do
/userfs/bin/ifc add vip pbit $pbit
done
if [ -x /userfs/bin/ifc ]; then
echo 1 > /proc/ifc_send_to_ppe
for pbit in $(seq 0 7); do
/userfs/bin/ifc add vip pbit $pbit
done
fi
fi
hw_nat -! > /dev/null 2>&1

View File

@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=self-diagnostics
PKG_VERSION:=1.0.16
PKG_VERSION:=1.0.17
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0-only

View File

@@ -1,39 +0,0 @@
#!/bin/sh
BIN="/usr/sbin/self-diagnostics"
. /usr/share/libubox/jshn.sh
case "$1" in
list)
echo '{"list": {}, "generate" : {"modules":"String"}}'
;;
call)
case "$2" in
generate)
read -t 1 -r input
local out
json_load "${input}"
json_get_var modules modules
if [ -z "${modules}" ]; then
out="$(${BIN} -j)"
else
out="$(${BIN} -j -m "${modules}")"
fi
if [ -z "${out}" ]; then
echo '{}'
else
echo "${out}"
fi
;;
list)
out="$(${BIN} -j -l)"
if [ -z "${out}" ]; then
echo '{}'
else
echo "${out}"
fi
;;
esac
;;
esac

View File

@@ -1,11 +1,12 @@
#!/bin/sh
# shellcheck disable=SC1091
. /usr/share/libubox/jshn.sh
JSON_OUT=0
SPEC_DIR="/usr/share/self-diagnostics/spec"
SPEC_EXT_DIR="/etc/self-diagnostics/spec"
REPORT_PATH="/var/log/"
REPORT_PATH="/var/log"
REPORT_TEMP_DIR="$(mktemp -p ${REPORT_PATH} -d)"
REPORT_NAME="self-test-diagnostics"
VERBOSE=0
@@ -17,18 +18,19 @@ log()
{
log_file="${REPORT_TEMP_DIR}/execution.log"
if [ "$VERBOSE" -eq 1 ]; then
logger -p debug -t $0 "$*"
logger -p debug -t "$0" "$*"
fi
echo "[$(date +%Y:%m:%d-%H:%M:%S)] $*" >> ${log_file}
echo "[$(date +%Y:%m:%d-%H:%M:%S)] $*" >> "${log_file}"
}
err_log()
{
log_file="${REPORT_TEMP_DIR}/execution.log"
logger -p err -t $0 "$*"
echo "[$(date +%Y:%m:%d-%H:%M:%S) ERR] $*" >> ${log_file}
logger -p err -t "$0" "$*"
echo "[$(date +%Y:%m:%d-%H:%M:%S) ERR] $*" >> "${log_file}"
}
# shellcheck disable=SC3043
generate_report()
{
local filename
@@ -39,19 +41,19 @@ generate_report()
[ -f "${filename}.tar.gz" ] && rm "${filename}.tar.gz"
log "# Report generation completed #"
cd ${REPORT_TEMP_DIR} && {
cd "${REPORT_TEMP_DIR}" && {
filename="${filename}.tar"
tar -cf "${filename}" *
tar -cf "${filename}" ./*.log
}
if [ -n "$COMPOPTS" ]; then
gzip -${COMPOPTS} -f "${filename}"
gzip -"${COMPOPTS}" -f "${filename}"
filename="${filename}.gz"
fi
# Move logs if failed to generate tar
if [ ! -f "${filename}" ]; then
mv ${REPORT_TEMP_DIR}/*.log ${REPORT_PATH}/
mv "${REPORT_TEMP_DIR}"/*.log "${REPORT_PATH}"/
fi
if [ "${JSON_OUT}" -eq 1 ]; then
@@ -78,7 +80,7 @@ cleanup()
{
if [ -d "${REPORT_TEMP_DIR}" ]; then
generate_report
rm -rf ${REPORT_TEMP_DIR}
rm -rf "${REPORT_TEMP_DIR}"
fi
}
@@ -87,7 +89,7 @@ term_cleanup()
if [ -d "${REPORT_TEMP_DIR}" ]; then
err_log "Exiting due to TERM/INT signal"
generate_report
rm -rf ${REPORT_TEMP_DIR}
rm -rf "${REPORT_TEMP_DIR}"
fi
}
@@ -111,8 +113,8 @@ help()
# Alias ubus to have a smaller 5-second timeout on all subsequent calls
ubus()
{
if [ "${1}" == "call" ]; then
if command ubus list $2 >/dev/null 2>&1; then
if [ "${1}" = "call" ]; then
if command ubus list >/dev/null 2>&1; then
command ubus "$@";
fi
else
@@ -121,6 +123,7 @@ ubus()
}
# shellcheck disable=SC3043,SC3060,SC2034
config_load()
{
local temp
@@ -157,7 +160,7 @@ config_load()
temp="$(uci -q get self-diagnostics.globals.report_name)"
[ -n "${temp}" ] && \
REPORT_NAME="$(eval echo ${temp})"
REPORT_NAME="$(eval echo "${temp}")"
REPORT_NAME="${REPORT_NAME//[ \/]/_}"
@@ -170,9 +173,42 @@ config_load()
VERBOSE="${temp}"
}
# shellcheck disable=SC2129,SC3043
run_cmd()
{
local exec_timeout name cmd description
local export_path rc start_time end_time
exec_timeout="${1}"; shift
name="${1}"; shift
cmd="${1}"; shift
description="${*}"
start_time="$(date +%s)"
export_path="${REPORT_TEMP_DIR}/${name}.log"
log "Executing $cmd with timeout $exec_timeout"
echo "##########################################" >> "$export_path"
echo "# $description #">> "$export_path"
echo "# Exec [$cmd], timeout [$exec_timeout], start_time [$(date +%Y:%m:%d-%H:%M:%S)] #" >> "$export_path"
echo "##########################################" >> "$export_path"
eval timeout "${exec_timeout}" "$cmd" >> "$export_path" 2>&1
rc=$?
end_time="$(date +%s)"
echo "######## Execution done in [$((end_time - start_time)) ], return code $rc ######" >> "$export_path"
if [ "$rc" -eq 0 ]; then
log "Execution [$cmd] completed"
else
err_log "Execution [$cmd] Failed/Timeout with $rc exit code"
fi
echo >> "$export_path"
}
# shellcheck disable=SC2154,SC3060,SC3043
exec_spec()
{
local json_file exec_skip name timeout exec_timeout rc start_time end_time
local json_file exec_skip name timeout exec_timeout start_time end_time
start_time="$(date +%s)"
json_file="$1"
@@ -189,20 +225,18 @@ exec_spec()
return 1
}
name="$(basename ${json_file})"
export_path="${REPORT_TEMP_DIR}/${name//.json/.log}"
name="$(basename "${json_file}")"
exec_skip=0
if json_is_a dependency array; then
json_select "dependency"
json_get_keys ekeys
for key in $ekeys; do
if json_is_a $key object; then
json_select $key
if json_is_a "$key" object; then
json_select "$key"
json_get_var type type
if [ "$type" == "file" ]; then
if [ "$type" = "file" ]; then
json_get_var file file
if [ ! -e "$file" ]; then
err_log "${json_file} has unmet file dependency $file"
@@ -230,8 +264,8 @@ exec_spec()
json_get_keys keys
for key in $keys; do
if json_is_a $key object; then
json_select $key
if json_is_a "$key" object; then
json_select "${key}"
local cmd_skip file
cmd_skip=0
@@ -240,13 +274,13 @@ exec_spec()
json_select "dependency"
json_get_keys d_keys
for d_key in $d_keys; do
if json_is_a $d_key object; then
json_select $d_key
for d_key in ${d_keys}; do
if json_is_a "${d_key}" object; then
json_select "${d_key}"
json_get_var type type
if [ "$type" == "file" ]; then
if [ "$type" = "file" ]; then
json_get_var file file
if [ ! -e $file ]; then
if [ ! -e "${file}" ]; then
json_select ..
cmd_skip=1
continue
@@ -273,22 +307,7 @@ exec_spec()
else
exec_timeout=$TIMEOUT
fi
log "Executing $cmd with timeout $exec_timeout"
echo "##########################################" >> $export_path
echo "# $description #">> $export_path
echo "# Exec [$cmd], timeout [$exec_timeout] #" >> $export_path
echo "##########################################" >> $export_path
eval timeout ${exec_timeout} $cmd >> $export_path 2>&1
rc=$?
echo "######## Execution done return code $rc ######" >> $export_path
if [ "$rc" -eq 0 ]; then
log "Execution [$cmd] completed"
else
err_log "Execution [$cmd] Failed/Timeout with $rc exit code"
fi
echo >> $export_path
run_cmd "${exec_timeout}" "${name//.json/}" "${cmd}" "${description}"
json_select ..
fi
done
@@ -300,20 +319,21 @@ exec_spec()
log ""
}
# shellcheck disable=SC3043,SC3060
generate_module()
{
local modules="${@}"
local modules="${*}"
local file module
config_load
log "Modules [$@]"
log "Modules [$*]"
for module in $modules; do
module="${module/.json/}"
file="$(find $SPEC_DIR -type f -name ${module}.json)"
file="$(find "${SPEC_DIR}" -type f -name "${module}.json")"
[ -z "$file" ] && {
[ -d "${SPEC_EXT_DIR}" ] && \
file="$(find $SPEC_EXT_DIR -type f -name ${module}.json)"
file="$(find "${SPEC_EXT_DIR}" -type f -name "${module}.json")"
}
[ -f "$file" ] && \
@@ -321,15 +341,16 @@ generate_module()
done
}
# shellcheck disable=SC3043
generate_all()
{
local files
config_load
files="$(find ${SPEC_DIR} -type f -name *.json)"
files="$(find "${SPEC_DIR}" -type f -name "*.json")"
[ -d "${SPEC_EXT_DIR}" ] && \
files="${files} $(find $SPEC_EXT_DIR -type f -name *.json)"
files="${files} $(find "${SPEC_EXT_DIR}" -type f -name "*.json")"
[ -z "$files" ] && {
return 0
@@ -341,6 +362,7 @@ generate_all()
}
# shellcheck disable=SC3060,SC3043
list_modules()
{
local files
@@ -354,7 +376,7 @@ list_modules()
fi
cd ${SPEC_DIR} && {
for file in $(ls); do
for file in *.json; do
if [ "${JSON_OUT}" -eq 1 ]; then
json_add_string "" "${file/.json/}"
else
@@ -372,7 +394,7 @@ list_modules()
fi
cd ${SPEC_EXT_DIR} && {
for file in $(ls); do
for file in *.json; do
if [ "${JSON_OUT}" -eq 1 ]; then
json_add_string "" "${file/.json/}"
else
@@ -411,6 +433,10 @@ while getopts "m:hlj" opts; do
m)
modules="$modules ${OPTARG}"
;;
*)
help
exit
;;
esac
done
@@ -422,5 +448,5 @@ fi
if [ -z "${modules}" ]; then
generate_all
else
generate_module ${modules}
generate_module "${modules}"
fi

View File

@@ -54,18 +54,35 @@ int get_operate_args_SelfTest(char *refparam, struct dmctx *ctx, void *data, cha
int operate_Device_SelfTest(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
{
char cmd[512] = {0};
char output[512] = {0};
char buffer[512] = {0};
json_object *jobj = NULL;
const char *filename;
snprintf(cmd, sizeof(cmd), "sh %s", DIAG_BIN);
snprintf(cmd, sizeof(cmd), "sh %s -j 2>/dev/null", DIAG_BIN);
if (run_cmd(cmd, output, sizeof(output)) != 0)
if (run_cmd(cmd, buffer, sizeof(buffer)) != 0) {
BBFDM_ERR("Failed to run cmd[%s]", cmd);
goto err;
}
// truncate the new line char from end
remove_new_line(output);
if (!file_exists(output))
if (DM_STRLEN(buffer) == 0) {
BBFDM_ERR("No output from cmd[%s]", cmd);
goto err;
}
jobj = json_tokener_parse(buffer);
if (jobj == NULL) {
BBFDM_ERR("Fail to parse output[%s] in json", buffer);
goto err;
}
filename = dmjson_get_value(jobj, 1, "result");
snprintf(buffer, sizeof(buffer), "%s", filename);
json_object_put(jobj);
if (!file_exists(filename)) {
BBFDM_ERR("File [%s] does not exists or not accessible", filename);
goto err;
}
/* Add in dmmap_logmngr */
struct uci_section *s = get_origin_section_from_dmmap("dmmap_logmngr", "self_test", "self_test_log");
@@ -74,7 +91,7 @@ int operate_Device_SelfTest(char *refparam, struct dmctx *ctx, void *data, char
dmuci_rename_section_by_section(s, "self_test_log");
}
dmuci_set_value_by_section(s, "log_file", output);
dmuci_set_value_by_section(s, "log_file", filename);
dmuci_commit_package_bbfdm("dmmap_logmngr");
/* Get self test log instance */

View File

@@ -5,11 +5,11 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=sulu-base
PKG_VERSION:=5.2.2
PKG_VERSION:=5.3.0
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu.git
PKG_SOURCE_VERSION:=b2bf5c9615e0e81afb2e6bcbf6c75b347e24c705
PKG_SOURCE_VERSION:=e282df789259a4ed1812e72a91e1b8d4373189db
PKG_MIRROR_HASH:=skip
SULU_MOD:=core

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=sulu-builder
PKG_VERSION:=5.2.2
PKG_VERSION:=5.3.0
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu-builder.git
PKG_SOURCE_VERSION:=d270fcaec14aaf53b1a8983e71b2c61dec1ab1ed
PKG_SOURCE_VERSION:=4cdc7d7cf4e566256be2608d1b70af5e489ec3bc
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
PKG_BUILD_DIR:=$(BUILD_DIR)/sulu-$(PKG_VERSION)/sulu-builder-$(PKG_SOURCE_VERSION)

View File

@@ -5,8 +5,9 @@
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
RESTART_REQ=0
_RESTART_SERVICES="0"
SULU_CON_CONFIG="/sulu/presets/connection-config.json"
SULU_ACL_FILE=""
SULU_CON_ROLES=""
slog() {
echo "$*" | logger -t sulu.sh -p debug
@@ -27,49 +28,21 @@ _get_agent_id() {
fi
}
_get_sulu_user_roles() {
roles=$(uci -q get userinterface._sulu_s.role)
for role in ${roles}; do
sulu_user_roles="${sulu_user_roles} ${role}"
done
if [ -n "${sulu_user_roles}" ]; then
sulu_user_roles=$(echo -e "${sulu_user_roles// /\\n}" | sort | uniq)
fi
echo "${sulu_user_roles}"
}
_get_sulu_root() {
local root
root="$(uci -q get nginx._sulu_s.root)"
echo "${root:-/sulu}"
}
_get_sulu_connection_config() {
local config
config="$(_get_sulu_root)/presets/connection-config.json"
echo "${config}"
}
_get_sulu_session_mode() {
uci -q get sulu.global.SessionMode
}
_get_sulu_acl_file() {
uci -q get mosquitto.sulu.acl_file
}
_sulu_conn_config_users() {
for user in ${SULU_CON_ROLES}; do
json_add_object "${user}"
json_add_string 'fromId' "self::sulu-${user}"
json_add_string 'publishEndpoint' "/usp/$(_get_agent_id)/${user}/endpoint"
json_add_string 'subscribeEndpoint' "/usp/$(_get_agent_id)/${user}/controller"
json_close_object
done
}
generate_sulu_conn_config() {
local users SCONFIG session
users="$(_get_sulu_user_roles)"
session="$(_get_sulu_session_mode)"
SCONFIG="$(_get_sulu_connection_config)"
json_init
json_add_string 'Current-connection' 'main'
json_add_object 'Connections'
@@ -79,41 +52,25 @@ generate_sulu_conn_config() {
json_add_string 'toId' "os::$(_get_agent_id)"
json_add_string 'port' "auto"
json_add_string 'path' "/wss"
if [ "${session}" = "Require" ]; then
json_add_boolean 'useSession' 1
fi
json_add_string 'protocol' 'autoWs'
json_add_object 'overrides'
{
for user in ${users}; do
json_add_object "${user}"
{
json_add_string 'fromId' "self::sulu-${user}"
json_add_string 'publishEndpoint' "/usp/$(_get_agent_id)/${user}/endpoint"
json_add_string 'subscribeEndpoint' "/usp/$(_get_agent_id)/${user}/controller"
json_close_object
}
done
_sulu_conn_config_users
json_close_object
}
json_close_object
}
json_close_object
}
json_dump >"${SCONFIG}"
json_dump >"${SULU_CON_CONFIG}"
}
_update_obuspa_config_rbac() {
local agent users session
update_obuspa_config() {
local agent
agent="$(_get_agent_id)"
users="$(_get_sulu_user_roles)"
session="$(_get_sulu_session_mode)"
for user in ${users}; do
for user in ${SULU_CON_ROLES}; do
local section
# Add mqtt
@@ -123,7 +80,6 @@ _update_obuspa_config_rbac() {
uci_set obuspa "${section}" BrokerAddress "127.0.0.1"
uci_set obuspa "${section}" BrokerPort "1883"
uci_set obuspa "${section}" TransportProtocol "TCP/IP"
RESTART_REQ=1
fi
# Add mtp
@@ -133,7 +89,6 @@ _update_obuspa_config_rbac() {
uci_set obuspa "${section}" Protocol "MQTT"
uci_set obuspa "${section}" ResponseTopicConfigured "/usp/${agent}/${user}/endpoint"
uci_set obuspa "${section}" mqtt "mqtt_sulu_$user"
RESTART_REQ=1
fi
# Add controller
@@ -145,88 +100,59 @@ _update_obuspa_config_rbac() {
uci_set obuspa "${section}" Topic "/usp/${agent}/${user}/controller"
uci_set obuspa "${section}" mqtt "mqtt_sulu_$user"
uci_set obuspa "${section}" assigned_role_name "$user"
RESTART_REQ=1
fi
obMode="$(uci_get obuspa "${section}" SessionMode)"
if [ "${session}" != "${obMode}" ]; then
uci_set obuspa "${section}" SessionMode "${session}"
RESTART_REQ=1
fi
done
}
_create_mosquitto_acl() {
local agentid users
local ACL_FILE acl_users
create_mosquitto_acl() {
local agentid
local acl_users
RESTART_REQ="0"
ACL_FILE="$(_get_sulu_acl_file)"
if [ -z "${ACL_FILE}" ]; then
SULU_ACL_FILE="$(_get_sulu_acl_file)"
if [ -z "${SULU_ACL_FILE}" ]; then
return 0
fi
users="$(_get_sulu_user_roles)"
if [ -f "${ACL_FILE}" ]; then
acl_users="$(awk '/^user / {print $2}' "${ACL_FILE}")"
for user in ${acl_users}; do
if ! echo "$users" | grep -qwF "$user"; then
rm -f "${ACL_FILE}"
RESTART_REQ="1"
break
fi
done
fi
[ -f "${ACL_FILE}" ] || touch "${ACL_FILE}"
echo > "${SULU_ACL_FILE}"
agentid="$(_get_agent_id)"
for user in ${users}; do
if ! grep -qxF "user $user" "${ACL_FILE}"; then
for user in ${SULU_CON_ROLES}; do
if ! grep -qxF "user $user" "${SULU_ACL_FILE}"; then
{
echo "user ${user}"
echo "topic read /usp/${agentid}/${user}/controller/reply-to"
echo "topic write /usp/${agentid}/${user}/endpoint"
echo "topic read /usp/${agentid}/${user}/controller"
echo ""
} >> "${ACL_FILE}"
RESTART_REQ="1"
} >> "${SULU_ACL_FILE}"
fi
done
}
if [ "${_RESTART_SERVICES}" -eq "1" ] && [ "${RESTART_REQ}" -gt "0" ]; then
slog "Restarting mosquitto..."
ubus call uci commit '{"config":"mosquitto"}'
get_sulu_roles() {
local sec path_prefix redirect role
sec="${1}"
config_get path_prefix "${sec}" path_prefix ""
config_get redirect "${sec}" redirect ""
config_get role "${sec}" role ""
if [ -n "${redirect}" ]; then
return 0
fi
if [ "${path_prefix}" != "/sulu" ]; then
return 0
fi
if [ -n "${role}" ]; then
SULU_CON_ROLES="${SULU_CON_ROLES} ${role}"
fi
}
update_obuspa_config() {
RESTART_REQ=0
_update_obuspa_config_rbac
uci_commit obuspa
config_load userinterface
config_foreach get_sulu_roles http_access
if [ "${_RESTART_SERVICES}" -eq "1" ] && [ "${RESTART_REQ}" -gt "0" ]; then
slog "Restarting obuspa..."
ubus call uci commit '{"config":"obuspa"}'
fi
}
configure_sulu() {
_create_mosquitto_acl
update_obuspa_config
generate_sulu_conn_config
}
while getopts ":r" opt; do
case ${opt} in
r)
_RESTART_SERVICES="1"
;;
*)
slog "Invalid option: ${OPTARG}"
exit 1
;;
esac
done
configure_sulu
generate_sulu_conn_config
create_mosquitto_acl
update_obuspa_config

View File

@@ -39,7 +39,8 @@ add_sulu_config_to_mosquitto()
add_sulu_userinterface_uci()
{
if [ -f "/etc/config/userinterface" ]; then
# check if sulu already configured
if ! uci show userinterface| grep -q "path_prefix='/sulu'"; then
uci_add userinterface http_access _sulu_s
uci_set userinterface _sulu_s path_prefix '/sulu'
uci_set userinterface _sulu_s port '8443'

View File

@@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=sulu-theme-genexis
PKG_VERSION:=5.2.2
PKG_VERSION:=5.3.0
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/gnx/sulu-theme-genexis

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=sysmngr
PKG_VERSION:=1.0.31
PKG_VERSION:=1.1.3
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/system/sysmngr.git
PKG_SOURCE_VERSION:=d84dd91e19ec8e2a6baf3efa9ff319bf9d6f746a
PKG_SOURCE_VERSION:=2643356bde5bc45c79f46c7e8969a085d2f3e39d
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -22,7 +22,30 @@ fwbank_get_bootbank() {
case "$1" in
list)
echo '{ "dump" : {}, "set_bootbank" : {"bank":32}, "copy_config" : {}, "upgrade": {"path":"String","auto_activate":true,"bank":32,"keep_settings":true}}'
json_init
json_add_object "dump"
json_close_object
json_add_object "set_bootbank"
json_add_int "bank" 32
json_close_object
json_add_object "copy_config"
json_add_boolean "keep_settings" 1
json_add_boolean "keep_opconf" 1
json_add_string "config_scope" "String"
json_close_object
json_add_object "upgrade"
json_add_string "path" "String"
json_add_boolean "auto_activate" 1
json_add_int "bank" 32
json_add_boolean "keep_settings" 1
json_add_boolean "keep_opconf" 1
json_add_string "config_scope" "String"
json_add_boolean "reboot" 1
json_close_object
json_dump
;;
call)
case "$2" in
@@ -125,19 +148,44 @@ case "$1" in
fi
;;
copy_config)
if [ -z "$UPGRADE_BACKUP" ]; then
UPGRADE_BACKUP=/tmp/sysupgrade.tgz
read -r input
json_load "${input}"
json_get_var keep_settings keep_settings
json_get_var keep_opconf keep_opconf
json_get_var config_scope config_scope
# Set the default value for keep_settings
keep_settings=${keep_settings:-1}
if command -v "opconf_conf_handler" >/dev/null 2>&1; then
if ! mountpoint -q /usr_data; then
logger -t sysmngr.fwbank "copy_config: usr_data partition not present"
config_scope="All"
fi
arg="-k ${keep_settings}"
[ -n "${keep_opconf}" ] && arg="${arg} -o ${keep_opconf}"
[ -n "${config_scope}" ] && arg="${arg} -s ${config_scope}"
opconf_conf_handler ${arg}
else
# Fallback to default old behaviour in case opconf not present
config_scope="All"
fi
ret=0
if [ "${keep_settings}" -eq "1" ] && [ "${config_scope}" = "All" ]; then
if [ -z "$UPGRADE_BACKUP" ]; then
UPGRADE_BACKUP=/tmp/sysupgrade.tgz
fi
sysupgrade -b "$UPGRADE_BACKUP" || ret=1
if [ "$ret" -eq 0 ]; then
if command -v platform_copy_config >/dev/null 2>&1; then
platform_copy_config 1>&2 || ret=1
else
ret=1
sysupgrade -b "$UPGRADE_BACKUP" || ret=1
if [ "$ret" -eq 0 ]; then
if command -v platform_copy_config >/dev/null 2>&1; then
platform_copy_config 1>&2 || ret=1
else
ret=1
fi
fi
fi
@@ -157,6 +205,9 @@ case "$1" in
json_get_var auto_activate auto_activate
json_get_var bank bank
json_get_var keep_settings keep_settings
json_get_var keep_opconf keep_opconf
json_get_var config_scope config_scope
json_get_var reboot reboot
ret=0
@@ -180,6 +231,7 @@ case "$1" in
# Set the default value for keep_settings
keep_settings=${keep_settings:-1}
reboot=${reboot:-0}
# This ubus call does not reboot the system at any one time.
# Although, the newly upgraded bank is activated by default.
@@ -187,14 +239,36 @@ case "$1" in
# "--no-activate" otherwise.
sysupgrade_flag=""
if [ "${auto_activate}" -eq 1 ]; then
sysupgrade_flag="--no-reboot"
if [ "${reboot}" -eq 0 ]; then
sysupgrade_flag="--no-reboot"
fi
else
sysupgrade_flag="--no-activate"
fi
if command -v "opconf_conf_handler" >/dev/null 2>&1; then
if ! mountpoint -q /usr_data; then
logger -t sysmngr.fwbank "upgrade: usr_data partition not present"
config_scope="All"
fi
arg="-k ${keep_settings}"
[ -n "${keep_opconf}" ] && arg="${arg} -o ${keep_opconf}"
[ -n "${config_scope}" ] && arg="${arg} -s ${config_scope}"
opconf_conf_handler ${arg}
else
# Fallback to default old behaviour in case opconf not present
config_scope="All"
fi
# Set the flag to do not save configuration over reflash
if [ "${keep_settings}" -eq 0 ]; then
sysupgrade_flag="${sysupgrade_flag} -n"
elif [ "${keep_settings}" -eq 1 ]; then
if [ "${config_scope}" != "All" ]; then
sysupgrade_flag="${sysupgrade_flag} -n"
fi
fi
# Call sysupgrade synchonously. It should not time out the ubus call,

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=usermngr
PKG_VERSION:=1.4.6
PKG_VERSION:=1.4.7
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/usermngr.git
PKG_SOURCE_VERSION:=416c49b53ed2fbbc983f404c65b8a8ce722152bd
PKG_SOURCE_VERSION:=62390ff8d9e1c80babf3621f8b374dcd2078ff6f
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -112,6 +112,8 @@ build_pam_passwdqc_line() {
base="$base $k=$v"
done
base="$base match=0"
echo "$base"
}
@@ -141,7 +143,7 @@ update_password() {
fi
fi
write_line "$tmp_file" "password [success=1 default=ignore] pam_unix.so obscure sha512"
write_line "$tmp_file" "password [success=1 default=ignore] pam_unix.so sha512"
write_line "$tmp_file" ""
write_line "$tmp_file" "password requisite pam_deny.so"
write_line "$tmp_file" "password required pam_permit.so"

View File

@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=voicemngr
PKG_RELEASE:=1
PKG_VERSION:=1.2.4
PKG_VERSION:=1.2.5
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE
@@ -19,7 +19,7 @@ LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/$(PKG_NAME).git
PKG_SOURCE_VERSION:=7be53608b4cacb5107652bb2c0c09e5e3fd0c20e
PKG_SOURCE_VERSION:=a8197fa92017cbf2a850b8f68ce967670525c03d
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=wifidmd
PKG_VERSION:=1.4.1
PKG_VERSION:=1.4.5
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/wifidmd.git
PKG_SOURCE_VERSION:=006359c351be70a45f5bc1ef3d78e14e270aa7cf
PKG_SOURCE_VERSION:=bf8d314d121bf644c3e22dc75ccd55abd524ad37
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -42,23 +42,95 @@ for arg in ${input}; do
fi
done
################################################################################
# wait_for_wifi_reload
#
# Description:
# Currently, there is no direct way to determine when WiFi reload
# operations have fully completed. The ubus API does not provide any
# event or flag indicating that WiFi services have finished reloading.
#
# To work around this, we use a timing-based heuristic:
# - We repeatedly run `ubus call wifi status` every 1 second.
# - Each call is timed (using `date +%s` before and after).
# - Normally, this command returns almost instantly (<1s).
# - However, during a WiFi reload, the call may take longer
# (several seconds) while the subsystem is busy.
# - Once we detect that `ubus call wifi status` takes longer than
# 2 seconds to return, we assume the reload has been applied
# and completed successfully.
#
# Additional wait constraints:
# - Minimum wait: 5 seconds (to ensure reload started).
# - Maximum wait: 15 seconds (to prevent indefinite blocking).
# - If the threshold is not met within 15s, we log a timeout warning.
################################################################################
wait_for_wifi_reload() {
MAX_ITER=15
MIN_ITER=5
THRESH=2 # seconds
# Check if wifi ubus object exists
ubus -t 2 wait_for wifi >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
log "wifi ubus object not available, skipping wait logic"
return 0
fi
#log "Waiting for WiFi reload (min ${MIN_ITER}s, max ${MAX_ITER}s)..."
iter=0
while [ "${iter}" -lt "${MAX_ITER}" ]; do
iter=$((iter + 1))
start=$(date +%s)
ubus call wifi status >/dev/null 2>&1
#rc=$?
end=$(date +%s)
elapsed=$((end - start))
#log "wait_for_wifi_reload: iter=${iter}, rc=${rc}, elapsed=${elapsed}s"
# If ubus took >2s and we've waited at least MIN_ITER → assume reload done
if [ "${elapsed}" -gt "${THRESH}" ] && [ "${iter}" -ge "${MIN_ITER}" ]; then
log "Detected long ubus response (${elapsed}s) after ${iter}s → assuming WiFi reload complete"
return 0
fi
# Sleep 1s between checks
if [ "${iter}" -lt "${MAX_ITER}" ]; then
sleep 1
fi
done
log "Timeout after ${MAX_ITER}s — WiFi reload not confirmed"
return 1
}
# Define function to reload mapcontroller
reload_mapcontroller() {
pid=$(pidof mapcontroller)
if [ -n "$pid" ]; then
log "Reloading mapcontroller (PID: $pid)..."
kill -SIGHUP "$pid"
wait_for_wifi_reload
else
log "Warning: mapcontroller process not found"
fi
}
# Define function to commit wireless config
commit_wireless_config() {
log "Committing wireless config..."
ubus call uci commit '{"config":"wireless"}'
wait_for_wifi_reload
}
# Apply logic based on flags
if [ "$mapcontroller" -eq 1 ]; then
reload_mapcontroller
elif [ "$wireless" -eq 1 ]; then
log "Committing wireless config..."
ubus call uci commit '{"config":"wireless"}'
commit_wireless_config
else
log "No action needed."
exit 1

View File

@@ -6,12 +6,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=wifimngr
PKG_VERSION:=20.1.8
PKG_VERSION:=20.1.9
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=b1c3ea57d027412b3cc9f9ecf8db7c1cea2c5ce5
PKG_SOURCE_VERSION:=479e4b737d7af8ec9d1c6088f7ae42871a61c601
PKG_SOURCE_URL:=https://dev.iopsys.eu/hal/wifimngr.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip