Compare commits

..

2 Commits

Author SHA1 Message Date
Vivek Kumar Dutta
25de3cac4f bbfdm: delete config section with SetSSID remove 2024-04-18 10:29:46 +05:30
Vivek Kumar Dutta
5836dc1716 bbfdm: Fix IP and Bridge alias 2024-04-18 10:26:49 +05:30
65 changed files with 892 additions and 1709 deletions

View File

@@ -10,168 +10,14 @@ config BBF_VENDOR_PREFIX
string "Vendor Prefix"
default "X_IOPSYS_EU_"
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 BBF_MAX_OBJECT_INSTANCES
int "Maximum number of instances per object"
default 255
menu "TR181 Datamodels"
depends on PACKAGE_libbbfdm
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_TR181_ATM
bool "Include Device.ATM."
default y
config BBFDM_TR181_BRIDGING
bool "Include Device.Bridging."
default y
config BBFDM_TR181_DDNS
bool "Include Device.DynamicDNS."
default y
config BBFDM_TR181_DEVICEINFO
bool "Include Device.DeviceInfo."
default y
config BBFDM_TR181_DEVICEINFO_PROCESSSTATUS
bool "Include Device.DeviceInfo.ProcessStatus."
default y
config BBFDM_TR181_DHCPv4
bool "Include Device.DHCPv4."
default y
config BBFDM_TR181_DHCPv6
bool "Include Device.DHCPv6."
default y
config BBFDM_TR181_DNS
bool "Include Device.DNS."
default y
config BBFDM_TR181_DSL
bool "Include Device.DSL."
default y
config BBFDM_TR181_ETHERNET
bool "Include Device.Ethenet."
default y
config BBFDM_TR181_FAST
bool "Include Device.FAST."
default y
config BBFDM_TR181_FIREWALL
bool "Include Device.Firewall."
default y
config BBFDM_TR181_GATEWAYINFO
bool "Include Device.GatewayInfo."
default y
config BBFDM_TR181_GRE
bool "Include Device.GRE."
default y
config BBFDM_TR181_IEEE1905
bool "Include Device.IEEE1905."
default y
config BBFDM_TR181_INTERFACESTACK
bool "Include Device.InterfaceStack."
default y
config BBFDM_TR181_IP
bool "Include Device.IP."
default y
config BBFDM_TR181_LANCONFSEC
bool "Include Device.LANonfigSecurity."
default y
config BBFDM_TR181_MQTT
bool "Include Device.MQTT."
default y
config BBFDM_TR181_NAT
bool "Include Device.NAT."
default y
config BBFDM_TR181_PACKETCAPTURE
bool "Include Device.PacketCaptureDiagnostics."
default y
config BBFDM_TR181_PPP
bool "Include Device.PPP."
default y
config BBFDM_TR181_PTM
bool "Include Device.PTM."
default y
config BBFDM_TR181_QOS
bool "Include Device.QoS."
default y
config BBFDM_TR181_ROUTERADVERTISEMENT
bool "Include Device.RouterAdvertisement."
default y
config BBFDM_TR181_ROUTING
bool "Include Device.Routing."
default y
config BBFDM_TR181_SECURITY
bool "Include Device.Security."
default y
config BBFDM_TR181_SELFTEST
bool "Include Device.SelfTestDiagnostics."
default y
config BBFDM_TR181_SSH
bool "Include Device.SSH."
default y
config BBFDM_TR181_TIME
bool "Include Device.Time."
default y
config BBFDM_TR181_UPNP
bool "Include Device.UPnP."
default y
config BBFDM_TR181_USB
bool "Include Device.USB."
default y
config BBFDM_TR181_USERINTERFACE
bool "Include Device.UserInterface."
default y
config BBFDM_TR181_WIFI
bool "Include Device.WiFi."
default y
config BBFDM_TR181_WIFI_DATAELEMENTS
bool "Include Device.WiFi.DataElements."
default y
config BBFDM_TR181_WIFI_DATAELEMENTS_ASSOCEVENTS
bool "Include deprecated AssociationEventData/DisassociationEventData tables"
default n
help
TR181-2.17 deprecates below dataelements tables
- Device.WiFi.DataElements.AssociationEvent.AssociationEventData.{i}.
- Device.WiFi.DataElements.DisassociationEvent.DisassociationEventData.{i}.
If this option is selected, above mentioned tables shall be added in datamodel.
endmenu

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=bbfdm
PKG_VERSION:=1.4.23.29
PKG_VERSION:=1.4.23.15
USE_LOCAL:=0
ifneq ($(USE_LOCAL),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/bbfdm.git
PKG_SOURCE_VERSION:=2f1dac5686f54219fc7706c677905816b650dd1c
PKG_SOURCE_VERSION:=3007f6fc86e84b6b460dbea0bf77c4cf522d06c1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif
@@ -38,7 +38,6 @@ define Package/libbbfdm/default
TITLE:=Library for broadband forum data model support
DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +libjson-c +libcurl +libbbfdm-api \
+BBF_TR471:obudpst
MENU:=1
endef
define Package/libbbfdm
@@ -113,153 +112,8 @@ endef
endif
CMAKE_OPTIONS += \
-DBBF_TR181=ON \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
ifeq ($(CONFIG_BBFDM_TR181_ATM),y)
TARGET_CFLAGS += -DBBFDM_TR181_ATM
endif
ifeq ($(CONFIG_BBFDM_TR181_BRIDGING),y)
TARGET_CFLAGS += -DBBFDM_TR181_BRIDGING
endif
ifeq ($(CONFIG_BBFDM_TR181_DDNS),y)
TARGET_CFLAGS += -DBBFDM_TR181_DDNS
endif
ifeq ($(CONFIG_BBFDM_TR181_DEVICEINFO),y)
TARGET_CFLAGS += -DBBFDM_TR181_DEVICEINFO
endif
ifeq ($(CONFIG_BBFDM_TR181_DEVICEINFO_PROCESSSTATUS),y)
TARGET_CFLAGS += -DBBFDM_TR181_DEVICEINFO_PROCESSSTATUS
endif
ifeq ($(CONFIG_BBFDM_TR181_DHCPv4),y)
TARGET_CFLAGS += -DBBFDM_TR181_DHCPv4
endif
ifeq ($(CONFIG_BBFDM_TR181_DHCPv6),y)
TARGET_CFLAGS += -DBBFDM_TR181_DHCPv6
endif
ifeq ($(CONFIG_BBFDM_TR181_DNS),y)
TARGET_CFLAGS += -DBBFDM_TR181_DNS
endif
ifeq ($(CONFIG_BBFDM_TR181_DSL),y)
TARGET_CFLAGS += -DBBFDM_TR181_DSL
endif
ifeq ($(CONFIG_BBFDM_TR181_ETHERNET),y)
TARGET_CFLAGS += -DBBFDM_TR181_ETHERNET
endif
ifeq ($(CONFIG_BBFDM_TR181_FAST),y)
TARGET_CFLAGS += -DBBFDM_TR181_FAST
endif
ifeq ($(CONFIG_BBFDM_TR181_FIREWALL),y)
TARGET_CFLAGS += -DBBFDM_TR181_FIREWALL
endif
ifeq ($(CONFIG_BBFDM_TR181_GATEWAYINFO),y)
TARGET_CFLAGS += -DBBFDM_TR181_GATEWAYINFO
endif
ifeq ($(CONFIG_BBFDM_TR181_GRE),y)
TARGET_CFLAGS += -DBBFDM_TR181_GRE
endif
ifeq ($(CONFIG_BBFDM_TR181_IEEE1905),y)
TARGET_CFLAGS += -DBBFDM_TR181_IEEE1905
endif
ifeq ($(CONFIG_BBFDM_TR181_INTERFACESTACK),y)
TARGET_CFLAGS += -DBBFDM_TR181_INTERFACESTACK
endif
ifeq ($(CONFIG_BBFDM_TR181_IP),y)
TARGET_CFLAGS += -DBBFDM_TR181_IP
endif
ifeq ($(CONFIG_BBFDM_TR181_LANCONFSEC),y)
TARGET_CFLAGS += -DBBFDM_TR181_LANCONFSEC
endif
ifeq ($(CONFIG_BBFDM_TR181_MQTT),y)
TARGET_CFLAGS += -DBBFDM_TR181_MQTT
endif
ifeq ($(CONFIG_BBFDM_TR181_NAT),y)
TARGET_CFLAGS += -DBBFDM_TR181_NAT
endif
ifeq ($(CONFIG_BBFDM_TR181_PACKETCAPTURE),y)
TARGET_CFLAGS += -DBBFDM_TR181_PACKETCAPTURE
endif
ifeq ($(CONFIG_BBFDM_TR181_PPP),y)
TARGET_CFLAGS += -DBBFDM_TR181_PPP
endif
ifeq ($(CONFIG_BBFDM_TR181_PTM),y)
TARGET_CFLAGS += -DBBFDM_TR181_PTM
endif
ifeq ($(CONFIG_BBFDM_TR181_QOS),y)
TARGET_CFLAGS += -DBBFDM_TR181_QOS
endif
ifeq ($(CONFIG_BBFDM_TR181_ROUTERADVERTISEMENT),y)
TARGET_CFLAGS += -DBBFDM_TR181_ROUTERADVERTISEMENT
endif
ifeq ($(CONFIG_BBFDM_TR181_ROUTING),y)
TARGET_CFLAGS += -DBBFDM_TR181_ROUTING
endif
ifeq ($(CONFIG_BBFDM_TR181_SECURITY),y)
TARGET_CFLAGS += -DBBFDM_TR181_SECURITY
endif
ifeq ($(CONFIG_BBFDM_TR181_SELFTEST),y)
TARGET_CFLAGS += -DBBFDM_TR181_SELFTEST
endif
ifeq ($(CONFIG_BBFDM_TR181_SSH),y)
TARGET_CFLAGS += -DBBFDM_TR181_SSH
endif
ifeq ($(CONFIG_BBFDM_TR181_TIME),y)
TARGET_CFLAGS += -DBBFDM_TR181_TIME
endif
ifeq ($(CONFIG_BBFDM_TR181_UPNP),y)
TARGET_CFLAGS += -DBBFDM_TR181_UPNP
endif
ifeq ($(CONFIG_BBFDM_TR181_USB),y)
TARGET_CFLAGS += -DBBFDM_TR181_USB
endif
ifeq ($(CONFIG_BBFDM_TR181_USERINTERFACE),y)
TARGET_CFLAGS += -DBBFDM_TR181_USERINTERFACE
endif
ifeq ($(CONFIG_BBFDM_TR181_WIFI),y)
TARGET_CFLAGS += -DBBFDM_TR181_WIFI
endif
ifeq ($(CONFIG_BBFDM_TR181_WIFI_DATAELEMENTS),y)
TARGET_CFLAGS += -DBBFDM_TR181_WIFI_DATAELEMENTS
endif
ifeq ($(CONFIG_BBFDM_TR181_WIFI_DATAELEMENTS_ASSOCEVENTS),y)
TARGET_CFLAGS += -DBBFDM_TR181_WIFI_DATAELEMENTS_ASSOCEVENTS
endif
-DBBF_TR181=ON
-DBBF_WIFI_DATAELEMENTS=ON
ifeq ($(CONFIG_BBF_TR143),y)
CMAKE_OPTIONS += \
@@ -306,8 +160,6 @@ endif
define Package/libbbfdm-api/install
$(INSTALL_DIR) $(1)/lib
$(CP) $(PKG_BUILD_DIR)/libbbfdm-api/libbbfdm-api.so $(1)/lib/
$(INSTALL_DIR) $(1)/usr/libexec/rpcd
$(CP) $(PKG_BUILD_DIR)/libbbfdm-api/scripts/bbf.config $(1)/usr/libexec/rpcd/bbf.config
endef
define Package/libbbfdm/default/install
@@ -343,15 +195,12 @@ define Package/bbfdmd/install
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DIR) $(1)/etc/bbfdm
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_DIR) $(1)/etc/udhcpc.user.d
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bbfdmd/ubus/bbfdmd $(1)/usr/sbin/
$(INSTALL_DATA) ./files/etc/bbfdm/input.json $(1)/etc/bbfdm/
$(INSTALL_BIN) ./files/etc/init.d/bbfdmd $(1)/etc/init.d/bbfdmd
$(INSTALL_CONF) ./files/etc/config/bbfdm $(1)/etc/config/bbfdm
$(INSTALL_CONF) ./files/etc/config/schedules $(1)/etc/config/schedules
$(INSTALL_BIN) ./files/etc/bbfdm/bbfdm_services.sh $(1)/etc/bbfdm/
$(INSTALL_BIN) ./files/etc/hotplug.d/iface/85-bbfdm-sysctl $(1)/etc/hotplug.d/iface/85-bbfdm-sysctl
$(INSTALL_BIN) ./files/etc/udhcpc.user.d/udhcpc_lease_start_time.user $(1)/etc/udhcpc.user.d/udhcpc_lease_start_time.user
endef
define Package/userinterface/install

View File

@@ -2,7 +2,7 @@
config bbfdmd 'bbfdmd'
option enabled '1'
option loglevel '1'
option refresh_time '120'
option refresh_time '10'
option transaction_timeout '30'
option subprocess_level '2'

View File

@@ -1,2 +0,0 @@
config global 'global'
option enable '1'

View File

@@ -40,12 +40,7 @@ configure_bbfdmd()
[ "${enabled}" -eq 0 ] && return 0
if [ -f "${BBFDM_JSON_INPUT}" ]; then
cat ${BBFDM_JSON_INPUT} |jq --arg log ${loglevel} --arg tran ${transaction_timeout} --arg refresh ${refresh_time} --arg level ${subprocess_level} '.daemon.config += {"loglevel": $log, "refresh_time": $refresh, "transaction_timeout": $tran, "subprocess_level": $level}' > ${BBFDM_TEMP_JSON}
val="$(jq -r '.daemon.input // empty' ${BBFDM_TEMP_JSON})"
if [ -z "${val}" ]; then
log "Failed to generate temp input json, uci changes not applied"
cp ${BBFDM_JSON_INPUT} ${BBFDM_TEMP_JSON}
fi
echo "$(jq --arg log ${loglevel} --arg tran ${transaction_timeout} --arg refresh ${refresh_time} --arg level ${subprocess_level} '.daemon.config += {"loglevel": $log, "refresh_time": $refresh, "transaction_timeout": $tran, "subprocess_level": $level}' ${BBFDM_JSON_INPUT})" > ${BBFDM_TEMP_JSON}
fi
procd_set_param command ${PROG}

View File

@@ -1,14 +0,0 @@
#!/bin/sh
leasestarttime="$(awk -F'.' '{print $1}' /proc/uptime 2> /dev/null)"
target_file=/tmp/dhcp_client_info
target_str="$INTERFACE $lease $leasestarttime"
# if this interface is present in file, then replace it
if grep -q "$INTERFACE" "$target_file" 2> /dev/null; then
# replace the whole line if pattern matches
sed -i "/${INTERFACE}/c\\${target_str}" "$target_file"
else
# interface info was not present, append it to the file
echo "$target_str" >> "$target_file"
fi

View File

@@ -1,64 +0,0 @@
#
# Copyright (C) 2020-2024 IOPSYS Software Solutions AB
#
include $(TOPDIR)/rules.mk
PKG_NAME:=csmngr
PKG_VERSION:=1.0.1
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=92c62f8df86066bd1718a6a6036195b113e74032
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/csmngr.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip
endif
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_MAINTAINER:=Anjan Chanda <anjan.chanda@iopsys.eu>
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
PKG_CONFIG_DEPENDS := \
CONFIG_PACKAGE_libwifiutils \
CONFIG_PACKAGE_libwifi
PKG_BUILD_DEPENDS := libwifi
include $(INCLUDE_DIR)/package.mk
MAKE_PATH:=src
define Package/csmngr
SECTION:=utils
CATEGORY:=Utilities
TITLE:=WiFi channel selection manager
DEPENDS:=+libwifiutils +libwifi +libuci +libubox +ubus +libnl-genl
endef
define Package/csmngr/description
WiFi Auto Channel Selection manager.
endef
TARGET_CFLAGS += \
-I$(STAGING_DIR)/usr/include \
-I$(STAGING_DIR)/usr/include/libnl3 \
-D_GNU_SOURCE
ifeq ($(LOCAL_DEV),1)
define Build/Prepare
rsync -r --exclude=.* ~/git/csmngr/ $(PKG_BUILD_DIR)/
endef
endif
define Package/csmngr/install
$(CP) ./files/* $(1)/
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/csmngr $(1)/usr/sbin/
endef
$(eval $(call BuildPackage,csmngr))

View File

@@ -1,21 +0,0 @@
#!/bin/sh /etc/rc.common
START=95
STOP=10
USE_PROCD=1
PROG=/usr/sbin/csmngr
start_service() {
procd_open_instance
procd_set_param command ${PROG}
# procd_set_param stderr 1 #for debugging only
# procd_set_param respawn
procd_close_instance
}
reload_service() {
stop
start
}

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=decollector
PKG_VERSION:=4.2.1.1.6
PKG_VERSION:=4.2.1.1.1
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=9fae736fa6c4ee39e7775964c7f84b105196c034
PKG_SOURCE_VERSION:=7e75bf1fc5fa328d91c071f1f243df6951bb397e
PKG_SOURCE_URL:=https://dev.iopsys.eu/multi-ap/decollector.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ethmngr
PKG_VERSION:=2.1.3.1
PKG_VERSION:=2.1.3
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=847a94cee530d60bfd10ceaee4185d64fb6397d0
PKG_SOURCE_VERSION:=5b40a8167d3e0e5c8fc9229abccd5c6acecbe814
PKG_SOURCE_URL:=https://dev.iopsys.eu/hal/ethmngr.git
PKG_MAINTAINER:=Rahul Thakur <rahul.thakur@iopsys.eu>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=hostmngr
PKG_VERSION:=1.1.9
PKG_VERSION:=1.1.7
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=3aabf79273537b146e063e32cd0443d8a156daa2
PKG_SOURCE_VERSION:=79a6649995752da3501808debeed9e3ddfdf4d59
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/hostmngr.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip

View File

@@ -2,8 +2,7 @@
"daemon": {
"input": {
"type": "DotSo",
"name": "/etc/hostmngr/libhostmngr.so",
"plugin_dir": "/etc/hostmngr/plugins/"
"name": "/etc/hostmngr/libhostmngr.so"
},
"output": {
"type": "UBUS",

View File

@@ -218,15 +218,11 @@ process_ac_schedule() {
iptables -w -F hosts_forward
ip6tables -w -F hosts_forward
hosts_ipv4_forward=$(iptables -t filter --list -n | grep hosts_forward)
if [ -z "$hosts_ipv4_forward" ]; then
hosts_forward=$(iptables -t filter --list | grep hosts_forward)
if [ -z "$hosts_forward" ]; then
iptables -w -t filter -N hosts_forward
ret=$?
[ $ret -eq 0 ] && iptables -w -t filter -I FORWARD -j hosts_forward
fi
hosts_ipv6_forward=$(ip6tables -t filter --list -n | grep hosts_forward)
if [ -z "$hosts_ipv6_forward" ]; then
ip6tables -w -t filter -N hosts_forward
ret=$?
[ $ret -eq 0 ] && ip6tables -w -t filter -I FORWARD -j hosts_forward

View File

@@ -8,13 +8,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=icwmp
PKG_VERSION:=9.5.29.18
PKG_VERSION:=9.5.29.10
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/icwmp.git
PKG_SOURCE_VERSION:=816033a14672e8e9c3566ce06fa19fb422eeb546
PKG_SOURCE_VERSION:=27231b20dc75075786efa5a122bdefab93669bc9
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ieee1905
PKG_VERSION:=8.3.4.15
PKG_VERSION:=8.3.4.10
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=bdf808d9b2c74e2613f1e2842cb01e62e2d1a3e1
PKG_SOURCE_VERSION:=4231e9496e63fb6d0ab74870c06f9345b001c5bf
PKG_SOURCE_URL:=https://dev.iopsys.eu/multi-ap/ieee1905.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip

View File

@@ -150,7 +150,6 @@ CONFIG_PACKAGE_ssdpd=y
CONFIG_PACKAGE_miniupnpd-iptables=y
CONFIG_PACKAGE_mosquitto-client-ssl=y
CONFIG_PACKAGE_mosquitto-ssl=y
# CONFIG_MOSQUITTO_BRIDGE_SUPPORT is not set
CONFIG_PACKAGE_nginx=y
CONFIG_PACKAGE_openvpn-easy-rsa=y
CONFIG_PACKAGE_openvpn-openssl=y

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=libethernet
PKG_VERSION:=7.2.112.1
PKG_VERSION:=7.2.109
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=938752e3bd4c524aa518fc247d186ebdf282e1c0
PKG_SOURCE_VERSION:=cc72f5ab0171cd0fc29bb48dafff6751ab2f0d9c
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/libethernet.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip

View File

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

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=libwifi
PKG_VERSION:=7.4.16.18
PKG_VERSION:=7.4.16.5
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=b8adef24b294279bf07c0f9d00813b51fae7107f
PKG_SOURCE_VERSION:=0965d52a20207dc2a3ed6b4c669fc3483c8a1194
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/libwifi.git
PKG_MAINTAINER:=Anjan Chanda <anjan.chanda@iopsys.eu>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
@@ -76,10 +76,6 @@ ifeq ($(CONFIG_LIBWIFI_USE_CTRL_IFACE),y)
TARGET_CFLAGS +=-DLIBWIFI_USE_CTRL_IFACE
endif
ifeq ($(CONFIG_LIBWIFI_SKIP_PROBES),y)
TARGET_CFLAGS +=-DLIBWIFI_BRCM_SKIP_PROBES
endif
TARGET_CFLAGS += \
-I$(STAGING_DIR)/usr/include \
-I$(STAGING_DIR)/usr/include/openssl \
@@ -148,11 +144,6 @@ define Package/libwifi/config
config LIBWIFI_USE_CTRL_IFACE
bool "Create UNIX sockets to interface with hostapd/wpa_supplicant"
default n
config LIBWIFI_SKIP_PROBES
bool "Don't create probe-req events"
default y
endif
endef

View File

@@ -55,8 +55,5 @@ config AGENT_OPER_CHANNEL_CHANGE_RELAY_MCAST
config AGENT_USE_LIBDPP
bool "Depend on libdpp for DPP EasyConnect"
config DYNBHD_DYNAMICALLY_PERSIST_CONTROLLER
bool "Let dynbhd through AP-Autoconfiguration Search and DHCP Discovery determine the controller or agent role"
endmenu
endif

View File

@@ -5,9 +5,9 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=map-agent
PKG_VERSION:=4.5.0.34
PKG_VERSION:=4.5.0.18
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=8a73986f67c717961dc62cf11c8b0458ab04cc05
PKG_SOURCE_VERSION:=261632ff5dbcf5ad0827b49b4e2fd97483d3d616
PKG_MAINTAINER:=Jakob Olsson <jakob.olsson@iopsys.eu>
PKG_LICENSE:=BSD-3-Clause
@@ -105,10 +105,6 @@ ifeq ($(CONFIG_AGENT_OPER_CHANNEL_CHANGE_RELAY_MCAST),y)
TARGET_CFLAGS += -DOPER_CHAN_CHANGE_RELAY_MCAST
endif
ifeq ($(CONFIG_DYNBHD_DYNAMICALLY_PERSIST_CONTROLLER),y)
TARGET_CFLAGS += -DPERSIST_CONTROLLER
endif
MAKE_PATH:=src
define Package/map-agent/install

View File

@@ -188,12 +188,12 @@ map_genconf () {
uci -q set mapagent.@controller_select[0].local=1
fi
uci -q commit mapagent
if [ "$multiap_mode" == "agent" -o "$multiap_mode" == "none" ]; then
uci set mapcontroller.controller.enabled="0"
else
uci set mapcontroller.controller.enabled="1"
fi
uci -q commit mapcontroller
fi
if [ "$multiap_mode" == "agent" -o "$multiap_mode" == "none" ]; then
uci set mapcontroller.controller.enabled="0"
else
uci set mapcontroller.controller.enabled="1"
fi
uci -q commit mapcontroller
}

View File

@@ -29,10 +29,6 @@ config CONTROLLER_EASYMESH_VENDOR_EXT_OUI
config CONTROLLER_USE_LIBDPP
bool "Depend on libdpp for DPP EasyConnect"
config CONTROLLER_PROPAGATE_PROBE_REQ
depends on CONTROLLER_EASYMESH_VENDOR_EXT
bool "Enable publishing probe requests vendor specific messages as UBUS events"
default y
endmenu
endif

View File

@@ -5,9 +5,9 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=map-controller
PKG_VERSION:=4.5.0.23
PKG_VERSION:=4.5.0.3
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=ea159dee9536889171fe6f2463c2259ac48c4a97
PKG_SOURCE_VERSION:=c852c9c9a706becd30237484153286f39841ef23
PKG_MAINTAINER:=Jakob Olsson <jakob.olsson@iopsys.eu>
LOCAL_DEV=0
@@ -63,10 +63,6 @@ TARGET_CFLAGS += -DEASYMESH_VENDOR_EXT_OUI=$(CONFIG_CONTROLLER_EASYMESH_VENDOR_E
TARGET_CFLAGS += -DEASYMESH_VENDOR_EXT
endif
ifeq ($(CONFIG_CONTROLLER_PROPAGATE_PROBE_REQ),y)
TARGET_CFLAGS += -DPROPAGATE_PROBE_REQ
endif
define Package/map-controller/install
$(INSTALL_DIR) $(1)/etc
$(CP) ./files/* $(1)/

View File

@@ -59,7 +59,7 @@ config ap
config ap
option band '2'
option ssid 'MAP-$BASEMAC_ADDR-BH'
option ssid 'MAP-$BASEMAC_ADDR-BH-2.4GHz'
option encryption 'sae'
option key '$WIFI_BH_KEY'
option type 'backhaul'
@@ -67,7 +67,7 @@ config ap
config ap
option band '5'
option ssid 'MAP-$BASEMAC_ADDR-BH'
option ssid 'MAP-$BASEMAC_ADDR-BH-5GHz'
option encryption 'sae'
option key '$WIFI_BH_KEY'
option type 'backhaul'
@@ -75,7 +75,7 @@ config ap
config ap
option band '6'
option ssid 'MAP-$BASEMAC_ADDR-BH'
option ssid 'MAP-$BASEMAC_ADDR-BH-6GHz'
option encryption 'sae'
option key '$WIFI_BH_KEY'
option type 'backhaul'

View File

@@ -39,6 +39,7 @@ config_snooping_upstream_interface() {
local snooping_upstream_intf=""
json_load "$(devstatus $1)"
logger -t "mcastconf" "$(devstatus $1)"
itr=1
json_select bridge-members

View File

@@ -91,7 +91,7 @@ interfaces_ok(){
for itf in $up_interf; do
# check if there exist a interface section for this upstream interface, if yes the
# do nothing, if no then generate config as mcast config is outdated
local dev_section=$(uci show network | grep -E "\.device=\'$itf\'" | head -n 1 | cut -d'.' -f2)
local dev_section=$(uci show network | grep -E "\.device=\'$itf\'" | cut -d'.' -f2)
# mcast config is outdated, simply generate as per new logic
if [ -z "$dev_section" ]; then

View File

@@ -85,8 +85,9 @@ config_mcproxy_interfaces() {
echo -e "pinstance main:$str_up ==>$str_down;\n" >> $CONFFILE
local filter=""
for excp in $exceptions; do
local filter=""
case $excp in
*/*)
ip_start="$(ipcalc.sh $excp | grep IP | awk '{print substr($0,4)}')"
@@ -97,16 +98,16 @@ config_mcproxy_interfaces() {
filter="$filter ($excp | *)"
;;
esac
done
for upstream in $str_up; do
echo "pinstance main upstream $upstream in blacklist table{$filter };" >> $CONFFILE
echo "pinstance main upstream $upstream out blacklist table{$filter };" >> $CONFFILE
done
for upstream in $str_up; do
echo "pinstance main upstream $upstream in blacklist table{$filter };" >> $CONFFILE
echo "pinstance main upstream $upstream out blacklist table{$filter };" >> $CONFFILE
done
for downstream in $str_down; do
echo "pinstance main downstream $downstream in blacklist table{$filter };" >> $CONFFILE
echo "pinstance main downstream $downstream out blacklist table{$filter };" >> $CONFFILE
for downstream in $str_down; do
echo "pinstance main downstream $downstream in blacklist table{$filter };" >> $CONFFILE
echo "pinstance main downstream $downstream out blacklist table{$filter };" >> $CONFFILE
done
done
}
@@ -116,7 +117,6 @@ config_sysfs_mcast_snooping() {
for downstream in $downstreams; do
if device_is_bridge "$downstream"; then
echo 0 > /sys/class/net/$downstream/bridge/multicast_snooping
echo $snooping > /sys/class/net/$downstream/bridge/multicast_snooping
fi
done
@@ -261,6 +261,10 @@ config_mcproxy_instance() {
downstreams=$igmp_p_down_interfaces
mcast_mode=$igmp_p_mode
# mcproxy reserves two multicast subscriptions for igmp router service groups
local mg=$(cat /proc/sys/net/ipv4/igmp_max_memberships)
mg=$((mg+2))
echo $mg > /proc/sys/net/ipv4/igmp_max_memberships
elif [ "$protocol" == "mld" ]; then
case "$version" in
[1-2])

View File

@@ -22,11 +22,6 @@ config OBUSPA_CONTROLLER_MTP_VERIFY
config OBUSPA_ENABLE_TEST_CONTROLLER
bool "Adds a test controller by default"
default n
select OBUSPA_ENABLE_TEST_CONTROLLER_LOCAL
config OBUSPA_ENABLE_TEST_CONTROLLER_LOCAL
bool "Adds a test controller by default (local access only)"
default n
config OBUSPA_MAX_CONTROLLERS_NUM
int "The maximum number of controllers to be supported"

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=obuspa
PKG_VERSION:=7.0.5.6.12
PKG_VERSION:=7.0.5.5.9
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/obuspa.git
PKG_SOURCE_VERSION:=131e04ec5c6ddd8c2fb47f95fe7da2b9836ed925
PKG_SOURCE_VERSION:=e4ca88a603ff84fdf54107b9b34c82b44a658fc1
PKG_MAINTAINER:=Vivek Dutta <vivek.dutta@iopsys.eu>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
@@ -32,9 +32,7 @@ define Package/obuspa
SUBMENU:=TRx69
TITLE:=USP agent
MENU:=1
DEPENDS:=+libopenssl +libuci +libblobmsg-json +libcurl +libsqlite3 +libubox +libubus +libmosquitto-ssl +libwebsockets-openssl +ca-certificates \
+OBUSPA_ENABLE_TEST_CONTROLLER_LOCAL:mosquitto-ssl +OBUSPA_ENABLE_TEST_CONTROLLER_LOCAL:mosquitto-client-ssl \
+OBUSPA_ENABLE_TEST_CONTROLLER:mosquitto-auth-shadow
DEPENDS:=+libopenssl +libuci +libblobmsg-json +libcurl +libsqlite3 +libubox +libubus +libmosquitto-ssl +libwebsockets-openssl +ca-certificates
endef
define Package/obuspa/description
@@ -106,14 +104,12 @@ define Package/obuspa/install
$(INSTALL_DATA) ./files/etc/config/obuspa $(1)/etc/config/
$(INSTALL_DATA) ./files/etc/obuspa/roles.json $(1)/etc/obuspa/roles.json
$(INSTALL_DATA) ./files/etc/obuspa/dmcaching_exclude.json $(1)/etc/obuspa/dmcaching_exclude.json
$(INSTALL_BIN) ./files/etc/uci-defaults/00-obuspa-extender-mode $(1)/etc/uci-defaults/
$(INSTALL_BIN) ./files/etc/uci-defaults/01-fix-upgrade-uci $(1)/etc/uci-defaults/
$(INSTALL_BIN) ./files/etc/uci-defaults/02-obuspa-dhcp-option $(1)/etc/uci-defaults/
$(INSTALL_BIN) ./files/etc/udhcpc.user.d/udhcpc_obuspa_opt125.user $(1)/etc/udhcpc.user.d/udhcpc_obuspa_opt125.user
$(call BbfdmInstallPlugin,$(1),./files/etc/bbfdm/json/USPAgent.json)
ifeq ($(CONFIG_OBUSPA_ENABLE_TEST_CONTROLLER),y)
$(INSTALL_BIN) ./files/etc/uci-defaults/54-test-usp-remote $(1)/etc/uci-defaults/
endif
ifeq ($(CONFIG_OBUSPA_ENABLE_TEST_CONTROLLER_LOCAL),y)
$(INSTALL_BIN) ./files/etc/init.d/usptest $(1)/etc/init.d/
$(INSTALL_BIN) ./files/etc/uci-defaults/55-test-usp-controller $(1)/etc/uci-defaults/
endif

View File

@@ -10,5 +10,4 @@ config obuspa 'global'
#option trust_cert '/etc/ssl/cert.pem'
#option client_cert '/etc/obuspa/client.pem'
#option log_dest '/tmp/obuspa.log'
option max_cache_time '120'

View File

@@ -217,10 +217,12 @@ validate_controller_section()
'Enable:bool:1' \
'EndpointID:string' \
'assigned_role_name:string' \
'AssignedRole:string' \
'Protocol:or("STOMP","CoAP","MQTT", "WebSocket")' \
'Destination:string' \
'Topic:string' \
'ParameterName:list(string)' \
'Reference:string' \
'mqtt:string' \
'stomp:string' \
'Host:string' \
@@ -228,7 +230,7 @@ validate_controller_section()
'Path:string' \
'EnableEncryption:bool' \
'PeriodicNotifInterval:uinteger' \
'SessionMode:string' \
'SessionMode:string:Allow' \
'ProvisioningCode:string'
}
@@ -253,6 +255,7 @@ validate_mtp_section()
'Path:string' \
'mqtt:string' \
'stomp:string' \
'Reference:string' \
'PublishQoS:uinteger' \
'EnableEncryption:bool'
}
@@ -321,7 +324,7 @@ configure_controller()
local EndpointID Enable
local Protocol Destination
local Topic mqtt stomp assigned_role_name AssignedRole ParameterName ProvisioningCode
local Host Port Path EnableEncryption PeriodicNotifInterval
local Host Port Path EnableEncryption Reference SessionMode PeriodicNotifInterval
local dm_ref sec
sec="${1}"
@@ -343,12 +346,16 @@ configure_controller()
fi
dm_ref=""
if [ "${Protocol}" = "STOMP" ]; then
stomp="${stomp/stomp_/cpe-}"
dm_ref=$(get_refrence_path "Device.STOMP.Connection." "${stomp}")
elif [ "${Protocol}" = "MQTT" ]; then
mqtt="${mqtt/mqtt_/cpe-}"
dm_ref=$(get_refrence_path "Device.MQTT.Client." "${mqtt}")
if [ -z "${Reference}" ]; then
if [ "${Protocol}" = "STOMP" ]; then
stomp="${stomp/stomp_/cpe-}"
dm_ref=$(get_refrence_path "Device.STOMP.Connection." "${stomp}")
elif [ "${Protocol}" = "MQTT" ]; then
mqtt="${mqtt/mqtt_/cpe-}"
dm_ref=$(get_refrence_path "Device.MQTT.Client." "${mqtt}")
fi
else
dm_ref="${Reference}"
fi
db_set "${BASEPATH}.Alias" "${sec}"
@@ -363,15 +370,16 @@ configure_controller()
db_set "${BASEPATH}.PeriodicNotifInterval" "${PeriodicNotifInterval}"
fi
#if [ -n "${SessionMode}" ]; then
# db_set "${BASEPATH}.E2ESession.SessionMode" "${SessionMode}"
#fi
if [ -n "${SessionMode}" ]; then
db_set "${BASEPATH}.E2ESession.SessionMode" "${SessionMode}"
fi
if [ -n "${assigned_role_name}" ]; then
AssignedRole=$(get_role_index "${assigned_role_name}")
if [ -n "${AssignedRole}" ]; then
db_set "${BASEPATH}.AssignedRole" "${AssignedRole}"
fi
fi
if [ -n "${AssignedRole}" ]; then
db_set "${BASEPATH}.AssignedRole" "${AssignedRole}"
fi
db_set "${BASEPATH}.MTP.1.Alias" "${sec}"
@@ -551,12 +559,16 @@ configure_mtp() {
fi
dm_ref=""
if [ "${Protocol}" = "STOMP" ]; then
stomp="${stomp/stomp_/cpe-}"
dm_ref=$(get_refrence_path "Device.STOMP.Connection." "${stomp}")
elif [ "${Protocol}" = "MQTT" ]; then
mqtt="${mqtt/mqtt_/cpe-}"
dm_ref=$(get_refrence_path "Device.MQTT.Client." "${mqtt}")
if [ -z "${Reference}" ]; then
if [ "${Protocol}" = "STOMP" ]; then
stomp="${stomp/stomp_/cpe-}"
dm_ref=$(get_refrence_path "Device.STOMP.Connection." "${stomp}")
elif [ "${Protocol}" = "MQTT" ]; then
mqtt="${mqtt/mqtt_/cpe-}"
dm_ref=$(get_refrence_path "Device.MQTT.Client." "${mqtt}")
fi
else
dm_ref="${Reference}"
fi
db_set "${BASEPATH}.Alias" "${sec}"
@@ -764,8 +776,8 @@ sync_db_controller()
{
local cntrs copts sec pvalue protocol
copts="Enable EndpointID PeriodicNotifInterval"
popts="Destination Topic Host Port Path EnableEncryption"
copts="Enable EndpointID AssignedRole PeriodicNotifInterval"
popts="Destination Topic Reference Host Port Path EnableEncryption"
cntrs="$(get_instances_from_db_dump Device.LocalAgent.Controller.)"
for cntr in $cntrs; do
@@ -797,7 +809,8 @@ sync_db_localagent_mtp()
local mtps opts popts sec pvalue protocol
opts="Enable"
popts="ResponseTopicConfigured Destination Port Path EnableEncryption PublishQoS"
popts="ResponseTopicConfigured Destination Port Path Reference EnableEncryption PublishQoS"
ropts="mqtt stomp"
mtps="$(get_instances_from_db_dump Device.LocalAgent.MTP.)"
for inst in $mtps; do
@@ -820,6 +833,9 @@ sync_db_localagent_mtp()
pvalue="$(get_param_value_from_dump "${inst}"."${protocol}"."${param}")"
uci_set obuspa "${sec}" "${param}" "${pvalue}"
done
for param in ${ropts}; do
uci_set obuspa "${sec}" "${param}" ""
done
done
}
@@ -986,9 +1002,6 @@ db_init()
reverse_update_db_with_uci
fi
# Remove ControllerTrust.Role., if present in db for backward compatibility
delete_sql_db_entry_with_pattern "^Device.LocalAgent.ControllerTrust.Role."
# Remove reset file if present
[ -f "${RESET_FILE}" ] && mv ${RESET_FILE} ${RESET_FILE}.old
@@ -1021,17 +1034,11 @@ db_init()
}
start_service() {
local enabled role_file
local enabled
mkdir -p /tmp/obuspa/
config_load obuspa
config_get_bool enabled global enabled 0
config_get role_file global role_file ""
# Use the default role file if not defined in uci, but present in path
if [ -z "${role_file}" ] && [ -f "/etc/obuspa/roles.json" ] ; then
uci -q set obuspa.global.role_file="/etc/obuspa/roles.json"
uci_commit obuspa
fi
procd_open_instance ${CONFIGURATION}
if [ "${enabled}" -eq 1 ]; then

View File

@@ -1,6 +1,7 @@
{
"dmcaching_exclude": [
"Device.Hosts.Host.",
"Device.Services.VoiceService."
"Device.IEEE1905.",
"Device.WiFi.DataElements."
]
}

View File

@@ -260,40 +260,6 @@
"PERMIT_SUBS_EVT_OPER_COMP"
]
},
{
"object":"Device.Schedules.",
"perm": [
"PERMIT_GET",
"PERMIT_GET_INST",
"PERMIT_OBJ_INFO",
"PERMIT_CMD_INFO",
"PERMIT_SET",
"PERMIT_ADD",
"PERMIT_DEL",
"PERMIT_OPER",
"PERMIT_SUBS_VAL_CHANGE",
"PERMIT_SUBS_OBJ_ADD",
"PERMIT_SUBS_OBJ_DEL",
"PERMIT_SUBS_EVT_OPER_COMP"
]
},
{
"object":"Device.{BBF_VENDOR_PREFIX}ParentalControl.",
"perm": [
"PERMIT_GET",
"PERMIT_GET_INST",
"PERMIT_OBJ_INFO",
"PERMIT_CMD_INFO",
"PERMIT_SET",
"PERMIT_ADD",
"PERMIT_DEL",
"PERMIT_OPER",
"PERMIT_SUBS_VAL_CHANGE",
"PERMIT_SUBS_OBJ_ADD",
"PERMIT_SUBS_OBJ_DEL",
"PERMIT_SUBS_EVT_OPER_COMP"
]
},
{
"object":"Device.NAT.",
"perm": [
@@ -618,40 +584,6 @@
"PERMIT_NONE"
]
},
{
"object":"Device.Schedules.",
"perm": [
"PERMIT_GET",
"PERMIT_GET_INST",
"PERMIT_OBJ_INFO",
"PERMIT_CMD_INFO",
"PERMIT_SET",
"PERMIT_ADD",
"PERMIT_DEL",
"PERMIT_OPER",
"PERMIT_SUBS_VAL_CHANGE",
"PERMIT_SUBS_OBJ_ADD",
"PERMIT_SUBS_OBJ_DEL",
"PERMIT_SUBS_EVT_OPER_COMP"
]
},
{
"object":"Device.{BBF_VENDOR_PREFIX}ParentalControl.",
"perm": [
"PERMIT_GET",
"PERMIT_GET_INST",
"PERMIT_OBJ_INFO",
"PERMIT_CMD_INFO",
"PERMIT_SET",
"PERMIT_ADD",
"PERMIT_DEL",
"PERMIT_OPER",
"PERMIT_SUBS_VAL_CHANGE",
"PERMIT_SUBS_OBJ_ADD",
"PERMIT_SUBS_OBJ_DEL",
"PERMIT_SUBS_EVT_OPER_COMP"
]
},
{
"object": "Device.DeviceInfo.",
"perm": [
@@ -666,29 +598,12 @@
"object":"Device.Hosts.",
"perm": [
"PERMIT_GET",
"PERMIT_SET",
"PERMIT_GET_INST",
"PERMIT_OBJ_INFO",
"PERMIT_CMD_INFO",
"PERMIT_SUBS_VAL_CHANGE",
"PERMIT_SUBS_EVT_OPER_COMP"
]
},
{
"object":"Device.Hosts.AccessControl.",
"perm": [
"PERMIT_GET",
"PERMIT_GET_INST",
"PERMIT_OBJ_INFO",
"PERMIT_CMD_INFO",
"PERMIT_SET",
"PERMIT_ADD",
"PERMIT_DEL",
"PERMIT_SUBS_VAL_CHANGE",
"PERMIT_SUBS_OBJ_ADD",
"PERMIT_SUBS_OBJ_DEL"
]
},
{
"object":"Device.IEEE1905.",
"perm": [
@@ -699,15 +614,6 @@
"PERMIT_SUBS_EVT_OPER_COMP"
]
},
{
"object": "Device.IP.",
"perm": [
"PERMIT_GET",
"PERMIT_GET_INST",
"PERMIT_OBJ_INFO",
"PERMIT_CMD_INFO"
]
},
{
"object":"Device.DynamicDNS.",
"perm": [

View File

@@ -0,0 +1,13 @@
#!/bin/sh
. /lib/functions.sh
config_load obuspa
config_get interface global interface ""
if command -v fw_printenv; then
mode="$(fw_printenv -n netmode)"
if [ "${mode}" == "extender" -a -z "$interface" ] ; then
uci_set obuspa global interface "lan"
fi
fi

View File

@@ -1,20 +0,0 @@
#!/bin/sh
. /lib/functions.sh
if [ ! -f "/etc/config/mosquitto" ]; then
echo "Local mosquitto broker not available"
return 0
fi
add_usp_test()
{
uci_add mosquitto listener usptest
uci_set mosquitto usptest enabled 1
uci_set mosquitto usptest port '9001'
uci_set mosquitto usptest protocol 'websockets'
uci_set mosquitto usptest auth_plugin '/usr/lib/mosquitto_auth_shadow.so'
}
# Install test MQTT over WS listener
add_usp_test

View File

@@ -40,6 +40,16 @@ add_obuspa_test_controller()
uci_set obuspa testcontroller assigned_role_name 'full_access'
}
add_usp_test()
{
uci_add mosquitto listener usptest
uci_set mosquitto usptest enabled 1
uci_set mosquitto usptest port '9001'
uci_set mosquitto usptest protocol 'websockets'
uci_set mosquitto usptest require_certificates '0'
uci_set mosquitto usptest auth_plugin '/usr/lib/mosquitto_auth_shadow.so'
}
add_obuspa_config()
{
uci_add mosquitto listener obuspa
@@ -50,8 +60,11 @@ add_obuspa_config()
}
# Install test usp controller config
uci_load mosquitto
add_usp_test
add_obuspa_config
uci_load obuspa
add_obuspa_test_mtp
add_obuspa_test_mqtt
add_obuspa_test_controller

View File

@@ -8,11 +8,6 @@ RETRY_MIN_INTERVAL="5"
RETRY_INTERVAL_MUL="2000"
ENDPOINT_ID=""
log()
{
echo "$*"|logger -t obuspa.dhcp -p debug
}
get_oui_from_db() {
db -q get device.deviceinfo.ManufacturerOUI
}
@@ -129,15 +124,15 @@ get_vivsoi() {
done
}
get_access_role()
get_netmode()
{
local mode lan_proto
local mode
lan_proto="$(uci -q get network.lan.proto)"
if command -v fw_printenv; then
mode="$(fw_printenv -n netmode)"
fi
if [ "${lan_proto}" == "dhcp" ]; then
mode="extender"
else
if [ "$mode" != "extender" ]; then
mode="full_access"
fi
@@ -146,25 +141,13 @@ get_access_role()
config_load obuspa
config_get_bool enable_obuspa global enabled 1
config_get wan_intf global interface
config_get wan_intf global interface "wan"
config_get_bool dhcp_discovery global dhcp_discovery 1
if [ "$enable_obuspa" = "0" ] || [ "$dhcp_discovery" = "0" ]; then
return 0
fi
if [ -z "${wan_intf}" ]; then
role="$(get_access_role)"
if [ "${role}" = "extender" ]; then
wan_intf="lan"
uci -q set obuspa.global.interface="lan"
uci commit obuspa
else
wan_intf="wan"
fi
fi
if [ "${wan_intf}" == "${INTERFACE}" ]; then
if [ -n "$opt125" ]; then
len=$(printf "$opt125"|wc -c)
@@ -243,7 +226,7 @@ if [ "${wan_intf}" == "${INTERFACE}" ]; then
fi
fi
uci -q set obuspa.dhcpcontroller.assigned_role_name="$(get_access_role)"
uci -q set obuspa.dhcpcontroller.assigned_role_name="$(get_netmode)"
uci -q set obuspa.dhcpcontroller.Enable='1'
uci_change=1
fi
@@ -326,7 +309,6 @@ if [ "${wan_intf}" == "${INTERFACE}" ]; then
fi
if [ ${uci_change} -eq 1 ]; then
log "# Reloading obuspa as dhcp config changed"
ubus call uci commit '{"config":"obuspa"}'
fi
fi

View File

@@ -1,76 +0,0 @@
diff --git a/src/core/device_mqtt.c b/src/core/device_mqtt.c
index 7b3c3df7eb..7beb78ef86 100755
--- a/src/core/device_mqtt.c
+++ b/src/core/device_mqtt.c
@@ -1602,14 +1602,23 @@ int Validate_MQTTConnectRetryTime(dm_req_t *req, char *value)
int NotifyChange_MQTTConnectRetryTime(dm_req_t *req, char *value)
{
mqtt_conn_params_t *mp;
+ bool schedule_reconnect = false;
// Determine mqtt client to be updated
mp = FindMqttParamsByInstance(inst1);
USP_ASSERT(mp != NULL);
// Set the new value.
+ if ((mp->retry.connect_retrytime != val_uint) && (mp->enable)) {
+ schedule_reconnect = true;
+ }
+
mp->retry.connect_retrytime = val_uint;
+ if (schedule_reconnect) {
+ ScheduleMqttReconnect(mp);
+ }
+
return USP_ERR_OK;
}
@@ -1645,14 +1654,23 @@ int Validate_MQTTConnectRetryIntervalMultiplier(dm_req_t *req, char *value)
int NotifyChange_MQTTConnectRetryIntervalMultiplier(dm_req_t *req, char *value)
{
mqtt_conn_params_t *mp;
+ bool schedule_reconnect = false;
// Determine mqtt client to be updated
mp = FindMqttParamsByInstance(inst1);
USP_ASSERT(mp != NULL);
+ if ((mp->retry.interval_multiplier != val_int) && (mp->enable)) {
+ schedule_reconnect = true;
+ }
+
// Set the new value.
mp->retry.interval_multiplier = val_int;
+ if (schedule_reconnect) {
+ ScheduleMqttReconnect(mp);
+ }
+
return USP_ERR_OK;
}
@@ -1688,14 +1706,23 @@ int Validate_MQTTConnectRetryMaxInterval(dm_req_t *req, char *value)
int NotifyChange_MQTTConnectRetryMaxInterval(dm_req_t *req, char *value)
{
mqtt_conn_params_t *mp;
+ bool schedule_reconnect = false;
// Determine mqtt client to be updated
mp = FindMqttParamsByInstance(inst1);
USP_ASSERT(mp != NULL);
+ if ((mp->retry.max_interval != val_uint) && (mp->enable)) {
+ schedule_reconnect = true;
+ }
+
// Set the new value.
mp->retry.max_interval = val_uint;
+ if (schedule_reconnect) {
+ ScheduleMqttReconnect(mp);
+ }
+
return USP_ERR_OK;
}

View File

@@ -1,90 +0,0 @@
diff --git a/src/core/device_controller.c b/src/core/device_controller.c
index a6335f5..57b8486 100644
--- a/src/core/device_controller.c
+++ b/src/core/device_controller.c
@@ -2340,6 +2340,26 @@ int Notify_ControllerEnable(dm_req_t *req, char *value)
}
}
}
+#endif
+
+#ifdef ENABLE_MQTT
+{
+ // Reconnect MQTT client since it may need to update MQTT reference and Topic
+ if (cont->enable)
+ {
+ int i;
+ for (i=0; i<MAX_CONTROLLER_MTPS; i++)
+ {
+ controller_mtp_t *mtp;
+
+ mtp = &cont->mtps[i];
+ if ((mtp->protocol == kMtpProtocol_MQTT) && (mtp->mqtt_connection_instance != INVALID) && (mtp->enable))
+ {
+ DEVICE_MQTT_ScheduleReconnect(mtp->mqtt_connection_instance);
+ }
+ }
+ }
+}
#endif
return USP_ERR_OK;
@@ -2468,6 +2488,17 @@ int Notify_ControllerMtpEnable(dm_req_t *req, char *value)
}
}
}
+#endif
+
+#ifdef ENABLE_MQTT
+{
+ // Reconnect MQTT client since it may need to update MQTT reference and Topic
+ if ((mtp->protocol == kMtpProtocol_MQTT) && (mtp->enable) && (cont->enable) &&
+ (mtp->mqtt_connection_instance != INVALID))
+ {
+ DEVICE_MQTT_ScheduleReconnect(mtp->mqtt_connection_instance);
+ }
+}
#endif
// NOTE: We do not have to do anything for STOMP, as these parameters are only searched when we send
@@ -2559,6 +2590,16 @@ int Notify_ControllerMtpProtocol(dm_req_t *req, char *value)
WSCLIENT_StartClient(cont->instance, mtp->instance, cont->endpoint_id, &mtp->websock);
}
}
+#endif
+
+#ifdef ENABLE_MQTT
+{
+ // Reconnect MQTT client since it may need to update MQTT reference and Topic
+ if ((mtp->protocol == kMtpProtocol_MQTT) && (mtp->mqtt_connection_instance != INVALID))
+ {
+ DEVICE_MQTT_ScheduleReconnect(mtp->mqtt_connection_instance);
+ }
+}
#endif
// NOTE: We don't need to do anything explicitly for STOMP
diff --git a/src/core/device_mtp.c b/src/core/device_mtp.c
index e78a305..d690978 100644
--- a/src/core/device_mtp.c
+++ b/src/core/device_mtp.c
@@ -964,6 +964,9 @@ int NotifyChange_AgentMtpProtocol(dm_req_t *req, char *value)
}
#endif
+ // Cache the changed value
+ mtp->protocol = new_protocol;
+
#ifdef ENABLE_MQTT
// Schedule the affected MQTT connection to reconnect (because it might have lost or gained a agent queue to subscribe to)
if ((mtp->enable) && (mtp->mqtt_connection_instance != INVALID))
@@ -972,9 +975,6 @@ int NotifyChange_AgentMtpProtocol(dm_req_t *req, char *value)
}
#endif
- // Cache the changed value
- mtp->protocol = new_protocol;
-
#ifndef DISABLE_STOMP
// Schedule the affected STOMP connection to reconnect (because it might have lost or gained a agent queue to subscribe to)
if ((mtp->enable) && (mtp->stomp_connection_instance != INVALID))

View File

@@ -1,9 +0,0 @@
if PACKAGE_periodicstats
config PERIODICSTAT_INTERNAL_SAMPLING_RATE
int "Number of times statistics will be measured within a sample interval"
range 3 10
default 3
depends on PACKAGE_periodicstats
help
This value must be in range of 3 to 10. (default 3)
endif

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=periodicstats
PKG_VERSION:=1.5.8.2
PKG_VERSION:=1.5.5
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/periodicstats.git
PKG_SOURCE_VERSION:=6bee158e3a4d56d573fb8f26fe06fe59b75138ca
PKG_SOURCE_VERSION:=28bea5be686013af0ba8e54cf4871f10015e4b06
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif
@@ -32,12 +32,6 @@ define Package/periodicstats/description
Manage periodic statistics
endef
define Package/periodicstats/config
source "$(SOURCE)/Config.in"
endef
TARGET_CFLAGS += -DINTERNAL_SAMPLING_RATE=$(CONFIG_PERIODICSTAT_INTERNAL_SAMPLING_RATE)
ifeq ($(LOCAL_DEV),1)
define Build/Prepare
$(CP) -rf ~/git/periodicstats/* $(PKG_BUILD_DIR)/

View File

@@ -16,10 +16,6 @@ broute_rule_set_traffic_class() {
fi
}
broute_filter_on_dscp() {
BR_RULE="$BR_RULE --ip-tos $1"
}
broute_ipv4_rule_options()
{
local cid="$1"
@@ -29,12 +25,7 @@ broute_ipv4_rule_options()
set_ip_addr "$cid" ebt_match_src_ip ebt_match_dst_ip
if [ -n "$dscp_filter" ]; then
local tos_val
local tos_hex
tos_val=$((dscp_filter<<2))
tos_hex=$(printf "%x" $tos_val)
broute_filter_on_dscp "$tos_hex"
echo "DSCP filter is not supporter"
fi
if [ -n "$protocol" ]; then

View File

@@ -220,7 +220,12 @@ ebt_match_ipv6_dscp() {
}
broute_filter_on_dscp() {
BR_RULE="$BR_RULE --ip-tos $1"
# The broadcom option --ip-dscp-extend actually accepts tos
# and not dscp and that too in hex, hence, perform the conversion
# from dscp in uci to tos first and then convert to hex
tos_val=$(($1<<2))
tos_hex=$(printf "%x" $tos_val)
BR_RULE="$BR_RULE --ip-dscp-extend $tos_hex"
}
broute_ipv4_rule_options()
@@ -232,12 +237,7 @@ broute_ipv4_rule_options()
set_ip_addr $cid ebt_match_src_ip ebt_match_dst_ip
if [ ! -z $dscp_filter ]; then
local tos_val
local tos_hex
tos_val=$((dscp_filter<<2))
tos_hex=$(printf "%x" $tos_val)
broute_filter_on_dscp "$tos_hex"
broute_filter_on_dscp "$dscp_filter"
fi
if [ ! -z $protocol ]; then

View File

@@ -5,14 +5,14 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=rulengd
PKG_VERSION:=1.2.11
PKG_VERSION:=1.2.10
PKG_RELEASE:=1
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/rulengd.git
PKG_SOURCE_VERSION:=8fabf294cc056fd9a85cad06e81bd11df64e23a3
PKG_SOURCE_VERSION:=a32e325090d4303fe9aec786f81f0699006d21ab
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=swmodd
PKG_VERSION:=2.5.3.2
PKG_VERSION:=2.5.3
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/lcm/swmodd.git
PKG_SOURCE_VERSION:=d8cc9a7a3749975720c9b748adadb2b6c920acdc
PKG_SOURCE_VERSION:=80d8a2f0dddc8e1575c0a6dee1e496c52104d033
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -3,7 +3,3 @@ config globals 'globals'
option debug '1'
option log_level '3'
option lan_bridge 'br-lan'
option root '/container'
config execenv 'execenv_1'
option name 'oci'

18
swmodd/files/etc/init.d/crun Executable file → Normal file
View File

@@ -56,8 +56,8 @@ configure_lxc_container() {
}
configure_crun_container() {
local name type autostart du_status requested_state url username password capability
local BRIDGE BUNDLE BOOT PERM
local name type autostart du_status requested_state url username password
local BRIDGE BUNDLE BOOT
local RUNNER="/etc/swmodd/run.sh"
BUNDLE="${2}"
@@ -73,10 +73,6 @@ configure_crun_container() {
config_get url "${1}" url ""
config_get username "${1}" username ""
config_get password "${1}" password ""
config_get capability "${1}" capability ""
if [ -n "${capability}" ]; then
PERM="-p ${capability// /,}"
fi
if [ -z "${name}" ] || [ -z "${type}" ] || [ -z "${du_status}" ]; then
return 0;
@@ -152,7 +148,7 @@ configure_crun_container() {
if [ "${BOOT}" -eq "1" ]; then
if [ "${autostart}" -eq 1 ]; then
${RUNNER} -U -b "${BUNDLE}" -n "${name}" ${PERM}
${RUNNER} -U -b "${BUNDLE}" -n "${name}"
result=$(cat ${BUNDLE}/${name}/config.json |jq ".annotations.org_opencontainers_image_description")
if [ "${result}" != "null" ]; then
uci_set ocicontainer "${1}" description "${result}"
@@ -182,10 +178,10 @@ configure_crun_container() {
fi
elif [ "${requested_state}" = "Active" ]; then
if is_container_running "${name}"; then
${RUNNER} -u -n "${name}" -i "${BRIDGE}" ${PERM}
${RUNNER} -u -n "${name}" -i "${BRIDGE}"
crun resume "${name}"
else
${RUNNER} -U -b "${BUNDLE}" -n "${name}" ${PERM}
${RUNNER} -U -b "${BUNDLE}" -n "${name}"
result=$(cat ${BUNDLE}/${name}/config.json |jq ".annotations.org_opencontainers_image_description")
if [ "${result}" != "null" ]; then
uci_set ocicontainer "${1}" description "${result}"
@@ -211,7 +207,7 @@ configure_crun_container() {
procd_set_param stderr 1
procd_set_param command "${RUNNER}"
procd_append_param command -b "${BUNDLE}" -n "${name}" -i "${BRIDGE}"
#procd_set_param respawn
procd_set_param respawn
procd_close_instance "${name}"
}
@@ -241,7 +237,7 @@ start_service() {
env=$(uci -q get swmodd.@execenv[0].name)
if [ -z "${root}" ] || [ -z "${bridge}" ]; then
log "# Base bundle root[$root] or bridge[$bridge] not defined"
log "Base bundle root[$root] or bridge[$bridge] not defined"
return 0;
fi

View File

@@ -22,20 +22,20 @@ validate_globals_section()
}
start_lxc_container() {
local root_dir
local root
config_get name "${1}" name ""
config_get type "${1}" type ""
config_get autostart "${1}" autostart "0"
config_get timeout "${1}" timeout "300"
root_dir="${2}"
root="${2}"
if [ -z "${name}" ] || [ -z "${type}" ]; then
return 0;
fi
# workaround to install lxc container with installdu and autostart them
if [ -f "${root_dir}/$name/config" ]; then
if [ -f "${root}/$name/config" ]; then
type=lxc
fi
@@ -43,7 +43,7 @@ start_lxc_container() {
return 0;
fi
state=$(lxc-info -n "$name" -s -H)
state=$(lxc-ls -f | tail -n +2 | grep -w "${name}" | cut -d " " -f 2)
if [ -z "${state}" ]; then
return 0;
fi
@@ -81,24 +81,31 @@ start_service() {
local enabled debug log_level sock root
config_load swmodd
validate_globals_section || {
return 1;
}
[ "${enabled}" -eq 0 ] && return 0
# crun default runtime directory /run, if not present then create
[ ! -d "/run" ] && ln -fs /var/run /run
if [ ! -d "${root}" ]; then
log "# Not staring root [${root}] not present/defined"
return 1
fi
if [ ! -d "${root}" ]; then
log "# Not starting, Base root [${root}] not accessible/defined"
return 1
fi
env_name=""
execenvs=$(uci show swmodd | grep "=execenv" | cut -d'=' -f 1 | cut -d'.' -f 2)
for env in ${execenvs}; do
name=$(uci get swmodd.${env}.name)
if [ -n "${name}" ]; then
env_name="${name}"
break
fi
done
# Currently only one execenv supported
env_name="$(uci -q get swmodd.@execenv[0].name)"
if [ -z "${env_name}" ]; then
log "# Not starting, execenv name [${env_name}] not defined"
log "# Not starting execenv name [${env_name}] not defined"
return 1
fi
@@ -108,14 +115,10 @@ start_service() {
fi
bundle_root="${bundle_root}${env_name}"
if [ ! -d "${bundle_root}" ]; then
if [ -n "${bundle_root}" ]; then
mkdir -p "${bundle_root}"
else
log "# Not starting, execenv [${bundle_root}] not defined"
return 1
fi
fi
if [ ! -d "${bundle_root}" ]; then
log "# Not staring execenv [${bundle_root}] not present"
return 1
fi
procd_open_instance swmodd
procd_set_param command ${PROG}
@@ -151,5 +154,5 @@ reload_service() {
}
service_triggers() {
procd_add_reload_trigger "swmodd"
procd_add_reload_trigger "swmodd"
}

72
swmodd/files/etc/swmodd/run.sh Executable file → Normal file
View File

@@ -74,7 +74,7 @@ setup_container_network() {
}
run_container() {
local bundle name bridge network
local bundle name bridge
bundle="${1}"
name="${2}"
@@ -85,13 +85,7 @@ run_container() {
return 1
fi
# Only do the network setup if defined in config
network="$(cat ${BUNDLE}/${NAME}/config.json |jq '.linux.namespaces[] |select (.type == "network")')"
if [ -n "${network}" ] ; then
setup_container_network "${name}" "${bridge}"
else
log "Network not defined in config, using host network..."
fi
setup_container_network "${name}" "${bridge}"
script -q -c "crun run -b ${bundle}/${name} ${name}" /dev/null
}
@@ -129,57 +123,12 @@ update_config_json() {
fi
cd "${BUNDLE}/${NAME}"
if cat config.json |jq '.linux.namespaces[] |select (.type == "network") |.path' |grep -q ${NAME}; then
# If netns already configured and no additional permission bit assigned, exit from here
if [ -z "${PERM}" ]; then
exit 0;
fi
exit 0;
fi
mv config.json config_orig.json
json_init
json_load_file "config_orig.json"
# update hostname to container name
if [ -n "${NAME}" ]; then
json_add_string hostname "${NAME}"
fi
# Update cabalities
if [ -n "${PERM}" ]; then
log "Updating Permission in the json ..."
PERM="${PERM//,/ }"
json_select process
json_select capabilities
json_select bounding
for p in ${PERM}; do
json_add_string "" ${p}
done
json_select ..
json_select effective
for p in ${PERM}; do
json_add_string "" ${p}
done
json_select ..
json_select inheritable
for p in ${PERM}; do
json_add_string "" ${p}
done
json_select ..
json_select permitted
for p in ${PERM}; do
json_add_string "" ${p}
done
json_select ..
json_select ambient
for p in ${PERM}; do
json_add_string "" ${p}
done
json_select ..
json_select ..
json_select ..
fi
# update additional capabilities
json_select linux
json_for_each_item update_network_ns namespaces
json_dump >config.json
@@ -263,19 +212,16 @@ pull_image_from_registry() {
clean=0
net_update=0
update_json=0
PERM=""
while getopts b:n:i:r:l:t:p:cuU options
while getopts b:n:i:r:l:t:cuU options
do
case "${options}" in
b) BUNDLE=${OPTARG};;
c) clean=1;;
i) BRIDGE=${OPTARG};;
n) NAME=${OPTARG};;
p) PERM="${OPTARG}";;
i) BRIDGE=${OPTARG};;
r) REGURL=${OPTARG};;
l) LOGIN=${OPTARG};;
t) TIMEOUT=${OPTARG};;
c) clean=1;;
u) net_update=1;;
U) update_json=1;;
*) log "Invalid options";;
@@ -287,7 +233,7 @@ if [ -z "${NAME}" ]; then
return 0;
fi
if [ "${update_json}" -eq "1" ]; then
if [ "${update_json}" -eq 1 ]; then
update_config_json
return 0;
fi
@@ -297,7 +243,7 @@ if [ -n "${REGURL}" ]; then
return 0;
fi
if [ "$clean" -eq "1" ]; then
if [ "$clean" -eq 1 ]; then
clean_container_network "${NAME}"
return 0;
fi
@@ -307,7 +253,7 @@ if [ -z "${BRIDGE}" ]; then
return 0;
fi
if [ "${net_update}" -eq "1" ]; then
if [ "${net_update}" -eq 1 ]; then
get_veth_name "${NAME}"
brctl addif "${BRIDGE}" "${VETHNAME}"
return 0;

View File

@@ -10,31 +10,32 @@ configure_ee_path() {
config_get oci_bundle globals oci_bundle_root ""
mkdir -p /etc/lxc
if [ -n "${lxc_bundle}" ]; then
# if lxc_bundle_root define in swmodd, then remove it
name=$(echo ${lxc_bundle##/*/})
root=$(echo ${lxc_bundle%/$name})
echo "lxc.lxcpath = ${lxc_bundle}" > /etc/lxc/lxc.conf
uci_set swmodd globals lxc_bundle_root ""
fi
if [ -n "${oci_bundle}" ]; then
# if oci_bundle_root define in swmodd, then remove it
name=$(echo ${oci_bundle##/*/})
root=$(echo ${oci_bundle%/$name})
echo "lxc.lxcpath = ${oci_bundle}" > /etc/lxc/lxc.conf
uci_set swmodd globals oci_bundle_root ""
elif [ -n "${lxc_bundle}" ]; then
# if lxc_bundle_root define in swmodd, then remove it
name=$(echo ${lxc_bundle##/*/})
root=$(echo ${lxc_bundle%/$name})
echo "lxc.lxcpath = ${lxc_bundle}" > /etc/lxc/lxc.conf
elif [ -f /etc/lxc/lxc.conf ]; then
bundle_path=$(cat /etc/lxc/lxc.conf | grep "lxc.lxcpath" | cut -d "=" -f 2 | sed 's/[[:blank:]]//g')
name=$(echo ${bundle_path##/*/})
root=$(echo ${bundle_path%/$name})
else
name="lxc"
root="/srv"
echo "lxc.lxcpath = /srv/lxc" > /etc/lxc/lxc.conf
fi
uci_set swmodd globals oci_bundle_root ""
uci_set swmodd globals lxc_bundle_root ""
# configure root in globals section
if [ -n "${root}" ]; then
if ! uci_get swmodd globals root >/dev/null; then
uci_set swmodd globals root ${root}
fi
fi
if [ -z "${name}" ]; then
name="oci"
if ! uci_get swmodd globals root >/dev/null; then
uci_set swmodd globals root ${root}
fi
# configure execenv in swmodd

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=tr104
PKG_VERSION:=1.0.13.4
PKG_VERSION:=1.0.13.3
LOCAL_DEV:=0
ifeq ($(LOCAL_DEV),0)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/voice/tr104.git
PKG_SOURCE_VERSION:=9d8e68f237207723b446f614a2233dccf3c4dc09
PKG_SOURCE_VERSION:=38ef8533501af818638339acce21fc1fdfc95ee2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -3,15 +3,16 @@
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=urlfilter
PKG_VERSION:=2.0.3
PKG_VERSION:=1.1.8
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/network/urlfilter.git
PKG_SOURCE_VERSION:=ab62788ff1419928e90173f6963b1834d06f8500
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/urlfilter.git
PKG_SOURCE_VERSION:=a726e4ce9fa3322e135cb0dd961f31b4fd7ae22a
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif
@@ -26,7 +27,7 @@ define Package/urlfilter
SECTION:=utils
CATEGORY:=Utilities
TITLE:=URL filter
DEPENDS:=+libuci +libnetfilter-queue +libnfnetlink +iptables-mod-nfqueue +libpthread +libubox +ubus +conntrack +libbbfdm-api +libcurl
DEPENDS:=+libuci +libnetfilter-queue +libnfnetlink +iptables-mod-nfqueue +libpthread +libubox +ubus +conntrack
endef
define Package/urlfilter/description
@@ -34,36 +35,22 @@ define Package/urlfilter/description
endef
TARGET_CFLAGS += \
-D_GNU_SOURCE \
-DBBF_VENDOR_PREFIX=\\\"$(CONFIG_BBF_VENDOR_PREFIX)\\\"
-D_GNU_SOURCE
ifeq ($(LOCAL_DEV),1)
define Build/Prepare
$(CP) -rf ./urlfilter/* $(PKG_BUILD_DIR)/
$(CP) -rf ./urlfilter/* $(PKG_BUILD_DIR)/
endef
endif
define Package/urlfilter/install
$(INSTALL_DIR) $(1)/lib/parentalcontrol
$(INSTALL_DATA) ./files/lib/parentalcontrol/parentalcontrol.sh $(1)/lib/parentalcontrol/
$(INSTALL_DIR) $(1)/etc
$(INSTALL_DATA) ./files/etc/firewall.parentalcontrol $(1)/etc/
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/urlfilter $(1)/usr/sbin
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/etc/init.d/urlfilter $(1)/etc/init.d/
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DATA) ./files/etc/config/parentalcontrol $(1)/etc/config/
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_DATA) ./files/etc/uci-defaults/95-firewall_parentalcontrol.ucidefaults $(1)/etc/uci-defaults/
$(INSTALL_DATA) ./files/etc/uci-defaults/95-migrate_urlfilter.ucidefaults $(1)/etc/uci-defaults/
$(call BbfdmInstallPlugin,$(1),$(PKG_BUILD_DIR)/libparentalcontrol.so)
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) $(PKG_BUILD_DIR)/urlfilter $(1)/usr/sbin
$(INSTALL_BIN) ./files/etc/init.d/urlfilter $(1)/etc/init.d/
$(INSTALL_DATA) ./files/etc/config/urlfilter $(1)/etc/config/
$(call BbfdmInstallPlugin,$(1),./files/etc/bbfdm/plugins/urlfilter.json)
endef
$(eval $(call BuildPackage,urlfilter))

View File

@@ -0,0 +1,473 @@
{
"json_plugin_version": 1,
"Device.{BBF_VENDOR_PREFIX}URLFilter.": {
"type": "object",
"version": "2.14",
"protocols": [
"cwmp",
"usp"
],
"description": "This object contains the information about URLs to be blocked or allowed to access from specified MAC addresses in given time duration.",
"access": false,
"array": false,
"Enable": {
"type": "boolean",
"version": "2.14",
"read": true,
"write": true,
"protocols": [
"cwmp",
"usp"
],
"description": "Enable or disable URLFiltering on the CPE.",
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"name": "globals"
},
"option": {
"name": "enable"
}
}
}
]
},
"GlobalBlacklist": {
"type": "boolean",
"version": "2.14",
"read": true,
"write": true,
"protocols": [
"cwmp",
"usp"
],
"description": "Enable or disable access of the URLs specified in <<param|BlacklistURL>> from all connected devices.",
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"name": "globals"
},
"option": {
"name": "global_blacklist"
}
}
}
]
},
"BlacklistURL": {
"type": "string",
"version": "2.14",
"read": true,
"write": true,
"protocols": [
"cwmp",
"usp"
],
"description": "Comma separated list of URLs to be blacklisted from all connected devices.",
"list": {
"datatype": "string"
},
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"name": "globals"
},
"list": {
"name": "blacklist_url"
}
}
}
]
},
"ProfileNumberOfEntries": {
"type": "unsignedInt",
"read": true,
"write": false,
"version": "2.14",
"protocols": [
"cwmp",
"usp"
],
"description": "<<numentries>>",
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "profile"
},
"option": {
"name": "@Count"
}
}
}
]
},
"Device.{BBF_VENDOR_PREFIX}URLFilter.Profile.{i}.": {
"type": "object",
"version": "2.14",
"protocols": [
"cwmp",
"usp"
],
"description": "Table contain details of the blacklist/whitelist profiles.",
"uniqueKeys": [
"Name"
],
"access": true,
"array": true,
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "profile"
},
"dmmapfile": "dmmap_urlfilter"
}
}
],
"Alias": {
"type": "string",
"read": true,
"write": false,
"version": "2.14",
"protocols": [
"cwmp",
"usp"
],
"datatype": "string",
"range": [
{
"max": 64
}
],
"flags": [
"Unique",
"Linker"
],
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "profile"
},
"option": {
"name": "@Name"
}
}
}
]
},
"Name": {
"type": "string",
"read": true,
"write": true,
"version": "2.14",
"protocols": [
"cwmp",
"usp"
],
"description": "Name of the profile. This should be unique for each entry in the table.",
"datatype": "string",
"range": [
{
"max": 64
}
],
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "profile"
},
"option": {
"name": "name"
}
}
}
]
},
"WhitelistURL": {
"type": "string",
"version": "2.14",
"read": true,
"write": true,
"protocols": [
"cwmp",
"usp"
],
"description": "Comma separated list of URLs which should be allowed to access.",
"list": {
"datatype": "string"
},
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "profile"
},
"list": {
"name": "whitelist_url"
}
}
}
]
},
"BlacklistURL": {
"type": "string",
"version": "2.14",
"read": true,
"write": true,
"protocols": [
"cwmp",
"usp"
],
"description": "Comma separated list of URLs which should not be allowed to access.",
"list": {
"datatype": "string"
},
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "profile"
},
"list": {
"name": "blacklist_url"
}
}
}
]
}
},
"FilterNumberOfEntries": {
"type": "unsignedInt",
"read": true,
"write": false,
"version": "2.14",
"protocols": [
"cwmp",
"usp"
],
"description": "<<numentries>>",
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "filter"
},
"option": {
"name": "@Count"
}
}
}
]
},
"Device.{BBF_VENDOR_PREFIX}URLFilter.Filter.{i}.": {
"type": "object",
"version": "2.14",
"protocols": [
"cwmp",
"usp"
],
"description": "Table contain MAC addresses on which <<object|Profile>> should be applied along with other information like filtering should be applied on which day, the timing information when the filtering should be done etc.",
"access": true,
"array": true,
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "filter"
},
"dmmapfile": "dmmap_urlfilter"
}
}
],
"Enable": {
"type": "boolean",
"version": "2.14",
"read": true,
"write": true,
"protocols": [
"cwmp",
"usp"
],
"description": "Enable or disable this filter instance on the CPE.",
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "filter"
},
"option": {
"name": "enable"
}
}
}
]
},
"Profile": {
"type": "string",
"version": "2.14",
"read": true,
"write": true,
"protocols": [
"cwmp",
"usp"
],
"flags": [
"Reference"
],
"description": "Path of the <<object|Profile>> that should be applied.",
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "filter"
},
"option": {
"name": "profile"
}
},
"linker_obj": "Device.{BBF_VENDOR_PREFIX}URLFilter.Profile.*.Alias"
}
]
},
"MACAddress": {
"type": "string",
"version": "2.14",
"read": true,
"write": true,
"protocols": [
"cwmp",
"usp"
],
"description": "Comma separated list of MAC addresses for which the filtering should be done.",
"list": {
"datatype": "string"
},
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "filter"
},
"list": {
"name": "macaddr"
}
}
}
]
},
"Day": {
"type": "string",
"version": "2.14",
"read": true,
"write": true,
"protocols": [
"cwmp",
"usp"
],
"description": "Comma separated list of weekdays. Filtering should be done on the mentioned days only.",
"list": {
"datatype": "string"
},
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "filter"
},
"list": {
"name": "day"
}
}
}
]
},
"StartTime": {
"type": "string",
"version": "2.14",
"read": true,
"write": true,
"protocols": [
"cwmp",
"usp"
],
"description": "Time when filtering shall start.",
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "filter"
},
"option": {
"name": "start_time"
}
}
}
]
},
"Duration": {
"type": "string",
"version": "2.14",
"read": true,
"write": true,
"protocols": [
"cwmp",
"usp"
],
"description": "The duration in seconds to filter the URLs from start time.",
"mapping": [
{
"type": "uci",
"uci": {
"file": "urlfilter",
"section": {
"type": "filter"
},
"option": {
"name": "duration"
}
}
}
]
}
}
}
}

View File

@@ -1,16 +0,0 @@
#!/bin/sh
. /lib/parentalcontrol/parentalcontrol.sh
# if parentalcontrol is enabled, add the rules, else remove them
if [ "$(uci -q get parentalcontrol.globals.enable)" == "1" ]; then
# this is for urlfilter daemon
add_iptables_nfqueue_rules
# this for internet_access and profile_bedtime_schedule sections
add_internet_schedule_rules
else
# remove urlfilter daemon rules
remove_iptables_nfqueue_rules
# remove internet_access and profile_bedtime_schedule rules
remove_internet_schedule_rules
fi

View File

@@ -1,17 +1,46 @@
#!/bin/sh /etc/rc.common
START=95
START=21
STOP=10
USE_PROCD=1
NAME=urlfilter
PROG=/usr/sbin/urlfilter
. /lib/parentalcontrol/parentalcontrol.sh
configure_firewall()
{
iptables -w -nL 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.
iptables -w -I FORWARD 1 -p tcp --dport 80 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -I FORWARD 2 -p tcp --dport 443 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -I FORWARD 3 -p udp --dport 53 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -I FORWARD 4 -p udp --sport 53 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -I INPUT 1 -p udp --dport 53 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -I INPUT 2 -p udp --sport 53 -j NFQUEUE --queue-num 0 --queue-bypass
# 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"
if [ "$?" -ne 0 ]; then
#ip6table rules
ip6tables -w -I FORWARD 1 -p tcp --dport 80 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -I FORWARD 2 -p tcp --dport 443 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -I FORWARD 3 -p udp --dport 53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -I FORWARD 4 -p udp --sport 53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -I INPUT 1 -p udp --dport 53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -I INPUT 2 -p udp --sport 53 -j NFQUEUE --queue-num 0 --queue-bypass
fi
}
start_service() {
if [ "$(uci -q get parentalcontrol.globals.enable)" == "1" ]; then
if [ "$(uci -q get urlfilter.globals.enable)" == "1" ]; then
procd_open_instance urlfilter
procd_set_param command ${PROG}
configure_firewall
procd_set_param respawn
procd_close_instance
@@ -21,27 +50,38 @@ start_service() {
sleep 5
conntrack -F
fi
# this is for urlfilter daemon
add_iptables_nfqueue_rules
# this for internet_access and profile_bedtime_schedule sections
add_internet_schedule_rules
fi
}
stop_service() {
# remove urlfilter daemon rules
remove_iptables_nfqueue_rules
# remove internet_access and profile_bedtime_schedule rules
remove_internet_schedule_rules
iptables -w -nL 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
iptables -w -D FORWARD -p udp --dport 53 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -D FORWARD -p udp --sport 53 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -D INPUT -p udp --dport 53 -j NFQUEUE --queue-num 0 --queue-bypass
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"
if [ "$?" -eq 0 ]; then
#ip6table rules
ip6tables -w -D FORWARD -p tcp --dport 80 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -D FORWARD -p tcp --dport 443 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -D FORWARD -p udp --dport 53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -D FORWARD -p udp --sport 53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -D INPUT -p udp --dport 53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -D INPUT -p udp --sport 53 -j NFQUEUE --queue-num 0 --queue-bypass
fi
}
reload_service() {
stop
start
}
service_triggers() {
procd_add_reload_trigger "parentalcontrol"
procd_add_reload_trigger "schedules"
procd_add_reload_trigger "urlfilter"
procd_add_reload_trigger "firewall"
}

View File

@@ -1,11 +0,0 @@
#!/bin/sh
if [ -f /etc/firewall.parentalcontrol ]; then
uci -q get firewall.parentalcontrol >/dev/null || {
uci -q set firewall.parentalcontrol=include
uci -q set firewall.parentalcontrol.path="/etc/firewall.parentalcontrol"
uci -q set firewall.parentalcontrol.reload=1
}
fi
exit 0

View File

@@ -1,132 +0,0 @@
#!/bin/sh
. /lib/functions.sh
# Convert URL filter to parental control format
urlfilter_config="/etc/config/urlfilter"
parentalcontrol_config="/etc/config/parentalcontrol"
schedules_config="/etc/config/schedules"
# this script only needs to work if urlfilter_config was found
if [ ! -s "$urlfilter_config" ]; then
exit 0
fi
# reset parentalcontrol_config
# but schedules might have data other than schedules
# so append to it
rm -f "$parentalcontrol_config"
touch "$parentalcontrol_config"
schedules_enable="$(uci -q get schedules.global.enable)"
# if no schedules config, then add it
if [ ! -s "$schedules_config" ]; then
touch "$schedules_config"
schedules_enable=1
fi
# Parse globals
uci -q batch <<EOF
set parentalcontrol.globals=globals
set parentalcontrol.globals.enable="$(uci -q get urlfilter.globals.enable)"
set schedules.global=global
set schedules.global.enable="$schedules_enable"
EOF
# Function to handle filter sections
handle_filter() {
local section="$1"
local url_list="$2"
local profile_name="$3"
local access="$4"
local profile_name enable start_time duration days filter_profile macaddr_list
config_get filter_profile "$section" profile
# if option profile value and profile name match, then
if [ "$filter_profile" = "$profile_name" ]; then
config_get enable "$section" enable
config_get start_time "$section" start_time
config_get duration "$section" duration
config_get macaddr_list "$section" macaddr
config_get days "$section" day
# Add hosts based on MAC addresses in the filter
if [ -n "$macaddr_list" ]; then
for macaddr in $macaddr_list; do
uci -q add_list parentalcontrol.${profile_name}.host="$macaddr"
done
fi
uci -q set parentalcontrol.f_$filter_profile=profile_urlfilter
uci -q set parentalcontrol.f_$filter_profile.enable="$enable"
uci -q set parentalcontrol.f_$filter_profile.access="$access"
uci -q set parentalcontrol.f_$filter_profile.dm_parent="$profile_name"
# Add URLs one by one as filter_text
for url in $url_list; do
uci -q add_list parentalcontrol.f_$filter_profile.filter_text="$url"
done
# Add schedule if time restrictions exist
if [ -n "$start_time" ] && [ -n "$duration" ] && [ -n "$days" ]; then
local schedule_name
# declare and assign separately to avoid masking return value
schedule_name="$(uci -q add schedules schedule)"
# if adding schedule was successful, then populate it
if [ "$?" -eq 0 ] && [ -n "$schedule_name" ]; then
uci -q set schedules.${schedule_name}=schedule
uci -q set schedules.${schedule_name}.enable="$enable"
uci -q set schedules.${schedule_name}.start="$start_time"
uci -q set schedules.${schedule_name}.duration="$duration"
for day in $days; do
uci -q add_list schedules.${schedule_name}.day="$day"
done
# Link schedule to profile_urlfilter
uci -q set parentalcontrol.f_$filter_profile.profile_urlfilter_schedule="$schedule_name"
fi
fi
fi
}
# Function to handle profile sections
handle_profile() {
local section="$1"
local profile_name whitelist_urls blacklist_urls
config_get profile_name "$section" name
# if name was not set then continue
if [ -z "$profile_name" ]; then
return
fi
config_get whitelist_urls "$section" whitelist_url
config_get blacklist_urls "$section" blacklist_url
# Create the new profile in parentalcontrol
uci -q set parentalcontrol.${profile_name}=profile
uci -q set parentalcontrol.${profile_name}.name="$profile_name"
# Add whitelist/blacklist URLs as filter_text
if [ -n "$whitelist_urls" ]; then
config_foreach handle_filter filter "$whitelist_urls" "$profile_name" 1 # Whitelist access
fi
if [ -n "$blacklist_urls" ]; then
config_foreach handle_filter filter "$blacklist_urls" "$profile_name" 0 # Blacklist access
fi
}
# Load urlfilter UCI config and iterate through profiles and filters
config_load "urlfilter"
config_foreach handle_profile profile
config_foreach handle_filter filter
# Commit changes
uci commit parentalcontrol
uci commit schedules
rm -f "$urlfilter_config"

View File

@@ -1,495 +0,0 @@
#!/bin/sh
. /lib/functions.sh
day=""
next_days=""
prev_days=""
schedule_added=""
ACCESS_RULE=""
IP_RULE=""
ACL_FILE=""
parentalcontrol_ipv4_forward=""
parentalcontrol_ipv6_forward=""
# Function to calculate UTC time and relative day
get_relative_day() {
local hour="$1"
local offset="$2"
local relative_day="$3"
local utc_hour
# we need to force hours and minutes to be treated as base 10 (decimal)
# otherwise shell will treat, for example, 09 as octal
# hour=$((10#$hour)) does not work on busybox
# so we use another trick
hour=$(expr $hour + 0)
# Extract the sign and the hour part of the offset
local sign=${offset:0:1}
local offset_hour=${offset:1:2}
# Adjust hour based on the offset
if [ "$sign" = "-" ]; then
utc_hour=$((hour + offset_hour))
else
utc_hour=$((hour - offset_hour))
fi
# Handle overflow/underflow of UTC hours to keep within 0-23 range
if [ $utc_hour -lt 0 ]; then
if [ "$relative_day" = "today" ]; then
relative_day="yesterday"
else
relative_day="today"
fi
elif [ $utc_hour -ge 24 ]; then
if [ "$relative_day" = "today" ]; then
relative_day="tomorrow"
else
relative_day="tomorrow"
fi
else
if [ "$relative_day" = "tomorrow" ]; then
relative_day="tomorrow"
else
relative_day="today"
fi
fi
echo "$relative_day"
}
get_next_day() {
local weekday="$1"
case "$weekday" in
"Mon"|"Monday") echo "Tuesday"
;;
"Tue"|"Tuesday") echo "Wednesday"
;;
"Wed"|"Wednesday") echo "Thursday"
;;
"Thu"|"Thursday") echo "Friday"
;;
"Fri"|"Friday") echo "Saturday"
;;
"Sat"|"Saturday") echo "Sunday"
;;
"Sun"|"Sunday") echo "Monday"
;;
esac
}
get_previous_day() {
local weekday="$1"
case "$weekday" in
"Mon"|"Monday") echo "Sunday"
;;
"Tue"|"Tuesday") echo "Monday"
;;
"Wed"|"Wednesday") echo "Tuesday"
;;
"Thu"|"Thursday") echo "Wednesday"
;;
"Fri"|"Friday") echo "Thursday"
;;
"Sat"|"Saturday") echo "Friday"
;;
"Sun"|"Sunday") echo "Saturday"
;;
esac
}
add_access_rule() {
local rule_prefix="$1"
local start_time="$2"
local stop_time="$3"
local weekdays="$4"
local target="$5"
local rule
local start_hm stop_hm
if [ -z "$target" ]; then
return
fi
if [ -n "$weekdays" ]; then
start_hm=$(echo "$start_time" | awk -F: '{ print $1,$2 }' | sed 's/ //')
stop_hm=$(echo "$stop_time" | awk -F: '{ print $1,$2 }' | sed 's/ //')
if [ "$start_hm" = "$stop_hm" ]; then
return
fi
rule_prefix="$rule_prefix -m time --timestart $start_time --timestop $stop_time --weekdays $weekdays"
fi
rule="$rule_prefix -j $target"
echo "iptables -w -A parentalcontrol_forward ${rule}" >> "$ACL_FILE"
echo "ip6tables -w -A parentalcontrol_forward ${rule}" >> "$ACL_FILE"
}
generate_ip_rule() {
local utc_start_relative_day="$1"
local utc_end_relative_day="$2"
local utc_start_time="$3"
local utc_stop_time="$4"
local target="$5"
# Handle the cases based on the relation between utc_start_relative_day and utc_end_relative_day
if [ "$utc_start_relative_day" = "yesterday" ] && [ "$utc_end_relative_day" = "yesterday" ]; then
# Rule for yesterday only
add_access_rule "$IP_RULE" "$utc_start_time" "$utc_stop_time" "$prev_days" "$target"
elif [ "$utc_start_relative_day" = "yesterday" ] && [ "$utc_end_relative_day" = "today" ]; then
# Rule for yesterday to today
add_access_rule "$IP_RULE" "$utc_start_time" "23:59:59" "$prev_days" "$target"
add_access_rule "$IP_RULE" "00:00" "$utc_stop_time" "$day" "$target"
elif [ "$utc_start_relative_day" = "today" ] && [ "$utc_end_relative_day" = "today" ]; then
# Rule for today only
add_access_rule "$IP_RULE" "$utc_start_time" "$utc_stop_time" "$day" "$target"
elif [ "$utc_start_relative_day" = "today" ] && [ "$utc_end_relative_day" = "tomorrow" ]; then
# Rule for today to tomorrow
add_access_rule "$IP_RULE" "$utc_start_time" "23:59:59" "$day" "$target"
add_access_rule "$IP_RULE" "00:00" "$utc_stop_time" "$next_days" "$target"
elif [ "$utc_start_relative_day" = "tomorrow" ] && [ "$utc_end_relative_day" = "tomorrow" ]; then
# Rule for tomorrow only
add_access_rule "$IP_RULE" "$utc_start_time" "$utc_stop_time" "$next_days" "$target"
else
logger -t parental_control "Error: Unhandled case"
fi
}
handle_day_list() {
local value=$1
val=$(echo $value | cut -c 1-3)
next_day_val=$(get_next_day $val)
prev_day_val=$(get_previous_day $val)
if [ -z $day ]; then
day="$val"
next_days="$next_day_val"
prev_days="$prev_day_val"
else
day="$day,$val"
next_days="$next_days,$next_day_val"
prev_days="$prev_days,$prev_day_val"
fi
}
handle_schedule() {
local schedule_section="$1"
local type="$2"
local schedule_ref="$3"
local local_start_time local_stop_time duration zone_offset local_start_hh local_stop_hh
local is_enabled
local target
local day_config
local relative_day_end="today"
IP_RULE="$ACCESS_RULE"
day=""
next_days=""
prev_days=""
local all_days="Monday Tuesday Wednesday Thursday Friday Saturday Sunday"
zone_offset=$(date +%z)
if [ "$type" = "profile_bedtime_schedule" ]; then
target="DROP"
config_get local_start_time "$schedule_section" "start_time" "00:00:00"
config_get local_stop_time "$schedule_section" "end_time" "23:59:59"
local_start_hh=$(echo $local_start_time | awk -F: '{ print $1 }')
local_stop_hh=$(echo $local_stop_time | awk -F: '{ print $1 }')
config_get day_config "$schedule_section" "day" "$all_days"
else
if [ "$schedule_ref" != "$schedule_section" ]; then
return
fi
config_get_bool is_enabled "$schedule_section" "enable" 0
if [ $is_enabled -eq 0 ]; then
return
fi
# for access rules to be effective for a schedule, need to add DROP rule
# to block the access outside the defined schedule
# therefore, set flag
if [ "$schedule_added" = "0" ]; then
schedule_added="1"
fi
target="ACCEPT"
config_get local_start_time "$schedule_section" "start_time" "00:00"
config_get duration "$schedule_section" "duration"
local hh=$(echo $local_start_time | awk -F: '{ print $1 }')
local mm=$(echo $local_start_time | awk -F: '{ print $2 }')
local hh_s=`expr $hh \* 3600`
local mm_s=`expr $mm \* 60`
local ss=$(( hh_s + mm_s ))
local_start_hh=$hh
if [ -n "$duration" ]; then
local stop_ss rem_ss mm
stop_ss=$(( ss + duration ))
hh=$(( stop_ss / 3600 ))
rem_ss=$(( stop_ss % 3600 ))
mm=$(( rem_ss / 60 ))
ss=$(( rem_ss % 60 ))
local_stop_time="$hh:$mm:$ss"
local_stop_hh="$hh"
else
# if duration is not specified, then apply rule to end of the day
local_stop_time="23:59:59"
local_stop_hh="23"
fi
config_get day_config "$schedule_section" "day" "$all_days"
fi
IFS=" "
for d in $day_config; do
handle_day_list $d
done
utc_start_time=$(date -u -d @$(date "+%s" -d "$local_start_time") +%H:%M)
utc_start_time="$utc_start_time"
utc_stop_time=$(date -u -d @$(date "+%s" -d "$local_stop_time") +%H:%M)
utc_stop_time="$utc_stop_time"
# Determine whether the local end hour crosses midnight
if [ "$local_start_hh" -gt "$local_stop_hh" ]; then
relative_day_end="tomorrow"
fi
local utc_start_relative_day=$(get_relative_day "$local_start_hh" "$zone_offset" "today")
local utc_end_relative_day=$(get_relative_day "$local_stop_hh" "$zone_offset" "$relative_day_end")
generate_ip_rule "$utc_start_relative_day" "$utc_end_relative_day" "$utc_start_time" "$utc_stop_time" "$target"
}
# Function that parses input for MAC addresses or hostnames
parse_macs_or_hostnames() {
local input="$1"
local lease_file="/tmp/dhcp.leases"
for item in $input; do
case "$item" in
??:??:??:??:??:??)
# It's a MAC address, print it as is
echo "$item"
;;
*)
# Assume it's a hostname and search for its MAC address in the leases file
mac=$(awk -v hostname="$item" '$4 == hostname {print $2}' "$lease_file")
if [ -n "$mac" ]; then
echo "$mac"
fi
;;
esac
done
}
handle_bedtime() {
local mac_addresses="$1"
local mac
# if mac addresses are present, then we apply the rule for each mac address
# otherwise apply the rule to everybody
for mac in $mac_addresses; do
ACCESS_RULE="-m mac --mac-source $mac"
config_foreach handle_schedule profile_bedtime_schedule "profile_bedtime_schedule" ""
done
}
handle_internet_access() {
local mac_addresses="$1"
local mac
local access_policy
config_get access_policy "$profile_section" "internet_access_policy"
local schedule_ref
config_get schedule_ref "$profile_section" "internet_access_schedule"
for mac in $mac_addresses; do
ACCESS_RULE="-m mac --mac-source $mac"
# As per Data Model, if access policy is deny, then schedule is to be ignored
# and no access is to be provided for the device
if [ "$access_policy" = "Deny" ]; then
add_access_rule "$ACCESS_RULE" "" "" "" "DROP"
continue # no need to parse schedule
fi
schedule_added="0"
# check if schedule is defined for this profile/internet_access instance
# and if yes, create rule accordingly
if [ -n "$schedule_ref" ]; then
config_load "schedules"
config_foreach handle_schedule schedule "schedule" "$schedule_ref"
fi
# for access rule to work, need to have default drop rule as last rule
if [ "$schedule_added" = "1" ]; then
add_access_rule "$ACCESS_RULE" "" "" "" "DROP"
fi
done
}
handle_profile() {
local profile_section="$1"
local internet_access_enable bedtime_enable hostlist
config_get hostlist "$profile_section" "host"
if [ -z "$hostlist" ]; then
return
fi
ACCESS_RULE=""
# convert hostnames to mac addresses if needed
# and replace newlines with space because it messes up the for loops in
# handle_internet_access and handle_bedtime functions
local mac_addresses="$(parse_macs_or_hostnames "${hostlist}" | tr '\n' ' ')"
# default value of Hosts.AccessControl.{i}.Enable is false,
# so, if not defined in uci as 1, assume 0
config_get_bool internet_access_enable "$profile_section" "internet_access_enable" 0
if [ $internet_access_enable -gt 0 ]; then
handle_internet_access "${mac_addresses}"
# handle_internet_access may have loaded schedules uci
# so, reload parentalcontrol
config_load "parentalcontrol"
fi
config_get_bool bedtime_enable "$profile_section" "bedtime_enable" 0
if [ $bedtime_enable -gt 0 ]; then
handle_bedtime "${mac_addresses}"
fi
}
add_internet_schedule_rules() {
ACL_FILE="/tmp/parentalcontrol_access_control/access_control.rules"
rm -f $ACL_FILE
mkdir -p /tmp/parentalcontrol_access_control/
touch $ACL_FILE
echo "iptables -w -F parentalcontrol_forward" >> $ACL_FILE
echo "ip6tables -w -F parentalcontrol_forward" >> $ACL_FILE
parentalcontrol_ipv4_forward=$(iptables -t filter --list -n | grep parentalcontrol_forward)
if [ -z "$parentalcontrol_ipv4_forward" ]; then
echo "iptables -w -t filter -N parentalcontrol_forward" >> $ACL_FILE
ret=$?
[ $ret -eq 0 ] && echo "iptables -w -t filter -I FORWARD -j parentalcontrol_forward" >> $ACL_FILE
fi
parentalcontrol_ipv6_forward=$(ip6tables -t filter --list -n | grep parentalcontrol_forward)
if [ -z "$parentalcontrol_ipv6_forward" ]; then
echo "ip6tables -w -t filter -N parentalcontrol_forward" >> $ACL_FILE
ret=$?
[ $ret -eq 0 ] && echo "ip6tables -w -t filter -I FORWARD -j parentalcontrol_forward" >> $ACL_FILE
fi
# Load /etc/config/parentalcontrol UCI file
config_load "parentalcontrol"
config_foreach handle_profile "profile"
# apply the rules
sh $ACL_FILE
}
add_iptables_nfqueue_rules() {
iptables -w -nL 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.
iptables -w -I FORWARD 1 -p tcp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -I FORWARD 1 -p udp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -I INPUT 1 -p tcp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -I INPUT 1 -p udp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
# disable acceleration for https packet so that they can be read by urlfilter
ebtables --concurrent -A FORWARD -p ip --ip-protocol 6 --ip-destination-port 443 -j SKIPLOG 2> /dev/null
ebtables --concurrent -A FORWARD -p ip --ip-protocol 6 --ip-source-port 53 -j SKIPLOG 2> /dev/null
ebtables --concurrent -A FORWARD -p ip --ip-protocol 17 --ip-source-port 53 -j SKIPLOG 2> /dev/null
fi
ip6tables -w -nL FORWARD|grep -iqE "NFQUEUE"
if [ "$?" -ne 0 ]; then
#ip6table rules
ip6tables -w -I FORWARD 1 -p tcp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -I FORWARD 1 -p udp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -I INPUT 1 -p tcp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -I INPUT 1 -p udp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
# disable acceleration for https packet so that they can be read by urlfilter
ebtables --concurrent -A FORWARD -p ip6 --ip6-protocol 6 --ip6-destination-port 443 -j SKIPLOG 2> /dev/null
ebtables --concurrent -A FORWARD -p ip6 --ip6-protocol 6 --ip6-source-port 53 -j SKIPLOG 2> /dev/null
ebtables --concurrent -A FORWARD -p ip6 --ip6-protocol 17 --ip6-source-port 53 -j SKIPLOG 2> /dev/null
fi
}
remove_iptables_nfqueue_rules() {
iptables -w -nL FORWARD|grep -iqE "NFQUEUE"
if [ "$?" -eq 0 ]; then
iptables -w -D FORWARD -p tcp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -D FORWARD -p udp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -D INPUT -p tcp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -w -D INPUT -p udp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
ebtables --concurrent -D FORWARD -p ip --ip-protocol 6 --ip-destination-port 443 -j SKIPLOG 2> /dev/null
ebtables --concurrent -D FORWARD -p ip --ip-protocol 6 --ip-source-port 53 -j SKIPLOG 2> /dev/null
ebtables --concurrent -D FORWARD -p ip --ip-protocol 17 --ip-source-port 53 -j SKIPLOG 2> /dev/null
fi
ip6tables -w -nL FORWARD|grep -iqE "NFQUEUE"
if [ "$?" -eq 0 ]; then
#ip6table rules
ip6tables -w -D FORWARD -p tcp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -D FORWARD -p udp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -D INPUT -p tcp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
ip6tables -w -D INPUT -p udp --match multiport --ports 80,443,53 -j NFQUEUE --queue-num 0 --queue-bypass
ebtables --concurrent -D FORWARD -p ip6 --ip6-protocol 6 --ip6-destination-port 443 -j SKIPLOG 2> /dev/null
ebtables --concurrent -D FORWARD -p ip6 --ip6-protocol 6 --ip6-source-port 53 -j SKIPLOG 2> /dev/null
ebtables --concurrent -D FORWARD -p ip6 --ip6-protocol 17 --ip6-source-port 53 -j SKIPLOG 2> /dev/null
fi
}
remove_internet_schedule_rules() {
# remove from iptables, if chain exists
if iptables -w -nL FORWARD|grep -iqE "parentalcontrol_forward"; then
iptables -w -t filter -D FORWARD -j parentalcontrol_forward
iptables -w -F parentalcontrol_forward
iptables -w -X parentalcontrol_forward
fi
# remove from ip6tables, if chain exists
if ip6tables -w -nL FORWARD|grep -iqE "parentalcontrol_forward"; then
ip6tables -w -t filter -D FORWARD -j parentalcontrol_forward
ip6tables -w -F parentalcontrol_forward
ip6tables -w -X parentalcontrol_forward
fi
}

View File

@@ -6,7 +6,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=usp-js
PKG_VERSION:=1.2.6
PKG_VERSION:=1.2.4
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/usp-js.git
@@ -23,7 +23,7 @@ define Package/usp-js
SECTION:=libs
CATEGORY:=Libraries
TITLE:=A JS library for USP(TR369) protocol
DEPENDS:=+quickjs +quickjs-websocket +@OBUSPA_ENABLE_TEST_CONTROLLER_LOCAL
DEPENDS:=+quickjs +quickjs-websocket
EXTRA_DEPENDS:=obuspa mosquitto-ssl
endef
@@ -37,7 +37,9 @@ endef
define Package/usp-js/install
$(INSTALL_DIR) $(1)/usr/lib/usp-js
$(INSTALL_DIR) $(1)/etc
$(CP) $(PKG_BUILD_DIR)/qjs/* $(1)/usr/lib/usp-js/
$(CP) ./files/etc/* $(1)/etc/
endef
$(eval $(call BuildPackage,usp-js))

68
usp-js/files/etc/init.d/uspjs Executable file
View File

@@ -0,0 +1,68 @@
#!/bin/sh /etc/rc.common
START=99
STOP=01
USE_PROCD=1
log()
{
echo "$*"|logger -t usp-js -p debug
}
get_oui_from_db()
{
db -q get device.deviceinfo.ManufacturerOUI
}
get_serial_from_db()
{
db -q get device.deviceinfo.SerialNumber
}
publish_endpoint()
{
local AgentEndpointID serial oui user pass
if ! uci -q get obuspa.testmqtt; then
return 0;
fi
# return if mosquitto_pub is not present
if [ ! "$(command -v mosquitto_pub)" ]; then
log "mosquitto_pub not present can't publish EndpointID"
return 0;
fi
# Get endpoint id from obuspa config first
config_load obuspa
config_get AgentEndpointID localagent EndpointID ""
if [ -z "${AgentEndpointID}" ]; then
serial=$(get_serial_from_db)
oui=$(get_oui_from_db)
AgentEndpointID="os::${oui}-${serial//+/%2B}"
fi
config_get user testmqtt Username ""
config_get pass testmqtt Password ""
# publish Agent's EndpointID in mosquito broker for discovery by usp-js
# This is a work around till obuspa adds supports for mDNS discovery
if [ -n "${user}" ] && [ -n "${pass}" ]; then
log "Publishing EndpointID ${AgentEndpointID} to local mqtt broker with username, password"
mosquitto_pub -r -t "obuspa/EndpointID" -m "${AgentEndpointID}" -u "${user}" -P "${pass}"
elif [ -n "${user}" ]; then
log "Publishing EndpointID ${AgentEndpointID} to local mqtt broker with username only"
mosquitto_pub -r -t "obuspa/EndpointID" -m "${AgentEndpointID}" -u "${user}"
else
log "Publishing EndpointID ${AgentEndpointID} to local mqtt broker"
mosquitto_pub -r -t "obuspa/EndpointID" -m "${AgentEndpointID}"
fi
}
start_service() {
publish_endpoint
}
service_triggers() {
procd_add_reload_trigger "obuspa"
}

View File

@@ -0,0 +1,59 @@
#!/bin/sh
. /lib/functions.sh
if [ ! -f "/etc/config/obuspa" ]; then
echo "Local obuspa not available"
return 0
fi
if [ ! -f "/etc/config/mosquitto" ]; then
echo "Local mosquitto broker not available"
return 0
fi
add_obuspa_test_mtp()
{
uci_add obuspa mtp test_mtp
uci_set obuspa test_mtp Protocol 'MQTT'
uci_set obuspa test_mtp ResponseTopicConfigured '/usp/endpoint'
uci_set obuspa test_mtp mqtt 'testmqtt'
}
add_obuspa_test_mqtt()
{
# Adds Device.MQTT.Client.
uci_add obuspa mqtt testmqtt
uci_set obuspa testmqtt BrokerAddress '127.0.0.1'
uci_set obuspa testmqtt BrokerPort '1883'
uci_set obuspa testmqtt TransportProtocol 'TCP/IP'
}
add_obuspa_test_controller()
{
# Adds Device.LocalAgent.Controller.
uci_add obuspa controller testcontroller
uci_set obuspa testcontroller EndpointID 'proto::interop-usp-controller'
uci_set obuspa testcontroller Protocol 'MQTT'
uci_set obuspa testcontroller Topic '/usp/controller'
uci_set obuspa testcontroller mqtt 'testmqtt'
uci_set obuspa testcontroller assigned_role_name 'full_access'
}
add_obuspa_config()
{
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'
}
# Add local controller for usp-js
uci_load mosquitto
add_obuspa_config
uci_load obuspa
add_obuspa_test_mtp
add_obuspa_test_mqtt
add_obuspa_test_controller

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=wifimngr
PKG_VERSION:=16.2.1.7
PKG_VERSION:=16.2.1.2
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=5cf099ca4d34a5ba1b516bc8f8735706025e7e49
PKG_SOURCE_VERSION:=a95b5a3d0c87ad486752c2a7423b017c8bb0d0e6
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

View File

@@ -8,13 +8,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=xmppc
PKG_VERSION:=2.2.3.2
PKG_VERSION:=2.2.3
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/xmppc.git
PKG_SOURCE_VERSION:=9f100e3334c1cb62dbffa779a1a5aef9c186355d
PKG_SOURCE_VERSION:=23a7f6005b84fc4d4a1432057ecd2b5a74f9ea3e
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif