Compare commits

...

11 Commits

Author SHA1 Message Date
Tanya Singh
06f5ab9ad4 WIFI-14906: Add 'sync' after file generation in Cloud discovery process
Signed-off-by: Tanya Singh <tanya_singh@accton.com>
2025-07-25 17:39:37 +08:00
Marek Kwaczynski
7795c51947 netifd: add GCMP-256 support for WPA3 on 6 GHz bands
This patch enhances WPA3 encryption support in netifd by introducing GCMP-256
cipher handling for wireless interfaces operating on the 6 GHz band with HE/EHT
modes.

Fixes: WIFI-14594

Signed-off-by: Marek Kwaczynski <marek@shasta.cloud>
2025-07-24 14:45:26 +02:00
Justin.Guo
9e68fc6e66 ipq807x_v5.4/qca-wifi-7: Support dual BDF
Support dual BDF for WF186H/WF186W/WF189/WF189H/WF189W/WF672A

Fixes: WIFI-14890
Signed-off-by: Justin.Guo <guoxijun@actiontec.com>
2025-07-24 13:34:27 +02:00
Jesse Wu
b60c244d93 qca-wifi-7: add support for EMPLUS WAP7635
Signed-off-by: Jesse Wu <Jesse.Wu@emplustech.com>
2025-07-24 13:32:21 +02:00
Ian Chen
ae1f394e28 mediatek-sdk: Support HaLow Mesh on EAP112
enable MESH function in feeds/morse/utils/wpa_supplicant_s1g/Config.in

ticket: WIFI-14896
Signed-off-by: Ian Chen <ian77_chen@accton.com>
2025-07-24 13:31:35 +02:00
John Crispin
d09126c674 ucentral-schema: updte to latest HEAD
b971b73 Support HaLow Mesh on EAP112
7d28320 Fix in ucode script of config_raw to add multiple UCI sections via config-raw object of the schema
1453f2e chanUtil per radio shall be obtained from the policy_chanutil.uc script
fa26853 enable multiple bssid by default on 6G

Signed-off-by: John Crispin <john@phrozen.org>
2025-07-24 13:30:25 +02:00
Marek Kwaczynski
810bc501e1 ratelimit: fix rate limiting on WiFi-7 devices
Rate limiting was not applied on WiFi-7 devices because their
hostapd interface names use the phy* prefix instead of wlan*.
This patch extends the match pattern to include both wlan* and phy*.

Fixes: WIFI-14884

Signed-off-by: Marek Kwaczynski <marek@shasta.cloud>
2025-07-22 15:19:57 +02:00
John Crispin
3001fa88fb include/download.mk: switch to using git:// instead of https://
Signed-off-by: John Crispin <john@phrozen.org>
2025-07-21 13:28:00 +02:00
John Crispin
89a1be09d9 est_client: set 10s as the max timeout when calling the EST server
Signed-off-by: John Crispin <john@phrozen.org>
2025-07-21 11:35:47 +02:00
CarosLiang
3cb1f9c4dd ipq50xx: add smp-affinity for wf186h and wf186w
Fixes: WIFI-14873
Signed-off-by: CarosLiang <cliang@actiontec.com>
2025-07-21 11:06:19 +02:00
Tanya Singh
63ef3588ce mediatek: Support RRM based on Channel Utilization for Edgecore EAP111 and EAP112
Fixes: WIFI-14837
Signed-off-by: Tanya Singh <tanya_singh@accton.com>
2025-07-21 11:05:27 +02:00
43 changed files with 1038 additions and 212 deletions

View File

@@ -24,8 +24,6 @@ endef
#
ALLWIFIBOARDS:= \
cig-wf186w \
cig-wf186h \
cig-wf660a \
cig-wf194c \
cig-wf194c4 \
@@ -108,6 +106,16 @@ $(call Package/ath11k-wifi-default)
TITLE:=cig-wf196 bdf
endef
define Package/ath11k-wifi-cig-wf186w
$(call Package/ath11k-wifi-default)
TITLE:=cig-wf186w bdf
endef
define Package/ath11k-wifi-cig-wf186h
$(call Package/ath11k-wifi-default)
TITLE:=cig-wf186h bdf
endef
define Package/ath11k-wifi-gl-ax1800
$(call Package/ath11k-wifi-default)
TITLE:=gl-ax1800 bdf
@@ -284,6 +292,24 @@ define Package/ath11k-wifi-cig-wf196/install
$(INSTALL_DATA) ./board-cig-wf196-us.bin.IPQ8074 $(1)/lib/firmware/ath11k/IPQ8074/hw2.0/board.bin.US
endef
define Package/ath11k-wifi-cig-wf186w/install
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/qcn6122/hw1.0/
$(INSTALL_DATA) ./board-cig-wf186w-us.bin.IPQ5018 $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/board.bin.US
$(INSTALL_DATA) ./board-cig-wf186w-ca.bin.IPQ5018 $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/board.bin.CA
$(INSTALL_DATA) ./board-cig-wf186w-us.bin.QCN6122 $(1)/lib/firmware/ath11k/qcn6122/hw1.0/board.bin.US
$(INSTALL_DATA) ./board-cig-wf186w-ca.bin.QCN6122 $(1)/lib/firmware/ath11k/qcn6122/hw1.0/board.bin.CA
endef
define Package/ath11k-wifi-cig-wf186h/install
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/qcn6122/hw1.0/
$(INSTALL_DATA) ./board-cig-wf186h-us.bin.IPQ5018 $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/board.bin.US
$(INSTALL_DATA) ./board-cig-wf186h-ca.bin.IPQ5018 $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/board.bin.CA
$(INSTALL_DATA) ./board-cig-wf186h-us.bin.QCN6122 $(1)/lib/firmware/ath11k/qcn6122/hw1.0/board.bin.US
$(INSTALL_DATA) ./board-cig-wf186h-ca.bin.QCN6122 $(1)/lib/firmware/ath11k/qcn6122/hw1.0/board.bin.CA
endef
define Package/ath11k-wifi-optimcloud-d50/install
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/IPQ5018/hw1.0/
$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCN9074/hw1.0/
@@ -393,8 +419,6 @@ define Package/ath11k-wifi-cig-wf188n/install
$(INSTALL_DATA) ./board-cig-wf188n-us.bin.IPQ6018 $(1)/lib/firmware/ath11k/IPQ6018/hw1.0/board.bin.US
endef
$(eval $(call generate-ath11k-wifi-package,cig-wf186w,Cigtech WF186w))
$(eval $(call generate-ath11k-wifi-package,cig-wf186h,Cigtech WF186h))
$(eval $(call generate-ath11k-wifi-package,cig-wf660a,Cigtech WF660a))
$(eval $(call generate-ath11k-wifi-package,cig-wf194c,Cigtech WF194c))
$(eval $(call generate-ath11k-wifi-package,cig-wf194c4,Cigtech WF194c4))
@@ -440,6 +464,8 @@ $(eval $(call BuildPackage,ath11k-wifi-qcom-ipq8074))
$(eval $(call BuildPackage,ath11k-wifi-qcom-ipq6018))
$(eval $(call BuildPackage,ath11k-wifi-qcom-qcn9000))
$(eval $(call BuildPackage,ath11k-wifi-cig-wf196))
$(eval $(call BuildPackage,ath11k-wifi-cig-wf186w))
$(eval $(call BuildPackage,ath11k-wifi-cig-wf186h))
$(eval $(call BuildPackage,ath11k-wifi-motorola-q14))
$(eval $(call BuildPackage,ath11k-wifi-optimcloud-d50))
$(eval $(call BuildPackage,ath11k-wifi-optimcloud-d60))

View File

@@ -251,6 +251,32 @@ ath11k-macs)
;;
esac
;;
ath11k/IPQ5018/hw1.0/board.bin)
case "$board" in
cig,wf186w|\
cig,wf186h)
country=`cat /etc/ucentral/country`
if [ "$country" == "CA" ]; then
ln -s /lib/firmware/ath11k/IPQ5018/hw1.0/board.bin.CA /lib/firmware/ath11k/IPQ5018/hw1.0/board.bin
else
ln -s /lib/firmware/ath11k/IPQ5018/hw1.0/board.bin.US /lib/firmware/ath11k/IPQ5018/hw1.0/board.bin
fi
;;
esac
;;
ath11k/qcn6122/hw1.0/board.bin)
case "$board" in
cig,wf186w|\
cig,wf186h)
country=`cat /etc/ucentral/country`
if [ "$country" == "CA" ]; then
ln -s /lib/firmware/ath11k/qcn6122/hw1.0/board.bin.CA /lib/firmware/ath11k/qcn6122/hw1.0/board.bin
else
ln -s /lib/firmware/ath11k/qcn6122/hw1.0/board.bin.US /lib/firmware/ath11k/qcn6122/hw1.0/board.bin
fi
;;
esac
;;
*)
exit 1
;;

View File

@@ -0,0 +1,66 @@
#!/bin/sh /etc/rc.common
START=99
adjust_irq_affinity() {
#For 2G Radio
irq_affinity_num=`grep -E -m1 'reo2host-destination-ring4' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'reo2host-destination-ring3' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 1 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'reo2host-destination-ring2' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'reo2host-destination-ring1' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 1 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'wbm2host-tx-completions-ring3' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 3 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'wbm2host-tx-completions-ring2' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'wbm2host-tx-completions-ring1' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 1 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'reo2ost-exception' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'wbm2host-rx-release' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'reo2host-status' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
#For 5G Radio
irq_affinity_num=`grep -E -m1 'pci1_reo2host_destination_ring1' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 1 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_reo2host_destination_ring2' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_reo2host_destination_ring3' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 1 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_reo2host_destination_ring4' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_wbm2host_tx_completions_ring3' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_wbm2host_tx_completions_ring2' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_wbm2host_tx_completions_ring3' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 3 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_lmac_reo_misc_irq' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 3 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_ce0' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 1 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_ce1' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_ce2' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 1 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_ce3' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 2 > /proc/irq/$irq_affinity_num/smp_affinity
irq_affinity_num=`grep -E -m1 'pci1_ce5' /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
[ -n "$irq_affinity_num" ] && echo 3 > /proc/irq/$irq_affinity_num/smp_affinity
}
boot() {
. /lib/functions.sh
case "$(board_name)" in
cig,wf186h|\
cig,wf186w)
adjust_irq_affinity
;;
esac
}

View File

@@ -0,0 +1,50 @@
#!/bin/sh
. /lib/functions.sh
board=$(board_name)
phy_dir="/sys/kernel/debug/ieee80211"
# Count the number of phyX
phy_count=$(ls -d $phy_dir/phy* 2>/dev/null | wc -l)
echo "$phy_count" > /tmp/phy_count
case "$board" in
"edgecore,eap112")
phy1_file=/sys/kernel/debug/ieee80211/phy1/mt76/sr_enable
phy2_file=/sys/kernel/debug/ieee80211/phy2/mt76/sr_enable
if [ -f "$phy1_file" ]; then
check_phy1=$(cat $phy1_file)
[ "$check_phy1" == 0 ] && echo 1 > $phy1_file
fi
if [ -f "$phy2_file" ]; then
check_phy2=$(cat $phy2_file)
[ "$check_phy2" == 0 ] && echo 1 > $phy2_file
fi
# note: phy0 is HaLow
ln -s /sys/kernel/debug/ieee80211/phy1/mt76/sr_scene_cond /tmp/sr_scene_cond_phy2g
ln -s /sys/kernel/debug/ieee80211/phy2/mt76/sr_scene_cond /tmp/sr_scene_cond_phy5g
;;
"edgecore,eap111")
phy0_file=/sys/kernel/debug/ieee80211/phy0/mt76/sr_enable
phy1_file=/sys/kernel/debug/ieee80211/phy1/mt76/sr_enable
if [ -f "$phy0_file" ]; then
check_phy0=$(cat $phy0_file)
echo "check_phy0 = $check_phy0"
[ "$check_phy0" == 0 ] && echo 1 > $phy0_file
fi
if [ -f "$phy1_file" ]; then
check_phy1=$(cat $phy1_file)
echo "check_phy1 = $check_phy1"
[ "$check_phy1" == 0 ] && echo 1 > $phy1_file
fi
ln -s /sys/kernel/debug/ieee80211/phy0/mt76/sr_scene_cond /tmp/sr_scene_cond_phy2g
ln -s /sys/kernel/debug/ieee80211/phy1/mt76/sr_scene_cond /tmp/sr_scene_cond_phy5g
;;
esac

View File

@@ -1,107 +0,0 @@
# Description: The Mesh11sd daemon expects the mesh interface name to follow the format 'mesh<index>'.
# If it doesn't find this format, it attempts to set it in the UCI wireless configuration.
# However, when operating in other modes such as AP, STA, or Ad-Hoc, the script was patched to remove
# the mesh interface name from UCI. This process can lead to a race condition between the UI and Mesh11sd,
# resulting in stale interface name values.
# This patch resolves the issue by removing the setting of the interface name from the script, as it is
# now managed through the UI, ensuring consistency and eliminating the race condition.
--- a/src/mesh11sd
+++ b/src/mesh11sd
@@ -387,45 +387,45 @@ elif [ "$1" = "daemon" ]; then
if [ $mode -eq 5 ]; then
# startup=4, statusmode=0, enabled=1
+ syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
startup=0
statusmode=0
mode=1
- syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
elif [ $mode -eq 4 ]; then
# startup=4, statusmode=0, enabled=0
+ syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
startup=0
statusmode=2
mode=0
- syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
elif [ $mode -eq 3 ]; then
# startup=0, statusmode=2, enabled=1
+ syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
startup=0
statusmode=0
mode=1
- syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
elif [ $mode -eq 2 ]; then
# startup=0, statusmode=2, enabled=0
+ syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
startup=0
statusmode=2
mode=0
- syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
elif [ $mode -eq 1 ]; then
# startup=0, statusmode=0, enabled=1
+ syslogmessage="mesh11sd v$version has started, mesh management mode $mode"
startup=0
statusmode=0
mode=1
- syslogmessage="mesh11sd v$version has started, mesh management mode $mode"
elif [ $mode -eq 0 ]; then
# startup=0, statusmode=0, enabled=0
+ syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
startup=0
statusmode=2
mode=0
- syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
fi
if [ $mode -ne $lastmode ]; then
@@ -441,26 +441,6 @@ elif [ "$1" = "daemon" ]; then
meshconfigs=$(uci show wireless 2> /dev/null | grep "mode='mesh'" | awk -F ".mode='mesh'" '{printf "%s " $1}')
if [ ! -z "$meshconfigs" ]; then
- for meshconfig in $meshconfigs; do
- ifname=$(uci get $meshconfig.ifname 2> /dev/null)
-
- if [ -z "$ifname" ] || [ "$ifname" != "mesh$meshindex" ]; then
- # No interface name in config, so add one
- ucibatch="set $meshconfig.ifname='mesh$meshindex'"
- echo "$ucibatch" | uci batch
- changed=1
- syslogmessage="Setting mesh interface name to [ mesh$meshindex ]"
- write_to_syslog
- fi
- meshindex=$(($meshindex+1))
- done
-
- if [ "$changed" -eq 1 ]; then
- changed=0
- restart_mesh
- continue
- fi
-
# get a list of interfaces
get_mesh_iflist
@@ -482,13 +462,13 @@ elif [ "$1" = "daemon" ]; then
# this is not a mesh interface
continue
else
- # Check if this interface has a uci ifname
- uciname=$(uci show wireless | grep "ifname='$iface'" | awk -F "." '{printf "wireless.%s" $2}')
+ # Check if this interface mode is 'mesh'
+ uciname=$(uci show wireless | grep "mode='mesh'" | awk -F "." '{printf "wireless.%s" $2}')
if [ -z "$uciname" ]; then
- # Error - No interface name in config, we should have added one
+ # Error - No interface with mode as mesh
debugtype="err"
- syslogmessage="Error getting mesh interface name"
+ syslogmessage="Error getting mesh interface section"
write_to_syslog
continue
fi

View File

@@ -0,0 +1,63 @@
# Description: The Mesh11sd daemon sets the interface name 'mesh<index>' to the mesh interface.
# However, even after disabling the mesh mode, this interface name persists, leading to confusion
# when operating in other modes like AP/STA/Ad-Hoc, where the interface name continues to display as 'mesh<idx>'.
# This patch addresses the issue by removing the 'mesh<idx>' interface name from the configuration when the device
# is no longer in mesh mode. As this modification is not present in the upstream version, it is necessary to apply
# this local patch to resolve the inconsistency
diff --git a/src/mesh11sd b/src/mesh11sd
index 85041d3..5f50e97 100755
--- a/src/mesh11sd
+++ b/src/mesh11sd
@@ -387,45 +387,45 @@ elif [ "$1" = "daemon" ]; then
if [ $mode -eq 5 ]; then
# startup=4, statusmode=0, enabled=1
+ syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
startup=0
statusmode=0
mode=1
- syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
elif [ $mode -eq 4 ]; then
# startup=4, statusmode=0, enabled=0
+ syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
startup=0
statusmode=2
mode=0
- syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
elif [ $mode -eq 3 ]; then
# startup=0, statusmode=2, enabled=1
+ syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
startup=0
statusmode=0
mode=1
- syslogmessage="mesh11sd v$version has started: mesh management mode $mode"
elif [ $mode -eq 2 ]; then
# startup=0, statusmode=2, enabled=0
+ syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
startup=0
statusmode=2
mode=0
- syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
elif [ $mode -eq 1 ]; then
# startup=0, statusmode=0, enabled=1
+ syslogmessage="mesh11sd v$version has started, mesh management mode $mode"
startup=0
statusmode=0
mode=1
- syslogmessage="mesh11sd v$version has started, mesh management mode $mode"
elif [ $mode -eq 0 ]; then
# startup=0, statusmode=0, enabled=0
+ syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
startup=0
statusmode=2
mode=0
- syslogmessage="mesh11sd v$version has started: mesh status mode $mode"
fi
if [ $mode -ne $lastmode ]; then

View File

@@ -0,0 +1,39 @@
--- a/src/mesh11sd 2024-09-06 17:13:52.075070001 +0800
+++ b/src/mesh11sd 2024-09-06 17:47:36.326914438 +0800
@@ -434,7 +434,6 @@
fi
lastmode=$mode
- meshindex=0
if [ "$enabled" = 1 ]; then
#get list of mesh configs
@@ -443,16 +442,19 @@
if [ ! -z "$meshconfigs" ]; then
for meshconfig in $meshconfigs; do
ifname=$(uci get $meshconfig.ifname 2> /dev/null)
-
- if [ -z "$ifname" ] || [ "$ifname" != "mesh$meshindex" ]; then
- # No interface name in config, so add one
- ucibatch="set $meshconfig.ifname='mesh$meshindex'"
- echo "$ucibatch" | uci batch
- changed=1
- syslogmessage="Setting mesh interface name to [ mesh$meshindex ]"
- write_to_syslog
+ device=$(uci -q get $meshconfig.device)
+ device_type=$(uci -q get wireless.$device.type)
+ new_ifname="halow_mesh"
+ if [ "$device_type" == "morse" ]; then
+ if [ -z "$ifname" ] || [ "$ifname" != "$new_ifname" ]; then
+ # No interface name in config, so add one
+ ucibatch="set $meshconfig.ifname='$new_ifname'"
+ echo "$ucibatch" | uci batch
+ changed=1
+ syslogmessage="Setting mesh interface name to [ $new_ifname ]"
+ write_to_syslog
+ fi
fi
- meshindex=$(($meshindex+1))
done
if [ "$changed" -eq 1 ]; then

View File

@@ -2,7 +2,7 @@ if PACKAGE_wpa_supplicant_s1g
config MORSE_WPA_SUPPLICANT_S1G_MESH_NETWORKING
bool
default n
default y
prompt "Enable mesh networking support"
config MORSE_WPA_SUPPLICANT_S1G_EAP

View File

@@ -43,6 +43,11 @@ $(call Package/ath12k-wifi-default)
TITLE:=board-2.bin for EAP105
endef
define Package/ath12k-wifi-emplus-wap7635
$(call Package/ath12k-wifi-default)
TITLE:=board-2.bin for WAP7635
endef
define Package/ath12k-wifi-sonicfi-rap7110c-341x
$(call Package/ath12k-wifi-default)
TITLE:=board-2.bin for RAP7710c_341x
@@ -96,8 +101,8 @@ endef
define Package/ath12k-wifi-cig-wf189/install
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
$(INSTALL_DATA) ./board-2.bin.wf189.QCN92XX $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin
$(INSTALL_DATA) ./board-2.bin.wf189.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
$(INSTALL_DATA) ./board-2.bin.wf189-us.QCN92XX $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin.US
$(INSTALL_DATA) ./board-2.bin.wf189-us.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin.US
endef
define Package/ath12k-wifi-edgecore-eap105/install
@@ -107,6 +112,13 @@ define Package/ath12k-wifi-edgecore-eap105/install
$(INSTALL_DATA) ./board-2.bin.eap105.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
endef
define Package/ath12k-wifi-emplus-wap7635/install
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
$(INSTALL_DATA) ./board-2.bin.wap7635.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
$(INSTALL_DATA) ./board-2.bin.wap7635.QCN6274 $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin
endef
define Package/ath12k-wifi-sonicfi-rap7110c-341x/install
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
@@ -144,8 +156,8 @@ endef
define Package/ath12k-wifi-cig-wf189w/install
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN6432/hw1.0/
$(INSTALL_DATA) ./board-2.bin.189w.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
$(INSTALL_DATA) ./board-2.bin.189w.QCN6432 $(1)/lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin
$(INSTALL_DATA) ./board-2.bin.189w-us.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin.US
$(INSTALL_DATA) ./board-2.bin.189w-us.QCN6432 $(1)/lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin.US
$(INSTALL_DATA) ./ipq5332_qcn6432.regdb $(1)/lib/firmware/ath12k/QCN6432/hw1.0/regdb.bin
endef
@@ -153,8 +165,8 @@ endef
define Package/ath12k-wifi-cig-wf189h/install
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN6432/hw1.0/
$(INSTALL_DATA) ./board-2.bin.189h.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
$(INSTALL_DATA) ./board-2.bin.189h.QCN6432 $(1)/lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin
$(INSTALL_DATA) ./board-2.bin.189h-us.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin.US
$(INSTALL_DATA) ./board-2.bin.189h-us.QCN6432 $(1)/lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin.US
$(INSTALL_DATA) ./ipq5332_qcn6432.regdb $(1)/lib/firmware/ath12k/QCN6432/hw1.0/regdb.bin
endef
@@ -182,12 +194,13 @@ endef
define Package/ath12k-wifi-cig-wf672/install
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
$(INSTALL_DATA) ./board-2.bin.wf672.QCN92XX $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin
$(INSTALL_DATA) ./board-2.bin.wf672.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
$(INSTALL_DATA) ./board-2.bin.wf672-us.QCN92XX $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin.US
$(INSTALL_DATA) ./board-2.bin.wf672-us.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin.US
endef
$(eval $(call BuildPackage,ath12k-wifi-cig-wf189))
$(eval $(call BuildPackage,ath12k-wifi-edgecore-eap105))
$(eval $(call BuildPackage,ath12k-wifi-emplus-wap7635))
$(eval $(call BuildPackage,ath12k-wifi-sonicfi-rap7110c-341x))
$(eval $(call BuildPackage,ath12k-wifi-sonicfi-rap750e-h))
$(eval $(call BuildPackage,ath12k-wifi-sonicfi-rap750e-s))

View File

@@ -7,6 +7,11 @@ board_config_update
board=$(board_name)
case "$board" in
emplus,wap7635)
ucidef_set_led_default "ledb" "LEDB" "sys:blue" "on"
ucidef_set_led_default "ledg" "LEDG" "sys:green" "off"
ucidef_set_led_default "ledr" "LEDR" "sys:red" "off"
;;
sercomm,ap72tip-v4|\
sercomm,ap72tip)
ucidef_set_led_default "power" "POWER" "blue:status" "on"

View File

@@ -13,7 +13,6 @@ ipq53xx_setup_interfaces()
ucidef_set_interfaces_lan_wan "eth1 eth2 eth3 eth4 eth5" "eth0"
;;
cig,wf189|\
cig,wf672|\
edgecore,eap105|\
sercomm,ap72tip|\
sonicfi,rap750w-311a)
@@ -32,6 +31,10 @@ ipq53xx_setup_interfaces()
ucidef_set_interfaces_lan_wan "eth1" "eth0"
ucidef_add_switch "switch1" "0u@eth1" "3:lan" "2:lan"
;;
cig,wf672)
ucidef_set_interface_wan "eth0 eth1"
;;
emplus,wap7635|\
sercomm,ap72tip-v4)
ucidef_set_interface_wan "eth0"
;;
@@ -104,6 +107,7 @@ qcom_setup_macs()
ucidef_set_wireless_macaddr_base 2g $(macaddr_add "$wan_mac" 2)
ucidef_set_wireless_macaddr_base 5g $(macaddr_add "$wan_mac" 3)
;;
emplus,wap7635|\
sercomm,ap72tip-v4)
wan_mac=$(cat /sys/class/net/eth0/address)
ucidef_set_wireless_macaddr_base 2g $(macaddr_add "$wan_mac" 1)

View File

@@ -64,6 +64,7 @@ ath12k/IPQ5332/hw1.0/caldata.bin)
cig,wf189h|\
cig,wf189|\
edgecore,eap105|\
emplus,wap7635|\
sercomm,ap72tip-v4|\
sercomm,ap72tip|\
zyxel,nwa130be)
@@ -86,6 +87,7 @@ ath12k/QCN92XX/hw1.0/cal-pci-0001:01:00.0.bin)
case "$board" in
cig,wf189|\
edgecore,eap105|\
emplus,wap7635|\
sercomm,ap72tip-v4|\
sercomm,ap72tip|\
zyxel,nwa130be)
@@ -124,6 +126,47 @@ ath12k/QCN6432/hw1.0/cal-ahb-soc@0:wifi2@c0000000.bin)
;;
esac
;;
ath12k/IPQ5332/hw1.0/board-2.bin)
case "$board" in
cig,wf189|\
cig,wf189h|\
cig,wf189w|\
cig,wf672)
country=`cat /etc/ucentral/country`
if [ "$country" == "CA" ]; then
ln -s /lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin.CA /lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
else
ln -s /lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin.US /lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
fi
;;
esac
;;
ath12k/QCN6432/hw1.0/board-2.bin)
case "$board" in
cig,wf189h|\
cig,wf189w)
country=`cat /etc/ucentral/country`
if [ "$country" == "CA" ]; then
ln -s /lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin.CA /lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin
else
ln -s /lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin.US /lib/firmware/ath12k/QCN6432/hw1.0/board-2.bin
fi
;;
esac
;;
ath12k/QCN92XX/hw1.0/board-2.bin)
case "$board" in
cig,wf189|\
cig,wf672)
country=`cat /etc/ucentral/country`
if [ "$country" == "CA" ]; then
ln -s /lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin.CA /lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin
else
ln -s /lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin.US /lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin
fi
;;
esac
;;
*)
exit 1
;;

View File

@@ -136,7 +136,8 @@ platform_do_upgrade() {
sercomm,ap72tip|\
cig,wf189w|\
cig,wf189h|\
cig,wf189)
cig,wf189|\
emplus,wap7635)
if [ -f /proc/boot_info/bootconfig0/rootfs/upgradepartition ]; then
CI_UBIPART="$(cat /proc/boot_info/bootconfig0/rootfs/upgradepartition)"
CI_BOOTCFG=1

View File

@@ -0,0 +1,413 @@
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
/*
* IPQ5332 RDP468 board device tree source
*
* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*/
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include "ipq5332.dtsi"
#include "ipq5332-default-memory.dtsi"
/ {
model = "Emplus WAP7635";
compatible = "emplus,wap7635", "qcom,ipq5332-ap-mi01.6", "qcom,ipq5332";
aliases {
serial0 = &blsp1_uart0; /*console*/
ethernet0 = "/soc/dp1";
led-boot = &led_power_green;
led-failsafe = &led_power_red;
led-running = &led_power_green;
led-upgrade = &led_power_green;
};
chosen {
stdout-path = "serial0";
};
soc@0 {
mdio:mdio@90000 {
pinctrl-0 = <&mdio1_pins>;
pinctrl-names = "default";
phy-reset-gpio = <&tlmm 51 GPIO_ACTIVE_LOW>;
phyaddr_fixup = <0xC90F018>;
uniphyaddr_fixup = <0xC90F014>;
mdio_clk_fixup; /* MDIO clock sequence fix up flag */
status = "okay";
phy0: ethernet-phy@0 {
reg = <24>;
};
};
ess-instance {
/*num_devices = <0x1>;*/
ess-switch@3a000000 {
switch_cpu_bmp = <0x1>; /* cpu port bitmap */
switch_lan_bmp = <0x2>; /* lan port bitmap */
switch_wan_bmp = <0>; /* wan port bitmap */
switch_mac_mode = <0xf>; /* mac mode for uniphy instance0*/
switch_mac_mode1 = <0xd>; /* mac mode for uniphy instance1*/
switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/
qcom,port_phyinfo {
port@0 {
port_id = <1>;
phy_address = <24>;
mdiobus = <&mdio>;
ethernet-phy-ieee802.3-c45;
};
};
};
};
dp1 {
device_type = "network";
compatible = "qcom,nss-dp";
qcom,id = <1>;
reg = <0x3a500000 0x4000>;
qcom,mactype = <1>;
local-mac-address = [000000000000];
mdio-bus = <&mdio>;
qcom,phy-mdio-addr = <24>;
qcom,link-poll = <1>;
phy-mode = "sgmii";
/* phy-mode = "usxgmii"; */
};
/* EDMA host driver configuration for the board */
edma@3ab00000 {
qcom,txdesc-ring-start = <4>; /* Tx desc ring start ID */
qcom,txdesc-rings = <12>; /* Total number of Tx desc rings to be provisioned */
qcom,mht-txdesc-rings = <8>; /* Extra Tx desc rings to be provisioned for MHT SW ports */
qcom,txcmpl-ring-start = <4>; /* Tx complete ring start ID */
qcom,txcmpl-rings = <12>; /* Total number of Tx complete rings to be provisioned */
qcom,mht-txcmpl-rings = <8>; /* Extra Tx complete rings to be provisioned for mht sw ports. */
qcom,rxfill-ring-start = <4>; /* Rx fill ring start ID */
qcom,rxfill-rings = <4>; /* Total number of Rx fill rings to be provisioned */
qcom,rxdesc-ring-start = <12>; /* Rx desc ring start ID */
qcom,rxdesc-rings = <4>; /* Total number of Rx desc rings to be provisioned */
qcom,rx-page-mode = <0>; /* Rx fill ring page mode */
qcom,tx-map-priority-level = <1>; /* Tx priority level per port */
qcom,rx-map-priority-level = <1>; /* Rx priority level per core */
qcom,ppeds-num = <2>; /* Number of PPEDS nodes */
/* PPE-DS node format: <Rx-fill Tx-cmpl Rx Tx Queue-base Queue-count> */
qcom,ppeds-map = <1 1 1 1 32 8>, /* PPEDS Node#0 ring and queue map */
<2 2 2 2 40 8>; /* PPEDS Node#1 ring and queue map */
qcom,txdesc-map = <8 9 10 11>, /* Port0 per-core Tx ring map */
<12 13 14 15>, /* MHT-Port1 per-core Tx ring map */
<4 5 6 7>, /* MHT-Port2 per-core Tx ring map/packets from vp*/
<16 17 18 19>, /* MHT-Port3 per-core Tx ring map */
<20 21 22 23>; /* MHT-Port4 per-core Tx ring map */
qcom,txdesc-fc-grp-map = <1 2 3 4 5>; /* Per GMAC flow control group map */
qcom,rxfill-map = <4 5 6 7>; /* Per-core Rx fill ring map */
qcom,rxdesc-map = <12 13 14 15>; /* Per-core Rx desc ring map */
qcom,rx-queue-start = <0>; /* Rx queue start */
qcom,rx-ring-queue-map = <0 8 16 24>, /* Priority 0 queues per-core Rx ring map */
<1 9 17 25>, /* Priority 1 queues per-core Rx ring map */
<2 10 18 26>, /* Priority 2 queues per-core Rx ring map */
<3 11 19 27>, /* Priority 3 queues per-core Rx ring map */
<4 12 20 28>, /* Priority 4 queues per-core Rx ring map */
<5 13 21 29>, /* Priority 5 queues per-core Rx ring map */
<6 14 22 30>, /* Priority 6 queues per-core Rx ring map */
<7 15 23 31>; /* Priority 7 queues per-core Rx ring map */
interrupts = <0 163 4>, /* Tx complete ring id #4 IRQ info */
<0 164 4>, /* Tx complete ring id #5 IRQ info */
<0 165 4>, /* Tx complete ring id #6 IRQ info */
<0 166 4>, /* Tx complete ring id #7 IRQ info */
<0 167 4>, /* Tx complete ring id #8 IRQ info */
<0 168 4>, /* Tx complete ring id #9 IRQ info */
<0 169 4>, /* Tx complete ring id #10 IRQ info */
<0 170 4>, /* Tx complete ring id #11 IRQ info */
<0 171 4>, /* Tx complete ring id #12 IRQ info */
<0 172 4>, /* Tx complete ring id #13 IRQ info */
<0 173 4>, /* Tx complete ring id #14 IRQ info */
<0 174 4>, /* Tx complete ring id #15 IRQ info */
<0 139 4>, /* Rx desc ring id #12 IRQ info */
<0 140 4>, /* Rx desc ring id #13 IRQ info */
<0 141 4>, /* Rx desc ring id #14 IRQ info */
<0 142 4>, /* Rx desc ring id #15 IRQ info */
<0 191 4>, /* Misc error IRQ info */
<0 155 4>, /* RxFill ring id #4 IRQ info */
<0 156 4>, /* RxFill ring id #5 IRQ info */
<0 157 4>, /* RxFill ring id #6 IRQ info */
<0 158 4>, /* RxFill ring id #7 IRQ info */
<0 160 4>, /* PPEDS Node #1(TxComp ring id #1) TxComplete IRQ info */
<0 128 4>, /* PPEDS Node #1(Rx Desc ring id #1) Rx Desc IRQ info */
<0 152 4>, /* PPEDS Node #1(RxFill Desc ring id #1) Rx Fill IRQ info */
<0 161 4>, /* PPEDS Node #2(TxComp ring id #2) TxComplete IRQ info */
<0 129 4>, /* PPEDS Node #2(Rx Desc ring id #2) Rx Desc IRQ info */
<0 153 4>, /* PPEDS Node #2(RxFill Desc ring id #2) Rx Fill IRQ info */
<0 175 4>, /* MHT port Tx complete ring id #16 IRQ info */
<0 176 4>, /* MHT port Tx complete ring id #17 IRQ info */
<0 177 4>, /* MHT port Tx complete ring id #18 IRQ info */
<0 178 4>, /* MHT port Tx complete ring id #19 IRQ info */
<0 179 4>, /* MHT port Tx complete ring id #20 IRQ info */
<0 180 4>, /* MHT port Tx complete ring id #21 IRQ info */
<0 181 4>, /* MHT port Tx complete ring id #22 IRQ info */
<0 182 4>; /* MHT port Tx complete ring id #23 IRQ info */
};
leds {
compatible = "gpio-leds";
led_power_blue: led@34 {
label = "sys:blue";
gpios = <&tlmm 34 GPIO_ACTIVE_HIGH>;
default-state = "off";
};
led_power_green: led@35 {
label = "sys:green";
gpios = <&tlmm 35 GPIO_ACTIVE_HIGH>;
default-state = "off";
};
led_power_red: led@37 {
label = "sys:red";
gpios = <&tlmm 37 GPIO_ACTIVE_HIGH>;
default-state = "off";
};
};
gpio_keys {
compatible = "gpio-keys";
pinctrl-0 = <&button_pins>;
pinctrl-names = "default";
button@1 {
label = "reset";
linux,code = <KEY_RESTART>;
gpios = <&tlmm 24 GPIO_ACTIVE_LOW>;
linux,input-type = <1>;
debounce-interval = <60>;
};
};
wsi: wsi {
id = <0>;
num_chip = <2>;
status = "okay";
chip_info = <0 1 1>,
<1 1 0>;
};
};
};
&wifi0 {
led-gpio = <&tlmm 36 GPIO_ACTIVE_HIGH>;
qcom,rproc = <&q6_wcss_pd1>;
qcom,rproc_rpd = <&q6v5_wcss>;
qcom,multipd_arch;
qcom,userpd-subsys-name = "q6v5_wcss_userpd1";
memory-region = <&q6_region>;
qcom,wsi = <&wsi>;
qcom,wsi_index = <0>;
qcom,board_id = <0x16>;
status = "okay";
};
&mhi_region1 {
status = "okay";
};
&qcn9224_pcie1 {
status = "okay";
};
/* QCN9224 5G+6G */
&wifi4 {
hremote_node = <&qcn9224_pcie1>;
board_id = <0x1019>;
node_id = <0x1>;
status = "okay";
};
&blsp1_uart0 {
pinctrl-0 = <&serial_0_pins>;
pinctrl-names = "default";
status = "okay";
};
&blsp1_uart1 {
pinctrl-0 = <&serial_1_pins>;
pinctrl-names = "default";
status = "disabled";
};
&sdhc {
bus-width = <4>;
max-frequency = <192000000>;
mmc-ddr-1_8v;
mmc-hs200-1_8v;
non-removable;
pinctrl-0 = <&sdc_default_state>;
pinctrl-names = "default";
status = "disabled";
};
&sleep_clk {
clock-frequency = <32000>;
};
&xo {
clock-frequency = <24000000>;
};
&qpic_bam {
status = "okay";
};
&qpic_nand {
pinctrl-0 = <&qspi_default_state>;
pinctrl-names = "default";
status = "okay";
nandcs@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <1>;
nand-ecc-strength = <8>;
nand-ecc-step-size = <512>;
nand-bus-width = <8>;
};
};
&pcie1_phy_x2 {
status = "okay";
};
&pcie1 {
pinctrl-0 = <&pcie1_default_state>;
pinctrl-names = "default";
perst-gpios = <&tlmm 45 GPIO_ACTIVE_LOW>;
status = "okay";
pcie1_rp {
reg = <0 0 0 0 0>;
qcom,mhi@1 {
reg = <0 0 0 0 0>;
boot-args = <0x2 0x4 0x34 0x3 0x0 0x0 /* MX Rail, GPIO52, Drive strength 0x3 */
0x4 0x4 0x18 0x3 0x0 0x0 /* RFA1p2 Rail, GPIO24, Drive strength 0x3 */
0x0 0x4 0x0 0x0 0x0 0x0>; /* End of arguments */
memory-region = <&qcn9224_pcie1>;
qcom,wsi = <&wsi>;
qcom,wsi_index = <1>;
qcom,board_id = <0x1019>;
};
};
};
/* PINCTRL */
&tlmm {
sdc_default_state: sdc-default-state {
clk-pins {
pins = "gpio13";
function = "sdc_clk";
drive-strength = <8>;
bias-disable;
};
cmd-pins {
pins = "gpio12";
function = "sdc_cmd";
drive-strength = <8>;
bias-pull-up;
};
data-pins {
pins = "gpio8", "gpio9", "gpio10", "gpio11";
function = "sdc_data";
drive-strength = <8>;
bias-pull-up;
};
};
spi_0_data_clk_pins: spi-0-data-clk-state {
pins = "gpio14", "gpio15", "gpio16";
function = "blsp0_spi";
drive-strength = <2>;
bias-pull-down;
};
spi_0_cs_pins: spi-0-cs-state {
pins = "gpio17";
function = "blsp0_spi";
drive-strength = <2>;
bias-pull-up;
};
qspi_default_state: qspi-default-state {
qspi_clock {
pins = "gpio13";
function = "qspi_clk";
drive-strength = <8>;
bias-pull-down;
};
qspi_cs {
pins = "gpio12";
function = "qspi_cs";
drive-strength = <8>;
bias-pull-up;
};
qspi_data {
pins = "gpio8", "gpio9", "gpio10", "gpio11";
function = "qspi_data";
drive-strength = <8>;
bias-pull-down;
};
};
serial_1_pins: serial1-pinmux { /*ble*/
pins = "gpio33", "gpio35";
function = "blsp1_uart2";
drive-strength = <8>;
bias-pull-up;
};
button_pins: button-state {
pins = "gpio24";
function = "gpio";
drive-strength = <8>;
bias-pull-up;
};
pcie1_default_state: pcie1-default-state {
pins = "gpio45";
function = "gpio";
drive-strength = <8>;
bias-pull-up;
output-low;
};
};
&license_manager {
status = "okay";
};
&usb3 {
qcom,multiplexed-phy;
status = "disabled";
};
&hs_m31phy_0 {
status = "okay";
};
&hs_m31phy_0 {
status = "okay";
};
&ssuniphy_0 {
status = "okay";
};

View File

@@ -52,6 +52,19 @@ define Device/edgecore_eap105
endef
TARGET_DEVICES += edgecore_eap105
define Device/emplus_wap7635
DEVICE_TITLE := EMPLUS WAP7635
DEVICE_DTS := ipq5332-emplus-wap7635
DEVICE_DTS_DIR := ../dts
DEVICE_DTS_CONFIG := config@mi01.6
IMAGES := sysupgrade.tar nand-factory.bin nand-factory.ubi
IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata
IMAGE/nand-factory.bin := append-ubi | qsdk-ipq-factory-nand
IMAGE/nand-factory.ubi := append-ubi
DEVICE_PACKAGES := ath12k-wifi-emplus-wap7635 ath12k-firmware-qcn92xx ath12k-firmware-ipq5332
endef
TARGET_DEVICES += emplus_wap7635
define Device/sonicfi_rap7110c_341x
DEVICE_TITLE := SONICFI RAP7110C-341X
DEVICE_DTS := ipq5332-sonicfi-rap7110c-341x

View File

@@ -20,6 +20,7 @@ copy_certificates() {
[ -z "$country" ] && country=US
echo "options cfg80211 ieee80211_regdom="$country > /etc/modules.conf
echo -n $country > /etc/ucentral/country
sync
exit 0
}

View File

@@ -91,6 +91,7 @@ function gateway_write(data) {
}
if (changed)
fs.writefile('/etc/ucentral/gateway.json', new);
system('sync');
return changed;
}

View File

@@ -78,7 +78,7 @@ function call_est_server(path, cert, target) {
if (generate_csr(cert))
return 1;
let ret = system('curl -X POST https://' + est_server + '/.well-known/est/' + path + ' -d @/tmp/csr.nohdr.p10 -H "Content-Type: application/pkcs10" --cert ' + cert + ' --key /etc/ucentral/key.pem --cacert /etc/ucentral/insta.pem -o /tmp/operational.nohdr.p7');
let ret = system('curl -m 10 -X POST https://' + est_server + '/.well-known/est/' + path + ' -d @/tmp/csr.nohdr.p10 -H "Content-Type: application/pkcs10" --cert ' + cert + ' --key /etc/ucentral/key.pem --cacert /etc/ucentral/insta.pem -o /tmp/operational.nohdr.p7');
if (ret) {
ulog(LOG_INFO, 'Failed to request operational certificate\n');
return 1;
@@ -125,7 +125,7 @@ function load_operational_ca() {
ulog(LOG_INFO, 'Operational CA is present\n');
return 0;
}
let ret = system('curl -X GET https://' + est_server + '/.well-known/est/cacerts --cert /etc/ucentral/' + cert_prefix + '.pem --key /etc/ucentral/key.pem --cacert /etc/ucentral/insta.pem -o /tmp/' + cert_prefix + '.ca.nohdr.p7');
let ret = system('curl -m 10 -X GET https://' + est_server + '/.well-known/est/cacerts --cert /etc/ucentral/' + cert_prefix + '.pem --key /etc/ucentral/key.pem --cacert /etc/ucentral/insta.pem -o /tmp/' + cert_prefix + '.ca.nohdr.p7');
if (!ret)
ret = p7_too_pem('/tmp/' + cert_prefix + '.ca.nohdr.p7', '/etc/ucentral/' + cert_prefix + '.ca');
if (ret) {

View File

@@ -350,7 +350,7 @@ function run_service() {
printf('-> reload\n');
let list = uctx.list();
for (let obj in list) {
if (!wildcard(obj, 'hostapd.wlan*'))
if (!wildcard(obj, 'hostapd.wlan*') && !wildcard(obj, 'hostapd.phy*'))
continue;
let iface = split(obj, '.')[1];
let device = get_device(devices, req.args.device);

View File

@@ -8,6 +8,7 @@ USE_PROCD=1
start_service() {
rm -rf /tmp/threshold_breach_count*
rm -rf /tmp/fixed_channel*
rm -rf /tmp/chanutil_phy*
procd_open_instance
procd_set_param command /usr/bin/rrmd.uc

View File

@@ -11,19 +11,6 @@ let config = {
consecutive_threshold_breach: 1,
};
// total number of radios: default=2
let num_radios = 2;
let board_name = board_info.board_name;
switch(board_name) {
case 'edgecore,eap105':
case 'edgecore,oap101-6e':
case 'edgecore,oap101e-6e':
case 'zyxel,nwa130be':
num_radios = 3;
break;
}
function stats_info_read(path) {
let res = trim(fs.readfile(path));
return res || 0;
@@ -37,6 +24,25 @@ function stats_info_write(path, value) {
file.close();
}
// total number of radios: default=2
let num_radios = 2;
let phy_count;
let board_name = board_info.board_name;
switch(board_name) {
case 'edgecore,eap105':
case 'edgecore,oap101-6e':
case 'edgecore,oap101e-6e':
case 'zyxel,nwa130be':
num_radios = 3;
break;
case 'edgecore,eap112':
phy_count = stats_info_read("/tmp/phy_count");
if (phy_count)
num_radios = int(phy_count);
break;
}
function cool_down_check(iface, cool_down_period) {
let now_t = time();
let cool_down_f= 0;
@@ -151,6 +157,23 @@ function interface_status_check(iface) {
let radio_status = 'DISABLED';
let radio_down_f = 1;
if (board_info.board_name == 'edgecore,eap112' && phy_count == 3) {
// hostapd_cli_s1g status | grep 'Selected interface'| awk -F "\'" '{print $2}'
let check_HaLow_iface_cmd = sprintf('hostapd_cli_s1g status | grep \'Selected interface\'| awk -F "\'" \'{print $2}\'');
let check_HaLow_iface = fs.popen(check_HaLow_iface_cmd);
let _check_HaLow_iface = trim(check_HaLow_iface.read('all'));
check_HaLow_iface.close();
if (_check_HaLow_iface && _check_HaLow_iface == iface) {
ulog_info(`[%s] This is a HaLow interface \n`, _check_HaLow_iface);
// this iface is HaLow interface and we can neither check channel utilization nor switch channel, we can check if it is UP
radio_down_f = 2;
ulog_info(`[%s] status: ENABLED \n`, iface, radio_status);
return radio_down_f;
}
}
let curr_stat = global.ubus.conn.call(`hostapd.${iface}`, 'get_status');
if (curr_stat) {
radio_status = curr_stat.status;
@@ -162,9 +185,12 @@ function interface_status_check(iface) {
}
function check_current_channel(iface) {
let current_channel;
// get wireless interface's live status & channel using "ubus call hostapd.<iface> get_status"
let curr_stat = global.ubus.conn.call(`hostapd.${iface}`, 'get_status');
let current_channel = curr_stat.channel;
if (curr_stat)
current_channel = curr_stat.channel;
if (curr_stat && current_channel) {
ulog_info(`[%s] Current channel (from hostapd) = %d \n`, iface, current_channel);
}
@@ -186,7 +212,7 @@ function hostapd_switch_channel(msg) {
if (bandwidth > 20)
sec_channel_offset = 1;
// use hostadp_cli command
// use hostapd_cli command
if (target_freq != null) {
ulog_info(`Sending to hostapd (Chan %d):: freq=%d, center_freq=%d, sec_channel_offset=%d, bandwidth=%d, mode=%s \n`, msg.channel, target_freq, center_freq, sec_channel_offset, bandwidth, mode);
@@ -213,9 +239,9 @@ function hostapd_switch_channel(msg) {
return chan_switch_status;
}
function switch_status_check(iface, dfs_enabled_5g_index) {
function switch_status_check(iface, dfs_enabled_5g_flag) {
// need to wait for radio 5GHz interface to be UP, when DFS is enabled
if (dfs_enabled_5g_index == 1) {
if (dfs_enabled_5g_flag == 1) {
ulog_info(`[%s] 5G radio might need some time to be UP (DFS enabled) \n`, iface);
let p = 0;
@@ -245,24 +271,25 @@ function switch_status_check(iface, dfs_enabled_5g_index) {
return current_chan;
}
function dfs_chan_check(iface_num, rcs_channel) {
function dfs_chan_check(iface, rcs_channel) {
let iface_num = replace(iface, /[^0-9]/g, '');
let phy_id = 'phy' + iface_num;
if (board_name == 'edgecore,eap105') {
phy_id = 'phy00';
}
let dfs_enabled_5g = 0;
let dfs_chan_list = global.phy.phys[phy_id].dfs_channels;
let dfs_enabled_5g_f = 0;
let dfs_chan_list = global.phy.phys[phy_id].dfs_channels;
// check if rcs_channel is in dfs_channel list
for (let dfs_chan in dfs_chan_list) {
if (dfs_chan == rcs_channel) {
// flag up if dfs channel detected
dfs_enabled_5g = 1;
dfs_enabled_5g_f = 1;
break;
}
}
return dfs_enabled_5g;
return dfs_enabled_5g_f;
}
function fixed_channel_config(iface, iface_num, fixed_channel_f, auto_channel_f, fixed_chan_bkp, channel_config) {
@@ -297,7 +324,9 @@ function get_chan_util(radio_band, sleep_time) {
txFrameCount: null,
rxFrameCount: null,
rxClearCount: null,
chanBusyTime: null,
cycleCount: null,
chanActiveTime: null,
};
for (let c = 0; c < 2; c++) {
@@ -308,67 +337,86 @@ function get_chan_util(radio_band, sleep_time) {
txFrameCount: null,
rxFrameCount: null,
rxClearCount: null,
chanBusyTime: null,
cycleCount: null,
chanActiveTime: null,
};
pdev_stats = split(stats_info_read(pdev_stats_file), "\n");
if (board_info.board_name == 'edgecore,eap111' || board_info.board_name == 'edgecore,eap112') {
// for EAP111 and EAP112 (only 2.4G and 5G radio bands)
system(`cat /tmp/sr_scene_cond_phy${radio_band}`);
// logread -e "Congestion Ratio" | tail -n 1 | awk -F'= ' '{print $2}' | tr -d '%'
let cmd = sprintf('logread -e \"Congestion Ratio\" | tail -n 1 | awk -F\'= \' \'{print $2}\' | tr -d \'\%\'');
let chan_util_cmd = fs.popen(cmd);
let _chan_util = chan_util_cmd.read('all');
chan_util_cmd.close();
if (pdev_stats != null) {
for (let curr_value in pdev_stats) {
let txFrameCount = match(trim(curr_value), /^TX frame count(\s+\d+)/);
if (txFrameCount)
curr_values.txFrameCount = trim(txFrameCount[1]);
chan_util = int(_chan_util);
break;
} else {
pdev_stats = split(stats_info_read(pdev_stats_file), "\n");
let rxFrameCount = match(trim(curr_value), /^RX frame count(\s+\d+)/);
if (rxFrameCount)
curr_values.rxFrameCount = trim(rxFrameCount[1]);
if (pdev_stats != null) {
for (let curr_value in pdev_stats) {
let txFrameCount = match(trim(curr_value), /^TX frame count(\s+\d+)/);
if (txFrameCount)
curr_values.txFrameCount = int(trim(txFrameCount[1]));
let rxClearCount = match(trim(curr_value), /^RX clear count(\s+\d+)/);
if (rxClearCount)
curr_values.rxClearCount = trim(rxClearCount[1]);
let rxFrameCount = match(trim(curr_value), /^RX frame count(\s+\d+)/);
if (rxFrameCount)
curr_values.rxFrameCount = int(trim(rxFrameCount[1]));
let cycleCount = match(trim(curr_value), /^Cycle count(\s+\d+)/);
if (cycleCount)
curr_values.cycleCount = trim(cycleCount[1]);
let rxClearCount = match(trim(curr_value), /^RX clear count(\s+\d+)/);
if (rxClearCount)
curr_values.rxClearCount = int(trim(rxClearCount[1]));
if (curr_values.txFrameCount && curr_values.rxFrameCount && curr_values.rxClearCount && curr_values.cycleCount) {
break;
let cycleCount = match(trim(curr_value), /^Cycle count(\s+\d+)/);
if (cycleCount)
curr_values.cycleCount = int(trim(cycleCount[1]));
if (curr_values.txFrameCount && curr_values.rxFrameCount && curr_values.rxClearCount && curr_values.cycleCount) {
break;
}
}
let ignore = 0;
if (!prev_values.txFrameCount || !prev_values.rxFrameCount || !prev_values.rxClearCount || !prev_values.cycleCount) {
ignore = 1;
}
if ((curr_values.cycleCount) <= (prev_values.cycleCount) || (curr_values.txFrameCount) < (prev_values.txFrameCount) ||
(curr_values.rxFrameCount) < (prev_values.rxFrameCount) || (curr_values.rxClearCount) < (prev_values.rxClearCount)) {
ignore = 1;
}
if (ignore != 1) {
let cycle_count_delta = curr_values.cycleCount - prev_values.cycleCount;
let rx_clear_delta = curr_values.rxClearCount - prev_values.rxClearCount;
if (cycle_count_delta && cycle_count_delta > 0)
total_usage = (rx_clear_delta * 100) / cycle_count_delta;
chan_util = total_usage;
}
prev_values.txFrameCount=curr_values.txFrameCount;
prev_values.rxFrameCount=curr_values.rxFrameCount;
prev_values.rxClearCount=curr_values.rxClearCount;
prev_values.cycleCount=curr_values.cycleCount;
}
let ignore = 0;
if (!prev_values.txFrameCount || !prev_values.rxFrameCount || !prev_values.rxClearCount || !prev_values.cycleCount) {
ignore = 1;
}
if ((curr_values.cycleCount) <= (prev_values.cycleCount) || (curr_values.txFrameCount) < (prev_values.txFrameCount) ||
(curr_values.rxFrameCount) < (prev_values.rxFrameCount) || (curr_values.rxClearCount) < (prev_values.rxClearCount)) {
ignore = 1;
}
if (ignore != 1) {
let cycle_count_delta = curr_values.cycleCount - prev_values.cycleCount;
let rx_clear_delta = curr_values.rxClearCount - prev_values.rxClearCount;
if (cycle_count_delta && cycle_count_delta > 0)
total_usage = (rx_clear_delta * 100) / cycle_count_delta;
chan_util = total_usage;
}
prev_values.txFrameCount=curr_values.txFrameCount;
prev_values.rxFrameCount=curr_values.rxFrameCount;
prev_values.rxClearCount=curr_values.rxClearCount;
prev_values.cycleCount=curr_values.cycleCount;
}
sleep(sleep_time);
}
// record channel utilization
stats_info_write("/tmp/chanutil_phy" + radio_band, chan_util);
return chan_util;
}
function random_channel_selection(iface, iface_num, band, htmode, chan_list_valid) {
function random_channel_selection(iface, band, htmode, chan_list_valid) {
let math = require('math');
let bw = replace(htmode, /[^0-9]/g, '');
let iface_num = replace(iface, /[^0-9]/g, '');
let phy_id = 'phy' + iface_num;
if (board_name == 'edgecore,eap105') {
phy_id = 'phy00';
@@ -385,7 +433,7 @@ function random_channel_selection(iface, iface_num, band, htmode, chan_list_vali
let chan_list_legal = [];
ulog_info(`[%s] Channel list from the driver = %s \n`, iface, chan_list_cc);
ulog_info(`[%s] Selected channel list from config (default channel list shall be used in case channels haven't been selected) = %s \n`, iface, chan_list_valid);
ulog_info(`[%s] Selected channel list from config (default channel list shall be used in case channels haven't been selected) = %s \n`, iface, (chan_list_valid || '[]'));
if (band == '2g' && bw >= 40) {
ulog_info(`[%s] It is highly recommended to NOT use %dMHz bandwidth for 2.4G radio \n`, iface, bw);
@@ -445,7 +493,6 @@ function random_channel_selection(iface, iface_num, band, htmode, chan_list_vali
36,
52,
100,
116,
132,
149,
165
@@ -454,7 +501,6 @@ function random_channel_selection(iface, iface_num, band, htmode, chan_list_vali
36, 44,
52, 60,
100, 108,
116, 124,
132, 140,
149, 157,
165
@@ -463,7 +509,7 @@ function random_channel_selection(iface, iface_num, band, htmode, chan_list_vali
36, 40, 44, 48,
52, 56, 60, 64,
100, 104, 108, 112,
116, 120, 124, 128,
116,
132, 136, 140, 144,
149, 153, 157, 161,
165
@@ -522,12 +568,12 @@ function random_channel_selection(iface, iface_num, band, htmode, chan_list_vali
return random_channel;
}
function algo_rcs(iface, iface_num, current_channel, band, htmode, selected_channels) {
function algo_rcs(iface, current_channel, band, htmode, selected_channels) {
let chosen_random_channel = 0;
let res = 0;
// random_channel_selection script will help to select random channel
chosen_random_channel = random_channel_selection(iface, iface_num, band, htmode, selected_channels);
chosen_random_channel = random_channel_selection(iface, band, htmode, selected_channels);
stats_info_write("/tmp/rrm_random_channel_" + iface, chosen_random_channel);
if (chosen_random_channel == current_channel) {
@@ -578,7 +624,7 @@ function channel_optimize() {
let channel_config = {};
let selected_channels = {};
let radio_5G_index = null;
let dfs_enabled_5g = {};
let dfs_enabled_5g_f = {};
// check the channel config used by the customer
let fixed_chan_bkp = {};
@@ -609,10 +655,12 @@ function channel_optimize() {
radio_disabled[j] = wireless_status[radio_id].disabled;
radio_band[j] = wireless_status[radio_id].config.band;
if (radio_disabled[j] == true) {
radio_iface[j] = 'radio ' + radio_band[j];
} else {
radio_iface[j] = wireless_status[radio_id].interfaces[0].ifname;
radio_iface[j] = 'radio ' + radio_band[j];
if (radio_disabled[j] == false) {
let interface_created = wireless_status[radio_id].interfaces[0];
if (interface_created)
radio_iface[j] = wireless_status[radio_id].interfaces[0].ifname;
}
// check wlan interface status
@@ -635,7 +683,7 @@ function channel_optimize() {
// check if DFS is enabled for 5G radio
if (acs_exclude_dfs[j] == false) {
dfs_enabled_5g[j] = 1;
dfs_enabled_5g_f[j] = 1;
}
}
@@ -648,7 +696,6 @@ function channel_optimize() {
if (selected_channels[j]) {
ulog_info(`[%s] Selected channel list (please update the radio config, if not correct) = %s \n`, radio_iface[j], selected_channels[j]);
// should I check the validity of the chan list selected by the user??
}
} else if (selected_algo == "ACS") {
if (channel_config[j] != '0') {
@@ -718,6 +765,9 @@ function channel_optimize() {
} else {
check_all_cool_down++;
}
} else if (current_rf_down[j] == 2) {
// this iface is HaLow interface and we can neither check channel utilization not switch channel
ulog_info(`[%s] HaLow interface is UP, but RRM cannot be done on this interface \n`, radio_iface[j]);
} else {
ulog_info(`[%s] Interface not UP, will be checked in the next interval \n`, radio_iface[j]);
}
@@ -759,7 +809,7 @@ function channel_optimize() {
let assign_max_chan_util = 0;
// call RCS for multiple random chan
let chan_scan = algo_rcs(radio_iface[l], l, curr_chan_list[num_chan-1], radio_band[l], htmode[l], selected_channels[l]);
let chan_scan = algo_rcs(radio_iface[l], curr_chan_list[num_chan-1], radio_band[l], htmode[l], selected_channels[l]);
curr_chan_list[num_chan] = stats_info_read("/tmp/rrm_random_channel_" + radio_iface[l]);
if (chan_scan == 1) {
@@ -772,21 +822,22 @@ function channel_optimize() {
};
if (l == radio_5G_index) {
dfs_enabled_5g[l] = dfs_chan_check(radio_5G_index, init_payload.channel);
dfs_enabled_5g_f[l] = dfs_chan_check(radio_iface[l], init_payload.channel);
}
ulog_info(`[%s] Initiated channel switch to random channel %d for comparing Channel utilization \n`, radio_iface[l], init_payload.channel);
let init_chan_switch_status = hostapd_switch_channel(init_payload);
if (init_chan_switch_status != 0) {
let actual_channel = switch_status_check(radio_iface[l], dfs_enabled_5g[l]);
let actual_channel = switch_status_check(radio_iface[l], dfs_enabled_5g_f[l]);
if (actual_channel == init_payload.channel) {
ulog_info(`[%s] Channel Switch success; Checking Channel utilization ... \n`, radio_iface[l]);
// get chan util for current assigned random channel
sleep(5000);
chan_util_list[num_chan] = get_chan_util(radio_band[l], sleep_time);
} else {
if (dfs_enabled_5g[l] == 1 && interface_status_check(radio_iface[l]) == 1) {
if (dfs_enabled_5g_f[l] == 1 && interface_status_check(radio_iface[l]) == 1) {
// dfs channel not up yet
ulog_info(`[%s] DFS channel %d taking too long to be UP. Interface status/Channel utilization will be checked in the next interval\n`, radio_iface[l], init_payload.channel);
// jump back to original channel
@@ -843,7 +894,7 @@ function channel_optimize() {
};
if (l == radio_5G_index) {
dfs_enabled_5g[l] = dfs_chan_check(radio_5G_index, final_payload.channel);
dfs_enabled_5g_f[l] = dfs_chan_check(radio_iface[l], final_payload.channel);
}
if (final_payload.channel != curr_chan_list[max_chan-1] || min_util != chan_util_list[max_chan-1]) {
@@ -851,7 +902,7 @@ function channel_optimize() {
let final_switch_status = hostapd_switch_channel(final_payload);
if (final_switch_status != 0) {
let final_channel = switch_status_check(radio_iface[l], dfs_enabled_5g[l]);
let final_channel = switch_status_check(radio_iface[l], dfs_enabled_5g_f[l]);
if (final_channel == final_payload.channel) {
ulog_info(`[%s] Final channel switch success \n`, radio_iface[l]);
@@ -946,7 +997,7 @@ function channel_optimize() {
}
// need to wait for radio 5GHz interface, when it is DFS enabled && restarted
if (radio_5g_restarted == 1 && dfs_enabled_5g[radio_5G_index] == 1) {
if (radio_5g_restarted == 1 && dfs_enabled_5g_f[radio_5G_index] == 1) {
ulog_info(`[%s] 5G radio might need some time to be UP (DFS enabled) ... wait for 30 seconds \n`, radio_iface[radio_5G_index]);
// 30 sec delay for DFS scan to come finish
sleep(30000);
@@ -964,7 +1015,7 @@ function channel_optimize() {
}
}
}
ulog_info(`Interference detection finish; next RRM round starts in %d seconds \n`, config.interval/1000);
ulog_info(`RRM with channel optimization finished; next RRM round starts in %d seconds \n`, config.interval/1000);
return config.interval;
}

View File

@@ -4,10 +4,10 @@ PKG_NAME:=ucentral-schema
PKG_RELEASE:=1
PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-schema.git
PKG_MIRROR_HASH:=1ad9f7b5d5d1145e3aed14937eef60d6794d821e0244cc8fa824400d3da47f5a
PKG_MIRROR_HASH:=9b12cf94b94688aaf2245742ac1cd3d7a2bccade7e248c47c5f13a3dd7c07401
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2025-07-11
PKG_SOURCE_VERSION:=5276d0b8b6e83ab57354b0bcbb820de83a91ab88
PKG_SOURCE_VERSION:=b971b73d4cedae6175926373adcdc37a04ced11c
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
PKG_LICENSE:=BSD-3-Clause

View File

@@ -0,0 +1,68 @@
From a2a7cdf9e292bac5b146738276a593d8e119fe8f Mon Sep 17 00:00:00 2001
From: Marek Kwaczynski <marek@shasta.cloud>
Date: Thu, 3 Jul 2025 15:55:43 +0000
Subject: [PATCH] netifd: add gcmp-256 as a cipher suite when SAE is enabled on
HE/EHT
Enabling gcmp-256 only on 6GHz radio.
Fixes: WIFI-14594
Signed-off-by: Marek Kwaczynski <marek@shasta.cloud>
---
.../config/netifd/patches/200-gcmp-256.patch | 43 +++++++++++++++++++
1 file changed, 43 insertions(+)
create mode 100644 package/network/config/netifd/patches/200-gcmp-256.patch
diff --git a/package/network/config/netifd/patches/200-gcmp-256.patch b/package/network/config/netifd/patches/200-gcmp-256.patch
new file mode 100644
index 0000000000..7ac6262e7f
--- /dev/null
+++ b/package/network/config/netifd/patches/200-gcmp-256.patch
@@ -0,0 +1,43 @@
+Index: netifd-2023-09-19-8587c074/scripts/netifd-wireless.sh
+===================================================================
+--- netifd-2023-09-19-8587c074.orig/scripts/netifd-wireless.sh
++++ netifd-2023-09-19-8587c074/scripts/netifd-wireless.sh
+@@ -39,11 +39,10 @@ prepare_key_wep() {
+ }
+
+ _wdev_prepare_channel() {
+- json_get_vars channel band hwmode
++ json_get_vars channel band hwmode htmode
+
+ auto_channel=0
+ enable_ht=0
+- htmode=
+ hwmode="${hwmode##11}"
+
+ case "$channel" in
+@@ -70,7 +69,14 @@ _wdev_prepare_channel() {
+
+ case "$band" in
+ 2g) hwmode=g;;
+- 5g|6g) hwmode=a;;
++ 5g) hwmode=a;;
++ 6g)
++ hwmode=a;
++ case "$htmode" in
++ HE*|EHT*) wpa3_cipher="GCMP-256 ";;
++ *) wpa3_cipher="";;
++ esac
++ ;;
+ 60g) hwmode=ad;;
+ *)
+ case "$hwmode" in
+@@ -216,6 +222,9 @@ wireless_vif_parse_encryption() {
+ wpa_cipher="GCMP"
+ else
+ wpa_cipher="CCMP"
++ case "$encryption" in
++ sae*|wpa3*|psk3*|owe) wpa_cipher="${wpa3_cipher}$wpa_cipher";;
++ esac
+ fi
+
+ case "$encryption" in
--
2.43.0

View File

@@ -0,0 +1,27 @@
From 9afc63f356f10942f924aaa6361f314f06727495 Mon Sep 17 00:00:00 2001
From: John Crispin <john@phrozen.org>
Date: Mon, 21 Jul 2025 13:27:07 +0200
Subject: [PATCH] include/download.mk: switch to using git:// instead of
https://
Signed-off-by: John Crispin <john@phrozen.org>
---
include/download.mk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/download.mk b/include/download.mk
index 9ab0b6c08f..430bd89307 100644
--- a/include/download.mk
+++ b/include/download.mk
@@ -3,7 +3,7 @@
# Copyright (C) 2006-2012 OpenWrt.org
# Copyright (C) 2016 LEDE project
-PROJECT_GIT = https://git.openwrt.org
+PROJECT_GIT = git://git.openwrt.org
OPENWRT_GIT = $(PROJECT_GIT)
LEDE_GIT = $(PROJECT_GIT)
--
2.34.1

View File

@@ -0,0 +1,22 @@
---
profile: emplus_wap7635
target: ipq53xx
subtarget: generic
description: Build image for the EMPLUS WAP7635
image: bin/targets/ipq53xx/generic/openwrt-ipq53xx-emplus_wap7635-squashfs-sysupgrade.tar
feeds:
- name: qca
path: ../../feeds/qca-wifi-7
include:
- ucentral-ap
packages:
- ipq53xx
- qca-ssdk-shell
- iperf3
- jq
- sysstat
- tree
diffconfig: |
CONFIG_KERNEL_IPQ_MEM_PROFILE=0
CONFIG_BUSYBOX_CUSTOM=y
CONFIG_BUSYBOX_CONFIG_PSTREE=y