Compare commits

...

65 Commits

Author SHA1 Message Date
Arun Muthusamy
e1317bfcdc Qos: Read number of queue on target from libqos 2023-01-13 10:55:07 +01:00
Anjan Chanda
f7456c22f9 wfa-capi: 2.0.1 2023-01-05 10:07:03 +01:00
Anjan Chanda
34e5487f75 map-agent: 4.1.0.0 2023-01-04 17:01:55 +01:00
Anjan Chanda
a49e91f18e map-controller: 4.1.0.0 2023-01-04 17:01:55 +01:00
Anjan Chanda
ff55ae40f9 ieee1905: 7.0.2 2023-01-04 17:01:55 +01:00
Anjan Chanda
3bdc11c5c4 wifimngr: 15.0.3 2023-01-04 17:01:55 +01:00
Anjan Chanda
2cd976f5b9 easy-soc-libs: 7.2.3 2023-01-04 17:01:55 +01:00
Sukru Senli
cc306932e8 iop: do not select ethmngr by default
this causes problem building for airoha due to libethernet's dependency to xpon_bsp which is selected as =m
2023-01-04 16:55:49 +01:00
Anjan Chanda
d3927168b2 wifimngr: 15.0.2 2023-01-04 16:03:14 +01:00
Anjan Chanda
96ede99d63 easy-soc-libs: 7.2.1 2023-01-04 16:02:35 +01:00
Sukru Senli
86e90969e3 dslmngr: allow compiling for non broadcom targets
to be able to use test stub libdsl
2023-01-04 14:46:56 +01:00
Sukru Senli
99024c3111 dslmngr: move dsl scripts from target feeds to dslmngr package 2023-01-04 13:57:16 +01:00
Anjan Chanda
93777c899c wifimngr: 15.0.1 2023-01-04 13:14:30 +01:00
Anjan Chanda
d4bf893482 ieee1905: 7.0.1 2023-01-04 12:52:05 +01:00
Anjan Chanda
9da34a4fff easy-soc-libs: 7.2.0 2023-01-04 12:52:05 +01:00
Padmalochan Mohapatra
f7e6238928 qos Improvements on mtk qos tc+iptable classification 2023-01-03 15:26:20 +00:00
Sukru Senli
9192b863ea ethmngr: update port config generation and get correct max speed 2023-01-03 16:14:18 +01:00
Sukru Senli
0ef4d4e6b1 ethmngr: make scripts available for all targets even though ethmngr/libethernet pair is not available 2023-01-03 15:40:31 +01:00
Sukru Senli
af22e1abc3 iop: let easy-soc libraries be selected by the managers 2023-01-03 15:37:40 +01:00
Sukru Senli
b9e6f56110 iop: select ethmngr and qosmngr 2023-01-03 15:14:10 +01:00
Sukru Senli
d8454fab29 ethmngr: merge port-management into ethmngr 2023-01-03 15:06:39 +01:00
Wenpeng Song
8abeee9d23 Update packages endptmngr and dectmngr
dectmngr-3.5.6: Send CALL_REJECT only for an unanswered incoming call 
endptmngr: Fix CALL_REJECT and ON-HOOK handling

(cherry picked from commit 8605c1e455)
2023-01-03 13:35:30 +00:00
Sukru Senli
1164e33371 qosmngr: simplify Makefile 2023-01-03 13:01:34 +01:00
Janusz Dziedzic
15a65a071e wifimngr: 14.3.3
Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
2023-01-02 15:29:19 +00:00
Janusz Dziedzic
ecddbb5992 easy-soc-libs: 6.9.0
Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
2023-01-02 15:29:19 +00:00
Sukru Senli
4dbf7ac1da qosmngr: add intall section for ipq95xx target 2023-01-02 16:21:51 +01:00
Sukru Senli
f071d28911 qosmngr: allow selecting for ipq95xx target 2023-01-02 13:07:22 +01:00
Suresh Krishna
16e834d0f6 ipq95xx: add support for building target ipq95xx based on mac80211
Signed-off-by: Suresh Krishna <quic_sureshkr@quicinc.com>
2023-01-02 11:34:58 +00:00
Suvendhu Hansa
881711bb11 dhcp option 43 handling 2022-12-30 08:30:19 +00:00
Padmalochan Mohapatra
6961bbb4a7 qos : tc-Classification dead code cleanup 2022-12-30 03:16:49 +00:00
Padmalochan Mohapatra
591f9d9dde qos : Classification with tc+iptables for QoS on MTK_PANTHER 2022-12-29 12:09:38 +00:00
subramanian c
d942f2c606 qos: Deprecate firewall.qos and handle through qos config 2022-12-27 04:32:07 +00:00
Marina Maslova
01819a7f72 qos: enable should be 1 by default 2022-12-26 13:11:44 +03:00
Yalu Zhang
c8969996c7 Update package voicemngr and libvoice-broadcom
Get voice port configuration from the board database
2022-12-23 16:11:48 +01:00
nevadita.chatterjee
0bb0ade1ec map-topology:2.5.1.14 2022-12-22 10:40:59 +05:30
Amin Ben Romdhane
52c338366b ssdpd: 1.0.4 2022-12-21 23:25:36 +01:00
Marina Maslova
0dae8c3786 qos: default uplink limit should be 0 (unlimited) 2022-12-21 23:31:02 +03:00
vdutta
cbbe02096f ssdpd: 1.0.3 2022-12-21 22:22:11 +05:30
vdutta
fae6a213ac ssdpd: 1.0.2 2022-12-21 22:10:49 +05:30
vdutta
5e57b31c45 uspd: 2.2.23 2022-12-21 22:00:55 +05:30
vdutta
eb5437892d bbf: 6.8.16 2022-12-21 21:57:58 +05:30
vdutta
12e2a84ad1 ssdpd: 1.0.1 2022-12-21 21:46:20 +05:30
vdutta
0b11d79816 bbf: host access_control dm support 2022-12-21 19:09:40 +05:30
subramanian c
56fffd6b9c Firewall: Handle access control through /etc/config/hosts 2022-12-21 13:13:37 +00:00
sverma
0c28e45434 add psk mode on i1905, agent and controller 2022-12-21 13:06:06 +01:00
Jakob Olsson
72f48f9230 map-agent: 2.10.4.17 2022-12-21 13:04:29 +01:00
Jakob Olsson
787810e8ab ieee1905: 6.0.21 2022-12-21 12:57:30 +01:00
Jakob Olsson
15f2cd62e6 map-agent: 2.10.4.16 2022-12-21 12:49:16 +01:00
Jakob Olsson
6153f47f95 map-controller: 2.11.0.24 2022-12-21 12:19:42 +01:00
Jakob Olsson
1ec4f0f0da map-controller: 2.11.0.23 2022-12-21 11:43:43 +01:00
Jakob Olsson
c0e5dfae7f map-agent: 2.10.4.15 2022-12-21 11:42:10 +01:00
Jakob Olsson
d3766ede6c ieee1905: uci-defaults: convert old 'option ifname' to 'list ifname' entries 2022-12-21 11:35:02 +01:00
Sukru Senli
f03743634f iop: config: select ip6tables-zz-legacy 2022-12-21 11:30:41 +01:00
vdutta
5419eb07d2 sulu: use mosquitto uci for services 2022-12-21 14:27:38 +05:30
vdutta
34c0b3bb9e obuspa: 6.0.0.14 2022-12-21 14:23:49 +05:30
vdutta
d664b70bf6 bbf: 6.8.14 2022-12-21 14:22:36 +05:30
Jakob Olsson
dd674c2d93 map-controller: 2.11.0.22 2022-12-20 16:41:41 +01:00
Jakob Olsson
19ff43afe2 map-agent: 2.10.4.14 2022-12-20 16:41:34 +01:00
Saurabh Verma
2f80620644 map-controller: init.d: add support for other enc methods 2022-12-20 16:14:44 +01:00
vdutta
67555eed9f obuspa: 6.0.0.13 2022-12-20 18:32:41 +05:30
vdutta
8e7738a153 bbf: 6.8.13 2022-12-20 18:27:10 +05:30
suvendhu
5ca4dabf49 bbf: added uci-default script mqtt dm 2022-12-20 12:54:29 +00:00
vdutta
e6042743cb icwmp: 9.1.4 2022-12-20 18:23:47 +05:30
suvendhu
7353a6bfe7 Fix GW info overwrite on boot 2022-12-20 10:55:38 +00:00
Padmalochan Mohapatra
deef704d42 Revert "Revert "qosmngr : standard Linux support via tc+iptables"" 2022-12-20 09:30:24 +00:00
80 changed files with 2443 additions and 435 deletions

View File

@@ -5,11 +5,11 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=libbbfdm
PKG_VERSION:=6.8.12
PKG_VERSION:=6.8.16
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/bbf.git
PKG_SOURCE_VERSION:=78157b22411816642f2bab81119c6d997c180c37
PKG_SOURCE_VERSION:=0ef6169d86333b8727ed34c63f379b08254340e3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
@@ -158,6 +158,10 @@ define Package/libbbfdm/default/install
$(CP) $(PKG_BUILD_DIR)/libbbfdm.so $(1)/lib/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/* $(1)/usr/share/bbfdm
$(LN) /usr/share/bbfdm/bbf.diag $(1)/usr/libexec/rpcd/bbf.diag
ifeq ($(CONFIG_PACKAGE_mosquitto-ssl),y)
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) ./files/etc/uci-defaults/01-mosquitto-config $(1)/etc/uci-defaults/
endif
endef
define Package/libbbfdm/default/prerm

View File

@@ -0,0 +1,46 @@
#!/bin/sh
config_mosquitto_owrt() {
sec=$(uci -q get mosquitto.owrt)
if [ -z "${sec}" ]; then
sec=$(uci -q add mosquitto owrt)
uci -q rename mosquitto."${sec}"="owrt"
fi
uci -q set mosquitto.owrt.use_uci="1"
uci -q set mosquitto.owrt.write_pid="1"
uci -q commit mosquitto
}
config_mosquitto_general() {
sec=$(uci -q get mosquitto.mosquitto)
if [ -z "${sec}" ]; then
sec=$(uci -q add mosquitto mosquitto)
uci -q rename mosquitto."${sec}"="mosquitto"
fi
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 warning notice"
uci -q set mosquitto.mosquitto.per_listener_settings="1"
uci -q commit mosquitto
}
config_mosquitto_persistence() {
sec=$(uci -q get mosquitto.persistence)
if [ -z "${sec}" ]; then
sec=$(uci -q add mosquitto persistence)
uci -q rename mosquitto."${sec}"="persistence"
fi
uci -q set mosquitto.persistence.persistence="0"
uci -q set mosquitto.persistence.location="/var/run"
uci -q commit mosquitto
}
if [ -f "/etc/config/mosquitto" ]; then
config_mosquitto_owrt
config_mosquitto_general
config_mosquitto_persistence
fi

View File

@@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=dectmngr
PKG_RELEASE:=3
PKG_VERSION:=3.5.5
PKG_VERSION:=3.5.6
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/dectmngr.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=cf4e91ffe0a1d83140fef5b41d16e581e5341cec
PKG_SOURCE_VERSION:=81450033d98fcdb68911e2148f48d190492090a6
PKG_MIRROR_HASH:=skip
endif

View File

@@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=dslmngr
PKG_VERSION:=1.1.2
PKG_VERSION:=1.2.0
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
@@ -68,6 +68,10 @@ define Build/Compile
endef
define Package/dslmngr/install
$(CP) ./files/common/* $(1)/
ifeq ($(CONFIG_TARGET_brcmbca),y)
$(CP) ./files/broadcom/* $(1)/
endif
$(INSTALL_DIR) $(1)/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/dslmngr $(1)/sbin/
endef

View File

@@ -0,0 +1,311 @@
#!/bin/sh
. /lib/functions.sh
# ATM #
check_pvc() {
local vpi=$1
local vci=$2
local ret
ret=$(xtmctl operate conn --show | awk -v test="$vpi/$vci" '{if ($3==test ) print $5 }')
case $ret in
''|*[!0-9]*) return 0 ;;
*) return $ret ;;
esac
}
check_xtm_list() {
local qclass=$1
local pcr scr mbs
local ret
case $# in
1)
pcr=0
scr=0
mbs=0
;;
2)
pcr=$2
scr=0
mbs=0
;;
4)
pcr=$2
scr=$3
mbs=$4
;;
esac
ret=$(xtmctl operate tdte --show | awk -v test="$qclass" -v pcr="$pcr" -v scr="$scr" -v mbs="$mbs" '{if ($2==test && $3==pcr && $4==scr && $5==mbs ) print $1 }')
case $ret in
''|*[!0-9]*) return 0 ;;
*) return $ret ;;
esac
}
configure_atm_device() {
local name vpi vci device link_type encapsulation qos_class pcr mbs scr i
config_get name $1 name "ATM"
config_get vpi $1 vpi "8"
config_get vci $1 vci "35"
config_get device $1 device "atm0"
config_get link_type $1 link_type "eoa"
config_get encapsulation $1 encapsulation "llc"
config_get qos_class $1 qos_class "ubr"
config_get pcr $1 pcr
config_get mbs $1 mbs
config_get scr $1 scr
check_pvc $vpi $vci
ret=$?
if [ "$ret" -eq 0 ]; then
check_xtm_list $qos_class $pcr $scr $mbs
ret=$?
if [ "$ret" -eq 0 ]; then
case $qos_class in # ubr, cbr, gfr, vbr-nrt, vbr-rt, ubr+, abr
ubr)
xtmctl operate tdte --add "$qos_class"
;;
ubr_pcr|ubr+)
xtmctl operate tdte --add "$qos_class" $pcr
;;
cbr)
xtmctl operate tdte --add "$qos_class" $pcr
;;
nrtvbr|vbr-nrt)
xtmctl operate tdte --add "$qos_class" $pcr $scr $mbs
;;
rtvbr|vbr-rt)
xtmctl operate tdte --add "$qos_class" $pcr $scr $mbs
;;
gfr)
;;
abr)
;;
esac
fi
case $link_type in # EoA, IPoA, PPPoA, CIP
EoA|eoa)
[ $encapsulation == "vcmux" ] && encapsulation="vcmux_eth" || encapsulation="llcsnap_eth"
;;
PPPoA|pppoa)
[ $encapsulation == "vcmux" ] && encapsulation="vcmux_pppoa" || encapsulation="llcencaps_ppp"
;;
IPoA|ipoa)
[ $encapsulation == "vcmux" ] && encapsulation="vcmux_ipoa" || encapsulation="llcsnap_rtip"
;;
CIP|cip)
;;
esac
check_xtm_list $qos_class $pcr $scr $mbs
ret="$?"
xtmctl operate conn --add 1.$vpi.$vci aal5 $encapsulation 0 1 $ret
for i in `seq 0 7`; do
xtmctl operate conn --addq 1.$vpi.$vci $i wrr 1 dt # queue priority 0-7
done
xtmctl operate conn --createnetdev 1.$vpi.$vci $device
xtmctl operate intf --state 1 enable
fi
}
remove_atm_devices() {
local vpi vci rest
local vpivci=`xtmctl operate conn --show | grep "ATM\|mode" | awk '{if (NR!=1 && $1!="PTM") {print $3}}'`
for i in $vpivci
do
rest=${i#\/}
vpi=${rest%%\/*}
vci=${rest#*\/}
echo "xtmctl operate conn --delete 1.$vpi.$vci"
xtmctl operate conn --delete 1.$vpi.$vci
echo "xtmctl operate conn --deletenetdev 1.$vpi.$vci"
xtmctl operate conn --deletenetdev 1.$vpi.$vci
done
}
create_atm_devices() {
echo "Creating ATM Device(s)"
config_load dsl
config_foreach configure_atm_device atm-device
}
# ATM END #
# PTM #
check_ptm() {
local ret
local ptmprio=$1
local dslat=$2
if [ "$ptmprio" -eq 2 ]; then
ptmprio="high"
else
ptmprio="low"
fi
ret=$(xtmctl operate conn --show | awk -v dslat="$dslat" -v ptmprio="$ptmprio" '{if ($2 == dslat && $3 == ptmprio ) print $2 }')
case $ret in
''|*[!0-9]*) return 0 ;;
*) return $ret ;;
esac
}
configure_ptm_device() {
local name device priority portid i
config_get name $1 name "PTM"
config_get device $1 device "ptm0"
config_get priority $1 priority 1
config_get portid $1 portid 1
check_ptm $priority $portid
ret=$?
if [ "$ret" -eq 0 ]; then
xtmctl operate conn --add $portid.$priority
for i in `seq 0 7`; do
xtmctl operate conn --addq $portid.$priority $i wrr 1 dt -1 -1 3000 # queue priority 0-7
done
echo "xtmctl operate conn --createnetdev $portid.$priority $device"
xtmctl operate conn --createnetdev $portid.$priority $device
xtmctl operate intf --state 1 enable
fi
}
remove_ptm_devices() {
local delptm
local x=0
IFS=$'\n'
for i in `xtmctl operate conn --show | grep "PTM\|mode"`
do
if [ $x -eq 1 ]; then
delptm=$(echo $i | awk '{if ($1!="ATM") print $2"."$11}')
echo "xtmctl operate conn --delete $delptm"
xtmctl operate conn --delete $delptm
xtmctl operate conn --deletenetdev $delptm
fi
x=1
done
unset IFS
}
create_ptm_devices() {
echo "Creating PTM Device(s)"
config_load dsl
config_foreach configure_ptm_device ptm-device
}
# PTM END #
prioritize_arp()
{
ebtables -t nat -D POSTROUTING -j mark --mark-or 0x7 -p ARP >/dev/null
ebtables -t nat -A POSTROUTING -j mark --mark-or 0x7 -p ARP >/dev/null
}
xtm_remove_devices() {
remove_atm_devices
remove_ptm_devices
}
xtm_create_devices() {
local tpstc="$(xdslctl info --show | grep TPS-TC)"
if echo "$tpstc" | grep -q "ATM Mode"; then
create_atm_devices
elif echo "$tpstc" | grep -q "PTM Mode"; then
create_ptm_devices
fi
}
xdsl_configure() {
local VDSL=0
local GFAST=0
local mod=""
local modes=""
local profile=""
config_load dsl
# Modes
config_get mode line mode
for mod in $mode; do
[ $mod == "gdmt" ] && modes="${modes}d"
[ $mod == "glite" ] && modes="${modes}l"
[ $mod == "t1413" ] && modes="${modes}t"
[ $mod == "adsl2" ] && modes="${modes}2"
[ $mod == "adsl2p" ] && modes="${modes}p"
[ $mod == "annexl" ] && modes="${modes}e"
[ $mod == "annexm" ] && modes="${modes}m"
[ $mod == "vdsl2" ] && modes="${modes}v" && VDSL=1
[ $mod == "gfast" ] && modes="${modes}f" && GFAST=1
done
# VDSL Profiles
config_get profile line profile
# Capabilities
config_get_bool bitswap line bitswap 1
[ $bitswap -eq 1 ] && bitswap="on" || bitswap="off"
config_get_bool sra line sra 1
[ $sra -eq 1 ] && sra="on" || sra="off"
# config_get_bool trellis line trellis 1
config_get_bool sesdrop line sesdrop 0
[ $sesdrop -eq 1 ] && sesdrop="on" || sesdrop="off"
# VDSL2 only
config_get_bool us0 line us0 1
[ $us0 -eq 1 ] && us0="on" || us0="off"
# config_get_bool dynamicd line dynamicd 1
# config_get_bool dynamicf line dynamicf 1
config_get_bool sos line sos 0
[ $sos -eq 1 ] && sos="on" || sos="off"
config_get_bool phyReXmtUs line phyReXmtUs 0
config_get_bool phyReXmtDs line phyReXmtDs 1
phyReXmt=$(( $((phyReXmtUs<<1)) + phyReXmtDs))
if [ $VDSL -eq 1 -o $GFAST -eq 1 ]; then
echo "xdslctl start --up --mod $modes --profile "$profile" --sra $sra --bitswap $bitswap --us0 $us0 --sesdrop $sesdrop --SOS $sos --phyReXmt $phyReXmt"
xdslctl start --up --mod $modes --profile "$profile" --sra $sra --bitswap $bitswap --us0 $us0 --sesdrop $sesdrop --SOS $sos --phyReXmt $phyReXmt
# G.Fast hardware to VDSL hardware, to set the driver bit kPhyCfg2EnableGfastVdslMMTimeOut0.
# Enable V43 tone for GFAST.
echo "xdslctl configure1 --phycfg 0 0 0 0 0 0 0 0 0 0 0 0x1400400 0x1400400"
xdslctl configure1 --phycfg 0 0 0 0 0 0 0 0 0 0 0 0x1400400 0x1400400
else
echo "xdslctl start --up --mod $modes --sra $sra --bitswap $bitswap --sesdrop $sesdrop --SOS $sos --phyReXmt $phyReXmt"
xdslctl start --up --mod $modes --sra $sra --bitswap $bitswap --sesdrop $sesdrop --SOS $sos --phyReXmt $phyReXmt
fi
if [ $GFAST -eq 1 ]; then
# G.Fast hardware to VDSL hardware, to set the driver bit kPhyCfg2EnableGfastVdslMMTimeOut0.
# Enable V43 tone for GFAST.
echo "xdslctl configure1 --phycfg 0 0 0 0 0 0 0 0 0 0 0 0x1400400 0x1400400"
xdslctl configure1 --phycfg 0 0 0 0 0 0 0 0 0 0 0 0x1400400 0x1400400
fi
}
xdsl_stop() {
# echo "Stopping DSL"
# stop causes IRQ issues
# xdslctl stop
return 0
}
xdsl_init() {
prioritize_arp
echo "Starting DSL"
xtmctl start
xtmctl operate intf --state 1 enable
}

View File

@@ -0,0 +1,53 @@
# OEM specific parameters
config oem-parameters 'oem'
# option country_code "0000" # 2 bytes hex
# option vendor_id "IO" # 4 bytes string
# option vendor_suffix "0000" # 2 bytes hex
# option sw_version "iopsys" # 16 bytes string
# option serial_nr "00000000" # 32 bytes string
# DSL Modes
config dsl-line line
list mode gdmt
list mode glite
list mode t1413
list mode adsl2
list mode adsl2p
list mode annexl
list mode annexm
list mode vdsl2
# VDSL2 profiles
list profile 8a
list profile 8b
list profile 8c
list profile 8d
list profile 12a
list profile 12b
list profile 17a
list profile 30a
option bitswap 1
option sra 1
option us0 1 # VDSL2 only
option sesdrop 0
option sos 0
option phyReXmtUs 0
option phyReXmtDs 1
config atm-device atm0
option name 'ATM'
option vpi '8'
option vci '35'
option device atm0
option link_type 'eoa' # EoA, IPoA, PPPoA, CIP
option encapsulation 'llc' # llc, vcmux
option qos_class 'ubr' # ubr, cbr, gfr, vbr-nrt, vbr-rt, ubr+, abr
# option pcr '512'
# option scr '256'
# option mbs '1024'
config ptm-device ptm0
option name 'PTM'
option device 'ptm0'
option priority '1'
option portid '1'

View File

@@ -0,0 +1,7 @@
[ "$STATUS" == "up" -o "$STATUS" == "down" ] || exit 0
. /lib/functions.sh
include /lib/dsl
xtm_remove_devices
xtm_create_devices

View File

@@ -0,0 +1,7 @@
if [ "$STATUS" == "up" ]; then
ubus call led.dsl set '{"state":"ok"}'
elif [ "$STATUS" == "down" ]; then
ubus call led.dsl set '{"state":"off"}'
elif [ "$STATUS" == "training" ]; then
ubus call led.dsl set '{"state":"alert"}'
fi

View File

@@ -0,0 +1,48 @@
#!/bin/sh /etc/rc.common
. /lib/functions.sh
include /lib/dsl
START=20
USE_PROCD=1
DSLMNGR=$(which dslmngr)
start_service() {
[ -n "$DSLMNGR" ] && {
procd_open_instance
procd_set_param command "$DSLMNGR"
procd_set_param respawn
procd_close_instance
}
xdsl_configure
xtm_create_devices
}
stop_service() {
[ -n "$DSLMNGR" ] && service_stop $DSLMNGR
xtm_remove_devices
xdsl_stop
}
boot() {
local HASADSL="$(db -q get hw.board.hasAdsl)"
local HASVDSL="$(db -q get hw.board.hasVdsl)"
[ "$HASADSL" == "1" -o "$HASVDSL" == "1" ] || return
xdsl_init
start
}
reload_service() {
stop
start
}
service_triggers() {
procd_add_reload_trigger dsl
}

View File

@@ -7,13 +7,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=easy-soc-libs
PKG_VERSION:=6.8.0
PKG_VERSION:=7.2.3
PKG_RELEASE:=1
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=ddc7b272bec5e3b5c2a216a1f86cd5589a1a4a19
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
@@ -59,6 +59,10 @@ else ifeq ($(CONFIG_TARGET_airoha),y)
TARGET_PLATFORM=ECONET
TARGET_WIFI_TYPE=MAC80211
TARGET_CFLAGS +=-DIOPSYS_ECONET
else ifeq ($(CONFIG_TARGET_ipq95xx),y)
TARGET_PLATFORM=IPQ95XX
TARGET_WIFI_TYPE=MAC80211
TARGET_CFLAGS +=-DIPQ95XX
else
$(info Unexpected CONFIG_TARGET, use default MAC80211)
TARGET_PLATFORM=MAC80211

View File

@@ -18,6 +18,9 @@ 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*.so* $(1)/usr/lib/
endef

View File

@@ -13,7 +13,7 @@ LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/endptmngr.git
PKG_SOURCE_VERSION:=dc12712af8c4088f7873502ca845e51c68a1ada9
PKG_SOURCE_VERSION:=fb85081443c19b5062bede49c80b1802c0f05d34
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ethmngr
PKG_VERSION:=2.0.1
PKG_VERSION:=2.1.0
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=5a0ff3bc7c49dcb05129f423ef8e0c4929f6aa03
@@ -23,7 +23,7 @@ define Package/ethmngr
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Ethernet status and configration utility
DEPENDS:=+libethernet +libuci +libubox +ubus +libpthread +libnl-genl
DEPENDS:=+(TARGET_brcmbca||TARGET_airoha||TARGET_ipq95xx):libethernet +libuci +libubox +ubus +libpthread +libnl-genl
endef
define Package/ethmngr/description
@@ -37,10 +37,24 @@ TARGET_CFLAGS += \
-I$(STAGING_DIR)/usr/include/libnl3 \
-D_GNU_SOURCE
ifeq ($(CONFIG_TARGET_brcmbca)$(CONFIG_TARGET_airoha)$(CONFIG_TARGET_ipq95xx),)
define Build/Compile
endef
endif
define Package/ethmngr/install
$(INSTALL_DIR) $(1)/etc/init.d $(1)/usr/sbin
$(INSTALL_BIN) ./files/ethmngr.init $(1)/etc/init.d/ethmngr
$(CP) ./files/common/* $(1)/
ifneq ($(CONFIG_TARGET_brcmbca),)
$(CP) ./files/broadcom/* $(1)/
else ifneq ($(CONFIG_TARGET_airoha),)
$(CP) ./files/airoha/* $(1)/
else
$(CP) ./files/linux/* $(1)/
endif
ifneq ($(CONFIG_TARGET_brcmbca)$(CONFIG_TARGET_airoha)$(CONFIG_TARGET_ipq95xx),)
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ethmngr $(1)/usr/sbin/
endif
endef
$(eval $(call BuildPackage,ethmngr))

View File

@@ -0,0 +1,208 @@
#!/bin/sh
. /lib/functions.sh
unset -f switchmgr
# alias for switchmgr
switchmgr() {
"/userfs/bin/switchmgr" "$@"
}
unset -f tc3162_get_lan_port
# get lan port port by ifname
# arg1: port ifname, ex: eth0.1
tc3162_get_lan_port() {
[[ -z "$1" ]] && return 255
local ifname="$1"
local if_idx=255
# only for tc3162 eth switch ports (eth0.x, 0 < x < 7)
case "${ifname}" in
eth0.*)
;;
*)
logger -t "port-management" \
"unsupported - ${ifname} is not tc3162 switch port"
return 255
;;
esac
let "if_idx=$(echo "${ifname}" | cut -f2 -d'.')"
[[ -z "${if_idx}" ]] && return 255
[[ ${if_idx} -lt 1 || ${if_idx} -gt 6 ]] && {
logger -t "port-management" \
"incorrect tc3162 lan port index ${if_idx} picked from ifname ${ifname}"
return 255
}
let "if_idx=${if_idx}-1"
return ${if_idx}
}
unset -f tc3162_get_mapped_port
# get mapped switch port by ifname
# arg1: port ifname, ex: eth0.1
tc3162_get_mapped_port() {
[[ -z "$1" ]] && return 255
local ifname="$1"
local if_idx=255
local prtmap_procfile="/proc/tc3162/eth_portmap"
local lan_prt=255
local port=255
local prtmap_out_line_num=4
local prtmap_out_line=""
# check "lan port map" marker in portmap output string
prtmap_out_line="$(sed -n "${prtmap_out_line_num}p" ${prtmap_procfile})"
[[ ${prtmap_out_line} != "lan_port_map" ]] && return 255
tc3162_get_lan_port "${ifname}"
let "if_idx=$?"
[[ -z "${if_idx}" || ${if_idx} -eq 255 ]] && return
# get lan portmapping string "lan_port mapped_port" for ifname by it's index
let "prtmap_out_line_num=${prtmap_out_line_num}+1+${if_idx}"
prtmap_out_line="$(sed -n "${prtmap_out_line_num}p" ${prtmap_procfile})"
# get and check lan port index from lan portmapping string
lan_prt=$(echo "${prtmap_out_line}" | cut -f 1 -d' ')
[[ -z "${lan_prt}" || "${if_idx}" != "${lan_prt}" ]] && return 255
# get and check mapped port from lan portmapping string
let "port=$(echo "${prtmap_out_line}" | cut -f 2 -d' ')"
[[ ${port} -lt 0 || ${port} -gt 255 ]] && return 255
return ${port}
}
unset -f get_max_port_speed
# arg1: port ifname, ex: eth0.1
get_max_port_speed() {
[[ -z "$1" ]] && { echo 0; return; }
local ifname="$1"
local port=255
local speed=0
[[ -d "/sys/class/net/${ifname}" ]] || {
logger -t "port-management" "interface ${ifname} is not found"
return
}
tc3162_get_lan_port "${ifname}"
let "port=$?"
[[ -z "${port}" || ${port} -eq 255 ]] && return
# tc3162 capability for all ports is 1Gbps
speed=1000
echo $speed
}
unset -f power_updown
# arg1: port ifname, ex: eth0.1
# arg2: port enabled, ex: 0/1/off/on/..
power_updown() {
[[ -z "$1" ]] && return
[[ -z "$2" ]] && return
local ifname="$1"
local enabled="$2"
local port=255
[[ -d "/sys/class/net/${ifname}" ]] || {
logger -t "port-management" "interface ${ifname} is not found"
return
}
let "enabled=$(get_bool "${enabled}" "-1")"
[[ ${enabled} -eq -1 ]] && return
tc3162_get_lan_port "${ifname}"
let "port=$?"
[[ -z "${port}" || ${port} -eq 255 ]] && return
switchmgr phy admin "${port}" "${enabled}"
}
unset -f set_port_settings
# arg1: port ifname, ex: eth0.1
# arg2: port enabled, ex: 0/1/off/on/..
# arg3: port speed, ex: 1000
# arg4: port duplex, ex: full
# arg5: port autoneg, ex: 0/1/off/on/..
# arg6: port eee, ex: 0/1/off/on/..
# arg7: port pause, ex: 0/1/off/on/..
set_port_settings() {
[[ -z "$1" ]] && return
[[ -z "$2" ]] && return
[[ -z "$3" ]] && return
[[ -z "$4" ]] && return
[[ -z "$5" ]] && return
[[ -z "$6" ]] && return
[[ -z "$7" ]] && return
local ifname="$1"
local enabled="$2"
local speed="$3"
local duplex="$4"
local autoneg=$5
local eee="$6"
local pause="$7"
local port=255
local speedmode=1
local last_speed=0
[[ -d "/sys/class/net/${ifname}" ]] || {
logger -t "port-management" "interface ${ifname} is not found"
return
}
let "enabled=$(get_bool "${enabled}" "-1")"
[[ ${enabled} -eq -1 ]] && return
let "autoneg=$(get_bool "${autoneg}" "-1")"
[[ ${autoneg} -eq -1 ]] && return
let "eee=$(get_bool "${eee}" "-1")"
[[ ${eee} -eq -1 ]] && return
let "pause=$(get_bool "${pause}" "-1")"
[[ ${pause} -eq -1 ]] && return
duplex="$(echo "${duplex}" | awk '{print tolower($0)}')"
[[ "${duplex}" != "half" && "${duplex}" != "full" ]] && return
tc3162_get_lan_port "${ifname}"
let "port=$?"
[[ -z "${port}" || ${port} -eq 255 ]] && return
last_speed="$(switchmgr phy maxspeed "${port}" | cut -f2 -d':')"
[[ -z "${last_speed}" || "${last_speed}" == "*Down*" ]] \
&& last_speed=${speed}
switchmgr phy pause "${port}" "${pause}"
# set speedmode: speed+duplex+autoneg
# FIXME: switchmgr has no separate setting for 1Gbps speed - use autoneg instead
if [[ ${autoneg} -eq 1 || ${speed} -gt 100 ]]; then
switchmgr phy speedmode ${port} "1"
else
[[ ${speed} -gt 10 ]] && let "speedmode=2" || let "speedmode=4"
[[ "${duplex}" == "half" ]] && let "speedmode=${speedmode}+1"
switchmgr phy speedmode "${port}" "${speedmode}"
fi
# TODO: implement MAC control register manipulations (mapped ports used) for
# eee settings change
# separate (tx/rx) pause (flow control) settings change
# set speed to 1Gbps separately from autoneg mode
# FIXME: workaround for duplex/pause settings being not applied if speed is unchanged
[[ ${last_speed} -eq ${speed} ]] && power_updown "${ifname}" 0
power_updown "${ifname}" ${enabled}
}

View File

@@ -0,0 +1,140 @@
# arg1: port ifname, ex: eth0
get_max_port_speed() {
if [ -z "$1" ]; then
echo 0
return
fi
local ifname="$1"
local phycap="$(ethctl $ifname media-type 2>/dev/null | grep 'PHY Capabilities' | awk '{print$NF}' | cut -d'|' -f1)"
local speed=1000
case "$phycap" in
10GFD) speed=10000 ;;
5GFD) speed=5000 ;;
2.5GFD) speed=2500 ;;
1GFD|1GHD) speed=1000 ;;
100MFD|100MHD) speed=100 ;;
10MFD|10MHD) speed=10 ;;
esac
echo $speed
}
# arg1: port name, ex: eth0
get_port_number() {
[ -z "$1" ] && return
local ports="0 1 2 3 4 5 6 7"
local units="0 1"
local port="$1"
local ifname
for unit in $units; do
for prt in $ports; do
ifname="$(ethswctl getifname $unit $prt 2>/dev/null | awk '{print$NF}')"
if [ "$ifname" == "$port" ]; then
echo "$unit $prt"
return
fi
done
done
}
# arg1: port ifname, ex: eth0
# arg2: port enabled, ex: 1
power_updown() {
local ifname="$1"
local enabled=$2
local updown="up"
[ $enabled -eq 0 ] && updown="down"
ethctl $ifname phy-power $updown >/dev/null
}
# arg1: port ifname, ex: eth0
# arg2: port enabled, ex: 1
# arg3: port speed, ex: 1000
# arg4: port duplex, ex: full
# arg5: port autoneg, ex: on
# arg6: port eee, ex: 0
# arg7: port pause, ex: 0
set_port_settings() {
local ifname="$1"
local enabled=$2
local speed="$3"
local duplex=$4
local autoneg=$5
local eee=$6
local pause=$7
[ -d /sys/class/net/$ifname ] || return
local unitport="$(get_port_number $ifname)"
local unit=$(echo $unitport | cut -d ' ' -f 1)
local port=$(echo $unitport | cut -d ' ' -f 2)
[ $autoneg -eq 1 ] && autoneg="on" || autoneg="off"
[ "$duplex" == "half" ] && duplex=0 || duplex=1
[ "$duplex" == 0 ] && dplx="HD" || dplx="FD"
[ "$autoneg" == "on" ] && media_type="auto" || media_type="$speed$dplx"
phycrossbar="$(ethctl $ifname phy-crossbar | head -1)"
crossbartype="$(echo $phycrossbar | awk '{print$2$3}')"
# Take only the last PHY Endpoint (non-Serdes) into account as Serdes port number precedes
[ "$crossbartype" == "oncrossbar" ] && pyhendpoint="$(echo $phycrossbar | awk '{print$NF}')"
phycaps="$(ethctl $ifname media-type ${pyhendpoint:+ port $pyhendpoint} | awk -F'PHY Capabilities: ' '{print$2}')"
numofcaps="$(echo $phycaps | tr '|' ' ' | wc -w)"
if [ "$numofcaps" == "1" ]; then
logger -t "port-management" "$ifname is capable of $phycaps only; not setting speed/duplex"
else
logger -t "port-management" "$ifname is capable of $phycaps; setting speed/duplex to $media_type"
ethctl $ifname media-type $media_type ${pyhendpoint:+ port $pyhendpoint} &>/dev/null
fi
[ $eee -eq 1 ] && eee="on" || eee="off"
ethtool --set-eee $ifname eee $eee 2>/dev/null
case $pause in
off|0)
pause=0x0
auto=off
rx=off
tx=off
;;
on|1)
pause=0x2
auto=off
rx=on
tx=on
;;
auto)
pause=0x1
auto=on
rx=on
tx=on
;;
tx)
pause=0x3
auto=off
rx=off
tx=on
;;
rx)
pause=0x4
auto=off
rx=on
tx=off
;;
esac
if [ "$auto" == "on" ]; then
# Use ethswctl utility to set pause autoneg
# as ethtool is not setting it properly
ethswctl -c pause -n $unit -p $port -v $pause 2>&1 >/dev/null
else
ethtool --pause $ifname autoneg $auto rx $rx tx $tx 2>/dev/null
fi
power_updown $ifname $enabled
}

View File

@@ -1,12 +1,15 @@
#!/bin/sh /etc/rc.common
START=15
STOP=90
USE_PROCD=1
PROG=/usr/sbin/ethmngr
. /lib/functions.sh
include /lib/network
include /lib/ethernet
configure_ports(){
configure_ethernet_port(){
local cfg=$1
local ifname enabled speed duplex autoneg eee pause
@@ -24,11 +27,22 @@ configure_ports(){
}
start_service() {
[ -f /lib/network/port.sh ] || return
if [ -s /etc/config/ports ]; then
config_load ports
config_foreach configure_ethernet_port ethport
fi
config_load ports
config_foreach configure_ports ethport
config_foreach configure_ports sfpport
if [ -f $PROG ]; then
procd_open_instance
procd_set_param command ${PROG}
procd_set_param respawn
procd_close_instance
fi
}
reload_service() {
stop
start
}
service_triggers() {

View File

@@ -2,7 +2,8 @@
populate_config_from_db() {
. /lib/functions.sh
include /lib/network
. /lib/network/utils.sh
include /lib/ethernet
portorder="$(db -q get hw.board.ethernetPortOrder)"
for port in $portorder; do

View File

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

View File

@@ -0,0 +1,95 @@
# arg1: port ifname, ex: eth0
get_max_port_speed() {
if [ -z "$1" ]; then
echo 0
return
fi
local ifname="$1"
local phycap="$(ethtool $ifname | grep -A 10 "Supported link modes" | grep 000 | tail -n 1 | awk '{print$NF}')"
local speed=1000
case "$phycap" in
10000*) speed=10000 ;;
5000*) speed=5000 ;;
2500*) speed=2500 ;;
1000*) speed=1000 ;;
100*) speed=100 ;;
10*) speed=10 ;;
esac
echo $speed
}
# arg1: port ifname, ex: eth0
# arg2: port enabled, ex: 1
power_updown() {
local ifname="$1"
local enabled=$2
local updown="up"
[ $enabled -eq 0 ] && updown="down"
ip link set dev $ifname $updown
}
# arg1: port ifname, ex: eth0
# arg2: port enabled, ex: 1
# arg3: port speed, ex: 1000
# arg4: port duplex, ex: full
# arg5: port autoneg, ex: on
# arg6: port eee, ex: 0
# arg7: port pause, ex: 0
set_port_settings() {
local ifname="$1"
local enabled=$2
local speed="$3"
local duplex=$4
local autoneg=$5
local eee=$6
local pause=$7
[ -d /sys/class/net/$ifname ] || return
[ $autoneg -eq 1 ] && autoneg="on" || autoneg="off"
ethtool --change $ifname speed $speed duplex $duplex autoneg $autoneg
[ $eee -eq 1 ] && eee="on" || eee="off"
ethtool --set-eee $ifname eee $eee 2>/dev/null
case $pause in
off|0)
pause=0x0
auto=off
rx=off
tx=off
;;
on|1)
pause=0x2
auto=off
rx=on
tx=on
;;
auto)
pause=0x1
auto=on
rx=on
tx=on
;;
tx)
pause=0x3
auto=off
rx=off
tx=on
;;
rx)
pause=0x4
auto=off
rx=on
tx=off
;;
esac
ethtool --pause $ifname autoneg $auto rx $rx tx $tx 2>/dev/null
power_updown $ifname $enabled
}

View File

@@ -8,11 +8,11 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=icwmp
PKG_VERSION:=9.1.3
PKG_VERSION:=9.1.5
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/icwmp.git
PKG_SOURCE_VERSION:=71488fdc4e1a97416fa7f8ad356314c80e4c0b87
PKG_SOURCE_VERSION:=79284d1f4e16cf6077a7394f0c04a894b83a8a41
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
@@ -93,7 +93,8 @@ define Package/icwmp/default/install
$(INSTALL_DATA) ./files/lib/upgrade/keep.d/icwmp $(1)/lib/upgrade/keep.d/icwmp
$(INSTALL_BIN) ./files/etc/icwmpd/update.sh $(1)/etc/icwmpd/update.sh
$(INSTALL_DATA) ./files/etc/bbfdm/json/CWMPManagementServer.json $(1)/etc/bbfdm/json/
$(INSTALL_BIN) ./files/etc/udhcpc.user.d/udhcpc_icwmp.user $(1)/etc/udhcpc.user.d/udhcpc_icwmp.user
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/etc/udhcpc.user.d/udhcpc_icwmp_opt125.user $(1)/etc/udhcpc.user.d/udhcpc_icwmp_opt125.user
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/etc/udhcpc.user.d/udhcpc_icwmp_opt43.user $(1)/etc/udhcpc.user.d/udhcpc_icwmp_opt43.user
endef
Package/icwmp-openssl/install = $(Package/icwmp/default/install)

View File

@@ -290,8 +290,9 @@ copy_cwmp_etc_files_to_varstate() {
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
cp -f /etc/icwmpd/cwmp /var/state/cwmp
cat /etc/icwmpd/cwmp >> /var/state/cwmp
fi
if [ -f /etc/icwmpd/icwmpd_backup_session.xml ]; then
@@ -421,6 +422,9 @@ boot() {
regenerate_ssl_link "${ssl_capath}"
fi
# Copy backup data so that if it restart latter on it gets the info
copy_cwmp_etc_files_to_varstate
start
}
@@ -443,9 +447,6 @@ start_service() {
return 1;
}
# Copy backup data so that if it restart latter on it gets the info
copy_cwmp_etc_files_to_varstate
procd_open_instance icwmp
procd_set_param command "$PROG"
procd_append_param command -b

View File

@@ -1,122 +0,0 @@
#!/bin/sh
CLASS=""
OUI=""
SERIAL=""
get_vivsoi() {
# opt125 environment variable has data in below format
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | enterprise-number1 |
# | |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | data-len1 | |
# +-+-+-+-+-+-+-+-+ option-data1 |
# / /
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -----
# | enterprise-number2 | ^
# | | |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
# | data-len2 | | optional
# +-+-+-+-+-+-+-+-+ option-data2 | |
# / / |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
# ~ ... ~ V
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -----
# Enterprise Id Len Sub Op SLen Data Sub Op SLen Data Sub Op SLen Data
# +-------------+-----+------+------+----+------+-----+----+-----+------+-----+----+
# | id | n | 1 | n1 | D1 | 2 | n2 | D2 | ... | 6 | n6 | D6 |
# +-------------+-----+------+------+----+------+-----+----+-----+------+-----+----+
local opt125="$1"
local len="$2"
local ent_id
#hex-string 2 character=1 Byte
# length in hex string will be twice of actual Byte length
[ "$len" -gt "8" ] || return
data="${opt125}"
rem_len="${len}"
while [ $rem_len -gt 0 ]; do
ent_id=${data:0:8}
ent_id=$(printf "%d\n" "0x$ent_id")
if [ $ent_id -ne 3561 ]; then
len_val=${data:8:2}
data_len=$(printf "%d\n" "0x$len_val")
# add 4 byte for ent_id and 1 byte for len
data_len=$(( data_len * 2 + 10 ))
# move ahead data to next enterprise id
data=${data:"${data_len}":"${rem_len}"}
rem_len=$(( rem_len - $data_len ))
continue
fi
# read the length of enterprise data
len_val=${data:8:2}
opt_len=$(printf "%d\n" "0x$len_val")
[ $opt_len -eq 0 ] && return
# populate the option data of enterprise id
sub_data_len=$(( opt_len * 2))
# starting 10 means ahead of length field
sub_data=${data:10:"${sub_data_len}"}
# parsing of suboption of option 125
while [ $sub_data_len -gt 0 ]; do
# get the suboption id
sub_opt_id=${sub_data:0:2}
sub_opt_id=$(printf "%d\n" "0x$sub_opt_id")
# get the length of suboption
sub_opt_len=${sub_data:2:2}
sub_opt_len=$(printf "%d\n" "0x$sub_opt_len")
sub_opt_len=$(( sub_opt_len * 2 ))
# get the value of sub option starting 4 means starting after length
sub_opt_val=${sub_data:4:${sub_opt_len}}
# assign the value found in sub option
case "${sub_opt_id}" in
"4") OUI=$(echo -n $sub_opt_val | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '')
;;
"5") SERIAL=$(echo -n $sub_opt_val | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '')
;;
"6") CLASS=$(echo -n $sub_opt_val | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '')
;;
esac
# add 2 bytes for sub_opt id and sub_opt len field
sub_opt_end=$(( sub_opt_len + 4 ))
# fetch next sub option hex string
sub_data=${sub_data:${sub_opt_end}:${sub_data_len}}
# update the remaining sub option hex string length
sub_data_len=$((sub_data_len - sub_opt_end))
done
break
done
}
wan_intf=$(uci -q get cwmp.cpe.default_wan_interface)
if [ -n "${wan_intf}" ] && [ "${wan_intf}" == "${INTERFACE}" ]; then
if [ -n "$opt125" ]; then
len=$(printf "$opt125"|wc -c)
get_vivsoi "$opt125" "$len"
fi
sec=$(uci -q -c /var/state get cwmp.gatewayinfo)
if [ -z "${sec}" ]; then
sec=$(uci -q -c /var/state add cwmp gatewayinfo)
uci -q -c /var/state rename cwmp."${sec}"="gatewayinfo"
fi
uci -q -c /var/state set cwmp.gatewayinfo.class="$CLASS"
uci -q -c /var/state set cwmp.gatewayinfo.oui="$OUI"
uci -q -c /var/state set cwmp.gatewayinfo.serial="$SERIAL"
uci -q -c /var/state commit cwmp
fi

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ieee1905
PKG_VERSION:=6.0.20
PKG_VERSION:=7.0.2
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=166fc0543f578336089f0940d9f5d2c27fac73a6
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

View File

@@ -44,7 +44,8 @@ validate_ap_section() {
uci_validate_section ieee1905 $section "${1}" \
'band:or("2", "5", "60", "6")' \
'ssid:string' \
'encryption:or("psk2", "sae-mixed", "sae", string)' \
'encryption:or("psk2", "sae-mixed", "sae",
"psk", "psk-mixed", "none", string)' \
'key:string' \
'uuid:string' \
'manufacturer:string' \

View File

@@ -0,0 +1,18 @@
#!/bin/sh
. /lib/functions.sh
config_load ieee1905
ifname_to_list() {
local section=$1
config_get ifname $section ifname # get list or option as space separated values
ifname=${ifname//,/\ } # convert csv with space separation
uci del ieee1905.${section}.ifname # delete entry
for i in ${ifname}; do
uci add_list ieee1905.${section}.ifname="$i" # writeback entry as list
done
}
config_foreach ifname_to_list al-iface

View File

@@ -56,8 +56,7 @@ CONFIG_LOCALMIRROR="https://download.iopsys.eu/iopsys/mirror/"
# EasySoC HAL #
CONFIG_PACKAGE_inbd=y
CONFIG_PACKAGE_libwifi=y
CONFIG_PACKAGE_port-management=y
CONFIG_PACKAGE_qosmngr=y
CONFIG_PACKAGE_wifimngr=y
# Multi-AP #
@@ -153,6 +152,7 @@ CONFIG_PACKAGE_ip-bridge=y
CONFIG_PACKAGE_ip-full=y
CONFIG_PACKAGE_iperf3=y
CONFIG_PACKAGE_ipset=y
CONFIG_PACKAGE_ip6tables-zz-legacy=y
CONFIG_PACKAGE_iptables-zz-legacy=y
CONFIG_PACKAGE_iptables-mod-conntrack-extra=y
CONFIG_PACKAGE_iptables-mod-filter=y

View File

@@ -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:=b53e93ca1a2fdda56ca9caffb6020e158e684f3d
PKG_SOURCE_VERSION:=d066c9d5c14757ab38e9ecb265ba24f5b33cdbce
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -5,9 +5,9 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=map-agent
PKG_VERSION:=2.10.4.13
PKG_VERSION:=4.1.0.0
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=fdce58318b082b8683f80688c5d284e21efa7908
PKG_SOURCE_VERSION:=035a398ae9e23612816cba8eeb8477997135a840
PKG_MAINTAINER:=Anjan Chanda <anjan.chanda@iopsys.eu>
PKG_LICENSE:=BSD-3-Clause

View File

@@ -104,7 +104,11 @@ validate_radio_section() {
'include_sta_metric:bool:false' \
'rcpi_hysteresis_margin:range(0,255)' \
'report_util_threshold:range(0,255)' \
'encryption:or("sae", "psk2", "sae-mixed")'
'encryption:or("sae", "sae+aes", "psk2",
"psk2+aes", "sae-mixed", "sae-mixed+aes",
"none", "psk-mixed", "psk-mixed+aes",
"wpa", "wpa+aes", "wpa2", "wpa2+aes",
"psk", "psk+aes")' \
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of radio section failed"

View File

@@ -5,9 +5,9 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=map-controller
PKG_VERSION:=2.11.0.21
PKG_VERSION:=4.1.0.0
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=24fb4d95c3a1d0b736239de28a8e14ab7a185630
PKG_SOURCE_VERSION:=473c4a547c34af0f3b09cb7a110e5cff90abc191
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)

View File

@@ -62,7 +62,10 @@ validate_ap_section() {
'band:or("2", "5", "6")' \
'ssid:string' \
'encryption:or("sae", "sae+aes", "psk2",
"psk2+aes", "sae-mixed", "sae-mixed+aes")' \
"psk2+aes", "sae-mixed", "sae-mixed+aes",
"none", "psk-mixed", "psk-mixed+aes",
"wpa", "wpa+aes", "wpa2", "wpa2+aes",
"psk", "psk+aes")' \
'key:string' \
'vid:range(1,65535):1' \
'type:or("backhaul", "fronthaul", "combined")' \

View File

@@ -6,11 +6,11 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=map-topology
PKG_VERSION:=2.5.1.13
PKG_VERSION:=2.5.1.14
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_VERSION:=aaa55a72e719184af32d57a9b40bec1c440774a9
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

View File

@@ -0,0 +1,126 @@
#!/bin/sh
. /lib/functions.sh
day=""
IP_RULE=""
process_ac_schedule() {
local acs_id="$1"
local is_enabled
local access_control
local start_time=""
local stop_time=""
local mac=""
handle_day_list() {
local value=$1
val=$(echo $value | cut -c 1-3)
if [ -z $day ]; then
day="$val"
else
day="$day,$val"
fi
}
config_list_foreach "$acs_id" "day" handle_day_list
config_get is_enabled "$acs_id" "enable" 1
config_get access_control "$acs_id" "dm_parent"
if [ "$is_enabled" == "0" ] || [ -z "$access_control" ]; then
return
fi
IP_RULE=""
mac=$(uci -q get hosts.$access_control.macaddr)
access_policy=$(uci -q get hosts.$access_control.access_policy)
config_get start_time "$acs_id" "start_time"
config_get duration "$acs_id" "duration"
if [ -z "$mac" ] && [ -z "$start_time" ] && [ -z "$duration" ] && [ -z "$day" ] && [ -z "$access_policy" ]; then
return
fi
if [ -n "$mac" ]; then
IP_RULE="$IP_RULE -m mac --mac-source $mac"
fi
# as per iptables manual default starttime is 00:00
# default stoptime is 23:59
if [ -z "$start_time" ]; then
start_time="0:0"
fi
if [ -n "$duration" ]; then
hh=$(echo $start_time | awk -F: '{ print $1 }')
mm=$(echo $start_time | awk -F: '{ print $2 }')
hh_s=`expr $hh \* 3600`
mm_s=`expr $mm \* 60`
ss=$(( hh_s + mm_s ))
stop_ss=$(( ss + duration ))
hh=$(( stop_ss / 3600 ))
if [ $hh -lt 24 ]; then
rem_ss=$(( stop_ss % 3600 ))
mm=$(( rem_ss / 60 ))
ss=$(( rem_ss % 60 ))
stop_time="$hh:$mm:$ss"
else
stop_time="23:59"
fi
else
stop_time="23:59"
fi
# conversion to utc
zone=$(date +%z | cut -c 1)
utc_h=$(date -u -d @$(date "+%s" -d "$start_time") +%H)
local_h=$(echo $start_time | awk -F: '{ print $1 }')
if [ "$zone" == "+" ] && [ $utc_h -gt $local_h ]; then
start_utc="0:0"
else
start_utc=$(date -u -d @$(date "+%s" -d "$start_time") +%H:%M)
fi
utc_h=$(date -u -d @$(date "+%s" -d "$stop_time") +%H)
local_h=$(echo $stop_time | awk -F: '{ print $1 }')
if [ "$zone" == "-" ] && [ $utc_h -lt $local_h ]; then
stop_utc="23:59"
else
stop_utc=$(date -u -d @$(date "+%s" -d "$stop_time") +%H:%M)
fi
IP_RULE="$IP_RULE -m time --timestart $start_utc --timestop $stop_utc"
if [ -n "$day" ]; then
IP_RULE="$IP_RULE --weekdays $day"
fi
if [ "$access_policy" == "Deny" ]; then
IP_RULE="$IP_RULE -j DROP"
else
IP_RULE="$IP_RULE -j ACCEPT"
fi
iptables -w -A hosts_forward ${IP_RULE}
ip6tables -w -A hosts_forward ${IP_RULE}
day=""
}
iptables -w -F hosts_forward
ip6tables -w -F hosts_forward
iptables -w -t filter -N hosts_forward
ret=$?
[ $ret -eq 0 ] && iptables -w -t filter -I FORWARD -j hosts_forward
ip6tables -w -t filter -N hosts_forward
ret=$?
[ $ret -eq 0 ] && ip6tables -w -t filter -I FORWARD -j hosts_forward
# Load /etc/config/hosts UCI file
config_load hosts
config_foreach process_ac_schedule ac_schedule

View File

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

View File

@@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=obuspa
PKG_VERSION:=6.0.0.12
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:=668748cd4801aa5af12d61d9b0837064b9f933cc
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
@@ -110,6 +110,7 @@ define Package/obuspa/install
$(INSTALL_DATA) ./files/etc/bbfdm/json/USPAgent.json $(1)/etc/bbfdm/json/USPAgent.json
$(INSTALL_DATA) ./files/etc/bbfdm/json/TransferComplete.json $(1)/etc/bbfdm/json/TransferComplete.json
$(INSTALL_BIN) ./files/etc/uci-defaults/01-fix-upgrade-uci $(1)/etc/uci-defaults/
$(INSTALL_BIN) ./files/etc/uci-defaults/50-add-mqtt-usp-test $(1)/etc/uci-defaults/
endef
$(eval $(call BuildPackage,obuspa))

View File

@@ -0,0 +1,14 @@
add_usp_test()
{
if ! uci_get mosquitto usptest >/dev/null 2>&1; then
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'
fi
}
uci_load mosquitto
add_usp_test

View File

@@ -1,31 +0,0 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=port-management
PKG_VERSION:=1.1.0
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
PKG_LICENSE:=GPL-2.0-only
include $(INCLUDE_DIR)/package.mk
define Package/port-management
CATEGORY:=Utilities
TITLE:=Port management tool
endef
define Package/port-management/description
Port configuration utility
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./files/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
endef
define Package/port-management/install
$(CP) ./files/* $(1)/
endef
$(eval $(call BuildPackage,port-management))

View File

@@ -27,7 +27,7 @@ define Package/qosmngr
SECTION:=utils
CATEGORY:=Utilities
TITLE:=QoS Manager
DEPENDS:=@(TARGET_brcmbca||TARGET_airoha) +libuci +libubox +libubus +libblobmsg-json +libjson-c +libqos
DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +libjson-c +libqos +!(TARGET_brcmbca||TARGET_airoha):tc-full
endef
define Package/qosmngr/description
@@ -40,24 +40,17 @@ define Build/Prepare
endef
endif
define Package/qosmngr/install/common
define Package/qosmngr/install
$(CP) ./files/common/* $(1)/
$(INSTALL_DIR) $(1)/usr
ifneq ($(CONFIG_TARGET_brcmbca),)
$(CP) ./files/broadcom/* $(1)/
else ifneq ($(CONFIG_TARGET_airoha),)
$(CP) ./files/airoha/* $(1)/
else
$(CP) ./files/linux/* $(1)/
endif
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/qosmngr $(1)/usr/sbin
endef
ifeq ($(CONFIG_TARGET_brcmbca),y)
define Package/qosmngr/install
$(CP) ./files/broadcom/* $(1)/
$(call Package/qosmngr/install/common,$(1))
endef
endif
ifeq ($(CONFIG_TARGET_airoha),y)
define Package/qosmngr/install
$(CP) ./files/airoha/* $(1)/
$(call Package/qosmngr/install/common,$(1))
endef
endif
$(eval $(call BuildPackage,qosmngr))

View File

@@ -4,6 +4,18 @@
ethwan="$(db -q get hw.board.ethernetWanPort)"
populate_no_of_queue(){
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
mkdir -p "/tmp/qos"
fi
no_queue_file="/tmp/qos/no_queue_per_port"
touch "$no_queue_file"
echo $queue_num >"$no_queue_file"
}
generate_queue(){
section="$1"
@@ -34,15 +46,18 @@ generate_queue(){
uci commit qos
}
populate_no_of_queue
if [ -s "/etc/config/qos" ]; then
if uci -q get qos.@queue[0] >/dev/null; then
# return if there is any valid content
exit
# return if there is any valid content
exit
else
rm -f /etc/config/qos
rm -f /etc/config/qos
fi
fi
touch /etc/config/qos
# generate qos queue config
config_load ports
config_foreach generate_queue ethport

View File

@@ -182,9 +182,9 @@ hw_commit_all() {
if [ "${glob_alg}" != "" ] ; then
/userfs/bin/qosrule discpline $(hw_sc_alg2str ${glob_alg}) ${weight_list} \
${shape_rate:+uplink-bandwidth} $shape_rate \
uplink-bandwidth ${shape_rate:-0} \
queuemask $queue_mask
else
/userfs/bin/qosrule discpline off
/userfs/bin/qosrule discpline Enable 0
fi
}

View File

@@ -5,9 +5,9 @@
handle_classify() {
cid="$1" #classify section ID
config_get is_enable "$cid" "enable"
config_get is_enable "$cid" "enable" 1
# no need to configure disabled classify rules
if [ -z "$is_enable" ] || [ "$is_enable" == "0" ]; then
if [ "$is_enable" == "0" ]; then
return
fi

View File

@@ -80,10 +80,10 @@ handle_policer() {
local p_sec="$1" # policer section ID
local dir=1 # default direction, upstream
config_get is_enable "$p_sec" "enable"
config_get is_enable "$p_sec" "enable" 1
# No need to configure disabled policer
if [ -z "$is_enable" ] || [ "$is_enable" == "0" ] ; then
if [ "$is_enable" == "0" ] ; then
return
fi

View File

@@ -18,10 +18,10 @@ handle_queue() {
local qid="$1" #queue section ID
local intf_name="$2"
config_get is_enable "$qid" "enable"
config_get is_enable "$qid" "enable" 1
# no need to configure disabled queues
if [ -z "${is_enable}" ] || [ "${is_enable}" == "0" ]; then
if [ "${is_enable}" == "0" ]; then
return
fi

View File

@@ -7,9 +7,9 @@
handle_shaper() {
sid="$1" #queue section ID
config_get is_enable "$sid" "enable"
config_get is_enable "$sid" "enable" 1
# no need to configure disabled queues
if [ -z "${is_enable}" ] || [ "${is_enable}" == "0" ] ; then
if [ "${is_enable}" == "0" ] ; then
return
fi

View File

@@ -2,7 +2,7 @@
# The entrypoint for the QoS setup library
. /lib/functions.sh
. /lib/network/port.sh
include /lib/ethernet
. /lib/qos/common/chains.sh
. /lib/qos/common/chains.ebtables.sh
@@ -25,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"

View File

@@ -4,6 +4,18 @@
ethwan="$(db -q get hw.board.ethernetWanPort)"
cpu_model="$(cat /proc/socinfo | grep 'SoC Name' | cut -d':' -f2)"
queue_num=0
populate_no_of_queue(){
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"
fi
no_queue_file="/tmp/qos/no_queue_per_port"
touch "$no_queue_file"
echo $queue_num >"$no_queue_file"
}
generate_queue(){
section="$1"
@@ -17,14 +29,8 @@ generate_queue(){
local no_of_q="0 1 2 3 4 5 6 7"
if [ $is_lan -eq 1 ]; then
case $cpu_model in
BCM68*) no_of_q="0 1 2 3" ;;
esac
if grep -qE '[0-9]+ archer$' /proc/devices; then
no_of_q="0 1 2 3"
fi
if [ $is_lan -eq 1 ] -a [ $queue_num -eq 4 ]; then
no_of_q="0 1 2 3"
fi
i=0
@@ -45,9 +51,10 @@ generate_queue(){
uci commit qos
}
populate_no_of_queue
if [ -s "/etc/config/qos" ]; then
if uci -q get qos.@queue[0] >/dev/null; then
# return if there is any valid content
exit
else
rm -f /etc/config/qos
@@ -55,5 +62,7 @@ if [ -s "/etc/config/qos" ]; then
fi
touch /etc/config/qos
# generate qos queue config
config_load ports
config_foreach generate_queue ethport

View File

@@ -1,6 +1,6 @@
#!/bin/sh
. /lib/functions.sh
. /lib/network/port.sh
include /lib/ethernet
IP_RULE=""
BR_RULE=""
@@ -642,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"
@@ -1070,7 +1070,7 @@ handle_classify() {
local corder_file="/tmp/qos/classify.order"
while read -r line; do
line_cid=${line: 2}
line_cid=$(echo $line | cut -d '_' -f 2)
handle_ebtables_rules $line_cid
handle_iptables_rules $line_cid
@@ -1372,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
@@ -1383,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
}

View File

@@ -0,0 +1,114 @@
#!/bin/sh
. /lib/functions.sh
classify_no=0
generate_dns_rule(){
classify_no=$((classify_no + 1))
uci add qos classify
uci rename qos.@classify[-1]="c${classify_no}"
uci set qos.@classify[-1].ifname="lo"
uci set qos.@classify[-1].proto="udp"
uci set qos.@classify[-1].ethertype="IPv4"
uci set qos.@classify[-1].dest_port="53"
uci set qos.@classify[-1].traffic_class="$1"
}
generate_dhcp_rule(){
classify_no=$((classify_no + 1))
uci add qos classify
uci rename qos.@classify[-1]="c${classify_no}"
uci set qos.@classify[-1].ifname="lo"
uci set qos.@classify[-1].proto="udp"
uci set qos.@classify[-1].ethertype="IPv4"
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"
}
generate_igmp_rule(){
classify_no=$((classify_no + 1))
uci add qos classify
uci rename qos.@classify[-1]="c${classify_no}"
uci set qos.@classify[-1].ifname="lo"
uci set qos.@classify[-1].proto="IGMP"
uci set qos.@classify[-1].ethertype="IPv4"
uci set qos.@classify[-1].traffic_class="$1"
}
generate_icmp_rule(){
classify_no=$((classify_no + 1))
uci add qos classify
uci rename qos.@classify[-1]="c${classify_no}"
uci set qos.@classify[-1].ifname="lo"
uci set qos.@classify[-1].proto="icmp"
uci set qos.@classify[-1].ethertype="IPv4"
uci set qos.@classify[-1].traffic_class="$1"
classify_no=$((classify_no + 1))
uci add qos classify
uci rename qos.@classify[-1]="c${classify_no}"
uci set qos.@classify[-1].proto="icmp"
uci set qos.@classify[-1].ethertype="IPv4"
uci set qos.@classify[-1].traffic_class="$2"
}
generate_classify(){
no_queue_file="/tmp/qos/no_queue_per_port"
queue_num=$(cat "$no_queue_file")
rm -f "$no_queue_file"
# assign queue type
if [ $queue_num -eq 8 ]; then
q_def_queue="0"
q_low="1"
q_besteffort="2"
q_normal="3"
q_video="4"
q_medium="5"
q_high="6"
q_highest="7"
elif [ $queue_num -eq 4 ]; then
q_def_queue="0"
q_normal="1"
q_medium="2"
q_highest="3"
fi
# Local generated DNS traffic goes to q_highest
generate_dns_rule $q_highest
# Local generated IGMP traffic goes to q_highest
generate_igmp_rule $q_highest
# Local generated DHCP traffic goes to q_highest
generate_dhcp_rule $q_highest
# Local generated ICMP traffic goes to q_highest rotue as q_normal
generate_icmp_rule $q_highest $q_normal
# VLAN priority tag -> Queue priority
for i in `seq 1 7`; do
classify_no=$((classify_no + 1))
uci add qos 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"
done
uci commit qos
}
if [ -s "/etc/config/qos" ]; then
# cleaning up for upgrade same version that contain firewall.qos
if [ -s "/etc/firewall.qos" ]; then
rm -f "/etc/firewall.qos"
if [ -s "/etc/config/firewall" ]; then
uci delete firewall.qos
fi
generate_classify
elif uci -q get qos.@classify[0] >/dev/null; then
exit
else
generate_classify
fi
fi

View File

@@ -0,0 +1,57 @@
#!/bin/sh
. /lib/functions.sh
ethwan="$(db -q get hw.board.ethernetWanPort)"
populate_no_of_queue(){
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
mkdir -p "/tmp/qos"
fi
no_queue_file="/tmp/qos/no_queue_per_port"
touch "$no_queue_file"
echo $queue_num >"$no_queue_file"
}
generate_queue(){
section="$1"
config_get ifname "$section" "ifname"
local no_of_q="0 1 2 3 4 5 6 7"
i=0
local total_q=$((${no_of_q##* } + 1))
for i in $no_of_q; do
order=$((total_q - i))
uci add qos queue
uci rename qos.@queue[-1]="q_${i}_${ifname}"
uci set qos.@queue[-1].enable="1"
uci set qos.@queue[-1].ifname="$ifname"
uci set qos.@queue[-1].precedence="$order"
uci set qos.@queue[-1].scheduling="SP"
uci set qos.@queue[-1].rate="1000000"
uci set qos.@queue[-1].burst_size="1500"
uci set qos.@queue[-1].weight="1"
done
uci commit qos
}
populate_no_of_queue
if [ -s "/etc/config/qos" ]; then
if uci -q get qos.@queue[0] >/dev/null; then
# return if there is any valid content
exit
else
rm -f /etc/config/qos
fi
fi
touch /etc/config/qos
config_load ports
config_foreach generate_queue ethport

View File

@@ -0,0 +1,715 @@
#!/bin/sh
. /lib/functions.sh
#set -x
IP_RULE=""
MAJOR=""
POLICER_COUNT=0
Q_COUNT=0
SP_Q_PRIO=7
#counter variable to assign classify order value if not added in config
temp_order=1
# Function to handle a queue order and
# update total number of queues
handle_q_order() {
local qid="$1" #queue section ID
config_get is_enable "$qid" "enable" 1
# No need to configure disabled queues
if [ $is_enable == '0' ]; then
return
fi
config_get ifname "$qid" "ifname"
# If ifname is empty that is good enough to break
if [ -z "$ifname" ];then
return
fi
# Create precedence file containing queue order per
# interface.
local precedence_file="/tmp/qos/$ifname/q_order"
local q_no=$(cat /tmp/qos/$ifname/q_idx)
config_get precedence "$qid" "precedence"
value=${precedence}_q${q_no}
echo $value >> $precedence_file
# Update the number of queues per interface.
q_no=$((q_no + 1))
echo $q_no > /tmp/qos/$ifname/q_idx
}
# Sort queue, lower value in uci means higher precedence, so this
# function sorts the precedence in decending order
sort_q_by_precedence() {
ifname="$1"
local order_file="/tmp/qos/$ifname/q_order"
local tmp_order_file="/tmp/qos/$ifname/q_order.tmp"
sort -n -k1 $order_file > $tmp_order_file
cp $tmp_order_file $order_file
rm -f $tmp_order_file
}
sort_by_precedence() {
for interf in $(db -q get hw.board.ethernetPortOrder); do
sort_q_by_precedence $interf
done
}
# function to handle a queue section
handle_queue() {
local qid="$1" #queue section ID
local port="$2"
local port_bw="$3"
local root="$4"
local port_bs="$5"
local priority=0
config_get is_enable "$qid" "enable"
# no need to configure disabled queues
if [ "$is_enable" == "0" ]; then
return
fi
config_get ifname "$qid" "ifname"
# if ifname is empty that is good enough to break
if [ -z "$ifname" ];then
return
fi
# This is to get the qid per interface.
if [ "$port" != "$ifname" ]; then
return
fi
local precedence_file="/tmp/qos/$ifname/q_order"
local temp_order=0
while read -r line; do
line_qid=${line: -1}
if [ "$line_qid" == "$Q_COUNT" ]; then
break
fi
temp_order=$((temp_order + 1))
done < "$precedence_file"
# precedence_file so the order is calculated accordingly.
local order=`expr $SP_Q_PRIO - $temp_order`
config_get sc_alg "$qid" "scheduling"
config_get wgt "$qid" "weight" 1
config_get rate "$qid" "rate"
config_get bs "$qid" "burst_size"
config_get qsize "$qid" "queue_size" 1024
[ "$rate" == "0" ] && rate="$port_bw"
[ "$bs" == "0" ] && bs="$port_bs"
local salg=1
case "$sc_alg" in
"SP") salg=1
;;
"WRR") salg=2
;;
"WDRR") salg=3
;;
"WFQ") salg=4
;;
esac
# ignore precedence value in case of WRR, broadcom recommends that WRR queue should
# always have precedence value set to 0
if [ $salg -ne 2 ]; then
priority=$order
fi
if [ $order -ne 0 ]; then
if [ $salg -eq 2 ]; then
tc class add dev $port parent ${root}: classid ${root}:$order cbq allot $bs bandwidth ${port_bw}kbit rate ${rate}kbit prio $priority weight $wgt avpkt 1500 bounded isolated
else
tc class add dev $port parent ${root}: classid ${root}:$order cbq allot $bs bandwidth ${port_bw}kbit rate ${rate}kbit prio $priority avpkt 1500 bounded isolated
fi
tc filter add dev $port parent ${root}:0 prio $order handle $order fw classid ${root}:$order
fi
Q_COUNT=$((Q_COUNT + 1))
}
#function to handle a policer section
handle_policer() {
local p_sec="$1" # policer section ID
local dir=1 # default direction, upstream
config_get is_enable "$p_sec" "enable"
#no need to configure disabled policer
if [ $is_enable == '0' ]; then
return
fi
POLICER_COUNT=$((POLICER_COUNT + 1))
}
setup_qos() {
if [ ! -d "/tmp/qos" ]; then
mkdir -p /tmp/qos
fi
ebtables -t broute -N qos
ret=$?
if [ $ret -eq 0 ]; then
ebtables -t broute -I BROUTING -j qos
else
ebtables -t broute -D BROUTING -j qos
ebtables -t broute -I BROUTING -j qos
fi
iptables -w -t mangle -N qos_prerouting
ret=$?
[ $ret -eq 0 ] && iptables -w -t mangle -I PREROUTING -j qos_prerouting
iptables -w -t mangle -N qos_forward
ret=$?
[ $ret -eq 0 ] && iptables -w -t mangle -I FORWARD -j qos_forward
iptables -w -t mangle -N qos_output
ret=$?
[ $ret -eq 0 ] && iptables -w -t mangle -I OUTPUT -j qos_output
ip6tables -w -t mangle -N qos_prerouting
ret=$?
[ $ret -eq 0 ] && ip6tables -w -t mangle -I PREROUTING -j qos_prerouting
ip6tables -t mangle -N qos_forward
ret=$?
[ $ret -eq 0 ] && ip6tables -t mangle -I FORWARD -j qos_forward
ip6tables -t mangle -N qos_output
ret=$?
[ $ret -eq 0 ] && ip6tables -t mangle -I OUTPUT -j qos_output
}
flush_chains() {
echo "iptables -w -t mangle -F qos_forward" > /tmp/qos/classify.iptables
echo "iptables -w -t mangle -F qos_output" >> /tmp/qos/classify.iptables
echo "iptables -w -t mangle -F qos_prerouting" >> /tmp/qos/classify.iptables
echo "ip6tables -w -t mangle -F qos_forward" > /tmp/qos/classify.ip6tables
echo "ip6tables -w -t mangle -F qos_output" >> /tmp/qos/classify.ip6tables
echo "ip6tables -w -t mangle -F qos_prerouting" >> /tmp/qos/classify.ip6tables
}
init_iptables_rule() {
IP_RULE=""
}
iptables_filter_intf() {
IP_RULE="$IP_RULE -i $1"
}
iptables_filter_proto() {
IP_RULE="$IP_RULE -p $1"
}
iptables_filter_ip_src() {
IP_RULE="$IP_RULE -s $1"
}
iptables_filter_ip_dest() {
IP_RULE="$IP_RULE -d $1"
}
iptables_filter_port_dest() {
IP_RULE="$IP_RULE --dport $1"
}
iptables_filter_port_src() {
IP_RULE="$IP_RULE --sport $1"
}
iptables_filter_port_dest_range() {
IP_RULE="$IP_RULE --dport $1:$2"
}
iptables_filter_port_src_range() {
IP_RULE="$IP_RULE --sport $1:$2"
}
iptables_filter_dscp_filter() {
IP_RULE="$IP_RULE -m dscp --dscp $1"
}
iptables_filter_ip_len_min() {
IP_RULE="$IP_RULE -m length --length $1"
}
iptables_filter_ip_len_max() {
IP_RULE="$IP_RULE:$1"
}
iptables_set_dscp_mark() {
IP_RULE="$IP_RULE -j DSCP --set-dscp $1"
}
iptables_set_traffic_class() {
IP_RULE="$IP_RULE -j MARK --set-mark $1"
}
append_rule_to_mangle_table() {
if [ $2 == 4 ]; then
echo "iptables -w -t mangle -A $1 $IP_RULE" >> /tmp/qos/classify.iptables
elif [ $2 == 6 ]; then
echo "ip6tables -w -t mangle -A $1 $IP_RULE" >> /tmp/qos/classify.ip6tables
elif [ $2 == 1 ]; then
echo "iptables -w -t mangle -A $1 $IP_RULE" >> /tmp/qos/classify.iptables
echo "ip6tables -w -t mangle -A $1 $IP_RULE" >> /tmp/qos/classify.ip6tables
fi
}
handle_iptables_rules() {
cid=$1
local ip_version=0
local is_l3_rule=0
init_iptables_rule
config_get proto "$cid" "proto"
config_get traffic_class "$cid" "traffic_class"
config_get dscp_mark "$cid" "dscp_mark"
config_get dscp_filter "$cid" "dscp_filter"
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"
config_get dest_ip "$cid" "dest_ip"
config_get src_ip "$cid" "src_ip"
config_get ip_len_min "$cid" "ip_len_min"
config_get ip_len_max "$cid" "ip_len_max"
config_get ifname "$cid" "ifname"
#check version of ip
case $src_ip$dest_ip in
*.*)
ip_version=4
;;
*:*)
ip_version=6
;;
*)
ip_version=1 #ip address not used
esac
#filter interface
if [ -n "$ifname" ]; then
if [ "$ifname" != "lo" ]; then
iptables_filter_intf $ifname
fi
fi
# filter proto
if [ -n "$proto" ]; then
iptables_filter_proto $proto
is_l3_rule=1
fi
#filter src. ip
if [ -n "$src_ip" ]; then
iptables_filter_ip_src $src_ip
is_l3_rule=1
fi
#filter dest. ip
if [ -n "$dest_ip" ]; then
iptables_filter_ip_dest $dest_ip
is_l3_rule=1
fi
#filter dest. port
if [ -n "$dest_port" -a -z "$dest_port_range" ]; then
iptables_filter_port_dest $dest_port
is_l3_rule=1
fi
#filter src. port
if [ -n "$src_port" -a -z "$src_port_range" ]; then
iptables_filter_port_src $src_port
is_l3_rule=1
fi
#filter dest. port range
if [ -n "$dest_port" -a -n "$dest_port_range" ]; then
iptables_filter_port_dest_range $dest_port $dest_port_range
is_l3_rule=1
fi
#filter src. port range
if [ -n "$src_port" -a -n "$src_port_range" ]; then
iptables_filter_port_src_range $src_port $src_port_range
is_l3_rule=1
fi
#filter dscp
if [ -n "$dscp_filter" ]; then
iptables_filter_dscp_filter $dscp_filter
is_l3_rule=1
fi
#filter min. IP packet len.
if [ -n "$ip_len_min" ]; then
iptables_filter_ip_len_min $ip_len_min
is_l3_rule=1
fi
#filter max. IP packet len.
if [ -n "$ip_len_max" ]; then
iptables_filter_ip_len_max $ip_len_max
is_l3_rule=1
fi
if [ $is_l3_rule -eq 0 ]; then
return
fi
#set dscp mark
[ -n "$dscp_mark" ] && iptables_set_dscp_mark $dscp_mark
#set packet queue mark
[ -n "$traffic_class" ] && iptables_set_traffic_class $traffic_class
#write iptables rule for dscp marking
[ -n "$IP_RULE" -a -n "$dscp_mark" ] && append_rule_to_mangle_table "qos_forward" $ip_version
if [ -n "$IP_RULE" -a -n "$traffic_class" ]; then
if [ "$ifname" == "lo" ]; then
#write iptables rule for putting WAN directed internal packets in different queue
append_rule_to_mangle_table "qos_output" $ip_version
else
#write iptables rule for putting WAN directed LAN packets in different queue
append_rule_to_mangle_table "qos_prerouting" $ip_version
fi
fi
}
handle_policer_rules() {
local c_sec=$1
local policer_name
local ifname
local pname
local pindex=-1
local ingress_rate=0
local in_burst_size=0
config_get policer_name "$c_sec" "policer"
if [ -z "$policer_name" ];then
# no need to apply policer if policer not present in this
# classification rule
return
fi
config_get ifname "$c_sec" "ifname"
if [ -z "$ifname" ]; then
# cannot associate policer as interface is not mentioned
return
fi
local i=0
local max_policer_inst=$(cat /tmp/qos/max_policer_inst)
while :
do
if [ $i -eq $max_policer_inst ]; then
break
fi
pname="$(uci -q get qos.@policer[$i].name)"
if [ "$policer_name" == "$pname" ]; then
pindex=$i
ingress_rate=$(uci -q get qos.@policer[$i].committed_rate)
in_burst_rate=$(uci -q get qos.@policer[$i].committed_burst_size)
break
fi
i=$((i + 1))
done
if [ $pindex -lt 0 ]; then
# policer not found, no need to proceed further
return
fi
config_ingress_rate_limit $ifname $ingress_rate $in_burst_size $pindex
}
config_ingress_rate_limit() {
local ifname="$1"
local ingress_rate=$2
local in_burst_size=$3
local pindex="$4"
local wanport="$(db -q get hw.board.ethernetWanPort)"
# Unit in uci file is in bps while that accepted by ethswctl is kbits
if [ $ingress_rate -lt 1000 ]; then
return
fi
ingress_rate=$((ingress_rate / 1000))
if [ $in_burst_size -eq 0 ]; then
in_burst_size=$ingress_rate
else
in_burst_size=$((in_burst_size / 1000))
fi
tc qdisc add dev $ifname ingress
tc filter add dev $ifname parent ffff: protocol ip prio $pindex u32 match ip src 0.0.0.0/0 police rate ${ingress_rate}kbit burst $in_burst_size drop flowid :$pindex
}
# Function to handle a classify order
handle_classify_order() {
local cid="$1" #classify section ID
config_get is_enable "$cid" "enable" 1
# No need to configure disabled classify
if [ $is_enable == '0' ]; then
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
}
# 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
}
#function to handle a classify section
handle_classify() {
local corder_file="/tmp/qos/classify.order"
while read -r line; do
line_cid=$(echo $line | cut -d '_' -f 2)
handle_iptables_rules $line_cid
handle_policer_rules $line_cid
done < "$corder_file"
}
configure_classify() {
#processing classify section
rm -f /tmp/qos/classify.iptables
rm -f /tmp/qos/classify.ip6tables
rm -f /tmp/qos/classify.order
# 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
flush_chains
# Load UCI file
config_load qos
config_foreach handle_classify_order classify
sort_classify_by_order
handle_classify
sh /tmp/qos/classify.iptables
sh /tmp/qos/classify.ip6tables
}
pre_configure_queue() {
# Delete queues
for intf in $(db get hw.board.ethernetPortOrder); do
rm -rf /tmp/qos/$intf
mkdir -p /tmp/qos/$intf
touch /tmp/qos/$intf/q_order
touch /tmp/qos/$intf/q_idx
echo 0 > /tmp/qos/$intf/q_idx
tc qdisc del dev $intf root
tc qdisc del dev $intf ingress
done
}
get_link_rate() {
intf="$1"
speed=0
config_load ports
get_speed() {
psid="$1"
iname="$2"
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"
}
configure_queue() {
qdisc_idx=0
local bs=1500
local rate=0
# Load UCI file
config_load qos
config_foreach handle_q_order queue
sort_by_precedence
get_intf_shaper_config() {
local b_size
sid="$1" #shaper section ID
config_get is_enable "$sid" "enable"
# no need to configure disabled queues
if [ "$is_enable" == "0" ]; then
return
fi
config_get ifname "$sid" "ifname"
# if ifname is empty that is good enough to break
if [ -z "$ifname" ] || ! [ "$ifname" == "$2" ];then
return
fi
config_get rate "$sid" "rate"
# Convert the rate from bps to kbps.
if [ $rate -lt 1000 ];then
return
fi
rate=$(( rate / 1000 ))
config_get b_size "$sid" "burst_size"
if [ "$b_size" == "0" ]; then
bs="$b_size"
fi
}
local wanport="$(db -q get hw.board.ethernetWanPort)"
for interf in $(db -q get hw.board.ethernetPortOrder); do
Q_COUNT=0
rate=0
# sp queue have max priority value = no. of queue configured on the port
# hence read and update SP_Q_PRIO here
local q_no=$(cat /tmp/qos/$interf/q_idx)
SP_Q_PRIO=`expr $q_no - 1`
qdisc_idx=`expr $qdisc_idx + 1`
# link_rate is in mbps and rate is in kbp
link_rate=$(get_link_rate "$interf")
# Read the shaper configuration for interface
config_foreach get_intf_shaper_config shaper $interf
if [ "$rate" == "0" ]; then
rate=$(( link_rate * 1000 ))
fi
# TODO using 1500 as allot and avpkt, if shaper config exist for interf get burst_size of shaper for actual value
tc qdisc add dev $interf root handle ${qdisc_idx}: cbq allot $bs avpkt 1500 bandwidth ${rate}kbit
# if qdisc_idx is the index corresponds to WAN port, then
# it would be the MAJOR portion of the destination class ID.
# under the same qdisc. We are programming for WAN port only.
if [ "$interf" == "$wanport" ]; then
MAJOR="$qdisc_idx"
fi
config_foreach handle_queue queue $interf $rate $qdisc_idx $bs
done
}
configure_policer() {
# Delete policer
local i=0
local max_p_inst=0
if [ -f "/tmp/qos/max_policer_inst" ]; then
max_p_inst=$(cat /tmp/qos/max_policer_inst)
fi
# reset the policer counter
echo 0 > /tmp/qos/max_policer_inst
# Load UCI file
config_load qos
config_foreach handle_policer 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
configure_queue
configure_classify
configure_policer
}
reload_qos() {
local service_name="$1"
if [ -z "$service_name" ]; then
configure_qos
elif [ "$service_name" == "queue" ]; then
pre_configure_queue
configure_queue
elif [ "$service_name" == "classify" ]; then
configure_classify
elif [ "$service_name" == "policer" ]; then
configure_policer
fi
}
reload_qos_service() {
reload_qos
}

View File

@@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ssdpd
PKG_VERSION:=1.0.0
PKG_VERSION:=1.0.3
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)

View File

@@ -4,4 +4,6 @@ config ssdpd 'ssdp'
option ipv6_enabled '0'
option socket_path '/var/run/minissdpd.sock'
option ttl '2'
option interface ''
option interface 'br-lan'
option debug '0'

View File

@@ -1,19 +1,20 @@
#!/bin/sh /etc/rc.common
START=80
START=99
STOP=02
USE_PROCD=1
PROG=/usr/sbin/ssdpd
log() {
echo "${@}"|logger -t ssdp.init -p info
echo "${@}"|logger -t ssdpd.init -p info
}
validate_ssdpd_ssdp_section()
{
uci_validate_section ssdpd ssdpd "ssdp" \
'enabled:bool:true' \
'debug:bool:false' \
'ipv6_enabled:bool:false' \
'socket_path:string' \
'ttl:uinteger' \
@@ -33,10 +34,16 @@ configure_ssdp()
[ ${enabled} -eq 0 ] && return 0
procd_set_param command ${PROG}
if [ ${ipv6_enabled} -eq 1 ]; then
procd_append_param command -6
fi
if [ ${debug} -eq 1 ]; then
procd_append_param command -d
fi
if [ -n "${socket_path}" ]; then
procd_append_param command -s ${socket_path}
fi
@@ -45,18 +52,12 @@ configure_ssdp()
procd_append_param command -t ${ttl}
fi
if [ -z "${interface}" ]; then
iface=$(uci -q get cwmp.cpe.default_lan_interface)
interface=$(ifstatus ${iface} | jsonfilter -e @.device)
fi
procd_append_param command -i ${interface}
procd_append_param command -d
# If no interface is given defaults for br-lan
procd_append_param command -i ${interface:-br-lan}
}
start_service() {
procd_open_instance ssdp
procd_set_param command ${PROG}
configure_ssdp
procd_set_param respawn
procd_close_instance

View File

@@ -9,17 +9,18 @@
/* LOG_PERROR does not exist on Solaris */
#ifndef LOG_PERROR
@@ -52,6 +54,9 @@
@@ -52,6 +54,10 @@
#define MIN(x,y) (((x)<(y))?(x):(y))
#endif
+extern char *ssdp_sockpath;
+void upnp_thread_discover_devices(void);
+void ssdpd_ubus_stop(void);
+
/* current request management structure */
struct reqelem {
int socket;
@@ -1220,6 +1225,12 @@ static void ssdpDiscover(int s, int ipv6
@@ -1220,6 +1226,12 @@ static void ssdpDiscover(int s, int ipv6
}
}
@@ -32,7 +33,7 @@
/* main(): program entry point */
int main(int argc, char * * argv)
{
@@ -1264,6 +1275,7 @@ int main(int argc, char * * argv)
@@ -1264,6 +1276,7 @@ int main(int argc, char * * argv)
unsigned char ttl = 2; /* UDA says it should default to 2 */
const char * searched_device = NULL; /* if not NULL, search/filter a specific device type */
int opt;
@@ -40,7 +41,7 @@
LIST_INIT(&reqlisthead);
LIST_INIT(&servicelisthead);
@@ -1309,6 +1321,7 @@ int main(int argc, char * * argv)
@@ -1309,6 +1322,7 @@ int main(int argc, char * * argv)
break;
case 's':
sockpath = optarg;
@@ -48,7 +49,7 @@
break;
#ifndef NO_BACKGROUND_NO_PIDFILE
case 'p':
@@ -1496,6 +1509,11 @@ int main(int argc, char * * argv)
@@ -1496,6 +1510,11 @@ int main(int argc, char * * argv)
if(s_ssdp6 >= 0)
ssdpDiscover(s_ssdp6, 1, searched_device);
@@ -60,11 +61,35 @@
/* Main loop */
while(!quitting) {
/* fill readfds fd_set */
@@ -1704,6 +1722,7 @@ quit:
@@ -1704,6 +1723,8 @@ quit:
if(unlink(pidfilename) < 0)
syslog(LOG_ERR, "unlink(%s): %m", pidfilename);
#endif
+ ssdpd_ubus_stop();
+ pthread_join(upnp_thread, NULL);
closelog();
return ret;
}
--- a/minissdpd/ssdpd.c
+++ b/minissdpd/ssdpd.c
@@ -624,3 +624,8 @@ end:
uloop_done();
ubus_free(ctx);
}
+
+void ssdpd_ubus_stop(void)
+{
+ uloop_end();
+}
+
--- a/minissdpd/config.h
+++ b/minissdpd/config.h
@@ -32,7 +32,7 @@
/* When NO_BACKGROUND_NO_PIDFILE is defined, minissdpd does not go to
* background and does not create any pidfile */
-/*#define NO_BACKGROUND_NO_PIDFILE*/
+#define NO_BACKGROUND_NO_PIDFILE
/* define HAVE_IP_MREQN to use struct ip_mreqn instead of struct ip_mreq
* for setsockopt(IP_MULTICAST_IF). Available with Linux 2.4+,

View File

@@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=sulu-builder
PKG_VERSION:=1.3.24
PKG_VERSION:=1.3.25
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu-builder.git
@@ -162,11 +162,6 @@ endif
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/etc/init.d/sulu $(1)/etc/init.d/sulu
$(INSTALL_DIR) $(1)/etc/mosquitto/conf.d/
$(INSTALL_DATA) ./files/etc/mosquitto/conf.d/obuspa.conf $(1)/etc/mosquitto/conf.d/
$(INSTALL_DATA) ./files/etc/mosquitto/conf.d/sulu.conf $(1)/etc/mosquitto/conf.d/
$(INSTALL_DATA) ./files/etc/mosquitto/sulu.password $(1)/etc/mosquitto/sulu.password
$(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/
@@ -176,6 +171,7 @@ endif
$(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}))

View File

@@ -1,5 +1,4 @@
config global 'global'
option enable_system_credentials '1'
option role_based_access '1'
list user 'admin'
list user 'user'

View File

@@ -33,8 +33,9 @@ start_service() {
return 0
fi
update_nginx_template
configure_sulu "${enable_system_credentials}" "${role_based_access}" 1
update_sulu_connection_port
generate_sulu_conn_config "${role_based_access}"
procd_close_instance
}

View File

@@ -1,3 +0,0 @@
listener 1883 127.0.0.1
allow_anonymous true

View File

@@ -1,4 +0,0 @@
listener 9001
protocol websockets
require_certificate false
allow_anonymous false

View File

@@ -1 +0,0 @@
admin:$6$OmM9kU/lYct3KJ9j$iP0WK4ezEtRm8+EAggNp7WbJFoWO0p7IUdI0v/hr1WcVHyfFAC30Pb8Csn7GqwwqI2dcmnDOAITnimo2VNe6ug==

View File

@@ -2,7 +2,6 @@
. /lib/functions.sh
ACL_FILE="/tmp/sulu/mqtt.acl"
_RESTART_SERVICES="0"
mkdir -p /tmp/sulu/
@@ -54,6 +53,22 @@ function _get_sulu_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
@@ -64,6 +79,19 @@ function _get_sulu_tls_port()
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
@@ -275,72 +303,40 @@ function _remove_obuspa_config_rbac()
}
function _create_acl() {
local agentid rbac users
local agentid rbac users restart
local ACL_FILE
rbac="${1:-0}"
restart="0"
[ -f "${ACL_FILE}" ] && rm -f "${ACL_FILE}"
if [ "${rbac}" -eq "0" ]; then
return 0;
ACL_FILE="$(_get_sulu_acl_file)"
if [ -z "${ACL_FILE}" -o "${rbac}" -eq "0" ]; then
return 0
fi
agentid="$(_get_agent_id)"
users="$(_get_sulu_users)"
for f in ${users}; do
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}
done
}
function update_mosquitto_broker_config()
{
local system_cred rbac restart
MB_SULU_CONF="/etc/mosquitto/conf.d/sulu.conf"
system_cred="${1}"
rbac="${2}"
restart=0
if [ "${system_cred}" -eq "1" ]; then
if grep -q "password_file " ${MB_SULU_CONF}; then
sed -i '/password_file /d' ${MB_SULU_CONF}
restart=1
fi
if ! grep -q "plugin .*mosquitto_auth_shadow.so" ${MB_SULU_CONF}; then
echo "plugin /usr/lib/mosquitto_auth_shadow.so" >> ${MB_SULU_CONF}
restart=1
fi
else
if grep -q 'plugin .*mosquitto_auth_shadow.so' ${MB_SULU_CONF}; then
sed -i '/plugin .*mosquitto_auth_shadow.so/d' ${MB_SULU_CONF}
restart=1
fi
if ! grep -q "password_file /etc/mosquitto/sulu.password" ${MB_SULU_CONF}; then
echo "password_file /etc/mosquitto/sulu.password" >> ${MB_SULU_CONF}
restart=1
fi
if [ -f "${ACL_FILE}" ]; then
rm -f "${ACL_FILE}"
fi
touch "${ACL_FILE}"
if [ "${rbac}" -eq "1" ]; then
_create_acl "${rbac}"
if ! grep -q "acl_file ${ACL_FILE}" ${MB_SULU_CONF}; then
echo "acl_file ${ACL_FILE}" >> ${MB_SULU_CONF}
restart=1
fi
else
if grep -q "acl_file ${ACL_FILE}" ${MB_SULU_CONF}; then
sed -i '/acl_file /d' ${MB_SULU_CONF}
restart=1
fi
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_SERVICES}" -eq "1" -a "${restart}" -eq "1" ]; then
slog "Restarting mqtt broker..."
/etc/init.d/mosquitto restart &
if [ "${restart}" -gt "0" ]; then
slog "Restarting mosquitto..."
ubus call uci commit '{"config":"mosquitto"}'
fi
}
@@ -386,7 +382,7 @@ function configure_sulu()
_RESTART_SERVICES="${restart}"
update_mosquitto_broker_config "${sys_cred}" "${rbac}"
set_sulu_connection_mode "${rbac}"
update_obuspa_config "${rbac}"
_create_acl "${rbac}"
}

View File

@@ -3,8 +3,10 @@
UCI_TEMPLATE="/etc/nginx/uci.conf.template"
update_nginx_uci_template()
{
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:9001; }' ${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

View 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

View File

@@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=sulu
PKG_VERSION:=1.3.24
PKG_VERSION:=1.3.25
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/websdk/sulu.git
@@ -49,11 +49,6 @@ endif
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/etc/init.d/sulu $(1)/etc/init.d/sulu
$(INSTALL_DIR) $(1)/etc/mosquitto/conf.d/
$(INSTALL_DATA) ./files/etc/mosquitto/conf.d/obuspa.conf $(1)/etc/mosquitto/conf.d/
$(INSTALL_DATA) ./files/etc/mosquitto/conf.d/sulu.conf $(1)/etc/mosquitto/conf.d/
$(INSTALL_DATA) ./files/etc/mosquitto/sulu.password $(1)/etc/mosquitto/sulu.password
$(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/
@@ -63,6 +58,7 @@ endif
$(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))

View File

@@ -1,5 +1,4 @@
config global 'global'
option enable_system_credentials '1'
option role_based_access '1'
list user 'admin'
list user 'user'

View File

@@ -33,8 +33,9 @@ start_service() {
return 0
fi
update_nginx_template
configure_sulu "${enable_system_credentials}" "${role_based_access}" 1
update_sulu_connection_port
generate_sulu_conn_config "${role_based_access}"
procd_close_instance
}

View File

@@ -1,3 +0,0 @@
listener 1883 127.0.0.1
allow_anonymous true

View File

@@ -1,4 +0,0 @@
listener 9001
protocol websockets
require_certificate false
allow_anonymous false

View File

@@ -1 +0,0 @@
admin:$6$OmM9kU/lYct3KJ9j$iP0WK4ezEtRm8+EAggNp7WbJFoWO0p7IUdI0v/hr1WcVHyfFAC30Pb8Csn7GqwwqI2dcmnDOAITnimo2VNe6ug==

View File

@@ -2,7 +2,6 @@
. /lib/functions.sh
ACL_FILE="/tmp/sulu/mqtt.acl"
_RESTART_SERVICES="0"
mkdir -p /tmp/sulu/
@@ -54,6 +53,22 @@ function _get_sulu_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
@@ -64,6 +79,19 @@ function _get_sulu_tls_port()
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
@@ -275,72 +303,40 @@ function _remove_obuspa_config_rbac()
}
function _create_acl() {
local agentid rbac users
local agentid rbac users restart
local ACL_FILE
rbac="${1:-0}"
restart="0"
[ -f "${ACL_FILE}" ] && rm -f "${ACL_FILE}"
if [ "${rbac}" -eq "0" ]; then
return 0;
ACL_FILE="$(_get_sulu_acl_file)"
if [ -z "${ACL_FILE}" -o "${rbac}" -eq "0" ]; then
return 0
fi
agentid="$(_get_agent_id)"
users="$(_get_sulu_users)"
for f in ${users}; do
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}
done
}
function update_mosquitto_broker_config()
{
local system_cred rbac restart
MB_SULU_CONF="/etc/mosquitto/conf.d/sulu.conf"
system_cred="${1}"
rbac="${2}"
restart=0
if [ "${system_cred}" -eq "1" ]; then
if grep -q "password_file " ${MB_SULU_CONF}; then
sed -i '/password_file /d' ${MB_SULU_CONF}
restart=1
fi
if ! grep -q "plugin .*mosquitto_auth_shadow.so" ${MB_SULU_CONF}; then
echo "plugin /usr/lib/mosquitto_auth_shadow.so" >> ${MB_SULU_CONF}
restart=1
fi
else
if grep -q 'plugin .*mosquitto_auth_shadow.so' ${MB_SULU_CONF}; then
sed -i '/plugin .*mosquitto_auth_shadow.so/d' ${MB_SULU_CONF}
restart=1
fi
if ! grep -q "password_file /etc/mosquitto/sulu.password" ${MB_SULU_CONF}; then
echo "password_file /etc/mosquitto/sulu.password" >> ${MB_SULU_CONF}
restart=1
fi
if [ -f "${ACL_FILE}" ]; then
rm -f "${ACL_FILE}"
fi
touch "${ACL_FILE}"
if [ "${rbac}" -eq "1" ]; then
_create_acl "${rbac}"
if ! grep -q "acl_file ${ACL_FILE}" ${MB_SULU_CONF}; then
echo "acl_file ${ACL_FILE}" >> ${MB_SULU_CONF}
restart=1
fi
else
if grep -q "acl_file ${ACL_FILE}" ${MB_SULU_CONF}; then
sed -i '/acl_file /d' ${MB_SULU_CONF}
restart=1
fi
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_SERVICES}" -eq "1" -a "${restart}" -eq "1" ]; then
slog "Restarting mqtt broker..."
/etc/init.d/mosquitto restart &
if [ "${restart}" -gt "0" ]; then
slog "Restarting mosquitto..."
ubus call uci commit '{"config":"mosquitto"}'
fi
}
@@ -386,7 +382,7 @@ function configure_sulu()
_RESTART_SERVICES="${restart}"
update_mosquitto_broker_config "${sys_cred}" "${rbac}"
set_sulu_connection_mode "${rbac}"
update_obuspa_config "${rbac}"
_create_acl "${rbac}"
}

View File

@@ -3,8 +3,10 @@
UCI_TEMPLATE="/etc/nginx/uci.conf.template"
update_nginx_uci_template()
{
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:9001; }' ${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

View 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

0
sulu/files/etc/uci-defaults/99-fix-sulu-config Normal file → Executable file
View File

View File

@@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=uspd
PKG_VERSION:=2.2.22
PKG_VERSION:=2.2.23
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)

View File

@@ -30,6 +30,7 @@ configure_uspd()
[ ${enabled} -eq 0 ] && return 0
procd_set_param command ${PROG}
if [ ${debug} -eq 1 ]; then
procd_set_param stdout 1
procd_set_param stderr 1
@@ -46,7 +47,6 @@ configure_uspd()
start_service() {
procd_open_instance usp
procd_set_param command ${PROG}
configure_uspd
procd_set_param respawn
procd_close_instance

View File

@@ -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:=8cdd77393ac6a631649eac71ff33603bfc2b55b3
PKG_SOURCE_VERSION:=d4e71d2afae6567e48f4b57b5cf026307e5cac57
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View File

@@ -10,7 +10,8 @@ start_service() {
[ "$(db -q get hw.board.hasVoice)" = "1" ] || return
procd_open_instance
procd_set_param env hw_board_hasDect=$(db get hw.board.hasDect)
procd_set_param env hw_board_hasDect="$(db get hw.board.hasDect)"
procd_set_param env hw_board_VoicePortNames="$(db get hw.board.VoicePortNames)"
procd_set_param command $NAME
procd_set_param respawn "5" "0" "3"
procd_set_param nice -12

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=wfa-capi
PKG_VERSION:=1.1.3
PKG_VERSION:=2.0.1
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=64d9101c8e4930cbd3fe6ce471fb4cfd2b9b80dc
PKG_SOURCE_VERSION:=3e671db8f567b19c109fc13b25bc571c4c73a962
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/wfa-capi.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip

View File

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