mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2026-01-01 00:58:56 +08:00
Compare commits
1 Commits
hash-commt
...
Bug_9545
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e1317bfcdc |
@@ -18,10 +18,6 @@ config BBF_TR143
|
||||
bool "Enable TR-143 Data Model Support"
|
||||
default y
|
||||
|
||||
config BBF_TR471
|
||||
bool "Enable TR-471 Data Model Support"
|
||||
default y
|
||||
|
||||
config BBFDM_ENABLE_JSON_PLUGIN
|
||||
bool "Enable json plugin to extend datamodel"
|
||||
default y
|
||||
|
||||
12
bbf/Makefile
12
bbf/Makefile
@@ -5,11 +5,11 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=libbbfdm
|
||||
PKG_VERSION:=6.8.30
|
||||
PKG_VERSION:=6.8.16
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/bbf.git
|
||||
PKG_SOURCE_VERSION:=2de7dbc43c5ec5931c8f5c057302f81ca80ae49a
|
||||
PKG_SOURCE_VERSION:=0ef6169d86333b8727ed34c63f379b08254340e3
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
@@ -34,8 +34,7 @@ define Package/libbbfdm/default
|
||||
CATEGORY:=Utilities
|
||||
SUBMENU:=TRx69
|
||||
TITLE:=Library for broadband forum data model support
|
||||
DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +libjson-c +libcurl +libbbf_api \
|
||||
+BBF_TR471:obudpst
|
||||
DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +libjson-c +libcurl +libbbf_api
|
||||
endef
|
||||
|
||||
define Package/libbbfdm
|
||||
@@ -111,11 +110,6 @@ CMAKE_OPTIONS += \
|
||||
-DBBF_TR143=ON
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_BBF_TR471),y)
|
||||
CMAKE_OPTIONS += \
|
||||
-DBBF_TR471=ON
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_BBF_VENDOR_EXTENSION),y)
|
||||
CMAKE_OPTIONS += \
|
||||
-DBBF_VENDOR_EXTENSION=ON
|
||||
|
||||
@@ -63,7 +63,7 @@ function delete_firewall_rule()
|
||||
fi
|
||||
|
||||
zone="zone_${interface}_input"
|
||||
CMD="iptables -w 1 -t filter -nL ${zone} --line-numbers"
|
||||
CMD="iptables -w 1 -t filter -L ${zone} --line-numbers"
|
||||
while ${CMD} 2>/dev/null | grep "${IDENTIFIER}"; do
|
||||
rule_num="$(${CMD} | grep "${IDENTIFIER}" | head -1|awk '{print $1}')"
|
||||
if [ -n "${rule_num}" ]; then
|
||||
@@ -72,7 +72,7 @@ function delete_firewall_rule()
|
||||
done
|
||||
|
||||
zone="zone_${interface}_output"
|
||||
CMD="iptables -w 1 -t filter -nL ${zone} --line-numbers"
|
||||
CMD="iptables -w 1 -t filter -L ${zone} --line-numbers"
|
||||
while ${CMD} 2>/dev/null | grep "${IDENTIFIER}"; do
|
||||
rule_num="$(${CMD} | grep "${IDENTIFIER}" | head -1|awk '{print $1}')"
|
||||
if [ -n "${rule_num}" ]; then
|
||||
|
||||
@@ -22,7 +22,7 @@ config_mosquitto_general() {
|
||||
uci -q set mosquitto.mosquitto.log_dest="syslog"
|
||||
uci -q set mosquitto.mosquitto.log_facility="5"
|
||||
uci -q set mosquitto.mosquitto.log_timestamp="1"
|
||||
uci -q set mosquitto.mosquitto.log_types="error"
|
||||
uci -q set mosquitto.mosquitto.log_types="error warning notice"
|
||||
uci -q set mosquitto.mosquitto.per_listener_settings="1"
|
||||
uci -q commit mosquitto
|
||||
}
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=easy-soc-libs
|
||||
PKG_VERSION:=7.2.14
|
||||
PKG_VERSION:=7.2.3
|
||||
PKG_RELEASE:=1
|
||||
|
||||
LOCAL_DEV=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=600dea2a0df974d9049c9fc9a2f85ff9e08f59d4
|
||||
PKG_SOURCE_VERSION:=c277f89b0791664b7d417a4de34a156fc0aa8ee0
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/easy-soc-libs.git
|
||||
PKG_MAINTAINER:=Anjan Chanda <anjan.chanda@iopsys.eu>
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
|
||||
@@ -43,6 +43,10 @@ ifeq ($(CONFIG_TARGET_brcmbca),y)
|
||||
TARGET_CFLAGS +=-DIOPSYS_BROADCOM -DCHIP_$(CHIP_ID) -DCONFIG_BCM9$(CHIP_ID) \
|
||||
-I$(STAGING_DIR)/usr/include/bcm963xx/bcmdrivers/opensource/include/bcm963xx \
|
||||
-I$(STAGING_DIR)/usr/include/bcm963xx/userspace/public/include
|
||||
else ifeq ($(CONFIG_TARGET_iopsys_ramips),y)
|
||||
TARGET_PLATFORM=MEDIATEK
|
||||
TARGET_WIFI_TYPE=MAC80211
|
||||
TARGET_CFLAGS +=-DIOPSYS_MAC80211
|
||||
else ifeq ($(CONFIG_TARGET_iopsys_x86),y)
|
||||
TARGET_PLATFORM=TEST
|
||||
TARGET_WIFI_TYPE=TEST
|
||||
@@ -59,10 +63,6 @@ else ifeq ($(CONFIG_TARGET_ipq95xx),y)
|
||||
TARGET_PLATFORM=IPQ95XX
|
||||
TARGET_WIFI_TYPE=MAC80211
|
||||
TARGET_CFLAGS +=-DIPQ95XX
|
||||
else ifeq ($(CONFIG_TARGET_iopsys_mediatek),y)
|
||||
TARGET_PLATFORM=LINUX
|
||||
TARGET_WIFI_TYPE=MAC80211
|
||||
TARGET_CFLAGS +=-DIOPSYS_LINUX
|
||||
else
|
||||
$(info Unexpected CONFIG_TARGET, use default MAC80211)
|
||||
TARGET_PLATFORM=MAC80211
|
||||
@@ -75,27 +75,13 @@ export TARGET_WIFI_TYPE
|
||||
|
||||
subdirs := \
|
||||
$(if $(CONFIG_PACKAGE_libeasy),libeasy) \
|
||||
$(if $(CONFIG_PACKAGE_libwifiutils),libwifi) \
|
||||
$(if $(CONFIG_PACKAGE_libwifi),libwifi) \
|
||||
$(if $(CONFIG_PACKAGE_libdsl),libdsl) \
|
||||
$(if $(CONFIG_PACKAGE_libethernet),libethernet) \
|
||||
$(if $(CONFIG_PACKAGE_libqos),libqos)
|
||||
|
||||
ifneq ($(CONFIG_PACKAGE_libwifi),)
|
||||
TARGET_CFLAGS +=-DHAS_WIFI
|
||||
endif
|
||||
|
||||
esl-pkgs := \
|
||||
$(if $(CONFIG_PACKAGE_libeasy),libeasy) \
|
||||
$(if $(CONFIG_PACKAGE_libwifiutils),libwifiutils) \
|
||||
$(if $(CONFIG_PACKAGE_libwifi),libwifi) \
|
||||
$(if $(CONFIG_PACKAGE_libdsl),libdsl) \
|
||||
$(if $(CONFIG_PACKAGE_libethernet),libethernet) \
|
||||
$(if $(CONFIG_PACKAGE_libqos),libqos)
|
||||
|
||||
esl-pkgs-all := \
|
||||
EASY_SOC_LIBS := \
|
||||
libeasy \
|
||||
libwifiutils \
|
||||
libwifi \
|
||||
libdsl \
|
||||
libethernet \
|
||||
@@ -145,15 +131,15 @@ define Build/Compile
|
||||
$(Build/Compile/rebuild)
|
||||
touch $(PKG_BUILD_DIR)/.config_$(CONFIG_TARGET_PROFILE)
|
||||
$(call Build/Compile/Default)
|
||||
$(foreach dir,$(esl-pkgs),$(call Build/Compile/$(dir)))
|
||||
$(foreach dir,$(subdirs),$(call Build/Compile/$(dir)))
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(foreach dir,$(esl-pkgs),$(call Build/InstallDev/$(dir),$(1),$(2));)
|
||||
$(foreach dir,$(subdirs),$(call Build/InstallDev/$(dir),$(1),$(2));)
|
||||
endef
|
||||
|
||||
define Package/easy-soc-libs/install
|
||||
:
|
||||
endef
|
||||
|
||||
$(eval $(foreach e,$(esl-pkgs-all),$(call BuildPackage,$(e))))
|
||||
$(eval $(foreach e,$(EASY_SOC_LIBS),$(call BuildPackage,$(e))))
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
define Package/libethernet
|
||||
$(call Package/easy-soc-libs)
|
||||
TITLE:= Ethernet library (libethernet)
|
||||
DEPENDS+=+libnl +libnl-route +libeasy +TARGET_airoha:ecnt_api
|
||||
DEPENDS+=+libnl +libnl-route +libeasy +TARGET_iopsys_ramips:swconfig +TARGET_airoha:ecnt_api
|
||||
endef
|
||||
|
||||
define Package/libethernet/config
|
||||
|
||||
@@ -1,49 +1,32 @@
|
||||
|
||||
define Package/libwifiutils
|
||||
$(call Package/easy-soc-libs)
|
||||
TITLE:= WiFi utility library (libwifiutils.so)
|
||||
DEPENDS+=+libnl +libnl-route +libeasy
|
||||
endef
|
||||
|
||||
define Build/InstallDev/libwifiutils
|
||||
$(INSTALL_DIR) $(1)/usr/include
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/wifidefs.h $(1)/usr/include/
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/wifiutils.h $(1)/usr/include/
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/libwifiutils*.so* $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
define Package/libwifiutils/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/libwifiutils*.so* $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
|
||||
define Package/libwifi
|
||||
$(call Package/easy-soc-libs)
|
||||
TITLE:= WiFi library (libwifi)
|
||||
DEPENDS+=+libnl +libnl-route +libeasy +libwifiutils +TARGET_brcmbca:bcmkernel
|
||||
DEPENDS+=+libnl +libnl-route +libeasy +TARGET_brcmbca:bcmkernel
|
||||
endef
|
||||
|
||||
define Package/libwifi/config
|
||||
if PACKAGE_libwifi
|
||||
if PACKAGE_libdsl
|
||||
config LIBWIFI_DEBUG
|
||||
depends on PACKAGE_libwifi
|
||||
bool "Enable wifi debugging"
|
||||
default n
|
||||
|
||||
endif
|
||||
endef
|
||||
|
||||
|
||||
define Build/InstallDev/libwifi
|
||||
$(INSTALL_DIR) $(1)/usr/include
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/wifidefs.h $(1)/usr/include/
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/wifiutils.h $(1)/usr/include/
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/wifiops.h $(1)/usr/include/
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/wifi.h $(1)/usr/include/
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/libwifi-7*.so* $(1)/usr/lib/
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/libwifi*.so* $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
define Package/libwifi/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/libwifi-7*.so* $(1)/usr/lib/
|
||||
$(CP) $(PKG_BUILD_DIR)/libwifi/libwifi*.so* $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ PKG_BUILD_PARALLEL:=1
|
||||
# indirectly. This ensures that the package is rebuilt on config-changes.
|
||||
PKG_CONFIG_DEPENDS:=CONFIG_TARGET_BOARD
|
||||
|
||||
export CONFIG_BRCM_SDK_VER_504040
|
||||
export CONFIG_BCM_CHIP_ID
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
@@ -24,7 +24,7 @@ get_max_port_speed() {
|
||||
# arg1: port name, ex: eth0
|
||||
get_port_number() {
|
||||
[ -z "$1" ] && return
|
||||
local ports="0 1 2 3 4 5 6 7 8"
|
||||
local ports="0 1 2 3 4 5 6 7"
|
||||
local units="0 1"
|
||||
local port="$1"
|
||||
local ifname
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=icwmp
|
||||
PKG_VERSION:=9.1.10
|
||||
PKG_VERSION:=9.1.5
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/icwmp.git
|
||||
PKG_SOURCE_VERSION:=fd9ca76bf074522f0110aaf0ff938f7cfe9b8c25
|
||||
PKG_SOURCE_VERSION:=79284d1f4e16cf6077a7394f0c04a894b83a8a41
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
@@ -29,7 +29,7 @@ define Package/icwmp/default
|
||||
CATEGORY:=Utilities
|
||||
SUBMENU:=TRx69
|
||||
TITLE:=TR069 CWMP client
|
||||
DEPENDS:=+libuci +libubox +libblobmsg-json +libubus +libjson-c +libcurl +mxml +libuuid +libbbf_api
|
||||
DEPENDS:=+libuci +libubox +libblobmsg-json +libubus +libjson-c +libcurl +mxml +libuuid
|
||||
endef
|
||||
|
||||
define Package/icwmp-openssl
|
||||
@@ -84,8 +84,6 @@ define Package/icwmp/default/install
|
||||
$(INSTALL_DIR) $(1)/lib/upgrade/keep.d
|
||||
$(INSTALL_DIR) $(1)/etc/bbfdm/json/
|
||||
$(INSTALL_DIR) $(1)/etc/udhcpc.user.d
|
||||
$(INSTALL_DIR) $(1)/usr/lib/bbfdm
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/libcwmpdm.so $(1)/usr/lib/bbfdm/libcwmpdm.so
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/icwmpd $(1)/usr/sbin/icwmpd
|
||||
$(INSTALL_DATA) ./files/etc/config/cwmp $(1)/etc/config/cwmp
|
||||
$(INSTALL_BIN) ./files/etc/firewall.cwmp $(1)/etc/firewall.cwmp
|
||||
|
||||
@@ -205,24 +205,10 @@ enable_dnsmasq_option125() {
|
||||
fi
|
||||
}
|
||||
|
||||
set_vendor_id() {
|
||||
enable_disable_dhcp_option125() {
|
||||
local wan="${1}"
|
||||
local proto="$(uci -q get network.$wan.proto)"
|
||||
local action="${2}"
|
||||
|
||||
if [ "${proto}" == "dhcp" ]; then
|
||||
vendorid="$(uci -q get network.$wan.vendorid)"
|
||||
if [ -z "${vendorid}" ]; then
|
||||
uci -q set network.$wan.vendorid="dslforum.org"
|
||||
ubus call uci commit '{"config":"network"}'
|
||||
elif [[ $vendorid != *"dslforum.org"* ]]; then
|
||||
uci -q set network.$wan.vendorid="${vendorid},dslforum.org"
|
||||
ubus call uci commit '{"config":"network"}'
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
enable_dhcp_option125() {
|
||||
local wan="${1}"
|
||||
local reqopts="$(uci -q get network.$wan.reqopts)"
|
||||
local sendopts="$(uci -q get network.$wan.sendopts)"
|
||||
local proto="$(uci -q get network.$wan.proto)"
|
||||
@@ -248,15 +234,34 @@ enable_dhcp_option125() {
|
||||
done
|
||||
|
||||
if [ "${proto}" == "dhcp" ]; then
|
||||
if [ ${req125_present} -eq 0 ]; then
|
||||
newreqopts="$reqopts 125"
|
||||
uci -q set network.$wan.reqopts="$newreqopts"
|
||||
network_uci_update=1
|
||||
fi
|
||||
if [ "${action}" == "enable" ]; then
|
||||
if [ ${req125_present} -eq 0 ]; then
|
||||
newreqopts="$reqopts 125"
|
||||
uci -q set network.$wan.reqopts="$newreqopts"
|
||||
network_uci_update=1
|
||||
fi
|
||||
|
||||
if [ ${send125_present} -eq 0 ]; then
|
||||
configure_send_op125 "${sendopts}" "${wan}" "network"
|
||||
network_uci_update=1
|
||||
if [ ${send125_present} -eq 0 ]; then
|
||||
configure_send_op125 "${sendopts}" "${wan}" "network"
|
||||
network_uci_update=1
|
||||
fi
|
||||
else
|
||||
if [ ${req125_present} -eq 1 ]; then
|
||||
newreqopts=$(echo ${reqopts/125/})
|
||||
uci -q set network.$wan.reqopts="$newreqopts"
|
||||
network_uci_update=1
|
||||
fi
|
||||
|
||||
if [ ${send125_present} -eq 1 ]; then
|
||||
for sopt in $sendopts; do
|
||||
if [[ "$sopt" == "$opt125"* ]]; then
|
||||
newsendopts=$(echo ${sendopts/"${sopt}"/})
|
||||
uci -q set network.$wan.sendopts="$newreqopts"
|
||||
network_uci_update=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -283,6 +288,13 @@ wait_for_resolvfile() {
|
||||
copy_cwmp_etc_files_to_varstate() {
|
||||
mkdir -p /var/run/icwmpd
|
||||
|
||||
if [ -f /etc/icwmpd/cwmp ]; then
|
||||
uci -q -c /etc/icwmpd delete cwmp.acs
|
||||
uci -q -c /etc/icwmpd delete cwmp.gatewayinfo
|
||||
uci -q -c /etc/icwmpd commit cwmp
|
||||
cat /etc/icwmpd/cwmp >> /var/state/cwmp
|
||||
fi
|
||||
|
||||
if [ -f /etc/icwmpd/icwmpd_backup_session.xml ]; then
|
||||
cp -f /etc/icwmpd/icwmpd_backup_session.xml /var/run/icwmpd/ 2>/dev/null
|
||||
fi
|
||||
@@ -301,6 +313,12 @@ copy_cwmp_varstate_files_to_etc() {
|
||||
cp -f /var/run/icwmpd/dm_enabled_notify /etc/icwmpd/ 2>/dev/null
|
||||
fi
|
||||
|
||||
if [ -f /var/state/cwmp ]; then
|
||||
uci -q -c /var/state delete cwmp.sess_status
|
||||
uci -q -c /var/state commit cwmp
|
||||
cp -f /var/state/cwmp /etc/icwmpd/
|
||||
fi
|
||||
|
||||
# move the successful custom notify import marker to persistent storage
|
||||
if [ -f /var/run/icwmpd/icwmpd_notify_import_marker ]; then
|
||||
cp -f /var/run/icwmpd/icwmpd_notify_import_marker /etc/icwmpd/
|
||||
@@ -377,30 +395,25 @@ validate_defaults() {
|
||||
}
|
||||
|
||||
boot() {
|
||||
local enable_cwmp="0"
|
||||
local dhcp_discovery="0"
|
||||
|
||||
config_load cwmp
|
||||
config_get_bool enable_cwmp cpe enable 1
|
||||
if [ "$enable_cwmp" = "0" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
config_get dhcp_discovery acs dhcp_discovery "0"
|
||||
config_get wan_interface cpe default_wan_interface "wan"
|
||||
|
||||
config_get wan_interface cpe default_wan_interface "wan"
|
||||
if [ "${dhcp_discovery}" == "enable" ] || [ "${dhcp_discovery}" == "1" ]; then
|
||||
# Set dhcp option 43 if not already configured
|
||||
enable_dhcp_option43 "${wan_interface}"
|
||||
# Set dhcp option 60
|
||||
set_vendor_id "${wan_interface}"
|
||||
fi
|
||||
|
||||
config_get lan_interface cpe default_lan_interface ""
|
||||
if [ -n "${lan_interface}" ]; then
|
||||
# Set dhcp_option 125 if not already configured
|
||||
enable_dhcp_option125 "${wan_interface}"
|
||||
enable_disable_dhcp_option125 "${wan_interface}" "enable"
|
||||
enable_dnsmasq_option125 "${lan_interface}"
|
||||
else
|
||||
# Remove dhcp option 125 if exists
|
||||
enable_disable_dhcp_option125 "${wan_interface}" "disable"
|
||||
fi
|
||||
|
||||
config_get ssl_capath acs ssl_capath
|
||||
@@ -409,11 +422,8 @@ boot() {
|
||||
regenerate_ssl_link "${ssl_capath}"
|
||||
fi
|
||||
|
||||
# Copy backup data so that if it restart latter on, it gets the info
|
||||
# Copy backup data so that if it restart latter on it gets the info
|
||||
copy_cwmp_etc_files_to_varstate
|
||||
touch /etc/icwmpd/cwmp_notification
|
||||
mkdir -p /var/run/icwmpd/
|
||||
touch /var/run/icwmpd/cwmp
|
||||
|
||||
start
|
||||
}
|
||||
@@ -448,6 +458,11 @@ start_service() {
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
service_stopped()
|
||||
{
|
||||
copy_cwmp_varstate_files_to_etc
|
||||
}
|
||||
|
||||
stop_service()
|
||||
{
|
||||
copy_cwmp_varstate_files_to_etc
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ieee1905
|
||||
PKG_VERSION:=8.0.0
|
||||
PKG_VERSION:=7.0.2
|
||||
|
||||
LOCAL_DEV=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=a4f0002bcad9b7e525ed5d661f9c5f92b0e9ca2f
|
||||
PKG_SOURCE_VERSION:=47c04c502edf441fef9f14307be5f07541614049
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/ieee1905.git
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
@@ -57,7 +57,6 @@ CONFIG_LOCALMIRROR="https://download.iopsys.eu/iopsys/mirror/"
|
||||
# EasySoC HAL #
|
||||
CONFIG_PACKAGE_inbd=y
|
||||
CONFIG_PACKAGE_qosmngr=y
|
||||
CONFIG_PACKAGE_libwifiutils=y
|
||||
CONFIG_PACKAGE_wifimngr=y
|
||||
|
||||
# Multi-AP #
|
||||
|
||||
@@ -14,6 +14,7 @@ function genconfig {
|
||||
target="bogus"
|
||||
target_config_path=""
|
||||
brcmbca_feed="target/linux/feeds/brcmbca"
|
||||
ramips_feed="target/linux/feeds/iopsys-ramips"
|
||||
airoha_feed="target/linux/feeds/airoha"
|
||||
x86_feed="target/linux/feeds/iopsys-x86"
|
||||
armvirt_feed="target/linux/feeds/iopsys-armvirt"
|
||||
@@ -110,6 +111,8 @@ function genconfig {
|
||||
|
||||
[ -e $brcmbca_feed/genconfig ] &&
|
||||
brcmbca=$(cd $brcmbca_feed; ./genconfig)
|
||||
[ -e $ramips_feed/genconfig ] &&
|
||||
iopsys_ramips=$(cd $ramips_feed; ./genconfig)
|
||||
[ -e $airoha_feed/genconfig ] &&
|
||||
airoha=$(cd $airoha_feed; ./genconfig)
|
||||
[ -e $x86_feed/genconfig ] &&
|
||||
@@ -122,7 +125,7 @@ function genconfig {
|
||||
ipq95xx=$(cd $qualcomm_ipq95xx_feed; ./genconfig)
|
||||
|
||||
if [ "$profile" == "LIST" ]; then
|
||||
for list in brcmbca airoha iopsys_x86 iopsys_armvirt iopsys_mediatek ipq95xx; do
|
||||
for list in brcmbca iopsys_ramips airoha iopsys_x86 iopsys_armvirt iopsys_mediatek ipq95xx; do
|
||||
echo "$list based boards:"
|
||||
for b in ${!list}; do
|
||||
echo -e "\t$b"
|
||||
@@ -139,6 +142,14 @@ function genconfig {
|
||||
fi
|
||||
done
|
||||
|
||||
for p in $iopsys_ramips; do
|
||||
if [ $p == $profile ]; then
|
||||
target="iopsys_ramips"
|
||||
target_config_path="$ramips_feed/config"
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
||||
for p in $airoha; do
|
||||
if [ $p == $profile ]; then
|
||||
target="airoha"
|
||||
@@ -265,22 +276,11 @@ function genconfig {
|
||||
setup_dirs()
|
||||
{
|
||||
git remote -v | grep -q http || {
|
||||
CUSTBRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||
if git ls-remote $CUSTREPO -q 2>/dev/null; then
|
||||
if [ ! -d "$CUSTPATH" ]; then
|
||||
echo "Cloning $CUSTBRANCH branch of $CUSTREPO"
|
||||
git clone -b "$CUSTBRANCH" "$CUSTREPO" "$CUSTPATH" 2>/dev/null || {
|
||||
DEFBRANCH="$(git remote show $CUSTREPO | grep 'HEAD branch' | cut -d' ' -f5)"
|
||||
echo "$CUSTBRANCH branch is not found, cloning $DEFBRANCH branch of $CUSTREPO"
|
||||
git clone "$CUSTREPO" "$CUSTPATH"
|
||||
}
|
||||
git clone "$CUSTREPO" "$CUSTPATH"
|
||||
elif [ $IMPORT -eq 1 ]; then
|
||||
cd $CUSTPATH
|
||||
echo "Checking out $CUSTBRANCH branch in $CUSTPATH"
|
||||
git checkout "$CUSTBRANCH" 2>/dev/null || {
|
||||
DEFBRANCH="$(git symbolic-ref refs/remotes/origin/HEAD | cut -d '/' -f4)"
|
||||
echo "Checking out $CUSTBRANCH branch has failed, using $DEFBRANCH branch in $CUSTPATH"
|
||||
}
|
||||
v "git pull"
|
||||
git pull
|
||||
cd - >/dev/null #go back
|
||||
@@ -340,9 +340,9 @@ function genconfig {
|
||||
echo "" >> .config
|
||||
fi
|
||||
|
||||
# Special handling for targets which use TARGET_DEVICES
|
||||
# Special handling for targets which use TARGET_DEVICES
|
||||
case "$target" in
|
||||
airoha | iopsys_mediatek | brcmbca | ipq95xx)
|
||||
iopsys_ramips | airoha | iopsys_mediatek | brcmbca | ipq95xx)
|
||||
# This assumes the device name to be unique within one target,
|
||||
# which is a fair assumption to make.
|
||||
local mk_file="$(grep -Fx --files-with-matches "define Device/${BOARDTYPE}" "$target_config_path/../image/"*.mk)"
|
||||
|
||||
@@ -13,6 +13,7 @@ function genconfig_min {
|
||||
target="bogus"
|
||||
target_config_path=""
|
||||
brcmbca_feed="target/linux/feeds/brcmbca"
|
||||
ramips_feed="target/linux/feeds/iopsys-ramips"
|
||||
airoha_feed="target/linux/feeds/airoha"
|
||||
x86_feed="target/linux/feeds/iopsys-x86"
|
||||
armvirt_feed="target/linux/feeds/iopsys-armvirt"
|
||||
@@ -109,6 +110,8 @@ function genconfig_min {
|
||||
|
||||
[ -e $brcmbca_feed/genconfig ] &&
|
||||
brcmbca=$(cd $brcmbca_feed; ./genconfig)
|
||||
[ -e $ramips_feed/genconfig ] &&
|
||||
iopsys_ramips=$(cd $ramips_feed; ./genconfig)
|
||||
[ -e $airoha_feed/genconfig ] &&
|
||||
airoha=$(cd $airoha_feed; ./genconfig)
|
||||
[ -e $x86_feed/genconfig ] &&
|
||||
@@ -121,7 +124,7 @@ function genconfig_min {
|
||||
ipq95xx=$(cd $qualcomm_ipq95xx_feed; ./genconfig)
|
||||
|
||||
if [ "$profile" == "LIST" ]; then
|
||||
for list in brcmbca airoha iopsys_x86 iopsys_armvirt iopsys_mediatek ipq95xx; do
|
||||
for list in brcmbca iopsys_ramips airoha iopsys_x86 iopsys_armvirt iopsys_mediatek ipq95xx; do
|
||||
echo "$list based boards:"
|
||||
for b in ${!list}; do
|
||||
echo -e "\t$b"
|
||||
@@ -138,6 +141,14 @@ function genconfig_min {
|
||||
fi
|
||||
done
|
||||
|
||||
for p in $iopsys_ramips; do
|
||||
if [ $p == $profile ]; then
|
||||
target="iopsys_ramips"
|
||||
target_config_path="$ramips_feed/config"
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
||||
for p in $airoha; do
|
||||
if [ $p == $profile ]; then
|
||||
target="airoha"
|
||||
@@ -181,6 +192,12 @@ function genconfig_min {
|
||||
|
||||
git remote -v | grep -qE '(git@|ssh://)' && {
|
||||
DEVELOPER=1
|
||||
|
||||
bcmAllowed=0
|
||||
endptAllowed=0
|
||||
|
||||
git ls-remote git@dev.iopsys.eu:broadcom/bcmcreator.git -q 2>/dev/null && bcmAllowed=1
|
||||
git ls-remote git@dev.iopsys.eu:iopsys/endptmngr.git -q 2>/dev/null && endptAllowed=1
|
||||
}
|
||||
|
||||
v() {
|
||||
@@ -316,7 +333,7 @@ function genconfig_min {
|
||||
|
||||
# Special handling for targets which use TARGET_DEVICES
|
||||
case "$target" in
|
||||
airoha | iopsys_mediatek | brcmbca | ipq95xx)
|
||||
iopsys_ramips | airoha | iopsys_mediatek | brcmbca | ipq95xx)
|
||||
# This assumes the device name to be unique within one target,
|
||||
# which is a fair assumption to make.
|
||||
local mk_file="$(grep -Fx --files-with-matches "define Device/${BOARDTYPE}" "$target_config_path/../image/"*.mk)"
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2022 IOPSYS Software Solutions AB
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=libvoice-airoha
|
||||
PKG_VERSION:=0.1
|
||||
PKG_LICENSE:=PROPRIETARY
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
LOCAL_SRC_DIR:=~/git/voip/$(PKG_NAME)
|
||||
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:=96cdaee6f301b3df8eaa8e9f5c9a4a704740aad2
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
endif
|
||||
|
||||
# All config variable that are passed to the make invocation, directly or
|
||||
# indirectly. This ensures that the package is rebuilt on config-changes.
|
||||
PKG_CONFIG_DEPENDS:=CONFIG_TARGET_BOARD
|
||||
|
||||
LIBVOICE_PKG_BUILD_DIR := $(PKG_BUILD_DIR)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
TARGET_CFLAGS += -Wall -Werror
|
||||
|
||||
define Package/$(PKG_NAME)
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=IOPSYS libvoice for Airoha platform
|
||||
URL:=
|
||||
DEPENDS:=
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/description
|
||||
Libvoice is a library that provides a uniform set of APIs and data types with hardware abstract layer for DSP/SLIC from different vendors
|
||||
endef
|
||||
|
||||
ifeq ($(LOCAL_DEV),1)
|
||||
define Build/Prepare
|
||||
rsync -av --exclude=.* $(LOCAL_SRC_DIR)/* $(PKG_BUILD_DIR)/
|
||||
endef
|
||||
endif
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
# Although there is nothing needs to be installed, but the install section must NOT be empty. Otherwise the package will be skipped as below.
|
||||
# WARNING: skipping libvoice-airoha -- package has no install section
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,$(PKG_NAME)))
|
||||
|
||||
@@ -16,7 +16,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:=415e36c4007040f723b164dee79a1719d9c77f0a
|
||||
PKG_SOURCE_VERSION:=d066c9d5c14757ab38e9ecb265ba24f5b33cdbce
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
endif
|
||||
@@ -27,7 +27,7 @@ PKG_CONFIG_DEPENDS:=CONFIG_TARGET_BOARD
|
||||
|
||||
LIBVOICE_PKG_BUILD_DIR := $(PKG_BUILD_DIR)
|
||||
|
||||
export BCM_VOICEMNGR_WORKAROUND=y
|
||||
export CONFIG_BRCM_SDK_VER_504040
|
||||
export CONFIG_BCM_CHIP_ID
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
@@ -16,7 +16,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:=0569710a2068b4d9832b4348366f4d6f0ad54cf7
|
||||
PKG_SOURCE_VERSION:=45e7d35f97f258f5e13c3afa0542db724bf59828
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
endif
|
||||
|
||||
@@ -33,8 +33,5 @@ config AGENT_EASYMESH_VENDOR_EXT_OUI
|
||||
enabled through AGENT_EASYMESH_VENDOR_EXT. Please provide the Vendor's OUI
|
||||
through which such features would be exposed.
|
||||
|
||||
config AGENT_UNAUTHORIZED_STA_IN_ASSOCLIST
|
||||
bool "Create STA entry before authorization is completed"
|
||||
|
||||
endmenu
|
||||
endif
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=map-agent
|
||||
PKG_VERSION:=4.2.0.0
|
||||
PKG_VERSION:=4.1.0.0
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_VERSION:=22dc5640b1f30dd5bdfa9257fdd673ed39d16526
|
||||
PKG_SOURCE_VERSION:=035a398ae9e23612816cba8eeb8477997135a840
|
||||
PKG_MAINTAINER:=Anjan Chanda <anjan.chanda@iopsys.eu>
|
||||
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
@@ -78,9 +78,6 @@ TARGET_CFLAGS += -DEASYMESH_VENDOR_EXT_OUI=\\\"$(CONFIG_AGENT_EASYMESH_VENDOR_EX
|
||||
TARGET_CFLAGS += -DEASYMESH_VENDOR_EXT
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_AGENT_UNAUTHORIZED_STA_IN_ASSOCLIST),y)
|
||||
TARGET_CFLAGS += -DUNAUTHORIZED_STA_IN_ASSOCLIST
|
||||
endif
|
||||
|
||||
MAKE_PATH:=src
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ validate_agent_section() {
|
||||
uci_validate_section mapagent agent "agent" \
|
||||
'enabled:bool:true' \
|
||||
'debug:range(0,16)' \
|
||||
'profile:range(1,4):2' \
|
||||
'profile:range(1,2):2' \
|
||||
'brcm_setup:bool:false' \
|
||||
'controller_macaddr:macaddr' \
|
||||
'al_bridge:string' \
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=map-controller
|
||||
PKG_VERSION:=4.2.0.0
|
||||
PKG_VERSION:=4.1.0.0
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_VERSION:=3a12ca25ba275c5f1e2bf7ed22d2f96fb78cc677
|
||||
PKG_SOURCE_VERSION:=473c4a547c34af0f3b09cb7a110e5cff90abc191
|
||||
|
||||
LOCAL_DEV=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
@@ -26,7 +26,7 @@ define Package/map-controller
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=WiFi Multi-AP Controller (EasyMesh R2)
|
||||
DEPENDS:=+libuci +libubox +ubus +libeasy +libwifiutils +libieee1905 +ieee1905 +map-plugin
|
||||
DEPENDS:=+libuci +libubox +ubus +libeasy +libieee1905 +ieee1905 +map-plugin
|
||||
endef
|
||||
|
||||
define Package/map-controller/description
|
||||
|
||||
@@ -45,13 +45,7 @@ validate_sta_steering_section() {
|
||||
'use_bcn_metrics:bool:false' \
|
||||
'use_usta_metrics:bool:false' \
|
||||
'bandsteer:bool:false' \
|
||||
'diffsnr:range(0,100)' \
|
||||
'rcpi_threshold_2g:range(0,220)' \
|
||||
'rcpi_threshold_5g:range(0,220)' \
|
||||
'rcpi_threshold_6g:range(0,220)' \
|
||||
'report_rcpi_threshold_2g:range(0,220)' \
|
||||
'report_rcpi_threshold_5g:range(0,220)' \
|
||||
'report_rcpi_threshold_6g:range(0,220)'
|
||||
'diffsnr:range(0,100)'
|
||||
|
||||
[ "$?" -ne 0 ] && {
|
||||
logger -s -t "mapcontroller" "Validation of sta_steering section failed"
|
||||
@@ -199,7 +193,7 @@ reload_service() {
|
||||
return
|
||||
fi
|
||||
|
||||
pidof "/usr/sbin/mapcontroller" > /dev/null
|
||||
pidof "mapcontroller" > /dev/null
|
||||
if [[ $? -ne 0 ]] ; then
|
||||
start
|
||||
return
|
||||
|
||||
@@ -6,11 +6,11 @@ include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=map-topology
|
||||
PKG_VERSION:=2.5.1.16
|
||||
PKG_VERSION:=2.5.1.14
|
||||
|
||||
LOCAL_DEV:=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_VERSION:=0dbb7c12a183ee9cf88a47f65668113824c76cbd
|
||||
PKG_SOURCE_VERSION:=bacbffccabdc1a388a135daad58db4ca60676b05
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/map-topology.git
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
|
||||
|
||||
@@ -4,4 +4,3 @@ config topology 'topology'
|
||||
option depth '8'
|
||||
option interval '60'
|
||||
option maxlog '32'
|
||||
option profile '2'
|
||||
|
||||
@@ -71,10 +71,6 @@ start_service() {
|
||||
config_load "hosts"
|
||||
validate_hosts_config || return 1;
|
||||
|
||||
if [ -f "/proc/sys/net/netfilter/nf_conntrack_timestamp" ]; then
|
||||
echo 1 >/proc/sys/net/netfilter/nf_conntrack_timestamp
|
||||
fi
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command "/usr/sbin/topologyd"
|
||||
procd_set_param respawn
|
||||
|
||||
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=mcastmngr
|
||||
PKG_VERSION:=1.1.0
|
||||
PKG_VERSION:=1.0.2
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
|
||||
@@ -16,9 +16,8 @@ PKG_LICENSE_FILES:=LICENSE
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/mcastmngr
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=Multicast Proxy/Snooping Manager
|
||||
DEPENDS:=+!TARGET_brcmbca:mcproxy
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=multicast packets manager daemon
|
||||
endef
|
||||
|
||||
define Package/mcastmngr/description
|
||||
@@ -33,12 +32,7 @@ define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/mcastmngr/install
|
||||
$(CP) ./files/common/* $(1)/
|
||||
ifneq ($(CONFIG_TARGET_brcmbca),)
|
||||
$(CP) ./files/broadcom/* $(1)/
|
||||
else
|
||||
$(CP) ./files/linux/* $(1)/
|
||||
endif
|
||||
$(CP) ./files/* $(1)/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,mcastmngr))
|
||||
|
||||
@@ -1,142 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /usr/share/libubox/jshn.sh
|
||||
. /lib/functions.sh
|
||||
|
||||
read_mcast_stats() {
|
||||
cat /proc/net/igmp_snooping > /tmp/igmp_stats
|
||||
local mcast_addrs=""
|
||||
local ifaces=""
|
||||
|
||||
while read line; do
|
||||
# reading each line
|
||||
case $line in
|
||||
br-*)
|
||||
found_iface=0
|
||||
snoop_iface="$(echo $line | awk -F ' ' '{ print $1 }')"
|
||||
if [ -z "$ifaces" ]; then
|
||||
ifaces="$snoop_iface"
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS=" "
|
||||
for ifx in $ifaces; do
|
||||
if [ $ifx == $snoop_iface ]; then
|
||||
found_iface=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $found_iface -eq 0 ]; then
|
||||
ifaces="$ifaces $snoop_iface"
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done < /tmp/igmp_stats
|
||||
|
||||
while read line; do
|
||||
# reading each line
|
||||
case $line in
|
||||
br-*)
|
||||
found_ip=0
|
||||
grp_ip="$(echo $line | awk -F ' ' '{ print $10 }')"
|
||||
if [ -z "$mcast_addrs" ]; then
|
||||
mcast_addrs="$grp_ip"
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS=" "
|
||||
for ip_addr in $mcast_addrs; do
|
||||
if [ $ip_addr == $grp_ip ]; then
|
||||
found_ip=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $found_ip -eq 0 ]; then
|
||||
mcast_addrs="$mcast_addrs $grp_ip"
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done < /tmp/igmp_stats
|
||||
|
||||
json_init
|
||||
json_add_array "snooping"
|
||||
json_add_object ""
|
||||
IFS=" "
|
||||
for intf in $ifaces; do
|
||||
while read line; do
|
||||
# reading each line
|
||||
case $line in
|
||||
br-*)
|
||||
snoop_iface="$(echo $line | awk -F ' ' '{ print $1 }')"
|
||||
if [ "$snoop_iface" != "$intf" ]; then
|
||||
continue
|
||||
fi
|
||||
json_add_string "interface" "$intf"
|
||||
json_add_array "groups"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done < /tmp/igmp_stats
|
||||
IFS=" "
|
||||
for gip_addr in $mcast_addrs; do
|
||||
grp_obj_added=0
|
||||
while read line; do
|
||||
# reading each line
|
||||
case $line in
|
||||
br-*)
|
||||
snoop_iface="$(echo $line | awk -F ' ' '{ print $1 }')"
|
||||
if [ "$snoop_iface" != "$intf" ]; then
|
||||
continue
|
||||
fi
|
||||
grp_ip="$(echo $line | awk -F ' ' '{ print $10 }')"
|
||||
if [ "$grp_ip" != "$gip_addr" ]; then
|
||||
continue
|
||||
fi
|
||||
if [ $grp_obj_added -eq 0 ]; then
|
||||
json_add_object ""
|
||||
gip="$(ipcalc.sh $gip_addr | grep IP | awk '{print substr($0,4)}')"
|
||||
json_add_string "groupaddr" "$gip"
|
||||
json_add_array "clients"
|
||||
grp_obj_added=1
|
||||
fi
|
||||
|
||||
json_add_object ""
|
||||
host_ip="$(echo $line | awk -F ' ' '{ print $14 }')"
|
||||
h_ip="$(ipcalc.sh $host_ip | grep IP | awk '{print substr($0,4)}')"
|
||||
json_add_string "ipaddr" "$h_ip"
|
||||
src_port="$(echo $line | awk -F ' ' '{ print $2 }')"
|
||||
json_add_string "device" "$src_port"
|
||||
timeout="$(echo $line | awk -F ' ' '{ print $15 }')"
|
||||
json_add_int "timeout" "$timeout"
|
||||
json_close_object #close the associated device object
|
||||
;;
|
||||
esac
|
||||
done < /tmp/igmp_stats
|
||||
json_close_array #close the associated devices array
|
||||
json_close_object # close the groups object
|
||||
done # close the loop for group addresses
|
||||
json_close_array #close the groups array
|
||||
done # close the loop for interfaces
|
||||
json_close_object # close the snooping object
|
||||
json_close_array # close the snooping array
|
||||
json_dump
|
||||
|
||||
rm -f /tmp/igmp_stats
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
list)
|
||||
echo '{ "stats":{} }'
|
||||
;;
|
||||
call)
|
||||
case "$2" in
|
||||
stats)
|
||||
read_mcast_stats
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
@@ -420,3 +420,128 @@ configure_mcast() {
|
||||
|
||||
configure_mcpd
|
||||
}
|
||||
|
||||
read_mcast_stats() {
|
||||
cat /proc/net/igmp_snooping > /tmp/igmp_stats
|
||||
local mcast_addrs=""
|
||||
local ifaces=""
|
||||
|
||||
while read line; do
|
||||
# reading each line
|
||||
case $line in
|
||||
br-*)
|
||||
found_iface=0
|
||||
snoop_iface="$(echo $line | awk -F ' ' '{ print $1 }')"
|
||||
if [ -z "$ifaces" ]; then
|
||||
ifaces="$snoop_iface"
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS=" "
|
||||
for ifx in $ifaces; do
|
||||
if [ $ifx == $snoop_iface ]; then
|
||||
found_iface=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $found_iface -eq 0 ]; then
|
||||
ifaces="$ifaces $snoop_iface"
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done < /tmp/igmp_stats
|
||||
|
||||
while read line; do
|
||||
# reading each line
|
||||
case $line in
|
||||
br-*)
|
||||
found_ip=0
|
||||
grp_ip="$(echo $line | awk -F ' ' '{ print $10 }')"
|
||||
if [ -z "$mcast_addrs" ]; then
|
||||
mcast_addrs="$grp_ip"
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS=" "
|
||||
for ip_addr in $mcast_addrs; do
|
||||
if [ $ip_addr == $grp_ip ]; then
|
||||
found_ip=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $found_ip -eq 0 ]; then
|
||||
mcast_addrs="$mcast_addrs $grp_ip"
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done < /tmp/igmp_stats
|
||||
|
||||
json_init
|
||||
json_add_array "snooping"
|
||||
json_add_object ""
|
||||
IFS=" "
|
||||
for intf in $ifaces; do
|
||||
while read line; do
|
||||
# reading each line
|
||||
case $line in
|
||||
br-*)
|
||||
snoop_iface="$(echo $line | awk -F ' ' '{ print $1 }')"
|
||||
if [ "$snoop_iface" != "$intf" ]; then
|
||||
continue
|
||||
fi
|
||||
json_add_string "interface" "$intf"
|
||||
json_add_array "groups"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done < /tmp/igmp_stats
|
||||
IFS=" "
|
||||
for gip_addr in $mcast_addrs; do
|
||||
grp_obj_added=0
|
||||
while read line; do
|
||||
# reading each line
|
||||
case $line in
|
||||
br-*)
|
||||
snoop_iface="$(echo $line | awk -F ' ' '{ print $1 }')"
|
||||
if [ "$snoop_iface" != "$intf" ]; then
|
||||
continue
|
||||
fi
|
||||
grp_ip="$(echo $line | awk -F ' ' '{ print $10 }')"
|
||||
if [ "$grp_ip" != "$gip_addr" ]; then
|
||||
continue
|
||||
fi
|
||||
if [ $grp_obj_added -eq 0 ]; then
|
||||
json_add_object ""
|
||||
gip="$(ipcalc.sh $gip_addr | grep IP | awk '{print substr($0,4)}')"
|
||||
json_add_string "groupaddr" "$gip"
|
||||
json_add_array "clients"
|
||||
grp_obj_added=1
|
||||
fi
|
||||
|
||||
json_add_object ""
|
||||
host_ip="$(echo $line | awk -F ' ' '{ print $14 }')"
|
||||
h_ip="$(ipcalc.sh $host_ip | grep IP | awk '{print substr($0,4)}')"
|
||||
json_add_string "ipaddr" "$h_ip"
|
||||
src_port="$(echo $line | awk -F ' ' '{ print $2 }')"
|
||||
json_add_string "device" "$src_port"
|
||||
timeout="$(echo $line | awk -F ' ' '{ print $15 }')"
|
||||
json_add_int "timeout" "$timeout"
|
||||
json_close_object #close the associated device object
|
||||
;;
|
||||
esac
|
||||
done < /tmp/igmp_stats
|
||||
json_close_array #close the associated devices array
|
||||
json_close_object # close the groups object
|
||||
done # close the loop for group addresses
|
||||
json_close_array #close the groups array
|
||||
done # close the loop for interfaces
|
||||
json_close_object # close the snooping object
|
||||
json_close_array # close the snooping array
|
||||
json_dump
|
||||
|
||||
rm -f /tmp/igmp_stats
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
configure_mcast() {
|
||||
#TODO
|
||||
return 0
|
||||
}
|
||||
18
mcastmngr/files/usr/libexec/rpcd/mcast
Executable file
18
mcastmngr/files/usr/libexec/rpcd/mcast
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /usr/share/libubox/jshn.sh
|
||||
. /lib/functions.sh
|
||||
include /lib/mcast
|
||||
|
||||
case "$1" in
|
||||
list)
|
||||
echo '{ "stats":{} }'
|
||||
;;
|
||||
call)
|
||||
case "$2" in
|
||||
stats)
|
||||
read_mcast_stats
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
@@ -6,22 +6,19 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=obudpst
|
||||
PKG_VERSION:=7.5.1
|
||||
PKG_VERSION:=7.2.1
|
||||
PKG_SOURCE_VERSION:=9c448095c9773bd7e5cea143af07817ad9f3c6ba
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/BroadbandForum/obudpst.git
|
||||
PKG_SOURCE_VERSION:=a8faf1925ea9189467e7f8d3b9d93c67c8b927bd
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
|
||||
CMAKE_OPTIONS += -DDISABLE_INT_TIMER=ON
|
||||
|
||||
define Package/obudpst
|
||||
CATEGORY:=Utilities
|
||||
DEPENDS+=+libopenssl
|
||||
@@ -42,10 +39,4 @@ define Package/obudpst/install
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/udpst $(1)/usr/sbin/udpst
|
||||
endef
|
||||
|
||||
define Host/Install
|
||||
$(INSTALL_DIR) $(STAGING_DIR_HOST)/obudpst
|
||||
$(CP) $(HOST_BUILD_DIR)/udpst $(STAGING_DIR_HOST)/obudpst/
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
$(eval $(call BuildPackage,obudpst))
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=obuspa
|
||||
PKG_VERSION:=7.0.0.3
|
||||
PKG_VERSION:=6.0.0.14
|
||||
|
||||
LOCAL_DEV:=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/fork/obuspa.git
|
||||
PKG_SOURCE_VERSION:=82bd0837c950b0c87572fce1ae58addd7b47cc4a
|
||||
PKG_SOURCE_VERSION:=3df3346238a9eef2168fddadcef01ebe311053e4
|
||||
PKG_MAINTAINER:=Vivek Dutta <vivek.dutta@iopsys.eu>
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
config obuspa 'global'
|
||||
option enabled '1'
|
||||
option debug '0'
|
||||
option debug '1'
|
||||
option log_level '1'
|
||||
option prototrace '0'
|
||||
option db_file '/etc/obuspa/usp.db'
|
||||
|
||||
140
obuspa/patches/0001-validate-mtp-topic.patch
Normal file
140
obuspa/patches/0001-validate-mtp-topic.patch
Normal file
@@ -0,0 +1,140 @@
|
||||
diff --git a/src/core/device.h b/src/core/device.h
|
||||
index adf8fa6..072f953 100644
|
||||
--- a/src/core/device.h
|
||||
+++ b/src/core/device.h
|
||||
@@ -111,6 +111,7 @@ typedef struct
|
||||
// Following member variables only set if USP message was received over MQTT
|
||||
int mqtt_instance;
|
||||
char *mqtt_topic; // only set if reply_to was specified in the received MQTT packet
|
||||
+ char *mqtt_topic_recv;
|
||||
|
||||
|
||||
// Following member variables only set if USP message was received over CoAP
|
||||
@@ -252,7 +253,7 @@ void DEVICE_MTP_NotifyMqttConnDeleted(int mqtt_instance);
|
||||
int DEVICE_MTP_ValidateMqttReference(dm_req_t *req, char *value);
|
||||
void DEVICE_CONTROLLER_SetRolesFromMqtt(int mqtt_instance, ctrust_role_t role);
|
||||
char *DEVICE_CONTROLLER_GetControllerTopic(int mqtt_instance);
|
||||
-
|
||||
+int validate_controller_topic_by_endpointid(char *endpointid, mtp_protocol_t proto, char *recv_topic);
|
||||
//------------------------------------------------------------------------------
|
||||
// Tables used to convert to/from an enumeration to/from a string
|
||||
extern const enum_entry_t mtp_protocols[kMtpProtocol_Max];
|
||||
diff --git a/src/core/device_controller.c b/src/core/device_controller.c
|
||||
index 62c803f..103388d 100755
|
||||
--- a/src/core/device_controller.c
|
||||
+++ b/src/core/device_controller.c
|
||||
@@ -239,6 +239,41 @@ int Async_E2ESessionReset(dm_req_t *req, kv_vector_t *input_args, int request);
|
||||
extern const enum_entry_t e2e_session_modes[kE2EMode_Max];
|
||||
#endif
|
||||
|
||||
+
|
||||
+int validate_controller_topic_by_endpointid(char *endpointid, mtp_protocol_t proto, char *recv_topic)
|
||||
+{
|
||||
+ controller_t *cont = FindEnabledControllerByEndpointId(endpointid);
|
||||
+ if (cont == NULL)
|
||||
+ {
|
||||
+ USP_LOG_Error("not able to find the controller from endpointid [%s]", endpointid);
|
||||
+ return USP_ERR_PERMISSION_DENIED;
|
||||
+ }
|
||||
+#ifdef ENABLE_MQTT
|
||||
+ if (proto == kMtpProtocol_MQTT)
|
||||
+ {
|
||||
+ controller_mtp_t *mtp = FindFirstEnabledMtp(cont, proto);
|
||||
+
|
||||
+ if (mtp == NULL) {
|
||||
+ USP_LOG_Error("Not able to find mtp[%d] for endpointid [%s]", proto, endpointid);
|
||||
+ return USP_ERR_REQUEST_DENIED;
|
||||
+ }
|
||||
+
|
||||
+ if (mtp->protocol != proto) {
|
||||
+ USP_LOG_Error("No matching mtp[%d] for endpointid [%s]", proto, endpointid);
|
||||
+ return USP_ERR_REQUEST_DENIED;
|
||||
+ }
|
||||
+
|
||||
+ char *response_topic = DEVICE_MTP_GetAgentMqttResponseTopic(mtp->mqtt_connection_instance);
|
||||
+ if (response_topic && strcmp(response_topic, recv_topic) != 0 ) {
|
||||
+ USP_LOG_Error("Controller response topic[%s] and recv topic[%s] mismatch, probably a spoof message", response_topic, recv_topic);
|
||||
+ return USP_ERR_PERMISSION_DENIED;
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ return USP_ERR_OK;
|
||||
+}
|
||||
+
|
||||
/*********************************************************************//**
|
||||
**
|
||||
** DEVICE_CONTROLLER_Init
|
||||
diff --git a/src/core/dm_exec.c b/src/core/dm_exec.c
|
||||
index c0b95d8..6eb51e2 100755
|
||||
--- a/src/core/dm_exec.c
|
||||
+++ b/src/core/dm_exec.c
|
||||
@@ -624,6 +624,7 @@ void DM_EXEC_PostUspRecord(unsigned char *pbuf, int pbuf_len, ctrust_role_t role
|
||||
pur->mtp_reply_to.coap_encryption = mrt->coap_encryption;
|
||||
pur->mtp_reply_to.coap_reset_session_hint = mrt->coap_reset_session_hint;
|
||||
pur->mtp_reply_to.mqtt_topic = USP_STRDUP(mrt->mqtt_topic);
|
||||
+ pur->mtp_reply_to.mqtt_topic_recv = USP_STRDUP(mrt->mqtt_topic_recv);
|
||||
pur->mtp_reply_to.mqtt_instance = mrt->mqtt_instance;
|
||||
pur->mtp_reply_to.wsclient_cont_instance = mrt->wsclient_cont_instance;
|
||||
pur->mtp_reply_to.wsclient_mtp_instance = mrt->wsclient_mtp_instance;
|
||||
@@ -1144,6 +1145,7 @@ void ProcessMessageQueueSocketActivity(socket_set_t *set)
|
||||
USP_SAFE_FREE(mrt->coap_resource);
|
||||
USP_SAFE_FREE(mrt->mqtt_topic);
|
||||
USP_SAFE_FREE(mrt->cont_endpoint_id);
|
||||
+ USP_SAFE_FREE(mrt->mqtt_topic_recv);
|
||||
break;
|
||||
|
||||
#ifndef DISABLE_STOMP
|
||||
diff --git a/src/core/mqtt.c b/src/core/mqtt.c
|
||||
index 7dba9f4..3ee9c97 100644
|
||||
--- a/src/core/mqtt.c
|
||||
+++ b/src/core/mqtt.c
|
||||
@@ -3141,6 +3141,7 @@ void ReceiveMqttMessage(mqtt_client_t *client, const struct mosquitto_message *m
|
||||
mrt.mqtt_topic = response_topic;
|
||||
}
|
||||
|
||||
+ mrt.mqtt_topic_recv = message->topic;
|
||||
// Message may not be valid USP
|
||||
DM_EXEC_PostUspRecord(message->payload, message->payloadlen, client->role, &mrt);
|
||||
}
|
||||
diff --git a/src/core/msg_handler.c b/src/core/msg_handler.c
|
||||
index ce67626..4af9ade 100644
|
||||
--- a/src/core/msg_handler.c
|
||||
+++ b/src/core/msg_handler.c
|
||||
@@ -118,7 +118,7 @@ static enum_entry_t mtp_content_types[] = {
|
||||
//------------------------------------------------------------------------------
|
||||
// Forward declarations. Note these are not static, because we need them in the symbol table for USP_LOG_Callstack() to show them
|
||||
int HandleUspMessage(Usp__Msg *usp, char *controller_endpoint, mtp_reply_to_t *mrt);
|
||||
-int ValidateUspRecord(UspRecord__Record *rec);
|
||||
+int ValidateUspRecord(UspRecord__Record *rec, mtp_reply_to_t *mrt);
|
||||
char *MtpSendItemToString(mtp_send_item_t *msi);
|
||||
void CacheControllerRoleForCurMsg(char *endpoint_id, ctrust_role_t role, mtp_protocol_t protocol);
|
||||
int QueueUspNoSessionRecord(usp_send_item_t *usi, char *endpoint_id, char *usp_msg_id, mtp_reply_to_t *mrt, time_t expiry_time);
|
||||
@@ -172,7 +172,7 @@ int MSG_HANDLER_HandleBinaryRecord(unsigned char *pbuf, int pbuf_len, ctrust_rol
|
||||
#endif
|
||||
|
||||
// Exit if USP record failed validation
|
||||
- err = ValidateUspRecord(rec);
|
||||
+ err = ValidateUspRecord(rec, mrt);
|
||||
if (err != USP_ERR_OK)
|
||||
{
|
||||
goto exit;
|
||||
@@ -725,7 +725,7 @@ exit:
|
||||
** \return USP_ERR_OK if record is valid
|
||||
**
|
||||
**************************************************************************/
|
||||
-int ValidateUspRecord(UspRecord__Record *rec)
|
||||
+int ValidateUspRecord(UspRecord__Record *rec, mtp_reply_to_t *mrt)
|
||||
{
|
||||
char *endpoint_id;
|
||||
|
||||
@@ -806,6 +806,9 @@ int ValidateUspRecord(UspRecord__Record *rec)
|
||||
return USP_ERR_REQUEST_DENIED;
|
||||
}
|
||||
|
||||
+#if OBUSPA_CONTROLLER_MTP_VERIFY
|
||||
+ return validate_controller_topic_by_endpointid(rec->from_id, mrt->protocol, mrt->mqtt_topic_recv);
|
||||
+#endif
|
||||
// If the code gets here, then the USP record passed validation, and the encapsulated USP message may be processed
|
||||
return USP_ERR_OK;
|
||||
}
|
||||
@@ -20,7 +20,7 @@
|
||||
void DM_PRIV_RequestInit(dm_req_t *req, dm_node_t *node, char *path, dm_instances_t *inst);
|
||||
--- a/src/core/msg_handler.c
|
||||
+++ b/src/core/msg_handler.c
|
||||
@@ -893,6 +893,20 @@ char *MtpSendItemToString(mtp_send_item_
|
||||
@@ -839,6 +839,20 @@ char *MtpSendItemToString(mtp_send_item_
|
||||
|
||||
/*********************************************************************//**
|
||||
**
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
--- a/src/core/data_model.c
|
||||
+++ b/src/core/data_model.c
|
||||
@@ -1239,7 +1239,7 @@ int DATA_MODEL_NotifyInstanceAdded(char
|
||||
// Exit if instance already exists - nothing to do
|
||||
if (exists)
|
||||
{
|
||||
- USP_ERR_SetMessage("%s: Object (%s) already exists in the data model", __FUNCTION__, path);
|
||||
+ // USP_ERR_SetMessage("%s: Object (%s) already exists in the data model", __FUNCTION__, path);
|
||||
return USP_ERR_CREATION_FAILURE;
|
||||
}
|
||||
|
||||
@@ -1324,7 +1324,7 @@ int DATA_MODEL_NotifyInstanceDeleted(cha
|
||||
// Exit if instance does not exist - nothing to do
|
||||
if (exists == false)
|
||||
{
|
||||
- USP_ERR_SetMessage("%s: Object (%s) does not exist in the data model", __FUNCTION__, path);
|
||||
+ // USP_ERR_SetMessage("%s: Object (%s) does not exist in the data model", __FUNCTION__, path);
|
||||
return USP_ERR_OBJECT_DOES_NOT_EXIST;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
"Device.XPON.": {
|
||||
"type": "object",
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"access": false,
|
||||
@@ -14,7 +13,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedInt",
|
||||
@@ -33,7 +31,6 @@
|
||||
"Device.XPON.ONU.{i}.": {
|
||||
"type": "object",
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"access": false,
|
||||
@@ -54,7 +51,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "boolean",
|
||||
@@ -71,7 +67,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
@@ -93,7 +88,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
@@ -115,7 +109,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedInt",
|
||||
@@ -126,7 +119,7 @@
|
||||
"object": "xpon",
|
||||
"method": "status",
|
||||
"args": {},
|
||||
"key": "ONU[@index].SoftwareImage.@Count"
|
||||
"key": "ONU[@index].softwareImage.@Count"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -136,7 +129,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedInt",
|
||||
@@ -157,7 +149,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedInt",
|
||||
@@ -173,31 +164,9 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"TransceiverNumberOfEntries": {
|
||||
"type": "unsignedInt",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedInt",
|
||||
"mapping": [
|
||||
{
|
||||
"type": "ubus",
|
||||
"ubus": {
|
||||
"object": "xpon",
|
||||
"method": "status",
|
||||
"args": {},
|
||||
"key": "ONU[@index].Transceiver.@Count"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"Device.XPON.ONU.{i}.SoftwareImage.{i}.": {
|
||||
"type": "object",
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"access": false,
|
||||
@@ -209,7 +178,7 @@
|
||||
"object": "xpon",
|
||||
"method": "status",
|
||||
"args": {},
|
||||
"key": "ONU[@index].SoftwareImage"
|
||||
"key": "ONU[@index].softwareImage"
|
||||
}
|
||||
}
|
||||
],
|
||||
@@ -218,7 +187,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedInt",
|
||||
@@ -241,7 +209,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
@@ -263,7 +230,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "boolean",
|
||||
@@ -280,7 +246,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "boolean",
|
||||
@@ -297,7 +262,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "boolean",
|
||||
@@ -313,7 +277,6 @@
|
||||
"Device.XPON.ONU.{i}.EthernetUNI.{i}.": {
|
||||
"type": "object",
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"access": false,
|
||||
@@ -334,7 +297,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "boolean",
|
||||
@@ -351,7 +313,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
@@ -377,7 +338,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
@@ -399,7 +359,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
@@ -421,7 +380,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
@@ -441,7 +399,6 @@
|
||||
"Device.XPON.ONU.{i}.EthernetUNI.{i}.Stats.": {
|
||||
"type": "object",
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"access": false,
|
||||
@@ -458,7 +415,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedLong",
|
||||
@@ -475,7 +431,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedLong",
|
||||
@@ -492,7 +447,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedLong",
|
||||
@@ -509,7 +463,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedLong",
|
||||
@@ -526,7 +479,6 @@
|
||||
"Device.XPON.ONU.{i}.ANI.{i}.": {
|
||||
"type": "object",
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"access": false,
|
||||
@@ -547,7 +499,6 @@
|
||||
"read": true,
|
||||
"write": true,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "boolean",
|
||||
@@ -578,7 +529,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
@@ -603,7 +553,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
@@ -624,7 +573,6 @@
|
||||
"Device.XPON.ONU.{i}.ANI.{i}.Stats.": {
|
||||
"type": "object",
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"access": false,
|
||||
@@ -641,7 +589,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedLong",
|
||||
@@ -658,7 +605,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedLong",
|
||||
@@ -675,7 +621,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedLong",
|
||||
@@ -692,7 +637,6 @@
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedLong",
|
||||
@@ -704,347 +648,6 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Device.XPON.ONU.{i}.ANI.{i}.TC.": {
|
||||
"type": "object",
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"access": false,
|
||||
"array": false,
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "TC"
|
||||
}
|
||||
],
|
||||
"Device.XPON.ONU.{i}.ANI.{i}.TC.ONUActivation.": {
|
||||
"type": "object",
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"access": false,
|
||||
"array": false,
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "TC.ONUActivation"
|
||||
}
|
||||
],
|
||||
"ONUState": {
|
||||
"type": "string",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "TC.ONUActivation.ONUState"
|
||||
}
|
||||
]
|
||||
},
|
||||
"VendorID": {
|
||||
"type": "string",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "TC.ONUActivation.VendorID"
|
||||
}
|
||||
]
|
||||
},
|
||||
"SerialNumber": {
|
||||
"type": "string",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "TC.ONUActivation.SerialNumber"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ONUID": {
|
||||
"type": "unsignedInt",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedInt",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "TC.ONUActivation.ONUID"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Device.XPON.ONU.{i}.Transceiver.{i}.": {
|
||||
"type": "object",
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"access": false,
|
||||
"array": true,
|
||||
"mapping": [
|
||||
{
|
||||
"type": "ubus",
|
||||
"ubus": {
|
||||
"object": "xpon",
|
||||
"method": "status",
|
||||
"args": {},
|
||||
"key": "ONU[@index].Transceiver"
|
||||
}
|
||||
}
|
||||
],
|
||||
"ID": {
|
||||
"type": "unsignedInt",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedInt",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "ID"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Identifier": {
|
||||
"type": "unsignedInt",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedInt",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "Identifier"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ModuleVendor": {
|
||||
"type": "string",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "ModuleVendor"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ModuleName": {
|
||||
"type": "string",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "ModuleName"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ModuleVersion": {
|
||||
"type": "string",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "ModuleVersion"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ModuleFirmwareVersion": {
|
||||
"type": "string",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "ModuleFirmwareVersion"
|
||||
}
|
||||
]
|
||||
},
|
||||
"PONMode": {
|
||||
"type": "string",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "PONMode"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Connector": {
|
||||
"type": "string",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "string",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "connector"
|
||||
}
|
||||
]
|
||||
},
|
||||
"RxPower": {
|
||||
"type": "int",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "int",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "RxPower"
|
||||
}
|
||||
]
|
||||
},
|
||||
"TxPower": {
|
||||
"type": "int",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "int",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "TxPower"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Voltage": {
|
||||
"type": "unsignedInt",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedInt",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "Voltage"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Bias": {
|
||||
"type": "unsignedInt",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "unsignedInt",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "Bias"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Temperature": {
|
||||
"type": "int",
|
||||
"read": true,
|
||||
"write": false,
|
||||
"protocols": [
|
||||
"cwmp",
|
||||
"usp"
|
||||
],
|
||||
"datatype": "int",
|
||||
"mapping": [
|
||||
{
|
||||
"data": "@Parent",
|
||||
"type": "json",
|
||||
"key": "Temperature"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,12 +6,12 @@ include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=qosmngr
|
||||
PKG_VERSION:=1.0.5
|
||||
PKG_VERSION:=1.0.4
|
||||
|
||||
LOCAL_DEV:=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=56ebfed11f8f2eb376afda02ebac929c5ad4ee9b
|
||||
PKG_SOURCE_VERSION:=e3d608e4bacd367fed99bcdd7f56b3fba7b02891
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/qosmngr.git
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
ethwan="$(db -q get hw.board.ethernetWanPort)"
|
||||
|
||||
populate_no_of_queue(){
|
||||
queue_num=8
|
||||
local queue_num=$(get_no_of_queue "airoha")
|
||||
|
||||
# writing no. of queue per port into file and read on classify generate
|
||||
if [ ! -d "/tmp/qos" ]; then
|
||||
@@ -26,7 +26,7 @@ generate_queue(){
|
||||
fi
|
||||
|
||||
# guaranteed number of queues
|
||||
no_of_q="0 1 2 3 4 5 6 7"
|
||||
no_of_q="0 1 2 3"
|
||||
|
||||
i=0
|
||||
local total_q=$((${no_of_q##* } + 1))
|
||||
@@ -61,4 +61,3 @@ touch /etc/config/qos
|
||||
# generate qos queue config
|
||||
config_load ports
|
||||
config_foreach generate_queue ethport
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ hw_intf_init() {
|
||||
# Initialize the hardware setup library
|
||||
hw_init_all() {
|
||||
export TMP_HW_QUEUE_LIST=""
|
||||
export TMP_HW_QUEUE_MASK="0"
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -57,10 +58,7 @@ hw_queue_set() {
|
||||
export TMP_HW_QUEUE_${order}_rate="${rate}"
|
||||
export TMP_HW_QUEUE_${order}_burstsize="${burstsize}"
|
||||
export TMP_HW_QUEUE_LIST="${TMP_HW_QUEUE_LIST} ${order}"
|
||||
|
||||
if [ "${rate}" != "" ] && [ $(($rate != 0)) ] ; then
|
||||
errmsg "Per-queue shape rate is not implemented"
|
||||
fi
|
||||
export TMP_HW_QUEUE_MASK="$((TMP_HW_QUEUE_MASK | 1 << index))"
|
||||
|
||||
return 0
|
||||
}
|
||||
@@ -148,8 +146,8 @@ hw_commit_all() {
|
||||
local weight_list=""
|
||||
local glob_alg=""
|
||||
local shape_rate="$TMP_HW_SHAPE_RATE"
|
||||
local queue_mask="$TMP_HW_QUEUE_MASK"
|
||||
local q_count="0"
|
||||
local mac_qos_flag=""
|
||||
|
||||
# Reorder queues
|
||||
for q in ${sorted_list} ; do
|
||||
@@ -165,36 +163,27 @@ hw_commit_all() {
|
||||
|
||||
case "${sc_alg}" in
|
||||
WRR)
|
||||
if [ $(($q_count >= 8)) != 0 ] ; then
|
||||
if [ $(($q_count >= 4)) != 0 ] ; then
|
||||
errmsg "Too many queues, next queues will be ignored"
|
||||
else
|
||||
weight_list="$weight_list $wgt"
|
||||
fi
|
||||
q_count=$((q_count + 1))
|
||||
;;
|
||||
esac
|
||||
|
||||
q_count=$((q_count + 1))
|
||||
done
|
||||
|
||||
case "${glob_alg}" in
|
||||
WRR)
|
||||
mac_qos_flag="8QWRR"
|
||||
while [ $((q_count < 8)) != 0 ] ; do
|
||||
weight_list="$weight_list 1"
|
||||
q_count=$((q_count + 1))
|
||||
done
|
||||
;;
|
||||
SP)
|
||||
mac_qos_flag="8QPQ"
|
||||
q_count="8"
|
||||
;;
|
||||
esac
|
||||
if [ "${glob_alg}" == "WRR" ] ; then
|
||||
while [ $((q_count < 4)) != 0 ] ; do
|
||||
weight_list="$weight_list 1"
|
||||
q_count=$((q_count + 1))
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "${glob_alg}" != "" ] ; then
|
||||
/userfs/bin/qosrule discpline $(hw_sc_alg2str ${glob_alg}) ${weight_list} \
|
||||
uplink-bandwidth ${shape_rate:-10000000} \
|
||||
queuemask "$(((1 << q_count) - 1))"
|
||||
echo ${mac_qos_flag} > /proc/qdma_wan/mac_qos_flag
|
||||
uplink-bandwidth ${shape_rate:-0} \
|
||||
queuemask $queue_mask
|
||||
else
|
||||
/userfs/bin/qosrule discpline Enable 0
|
||||
fi
|
||||
|
||||
@@ -117,9 +117,9 @@ broute_filter_on_vid() {
|
||||
}
|
||||
|
||||
broute_rule_set_traffic_class() {
|
||||
BR_RULE="$BR_RULE -j mark --mark-or 0x${1}0 --mark-target ACCEPT"
|
||||
BR_RULE="$BR_RULE -j mark --mark-or 0x$1 --mark-target ACCEPT"
|
||||
if [ -n "$BR6_RULE" ]; then
|
||||
BR6_RULE="$BR6_RULE -j mark --mark-or 0x${1}0 --mark-target ACCEPT"
|
||||
BR6_RULE="$BR6_RULE -j mark --mark-or 0x$1 --mark-target ACCEPT"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
#!/bin/sh
|
||||
# Common classifier library
|
||||
|
||||
#counter variable to assign classify order value if not added in config
|
||||
temp_order=1
|
||||
|
||||
# Function to handle a classify order
|
||||
handle_classify_order() {
|
||||
local cid="$1" #classify section ID
|
||||
# Handle classify section
|
||||
handle_classify() {
|
||||
cid="$1" #classify section ID
|
||||
|
||||
config_get is_enable "$cid" "enable" 1
|
||||
# no need to configure disabled classify rules
|
||||
@@ -14,53 +11,11 @@ handle_classify_order() {
|
||||
return
|
||||
fi
|
||||
|
||||
# Create classify file containing classify order
|
||||
local corder_file="/tmp/qos/classify.order"
|
||||
|
||||
config_get c_order "$cid" "order"
|
||||
|
||||
if [ -z "$c_order" ]; then
|
||||
c_order=$temp_order;
|
||||
temp_order=$((temp_order + 1))
|
||||
fi
|
||||
|
||||
value=${c_order}_${cid}
|
||||
echo $value >> $corder_file
|
||||
handle_ebtables_rules "$cid"
|
||||
handle_iptables_rules "$cid"
|
||||
handle_policer_rules "$cid"
|
||||
}
|
||||
|
||||
# Sort classify, lower value in uci means higher precedence, so this
|
||||
# function sorts the classify order in assending order
|
||||
sort_classify_by_order() {
|
||||
local corder_file="/tmp/qos/classify.order"
|
||||
local tmp_corder_file="/tmp/qos/tmp_classify.order"
|
||||
|
||||
sort -n -k1 $corder_file > $tmp_corder_file
|
||||
cp $tmp_corder_file $corder_file
|
||||
rm -f $tmp_corder_file
|
||||
}
|
||||
|
||||
# Handle classify section
|
||||
handle_classify() {
|
||||
|
||||
local corder_file="/tmp/qos/classify.order"
|
||||
|
||||
while read -r line; do
|
||||
line_cid=$(echo $line | cut -d '_' -f 2)
|
||||
|
||||
# add ip rule only for classify rules which has non empty
|
||||
# value forwarding policy option
|
||||
# if forwarding policy option value empty then add iptables/
|
||||
# ip6tables/ebtables/rate_limit rules
|
||||
config_get fwding_policy "$line_cid" "forwarding_policy"
|
||||
if [ -n "$fwding_policy" ]; then
|
||||
handle_ip_rule $line_cid $fwding_policy
|
||||
else
|
||||
handle_ebtables_rules $line_cid
|
||||
handle_iptables_rules $line_cid
|
||||
handle_policer_rules $line_cid
|
||||
fi
|
||||
done < "$corder_file"
|
||||
}
|
||||
|
||||
# Configure classifier based on UCI subtree 'qos.classify'
|
||||
configure_classify() {
|
||||
@@ -69,34 +24,21 @@ configure_classify() {
|
||||
rm -f /tmp/qos/classify.ebtables
|
||||
rm -f /tmp/qos/classify.iptables
|
||||
rm -f /tmp/qos/classify.ip6tables
|
||||
rm -f /tmp/qos/classify.order
|
||||
rm -f /tmp/qos/tmp_classify.order
|
||||
rm -f /tmp/qos/classify.iprule
|
||||
|
||||
# Create files that will contain the rules if not present already
|
||||
mkdir -p /tmp/qos/
|
||||
touch /tmp/qos/classify.iptables
|
||||
touch /tmp/qos/classify.ip6tables
|
||||
touch /tmp/qos/classify.ebtables
|
||||
touch /tmp/qos/classify.order
|
||||
touch /tmp/qos/tmp_classify.order
|
||||
touch /tmp/qos/classify.iprule
|
||||
|
||||
# Add flush chain rules
|
||||
flush_chains
|
||||
|
||||
#flush added ip rule
|
||||
flush_ip_rule
|
||||
|
||||
# Load UCI file
|
||||
config_load qos
|
||||
config_foreach handle_classify_order classify
|
||||
sort_classify_by_order
|
||||
handle_classify
|
||||
config_foreach handle_classify classify
|
||||
|
||||
sh /tmp/qos/classify.ebtables
|
||||
sh /tmp/qos/classify.iptables
|
||||
sh /tmp/qos/classify.ip6tables
|
||||
sh /tmp/qos/classify.iprule
|
||||
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,6 @@ include /lib/ethernet
|
||||
. /lib/qos/common/queue.sh
|
||||
. /lib/qos/common/shaper.sh
|
||||
. /lib/qos/airoha.sh
|
||||
. /lib/qos/ip_rule.sh
|
||||
|
||||
configure_qos() {
|
||||
# queue configuration is being done after shaper configuration,
|
||||
@@ -26,6 +25,36 @@ configure_qos() {
|
||||
configure_classify
|
||||
}
|
||||
|
||||
get_no_of_queue() {
|
||||
platform_name=$1
|
||||
cpu_model=$2
|
||||
|
||||
if [ -z "$platform_name" ];then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$platform_name" == "airoha" ]; then
|
||||
queue_num=4
|
||||
echo "Fix: airohai no_of_queue: $queue_num"
|
||||
elif [ "$platform_name" == "broadcom" ]; then
|
||||
if [[ $cpu_model == "BCM68"* ]]; then
|
||||
queue_num=4
|
||||
echo "Fix: broadcom bcm no_of_queue: $queue_num"
|
||||
elif grep -qE '[0-9]+ archer$' /proc/devices; then
|
||||
queue_num=4
|
||||
echo "Fix: broadcom arcee no_of_queue: $queue_num"
|
||||
else
|
||||
queue_num=8
|
||||
echo "Fix: broadcom else no_of_queue: $queue_num"
|
||||
fi
|
||||
elif [ "$platform_name" == "linux" ]; then
|
||||
queue_num=8
|
||||
echo "Fix: linux no_of_queue: $queue_num"
|
||||
fi
|
||||
|
||||
echo $queue_num
|
||||
}
|
||||
|
||||
reload_qos() {
|
||||
local service_name="$1"
|
||||
|
||||
|
||||
@@ -4,17 +4,10 @@
|
||||
|
||||
ethwan="$(db -q get hw.board.ethernetWanPort)"
|
||||
cpu_model="$(cat /proc/socinfo | grep 'SoC Name' | cut -d':' -f2)"
|
||||
|
||||
queue_num=8
|
||||
queue_num=0
|
||||
|
||||
populate_no_of_queue(){
|
||||
case $cpu_model in
|
||||
BCM68[3,4,5]*) queue_num=4 ;;
|
||||
esac
|
||||
if grep -qE '[0-9]+ archer$' /proc/devices; then
|
||||
queue_num=4
|
||||
fi
|
||||
|
||||
queue_num=$(get_no_of_queue "broadcom")
|
||||
# writing no. of queue per port into file and read on classify generate
|
||||
if [ ! -d "/tmp/qos" ]; then
|
||||
mkdir -p "/tmp/qos"
|
||||
|
||||
@@ -2,9 +2,6 @@
|
||||
. /lib/functions.sh
|
||||
include /lib/ethernet
|
||||
|
||||
# include common code
|
||||
. /lib/qos/ip_rule.sh
|
||||
|
||||
IP_RULE=""
|
||||
BR_RULE=""
|
||||
BR6_RULE=""
|
||||
@@ -645,7 +642,7 @@ handle_ebtables_rules() {
|
||||
*)
|
||||
if [ -n "$protocol" ] || [ -n "$dscp_filter" ]; then
|
||||
ip_version=1 #neither ether_type nor ip address used
|
||||
#ethertype is not configured by user so install
|
||||
#ethertype is not configured by user so install
|
||||
#both proto ipv4 and ipv6 rule
|
||||
BR6_RULE="$BR_RULE"
|
||||
broute_filter_on_ether_type "IPv4"
|
||||
@@ -812,7 +809,7 @@ handle_iptables_rules() {
|
||||
|
||||
init_iptables_rule
|
||||
config_get proto "$cid" "proto"
|
||||
config_get traffic_class "$cid" "traffic_class"
|
||||
config_get traffic_class "$sid" "traffic_class"
|
||||
config_get dscp_mark "$cid" "dscp_mark"
|
||||
config_get dscp_filter "$cid" "dscp_filter"
|
||||
config_get dest_port "$cid" "dest_port"
|
||||
@@ -932,12 +929,21 @@ assign_policer_to_port() {
|
||||
local ifname="$1"
|
||||
local pindex="$2"
|
||||
local portorder="$(db -q get hw.board.ethernetPortOrder)"
|
||||
local wanport="$(db -q get hw.board.ethernetWanPort)"
|
||||
local runner_lan_ports="$(bdmf_shell -c `cat /var/bdmf_sh_id` -cmd /b/examine port | grep ': port/index=lan' | sed -e 's#\.##g' | cut -f2 -d' ' | sort -u | xargs)"
|
||||
local i=1
|
||||
|
||||
for port in $portorder; do
|
||||
if [ "$ifname" == "$port" ]; then
|
||||
bdmf_shell -c `cat /var/bdmf_sh_id` -cmd /b/configure port/name=$port ingress_rate_limit={traffic_types=8,policer={policer/dir=us,index=$pindex}}
|
||||
if [ "$wanport" == "$port" ]; then
|
||||
bdmf_shell -c `cat /var/bdmf_sh_id` -cmd /b/configure port/index=wan0 ingress_rate_limit={traffic_types=8,policer={policer/dir=us,index=$pindex}}
|
||||
else
|
||||
local lanport="$(echo -n "$runner_lan_ports" | cut -f${i} -d' ')"
|
||||
bdmf_shell -c `cat /var/bdmf_sh_id` -cmd /b/configure $lanport ingress_rate_limit={traffic_types=8,policer={policer/dir=us,index=$pindex}}
|
||||
fi
|
||||
break
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
}
|
||||
|
||||
@@ -1054,24 +1060,21 @@ sort_classify_by_order() {
|
||||
|
||||
#function to handle a classify section
|
||||
handle_classify() {
|
||||
cid="$1" #classify section ID
|
||||
|
||||
config_get is_enable "$cid" "enable"
|
||||
# no need to configure disabled classify rules
|
||||
if [ "$is_enable" == '0' ]; then
|
||||
return
|
||||
fi
|
||||
local corder_file="/tmp/qos/classify.order"
|
||||
|
||||
while read -r line; do
|
||||
line_cid=${line#*_}
|
||||
line_cid=$(echo $line | cut -d '_' -f 2)
|
||||
|
||||
# add ip rule only for classify rules which has non empty
|
||||
# value forwarding policy option
|
||||
# if forwarding policy option value empty then add iptables/
|
||||
# ip6tables/ebtables/rate_limit rules
|
||||
config_get fwding_policy "$line_cid" "forwarding_policy"
|
||||
if [ -n "$fwding_policy" ]; then
|
||||
handle_ip_rule $line_cid $fwding_policy
|
||||
else
|
||||
handle_ebtables_rules $line_cid
|
||||
handle_iptables_rules $line_cid
|
||||
handle_policer_rules $line_cid
|
||||
fi
|
||||
handle_ebtables_rules $line_cid
|
||||
handle_iptables_rules $line_cid
|
||||
handle_policer_rules $line_cid
|
||||
done < "$corder_file"
|
||||
}
|
||||
|
||||
@@ -1094,7 +1097,6 @@ configure_classify() {
|
||||
rm -f /tmp/qos/classify.ip6tables
|
||||
rm -f /tmp/qos/classify.order
|
||||
rm -f /tmp/qos/tmp_classify.order
|
||||
rm -f /tmp/qos/classify.iprule
|
||||
|
||||
#create files that will contain the rules if not present already
|
||||
mkdir -p /tmp/qos/
|
||||
@@ -1103,25 +1105,19 @@ configure_classify() {
|
||||
touch /tmp/qos/classify.ebtables
|
||||
touch /tmp/qos/classify.order
|
||||
touch /tmp/qos/tmp_classify.order
|
||||
touch /tmp/qos/classify.iprule
|
||||
|
||||
#add flush chain rules
|
||||
flush_chains
|
||||
|
||||
#flush added ip rule
|
||||
flush_ip_rule
|
||||
|
||||
# Load UCI file
|
||||
config_load qos
|
||||
config_foreach handle_classify_order classify
|
||||
sort_classify_by_order
|
||||
handle_classify
|
||||
handle_classify classify
|
||||
|
||||
sh /tmp/qos/classify.ebtables
|
||||
sh /tmp/qos/classify.iptables
|
||||
sh /tmp/qos/classify.ip6tables
|
||||
sh /tmp/qos/classify.iprule
|
||||
|
||||
# broadcom recommends that each time traffic class is set,
|
||||
# the flows should be flushed for the new mapping to take
|
||||
# effect, it then makes sense to make it a part of the
|
||||
@@ -1222,6 +1218,7 @@ configure_qos() {
|
||||
|
||||
reload_qos() {
|
||||
local service_name="$1"
|
||||
local cpu_model="$(cat /proc/socinfo | grep 'SoC Name' | cut -d':' -f2)"
|
||||
|
||||
if [ -z "$service_name" ]; then
|
||||
configure_qos
|
||||
@@ -1375,7 +1372,7 @@ reload_qos_service() {
|
||||
fi
|
||||
if [ "$policer" == "true" ]; then
|
||||
reload_qos "policer"
|
||||
# change in policer config may need reconfiguration
|
||||
# change in policer config may need reconfiguration
|
||||
# of classifier
|
||||
reload_qos "classify"
|
||||
fi
|
||||
@@ -1386,3 +1383,35 @@ reload_qos_service() {
|
||||
fi
|
||||
cp /etc/config/qos /tmp/qos/qos
|
||||
}
|
||||
|
||||
get_no_of_queue() {
|
||||
platform_name=$1
|
||||
cpu_model=$2
|
||||
|
||||
if [ -z "$platform_name" ];then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$platform_name" == "airoha" ]; then
|
||||
queue_num=4
|
||||
echo "Fix: airohai no_of_queue: $queue_num"
|
||||
elif [ "$platform_name" == "broadcom" ]; then
|
||||
if [[ $cpu_model == "BCM68"* ]]; then
|
||||
queue_num=4
|
||||
echo "Fix: broadcom bcm no_of_queue: $queue_num"
|
||||
elif grep -qE '[0-9]+ archer$' /proc/devices; then
|
||||
queue_num=4
|
||||
echo "Fix: broadcom arcee no_of_queue: $queue_num"
|
||||
else
|
||||
queue_num=8
|
||||
echo "Fix: broadcom else no_of_queue: $queue_num"
|
||||
fi
|
||||
elif [ "$platform_name" == "linux" ]; then
|
||||
queue_num=8
|
||||
echo "Fix: linux no_of_queue: $queue_num"
|
||||
fi
|
||||
|
||||
echo $queue_num
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ generate_dns_rule(){
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].dest_port="53"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
uci set qos.@classify[-1].order="$classify_no"
|
||||
}
|
||||
|
||||
generate_dhcp_rule(){
|
||||
@@ -25,7 +24,6 @@ generate_dhcp_rule(){
|
||||
uci set qos.@classify[-1].dest_port="67"
|
||||
uci set qos.@classify[-1].dest_port_range="68"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
uci set qos.@classify[-1].order="$classify_no"
|
||||
}
|
||||
|
||||
generate_igmp_rule(){
|
||||
@@ -36,7 +34,6 @@ generate_igmp_rule(){
|
||||
uci set qos.@classify[-1].proto="IGMP"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
uci set qos.@classify[-1].order="$classify_no"
|
||||
}
|
||||
|
||||
generate_icmp_rule(){
|
||||
@@ -47,7 +44,6 @@ generate_icmp_rule(){
|
||||
uci set qos.@classify[-1].proto="icmp"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
uci set qos.@classify[-1].order="$classify_no"
|
||||
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
@@ -55,7 +51,6 @@ generate_icmp_rule(){
|
||||
uci set qos.@classify[-1].proto="icmp"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].traffic_class="$2"
|
||||
uci set qos.@classify[-1].order="$classify_no"
|
||||
}
|
||||
|
||||
generate_classify(){
|
||||
@@ -98,7 +93,6 @@ generate_classify(){
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].pcp_check="$i"
|
||||
uci set qos.@classify[-1].traffic_class="$i"
|
||||
uci set qos.@classify[-1].order="$classify_no"
|
||||
done
|
||||
|
||||
uci commit qos
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
#!/bin/sh
|
||||
# add ip rule from qos uci
|
||||
|
||||
IP_RULE=""
|
||||
|
||||
init_ip_rule() {
|
||||
IP_RULE=""
|
||||
}
|
||||
|
||||
ip_rule_match_inif() {
|
||||
IP_RULE="$IP_RULE iif $1"
|
||||
}
|
||||
|
||||
ip_rule_match_proto() {
|
||||
IP_RULE="$IP_RULE ipproto $1"
|
||||
}
|
||||
|
||||
ip_rule_match_dest_port() {
|
||||
IP_RULE="$IP_RULE dport $1"
|
||||
}
|
||||
|
||||
ip_rule_match_src_port() {
|
||||
IP_RULE="$IP_RULE sport $1"
|
||||
}
|
||||
|
||||
ip_rule_match_dest_ip() {
|
||||
IP_RULE="$IP_RULE to $1"
|
||||
}
|
||||
|
||||
ip_rule_match_src_ip() {
|
||||
IP_RULE="$IP_RULE from $1"
|
||||
}
|
||||
|
||||
ip_rule_match_dest_port_range() {
|
||||
IP_RULE="$IP_RULE dport $1-$2"
|
||||
}
|
||||
|
||||
ip_rule_match_src_port_range() {
|
||||
IP_RULE="$IP_RULE sport $1-$2"
|
||||
}
|
||||
|
||||
ip_rule_match_tos() {
|
||||
IP_RULE="$IP_RULE tos $1"
|
||||
}
|
||||
|
||||
ip_rule_match_fwmark() {
|
||||
IP_RULE="$IP_RULE fwmark $1"
|
||||
}
|
||||
|
||||
handle_ip_rule() {
|
||||
cid=$1
|
||||
fwding_policy=$2
|
||||
|
||||
init_ip_rule
|
||||
|
||||
# get uci value for selector/match
|
||||
config_get dest_ip "$cid" "dest_ip"
|
||||
config_get src_ip "$cid" "src_ip"
|
||||
config_get ifname "$cid" "ifname"
|
||||
config_get proto "$cid" "proto"
|
||||
config_get tos "$cid" "dscp_filter"
|
||||
config_get fwmark "$cid" "traffic_class"
|
||||
config_get dest_port "$cid" "dest_port"
|
||||
config_get dest_port_range "$cid" "dest_port_range"
|
||||
config_get src_port "$cid" "src_port"
|
||||
config_get src_port_range "$cid" "src_port_range"
|
||||
|
||||
# forming selector/match for rule
|
||||
[ -n "$ifname" ] && ip_rule_match_inif $ifname
|
||||
|
||||
[ -n "$proto" ] && ip_rule_match_proto $proto
|
||||
|
||||
if [ -n "$src_port" -a -z "$src_port_range" ]; then
|
||||
ip_rule_match_src_port $src_port
|
||||
fi
|
||||
|
||||
if [ -n "$dest_port" -a -z "$dest_port_range" ]; then
|
||||
ip_rule_match_dest_port $dest_port
|
||||
fi
|
||||
|
||||
[ -n "$src_ip" ] && ip_rule_match_src_ip $src_ip
|
||||
|
||||
[ -n "$dest_ip" ] && ip_rule_match_dest_ip $dest_ip
|
||||
|
||||
if [ -n "$dest_port" -a -n "$dest_port_range" ]; then
|
||||
ip_rule_match_dest_port_range $dest_port $dest_port_range
|
||||
fi
|
||||
|
||||
if [ -n "$src_port" -a -n "$src_port_range" ]; then
|
||||
ip_rule_match_src_port_range $src_port $src_port_range
|
||||
fi
|
||||
|
||||
[ -n "$tos" ] && ip_rule_match_tos $tos
|
||||
|
||||
[ -n "$fwmark" ] && ip_rule_match_fwmark $fwmark
|
||||
|
||||
# forming full ip rule
|
||||
if [ -n "$IP_RULE" ]; then
|
||||
echo "ip rule add $IP_RULE table $fwding_policy" >> /tmp/qos/classify.iprule
|
||||
echo "ip rule del $IP_RULE table $fwding_policy" >> /tmp/qos/classify.del_iprule
|
||||
fi
|
||||
}
|
||||
|
||||
flush_ip_rule() {
|
||||
if [ -s "/tmp/qos/classify.del_iprule" ]; then
|
||||
sh /tmp/qos/classify.del_iprule
|
||||
rm -f /tmp/qos/classify.del_iprule
|
||||
fi
|
||||
touch /tmp/qos/classify.del_iprule
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
ethwan="$(db -q get hw.board.ethernetWanPort)"
|
||||
|
||||
populate_no_of_queue(){
|
||||
queue_num=8
|
||||
local queue_num=$(get_no_of_queue "linux")
|
||||
|
||||
# writing no. of queue per port into file and read on classify generate
|
||||
if [ ! -d "/tmp/qos" ]; then
|
||||
|
||||
@@ -2,9 +2,6 @@
|
||||
. /lib/functions.sh
|
||||
#set -x
|
||||
|
||||
# include common code
|
||||
. /lib/qos/ip_rule.sh
|
||||
|
||||
IP_RULE=""
|
||||
MAJOR=""
|
||||
|
||||
@@ -513,18 +510,8 @@ handle_classify() {
|
||||
local corder_file="/tmp/qos/classify.order"
|
||||
while read -r line; do
|
||||
line_cid=$(echo $line | cut -d '_' -f 2)
|
||||
# add ip rule only for classify rules which has non empty
|
||||
# value forwarding policy option
|
||||
# if forwarding policy option value empty then add iptables/
|
||||
# ip6tables/ebtables/rate_limit rules
|
||||
config_get fwding_policy "$line_cid" "forwarding_policy"
|
||||
|
||||
if [ -n "$fwding_policy" ]; then
|
||||
handle_ip_rule $line_cid $fwding_policy
|
||||
else
|
||||
handle_iptables_rules $line_cid
|
||||
handle_policer_rules $line_cid
|
||||
fi
|
||||
handle_iptables_rules $line_cid
|
||||
handle_policer_rules $line_cid
|
||||
done < "$corder_file"
|
||||
}
|
||||
|
||||
@@ -533,20 +520,15 @@ configure_classify() {
|
||||
rm -f /tmp/qos/classify.iptables
|
||||
rm -f /tmp/qos/classify.ip6tables
|
||||
rm -f /tmp/qos/classify.order
|
||||
rm -f /tmp/qos/classify.iprule
|
||||
|
||||
# create files that will contain the rules if not present already
|
||||
mkdir -p /tmp/qos/
|
||||
touch /tmp/qos/classify.iptables
|
||||
touch /tmp/qos/classify.ip6tables
|
||||
touch /tmp/qos/classify.order
|
||||
touch /tmp/qos/classify.iprule
|
||||
|
||||
flush_chains
|
||||
|
||||
#flush added ip rule
|
||||
flush_ip_rule
|
||||
|
||||
# Load UCI file
|
||||
config_load qos
|
||||
config_foreach handle_classify_order classify
|
||||
@@ -555,7 +537,6 @@ configure_classify() {
|
||||
|
||||
sh /tmp/qos/classify.iptables
|
||||
sh /tmp/qos/classify.ip6tables
|
||||
sh /tmp/qos/classify.iprule
|
||||
|
||||
}
|
||||
|
||||
@@ -574,22 +555,22 @@ pre_configure_queue() {
|
||||
done
|
||||
}
|
||||
|
||||
get_link_rate() {
|
||||
intf="$1"
|
||||
speed=0
|
||||
config_load ports
|
||||
get_link_rate() {
|
||||
intf="$1"
|
||||
speed=0
|
||||
config_load ports
|
||||
get_speed() {
|
||||
psid="$1"
|
||||
psid="$1"
|
||||
iname="$2"
|
||||
config_load ports
|
||||
config_load ports
|
||||
config_get ifname "$psid" "ifname"
|
||||
if [ "$ifname" == "$iname" ]; then
|
||||
config_get speed "$psid" "speed"
|
||||
fi
|
||||
}
|
||||
config_foreach get_speed ethport $intf
|
||||
echo "$speed"
|
||||
}
|
||||
}
|
||||
config_foreach get_speed ethport $intf
|
||||
echo "$speed"
|
||||
}
|
||||
|
||||
configure_queue() {
|
||||
qdisc_idx=0
|
||||
@@ -676,6 +657,35 @@ configure_policer() {
|
||||
echo $POLICER_COUNT > /tmp/qos/max_policer_inst
|
||||
}
|
||||
|
||||
get_no_of_queue() {
|
||||
platform_name=$1
|
||||
cpu_model=$2
|
||||
|
||||
if [ -z "$platform_name" ];then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$platform_name" == "airoha" ]; then
|
||||
queue_num=4
|
||||
echo "Fix: airohai no_of_queue: $queue_num"
|
||||
elif [ "$platform_name" == "broadcom" ]; then
|
||||
if [[ $cpu_model == "BCM68"* ]]; then
|
||||
queue_num=4
|
||||
echo "Fix: broadcom bcm no_of_queue: $queue_num"
|
||||
elif grep -qE '[0-9]+ archer$' /proc/devices; then
|
||||
queue_num=4
|
||||
echo "Fix: broadcom arcee no_of_queue: $queue_num"
|
||||
else
|
||||
queue_num=8
|
||||
echo "Fix: broadcom else no_of_queue: $queue_num"
|
||||
fi
|
||||
elif [ "$platform_name" == "linux" ]; then
|
||||
queue_num=8
|
||||
echo "Fix: linux no_of_queue: $queue_num"
|
||||
fi
|
||||
|
||||
echo $queue_num
|
||||
}
|
||||
|
||||
configure_qos() {
|
||||
pre_configure_queue
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ssdpd
|
||||
PKG_VERSION:=1.0.4
|
||||
PKG_VERSION:=1.0.3
|
||||
|
||||
LOCAL_DEV:=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
@@ -45,6 +45,8 @@ endef
|
||||
endif
|
||||
|
||||
define Package/ssdpd/install
|
||||
$(INSTALL_DIR) $(1)/etc/upnp
|
||||
$(INSTALL_DIR) $(1)/etc/upnp/description
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
|
||||
@@ -34,8 +34,6 @@ configure_ssdp()
|
||||
|
||||
[ ${enabled} -eq 0 ] && return 0
|
||||
|
||||
mkdir -p /tmp/ssdp/description/
|
||||
|
||||
procd_set_param command ${PROG}
|
||||
|
||||
if [ ${ipv6_enabled} -eq 1 ]; then
|
||||
|
||||
@@ -72,332 +72,7 @@
|
||||
}
|
||||
--- a/minissdpd/ssdpd.c
|
||||
+++ b/minissdpd/ssdpd.c
|
||||
@@ -39,10 +39,9 @@ struct desc_list_elt {
|
||||
struct list_head list;
|
||||
char *url;
|
||||
char *desc_path;
|
||||
- bool is_device_desc;
|
||||
};
|
||||
|
||||
-#define UPNP_DESC_PATH "/etc/upnp/description"
|
||||
+#define UPNP_DESC_PATH "/tmp/ssdp/description"
|
||||
#define UPNP_DISCOVER_TIMEOUT (30 * 1000)
|
||||
|
||||
#ifndef MIN
|
||||
@@ -93,17 +92,41 @@ static void add_dev_to_dev_list(char *de
|
||||
dev->usn = usn;
|
||||
}
|
||||
|
||||
-void free_all_dev_list(void)
|
||||
+static void free_all_dev_list(void)
|
||||
{
|
||||
struct UPNPDev *dev = NULL;
|
||||
+ struct UPNPDev *dev_tmp = NULL;
|
||||
|
||||
- while (dev_list.next != &dev_list) {
|
||||
- dev = list_entry(dev_list.next, struct UPNPDev, list);
|
||||
+ list_for_each_entry_safe(dev, dev_tmp, &dev_list, list) {
|
||||
+ list_del(&dev->list);
|
||||
free(dev->descURL);
|
||||
free(dev->st);
|
||||
free(dev->usn);
|
||||
free(dev);
|
||||
- list_del(&dev->list);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void add_desc_to_desc_list(const char *desc_path, const char *url)
|
||||
+{
|
||||
+ struct desc_list_elt *desc_elt;
|
||||
+
|
||||
+ desc_elt = calloc(1, sizeof(struct desc_list_elt));
|
||||
+ list_add_tail(&desc_elt->list, &desc_list);
|
||||
+
|
||||
+ desc_elt->desc_path = strdup(desc_path);
|
||||
+ desc_elt->url = strdup(url);
|
||||
+}
|
||||
+
|
||||
+static void free_all_desc_list(void)
|
||||
+{
|
||||
+ struct desc_list_elt *desc_elt = NULL;
|
||||
+ struct desc_list_elt *desc_elt_tmp = NULL;
|
||||
+
|
||||
+ list_for_each_entry_safe(desc_elt, desc_elt_tmp, &desc_list, list) {
|
||||
+ list_del(&desc_elt->list);
|
||||
+ free(desc_elt->desc_path);
|
||||
+ free(desc_elt->url);
|
||||
+ free(desc_elt);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,8 +190,8 @@ static int receiveDevicesFromMiniSSDPD(i
|
||||
ssize_t n;
|
||||
unsigned char *p;
|
||||
unsigned int bufferindex;
|
||||
- unsigned int i, ndev;
|
||||
- unsigned int urlsize, stsize, usnsize, l;
|
||||
+ unsigned int i = 0, ndev = 0;
|
||||
+ unsigned int urlsize = 0, stsize = 0, usnsize = 0, l = 0;
|
||||
char *url, *st, *usn;
|
||||
|
||||
n = read(s, buffer, sizeof(buffer));
|
||||
@@ -182,11 +205,12 @@ static int receiveDevicesFromMiniSSDPD(i
|
||||
if (n <= 0)
|
||||
return -1;
|
||||
|
||||
- url = (char *)malloc(urlsize);
|
||||
+ url = (char *)calloc(urlsize + 1, sizeof(char));
|
||||
if (url == NULL)
|
||||
return -1;
|
||||
|
||||
READ_COPY_BUFFER(url, urlsize);
|
||||
+ url[urlsize] = 0;
|
||||
if (n <= 0)
|
||||
return -1;
|
||||
|
||||
@@ -194,11 +218,12 @@ static int receiveDevicesFromMiniSSDPD(i
|
||||
if (n <= 0)
|
||||
goto free_url_and_return;
|
||||
|
||||
- st = (char *)malloc(stsize);
|
||||
+ st = (char *)calloc(stsize + 1, sizeof(char));
|
||||
if (st == NULL)
|
||||
goto free_url_and_return;
|
||||
|
||||
READ_COPY_BUFFER(st, stsize);
|
||||
+ st[stsize] = 0;
|
||||
if (n <= 0)
|
||||
goto free_url_and_st_and_return;
|
||||
|
||||
@@ -206,11 +231,12 @@ static int receiveDevicesFromMiniSSDPD(i
|
||||
if (n <= 0)
|
||||
goto free_url_and_st_and_return;
|
||||
|
||||
- usn = (char *)malloc(usnsize);
|
||||
+ usn = (char *)calloc(usnsize + 1, sizeof(char));
|
||||
if (usn == NULL)
|
||||
goto free_url_and_st_and_return;
|
||||
|
||||
READ_COPY_BUFFER(usn, usnsize);
|
||||
+ usn[usnsize] = 0;
|
||||
if (n <= 0)
|
||||
goto free_url_and_st_and_usn_and_return;
|
||||
|
||||
@@ -282,6 +308,21 @@ static bool is_desc_exist(const char *de
|
||||
return false;
|
||||
}
|
||||
|
||||
+static bool is_device_exist(const char *dev_url)
|
||||
+{
|
||||
+ struct UPNPDev *dev = NULL;
|
||||
+
|
||||
+ if (!dev_url)
|
||||
+ return false;
|
||||
+
|
||||
+ list_for_each_entry(dev, &dev_list, list) {
|
||||
+ if (strcmp(dev->descURL, dev_url) == 0)
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
static void get_desc_name(const char *desc_url, char *str, size_t len)
|
||||
{
|
||||
if (!desc_url || !str || len == 0)
|
||||
@@ -297,37 +338,14 @@ static void get_desc_name(const char *de
|
||||
}
|
||||
}
|
||||
|
||||
-static void add_desc_to_desc_list(const char *desc_path, const char *url, int is_device_desc)
|
||||
-{
|
||||
- struct desc_list_elt *desc_elt;
|
||||
-
|
||||
- desc_elt = calloc(1, sizeof(struct desc_list_elt));
|
||||
- list_add_tail(&desc_elt->list, &desc_list);
|
||||
-
|
||||
- desc_elt->desc_path = strdup(desc_path);
|
||||
- desc_elt->url = strdup(url);
|
||||
- desc_elt->is_device_desc = is_device_desc;
|
||||
-}
|
||||
-
|
||||
-static void free_all_desc_list(void)
|
||||
-{
|
||||
- struct desc_list_elt *desc_elt = NULL;
|
||||
-
|
||||
- while (desc_list.next != &desc_list) {
|
||||
- desc_elt = list_entry(desc_list.next, struct desc_list_elt, list);
|
||||
- free(desc_elt->desc_path);
|
||||
- free(desc_elt->url);
|
||||
- free(desc_elt);
|
||||
- list_del(&desc_elt->list);
|
||||
- }
|
||||
-}
|
||||
-
|
||||
static void __upnp_discover_devices(void)
|
||||
{
|
||||
+ struct desc_list_elt *desc_elt = NULL;
|
||||
+ struct desc_list_elt *desc_elt_tmp = NULL;
|
||||
struct UPNPDev *dev = NULL;
|
||||
char desc_name[128] = {0};
|
||||
char file_path[256] = {0};
|
||||
- int res = 0, is_device_desc = 0;
|
||||
+ int res = 0;
|
||||
|
||||
/*
|
||||
* Discover devices
|
||||
@@ -349,13 +367,26 @@ static void __upnp_discover_devices(void
|
||||
|
||||
get_desc_name(dev->descURL, desc_name, sizeof(desc_name));
|
||||
snprintf(file_path, sizeof(file_path), "%s/%s", UPNP_DESC_PATH, desc_name);
|
||||
- is_device_desc = (dev->usn && strstr(dev->usn, ":service:")) ? 0 : 1;
|
||||
|
||||
// Download Description
|
||||
download_file(file_path, dev->descURL);
|
||||
|
||||
// Add description to descriptions list
|
||||
- add_desc_to_desc_list(file_path, dev->descURL, is_device_desc);
|
||||
+ add_desc_to_desc_list(file_path, dev->descURL);
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * Remove unused descriptions
|
||||
+ */
|
||||
+ list_for_each_entry_safe(desc_elt, desc_elt_tmp, &desc_list, list) {
|
||||
+
|
||||
+ if (is_device_exist(desc_elt->url))
|
||||
+ continue;
|
||||
+
|
||||
+ list_del(&desc_elt->list);
|
||||
+ free(desc_elt->desc_path);
|
||||
+ free(desc_elt->url);
|
||||
+ free(desc_elt);
|
||||
}
|
||||
|
||||
end:
|
||||
@@ -371,15 +402,27 @@ static int upnp_discovery_res(struct ubu
|
||||
memset(&bb,0,sizeof(struct blob_buf));
|
||||
blob_buf_init(&bb, 0);
|
||||
|
||||
+ void *root_devices_array = blobmsg_open_array(&bb, "root_devices");
|
||||
+ list_for_each_entry_reverse(dev, &dev_list, list) {
|
||||
+ // Parse root device
|
||||
+ if (dev->st && strstr(dev->st, ":rootdevice") != NULL) {
|
||||
+ void *device_obj = blobmsg_open_table(&bb, NULL);
|
||||
+ blobmsg_add_string(&bb, "descurl", dev->descURL);
|
||||
+ blobmsg_add_string(&bb, "st", dev->st);
|
||||
+ blobmsg_add_string(&bb, "usn", dev->usn);
|
||||
+ blobmsg_close_table(&bb, device_obj);
|
||||
+ }
|
||||
+ }
|
||||
+ blobmsg_close_array(&bb, root_devices_array);
|
||||
+
|
||||
void *devices_array = blobmsg_open_array(&bb, "devices");
|
||||
list_for_each_entry_reverse(dev, &dev_list, list) {
|
||||
- // Parse Root device and devices
|
||||
- if ((dev->st && strstr(dev->st, ":rootdevice") != NULL) || (dev->usn && strstr(dev->usn, ":device:") != NULL)) {
|
||||
+ // Parse devices
|
||||
+ if (dev->usn && strstr(dev->usn, ":device:") != NULL) {
|
||||
void *device_obj = blobmsg_open_table(&bb, NULL);
|
||||
blobmsg_add_string(&bb, "descurl", dev->descURL);
|
||||
blobmsg_add_string(&bb, "st", dev->st);
|
||||
blobmsg_add_string(&bb, "usn", dev->usn);
|
||||
- blobmsg_add_string(&bb, "is_root_device", dev->st && strstr(dev->st, ":rootdevice") ? "1" : "0");
|
||||
blobmsg_close_table(&bb, device_obj);
|
||||
}
|
||||
}
|
||||
@@ -472,7 +515,7 @@ static void fill_device_instances(struct
|
||||
blobmsg_close_table(bb, device_obj);
|
||||
}
|
||||
|
||||
-static void fill_service_element(struct blob_buf *bb, mxml_node_t *service)
|
||||
+static void fill_service_instances(struct blob_buf *bb, mxml_node_t *service)
|
||||
{
|
||||
mxml_node_t *b = service;
|
||||
void *service_obj = NULL;
|
||||
@@ -525,6 +568,32 @@ static void fill_service_element(struct
|
||||
blobmsg_close_table(bb, service_obj);
|
||||
}
|
||||
|
||||
+static void fill_device_service_instances(struct blob_buf *bb, bool is_device)
|
||||
+{
|
||||
+ struct desc_list_elt *desc_elt = NULL;
|
||||
+
|
||||
+ list_for_each_entry(desc_elt, &desc_list, list) {
|
||||
+
|
||||
+ FILE *fp = fopen(desc_elt->desc_path, "r");
|
||||
+ if (!fp)
|
||||
+ continue;
|
||||
+
|
||||
+ mxml_node_t *tree = mxmlLoadFile(NULL, fp, MXML_OPAQUE_CALLBACK);
|
||||
+ fclose(fp);
|
||||
+
|
||||
+ if (tree) {
|
||||
+ mxml_node_t *node = mxmlFindElement(tree, tree, "device", NULL, NULL, MXML_DESCEND);
|
||||
+
|
||||
+ if (is_device)
|
||||
+ fill_device_instances(bb, node);
|
||||
+ else
|
||||
+ fill_service_instances(bb, node);
|
||||
+
|
||||
+ mxmlDelete(tree);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static int upnp_description_res(struct ubus_context *ctx, struct ubus_object *obj __attribute__((unused)),
|
||||
struct ubus_request_data *req, const char *method __attribute__((unused)), struct blob_attr *msg __attribute__((unused)))
|
||||
{
|
||||
@@ -534,39 +603,25 @@ static int upnp_description_res(struct u
|
||||
memset(&bb,0,sizeof(struct blob_buf));
|
||||
blob_buf_init(&bb, 0);
|
||||
|
||||
+ // Descriptions Array
|
||||
void *desc_array = blobmsg_open_array(&bb, "descriptions");
|
||||
list_for_each_entry(desc_elt, &desc_list, list) {
|
||||
void *device_obj = blobmsg_open_table(&bb, NULL);
|
||||
blobmsg_add_string(&bb, "desc_url", desc_elt->url);
|
||||
- blobmsg_add_u32(&bb, "is_device_desc", desc_elt->is_device_desc);
|
||||
blobmsg_close_table(&bb, device_obj);
|
||||
|
||||
}
|
||||
blobmsg_close_array(&bb, desc_array);
|
||||
|
||||
- list_for_each_entry(desc_elt, &desc_list, list) {
|
||||
-
|
||||
- FILE *fp = fopen(desc_elt->desc_path, "r");
|
||||
- if (!fp)
|
||||
- continue;
|
||||
-
|
||||
- mxml_node_t *tree = mxmlLoadFile(NULL, fp, MXML_OPAQUE_CALLBACK);
|
||||
- fclose(fp);
|
||||
-
|
||||
- if (tree) {
|
||||
- void *devices_array = blobmsg_open_array(&bb, "devices");
|
||||
- mxml_node_t *device = mxmlFindElement(tree, tree, "device", NULL, NULL, MXML_DESCEND);
|
||||
- fill_device_instances(&bb, device);
|
||||
- blobmsg_close_array(&bb, devices_array);
|
||||
-
|
||||
- void *services_array = blobmsg_open_array(&bb, "services");
|
||||
- mxml_node_t *service = mxmlFindElement(tree, tree, "device", NULL, NULL, MXML_DESCEND);
|
||||
- fill_service_element(&bb, service);
|
||||
- blobmsg_close_array(&bb, services_array);
|
||||
+ // Devices Array
|
||||
+ void *devices_array = blobmsg_open_array(&bb, "devices");
|
||||
+ fill_device_service_instances(&bb, true);
|
||||
+ blobmsg_close_array(&bb, devices_array);
|
||||
|
||||
- mxmlDelete(tree);
|
||||
- }
|
||||
- }
|
||||
+ // Services Array
|
||||
+ void *services_array = blobmsg_open_array(&bb, "services");
|
||||
+ fill_device_service_instances(&bb, false);
|
||||
+ blobmsg_close_array(&bb, services_array);
|
||||
|
||||
ubus_send_reply(ctx, req, bb.head);
|
||||
blob_buf_free(&bb);
|
||||
@@ -624,3 +679,9 @@ end:
|
||||
@@ -624,3 +624,8 @@ end:
|
||||
uloop_done();
|
||||
ubus_free(ctx);
|
||||
}
|
||||
|
||||
@@ -9,13 +9,13 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=stunc
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=1.1.15
|
||||
PKG_VERSION:=1.1.14
|
||||
|
||||
LOCAL_DEV:=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/stunc.git
|
||||
PKG_SOURCE_VERSION:=09f9868a79e1b5037a99a97fd4dee678869fe98a
|
||||
PKG_SOURCE_VERSION:=06b63878a448b593d907bb3e9c1381dc0e69bca6
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
endif
|
||||
|
||||
126
sulu-builder/Config.in
Normal file
126
sulu-builder/Config.in
Normal file
@@ -0,0 +1,126 @@
|
||||
menu "Configuration"
|
||||
depends on PACKAGE_sulu-builder
|
||||
|
||||
menu "SULU_CORE"
|
||||
depends on PACKAGE_sulu-builder
|
||||
config SULU_CORE_ENABLE
|
||||
bool "Enable this plugin"
|
||||
default y
|
||||
|
||||
config SULU_CORE_URL
|
||||
string "SULU url"
|
||||
default "https://dev.iopsys.eu/websdk/sulu.git"
|
||||
|
||||
config SULU_CORE_VERSION
|
||||
string "SULU repo version"
|
||||
default "80815db11f7b0c1913ae551ff50ed2c89676f489"
|
||||
endmenu
|
||||
|
||||
menu "SULU_PLUGIN_LCM"
|
||||
depends on PACKAGE_sulu-builder
|
||||
config SULU_PLUGIN_LCM_ENABLE
|
||||
bool "Enable this plugin"
|
||||
default y
|
||||
|
||||
config SULU_PLUGIN_LCM_NAME
|
||||
depends on SULU_PLUGIN_LCM_ENABLE
|
||||
string "Plugin_name"
|
||||
default "sulu-lcm"
|
||||
|
||||
config SULU_PLUGIN_LCM_URL
|
||||
depends on SULU_PLUGIN_LCM_ENABLE
|
||||
string "URL"
|
||||
default "https://dev.iopsys.eu/websdk/sulu-lcm.git"
|
||||
|
||||
config SULU_PLUGIN_LCM_VERSION
|
||||
depends on SULU_PLUGIN_LCM_ENABLE
|
||||
string "Version"
|
||||
default "ccd70b399b31530dc1af6a871eee94fbb179d794"
|
||||
endmenu
|
||||
|
||||
menu "SULU_PLUGIN_MULTIAP"
|
||||
depends on PACKAGE_sulu-builder
|
||||
config SULU_PLUGIN_MULTIAP_ENABLE
|
||||
bool "Enable this plugin"
|
||||
default y
|
||||
|
||||
config SULU_PLUGIN_MULTIAP_NAME
|
||||
depends on SULU_PLUGIN_MULTIAP_ENABLE
|
||||
string "Plugin_name"
|
||||
default "sulu-multi-ap"
|
||||
|
||||
config SULU_PLUGIN_MULTIAP_URL
|
||||
depends on SULU_PLUGIN_MULTIAP_ENABLE
|
||||
string "URL"
|
||||
default "https://dev.iopsys.eu/websdk/sulu-multi-ap.git"
|
||||
|
||||
config SULU_PLUGIN_MULTIAP_VERSION
|
||||
depends on SULU_PLUGIN_MULTIAP_ENABLE
|
||||
string "Version"
|
||||
default "3e662d50c5a14225354f6287d1c6a47414b694a6"
|
||||
endmenu
|
||||
|
||||
menu "SULU_THEME_IOPSYS"
|
||||
depends on PACKAGE_sulu-builder
|
||||
config SULU_THEME_IOPSYS_ENABLE
|
||||
bool "Enable this plugin"
|
||||
default y
|
||||
|
||||
config SULU_THEME_IOPSYS_NAME
|
||||
depends on SULU_THEME_IOPSYS_ENABLE
|
||||
string "Plugin_name"
|
||||
default "sulu-theme-iopsys"
|
||||
|
||||
config SULU_THEME_IOPSYS_URL
|
||||
depends on SULU_THEME_IOPSYS_ENABLE
|
||||
string "URL"
|
||||
default "https://dev.iopsys.eu/websdk/sulu-theme-iopsys.git"
|
||||
|
||||
config SULU_THEME_IOPSYS_VERSION
|
||||
depends on SULU_THEME_IOPSYS_ENABLE
|
||||
string "Version"
|
||||
default "e80fea80cdf8d49db0ae70b5c26a5dab49b8a20d"
|
||||
endmenu
|
||||
|
||||
menu "SULU_PLUGIN_CUSTOM"
|
||||
depends on PACKAGE_sulu-builder
|
||||
config SULU_PLUGIN_CUSTOM_ENABLE
|
||||
bool "Enable this plugin"
|
||||
default n
|
||||
|
||||
config SULU_PLUGIN_CUSTOM_NAME
|
||||
depends on SULU_PLUGIN_CUSTOM_ENABLE
|
||||
string "Plugin_name"
|
||||
default "custom_app"
|
||||
|
||||
config SULU_PLUGIN_CUSTOM_URL
|
||||
depends on SULU_PLUGIN_CUSTOM_ENABLE
|
||||
string "URL"
|
||||
default ""
|
||||
|
||||
config SULU_PLUGIN_CUSTOM_VERSION
|
||||
depends on SULU_PLUGIN_CUSTOM_ENABLE
|
||||
string "Version"
|
||||
endmenu
|
||||
|
||||
menu "SULU_THEME_CUSTOM"
|
||||
depends on PACKAGE_sulu-builder
|
||||
config SULU_THEME_CUSTOM_ENABLE
|
||||
bool "Enable this plugin"
|
||||
default n
|
||||
|
||||
config SULU_THEME_CUSTOM_NAME
|
||||
depends on SULU_THEME_CUSTOM_ENABLE
|
||||
string "Plugin_name"
|
||||
default "plugin_theme_custom"
|
||||
|
||||
config SULU_THEME_CUSTOM_URL
|
||||
depends on SULU_THEME_CUSTOM_ENABLE
|
||||
string "URL"
|
||||
default ""
|
||||
|
||||
config SULU_THEME_CUSTOM_VERSION
|
||||
depends on SULU_THEME_CUSTOM_ENABLE
|
||||
string "Version"
|
||||
endmenu
|
||||
endmenu
|
||||
178
sulu-builder/Makefile
Normal file
178
sulu-builder/Makefile
Normal file
@@ -0,0 +1,178 @@
|
||||
#
|
||||
# Copyright (C) 2021-2022 IOPSYS
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=sulu-builder
|
||||
PKG_VERSION:=1.3.25
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu-builder.git
|
||||
PKG_SOURCE_VERSION:=696ef814e0b16345f2e8ee0104f3ee1eeaeea5dc
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
PKG_LICENSE:=PROPRIETARY IOPSYS
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/${PKG_NAME}
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=Build sulu from source
|
||||
DEPENDS:=+nginx +mosquitto-auth-shadow +usermngr +jq
|
||||
CONFLICTS:=sulu
|
||||
endef
|
||||
|
||||
define Package/${PKG_NAME}/description
|
||||
SULU-CE ReactJS based Web UI builder.
|
||||
endef
|
||||
|
||||
define Package/${PKG_NAME}/config
|
||||
source "$(SOURCE)/Config.in"
|
||||
endef
|
||||
|
||||
# Sulu core and other dependent needs to be updated in Config.in
|
||||
SULU_DL_FILE:=sulu_core-${CONFIG_SULU_CORE_VERSION}.tar.gz
|
||||
define Download/sulu_core
|
||||
FILE:=$(SULU_DL_FILE)
|
||||
URL:=$(CONFIG_SULU_CORE_URL)
|
||||
PROTO:=git
|
||||
SUBDIR:=sulu
|
||||
VERSION:=${CONFIG_SULU_CORE_VERSION}
|
||||
HASH:=skip
|
||||
endef
|
||||
|
||||
ifeq ($(CONFIG_SULU_CORE_ENABLE),y)
|
||||
$(eval $(call Download,sulu_core))
|
||||
endif
|
||||
|
||||
SULU_PLUGIN_LCM_DL:=${CONFIG_SULU_PLUGIN_LCM_NAME}_plugin-${CONFIG_SULU_PLUGIN_LCM_VERSION}.tar.gz
|
||||
define Download/sulu_plugin_lcm
|
||||
FILE:=${SULU_PLUGIN_LCM_DL}
|
||||
URL:=${CONFIG_SULU_PLUGIN_LCM_URL}
|
||||
PROTO:=git
|
||||
SUBDIR:=plugins/${CONFIG_SULU_PLUGIN_LCM_NAME}
|
||||
VERSION:=${CONFIG_SULU_PLUGIN_LCM_VERSION}
|
||||
HASH:=skip
|
||||
endef
|
||||
|
||||
ifeq ($(CONFIG_SULU_PLUGIN_LCM_ENABLE),y)
|
||||
$(eval $(call Download,sulu_plugin_lcm))
|
||||
endif
|
||||
|
||||
SULU_PLUGIN_MULTIAP_DL:=${CONFIG_SULU_PLUGIN_MULTIAP_NAME}_plugin-${CONFIG_SULU_PLUGIN_MULTIAP_VERSION}.tar.gz
|
||||
define Download/sulu_plugin_multiap
|
||||
FILE:=${SULU_PLUGIN_MULTIAP_DL}
|
||||
URL:=${CONFIG_SULU_PLUGIN_MULTIAP_URL}
|
||||
PROTO:=git
|
||||
SUBDIR:=plugins/${CONFIG_SULU_PLUGIN_MULTIAP_NAME}
|
||||
VERSION:=${CONFIG_SULU_PLUGIN_MULTIAP_VERSION}
|
||||
HASH:=skip
|
||||
endef
|
||||
|
||||
ifeq ($(CONFIG_SULU_PLUGIN_MULTIAP_ENABLE),y)
|
||||
$(eval $(call Download,sulu_plugin_multiap))
|
||||
endif
|
||||
|
||||
SULU_THEME_IOPSYS_DL:=${CONFIG_SULU_THEME_IOPSYS_NAME}_plugin-${CONFIG_SULU_THEME_IOPSYS_VERSION}.tar.gz
|
||||
define Download/sulu_theme_iopsys
|
||||
FILE:=${SULU_THEME_IOPSYS_DL}
|
||||
URL:=${CONFIG_SULU_THEME_IOPSYS_URL}
|
||||
PROTO:=git
|
||||
SUBDIR:=plugins/${CONFIG_SULU_THEME_IOPSYS_NAME}
|
||||
VERSION:=${CONFIG_SULU_THEME_IOPSYS_VERSION}
|
||||
HASH:=skip
|
||||
endef
|
||||
|
||||
ifeq ($(CONFIG_SULU_THEME_IOPSYS_ENABLE),y)
|
||||
$(eval $(call Download,sulu_theme_iopsys))
|
||||
endif
|
||||
|
||||
SULU_PLUGIN_CUSTOM_DL:=${CONFIG_SULU_PLUGIN_CUSTOM_NAME}_plugin-${CONFIG_SULU_PLUGIN_CUSTOM_VERSION}.tar.gz
|
||||
define Download/sulu_plugin_custom
|
||||
FILE:=${SULU_PLUGIN_CUSTOM_DL}
|
||||
URL:=${CONFIG_SULU_PLUGIN_CUSTOM_URL}
|
||||
PROTO:=git
|
||||
SUBDIR:=plugins/${CONFIG_SULU_PLUGIN_CUSTOM_NAME}
|
||||
VERSION:=${CONFIG_SULU_PLUGIN_CUSTOM_VERSION}
|
||||
HASH:=skip
|
||||
endef
|
||||
|
||||
ifeq ($(CONFIG_SULU_PLUGIN_CUSTOM_ENABLE),y)
|
||||
$(eval $(call Download,sulu_plugin_custom))
|
||||
endif
|
||||
|
||||
SULU_THEME_CUSTOM_DL:=${CONFIG_SULU_THEME_CUSTOM_NAME}_plugin-${CONFIG_SULU_THEME_CUSTOM_VERSION}.tar.gz
|
||||
define Download/sulu_theme_custom
|
||||
FILE:=${SULU_THEME_CUSTOM_DL}
|
||||
URL:=${CONFIG_SULU_THEME_CUSTOM_URL}
|
||||
PROTO:=git
|
||||
SUBDIR:=plugins/${CONFIG_SULU_THEME_CUSTOM_NAME}
|
||||
VERSION:=${CONFIG_SULU_THEME_CUSTOM_VERSION}
|
||||
HASH:=skip
|
||||
endef
|
||||
|
||||
ifeq ($(CONFIG_SULU_THEME_CUSTOM_ENABLE),y)
|
||||
$(eval $(call Download,sulu_theme_custom))
|
||||
endif
|
||||
|
||||
define Build/Prepare
|
||||
$(Build/Prepare/Default)
|
||||
tar xzf $(DL_DIR)/${SULU_DL_FILE} -C $(PKG_BUILD_DIR)
|
||||
ifeq ($(CONFIG_SULU_PLUGIN_LCM_ENABLE),y)
|
||||
tar xzf $(DL_DIR)/${SULU_PLUGIN_LCM_DL} -C $(PKG_BUILD_DIR)
|
||||
endif
|
||||
ifeq ($(CONFIG_SULU_PLUGIN_MULTIAP_ENABLE),y)
|
||||
tar xzf $(DL_DIR)/${SULU_PLUGIN_MULTIAP_DL} -C $(PKG_BUILD_DIR)
|
||||
endif
|
||||
ifeq ($(CONFIG_SULU_THEME_IOPSYS_ENABLE),y)
|
||||
tar xzf $(DL_DIR)/${SULU_THEME_IOPSYS_DL} -C $(PKG_BUILD_DIR)
|
||||
endif
|
||||
ifeq ($(CONFIG_SULU_PLUGIN_CUSTOM_ENABLE),y)
|
||||
tar xzf $(DL_DIR)/${SULU_PLUGIN_CUSTOM_DL} -C $(PKG_BUILD_DIR)
|
||||
endif
|
||||
ifeq ($(CONFIG_SULU_THEME_CUSTOM_ENABLE),y)
|
||||
tar xzf $(DL_DIR)/${SULU_THEME_CUSTOM_DL} -C $(PKG_BUILD_DIR)
|
||||
endif
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
VERSION="v${PKG_VERSION}" $(MAKE) -C $(PKG_BUILD_DIR)/
|
||||
endef
|
||||
|
||||
define Package/${PKG_NAME}/install
|
||||
$(INSTALL_DIR) $(1)/sulu
|
||||
$(INSTALL_DIR) $(1)/sulu/config
|
||||
$(INSTALL_DIR) $(1)/sulu/config/widgets
|
||||
$(INSTALL_DIR) $(1)/etc/nginx/
|
||||
$(INSTALL_DIR) $(1)/etc/mosquitto/conf.d/
|
||||
$(CP) $(PKG_BUILD_DIR)/build/dist/* $(1)/sulu
|
||||
$(CP) $(PKG_BUILD_DIR)/build/src/config/*.json $(1)/sulu/config/
|
||||
$(CP) $(PKG_BUILD_DIR)/build/src/config/widgets/diagnostics.json $(1)/sulu/config/widgets/
|
||||
$(CP) $(PKG_BUILD_DIR)/build/src/config/widgets/wan.json $(1)/sulu/config/widgets/
|
||||
ifeq ($(CONFIG_PACKAGE_skopeo)$(CONFIG_PACKAGE_umoci),yy)
|
||||
$(CP) $(PKG_BUILD_DIR)/build/src/config/widgets/lcm-store.json $(1)/sulu/config/widgets/
|
||||
endif
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_BIN) ./files/etc/config/sulu $(1)/etc/config/sulu
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/etc/init.d/sulu $(1)/etc/init.d/sulu
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/sulu
|
||||
$(INSTALL_DATA) ./files/etc/sulu/roles.json $(1)/etc/sulu/
|
||||
$(INSTALL_BIN) ./files/etc/sulu/sulu.sh $(1)/etc/sulu/
|
||||
$(INSTALL_DATA) ./files/etc/sulu/nginx.locations $(1)/etc/sulu/
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/99-fix-sulu-config $(1)/etc/uci-defaults/
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/40-add-sulu-nginx-config $(1)/etc/uci-defaults/
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/01-update-nginx-uci-template $(1)/etc/uci-defaults/
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/10-add-mqtt-config $(1)/etc/uci-defaults/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,${PKG_NAME}))
|
||||
|
||||
@@ -20,7 +20,6 @@ add_sulu_nginx_uci()
|
||||
uci_set nginx _sulu_s ssl_session_cache 'shared:SSL:32k'
|
||||
uci_set nginx _sulu_s ssl_session_timeout '64m'
|
||||
uci_set nginx _sulu_s access_log 'off; # logd openwrt'
|
||||
uci_set nginx _sulu_s error_log '/dev/null'
|
||||
fi
|
||||
|
||||
if ! uci_get nginx _suluredirect >/dev/null 2>&1; then
|
||||
65
sulu/Makefile
Normal file
65
sulu/Makefile
Normal file
@@ -0,0 +1,65 @@
|
||||
#
|
||||
# Copyright (C) 2021-2022 IOPSYS
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=sulu
|
||||
PKG_VERSION:=1.3.25
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu.git
|
||||
PKG_SOURCE_VERSION:=696ef814e0b16345f2e8ee0104f3ee1eeaeea5dc
|
||||
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
|
||||
|
||||
PKG_RELEASE=$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
|
||||
|
||||
PKG_LICENSE:=PROPRIETARY IOPSYS
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/sulu
|
||||
SECTION:=sulu
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=SULU-CE ReactJS based Web UI Package
|
||||
DEPENDS:=+nginx +mosquitto-auth-shadow +usermngr +jq
|
||||
endef
|
||||
|
||||
define Package/sulu/description
|
||||
SULU-CE ReactJS based Web UI.
|
||||
endef
|
||||
|
||||
define Package/sulu/install
|
||||
$(INSTALL_DIR) $(1)/sulu/config/widgets
|
||||
$(CP) $(PKG_BUILD_DIR)/dist/* $(1)/sulu
|
||||
$(CP) $(PKG_BUILD_DIR)/config/*.json $(1)/sulu/config
|
||||
$(CP) $(PKG_BUILD_DIR)/config/widgets/diagnostics.json $(1)/sulu/config/widgets/
|
||||
$(CP) $(PKG_BUILD_DIR)/config/widgets/wan.json $(1)/sulu/config/widgets/
|
||||
ifeq ($(CONFIG_PACKAGE_skopeo)$(CONFIG_PACKAGE_umoci),yy)
|
||||
$(CP) $(PKG_BUILD_DIR)/config/widgets/lcm-store.json $(1)/sulu/config/widgets/
|
||||
endif
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_BIN) ./files/etc/config/sulu $(1)/etc/config/sulu
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/etc/init.d/sulu $(1)/etc/init.d/sulu
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/sulu
|
||||
$(INSTALL_DATA) ./files/etc/sulu/roles.json $(1)/etc/sulu/
|
||||
$(INSTALL_BIN) ./files/etc/sulu/sulu.sh $(1)/etc/sulu/
|
||||
$(INSTALL_DATA) ./files/etc/sulu/nginx.locations $(1)/etc/sulu/
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/99-fix-sulu-config $(1)/etc/uci-defaults/
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/40-add-sulu-nginx-config $(1)/etc/uci-defaults/
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/01-update-nginx-uci-template $(1)/etc/uci-defaults/
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/10-add-mqtt-config $(1)/etc/uci-defaults/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,sulu))
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
# SULU-CE
|
||||
SULU is a ReactJS based USP controller, for more details please check sulu [documentation](https://dev.iopsys.eu/websdk/sulu/-/blob/devel/README.md). This directory contains the recipes to build sulu for IOWRT.
|
||||
|
||||
SULU has two variants
|
||||
1. sulu - This package usages the prebuilt distribution, so it faster but only include iopsys default packages
|
||||
2. sulu-builder - This package builds the sulu along with selected plugins from source
|
||||
|
||||
# Directory structure
|
||||
This directory contains iowrt sulu plugins packages along with sulu builder.
|
||||
|
||||
- sulu-builder - Offers sulu and sulu-builder iowrt packages
|
||||
- sulu-base - Sulu core source, needed for sulu-builder
|
||||
- sulu-lcm - Sulu plugin for Life Cycle Management, can be used with sulu-builder
|
||||
- sulu-multi-ap - Sulu plugin for Multi-AP, can be used with sulu-builder
|
||||
- sulu-parental-control - Sulu plugin for Parental control, can be used with sulu-builder
|
||||
- sulu-theme-iopsys - Sulu example theme plugin, can be used with sulu-builder
|
||||
|
||||
User can select 'CONFIG_PACKAGE_sulu=y' to use the sulu prebuilt distribution, or can select 'CONFIG_PACKAGE_sulu-builder=y' to build sulu along with customized plugins.
|
||||
|
||||
# How to select a sulu plugins
|
||||
While building sulu from source, user has to select the all plugins they want to include in sulu, which can be done with 'make menuconfig', below are the list of sulu plugins available currently.
|
||||
```bash
|
||||
# CONFIG_PACKAGE_sulu-lcm is not set
|
||||
# CONFIG_PACKAGE_sulu-multi-ap is not set
|
||||
# CONFIG_PACKAGE_sulu-parental-control is not set
|
||||
# CONFIG_PACKAGE_sulu-theme-iopsys is not set
|
||||
```
|
||||
|
||||
# How to add a new sulu plugin
|
||||
User can also add there own sulu plugins as package with a simple makefile as below:
|
||||
|
||||
```bash
|
||||
include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=<Name of plugin>
|
||||
PKG_VERSION:=<Plugin version number>
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=<Plugin url>
|
||||
PKG_SOURCE_VERSION:=<Plugin version hash to use>
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
include ../sulu-builder/sulu.mk
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/sulu/config/widgets
|
||||
endef
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
```
|
||||
|
||||
In the above example makefile, if user need to install any plugin specific component, that can be added inside 'Package/$(PKG_NAME)/install' definition.
|
||||
|
||||
After adding the makefile, user need to specify the list of plugins in below config option, so that sulu-builder selects them and build them along with it.
|
||||
```bash
|
||||
CONFIG_SULU_EXTRA_PACKAGES="sulu-plugin1 sulu-plugin2 sulu-theme1"
|
||||
```
|
||||
4
sulu/files/etc/config/sulu
Normal file
4
sulu/files/etc/config/sulu
Normal file
@@ -0,0 +1,4 @@
|
||||
config global 'global'
|
||||
option role_based_access '1'
|
||||
list user 'admin'
|
||||
list user 'user'
|
||||
50
sulu/files/etc/init.d/sulu
Executable file
50
sulu/files/etc/init.d/sulu
Executable file
@@ -0,0 +1,50 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
START=99
|
||||
STOP=01
|
||||
|
||||
. /lib/functions.sh
|
||||
. /etc/sulu/sulu.sh
|
||||
|
||||
log() {
|
||||
echo "${@}"|logger -t sulu.init -p debug
|
||||
}
|
||||
|
||||
validate_sulu_global_section()
|
||||
{
|
||||
uci_validate_section sulu global global \
|
||||
'enabled:bool:1' \
|
||||
'enable_system_credentials:bool:1' \
|
||||
'role_based_access:bool:0'
|
||||
}
|
||||
|
||||
start_service() {
|
||||
local enabled enable_system_credentials role_based_access
|
||||
|
||||
config_load sulu
|
||||
procd_open_instance sulu
|
||||
|
||||
validate_sulu_global_section || return 0;
|
||||
# append sulu connection injection
|
||||
if [ "${enabled}" -eq "0" ]; then
|
||||
procd_close_instance
|
||||
return 0
|
||||
fi
|
||||
|
||||
update_nginx_template
|
||||
configure_sulu "${enable_system_credentials}" "${role_based_access}" 1
|
||||
generate_sulu_conn_config "${role_based_access}"
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
service_triggers()
|
||||
{
|
||||
procd_add_reload_trigger "sulu" "nginx"
|
||||
}
|
||||
50
sulu/files/etc/sulu/nginx.locations
Normal file
50
sulu/files/etc/sulu/nginx.locations
Normal file
@@ -0,0 +1,50 @@
|
||||
error_page 497 301 =307 https://$host:$server_port$request_uri;
|
||||
|
||||
location /robots.txt {
|
||||
return 200 "User-agent: *\nDisallow: /\n";
|
||||
}
|
||||
|
||||
location /sitemap.xml {
|
||||
return 200 "User-agent: *\nDisallow: /\n";
|
||||
}
|
||||
|
||||
location /ws {
|
||||
proxy_pass_request_headers on;
|
||||
proxy_cache off;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
proxy_set_header X-Forwarded-Server $host;
|
||||
proxy_set_header X-Forwarded-Port $server_port;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,Content-Type,Range' always;
|
||||
proxy_pass http://websocket;
|
||||
}
|
||||
|
||||
location / {
|
||||
autoindex on;
|
||||
expires -1;
|
||||
|
||||
if ($request_method = 'OPTIONS') {
|
||||
add_header 'Access-Control-Allow-Origin' '*';
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,Content-Type,Range';
|
||||
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
add_header 'Content-Type' 'text/plain; charset=utf-8';
|
||||
add_header 'Content-Length' 0;
|
||||
return 204;
|
||||
}
|
||||
if ($request_method = 'GET') {
|
||||
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,Content-Type,Range' always;
|
||||
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
|
||||
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
|
||||
}
|
||||
}
|
||||
95
sulu/files/etc/sulu/roles.json
Normal file
95
sulu/files/etc/sulu/roles.json
Normal file
@@ -0,0 +1,95 @@
|
||||
{
|
||||
"roles": [
|
||||
{
|
||||
"name": "admin",
|
||||
"permission": [
|
||||
{
|
||||
"object": "Device.",
|
||||
"perm": [
|
||||
"PERMIT_ALL"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "user",
|
||||
"permission": [
|
||||
{
|
||||
"object": "Device.",
|
||||
"perm": [
|
||||
"PERMIT_GET",
|
||||
"PERMIT_GET_INST",
|
||||
"PERMIT_OBJ_INFO",
|
||||
"PERMIT_CMD_INFO"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "Device.LocalAgent.Subscription.",
|
||||
"perm": [
|
||||
"PERMIT_GET",
|
||||
"PERMIT_GET_INST",
|
||||
"PERMIT_OBJ_INFO",
|
||||
"PERMIT_CMD_INFO",
|
||||
"PERMIT_ADD",
|
||||
"PERMIT_SET",
|
||||
"PERMIT_DEL"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "Device.WiFi.",
|
||||
"perm": [
|
||||
"PERMIT_GET",
|
||||
"PERMIT_GET_INST",
|
||||
"PERMIT_OBJ_INFO",
|
||||
"PERMIT_CMD_INFO",
|
||||
"PERMIT_OPER",
|
||||
"PERMIT_SUBS_VAL_CHANGE",
|
||||
"PERMIT_SUBS_OBJ_ADD",
|
||||
"PERMIT_SUBS_OBJ_DEL",
|
||||
"PERMIT_SUBS_EVT_OPER_COMP"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "Device.DNS.",
|
||||
"perm": [
|
||||
"PERMIT_GET",
|
||||
"PERMIT_GET_INST",
|
||||
"PERMIT_OBJ_INFO",
|
||||
"PERMIT_CMD_INFO",
|
||||
"PERMIT_OPER",
|
||||
"PERMIT_SUBS_VAL_CHANGE",
|
||||
"PERMIT_SUBS_OBJ_ADD",
|
||||
"PERMIT_SUBS_OBJ_DEL",
|
||||
"PERMIT_SUBS_EVT_OPER_COMP"
|
||||
]
|
||||
},
|
||||
{
|
||||
"object": "Device.IP.",
|
||||
"perm": [
|
||||
"PERMIT_GET",
|
||||
"PERMIT_GET_INST",
|
||||
"PERMIT_OBJ_INFO",
|
||||
"PERMIT_CMD_INFO",
|
||||
"PERMIT_OPER",
|
||||
"PERMIT_SUBS_VAL_CHANGE",
|
||||
"PERMIT_SUBS_OBJ_ADD",
|
||||
"PERMIT_SUBS_OBJ_DEL",
|
||||
"PERMIT_SUBS_EVT_OPER_COMP"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "undefined-1"
|
||||
},
|
||||
{
|
||||
"name": "undefined-2"
|
||||
},
|
||||
{
|
||||
"name": "undefined-3"
|
||||
},
|
||||
{
|
||||
"name": "undefined-4"
|
||||
}
|
||||
]
|
||||
}
|
||||
388
sulu/files/etc/sulu/sulu.sh
Normal file
388
sulu/files/etc/sulu/sulu.sh
Normal file
@@ -0,0 +1,388 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
_RESTART_SERVICES="0"
|
||||
|
||||
mkdir -p /tmp/sulu/
|
||||
|
||||
function slog()
|
||||
{
|
||||
echo "$*" |logger -t sulu.init -p debug
|
||||
}
|
||||
|
||||
function _get_agent_id()
|
||||
{
|
||||
local oui serial endpointid
|
||||
|
||||
endpointid="$(uci_get obuspa localagent EndpointID)"
|
||||
if [ -z "${endpointid}" ]; then
|
||||
oui="$(db -q get device.deviceinfo.ManufacturerOUI)"
|
||||
serial="$(db -q get device.deviceinfo.SerialNumber)"
|
||||
echo "${oui}-${serial//+/%2B}"
|
||||
else
|
||||
endpointid="$(echo "${endpointid/::/,}"|cut -d "," -f 2)"
|
||||
endpointid="${endpointid//+/%2B}"
|
||||
fi
|
||||
}
|
||||
|
||||
function _get_endpoint_id()
|
||||
{
|
||||
local oui serial endpointid
|
||||
|
||||
endpointid="$(uci_get obuspa localagent EndpointID)"
|
||||
if [ -z "${endpointid}" ]; then
|
||||
oui="$(db -q get device.deviceinfo.ManufacturerOUI)"
|
||||
serial="$(db -q get device.deviceinfo.SerialNumber)"
|
||||
echo "os::${oui}-${serial//+/%2B}"
|
||||
else
|
||||
echo "${endpointid//+/%2B}"
|
||||
fi
|
||||
}
|
||||
|
||||
function _get_sulu_users()
|
||||
{
|
||||
echo "$(uci -q get sulu.global.user)"
|
||||
}
|
||||
|
||||
function _get_sulu_root()
|
||||
{
|
||||
local root
|
||||
|
||||
root="$(uci -q get nginx._sulu_s.root)"
|
||||
echo "${root:-/sulu}"
|
||||
}
|
||||
|
||||
function _get_usp_upstream_port()
|
||||
{
|
||||
local port
|
||||
|
||||
port="$(uci -q get mosquitto.sulu.port)"
|
||||
echo "${port:-9009}"
|
||||
}
|
||||
|
||||
function _get_sulu_acl_file()
|
||||
{
|
||||
local file
|
||||
|
||||
file="$(uci -q get mosquitto.sulu.acl_file)"
|
||||
echo "${file}"
|
||||
}
|
||||
|
||||
function _get_sulu_tls_port()
|
||||
{
|
||||
local port listen
|
||||
|
||||
listen="$(uci -q get nginx._sulu_s.listen)"
|
||||
port="$(echo $listen|grep -Eo '[0-9]+'|head -n 1)"
|
||||
|
||||
echo "${port:-8443}"
|
||||
}
|
||||
|
||||
function update_nginx_template()
|
||||
{
|
||||
local port
|
||||
|
||||
UCI_TEMPLATE="/etc/nginx/uci.conf.template"
|
||||
port="$(_get_usp_upstream_port)"
|
||||
if ! grep -q "upstream websocket { server 127.0.0.1:${port}; }" ${UCI_TEMPLATE}; then
|
||||
sed -i "s/upstream websocket { server 127.0.0.1:[0-9]\+; }/upstream websocket { server 127.0.0.1:${var}; }/" ${UCI_TEMPLATE}
|
||||
log "Restarting nginx"
|
||||
ubus call uci commit '{"config":"nginx"}'
|
||||
fi
|
||||
}
|
||||
|
||||
function generate_sulu_conn_config()
|
||||
{
|
||||
local rbac users SCONFIG
|
||||
|
||||
rbac="${1}"
|
||||
users="$(_get_sulu_users)"
|
||||
SCONFIG="$(_get_sulu_root)/config/connectionConfig.json"
|
||||
|
||||
json_init;
|
||||
if [ "${rbac}" -eq "1" ]; then
|
||||
json_add_string 'currentConnection' 'rbac';
|
||||
else
|
||||
json_add_string 'currentConnection' 'main';
|
||||
fi
|
||||
json_add_object 'connections';
|
||||
json_add_object 'rbac';
|
||||
json_add_string 'toId' "$(_get_endpoint_id)";
|
||||
json_add_int 'port' "$(_get_sulu_tls_port)";
|
||||
json_add_string 'path' "/ws";
|
||||
json_add_string 'protocol' 'wss';
|
||||
json_add_array 'auth';
|
||||
json_close_array;
|
||||
|
||||
json_add_object 'overrides';
|
||||
for f in ${users}; do
|
||||
json_add_object "${f}";
|
||||
json_add_string 'fromId' "self::sulu-${f}";
|
||||
json_add_string 'publishEndpoint' "/usp/$(_get_agent_id)/${f}/endpoint";
|
||||
json_add_string 'subscribeEndpoint' "/usp/$(_get_agent_id)/${f}/controller";
|
||||
json_close_object;
|
||||
done
|
||||
json_close_object;
|
||||
json_close_object;
|
||||
|
||||
# add the default connection
|
||||
json_add_object 'main';
|
||||
json_add_string 'fromId' 'proto::interop-usp-controller';
|
||||
json_add_string 'toId' "$(_get_endpoint_id)";
|
||||
json_add_int 'port' "$(_get_sulu_tls_port)";
|
||||
json_add_string 'path' "/ws";
|
||||
json_add_string 'protocol' 'wss';
|
||||
json_add_string 'publishEndpoint' "/usp/endpoint";
|
||||
json_add_string 'subscribeEndpoint' "/usp/controller";
|
||||
json_add_array 'auth';
|
||||
json_close_array;
|
||||
json_close_object;
|
||||
json_close_object;
|
||||
|
||||
json_dump > ${SCONFIG}
|
||||
}
|
||||
|
||||
function set_sulu_connection_mode()
|
||||
{
|
||||
local rbac profile config SCONFIG
|
||||
|
||||
SCONFIG="$(_get_sulu_root)/config/connectionConfig.json"
|
||||
rbac="${1}"
|
||||
|
||||
profile="$(jq '.currentConnection' ${SCONFIG})"
|
||||
if [ "$rbac" -eq "1" -a "${profile}" == "\"main\"" ]; then
|
||||
config="$(jq '.currentConnection = "rbac"' ${SCONFIG})"
|
||||
echo "${config}" > ${SCONFIG}
|
||||
elif [ "$rbac" -eq "0" -a "${profile}" == "\"rbac\"" ]; then
|
||||
config="$(jq '.currentConnection = "main"' ${SCONFIG})"
|
||||
echo "${config}" > ${SCONFIG}
|
||||
fi
|
||||
}
|
||||
|
||||
function update_sulu_connection_port()
|
||||
{
|
||||
local port ws_port SCONF
|
||||
|
||||
SCONF="$(_get_sulu_root)/config/connectionConfig.json"
|
||||
ws_port="$(_get_sulu_tls_port)"
|
||||
|
||||
port="$(jq '.connections.rbac.port' ${SCONF})"
|
||||
if [ "${port}" -ne "${ws_port}" ]; then
|
||||
jq ".connections.main.port = ${ws_port} | .connections.rbac.port = ${ws_port}" ${SCONF} > /tmp/sulu/ss_port.json
|
||||
mv /tmp/sulu/ss_port.json ${SCONF}
|
||||
fi
|
||||
}
|
||||
|
||||
function _update_obuspa_config()
|
||||
{
|
||||
local restart
|
||||
|
||||
restart=0
|
||||
if ! uci_get obuspa localmqtt >/dev/null 2>&1; then
|
||||
uci_add obuspa mqtt localmqtt
|
||||
uci_set obuspa localmqtt BrokerAddress "127.0.0.1"
|
||||
uci_set obuspa localmqtt BrokerPort "1883"
|
||||
uci_set obuspa localmqtt TransportProtocol "TCP/IP"
|
||||
restart=1
|
||||
fi
|
||||
|
||||
if ! uci_get obuspa agent_mtp >/dev/null 2>&1; then
|
||||
uci_add obuspa mtp agent_mtp
|
||||
uci_set obuspa agent_mtp Protocol "MQTT"
|
||||
uci_set obuspa agent_mtp ResponseTopicConfigured "/usp/endpoint"
|
||||
uci_set obuspa agent_mtp mqtt "localmqtt"
|
||||
restart=1
|
||||
fi
|
||||
|
||||
if ! uci_get obuspa localcontroller >/dev/null 2>&1; then
|
||||
uci_add obuspa controller localcontroller
|
||||
uci_set obuspa localcontroller EndpointID "proto::interop-usp-controller"
|
||||
uci_set obuspa localcontroller Protocol "MQTT"
|
||||
uci_set obuspa localcontroller Topic "/usp/controller"
|
||||
uci_set obuspa localcontroller mqtt "localmqtt"
|
||||
uci_set obuspa localcontroller assigned_role_name "full_access"
|
||||
restart=1
|
||||
fi
|
||||
return "${restart}"
|
||||
}
|
||||
|
||||
function _remove_obuspa_config()
|
||||
{
|
||||
local restart
|
||||
|
||||
restart=0
|
||||
if [ "$(uci_get obuspa localmqtt)" == "mqtt" ]; then
|
||||
uci_remove obuspa localmqtt
|
||||
restart=1
|
||||
fi
|
||||
if [ "$(uci_get obuspa agent_mtp)" == "mtp" ]; then
|
||||
uci_remove obuspa agent_mtp
|
||||
restart=1
|
||||
fi
|
||||
if [ "$(uci_get obuspa localcontroller)" == "controller" ]; then
|
||||
uci_remove obuspa localcontroller
|
||||
restart=1
|
||||
fi
|
||||
return "${restart}"
|
||||
}
|
||||
|
||||
function _update_obuspa_config_rbac() {
|
||||
local agent users restart
|
||||
|
||||
agent="$(_get_agent_id)"
|
||||
users="$(_get_sulu_users)"
|
||||
restart=0
|
||||
|
||||
for f in ${users}; do
|
||||
local sec
|
||||
|
||||
# Add mqtt
|
||||
sec="mqtt_sulu_${f}"
|
||||
if ! uci_get obuspa ${sec} >/dev/null 2>&1; then
|
||||
uci_add obuspa mqtt ${sec}
|
||||
uci_set obuspa ${sec} BrokerAddress "127.0.0.1"
|
||||
uci_set obuspa ${sec} BrokerPort "1883"
|
||||
uci_set obuspa ${sec} TransportProtocol "TCP/IP"
|
||||
restart=1
|
||||
fi
|
||||
|
||||
# Add mtp
|
||||
sec="mtp_sulu_${f}"
|
||||
if ! uci_get obuspa ${sec} >/dev/null 2>&1; then
|
||||
uci_add obuspa mtp ${sec}
|
||||
uci_set obuspa ${sec} Protocol "MQTT"
|
||||
uci_set obuspa ${sec} ResponseTopicConfigured "/usp/${agent}/${f}/endpoint"
|
||||
uci_set obuspa ${sec} mqtt "mqtt_sulu_$f"
|
||||
restart=1
|
||||
fi
|
||||
|
||||
# Add controller
|
||||
sec="controller_sulu_${f}"
|
||||
if ! uci_get obuspa ${sec} >/dev/null 2>&1; then
|
||||
uci_add obuspa controller ${sec}
|
||||
uci_set obuspa ${sec} EndpointID "self::sulu-${f}"
|
||||
uci_set obuspa ${sec} Protocol "MQTT"
|
||||
uci_set obuspa ${sec} Topic "/usp/${agent}/${f}/controller"
|
||||
uci_set obuspa ${sec} mqtt "mqtt_sulu_$f"
|
||||
uci_set obuspa ${sec} assigned_role_name "$f"
|
||||
restart=1
|
||||
fi
|
||||
done
|
||||
if [ -f "/etc/sulu/roles.json" ]; then
|
||||
uci_set obuspa global role_file "/etc/sulu/roles.json"
|
||||
fi
|
||||
return "${restart}"
|
||||
}
|
||||
|
||||
function _remove_sulu_sec()
|
||||
{
|
||||
local sec
|
||||
|
||||
if [[ "${1}" == *"_sulu_"* ]]; then
|
||||
uci_remove obuspa ${1}
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
function _remove_obuspa_config_rbac()
|
||||
{
|
||||
local restart
|
||||
|
||||
restart=0
|
||||
config_foreach _remove_sulu_sec mqtt
|
||||
restart="$(( restart + $? ))"
|
||||
config_foreach _remove_sulu_sec mtp
|
||||
restart="$(( restart + $? ))"
|
||||
config_foreach _remove_sulu_sec controller
|
||||
restart="$(( restart + $? ))"
|
||||
uci_set obuspa global role_file ""
|
||||
|
||||
return "${restart}"
|
||||
}
|
||||
|
||||
function _create_acl() {
|
||||
local agentid rbac users restart
|
||||
local ACL_FILE
|
||||
|
||||
rbac="${1:-0}"
|
||||
restart="0"
|
||||
|
||||
ACL_FILE="$(_get_sulu_acl_file)"
|
||||
if [ -z "${ACL_FILE}" -o "${rbac}" -eq "0" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ -f "${ACL_FILE}" ]; then
|
||||
rm -f "${ACL_FILE}"
|
||||
fi
|
||||
touch "${ACL_FILE}"
|
||||
|
||||
if [ "${rbac}" -eq "1" ]; then
|
||||
users="$(_get_sulu_users)"
|
||||
agentid="$(_get_agent_id)"
|
||||
for f in ${users}; do
|
||||
if ! grep -q "user $f" ${ACL_FILE}; then
|
||||
echo "user ${f}" >> ${ACL_FILE}
|
||||
echo "topic read /usp/${agentid}/${f}/controller/reply-to/#" >> ${ACL_FILE}
|
||||
echo "topic write /usp/${agentid}/${f}/endpoint/#" >> ${ACL_FILE}
|
||||
echo "topic read /usp/${agentid}/${f}/controller/#" >> ${ACL_FILE}
|
||||
echo "" >> ${ACL_FILE}
|
||||
restart="1"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "${restart}" -gt "0" ]; then
|
||||
slog "Restarting mosquitto..."
|
||||
ubus call uci commit '{"config":"mosquitto"}'
|
||||
fi
|
||||
}
|
||||
|
||||
function update_obuspa_config()
|
||||
{
|
||||
local rbac restart
|
||||
|
||||
rbac="${1}"
|
||||
restart=0
|
||||
|
||||
uci_load obuspa
|
||||
if [ "${rbac}" -eq "1" ]; then
|
||||
_remove_obuspa_config
|
||||
restart="$(( restart + $? ))"
|
||||
_update_obuspa_config_rbac
|
||||
restart="$(( restart + $? ))"
|
||||
else
|
||||
_remove_obuspa_config_rbac
|
||||
restart="$(( restart + $? ))"
|
||||
_update_obuspa_config
|
||||
restart="$(( restart + $? ))"
|
||||
fi
|
||||
uci_commit obuspa
|
||||
|
||||
if [ "${_RESTART_SERVICES}" -eq "1" -a "${restart}" -gt "0" ]; then
|
||||
slog "Restarting obuspa..."
|
||||
ubus call uci commit '{"config":"obuspa"}'
|
||||
fi
|
||||
}
|
||||
|
||||
function configure_sulu()
|
||||
{
|
||||
local sys_cred rbac restart
|
||||
|
||||
sys_cred="${1}"
|
||||
rbac="${2}"
|
||||
restart="${3:-0}"
|
||||
|
||||
if [ -z "${sys_cred}" -o -z "${rbac}" ]; then
|
||||
slog "Invalid inputs"
|
||||
return 0
|
||||
fi
|
||||
|
||||
_RESTART_SERVICES="${restart}"
|
||||
|
||||
set_sulu_connection_mode "${rbac}"
|
||||
update_obuspa_config "${rbac}"
|
||||
_create_acl "${rbac}"
|
||||
}
|
||||
12
sulu/files/etc/uci-defaults/01-update-nginx-uci-template
Executable file
12
sulu/files/etc/uci-defaults/01-update-nginx-uci-template
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
UCI_TEMPLATE="/etc/nginx/uci.conf.template"
|
||||
update_nginx_uci_template()
|
||||
{
|
||||
if ! grep -q "upstream websocket" ${UCI_TEMPLATE}; then
|
||||
sed -i '/#UCI_HTTP_CONFIG$/i\ map $http_upgrade $connection_upgrade { default upgrade; "" close; }' ${UCI_TEMPLATE}
|
||||
sed -i '/#UCI_HTTP_CONFIG$/i\ upstream websocket { server 127.0.0.1:9009; }' ${UCI_TEMPLATE}
|
||||
fi
|
||||
}
|
||||
|
||||
update_nginx_uci_template
|
||||
37
sulu/files/etc/uci-defaults/10-add-mqtt-config
Executable file
37
sulu/files/etc/uci-defaults/10-add-mqtt-config
Executable file
@@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
if [ ! -f "/etc/config/mosquitto" ]; then
|
||||
echo "Local mosquitto broker not available"
|
||||
return 0
|
||||
fi
|
||||
|
||||
add_obuspa_config()
|
||||
{
|
||||
if ! uci_get mosquitto obuspa >/dev/null 2>&1; then
|
||||
uci_add mosquitto listener obuspa
|
||||
uci_set mosquitto obuspa enabled 1
|
||||
uci_set mosquitto obuspa port '1883'
|
||||
uci_set mosquitto obuspa no_remote_access '1'
|
||||
uci_set mosquitto obuspa allow_anonymous '1'
|
||||
fi
|
||||
}
|
||||
|
||||
add_sulu_config()
|
||||
{
|
||||
if ! uci_get mosquitto sulu >/dev/null 2>&1; then
|
||||
uci_add mosquitto listener sulu
|
||||
uci_set mosquitto sulu enabled 1
|
||||
uci_set mosquitto sulu port '9009'
|
||||
uci_set mosquitto sulu no_remote_access '1'
|
||||
uci_set mosquitto sulu protocol 'websockets'
|
||||
uci_set mosquitto sulu require_certificates '0'
|
||||
uci_set mosquitto sulu auth_plugin '/usr/lib/mosquitto_auth_shadow.so'
|
||||
uci_set mosquitto sulu acl_file '/tmp/sulu/mqtt.acl'
|
||||
fi
|
||||
}
|
||||
|
||||
uci_load mosquitto
|
||||
add_obuspa_config
|
||||
add_sulu_config
|
||||
35
sulu/files/etc/uci-defaults/40-add-sulu-nginx-config
Executable file
35
sulu/files/etc/uci-defaults/40-add-sulu-nginx-config
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
add_sulu_nginx_uci()
|
||||
{
|
||||
uci_load nginx
|
||||
|
||||
if ! uci_get nginx _sulu_s >/dev/null 2>&1; then
|
||||
uci_add nginx server _sulu_s
|
||||
uci_set nginx _sulu_s root '/sulu'
|
||||
uci_add_list nginx _sulu_s listen "8443 http2 ssl"
|
||||
uci_add_list nginx _sulu_s listen "[::]:8443 http2 ssl"
|
||||
uci_set nginx _sulu_s server_name '_sulu_s'
|
||||
uci_add_list nginx _sulu_s include 'restrict_locally'
|
||||
uci_add_list nginx _sulu_s include '/etc/sulu/nginx.locations'
|
||||
uci_set nginx _sulu_s uci_manage_ssl 'self-signed'
|
||||
uci_set nginx _sulu_s ssl_certificate '/etc/nginx/conf.d/_lan.crt'
|
||||
uci_set nginx _sulu_s ssl_certificate_key '/etc/nginx/conf.d/_lan.key'
|
||||
uci_set nginx _sulu_s ssl_session_cache 'shared:SSL:32k'
|
||||
uci_set nginx _sulu_s ssl_session_timeout '64m'
|
||||
uci_set nginx _sulu_s access_log 'off; # logd openwrt'
|
||||
fi
|
||||
|
||||
if ! uci_get nginx _suluredirect >/dev/null 2>&1; then
|
||||
uci_add nginx server _suluredirect
|
||||
uci_add_list nginx _suluredirect listen "8080"
|
||||
uci_add_list nginx _suluredirect listen "[::]:8080"
|
||||
uci_set nginx _suluredirect server_name '_suluredirect'
|
||||
uci_set nginx _suluredirect return 'https://$host:8443$request_uri'
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
add_sulu_nginx_uci
|
||||
10
sulu/files/etc/uci-defaults/99-fix-sulu-config
Executable file
10
sulu/files/etc/uci-defaults/99-fix-sulu-config
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /etc/sulu/sulu.sh
|
||||
|
||||
config_load sulu
|
||||
config_get enable_system_credentials global enable_system_credentials 1
|
||||
config_get role_based_access global role_based_access 0
|
||||
|
||||
configure_sulu "${enable_system_credentials}" "${role_based_access}" 0
|
||||
generate_sulu_conn_config "${role_based_access}"
|
||||
@@ -1,25 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2023 IOPSYS
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=sulu-base
|
||||
PKG_VERSION:=2.0.1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu.git
|
||||
PKG_SOURCE_VERSION:=72235b4f6eaf8dcd70a1e16504a5381a3fbded47
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
SULU_MOD:=core
|
||||
include ../sulu-builder/sulu.mk
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/sulu/config/widgets
|
||||
$(CP) $(PKG_BUILD_DIR)/src/config/*.json $(1)/sulu/config/
|
||||
$(CP) $(PKG_BUILD_DIR)/src/config/widgets/diagnostics.json $(1)/sulu/config/widgets/
|
||||
$(CP) $(PKG_BUILD_DIR)/src/config/widgets/wan.json $(1)/sulu/config/widgets/
|
||||
endef
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@@ -1,124 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2021-2023 IOPSYS
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=sulu-builder
|
||||
PKG_VERSION:=2.0.1
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu-builder.git
|
||||
PKG_SOURCE_VERSION:=079153c3acda3ba8fe37c17851857f5b6c39cdc7
|
||||
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)
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
PKG_LICENSE:=PROPRIETARY IOPSYS
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
SULU_PLUGINS:=$(filter-out Readme.md,$(notdir $(wildcard ../*)))
|
||||
SULU_EXTRA:=$(subst $\",,$(CONFIG_SULU_EXTRA_PACKAGES))
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/sulu/default
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
SUBMENU:=SULU
|
||||
TITLE:=SULU-CE
|
||||
DEPENDS:=+nginx +mosquitto-auth-shadow +usermngr +jq
|
||||
endef
|
||||
|
||||
define Package/sulu
|
||||
$(Package/sulu/default)
|
||||
CONFLICTS:=sulu-builder
|
||||
TITLE += (Binaries)
|
||||
VARIANT:=binary
|
||||
DEFAULT_VARIANT:=1
|
||||
endef
|
||||
|
||||
define Package/sulu-builder
|
||||
$(Package/sulu/default)
|
||||
TITLE += (Builder)
|
||||
VARIANT:=builder
|
||||
DEPENDS+=+sulu-base $(foreach plugin,$(SULU_PLUGINS), +PACKAGE_$(plugin):$(plugin)) $(foreach plugin,$(SULU_EXTRA), +PACKAGE_$(plugin):$(plugin))
|
||||
MENU:=1
|
||||
endef
|
||||
|
||||
define Package/sulu/description
|
||||
SULU-CE ReactJS based Web UI works on USP with websocket.
|
||||
endef
|
||||
|
||||
define Package/sulu-builder/description
|
||||
SULU-CE ReactJS based Web UI builder.
|
||||
endef
|
||||
|
||||
define Package/sulu-builder/config
|
||||
menu "Configuration"
|
||||
depends on PACKAGE_sulu-builder
|
||||
|
||||
config SULU_EXTRA_PACKAGES
|
||||
string "Space separated list of sulu packages"
|
||||
help
|
||||
You can specify the list of non core sulu package,
|
||||
so that sulu-builder include them before building the core.
|
||||
endmenu
|
||||
endef
|
||||
|
||||
ifeq ($(BUILD_VARIANT),builder)
|
||||
define Build/Compile
|
||||
VERSION="v${PKG_VERSION}" CORE_DIR="../core/sulu-*" PLUGINS_PATH="../plugins" $(MAKE) -C $(PKG_BUILD_DIR)/
|
||||
endef
|
||||
else
|
||||
define Build/Compile
|
||||
# Pass
|
||||
endef
|
||||
endif
|
||||
|
||||
define Build/Clean
|
||||
$(RM) -r $(BUILD_DIR)/sulu-$(PKG_VERSION)
|
||||
endef
|
||||
|
||||
define Package/sulu/install/Default
|
||||
$(INSTALL_DIR) $(1)/sulu/config/widgets
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_BIN) ./files/etc/config/sulu $(1)/etc/config/sulu
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/etc/init.d/sulu $(1)/etc/init.d/sulu
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/sulu
|
||||
$(INSTALL_DATA) ./files/etc/sulu/roles.json $(1)/etc/sulu/
|
||||
$(INSTALL_BIN) ./files/etc/sulu/sulu.sh $(1)/etc/sulu/
|
||||
$(INSTALL_DATA) ./files/etc/sulu/nginx.locations $(1)/etc/sulu/
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/99-fix-sulu-config $(1)/etc/uci-defaults/
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/40-add-sulu-nginx-config $(1)/etc/uci-defaults/
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/01-update-nginx-uci-template $(1)/etc/uci-defaults/
|
||||
$(INSTALL_BIN) ./files/etc/uci-defaults/10-add-mqtt-config $(1)/etc/uci-defaults/
|
||||
endef
|
||||
|
||||
define Package/sulu/install
|
||||
$(Package/sulu/install/Default)
|
||||
$(CP) $(PKG_BUILD_DIR)/dist/* $(1)/sulu
|
||||
ifneq ($(CONFIG_PACKAGE_skopeo)$(CONFIG_PACKAGE_umoci),yy)
|
||||
$(RM) $(1)/sulu/config/widgets/lcm-store.json
|
||||
endif
|
||||
endef
|
||||
|
||||
define Package/sulu-builder/install
|
||||
$(Package/sulu/install/Default)
|
||||
$(CP) $(PKG_BUILD_DIR)/build/dist/* $(1)/sulu
|
||||
$(CP) $(PKG_BUILD_DIR)/build/src/config/*.json $(1)/sulu/config/
|
||||
$(CP) $(PKG_BUILD_DIR)/build/src/config/widgets/diagnostics.json $(1)/sulu/config/widgets/
|
||||
$(CP) $(PKG_BUILD_DIR)/build/src/config/widgets/wan.json $(1)/sulu/config/widgets/
|
||||
ifeq ($(CONFIG_PACKAGE_skopeo)$(CONFIG_PACKAGE_umoci),yy)
|
||||
$(CP) $(PKG_BUILD_DIR)/build/src/config/widgets/lcm-store.json $(1)/sulu/config/widgets/
|
||||
endif
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,sulu-builder))
|
||||
$(eval $(call BuildPackage,sulu))
|
||||
@@ -1,47 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2023 IOPSYS
|
||||
#
|
||||
|
||||
MK_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||
SULU_NAME?=$(notdir $(CURDIR))
|
||||
SULU_URL?=https://dev.iopsys.eu/websdk
|
||||
SULU_MAINTAINER?=IOPSYS SuLu team
|
||||
|
||||
SULU_MOD?=plugins
|
||||
|
||||
PKG_NAME?=$(SULU_NAME)
|
||||
PKG_RELEASE?=1
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_LICENSE:=PROPRIETARY IOPSYS
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
SULU_VERSION=$(shell grep -oP '(?<=^PKG_VERSION:=).*' ${MK_DIR}/Makefile)
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/sulu-$(SULU_VERSION)/$(SULU_MOD)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/$(PKG_NAME)
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
SUBMENU:=SULU
|
||||
TITLE:=$(if $(SULU_TITLE),$(SULU_TITLE),Sulu plugin or module $(SULU_NAME))
|
||||
EXTRA_DEPENDS:=sulu-builder
|
||||
URL:=$(SULU_URL)/$(SULU_NAME)
|
||||
MAINTAINER:=$(SULU_MAINTAINER)
|
||||
endef
|
||||
|
||||
ifneq ($(SULU_DESCRIPTION),)
|
||||
define Package/$(PKG_NAME)/description
|
||||
$(strip $(SULU_DESCRIPTION))
|
||||
endef
|
||||
endif
|
||||
|
||||
define Build/Compile
|
||||
# Pass
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/sulu/config/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,$(PKG_NAME)))
|
||||
@@ -1,23 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2023 IOPSYS
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=sulu-lcm
|
||||
PKG_VERSION:=2.0.0
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu-lcm.git
|
||||
PKG_SOURCE_VERSION:=b3f6028fd168e58b93ae56f616e96712849c656a
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
include ../sulu-builder/sulu.mk
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/sulu/config/widgets
|
||||
ifeq ($(CONFIG_PACKAGE_skopeo)$(CONFIG_PACKAGE_umoci),yy)
|
||||
$(CP) $(PKG_BUILD_DIR)/src/config/widgets/lcm-store.json $(1)/sulu/config/widgets/
|
||||
endif
|
||||
endef
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@@ -1,16 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2023 IOPSYS
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=sulu-multi-ap
|
||||
PKG_VERSION:=2.0.0
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu-multi-ap.git
|
||||
PKG_SOURCE_VERSION:=1eca5af280789cef3feeeb4d296ed01f87b15bb0
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
include ../sulu-builder/sulu.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@@ -1,16 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2023 IOPSYS
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=sulu-parental-control
|
||||
PKG_VERSION:=2.0.0
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu-parental-control.git
|
||||
PKG_SOURCE_VERSION:=65491b1d1939f9946261d05735f50b8aee60f262
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
include ../sulu-builder/sulu.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2023 IOPSYS
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=sulu-theme-iopsys
|
||||
PKG_VERSION:=2.0.0
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu-theme-iopsys.git
|
||||
PKG_SOURCE_VERSION:=e80fea80cdf8d49db0ae70b5c26a5dab49b8a20d
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
include ../sulu-builder/sulu.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@@ -5,12 +5,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=swmodd
|
||||
PKG_VERSION:=2.1.21
|
||||
PKG_VERSION:=2.1.19
|
||||
|
||||
LOCAL_DEV:=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=8dca3cd5b3963821d4abf397740ce735938fb078
|
||||
PKG_SOURCE_VERSION:=d7a069beab09ee1134ba1bc784c3bc9269df2e23
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/swmodd.git
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
@@ -75,15 +75,15 @@ define Package/swmodd/install
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DIR) $(1)/usr/lib/bbfdm
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_DIR) $(1)/usr/share/swmodd/
|
||||
$(INSTALL_BIN) ./files/etc/init.d/swmodd $(1)/etc/init.d/swmodd
|
||||
$(INSTALL_BIN) ./files/etc/config/swmodd $(1)/etc/config/swmodd
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/swmodd $(1)/usr/sbin/swmodd
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/libswmodd.so $(1)/usr/lib/bbfdm/libswmodd.so
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/opkg_offline.sh $(1)/usr/share/swmodd/opkg_offline
|
||||
ifeq ($(CONFIG_PACKAGE_liblxc),y)
|
||||
$(INSTALL_DIR) $(1)/usr/share/lxc/templates/
|
||||
$(INSTALL_DIR) $(1)/usr/share/swmodd/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/templates/lxc-iopsys $(1)/usr/share/lxc/templates/lxc-iopsys
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/opkg_offline.sh $(1)/usr/share/swmodd/opkg_offline
|
||||
endif
|
||||
ifeq ($(CONFIG_PACKAGE_crun),y)
|
||||
$(INSTALL_DIR) $(1)/etc/swmodd
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=twamp
|
||||
PKG_VERSION:=1.2.4
|
||||
PKG_VERSION:=1.2.3
|
||||
|
||||
LOCAL_DEV:=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/twamp-light.git
|
||||
PKG_SOURCE_VERSION:=4811dd9fed8829fc8d0bcb67aba5d47e977b6d1a
|
||||
PKG_SOURCE_VERSION:=b0111c35ff4908edd82c5d5f4a3c0d6809605b94
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
endif
|
||||
|
||||
@@ -29,8 +29,8 @@ function configure_firewall()
|
||||
|
||||
function delete_rule()
|
||||
{
|
||||
while iptables -w 1 -nL zone_${1}_input --line-numbers 2>/dev/null | grep "TWAMP reflector port"; do
|
||||
rule_num="$(iptables -w 1 -nL zone_${1}_input --line-numbers | grep "TWAMP reflector port" | head -1|awk '{print $1}')"
|
||||
while iptables -w 1 -L zone_${1}_input --line-numbers 2>/dev/null | grep "TWAMP reflector port"; do
|
||||
rule_num="$(iptables -w 1 -L zone_${1}_input --line-numbers | grep "TWAMP reflector port" | head -1|awk '{print $1}')"
|
||||
if [ -n "${rule_num}" ]; then
|
||||
iptables -w 1 -D zone_${1}_input ${rule_num};
|
||||
fi
|
||||
|
||||
137
uboot/Makefile
Normal file
137
uboot/Makefile
Normal file
@@ -0,0 +1,137 @@
|
||||
#
|
||||
# Copyright (C) 2013-2014 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=u-boot
|
||||
PKG_VERSION:=2016.08
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
ifdef CONFIG_TARGET_airoha
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/ensemble/u-boot.git
|
||||
PKG_SOURCE_VERSION:=1b320f0656bfc8504fa4f771dd77d8e403ed00e0
|
||||
else
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/fork/uboot.git
|
||||
PKG_SOURCE_VERSION:=4cd73fe5db0ebfc1242ca9c85c14d7f0718eaf73
|
||||
endif
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
PKG_LICENSE:=GPL-2.0-or-later
|
||||
|
||||
# u-boot for mips_intel do not build in parallel.
|
||||
#PKG_BUILD_PARALLEL:=1
|
||||
|
||||
# we currently do not use OpenWRT u_boot make files
|
||||
#include $(INCLUDE_DIR)/u-boot.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
# prevent openwrt source date to be used as build date by u-boot
|
||||
unexport SOURCE_DATE_EPOCH
|
||||
|
||||
|
||||
define uboot/Default
|
||||
TITLE:=
|
||||
CONFIG:=
|
||||
IMAGE:=
|
||||
endef
|
||||
|
||||
UBOOT_IMG:=uboot.img
|
||||
|
||||
define uboot/ex400
|
||||
TITLE:=U-Boot for the ex400
|
||||
DEPENDS:=@TARGET_iopsys_ramips
|
||||
PKG_RELEASE:=7
|
||||
endef
|
||||
|
||||
define uboot/en7562
|
||||
TITLE:=U-Boot for the en7562
|
||||
CONFIG:=econet-en7562-ram
|
||||
DEPENDS:=@TARGET_airoha
|
||||
UBOOT_IMG:=u-boot-nand.bin
|
||||
endef
|
||||
|
||||
UBOOTS := \
|
||||
ex400 \
|
||||
en7562
|
||||
|
||||
define Package/uboot/template
|
||||
define Package/uboot-$(1)
|
||||
SECTION:=boot
|
||||
CATEGORY:=Boot Loaders
|
||||
TITLE:=$(2)
|
||||
URL:=http://www.denx.de/wiki/U-Boot
|
||||
VARIANT:=$(1)
|
||||
endef
|
||||
endef
|
||||
|
||||
define BuildUBootPackage
|
||||
$(eval $(uboot/Default))
|
||||
$(eval $(uboot/$(1)))
|
||||
$(call Package/uboot/template,$(1),$(TITLE))
|
||||
endef
|
||||
|
||||
ifdef BUILD_VARIANT
|
||||
$(eval $(call uboot/$(BUILD_VARIANT)))
|
||||
UBOOT_CONFIG:=$(if $(CONFIG),$(CONFIG),$(BUILD_VARIANT))
|
||||
UBOOT_IMAGE:=$(if $(IMAGE),$(IMAGE),openwrt-$(BOARD)-$(BUILD_VARIANT)-u-boot.bin)
|
||||
UBOOT_IOPSYS_VERSION:=$(PKG_RELEASE)
|
||||
endif
|
||||
|
||||
define Build/Configure
|
||||
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
|
||||
$(UBOOT_CONFIG)_config
|
||||
|
||||
$(SED) "s,CONFIG_INTENO_MAJOR=\"0\",CONFIG_INTENO_MAJOR=\"$(UBOOT_IOPSYS_VERSION)\"," $(PKG_BUILD_DIR)/.config
|
||||
|
||||
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
|
||||
oldconfig
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
|
||||
CROSS_COMPILE=$(TARGET_CROSS)
|
||||
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
|
||||
CROSS_COMPILE=$(TARGET_CROSS) env
|
||||
endef
|
||||
|
||||
# don't install /etc/init.d/uboot for intel-mips as it's not needed
|
||||
define Package/uboot/install/default
|
||||
$(INSTALL_DIR) $$(1)/lib/upgrade
|
||||
$(CP) ./files/uboot-upgrade $$(1)/lib/upgrade/
|
||||
|
||||
$(INSTALL_DIR) $(BIN_DIR)/$(TARGET)
|
||||
$(CP) \
|
||||
$(PKG_BUILD_DIR)/$(UBOOT_IMG) \
|
||||
$(BIN_DIR)/$(TARGET)/uboot.img
|
||||
$(CP) \
|
||||
$(PKG_BUILD_DIR)/$(UBOOT_IMG) \
|
||||
$(wildcard $(BUILD_DIR)/linux-$(BOARD)*)/uboot.img
|
||||
|
||||
$(INSTALL_DIR) $$(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tools/env/fw_printenv $$(1)/usr/sbin/
|
||||
ln -s /usr/sbin/fw_printenv $$(1)/usr/sbin/fw_setenv
|
||||
endef
|
||||
|
||||
define Package/uboot/install/template
|
||||
define Package/uboot-$(1)/install
|
||||
$(call Package/uboot/install/default,$(2))
|
||||
endef
|
||||
endef
|
||||
|
||||
$(foreach u,$(UBOOTS), \
|
||||
$(eval $(call Package/uboot/install/template,$(u),$(u))) \
|
||||
)
|
||||
|
||||
$(foreach u,$(UBOOTS), \
|
||||
$(eval $(call BuildUBootPackage,$(u))) \
|
||||
$(eval $(call BuildPackage,uboot-$(u))) \
|
||||
)
|
||||
8
uboot/files/uboot
Executable file
8
uboot/files/uboot
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=50
|
||||
|
||||
start() {
|
||||
. /lib/upgrade/uboot-upgrade
|
||||
uboot_upgrade /boot/uboot.img
|
||||
}
|
||||
87
uboot/files/uboot-upgrade
Executable file
87
uboot/files/uboot-upgrade
Executable file
@@ -0,0 +1,87 @@
|
||||
|
||||
. /usr/share/libubox/jshn.sh
|
||||
|
||||
sanity_check_env(){
|
||||
|
||||
# make sure iboot is used to start board, but only if verify_boot != 1
|
||||
# that allows a person to change the bootcmd and not have it overwritten automatically
|
||||
# but still force it to iboot for old boards.
|
||||
vb=$(fw_printenv -n verify_boot 2>/dev/null)
|
||||
|
||||
if [ "1" != "$verify_boot" ]
|
||||
then
|
||||
if ! fw_printenv -n bootcmd 2>/dev/null| grep iboot >/dev/null
|
||||
then
|
||||
echo "update uboot boot command"
|
||||
fw_setenv bootcmd "rescue;iboot"
|
||||
fw_setenv verify_boot 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# just set 115200 baudrate as it is really hardcoded in the binary blob
|
||||
fw_setenv baudrate 115200
|
||||
}
|
||||
|
||||
do_uboot_upgrade(){
|
||||
local u_ver
|
||||
echo "doing upgrade of u-boot old version $cur_Major.$cur_Minor new version $Major.$Minor"
|
||||
mtd erase /dev/mtd0
|
||||
mtd write $1 /dev/mtd0
|
||||
u_ver=$(strings /dev/mtd0 | grep 938f0820-2ffb-11e7-bbc9-2f21351ee6fb)
|
||||
[ -n "$u_ver" ] && fw_setenv uboot_inteno_version "$u_ver"
|
||||
sanity_check_env
|
||||
}
|
||||
|
||||
|
||||
# Return:
|
||||
# 0: update is successfull
|
||||
# 1: update is not needed
|
||||
# 2: error occured
|
||||
uboot_upgrade() {
|
||||
[ ! -f $1 ] && return 2
|
||||
|
||||
iver=$(fw_printenv -n uboot_inteno_version 2>/dev/null)
|
||||
|
||||
# Fixup improper json string for major and minor key.
|
||||
# this adds the missing "
|
||||
iver=$(echo $iver | sed -e 's/{Major:/{"Major":/' | sed -e 's/,Minor:/,"Minor":/')
|
||||
|
||||
if [ -z "$iver" ]
|
||||
then
|
||||
# if this variable is not set by u-boot the u-boot version is too old.
|
||||
do_uboot_upgrade $1
|
||||
return 0
|
||||
fi
|
||||
|
||||
# read in current version into Major Minor variables
|
||||
json_init
|
||||
json_load $(echo $iver |sed -e 's/938f0820-2ffb-11e7-bbc9-2f21351ee6fb: //')
|
||||
json_get_vars Major Minor
|
||||
|
||||
# echo "Major $Major"
|
||||
# echo "Minor $Minor"
|
||||
|
||||
cur_Major=$Major
|
||||
cur_Minor=$Minor
|
||||
|
||||
# read in new uboot version into Major Minor variables
|
||||
json_load $(strings $1 | grep 938f0820-2ffb-11e7-bbc9-2f21351ee6fb |sed -e 's/938f0820-2ffb-11e7-bbc9-2f21351ee6fb: //')
|
||||
json_get_vars Major Minor
|
||||
|
||||
# echo "Major $Major"
|
||||
# echo "Minor $Minor"
|
||||
|
||||
if [ $Major -gt $cur_Major ]
|
||||
then
|
||||
do_uboot_upgrade $1
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ $Major -eq $cur_Major -a $Minor -gt $cur_Minor ]
|
||||
then
|
||||
do_uboot_upgrade $1
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
@@ -8,13 +8,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=udpecho
|
||||
PKG_VERSION:=2.0.3
|
||||
PKG_VERSION:=2.0.2
|
||||
|
||||
LOCAL_DEV:=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/udpecho.git
|
||||
PKG_SOURCE_VERSION:=fd03a488979c06b5571cc6b47670cb145499ae81
|
||||
PKG_SOURCE_VERSION:=19a555c2d460db6bdfcfa53742011fbb6a4ca6af
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
endif
|
||||
|
||||
@@ -36,12 +36,12 @@ start_service() {
|
||||
|
||||
stop_service() {
|
||||
# Remove the USPechoserver ports created earlier
|
||||
while iptables -nL zone_wan_input --line-numbers | grep "Open UDPechoserver port" > /dev/null; do
|
||||
iptables -D zone_wan_input $(iptables -nL zone_wan_input --line-numbers | grep "Open UDPechoserver port" | head -1|awk '{print $1}');
|
||||
while iptables -L zone_wan_input --line-numbers | grep "Open UDPechoserver port" > /dev/null; do
|
||||
iptables -D zone_wan_input $(iptables -L zone_wan_input --line-numbers | grep "Open UDPechoserver port" | head -1|awk '{print $1}');
|
||||
done
|
||||
|
||||
while ip6tables -nL zone_wan_input --line-numbers | grep "Open UDPechoserver port" > /dev/null; do
|
||||
ip6tables -D zone_wan_input $(ip6tables -nL zone_wan_input --line-numbers | grep "Open UDPechoserver port" | head -1|awk '{print $1}');
|
||||
while ip6tables -L zone_wan_input --line-numbers | grep "Open UDPechoserver port" > /dev/null; do
|
||||
ip6tables -D zone_wan_input $(ip6tables -L zone_wan_input --line-numbers | grep "Open UDPechoserver port" | head -1|awk '{print $1}');
|
||||
done
|
||||
|
||||
plus_enable="$(uci -q -c /var/state get udpechoserver.udpechoserver.plus)"
|
||||
|
||||
@@ -9,7 +9,7 @@ PROG=/usr/sbin/urlfilter
|
||||
|
||||
configure_firewall()
|
||||
{
|
||||
iptables -w -nL FORWARD|grep -iqE "NFQUEUE"
|
||||
iptables -w -L FORWARD|grep -iqE "NFQUEUE"
|
||||
if [ "$?" -ne 0 ]; then
|
||||
# setup netfilter queue 0, use queue bypass so that if no application is
|
||||
# listening to this queue then traffic is unaffected.
|
||||
@@ -23,7 +23,7 @@ configure_firewall()
|
||||
# disable acceleration for https packet so that they can be read by urlfilter
|
||||
ebtables -A FORWARD -p ip --ip-protocol 6 --ip-destination-port 443 -j SKIPLOG
|
||||
fi
|
||||
ip6tables -w -nL FORWARD|grep -iqE "NFQUEUE"
|
||||
ip6tables -w -L FORWARD|grep -iqE "NFQUEUE"
|
||||
if [ "$?" -ne 0 ]; then
|
||||
#ip6table rules
|
||||
ip6tables -w -I FORWARD 1 -p tcp --dport 80 -j NFQUEUE --queue-num 0 --queue-bypass
|
||||
@@ -54,7 +54,7 @@ start_service() {
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
iptables -w -nL FORWARD|grep -iqE "NFQUEUE"
|
||||
iptables -w -L FORWARD|grep -iqE "NFQUEUE"
|
||||
if [ "$?" -eq 0 ]; then
|
||||
iptables -w -D FORWARD -p tcp --dport 80 -j NFQUEUE --queue-num 0 --queue-bypass
|
||||
iptables -w -D FORWARD -p tcp --dport 443 -j NFQUEUE --queue-num 0 --queue-bypass
|
||||
@@ -64,7 +64,7 @@ stop_service() {
|
||||
iptables -w -D INPUT -p udp --sport 53 -j NFQUEUE --queue-num 0 --queue-bypass
|
||||
ebtables -D FORWARD -p ip --ip-protocol 6 --ip-destination-port 443 -j SKIPLOG
|
||||
fi
|
||||
ip6tables -w -nL FORWARD|grep -iqE "NFQUEUE"
|
||||
ip6tables -w -L FORWARD|grep -iqE "NFQUEUE"
|
||||
if [ "$?" -eq 0 ]; then
|
||||
#ip6table rules
|
||||
ip6tables -w -D FORWARD -p tcp --dport 80 -j NFQUEUE --queue-num 0 --queue-bypass
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=usermngr
|
||||
PKG_VERSION:=1.0.6
|
||||
PKG_VERSION:=1.0.4
|
||||
|
||||
LOCAL_DEV:=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/usermngr.git
|
||||
PKG_SOURCE_VERSION:=099723ded69859623aca11a0bb3321452542efe5
|
||||
PKG_SOURCE_VERSION:=9d5f529e236e03c91e41c421de7702923a24664e
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
endif
|
||||
|
||||
@@ -6,18 +6,18 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=usp-js
|
||||
PKG_VERSION:=1.1.0
|
||||
PKG_VERSION:=1.0.1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/usp-js.git
|
||||
PKG_SOURCE_VERSION:=e9c2af99615a840784f896cea8d58a44c0a4a22e
|
||||
PKG_SOURCE_VERSION:=7e285eb006414f230a3c17acf1b6f4c31c987447
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
#PKG_BUILD_DEPENDS:=node-yarn/host
|
||||
PKG_BUILD_DEPENDS:=node-yarn/host
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/usp-js/default
|
||||
|
||||
@@ -18,7 +18,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:=db518f730a1668a61a5f497e7d6fc5514f323f8b
|
||||
PKG_SOURCE_VERSION:=d4e71d2afae6567e48f4b57b5cf026307e5cac57
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
endif
|
||||
@@ -38,10 +38,8 @@ define Package/$(PKG_NAME)
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=IOPSYS Voice Manager
|
||||
URL:=
|
||||
DEPENDS:= +libubox +ubus +libpicoevent +uci \
|
||||
+TARGET_brcmbca:bcmkernel +TARGET_brcmbca:libvoice-broadcom \
|
||||
+TARGET_ipq95xx:libvoice-d2 +TARGET_ipq95xx:d2-voice +TARGET_ipq95xx:kmod-d2-voice \
|
||||
+TARGET_airoha:kmod-voip_driver +TARGET_airoha:voip_app +TARGET_airoha:libvoice-airoha
|
||||
DEPENDS:= +libubox +ubus +libpicoevent +uci +TARGET_brcmbca:bcmkernel +TARGET_brcmbca:libvoice-broadcom \
|
||||
+TARGET_ipq95xx:libvoice-d2
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/description
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
#
|
||||
# Copyright (C) 2021-2023 IOPSYS Software Solutions AB
|
||||
# Copyright (C) 2021-2022 IOPSYS Software Solutions AB
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=wfadatad
|
||||
PKG_VERSION:=4.0.1.0
|
||||
PKG_VERSION:=2.11.0.4
|
||||
|
||||
LOCAL_DEV=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=8258aab08d2a331af9c8027d81f77b83dd8f9514
|
||||
PKG_SOURCE_VERSION:=24dcb18f3e60082c70ab17b0707073fd2981f0a9
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/wfadatad.git
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
PKG_MIRROR_HASH:=skip
|
||||
@@ -22,12 +22,24 @@ PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/wfadatad
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=WiFi DataElements Agent (standalone) daemon
|
||||
DEPENDS:=+libwifi +libuci +libubox +ubus +libpthread +libnl-genl \
|
||||
@(!PACKAGE_map-agent) +libieee1905 +map-plugin
|
||||
endef
|
||||
|
||||
define Package/wfadatad/description
|
||||
This package implements WiFi DataElements Agent.
|
||||
endef
|
||||
|
||||
define Package/wfadatad-collector
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=WiFi DataElements Collector Proxy
|
||||
DEPENDS:=+libuci +libubox +ubus +libpthread +libnl-genl \
|
||||
+libeasy +libwifiutils +libieee1905 +map-plugin
|
||||
+libieee1905 +map-plugin
|
||||
endef
|
||||
|
||||
define Package/wfadatad-collector/description
|
||||
@@ -48,6 +60,7 @@ MAKE_FLAGS += DEBUG=1
|
||||
endif
|
||||
|
||||
TARGET_CFLAGS += \
|
||||
-Wno-error=deprecated-declarations \
|
||||
-I$(STAGING_DIR)/usr/include \
|
||||
-I$(STAGING_DIR)/usr/include/libnl3 \
|
||||
-D_GNU_SOURCE
|
||||
@@ -63,15 +76,25 @@ MAKE_PATH:=src
|
||||
TARGET_CFLAGS += -DEASYMESH_VERSION=$(CONFIG_DECOLLECTOR_EASYMESH_VERSION)
|
||||
|
||||
EXECS := \
|
||||
$(if $(CONFIG_PACKAGE_wfadatad-collector),decollector)
|
||||
$(if $(CONFIG_PACKAGE_wfadatad),agent/deagent) \
|
||||
$(if $(CONFIG_PACKAGE_wfadatad-collector),collector/decollector)
|
||||
|
||||
MAKE_FLAGS += EXECS="$(EXECS)"
|
||||
|
||||
|
||||
define Package/wfadatad/install
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) ./files/deagent.init $(1)/etc/init.d/deagent
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/agent/deagent $(1)/usr/sbin/
|
||||
endef
|
||||
|
||||
define Package/wfadatad-collector/install
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) ./files/decollector.init $(1)/etc/init.d/decollector
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/decollector $(1)/usr/sbin/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/collector/decollector $(1)/usr/sbin/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,wfadatad))
|
||||
$(eval $(call BuildPackage,wfadatad-collector))
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=wifimngr
|
||||
PKG_VERSION:=15.0.5
|
||||
PKG_VERSION:=15.0.3
|
||||
|
||||
LOCAL_DEV=0
|
||||
ifneq ($(LOCAL_DEV),1)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=3f7fe8b0c6092c489ba1f7cfec6299a78c81a1c8
|
||||
PKG_SOURCE_VERSION:=4ab6a59e1666581a96bde393f522cc9301cbf78d
|
||||
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/wifimngr.git
|
||||
PKG_MAINTAINER:=Anjan Chanda <anjan.chanda@iopsys.eu>
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user