mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-29 09:32:34 +00:00
Compare commits
18 Commits
WIFI-14538
...
staging-r4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fa355af9a2 | ||
|
|
de43044eb4 | ||
|
|
c09c4c9d60 | ||
|
|
a15703c413 | ||
|
|
d218ba64e3 | ||
|
|
dab5ebd31f | ||
|
|
f4d2d3d12a | ||
|
|
adac3818a4 | ||
|
|
a516b035ab | ||
|
|
29b088ef21 | ||
|
|
10b875d42c | ||
|
|
1f0a24a941 | ||
|
|
ea3afcda56 | ||
|
|
b5987cc2a7 | ||
|
|
fc700364d1 | ||
|
|
f2fec9dd87 | ||
|
|
2de57bf167 | ||
|
|
4c9b22f999 |
2
.github/workflows/build-dev.yml
vendored
2
.github/workflows/build-dev.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf189', 'cig_wf196', 'cig_wf196', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'sonicfi_rap630w-312g', 'sonicfi_rap63xc-211g', 'sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'sonicfi_rap7110c-341x', 'sonicfi_rap750w-311a', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'edgecore_oap103', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'senao_iap4300m', 'senao_iap2300m', 'senao_jeap6500', 'udaya_a6-id2', 'udaya_a6-od2', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ]
|
||||
target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf189', 'cig_wf196', 'cig_wf196', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'sonicfi_rap630w-312g', 'sonicfi_rap63xc-211g', 'sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'sonicfi_rap650c', 'sonicfi_rap7110c-341x', 'sonicfi_rap750w-311a', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'edgecore_oap103', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'senao_iap4300m', 'senao_iap2300m', 'senao_jeap6500', 'udaya_a6-id2', 'udaya_a6-od2', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ ALLWIFIBOARDS:= \
|
||||
sonicfi-rap630c-311g \
|
||||
sonicfi-rap630w-311g \
|
||||
sonicfi-rap630w-312g \
|
||||
sonicfi-rap650c \
|
||||
tplink-ex227 \
|
||||
tplink-ex447 \
|
||||
yuncore-ax840 \
|
||||
@@ -410,6 +411,7 @@ $(eval $(call generate-ath11k-wifi-package,indio-um-510axm-v1,Indio UM-510AXM V1
|
||||
$(eval $(call generate-ath11k-wifi-package,sonicfi-rap630c-311g,Sonicfi RAP630C 311G))
|
||||
$(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-311g,Sonicfi RAP630W 311G))
|
||||
$(eval $(call generate-ath11k-wifi-package,sonicfi-rap630w-312g,Sonicfi RAP630W 312G))
|
||||
$(eval $(call generate-ath11k-wifi-package,sonicfi-rap650c,SonicFi RAP650C))
|
||||
$(eval $(call generate-ath11k-wifi-package,tplink-ex227,TP-Link EX227))
|
||||
$(eval $(call generate-ath11k-wifi-package,tplink-ex447,TP-Link EX447))
|
||||
$(eval $(call generate-ath11k-wifi-package,yuncore-ax840,YunCore AX840))
|
||||
|
||||
BIN
feeds/ipq807x_v5.4/ath11k-wifi/board-sonicfi-rap650c.bin.IPQ8074
Normal file
BIN
feeds/ipq807x_v5.4/ath11k-wifi/board-sonicfi-rap650c.bin.IPQ8074
Normal file
Binary file not shown.
@@ -341,7 +341,12 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_EFI is not set
|
||||
CONFIG_DEBUG_GPIO=y
|
||||
# CONFIG_DEBUG_INFO_REDUCED is not set
|
||||
# CONFIG_DEBUG_KMEMLEAK_AUTO_SCAN is not set
|
||||
CONFIG_DEBUG_KMEMLEAK=y
|
||||
CONFIG_DEBUG_KMEMLEAK_AUTO_SCAN=y
|
||||
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=n
|
||||
CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE=16000
|
||||
CONFIG_DEBUG_KMEMLEAK_TEST=m
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
|
||||
# CONFIG_DEBUG_MISC is not set
|
||||
# CONFIG_DEBUG_PLIST is not set
|
||||
|
||||
@@ -342,7 +342,12 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_EFI is not set
|
||||
CONFIG_DEBUG_GPIO=y
|
||||
# CONFIG_DEBUG_INFO_REDUCED is not set
|
||||
# CONFIG_DEBUG_KMEMLEAK_AUTO_SCAN is not set
|
||||
CONFIG_DEBUG_KMEMLEAK=y
|
||||
CONFIG_DEBUG_KMEMLEAK_AUTO_SCAN=y
|
||||
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=n
|
||||
CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE=16000
|
||||
CONFIG_DEBUG_KMEMLEAK_TEST=m
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
|
||||
# CONFIG_DEBUG_MISC is not set
|
||||
# CONFIG_DEBUG_PLIST is not set
|
||||
|
||||
@@ -21,6 +21,7 @@ edgecore,oap103)
|
||||
ucidef_set_led_wlan "power" "POWER" "green:power" "default-on"
|
||||
;;
|
||||
sonicfi,rap630w-311g|\
|
||||
sonicfi,rap650c|\
|
||||
cybertan,eww631-b1)
|
||||
ucidef_set_led_default "power" "POWER" "sys:blue" "on"
|
||||
;;
|
||||
|
||||
@@ -24,6 +24,7 @@ qcom_setup_interfaces()
|
||||
edgecore,eap102|\
|
||||
edgecore,oap102|\
|
||||
edgecore,oap103|\
|
||||
sonicfi,rap650c|\
|
||||
cig,wf196)
|
||||
ucidef_set_interface_lan "eth1"
|
||||
ucidef_set_interface_wan "eth0"
|
||||
@@ -50,6 +51,16 @@ qcom_setup_macs()
|
||||
ip link set eth1 address $lan_mac
|
||||
ucidef_set_label_macaddr $wan_mac
|
||||
;;
|
||||
sonicfi,rap650c)
|
||||
mac=$(fw_printenv -n BaseMacAddress)
|
||||
[ -z "$mac" ] && return;
|
||||
wan_mac=$(macaddr_canonicalize $mac)
|
||||
lan_mac=$(macaddr_add "$wan_mac" 1)
|
||||
ucidef_set_network_device_mac eth0 $wan_mac
|
||||
ucidef_set_network_device_mac eth1 $lan_mac
|
||||
ip link set eth0 address $wan_mac
|
||||
ip link set eth1 address $lan_mac
|
||||
;;
|
||||
*)
|
||||
wan_mac=$(cat /sys/class/net/eth0/address)
|
||||
lan_mac=$(macaddr_add "$wan_mac" 1)
|
||||
|
||||
@@ -16,6 +16,20 @@ ath11k_generate_macs() {
|
||||
echo -ne \\x${mac3//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
}
|
||||
|
||||
ath11k_generate_macs_sonicfi() {
|
||||
mac=$(fw_printenv -n BaseMacAddress)
|
||||
[ -z "$mac" ] && return;
|
||||
|
||||
touch /lib/firmware/ath11k-macs
|
||||
eth=$(macaddr_canonicalize $mac)
|
||||
mac1=$(macaddr_add $eth 2)
|
||||
mac2=$(macaddr_add $eth 3)
|
||||
mac3=$(macaddr_add $eth 4)
|
||||
echo -ne \\x${mac1//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
echo -ne \\x${mac2//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
echo -ne \\x${mac3//:/\\x} >> /lib/firmware/ath11k-macs
|
||||
}
|
||||
|
||||
ath11k_generate_macs_wf196() {
|
||||
touch /lib/firmware/ath11k-macs
|
||||
mac=$(grep BaseMacAddress= /dev/mtd18 | cut -dx -f2)
|
||||
@@ -63,6 +77,7 @@ case "$FIRMWARE" in
|
||||
tplink,ex227|\
|
||||
tplink,ex447|\
|
||||
yuncore,ax840|\
|
||||
sonicfi,rap650c|\
|
||||
sercomm,wallaby)
|
||||
caldata_extract "0:ART" 0x1000 0x20000
|
||||
;;
|
||||
@@ -97,6 +112,9 @@ ath11k-macs)
|
||||
cig,wf196)
|
||||
ath11k_generate_macs_wf196
|
||||
;;
|
||||
sonicfi*)
|
||||
ath11k_generate_macs_sonicfi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
ath11k/IPQ8074/hw2.0/board.bin)
|
||||
|
||||
@@ -10,7 +10,8 @@ case "$board" in
|
||||
ln -s /sys/kernel/debug/ath11k/ipq6018\ hw1.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy2g
|
||||
;;
|
||||
"edgecore,eap102"|\
|
||||
"edgecore,oap103")
|
||||
"edgecore,oap103"|\
|
||||
"sonicfi,rap650c")
|
||||
ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac0/fw_stats/pdev_stats /tmp/pdev_stats_phy5g
|
||||
ln -s /sys/kernel/debug/ath11k/ipq8074\ hw2.0/mac1/fw_stats/pdev_stats /tmp/pdev_stats_phy2g
|
||||
;;
|
||||
|
||||
@@ -29,6 +29,7 @@ platform_check_image() {
|
||||
edgecore,oap102|\
|
||||
edgecore,oap103|\
|
||||
edgecore,eap106|\
|
||||
sonicfi,rap650c|\
|
||||
tplink,ex227|\
|
||||
tplink,ex447)
|
||||
[ "$magic_long" = "73797375" ] && return 0
|
||||
@@ -83,5 +84,17 @@ platform_do_upgrade() {
|
||||
fi
|
||||
nand_upgrade_tar "$1"
|
||||
;;
|
||||
sonicfi,rap650c)
|
||||
boot_part=$(fw_printenv -n bootfrom)
|
||||
[ ${#boot_part} -eq 0 ] && boot_part=0
|
||||
echo "Current bootfrom is $boot_part"
|
||||
if [[ $boot_part == 1 ]]; then
|
||||
CI_UBIPART="rootfs"
|
||||
CI_FWSETENV="bootfrom 0"
|
||||
elif [[ $boot_part == 0 ]]; then
|
||||
CI_UBIPART="rootfs_1"
|
||||
CI_FWSETENV="bootfrom 1"
|
||||
fi
|
||||
nand_upgrade_tar "$1"
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -342,7 +342,12 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_EFI is not set
|
||||
CONFIG_DEBUG_GPIO=y
|
||||
# CONFIG_DEBUG_INFO_REDUCED is not set
|
||||
# CONFIG_DEBUG_KMEMLEAK_AUTO_SCAN is not set
|
||||
CONFIG_DEBUG_KMEMLEAK=y
|
||||
CONFIG_DEBUG_KMEMLEAK_AUTO_SCAN=y
|
||||
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=n
|
||||
CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE=16000
|
||||
CONFIG_DEBUG_KMEMLEAK_TEST=m
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
|
||||
# CONFIG_DEBUG_MISC is not set
|
||||
# CONFIG_DEBUG_PLIST is not set
|
||||
|
||||
@@ -0,0 +1,650 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/dts-v1/;
|
||||
/* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
#include "ipq8074.dtsi"
|
||||
#include "ipq8074-hk-cpu.dtsi"
|
||||
|
||||
/ {
|
||||
#address-cells = <0x2>;
|
||||
#size-cells = <0x2>;
|
||||
model = "SonicFi RAP650C";
|
||||
compatible = "sonicfi,rap650c", "qcom,ipq8074-ap-hk09", "qcom,ipq8074";
|
||||
qcom,msm-id = <0x157 0x0>, <0x187 0x0>;
|
||||
interrupt-parent = <&intc>;
|
||||
|
||||
aliases {
|
||||
serial0 = &blsp1_uart5;
|
||||
/* Aliases as required by u-boot to patch MAC addresses */
|
||||
ethernet0 = "/soc/dp1";
|
||||
ethernet1 = "/soc/dp2";
|
||||
|
||||
led-boot = &led_power;
|
||||
led-failsafe = &led_power;
|
||||
led-running = &led_power;
|
||||
led-upgrade = &led_power;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0";
|
||||
};
|
||||
|
||||
soc {
|
||||
pinctrl@1000000 {
|
||||
button_pins: button_pins {
|
||||
reset_button {
|
||||
pins = "gpio57";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
usb_mux_sel_pins: usb_mux_pins {
|
||||
mux {
|
||||
pins = "gpio27";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
pcie0_pins: pcie_pins {
|
||||
pcie0_rst {
|
||||
pins = "gpio58";
|
||||
function = "pcie0_rst";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
pcie0_wake {
|
||||
pins = "gpio59";
|
||||
function = "pcie0_wake";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
mdio_pins: mdio_pinmux {
|
||||
mux_0 {
|
||||
pins = "gpio68";
|
||||
function = "mdc";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
mux_1 {
|
||||
pins = "gpio69";
|
||||
function = "mdio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
mux_2 {
|
||||
pins = "gpio25";
|
||||
function = "gpio";
|
||||
bias-pull-up;
|
||||
};
|
||||
mux_3 {
|
||||
pins = "gpio44";
|
||||
function = "gpio";
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
led_pins: led_pins {
|
||||
red {
|
||||
pins = "gpio0";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
green {
|
||||
pins = "gpio2";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
blue {
|
||||
pins = "gpio9";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
spi_3_pins: spi_3_pins {
|
||||
mux {
|
||||
pins = "gpio50", "gpio52", "gpio53";
|
||||
function = "blsp3_spi";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
spi_cs {
|
||||
pins = "gpio22";
|
||||
function = "blsp3_spi2";
|
||||
drive-strength = <8>;
|
||||
bias-disable;
|
||||
};
|
||||
quartz_interrupt {
|
||||
pins = "gpio47";
|
||||
function = "gpio";
|
||||
input;
|
||||
bias-disable;
|
||||
};
|
||||
quartz_reset {
|
||||
pins = "gpio21";
|
||||
function = "gpio";
|
||||
output-low;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
serial@78b3000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
dp1 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
qcom,id = <5>;
|
||||
reg = <0x3a001800 0x200>;
|
||||
qcom,mactype = <0>;
|
||||
local-mac-address = [000000000000];
|
||||
qcom,link-poll = <1>;
|
||||
qcom,phy-mdio-addr = <24>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
|
||||
dp2 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
qcom,id = <6>;
|
||||
reg = <0x3a001a00 0x200>;
|
||||
qcom,mactype = <0>;
|
||||
local-mac-address = [000000000000];
|
||||
qcom,link-poll = <1>;
|
||||
qcom,phy-mdio-addr = <28>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
|
||||
spi@78b5000 {
|
||||
status = "ok";
|
||||
pinctrl-0 = <&spi_0_pins>;
|
||||
pinctrl-names = "default";
|
||||
cs-select = <0>;
|
||||
|
||||
m25p80@0 {
|
||||
compatible = "n25q128a11";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0>;
|
||||
spi-max-frequency = <50000000>;
|
||||
};
|
||||
};
|
||||
|
||||
spi@78b8000 {
|
||||
status = "ok";
|
||||
pinctrl-0 = <&spi_3_pins>;
|
||||
pinctrl-names = "default";
|
||||
cs-select = <2>;
|
||||
quartz-reset-gpio = <&tlmm 21 1>;
|
||||
|
||||
spidev3: spi@3 {
|
||||
compatible = "qti,spidev";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <24000000>;
|
||||
};
|
||||
};
|
||||
|
||||
dma@7984000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
nand@79b0000 {
|
||||
status = "ok";
|
||||
|
||||
nand@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
nand-ecc-strength = <4>;
|
||||
nand-ecc-step-size = <512>;
|
||||
nand-bus-width = <8>;
|
||||
};
|
||||
};
|
||||
|
||||
qusb@79000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
ssphy@78000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
usb3@8A00000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
qusb@59000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
ssphy@58000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
usb3@8C00000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
phy@84000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
phy@86000 {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
pci@20000000 {
|
||||
perst-gpio = <&tlmm 58 1>;
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-0 = <&button_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "ok";
|
||||
|
||||
button@1 {
|
||||
label = "reset";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&tlmm 57 GPIO_ACTIVE_LOW>;
|
||||
linux,input-type = <1>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-0 = <&led_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
red {
|
||||
label = "sys:red";
|
||||
gpio = <&tlmm 0 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "off";
|
||||
};
|
||||
|
||||
green {
|
||||
label = "sys:green";
|
||||
gpio = <&tlmm 2 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "off";
|
||||
};
|
||||
|
||||
led_power: blue {
|
||||
label = "sys:blue";
|
||||
gpio = <&tlmm 9 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "off";
|
||||
};
|
||||
};
|
||||
|
||||
mdio: mdio@90000 {
|
||||
pinctrl-0 = <&mdio_pins>;
|
||||
pinctrl-names = "default";
|
||||
phy-reset-gpio = <&tlmm 37 0 &tlmm 25 0 &tlmm 44 0>;
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
};
|
||||
phy1: ethernet-phy@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
phy2: ethernet-phy@2 {
|
||||
reg = <2>;
|
||||
};
|
||||
phy3: ethernet-phy@3 {
|
||||
reg = <3>;
|
||||
};
|
||||
phy4: ethernet-phy@4 {
|
||||
reg = <24>;
|
||||
};
|
||||
phy5: ethernet-phy@5 {
|
||||
reg = <28>;
|
||||
};
|
||||
};
|
||||
|
||||
ess-switch@3a000000 {
|
||||
switch_cpu_bmp = <0x1>; /* cpu port bitmap */
|
||||
switch_lan_bmp = <0x3e>; /* lan port bitmap */
|
||||
switch_wan_bmp = <0x40>; /* wan port bitmap */
|
||||
switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/
|
||||
switch_mac_mode1 = <0xf>; /* mac mode for uniphy instance1*/
|
||||
switch_mac_mode2 = <0xf>; /* mac mode for uniphy instance2*/
|
||||
bm_tick_mode = <0>; /* bm tick mode */
|
||||
tm_tick_mode = <0>; /* tm tick mode */
|
||||
qcom,port_phyinfo {
|
||||
port@0 {
|
||||
port_id = <1>;
|
||||
phy_address = <0>;
|
||||
};
|
||||
port@1 {
|
||||
port_id = <2>;
|
||||
phy_address = <1>;
|
||||
};
|
||||
port@2 {
|
||||
port_id = <3>;
|
||||
phy_address = <2>;
|
||||
};
|
||||
port@3 {
|
||||
port_id = <4>;
|
||||
phy_address = <3>;
|
||||
};
|
||||
port@4 {
|
||||
port_id = <5>;
|
||||
phy_address = <24>;
|
||||
port_mac_sel = "QGMAC_PORT";
|
||||
};
|
||||
port@5 {
|
||||
port_id = <6>;
|
||||
phy_address = <28>;
|
||||
port_mac_sel = "QGMAC_PORT";
|
||||
};
|
||||
};
|
||||
port_scheduler_resource {
|
||||
port@0 {
|
||||
port_id = <0>;
|
||||
ucast_queue = <0 143>;
|
||||
mcast_queue = <256 271>;
|
||||
l0sp = <0 35>;
|
||||
l0cdrr = <0 47>;
|
||||
l0edrr = <0 47>;
|
||||
l1cdrr = <0 7>;
|
||||
l1edrr = <0 7>;
|
||||
};
|
||||
port@1 {
|
||||
port_id = <1>;
|
||||
ucast_queue = <144 159>;
|
||||
mcast_queue = <272 275>;
|
||||
l0sp = <36 39>;
|
||||
l0cdrr = <48 63>;
|
||||
l0edrr = <48 63>;
|
||||
l1cdrr = <8 11>;
|
||||
l1edrr = <8 11>;
|
||||
};
|
||||
port@2 {
|
||||
port_id = <2>;
|
||||
ucast_queue = <160 175>;
|
||||
mcast_queue = <276 279>;
|
||||
l0sp = <40 43>;
|
||||
l0cdrr = <64 79>;
|
||||
l0edrr = <64 79>;
|
||||
l1cdrr = <12 15>;
|
||||
l1edrr = <12 15>;
|
||||
};
|
||||
port@3 {
|
||||
port_id = <3>;
|
||||
ucast_queue = <176 191>;
|
||||
mcast_queue = <280 283>;
|
||||
l0sp = <44 47>;
|
||||
l0cdrr = <80 95>;
|
||||
l0edrr = <80 95>;
|
||||
l1cdrr = <16 19>;
|
||||
l1edrr = <16 19>;
|
||||
};
|
||||
port@4 {
|
||||
port_id = <4>;
|
||||
ucast_queue = <192 207>;
|
||||
mcast_queue = <284 287>;
|
||||
l0sp = <48 51>;
|
||||
l0cdrr = <96 111>;
|
||||
l0edrr = <96 111>;
|
||||
l1cdrr = <20 23>;
|
||||
l1edrr = <20 23>;
|
||||
};
|
||||
port@5 {
|
||||
port_id = <5>;
|
||||
ucast_queue = <208 223>;
|
||||
mcast_queue = <288 291>;
|
||||
l0sp = <52 55>;
|
||||
l0cdrr = <112 127>;
|
||||
l0edrr = <112 127>;
|
||||
l1cdrr = <24 27>;
|
||||
l1edrr = <24 27>;
|
||||
};
|
||||
port@6 {
|
||||
port_id = <6>;
|
||||
ucast_queue = <224 239>;
|
||||
mcast_queue = <292 295>;
|
||||
l0sp = <56 59>;
|
||||
l0cdrr = <128 143>;
|
||||
l0edrr = <128 143>;
|
||||
l1cdrr = <28 31>;
|
||||
l1edrr = <28 31>;
|
||||
};
|
||||
port@7 {
|
||||
port_id = <7>;
|
||||
ucast_queue = <240 255>;
|
||||
mcast_queue = <296 299>;
|
||||
l0sp = <60 63>;
|
||||
l0cdrr = <144 159>;
|
||||
l0edrr = <144 159>;
|
||||
l1cdrr = <32 35>;
|
||||
l1edrr = <32 35>;
|
||||
};
|
||||
};
|
||||
port_scheduler_config {
|
||||
port@0 {
|
||||
port_id = <0>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <0 1>; /*L0 SPs*/
|
||||
/*cpri cdrr epri edrr*/
|
||||
cfg = <0 0 0 0>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
/*unicast queues*/
|
||||
ucast_queue = <0 4 8>;
|
||||
/*multicast queues*/
|
||||
mcast_queue = <256 260>;
|
||||
/*sp cpri cdrr epri edrr*/
|
||||
cfg = <0 0 0 0 0>;
|
||||
};
|
||||
group@1 {
|
||||
ucast_queue = <1 5 9>;
|
||||
mcast_queue = <257 261>;
|
||||
cfg = <0 1 1 1 1>;
|
||||
};
|
||||
group@2 {
|
||||
ucast_queue = <2 6 10>;
|
||||
mcast_queue = <258 262>;
|
||||
cfg = <0 2 2 2 2>;
|
||||
};
|
||||
group@3 {
|
||||
ucast_queue = <3 7 11>;
|
||||
mcast_queue = <259 263>;
|
||||
cfg = <0 3 3 3 3>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@1 {
|
||||
port_id = <1>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <36>;
|
||||
cfg = <0 8 0 8>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <37>;
|
||||
cfg = <1 9 1 9>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <144>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <272>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <36 0 48 0 48>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@2 {
|
||||
port_id = <2>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <40>;
|
||||
cfg = <0 12 0 12>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <41>;
|
||||
cfg = <1 13 1 13>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <160>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <276>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <40 0 64 0 64>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@3 {
|
||||
port_id = <3>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <44>;
|
||||
cfg = <0 16 0 16>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <45>;
|
||||
cfg = <1 17 1 17>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <176>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <280>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <44 0 80 0 80>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@4 {
|
||||
port_id = <4>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <48>;
|
||||
cfg = <0 20 0 20>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <49>;
|
||||
cfg = <1 21 1 21>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <192>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <284>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <48 0 96 0 96>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@5 {
|
||||
port_id = <5>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <52>;
|
||||
cfg = <0 24 0 24>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <53>;
|
||||
cfg = <1 25 1 25>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <208>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <288>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <52 0 112 0 112>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@6 {
|
||||
port_id = <6>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <56>;
|
||||
cfg = <0 28 0 28>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <57>;
|
||||
cfg = <1 29 1 29>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <224>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <292>;
|
||||
mcast_loop_pri = <4>;
|
||||
cfg = <56 0 128 0 128>;
|
||||
};
|
||||
};
|
||||
};
|
||||
port@7 {
|
||||
port_id = <7>;
|
||||
l1scheduler {
|
||||
group@0 {
|
||||
sp = <60>;
|
||||
cfg = <0 32 0 32>;
|
||||
};
|
||||
group@1 {
|
||||
sp = <61>;
|
||||
cfg = <1 33 1 33>;
|
||||
};
|
||||
};
|
||||
l0scheduler {
|
||||
group@0 {
|
||||
ucast_queue = <240>;
|
||||
ucast_loop_pri = <16>;
|
||||
mcast_queue = <296>;
|
||||
cfg = <60 0 144 0 144>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nss-macsec0 {
|
||||
compatible = "qcom,nss-macsec";
|
||||
phy_addr = <0x18>;
|
||||
phy_access_mode = <0>;
|
||||
mdiobus = <&mdio>;
|
||||
};
|
||||
nss-macsec1 {
|
||||
compatible = "qcom,nss-macsec";
|
||||
phy_addr = <0x1c>;
|
||||
phy_access_mode = <0>;
|
||||
mdiobus = <&mdio>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&wifi0 {
|
||||
qcom,board_id = <0x90>;
|
||||
};
|
||||
|
||||
&wifi1 {
|
||||
qcom,board_id = <0x290>;
|
||||
};
|
||||
@@ -57,6 +57,17 @@ define Device/edgecore_eap106
|
||||
endef
|
||||
#TARGET_DEVICES += edgecore_eap106
|
||||
|
||||
define Device/sonicfi_rap650c
|
||||
DEVICE_TITLE := SonicFi RAP650C
|
||||
DEVICE_DTS := qcom-ipq807x-rap650c
|
||||
DEVICE_DTS_CONFIG=config@hk09
|
||||
SUPPORTED_DEVICES := sonicfi,rap650c
|
||||
DEVICE_PACKAGES := ath11k-wifi-sonicfi-rap650c uboot-envtools
|
||||
IMAGES := sysupgrade.tar nand-factory.bin nand-factory.ubi
|
||||
IMAGE/nand-factory.ubi := append-ubi
|
||||
endef
|
||||
TARGET_DEVICES += sonicfi_rap650c
|
||||
|
||||
define Device/tplink_ex227
|
||||
DEVICE_TITLE := TP-Link EX227
|
||||
DEVICE_DTS := qcom-ipq807x-ex227
|
||||
|
||||
@@ -63,6 +63,17 @@ $(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for WF189W
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sercomm-ap72tip
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for AP72TIP
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sercomm-ap72tip-v4
|
||||
$(call Package/ath12k-wifi-default)
|
||||
TITLE:=board-2.bin for AP72TIP-v4
|
||||
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/
|
||||
@@ -110,9 +121,25 @@ define Package/ath12k-wifi-cig-wf189h/install
|
||||
$(INSTALL_DATA) ./ipq5332_qcn6432.regdb $(1)/lib/firmware/ath12k/QCN6432/hw1.0/regdb.bin
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sercomm-ap72tip/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DATA) ./board-2.bin.ap72tip.QCN92XX $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin
|
||||
$(INSTALL_DATA) ./board-2.bin.ap72tip.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
define Package/ath12k-wifi-sercomm-ap72tip-v4/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/
|
||||
$(INSTALL_DATA) ./board-2.bin.ap72tip-v4.QCN92XX $(1)/lib/firmware/ath12k/QCN92XX/hw1.0/board-2.bin
|
||||
$(INSTALL_DATA) ./board-2.bin.ap72tip-v4.IPQ5332 $(1)/lib/firmware/ath12k/IPQ5332/hw1.0/board-2.bin
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,ath12k-wifi-cig-wf189))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-edgecore-eap105))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-sonicfi-rap7110c-341x))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-sonicfi-rap750w-311a))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-cig-wf189w))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-cig-wf189h))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip))
|
||||
$(eval $(call BuildPackage,ath12k-wifi-sercomm-ap72tip-v4))
|
||||
|
||||
BIN
feeds/qca-wifi-7/ath12k-wifi/ap72tip-IPQ5332.bin
Normal file
BIN
feeds/qca-wifi-7/ath12k-wifi/ap72tip-IPQ5332.bin
Normal file
Binary file not shown.
BIN
feeds/qca-wifi-7/ath12k-wifi/ap72tip-QCN92XX.bin
Normal file
BIN
feeds/qca-wifi-7/ath12k-wifi/ap72tip-QCN92XX.bin
Normal file
Binary file not shown.
BIN
feeds/qca-wifi-7/ath12k-wifi/ap72tip-v4-IPQ5332.bin
Normal file
BIN
feeds/qca-wifi-7/ath12k-wifi/ap72tip-v4-IPQ5332.bin
Normal file
Binary file not shown.
BIN
feeds/qca-wifi-7/ath12k-wifi/ap72tip-v4-QCN92XX.bin
Normal file
BIN
feeds/qca-wifi-7/ath12k-wifi/ap72tip-v4-QCN92XX.bin
Normal file
Binary file not shown.
20
feeds/qca-wifi-7/ath12k-wifi/board-2-ap72tip-IPQ5332.json
Normal file
20
feeds/qca-wifi-7/ath12k-wifi/board-2-ap72tip-IPQ5332.json
Normal file
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"board": [
|
||||
{
|
||||
"names": [
|
||||
"bus=ahb,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ap72tip-IPQ5332.bin"
|
||||
}
|
||||
],
|
||||
"regdb": [
|
||||
{
|
||||
"names": [
|
||||
"bus=ahb,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ipq5332.regdb"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
20
feeds/qca-wifi-7/ath12k-wifi/board-2-ap72tip-QCN92XX.json
Normal file
20
feeds/qca-wifi-7/ath12k-wifi/board-2-ap72tip-QCN92XX.json
Normal file
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"board": [
|
||||
{
|
||||
"names": [
|
||||
"bus=pci,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ap72tip-QCN92XX.bin"
|
||||
}
|
||||
],
|
||||
"regdb": [
|
||||
{
|
||||
"names": [
|
||||
"bus=pci,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "qcn92xx.regdb"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
20
feeds/qca-wifi-7/ath12k-wifi/board-2-ap72tip-v4-IPQ5332.json
Normal file
20
feeds/qca-wifi-7/ath12k-wifi/board-2-ap72tip-v4-IPQ5332.json
Normal file
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"board": [
|
||||
{
|
||||
"names": [
|
||||
"bus=ahb,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ap72tip-v4-IPQ5332.bin"
|
||||
}
|
||||
],
|
||||
"regdb": [
|
||||
{
|
||||
"names": [
|
||||
"bus=ahb,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ipq5332.regdb"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
20
feeds/qca-wifi-7/ath12k-wifi/board-2-ap72tip-v4-QCN92XX.json
Normal file
20
feeds/qca-wifi-7/ath12k-wifi/board-2-ap72tip-v4-QCN92XX.json
Normal file
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"board": [
|
||||
{
|
||||
"names": [
|
||||
"bus=pci,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "ap72tip-v4-QCN92XX.bin"
|
||||
}
|
||||
],
|
||||
"regdb": [
|
||||
{
|
||||
"names": [
|
||||
"bus=pci,qmi-chip-id=0,qmi-board-id=255"
|
||||
],
|
||||
"data": "qcn92xx.regdb"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
BIN
feeds/qca-wifi-7/ath12k-wifi/board-2.bin.ap72tip-v4.IPQ5332
Normal file
BIN
feeds/qca-wifi-7/ath12k-wifi/board-2.bin.ap72tip-v4.IPQ5332
Normal file
Binary file not shown.
BIN
feeds/qca-wifi-7/ath12k-wifi/board-2.bin.ap72tip-v4.QCN92XX
Normal file
BIN
feeds/qca-wifi-7/ath12k-wifi/board-2.bin.ap72tip-v4.QCN92XX
Normal file
Binary file not shown.
BIN
feeds/qca-wifi-7/ath12k-wifi/board-2.bin.ap72tip.IPQ5332
Normal file
BIN
feeds/qca-wifi-7/ath12k-wifi/board-2.bin.ap72tip.IPQ5332
Normal file
Binary file not shown.
BIN
feeds/qca-wifi-7/ath12k-wifi/board-2.bin.ap72tip.QCN92XX
Normal file
BIN
feeds/qca-wifi-7/ath12k-wifi/board-2.bin.ap72tip.QCN92XX
Normal file
Binary file not shown.
@@ -9,3 +9,9 @@ $encoder -c board-2-eap105-QCN92XX.json -o board-2.bin.eap105.QCN92XX
|
||||
|
||||
$encoder -c board-2-rap7110c_341x-IPQ5332.json -o board-2.bin.rap7110c_341x.IPQ5332
|
||||
$encoder -c board-2-rap7110c_341x-QCN92XX.json -o board-2.bin.rap7110c_341x.QCN92XX
|
||||
|
||||
$encoder -c board-2-ap72tip-IPQ5332.json -o board-2.bin.ap72tip.IPQ5332
|
||||
$encoder -c board-2-ap72tip-QCN92XX.json -o board-2.bin.ap72tip.QCN92XX
|
||||
|
||||
$encoder -c board-2-ap72tip-v4-IPQ5332.json -o board-2.bin.ap72tip-v4.IPQ5332
|
||||
$encoder -c board-2-ap72tip-v4-QCN92XX.json -o board-2.bin.ap72tip-v4.QCN92XX
|
||||
|
||||
@@ -126,12 +126,15 @@ hostapd_common_add_device_config() {
|
||||
config_add_int maxassoc
|
||||
config_add_int reg_power_type
|
||||
config_add_boolean stationary_ap
|
||||
config_add_boolean maxassoc_ignore_probe
|
||||
|
||||
config_add_string acs_chan_bias
|
||||
config_add_boolean acs_exclude_dfs
|
||||
config_add_array hostapd_options
|
||||
|
||||
config_add_int airtime_mode
|
||||
config_add_int mbssid
|
||||
config_add_boolean rnr_beacon ema
|
||||
|
||||
hostapd_add_log_config
|
||||
}
|
||||
@@ -142,10 +145,11 @@ hostapd_prepare_device_config() {
|
||||
|
||||
local base_cfg=
|
||||
|
||||
json_get_vars country country3 country_ie beacon_int:100 doth require_mode legacy_rates \
|
||||
json_get_vars country country3 country_ie beacon_int:100 dtim_period:2 doth require_mode legacy_rates \
|
||||
acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density \
|
||||
rts_threshold beacon_rate rssi_reject_assoc_rssi rssi_ignore_probe_request maxassoc \
|
||||
mbssid:0 band reg_power_type stationary_ap
|
||||
rnr_beacon mbssid:0 band reg_power_type stationary_ap acs_exclude_dfs\
|
||||
maxassoc_ignore_probe band
|
||||
|
||||
hostapd_set_log_options base_cfg
|
||||
|
||||
@@ -155,6 +159,9 @@ hostapd_prepare_device_config() {
|
||||
set_default legacy_rates 0
|
||||
set_default airtime_mode 0
|
||||
set_default cell_density 0
|
||||
set_default rnr_beacon 0
|
||||
set_default ema 0
|
||||
set_default acs_exclude_dfs 0
|
||||
|
||||
[ -n "$country" ] && {
|
||||
append base_cfg "country_code=$country" "$N"
|
||||
@@ -244,8 +251,14 @@ hostapd_prepare_device_config() {
|
||||
[ -n "$brlist" ] && append base_cfg "basic_rates=$brlist" "$N"
|
||||
append base_cfg "beacon_int=$beacon_int" "$N"
|
||||
[ -n "$rts_threshold" ] && append base_cfg "rts_threshold=$rts_threshold" "$N"
|
||||
append base_cfg "dtim_period=$dtim_period" "$N"
|
||||
[ "$airtime_mode" -gt 0 ] && append base_cfg "airtime_mode=$airtime_mode" "$N"
|
||||
[ -n "$maxassoc" ] && append base_cfg "iface_max_num_sta=$maxassoc" "$N"
|
||||
[ "$maxassoc_ignore_probe" -gt 0 ] && append base_cfg "no_probe_resp_if_max_sta=1" "$N"
|
||||
[ "$rnr_beacon" -gt 0 ] && append base_cfg "rnr_beacon=$rnr_beacon" "$N"
|
||||
[ "$ema" -gt 0 ] && append base_cfg "ema=$ema" "$N"
|
||||
[ "$acs_exclude_dfs" -gt 0 ] && append base_cfg "acs_exclude_dfs=$acs_exclude_dfs" "$N"
|
||||
|
||||
[ "$mbssid" -gt 0 ] && [ "$mbssid" -le 2 ] && append base_cfg "mbssid=$mbssid" "$N"
|
||||
|
||||
[ "$band" = "6g" ] && {
|
||||
@@ -287,15 +300,24 @@ hostapd_common_add_bss_config() {
|
||||
config_add_int ieee80211w
|
||||
config_add_int eapol_version
|
||||
|
||||
config_add_array auth_server acct_server
|
||||
config_add_string 'server:host'
|
||||
config_add_string 'auth_server:host' 'server:host'
|
||||
config_add_string auth_secret key
|
||||
config_add_int 'auth_port:port' 'port:port'
|
||||
|
||||
config_add_string acct_server
|
||||
config_add_string acct_secret
|
||||
config_add_int acct_port
|
||||
|
||||
config_add_string acct_server_secondary
|
||||
config_add_string acct_secret_secondary
|
||||
config_add_int acct_port_secondary
|
||||
|
||||
config_add_int acct_interval
|
||||
|
||||
config_add_string auth_server_secondary
|
||||
config_add_string auth_secret_secondary
|
||||
config_add_int auth_port_secondary
|
||||
|
||||
config_add_int bss_load_update_period chan_util_avg_period
|
||||
|
||||
config_add_string dae_client
|
||||
@@ -339,8 +361,8 @@ hostapd_common_add_bss_config() {
|
||||
config_add_string lci civic
|
||||
|
||||
config_add_boolean ieee80211r pmk_r1_push ft_psk_generate_local ft_over_ds
|
||||
config_add_int r0_key_lifetime reassociation_deadline
|
||||
config_add_string mobility_domain r1_key_holder
|
||||
config_add_int r0_key_lifetime reassociation_deadline ft_l2_refresh
|
||||
config_add_string mobility_domain r1_key_holder ft_key
|
||||
config_add_array r0kh r1kh
|
||||
|
||||
config_add_int ieee80211w_max_timeout ieee80211w_retry_timeout
|
||||
@@ -391,14 +413,18 @@ hostapd_common_add_bss_config() {
|
||||
config_add_array radius_auth_req_attr
|
||||
config_add_array radius_acct_req_attr
|
||||
|
||||
config_add_int eap_server radius_server_auth_port
|
||||
config_add_string eap_user_file ca_cert server_cert private_key private_key_passwd server_id radius_server_clients
|
||||
config_add_int eap_server
|
||||
config_add_string eap_user_file ca_cert server_cert private_key private_key_passwd server_id
|
||||
|
||||
config_add_boolean fils
|
||||
config_add_string fils_dhcp
|
||||
|
||||
config_add_boolean ratelimit
|
||||
config_add_int ocv
|
||||
|
||||
config_add_string uci_section
|
||||
config_add_boolean dynamic_probe_resp
|
||||
|
||||
config_add_boolean apup
|
||||
config_add_string apup_peer_ifname_prefix
|
||||
}
|
||||
@@ -433,6 +459,7 @@ hostapd_set_psk() {
|
||||
local ifname="$1"
|
||||
|
||||
rm -f /var/run/hostapd-${ifname}.psk
|
||||
touch /var/run/hostapd-${ifname}.psk
|
||||
for_each_station hostapd_set_psk_file ${ifname}
|
||||
}
|
||||
|
||||
@@ -549,18 +576,83 @@ append_airtime_sta_weight() {
|
||||
[ -n "$1" ] && append bss_conf "airtime_sta_weight=$1" "$N"
|
||||
}
|
||||
|
||||
append_auth_server() {
|
||||
[ -n "$1" ] || return
|
||||
append bss_conf "auth_server_addr=$1" "$N"
|
||||
append bss_conf "auth_server_port=$auth_port" "$N"
|
||||
[ -n "$auth_secret" ] && append bss_conf "auth_server_shared_secret=$auth_secret" "$N"
|
||||
}
|
||||
append_radius_server() {
|
||||
|
||||
append_acct_server() {
|
||||
[ -n "$1" ] || return
|
||||
append bss_conf "acct_server_addr=$1" "$N"
|
||||
append bss_conf "acct_server_port=$acct_port" "$N"
|
||||
[ -n "$acct_secret" ] && append bss_conf "acct_server_shared_secret=$acct_secret" "$N"
|
||||
json_get_vars \
|
||||
auth_server auth_secret auth_port \
|
||||
auth_server_secondary auth_secret_secondary auth_port_secondary \
|
||||
dae_client dae_secret dae_port \
|
||||
dynamic_ownip ownip radius_client_addr \
|
||||
eap_reauth_period request_cui \
|
||||
erp_domain mobility_domain \
|
||||
fils_realm fils_dhcp
|
||||
|
||||
set_default dynamic_ownip 1
|
||||
|
||||
# legacy compatibility
|
||||
[ -n "$auth_server" ] || json_get_var auth_server server
|
||||
[ -n "$auth_port" ] || json_get_var auth_port port
|
||||
[ -n "$auth_secret" ] || json_get_var auth_secret key
|
||||
|
||||
[ "$fils" -gt 0 ] && {
|
||||
set_default erp_domain "$mobility_domain"
|
||||
set_default erp_domain "$(echo "$ssid" | md5sum | head -c 8)"
|
||||
set_default fils_realm "$erp_domain"
|
||||
|
||||
append bss_conf "erp_send_reauth_start=1" "$N"
|
||||
append bss_conf "erp_domain=$erp_domain" "$N"
|
||||
append bss_conf "fils_realm=$fils_realm" "$N"
|
||||
append bss_conf "fils_cache_id=$(echo "$fils_realm" | md5sum | head -c 4)" "$N"
|
||||
|
||||
[ "$fils_dhcp" = "*" ] && {
|
||||
json_get_values network network
|
||||
fils_dhcp=
|
||||
for net in $network; do
|
||||
fils_dhcp="$(ifstatus "$net" | jsonfilter -e '@.data.dhcpserver')"
|
||||
[ -n "$fils_dhcp" ] && break
|
||||
done
|
||||
|
||||
[ -z "$fils_dhcp" -a -n "$network_bridge" -a -n "$network_ifname" ] && \
|
||||
fils_dhcp="$(udhcpc -B -n -q -s /lib/netifd/dhcp-get-server.sh -t 1 -i "$network_ifname" 2>/dev/null)"
|
||||
}
|
||||
[ -n "$fils_dhcp" ] && append bss_conf "dhcp_server=$fils_dhcp" "$N"
|
||||
}
|
||||
|
||||
set_default auth_port 1812
|
||||
set_default auth_port_secondary 1812
|
||||
set_default dae_port 3799
|
||||
set_default request_cui 0
|
||||
|
||||
[ "$eap_server" -eq 0 -a -n "$auth_server" ] && {
|
||||
append bss_conf "auth_server_addr=$auth_server" "$N"
|
||||
append bss_conf "auth_server_port=$auth_port" "$N"
|
||||
append bss_conf "auth_server_shared_secret=$auth_secret" "$N"
|
||||
}
|
||||
|
||||
[ -n "$auth_server_secondary" ] && {
|
||||
append bss_conf "auth_server_addr=$auth_server_secondary" "$N"
|
||||
append bss_conf "auth_server_port=$auth_port_secondary" "$N"
|
||||
[ -n "$auth_secret_secondary" ] && \
|
||||
append bss_conf "auth_server_shared_secret=$auth_secret_secondary" "$N"
|
||||
}
|
||||
|
||||
[ "$request_cui" -gt 0 ] && append bss_conf "radius_request_cui=$request_cui" "$N"
|
||||
[ -n "$eap_reauth_period" ] && append bss_conf "eap_reauth_period=$eap_reauth_period" "$N"
|
||||
|
||||
[ -n "$dae_client" -a -n "$dae_secret" ] && {
|
||||
append bss_conf "radius_das_port=$dae_port" "$N"
|
||||
append bss_conf "radius_das_client=$dae_client $dae_secret" "$N"
|
||||
}
|
||||
json_for_each_item append_radius_auth_req_attr radius_auth_req_attr
|
||||
|
||||
if [ -n "$ownip" ]; then
|
||||
append bss_conf "own_ip_addr=$ownip" "$N"
|
||||
elif [ "$dynamic_ownip" -gt 0 ]; then
|
||||
append bss_conf "dynamic_own_ip_addr=$dynamic_ownip" "$N"
|
||||
fi
|
||||
|
||||
[ -n "$radius_client_addr" ] && append bss_conf "radius_client_addr=$radius_client_addr" "$N"
|
||||
[ "$macfilter" = radius ] && append bss_conf "macaddr_acl=2" "$N"
|
||||
}
|
||||
|
||||
hostapd_set_bss_options() {
|
||||
@@ -570,7 +662,7 @@ hostapd_set_bss_options() {
|
||||
|
||||
wireless_vif_parse_encryption
|
||||
|
||||
local bss_conf bss_md5sum ft_key
|
||||
local bss_conf bss_md5sum
|
||||
local wep_rekey wpa_group_rekey wpa_pair_rekey wpa_master_rekey wpa_key_mgmt
|
||||
|
||||
json_get_vars \
|
||||
@@ -581,13 +673,14 @@ hostapd_set_bss_options() {
|
||||
wps_independent wps_device_type wps_device_name wps_manufacturer wps_pin \
|
||||
macfilter ssid utf8_ssid wmm uapsd hidden short_preamble rsn_preauth \
|
||||
iapp_interface eapol_version dynamic_vlan ieee80211w nasid \
|
||||
acct_secret acct_port acct_interval \
|
||||
acct_server acct_secret acct_port acct_interval \
|
||||
acct_server_secondary acct_secret_secondary acct_port_secondary \
|
||||
bss_load_update_period chan_util_avg_period sae_require_mfp sae_pwe \
|
||||
multi_ap multi_ap_backhaul_ssid multi_ap_backhaul_key skip_inactivity_poll \
|
||||
ppsk airtime_bss_weight airtime_bss_limit airtime_sta_weight \
|
||||
multicast_to_unicast_all proxy_arp per_sta_vif \
|
||||
eap_server eap_user_file ca_cert server_cert private_key private_key_passwd server_id radius_server_clients radius_server_auth_port \
|
||||
vendor_elements fils ocv apup multi_psk
|
||||
vendor_elements fils ocv apup uci_section dynamic_probe_resp multi_psk
|
||||
|
||||
set_default fils 0
|
||||
set_default isolate 0
|
||||
@@ -604,6 +697,7 @@ hostapd_set_bss_options() {
|
||||
set_default tdls_prohibit 0
|
||||
set_default eapol_version $((wpa & 1))
|
||||
set_default acct_port 1813
|
||||
set_default acct_port_secondary 1813
|
||||
set_default bss_load_update_period 60
|
||||
set_default chan_util_avg_period 600
|
||||
set_default utf8_ssid 1
|
||||
@@ -612,6 +706,7 @@ hostapd_set_bss_options() {
|
||||
set_default airtime_bss_weight 0
|
||||
set_default airtime_bss_limit 0
|
||||
set_default eap_server 0
|
||||
set_default dynamic_probe_resp 0
|
||||
set_default apup 0
|
||||
|
||||
/usr/sbin/hostapd -vfils || fils=0
|
||||
@@ -638,6 +733,7 @@ hostapd_set_bss_options() {
|
||||
append bss_conf "preamble=$short_preamble" "$N"
|
||||
append bss_conf "wmm_enabled=$wmm" "$N"
|
||||
append bss_conf "ignore_broadcast_ssid=$hidden" "$N"
|
||||
append bss_conf "dynamic_probe_resp=$dynamic_probe_resp" "$N"
|
||||
append bss_conf "uapsd_advertisement_enabled=$uapsd" "$N"
|
||||
append bss_conf "utf8_ssid=$utf8_ssid" "$N"
|
||||
append bss_conf "multi_ap=$multi_ap" "$N"
|
||||
@@ -654,10 +750,22 @@ hostapd_set_bss_options() {
|
||||
|
||||
[ -n "$nasid" ] && append bss_conf "nas_identifier=$nasid" "$N"
|
||||
|
||||
[ -n "$acct_interval" ] && \
|
||||
append bss_conf "radius_acct_interim_interval=$acct_interval" "$N"
|
||||
json_for_each_item append_acct_server acct_server
|
||||
json_for_each_item append_radius_acct_req_attr radius_acct_req_attr
|
||||
[ -n "$acct_server" ] && {
|
||||
append bss_conf "acct_server_addr=$acct_server" "$N"
|
||||
append bss_conf "acct_server_port=$acct_port" "$N"
|
||||
[ -n "$acct_secret" ] && \
|
||||
append bss_conf "acct_server_shared_secret=$acct_secret" "$N"
|
||||
[ -n "$acct_interval" ] && \
|
||||
append bss_conf "radius_acct_interim_interval=$acct_interval" "$N"
|
||||
json_for_each_item append_radius_acct_req_attr radius_acct_req_attr
|
||||
}
|
||||
|
||||
[ -n "$acct_server_secondary" ] && {
|
||||
append bss_conf "acct_server_addr=$acct_server_secondary" "$N"
|
||||
append bss_conf "acct_server_port=$acct_port_secondary" "$N"
|
||||
[ -n "$acct_secret_secondary" ] && \
|
||||
append bss_conf "acct_server_shared_secret=$acct_secret_secondary" "$N"
|
||||
}
|
||||
|
||||
[ -n "$ocv" ] && append bss_conf "ocv=$ocv" "$N"
|
||||
|
||||
@@ -690,6 +798,8 @@ hostapd_set_bss_options() {
|
||||
# Here we make the assumption that if we're in open mode
|
||||
# with WPS enabled, we got to be in unconfigured state.
|
||||
wps_not_configured=1
|
||||
vlan_possible=1
|
||||
append_radius_server
|
||||
;;
|
||||
psk|sae|psk-sae)
|
||||
json_get_vars key wpa_psk_file
|
||||
@@ -714,74 +824,15 @@ hostapd_set_bss_options() {
|
||||
}
|
||||
[ "$eapol_version" -ge "1" -a "$eapol_version" -le "2" ] && append bss_conf "eapol_version=$eapol_version" "$N"
|
||||
|
||||
append_radius_server
|
||||
set_default dynamic_vlan 0
|
||||
vlan_possible=1
|
||||
wps_possible=1
|
||||
;;
|
||||
eap|eap2|eap-eap2|eap192)
|
||||
json_get_vars \
|
||||
auth_server auth_secret auth_port \
|
||||
dae_client dae_secret dae_port \
|
||||
dynamic_ownip ownip radius_client_addr \
|
||||
eap_reauth_period request_cui \
|
||||
erp_domain mobility_domain \
|
||||
fils_realm fils_dhcp
|
||||
|
||||
eap|eap192|eap-eap2|eap2)
|
||||
append_radius_server
|
||||
# radius can provide VLAN ID for clients
|
||||
vlan_possible=1
|
||||
|
||||
set_default dynamic_ownip 1
|
||||
|
||||
# legacy compatibility
|
||||
[ -n "$auth_server" ] || json_get_var auth_server server
|
||||
[ -n "$auth_port" ] || json_get_var auth_port port
|
||||
[ -n "$auth_secret" ] || json_get_var auth_secret key
|
||||
|
||||
[ "$fils" -gt 0 ] && {
|
||||
set_default erp_domain "$mobility_domain"
|
||||
set_default erp_domain "$(echo "$ssid" | md5sum | head -c 8)"
|
||||
set_default fils_realm "$erp_domain"
|
||||
|
||||
append bss_conf "erp_send_reauth_start=1" "$N"
|
||||
append bss_conf "erp_domain=$erp_domain" "$N"
|
||||
append bss_conf "fils_realm=$fils_realm" "$N"
|
||||
append bss_conf "fils_cache_id=$(echo "$fils_realm" | md5sum | head -c 4)" "$N"
|
||||
|
||||
[ "$fils_dhcp" = "*" ] && {
|
||||
json_get_values network network
|
||||
fils_dhcp=
|
||||
for net in $network; do
|
||||
fils_dhcp="$(ifstatus "$net" | jsonfilter -e '@.data.dhcpserver')"
|
||||
[ -n "$fils_dhcp" ] && break
|
||||
done
|
||||
|
||||
[ -z "$fils_dhcp" -a -n "$network_bridge" -a -n "$network_ifname" ] && \
|
||||
fils_dhcp="$(udhcpc -B -n -q -s /lib/netifd/dhcp-get-server.sh -t 1 -i "$network_ifname" 2>/dev/null)"
|
||||
}
|
||||
[ -n "$fils_dhcp" ] && append bss_conf "dhcp_server=$fils_dhcp" "$N"
|
||||
}
|
||||
|
||||
set_default auth_port 1812
|
||||
set_default dae_port 3799
|
||||
set_default request_cui 0
|
||||
|
||||
[ "$eap_server" -eq 0 ] && json_for_each_item append_auth_server auth_server
|
||||
[ "$request_cui" -gt 0 ] && append bss_conf "radius_request_cui=$request_cui" "$N"
|
||||
[ -n "$eap_reauth_period" ] && append bss_conf "eap_reauth_period=$eap_reauth_period" "$N"
|
||||
|
||||
[ -n "$dae_client" -a -n "$dae_secret" ] && {
|
||||
append bss_conf "radius_das_port=$dae_port" "$N"
|
||||
append bss_conf "radius_das_client=$dae_client $dae_secret" "$N"
|
||||
}
|
||||
json_for_each_item append_radius_auth_req_attr radius_auth_req_attr
|
||||
|
||||
if [ -n "$ownip" ]; then
|
||||
append bss_conf "own_ip_addr=$ownip" "$N"
|
||||
elif [ "$dynamic_ownip" -gt 0 ]; then
|
||||
append bss_conf "dynamic_own_ip_addr=$dynamic_ownip" "$N"
|
||||
fi
|
||||
|
||||
[ -n "$radius_client_addr" ] && append bss_conf "radius_client_addr=$radius_client_addr" "$N"
|
||||
append bss_conf "eapol_key_index_workaround=1" "$N"
|
||||
append bss_conf "ieee8021x=1" "$N"
|
||||
|
||||
@@ -798,6 +849,7 @@ hostapd_set_bss_options() {
|
||||
append bss_conf "wpa_psk_radius=3" "$N"
|
||||
append_radius_server
|
||||
vlan_possible=1
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$auth_type" in
|
||||
@@ -921,45 +973,42 @@ hostapd_set_bss_options() {
|
||||
}
|
||||
fi
|
||||
|
||||
json_get_vars ieee80211r
|
||||
set_default ieee80211r 0
|
||||
if [ "$wpa" -ge "1" ]; then
|
||||
if [ "$fils" -gt 0 ]; then
|
||||
json_get_vars fils_realm
|
||||
set_default fils_realm "$(echo "$ssid" | md5sum | head -c 8)"
|
||||
fi
|
||||
json_get_vars ieee80211r
|
||||
set_default ieee80211r 0
|
||||
|
||||
append bss_conf "wpa_disable_eapol_key_retries=$wpa_disable_eapol_key_retries" "$N"
|
||||
|
||||
hostapd_append_wpa_key_mgmt
|
||||
[ -n "$wpa_key_mgmt" ] && append bss_conf "wpa_key_mgmt=$wpa_key_mgmt" "$N"
|
||||
fi
|
||||
|
||||
if [ "$wpa" -ge "2" ]; then
|
||||
if [ "$ieee80211r" -gt "0" ]; then
|
||||
json_get_vars mobility_domain ft_psk_generate_local ft_over_ds reassociation_deadline
|
||||
json_get_vars mobility_domain ft_psk_generate_local ft_over_ds reassociation_deadline ft_l2_refresh
|
||||
|
||||
set_default mobility_domain "$(echo "$ssid" | md5sum | head -c 4)"
|
||||
set_default ft_over_ds 0
|
||||
set_default ft_over_ds 1
|
||||
set_default ft_l2_refresh 30
|
||||
set_default reassociation_deadline 1000
|
||||
skip_kh_setup=0
|
||||
|
||||
case "$auth_type" in
|
||||
psk)
|
||||
psk|psk-sae)
|
||||
set_default ft_psk_generate_local 1
|
||||
skip_kh_setup="$ft_psk_generate_local"
|
||||
;;
|
||||
*)
|
||||
set_default ft_psk_generate_local 0
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$auth_type" in
|
||||
*sae*) skip_kh_setup=0;;
|
||||
esac
|
||||
|
||||
[ -n "$network_ifname" ] && append bss_conf "ft_iface=$network_ifname" "$N"
|
||||
append bss_conf "mobility_domain=$mobility_domain" "$N"
|
||||
append bss_conf "ft_psk_generate_local=$ft_psk_generate_local" "$N"
|
||||
append bss_conf "ft_over_ds=$ft_over_ds" "$N"
|
||||
append bss_conf "reassociation_deadline=$reassociation_deadline" "$N"
|
||||
[ -n "$ft_l2_refresh" ] && append bss_conf "ft_l2_refresh=$ft_l2_refresh" "$N"
|
||||
|
||||
if [ "$ft_psk_generate_local" -eq "0" ]; then
|
||||
json_get_vars r0_key_lifetime r1_key_holder pmk_r1_push
|
||||
if [ "$skip_kh_setup" -eq "0" ]; then
|
||||
json_get_vars r0_key_lifetime r1_key_holder pmk_r1_push ft_key
|
||||
json_get_values r0kh r0kh
|
||||
json_get_values r1kh r1kh
|
||||
|
||||
@@ -971,12 +1020,15 @@ hostapd_set_bss_options() {
|
||||
wireless_setup_vif_failed FT_KEY_CANT_BE_DERIVED
|
||||
return 1
|
||||
fi
|
||||
ft_key=`echo -n "$mobility_domain/${auth_secret:-${key}}" | md5sum | awk '{print $1}'`
|
||||
[ -z "$ft_key" ] && {
|
||||
key=`echo -n "$mobility_domain/$auth_secret" | md5sum | awk '{print $1}'`
|
||||
|
||||
set_default r0kh "ff:ff:ff:ff:ff:ff,*,$ft_key"
|
||||
set_default r1kh "00:00:00:00:00:00,00:00:00:00:00:00,$ft_key"
|
||||
set_default r0kh "ff:ff:ff:ff:ff:ff,*,$key"
|
||||
set_default r1kh "00:00:00:00:00:00,00:00:00:00:00:00,$key"
|
||||
}
|
||||
}
|
||||
|
||||
[ -n "$ft_key" ] && append bss_conf "ft_key=$ft_key" "$N"
|
||||
[ -n "$r1_key_holder" ] && append bss_conf "r1_key_holder=$r1_key_holder" "$N"
|
||||
append bss_conf "r0_key_lifetime=$r0_key_lifetime" "$N"
|
||||
append bss_conf "pmk_r1_push=$pmk_r1_push" "$N"
|
||||
@@ -989,7 +1041,18 @@ hostapd_set_bss_options() {
|
||||
done
|
||||
fi
|
||||
fi
|
||||
if [ "$fils" -gt 0 ]; then
|
||||
json_get_vars fils_realm
|
||||
set_default fils_realm "$(echo "$ssid" | md5sum | head -c 8)"
|
||||
fi
|
||||
|
||||
append bss_conf "wpa_disable_eapol_key_retries=$wpa_disable_eapol_key_retries" "$N"
|
||||
|
||||
hostapd_append_wpa_key_mgmt
|
||||
[ -n "$wpa_key_mgmt" ] && append bss_conf "wpa_key_mgmt=$wpa_key_mgmt" "$N"
|
||||
fi
|
||||
|
||||
if [ "$wpa" -ge "2" ]; then
|
||||
if [ -n "$network_bridge" -a "$rsn_preauth" = 1 ]; then
|
||||
set_default auth_cache 1
|
||||
append bss_conf "rsn_preauth=1" "$N"
|
||||
@@ -1189,6 +1252,8 @@ hostapd_set_bss_options() {
|
||||
append bss_conf "per_sta_vif=$per_sta_vif" "$N"
|
||||
fi
|
||||
|
||||
[ -n "$uci_section" ] && append bss_conf "uci_section=$uci_section" "$N"
|
||||
|
||||
if [ "$apup" -gt 0 ]; then
|
||||
append bss_conf "apup=$apup" "$N"
|
||||
|
||||
|
||||
@@ -7,7 +7,9 @@ board_config_update
|
||||
board=$(board_name)
|
||||
|
||||
case "$board" in
|
||||
sercomm,ap72tip-v4|\
|
||||
sercomm,ap72tip)
|
||||
ucidef_set_led_default "power" "POWER" "blue:status" "on"
|
||||
ucidef_set_led_netdev "wan_link" "wan_link" "green:phy" "eth0" "link"
|
||||
ucidef_set_led_netdev "wan_act" "wan_act" "yellow:phy" "eth0" "rx tx"
|
||||
;;
|
||||
|
||||
@@ -29,6 +29,9 @@ ipq53xx_setup_interfaces()
|
||||
ucidef_set_interfaces_lan_wan "eth1" "eth0"
|
||||
ucidef_add_switch "switch1" "0u@eth1" "3:lan" "2:lan"
|
||||
;;
|
||||
sercomm,ap72tip-v4)
|
||||
ucidef_set_interface_wan "eth0"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -52,6 +55,13 @@ qcom_setup_macs()
|
||||
ucidef_set_wireless_macaddr_base 5g $(macaddr_add "$wan_mac" 3)
|
||||
ucidef_set_wireless_macaddr_base 6g $(macaddr_add "$wan_mac" 4)
|
||||
;;
|
||||
sercomm,ap72tip)
|
||||
wan_mac=$(cat /sys/class/net/eth0/address)
|
||||
lan_mac=$(cat /sys/class/net/eth1/address)
|
||||
ucidef_set_wireless_macaddr_base 2g $(macaddr_add "$wan_mac" 2)
|
||||
ucidef_set_wireless_macaddr_base 5g $(macaddr_add "$wan_mac" 3)
|
||||
ucidef_set_wireless_macaddr_base 6g $(macaddr_add "$wan_mac" 4)
|
||||
;;
|
||||
edgecore,eap105)
|
||||
wan_mac=$(cat /sys/class/net/eth0/address)
|
||||
lan_mac=$(macaddr_add "$wan_mac" 1)
|
||||
@@ -68,6 +78,12 @@ 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)
|
||||
;;
|
||||
sercomm,ap72tip-v4)
|
||||
wan_mac=$(cat /sys/class/net/eth0/address)
|
||||
ucidef_set_wireless_macaddr_base 2g $(macaddr_add "$wan_mac" 1)
|
||||
ucidef_set_wireless_macaddr_base 5g $(macaddr_add "$wan_mac" 2)
|
||||
ucidef_set_wireless_macaddr_base 6g $(macaddr_add "$wan_mac" 3)
|
||||
;;
|
||||
*)
|
||||
wan_mac=$(cat /sys/class/net/eth1/address)
|
||||
lan_mac=$(macaddr_add "$wan_mac" 1)
|
||||
|
||||
@@ -31,6 +31,7 @@ ath12k/IPQ5332/hw1.0/caldata.bin)
|
||||
cig,wf189h|\
|
||||
cig,wf189|\
|
||||
edgecore,eap105|\
|
||||
sercomm,ap72tip-v4|\
|
||||
sercomm,ap72tip)
|
||||
caldata_extract "0:ART" 0x1000 0x20000
|
||||
;;
|
||||
@@ -46,6 +47,7 @@ ath12k/QCN92XX/hw1.0/cal-pci-0001:01:00.0.bin)
|
||||
case "$board" in
|
||||
cig,wf189|\
|
||||
edgecore,eap105|\
|
||||
sercomm,ap72tip-v4|\
|
||||
sercomm,ap72tip)
|
||||
caldata_extract "0:ART" 0x58800 0x2d000
|
||||
;;
|
||||
|
||||
@@ -120,5 +120,9 @@ platform_do_upgrade() {
|
||||
sonicfi_dualimage_check
|
||||
nand_upgrade_tar "$1"
|
||||
;;
|
||||
sercomm,ap72tip-v4|\
|
||||
sercomm,ap72tip)
|
||||
nand_upgrade_tar "$1"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -44,9 +44,11 @@
|
||||
uniphyaddr_fixup = <0xC90F014>;
|
||||
mdio_clk_fixup; /* MDIO clock sequence fix up flag */
|
||||
tip,clk_div = <0xff>; /* MDIO Frequency reduction*/
|
||||
limit_rtlphy_10g_ablity;
|
||||
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <8>;
|
||||
compatible ="ethernet-phy-ieee802.3-c45";
|
||||
};
|
||||
|
||||
phy1: ethernet-phy@1 {
|
||||
@@ -211,9 +213,9 @@
|
||||
status = "okay";
|
||||
|
||||
button@1 {
|
||||
label = "wps";
|
||||
linux,code = <KEY_WPS_BUTTON>;
|
||||
gpios = <&tlmm 35 GPIO_ACTIVE_LOW>;
|
||||
label = "rst";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&tlmm 17 GPIO_ACTIVE_LOW>;
|
||||
linux,input-type = <1>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
@@ -479,7 +481,7 @@
|
||||
};
|
||||
|
||||
button_pins: button-state {
|
||||
pins = "gpio35";
|
||||
pins = "gpio17";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
|
||||
591
feeds/qca-wifi-7/ipq53xx/dts/ipq5332-sercomm-ap72tip-v4.dts
Normal file
591
feeds/qca-wifi-7/ipq53xx/dts/ipq5332-sercomm-ap72tip-v4.dts
Normal file
@@ -0,0 +1,591 @@
|
||||
// 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 = "Sercomm WiFi-7";
|
||||
compatible = "sercomm,ap72tip-v4", "qcom,ipq5332-ap-mi01.6", "qcom,ipq5332";
|
||||
|
||||
aliases {
|
||||
serial0 = &blsp1_uart0; /*console*/
|
||||
serial1 = &blsp1_uart1; /*ble*/
|
||||
ethernet0 = "/soc/dp1";
|
||||
ethernet1 = "/soc/dp2";
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0";
|
||||
};
|
||||
|
||||
soc@0 {
|
||||
|
||||
#if 0 //AQR114C
|
||||
mdio:mdio@90000 {
|
||||
pinctrl-0 = <&mdio1_pins>;
|
||||
pinctrl-names = "default";
|
||||
phy-reset-gpio = <&tlmm 0 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>;
|
||||
};
|
||||
|
||||
phy1: ethernet-phy@1 { //aqr114c
|
||||
reg = <0>;
|
||||
compatible ="ethernet-phy-ieee802.3-c45";
|
||||
};
|
||||
};
|
||||
|
||||
ess-instance {
|
||||
ess-switch@3a000000 {
|
||||
switch_cpu_bmp = <0x1>; /* cpu port bitmap */
|
||||
switch_lan_bmp = <0x0>; /* lan port bitmap */
|
||||
switch_wan_bmp = <0x6>; /* wan port bitmap */
|
||||
switch_mac_mode = <0xc>; /* mac mode for uniphy instance0*/
|
||||
switch_mac_mode1 = <0xf>; /* 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>;
|
||||
};
|
||||
port@1 { //aqr114c
|
||||
port_id = <2>;
|
||||
phy_address = <0>;
|
||||
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";
|
||||
};
|
||||
dp2 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
qcom,id = <2>;
|
||||
reg = <0x3a504000 0x4000>;
|
||||
qcom,mactype = <1>;
|
||||
local-mac-address = [000000000000];
|
||||
qcom,phy-mdio-addr = <0>;
|
||||
qcom,link-poll = <1>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
#else //SFP
|
||||
mdio:mdio@90000 {
|
||||
pinctrl-0 = <&mdio1_pins>;
|
||||
pinctrl-names = "default";
|
||||
/*gpio0 for napa*/
|
||||
phy-reset-gpio = <&tlmm 0 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <24>;
|
||||
};
|
||||
};
|
||||
ess-instance {
|
||||
ess-switch@3a000000 {
|
||||
switch_cpu_bmp = <0x1>; /* cpu port bitmap */
|
||||
switch_lan_bmp = <0x0>; /* lan port bitmap */
|
||||
switch_wan_bmp = <0x6>; /* wan port bitmap */
|
||||
switch_mac_mode = <0xc>; /* mac mode for uniphy instance0*/
|
||||
switch_mac_mode1 = <0xe>; /* mac mode for uniphy instance1 sfp PORT_WRAPPER_10GBASE_R*/
|
||||
switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/
|
||||
qcom,port_phyinfo {
|
||||
port@0 {
|
||||
port_id = <1>;
|
||||
phy_address = <24>;
|
||||
mdiobus = <&mdio>;
|
||||
};
|
||||
port@1 {
|
||||
port_id = <2>;
|
||||
phy_address = <30>;
|
||||
media-type = "sfp";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
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";
|
||||
};
|
||||
dp2 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
qcom,id = <2>;
|
||||
reg = <0x3a504000 0x4000>;
|
||||
qcom,mactype = <1>;
|
||||
local-mac-address = [000000000000];
|
||||
mdio-bus = <&mdio>;
|
||||
qcom,phy-mdio-addr = <30>;
|
||||
qcom,link-poll = <1>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/* 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 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@25 {
|
||||
label = "blue:status";
|
||||
gpios = <&tca6416 9 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "off";
|
||||
};
|
||||
led@61 {
|
||||
label = "green:phy";
|
||||
gpios = <&tca6416 15 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
led@62 {
|
||||
label = "yellow:phy";
|
||||
gpios = <&tca6416 14 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-0 = <&button_pins>;
|
||||
pinctrl-names = "default";
|
||||
button@1 {
|
||||
label = "rst";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&tlmm 1 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";
|
||||
};
|
||||
|
||||
&qcn9224_pcie1 {
|
||||
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";
|
||||
};
|
||||
|
||||
&blsp1_i2c2 {
|
||||
clock-frequency = <400000>;
|
||||
pinctrl-0 = <&i2c_0_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
tca6416: gpio@20 {
|
||||
compatible = "ti,tca6416";
|
||||
reg = <0x20>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
&blsp1_spi0 { //nor flash
|
||||
pinctrl-0 = <&spi_0_data_clk_pins &spi_0_cs_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
flash@0 {
|
||||
compatible = "n25q128a11";
|
||||
//, "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
spi-max-frequency = <50000000>;
|
||||
};
|
||||
};
|
||||
|
||||
&blsp1_spi1 { /*tpm*/
|
||||
pinctrl-0 = <&spi_1_pins>;
|
||||
pinctrl-names = "default";
|
||||
cs-select = <0>;
|
||||
status = "okay";
|
||||
|
||||
tpm: spi-tpm@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "st,st33htpm-spi";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <20000000>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&pcm {
|
||||
pinctrl-0 = <&audio_pins_pri>;
|
||||
pinctrl-names = "primary";
|
||||
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 47 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 = <0x100f>; //0x1019->0x100f
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/* PINCTRL */
|
||||
|
||||
&tlmm {
|
||||
|
||||
audio_pins_pri: audio_pinmux_pri {
|
||||
mux_1 {
|
||||
pins = "gpio29";
|
||||
function = "audio_pri";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_2 {
|
||||
pins = "gpio30";
|
||||
function = "audio_pri";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_3 {
|
||||
pins = "gpio31";
|
||||
function = "audio_pri";
|
||||
drive-strength = <4>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_4 {
|
||||
pins = "gpio32";
|
||||
function = "audio_pri";
|
||||
drive-strength = <4>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
i2c_0_pins: i2c-0-state {
|
||||
pins = "gpio43", "gpio45";
|
||||
function = "blsp2_i2c0";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
spi_1_pins: spi-1-pins { /* tpm */
|
||||
pins = "gpio29", "gpio30", "gpio31", "gpio32";
|
||||
function = "blsp1_spi0";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
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", "gpio34", "gpio35", "gpio36";
|
||||
pins = "gpio33", "gpio35";
|
||||
function = "blsp1_uart2";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
/* gpio_leds_default: gpio-leds-default-state {
|
||||
pins = "gpio36";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};*/
|
||||
|
||||
button_pins: button-state {
|
||||
pins = "gpio1";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
pwm_pins: pwm-state {
|
||||
pins = "gpio46";
|
||||
function = "pwm0";
|
||||
drive-strength = <8>;
|
||||
};
|
||||
|
||||
pcie1_default_state: pcie1-default-state {
|
||||
pins = "gpio47";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
output-low;
|
||||
};
|
||||
};
|
||||
|
||||
&license_manager {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb3 {
|
||||
qcom,multiplexed-phy;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pwm {
|
||||
pinctrl-0 = <&pwm_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&hs_m31phy_0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ssuniphy_0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
//sercomm add
|
||||
&wifi3 {
|
||||
/* QCN9224 5G+6G */
|
||||
hremote_node = <&qcn9224_pcie1>;
|
||||
qcom,board_id = <0x100f>;
|
||||
status = "okay";
|
||||
};
|
||||
601
feeds/qca-wifi-7/ipq53xx/dts/ipq5332-sercomm-ap72tip.dts
Normal file
601
feeds/qca-wifi-7/ipq53xx/dts/ipq5332-sercomm-ap72tip.dts
Normal file
@@ -0,0 +1,601 @@
|
||||
// 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 = "Sercomm WiFi-7";
|
||||
compatible = "sercomm,ap72tip", "qcom,ipq5332-ap-mi01.6", "qcom,ipq5332";
|
||||
|
||||
aliases {
|
||||
serial0 = &blsp1_uart0; /*console*/
|
||||
serial1 = &blsp1_uart1; /*ble*/
|
||||
ethernet0 = "/soc/dp1";
|
||||
ethernet1 = "/soc/dp2";
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0";
|
||||
};
|
||||
|
||||
soc@0 {
|
||||
|
||||
#if 1 //AQR114C
|
||||
mdio:mdio@90000 {
|
||||
pinctrl-0 = <&mdio1_pins>;
|
||||
pinctrl-names = "default";
|
||||
phy-reset-gpio = <&tlmm 0 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>;
|
||||
};
|
||||
|
||||
phy1: ethernet-phy@1 { //aqr114c
|
||||
reg = <0>;
|
||||
compatible ="ethernet-phy-ieee802.3-c45";
|
||||
};
|
||||
};
|
||||
|
||||
ess-instance {
|
||||
ess-switch@3a000000 {
|
||||
switch_cpu_bmp = <0x1>; /* cpu port bitmap */
|
||||
switch_lan_bmp = <0x0>; /* lan port bitmap */
|
||||
switch_wan_bmp = <0x6>; /* wan port bitmap */
|
||||
switch_mac_mode = <0xc>; /* mac mode for uniphy instance0*/
|
||||
switch_mac_mode1 = <0xf>; /* 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>;
|
||||
};
|
||||
port@1 { //aqr114c
|
||||
port_id = <2>;
|
||||
phy_address = <0>;
|
||||
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";
|
||||
};
|
||||
dp2 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
qcom,id = <2>;
|
||||
reg = <0x3a504000 0x4000>;
|
||||
qcom,mactype = <1>;
|
||||
local-mac-address = [000000000000];
|
||||
qcom,phy-mdio-addr = <0>;
|
||||
qcom,link-poll = <1>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
#else //SFP
|
||||
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";
|
||||
};
|
||||
dp2 {
|
||||
device_type = "network";
|
||||
compatible = "qcom,nss-dp";
|
||||
qcom,id = <2>;
|
||||
reg = <0x3a504000 0x4000>;
|
||||
qcom,mactype = <1>;
|
||||
local-mac-address = [000000000000];
|
||||
mdio-bus = <&mdio>;
|
||||
qcom,phy-mdio-addr = <30>;
|
||||
qcom,link-poll = <1>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
|
||||
mdio:mdio@90000 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&mdio1_pins>;
|
||||
pinctrl-names = "default";
|
||||
/*gpio0 for napa*/
|
||||
phy-reset-gpio = <&tlmm 0 0>;
|
||||
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <24>;
|
||||
};
|
||||
};
|
||||
|
||||
ess-instance {
|
||||
ess-switch@3a000000 {
|
||||
switch_cpu_bmp = <0x1>; /* cpu port bitmap */
|
||||
switch_lan_bmp = <0x0>; /* lan port bitmap */
|
||||
switch_wan_bmp = <0x6>; /* wan port bitmap */
|
||||
switch_mac_mode = <0xc>; /* mac mode for uniphy instance0*/
|
||||
switch_mac_mode1 = <0xe>; /* mac mode for uniphy instance1 sfp PORT_WRAPPER_10GBASE_R*/
|
||||
switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/
|
||||
qcom,port_phyinfo {
|
||||
port@0 {
|
||||
port_id = <1>;
|
||||
phy_address = <24>;
|
||||
};
|
||||
port@1 {
|
||||
port_id = <2>;
|
||||
phy_address = <30>;
|
||||
media-type = "sfp";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/* 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 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@25 {
|
||||
label = "blue:status";
|
||||
gpios = <&tca6416 9 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "off";
|
||||
};
|
||||
led@24 {
|
||||
label = "red:status";
|
||||
gpios = <&tca6416 10 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
led_power: led@16 {
|
||||
label = "green:status";
|
||||
gpios = <&tca6416 11 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
led@61 {
|
||||
label = "green:phy";
|
||||
gpios = <&tca6416 15 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
led@62 {
|
||||
label = "yellow:phy";
|
||||
gpios = <&tca6416 14 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
/*
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-0 = <&button_pins>;
|
||||
pinctrl-names = "default";
|
||||
button@1 {
|
||||
label = "rst";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&tlmm 25 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";
|
||||
};
|
||||
|
||||
&qcn9224_pcie1 {
|
||||
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";
|
||||
};
|
||||
|
||||
&blsp1_i2c2 {
|
||||
clock-frequency = <400000>;
|
||||
pinctrl-0 = <&i2c_0_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
tca6416: gpio@20 {
|
||||
compatible = "ti,tca6416";
|
||||
reg = <0x20>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
&blsp1_spi0 { //nor flash
|
||||
pinctrl-0 = <&spi_0_data_clk_pins &spi_0_cs_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
flash@0 {
|
||||
compatible = "n25q128a11";
|
||||
//, "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
spi-max-frequency = <50000000>;
|
||||
};
|
||||
};
|
||||
|
||||
&blsp1_spi1 { /*tpm*/
|
||||
pinctrl-0 = <&spi_1_pins>;
|
||||
pinctrl-names = "default";
|
||||
cs-select = <0>;
|
||||
status = "okay";
|
||||
|
||||
tpm: spi-tpm@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "st,st33htpm-spi";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <20000000>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&pcm {
|
||||
pinctrl-0 = <&audio_pins_pri>;
|
||||
pinctrl-names = "primary";
|
||||
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 47 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 = <0x100f>; //0x1019->0x100f
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/* PINCTRL */
|
||||
|
||||
&tlmm {
|
||||
|
||||
audio_pins_pri: audio_pinmux_pri {
|
||||
mux_1 {
|
||||
pins = "gpio29";
|
||||
function = "audio_pri";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_2 {
|
||||
pins = "gpio30";
|
||||
function = "audio_pri";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_3 {
|
||||
pins = "gpio31";
|
||||
function = "audio_pri";
|
||||
drive-strength = <4>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
mux_4 {
|
||||
pins = "gpio32";
|
||||
function = "audio_pri";
|
||||
drive-strength = <4>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
i2c_0_pins: i2c-0-state {
|
||||
pins = "gpio43", "gpio45";
|
||||
function = "blsp2_i2c0";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
spi_1_pins: spi-1-pins { /* tpm */
|
||||
pins = "gpio29", "gpio30", "gpio31", "gpio32";
|
||||
function = "blsp1_spi0";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
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", "gpio34", "gpio35", "gpio36";
|
||||
pins = "gpio33", "gpio35";
|
||||
function = "blsp1_uart2";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
/* gpio_leds_default: gpio-leds-default-state {
|
||||
pins = "gpio36";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-down;
|
||||
};*/
|
||||
/*
|
||||
button_pins: button-state {
|
||||
pins = "gpio25";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
};*/
|
||||
|
||||
pwm_pins: pwm-state {
|
||||
pins = "gpio46";
|
||||
function = "pwm0";
|
||||
drive-strength = <8>;
|
||||
};
|
||||
|
||||
pcie1_default_state: pcie1-default-state {
|
||||
pins = "gpio47";
|
||||
function = "gpio";
|
||||
drive-strength = <8>;
|
||||
bias-pull-up;
|
||||
output-low;
|
||||
};
|
||||
};
|
||||
|
||||
&license_manager {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb3 {
|
||||
qcom,multiplexed-phy;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pwm {
|
||||
pinctrl-0 = <&pwm_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&hs_m31phy_0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ssuniphy_0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
//sercomm add
|
||||
&wifi3 {
|
||||
/* QCN9224 5G+6G */
|
||||
hremote_node = <&qcn9224_pcie1>;
|
||||
qcom,board_id = <0x100f>;
|
||||
status = "okay";
|
||||
};
|
||||
@@ -736,6 +736,36 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
blsp1_spi1: spi@78b6000 {
|
||||
compatible = "qcom,spi-qup-v2.2.1";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x078b6000 0x600>;
|
||||
interrupts = <GIC_SPI 293 IRQ_TYPE_LEVEL_HIGH>;
|
||||
spi-max-frequency = <50000000>;
|
||||
clocks = <&gcc GCC_BLSP1_QUP2_SPI_APPS_CLK>,
|
||||
<&gcc GCC_BLSP1_AHB_CLK>;
|
||||
clock-names = "core", "iface";
|
||||
dmas = <&blsp_dma 6>, <&blsp_dma 7>;
|
||||
dma-names = "tx", "rx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
blsp1_i2c2: i2c@78b7000 {
|
||||
compatible = "qcom,i2c-qup-v2.2.1";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x78b7000 0x600>;
|
||||
interrupts = <GIC_SPI 294 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&gcc GCC_BLSP1_AHB_CLK>,
|
||||
<&gcc GCC_BLSP1_QUP3_I2C_APPS_CLK>;
|
||||
clock-names = "iface", "core";
|
||||
clock-frequency = <400000>;
|
||||
dmas = <&blsp_dma 8>, <&blsp_dma 9>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
blsp1_i2c1: i2c@78b6000 {
|
||||
compatible = "qcom,i2c-qup-v2.2.1";
|
||||
reg = <0x078b6000 0x600>;
|
||||
|
||||
20
feeds/qca-wifi-7/ipq53xx/files-6.1/drivers/net/phy/rtk/rtk_phy.c
Executable file → Normal file
20
feeds/qca-wifi-7/ipq53xx/files-6.1/drivers/net/phy/rtk/rtk_phy.c
Executable file → Normal file
@@ -7,6 +7,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#include "phy_rtl826xb_patch.h"
|
||||
#include "phy_rtl8251b_patch.h"
|
||||
@@ -30,6 +31,7 @@ static int rtl8251_match_phy_device(struct phy_device *phydev)
|
||||
static int rtl826xb_get_features(struct phy_device *phydev)
|
||||
{
|
||||
int ret;
|
||||
struct device_node *np;
|
||||
ret = genphy_c45_pma_read_abilities(phydev);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -48,6 +50,14 @@ static int rtl826xb_get_features(struct phy_device *phydev)
|
||||
linkmode_clear_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
|
||||
phydev->supported);
|
||||
|
||||
np = of_find_node_by_name(NULL, "mdio");
|
||||
if (np)
|
||||
if (of_property_read_bool(np, "limit_rtlphy_10g_ablity"))
|
||||
{
|
||||
linkmode_clear_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, phydev->supported);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -80,7 +90,6 @@ static int rtkphy_config_init(struct phy_device *phydev)
|
||||
case REALTEK_PHY_ID_RTL8261N:
|
||||
case REALTEK_PHY_ID_RTL8264B:
|
||||
phydev_info(phydev, "%s:%u [RTL8261N/RTL826XB] phy_id: 0x%X PHYAD:%d\n", __FUNCTION__, __LINE__, phydev->drv->phy_id, phydev->mdio.addr);
|
||||
phy_modify_mmd_changed(phydev, 7, 0x20, BIT(12), 0);
|
||||
|
||||
#if 1 /* toggle reset */
|
||||
phy_modify_mmd_changed(phydev, 30, 0x145, BIT(0) , 1);
|
||||
@@ -213,7 +222,6 @@ static int rtkphy_c45_aneg_done(struct phy_device *phydev)
|
||||
static int rtkphy_c45_read_status(struct phy_device *phydev)
|
||||
{
|
||||
int ret = 0, status = 0;
|
||||
uint16_t local;
|
||||
phydev->speed = SPEED_UNKNOWN;
|
||||
phydev->duplex = DUPLEX_UNKNOWN;
|
||||
phydev->pause = 0;
|
||||
@@ -232,9 +240,6 @@ static int rtkphy_c45_read_status(struct phy_device *phydev)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
phy_write_mmd(phydev, 7, 0x20, 0x181);
|
||||
local = phy_read_mmd(phydev, 7, 0x20);
|
||||
|
||||
status = phy_read_mmd(phydev, 31, 0xA414);
|
||||
if (status < 0)
|
||||
return status;
|
||||
@@ -242,11 +247,6 @@ static int rtkphy_c45_read_status(struct phy_device *phydev)
|
||||
phydev->lp_advertising, status & BIT(11));
|
||||
|
||||
phy_resolve_aneg_linkmode(phydev);
|
||||
if((phydev->speed == 10000) && (local == 0x181))
|
||||
{
|
||||
phydev->speed = 5000;
|
||||
phydev->duplex = DUPLEX_FULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -2288,7 +2288,7 @@ CONFIG_GPIOLIB_FASTPATH_LIMIT=512
|
||||
# CONFIG_GPIO_ML_IOH is not set
|
||||
# CONFIG_GPIO_MOCKUP is not set
|
||||
# CONFIG_GPIO_MPC8XXX is not set
|
||||
# CONFIG_GPIO_PCA953X is not set
|
||||
CONFIG_GPIO_PCA953X=y
|
||||
# CONFIG_GPIO_PCA953X_IRQ is not set
|
||||
# CONFIG_GPIO_PCA9570 is not set
|
||||
# CONFIG_GPIO_PCF857X is not set
|
||||
|
||||
@@ -14,16 +14,30 @@ endef
|
||||
TARGET_DEVICES += cig_wf189
|
||||
|
||||
define Device/sercomm_ap72tip
|
||||
DEVICE_TITLE := Sercomm AP72 TIP
|
||||
DEVICE_TITLE := Sercomm AP72TIP
|
||||
DEVICE_DTS := ipq5332-sercomm-ap72tip
|
||||
DEVICE_DTS_CONFIG := config@mi01.2-qcn9160-c1
|
||||
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-sercomm-ap72tip ath12k-firmware-qcn92xx ath12k-firmware-ipq5332
|
||||
endef
|
||||
#TARGET_DEVICES += sercomm_ap72tip
|
||||
TARGET_DEVICES += sercomm_ap72tip
|
||||
|
||||
define Device/sercomm_ap72tip-v4
|
||||
DEVICE_TITLE := Sercomm AP72TIP-v4
|
||||
DEVICE_DTS := ipq5332-sercomm-ap72tip-v4
|
||||
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-sercomm-ap72tip-v4 ath12k-firmware-qcn92xx ath12k-firmware-ipq5332
|
||||
endef
|
||||
TARGET_DEVICES += sercomm_ap72tip-v4
|
||||
|
||||
define Device/edgecore_eap105
|
||||
DEVICE_TITLE := Edgecore EAP105
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
From 85a7c62d4e3385de1a379959dd45148cfdc95b3b Mon Sep 17 00:00:00 2001
|
||||
From: huangyunxiang <huangyunxiang@cigtech.com>
|
||||
Date: Tue, 29 Apr 2025 09:56:28 +0800
|
||||
Subject: [PATCH] qca-ssdk modify rtl826x phy mdio read/write as c45 mode and
|
||||
clear 10G ablity
|
||||
|
||||
---
|
||||
src/hsl/phy/rtl826xb_phy.c | 55 ++++++-------------
|
||||
1 file changed, 17 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/src/hsl/phy/rtl826xb_phy.c b/src/hsl/phy/rtl826xb_phy.c
|
||||
index a336348aa9..9a67b45948 100644
|
||||
--- a/src/hsl/phy/rtl826xb_phy.c
|
||||
+++ b/src/hsl/phy/rtl826xb_phy.c
|
||||
@@ -48,46 +48,39 @@ void rtl826xb_phy_lock_init(void)
|
||||
|
||||
static a_uint16_t rtl826x_phy_mmd_read(a_uint32_t dev_id, a_uint32_t phy_id, a_uint16_t reg_mmd, a_uint16_t reg_id)
|
||||
{
|
||||
- a_uint32_t reg_id_c45 = RTL826XB_REG_ADDRESS(reg_mmd, reg_id);
|
||||
-
|
||||
- return __hsl_phy_mii_reg_read(dev_id, phy_id, reg_id_c45);
|
||||
+ return hsl_phy_mmd_reg_read(dev_id, phy_id, A_TRUE, reg_mmd, reg_id);
|
||||
}
|
||||
|
||||
|
||||
static sw_error_t rtl826x_phy_mmd_write(a_uint32_t dev_id, a_uint32_t phy_id, a_uint16_t reg_mmd, a_uint16_t reg_id, a_uint16_t reg_val)
|
||||
{
|
||||
- a_uint32_t reg_id_c45 = RTL826XB_REG_ADDRESS(reg_mmd, reg_id);
|
||||
-
|
||||
- return __hsl_phy_mii_reg_write(dev_id, phy_id, reg_id_c45, reg_val);
|
||||
+ return hsl_phy_mmd_reg_write(dev_id, phy_id, A_TRUE, reg_mmd, reg_id, reg_val);
|
||||
}
|
||||
|
||||
|
||||
static a_uint16_t rtl826x_phy_reg_read(a_uint32_t dev_id, a_uint32_t phy_id, a_uint32_t reg)
|
||||
{
|
||||
- return __hsl_phy_mii_reg_read(dev_id, phy_id, reg);
|
||||
+ return hsl_phy_mii_reg_read(dev_id, phy_id, reg);
|
||||
}
|
||||
|
||||
|
||||
static sw_error_t rtl826x_phy_reg_write(a_uint32_t dev_id, a_uint32_t phy_id, a_uint32_t reg, a_uint16_t reg_val)
|
||||
{
|
||||
- return __hsl_phy_mii_reg_write(dev_id, phy_id, reg, reg_val);
|
||||
+
|
||||
+ return hsl_phy_mii_reg_write(dev_id, phy_id, reg, reg_val);
|
||||
}
|
||||
|
||||
|
||||
static a_int16_t hal_miim_mmd_read(a_uint32_t dev_id, a_uint32_t phy_id, a_uint16_t mmdAddr, a_uint16_t mmdReg)
|
||||
{
|
||||
- a_uint32_t reg_id_c45 = RTL826XB_REG_ADDRESS(mmdAddr, mmdReg);
|
||||
-
|
||||
- return __hsl_phy_mii_reg_read(dev_id, phy_id, reg_id_c45);
|
||||
+ return hsl_phy_mmd_reg_read(dev_id, phy_id, A_TRUE, mmdAddr, mmdReg);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static a_int32_t hal_miim_mmd_write(a_uint32_t dev_id, a_uint32_t phy_id, a_uint16_t mmdAddr, a_uint16_t mmdReg, a_uint16_t phy_data)
|
||||
{
|
||||
- a_uint32_t reg_id_c45 = RTL826XB_REG_ADDRESS(mmdAddr, mmdReg);
|
||||
-
|
||||
- return __hsl_phy_mii_reg_write(dev_id, phy_id, reg_id_c45, phy_data);
|
||||
+ return hsl_phy_mmd_reg_write(dev_id, phy_id, A_TRUE, mmdAddr, mmdReg, phy_data);
|
||||
}
|
||||
|
||||
|
||||
@@ -1281,34 +1274,20 @@ phy_826xb_autoNegoAbility_set(a_uint32_t dev_id, a_uint32_t phy_id, a_uint32_t a
|
||||
hsl_phy_phydev_autoneg_update(dev_id, phy_id, A_TRUE, autoneg);
|
||||
|
||||
phyData = phy_common_general_reg_mmd_get(dev_id, phy_id, PHY_MMD_AN, 16);
|
||||
+ phyData &= (~(0x0020 | 0x0040 | FAL_PHY_ADV_100TX_HD | FAL_PHY_ADV_100TX_FD | FAL_PHY_ADV_PAUSE | FAL_PHY_ADV_ASY_PAUSE));
|
||||
+ phyData |= (autoneg & FAL_PHY_ADV_100TX_HD) ? (FAL_PHY_ADV_100TX_HD) : (0);
|
||||
+ phyData |= ((autoneg & FAL_PHY_ADV_100TX_FD)) ? (FAL_PHY_ADV_100TX_FD) : (0);
|
||||
|
||||
- phyData &= (~(0x0020 | 0x0040 | 0x0080 | 0x0100 | 0x0400 | 0x0800));
|
||||
- phyData |= ((autoneg & 1 << 1)) ? (0x0040) : (0);
|
||||
- phyData |= ((autoneg & 1 << 2)) ? (0x0080) : (0);
|
||||
- phyData |= ((autoneg & 1 << 3)) ? (0x0100) : (0);
|
||||
- phyData |= ((autoneg & 1 << 4)) ? (0x0400) : (0);
|
||||
- phyData |= ((autoneg & 1 << 5)) ? (0x0800) : (0);
|
||||
-// phyData |= ((autoneg & 1 << 9)) ? (0x0400) : (0);
|
||||
-// phyData |= ((autoneg & 1 << 10)) ? (0x0800) : (0);
|
||||
-
|
||||
- phy_common_general_reg_mmd_set(dev_id, phy_id, PHY_MMD_AN, 16, phyData);
|
||||
-
|
||||
+ phy_common_general_reg_mmd_set(dev_id, phy_id, PHY_MMD_AN, 16, phyData);
|
||||
phyData = phy_common_general_reg_mmd_get(dev_id, phy_id, PHY_MMD_AN, 32);
|
||||
+ phyData &= (~(FAL_PHY_ADV_2500T_FD | FAL_PHY_ADV_5000T_FD | FAL_PHY_ADV_10000T_FD));
|
||||
+ phyData |= (autoneg & FAL_PHY_ADV_2500T_FD) ? (FAL_PHY_ADV_2500T_FD) : (0);
|
||||
+ phyData |= (autoneg & FAL_PHY_ADV_5000T_FD) ? (FAL_PHY_ADV_5000T_FD) : (0);
|
||||
|
||||
- phyData &= (~(0x4000 | 0x2000 | 0x1000));
|
||||
- phyData |= (autoneg & 1 << 12) ? (0x0080) : (0);
|
||||
- phyData |= (autoneg & 1 << 13) ? (0x0100) : (0);
|
||||
- phyData |= (autoneg & 1 << 14) ? (0x1000) : (0);
|
||||
-
|
||||
- phy_common_general_reg_mmd_set(dev_id, phy_id, PHY_MMD_AN, 32, phyData);
|
||||
-
|
||||
-
|
||||
+ phy_common_general_reg_mmd_set(dev_id, phy_id, PHY_MMD_AN, 32, phyData);
|
||||
phyData = phy_common_general_reg_mmd_get(dev_id, phy_id, PHY_MMD_VEND2, 0xA412);
|
||||
-
|
||||
-
|
||||
- phyData &= (~(0x0100 | 0x0200));
|
||||
- phyData |= (autoneg & 1 << 9) ? (0x0200) : (0);
|
||||
-// phyData |= (autoneg & 1 << 5) ? (0x0200) : (0);
|
||||
+ phyData &= (~(0x0100 | FAL_PHY_ADV_1000T_FD));
|
||||
+ phyData |= (autoneg & FAL_PHY_ADV_1000T_FD) ? (FAL_PHY_ADV_1000T_FD) : (0);
|
||||
|
||||
phy_common_general_reg_mmd_set(dev_id, phy_id, PHY_MMD_VEND2, 0xA412, phyData);
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
324
feeds/tip/tip-defaults/files/usr/bin/mem_monitor.sh
Executable file
324
feeds/tip/tip-defaults/files/usr/bin/mem_monitor.sh
Executable file
@@ -0,0 +1,324 @@
|
||||
#!/bin/sh
|
||||
PRIMARY_DIR="/root/mem_usage"
|
||||
PRIMARY_FALLBACK_DIR="/tmp/mem_usage_live"
|
||||
ARCHIVE_DIR="/tmp/mem_usage"
|
||||
ARCHIVE_TMP_DIR="/tmp/mem_usage_tmp"
|
||||
|
||||
# thresholds
|
||||
PRIMARY_MAX_BYTES=$((3 * 1024 * 1024)) # 3 MB
|
||||
ARCHIVE_MAX_BYTES=$((15 * 1024 * 1024)) # 15 MB
|
||||
RETENTION_DAYS=7 # remove archives older than this
|
||||
SLEEP_INTERVAL=10 # 15 minutes between collections
|
||||
KMEMLEAK_IFACE="/sys/kernel/debug/kmemleak"
|
||||
# Ensure primary dir writable, otherwise fallback
|
||||
if [ ! -d "$PRIMARY_DIR" ] || [ ! -w "$PRIMARY_DIR" ]; then
|
||||
mkdir -p "$PRIMARY_DIR" 2>/dev/null || true
|
||||
fi
|
||||
if [ ! -d "$PRIMARY_DIR" ] || [ ! -w "$PRIMARY_DIR" ]; then
|
||||
PRIMARY_DIR="$PRIMARY_FALLBACK_DIR"
|
||||
mkdir -p "$PRIMARY_DIR" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Ensure archive dir exists
|
||||
mkdir -p "$ARCHIVE_DIR" 2>/dev/null || true
|
||||
mkdir -p "$ARCHIVE_TMP_DIR" 2>/dev/null || true
|
||||
mkdir -p "$PRIMARY_DIR" 2>/dev/null || true
|
||||
|
||||
# Host identity
|
||||
MAC="$(uci get system.@system[0].hostname)"
|
||||
MAC="${MAC:-}"
|
||||
|
||||
log() { printf '%s %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >&2; }
|
||||
|
||||
dir_size_bytes() {
|
||||
t="$1"
|
||||
if [ ! -d "$t" ]; then echo 0; return 0; fi
|
||||
kb=$(du -s "$t" 2>/dev/null | awk '{print $1}')
|
||||
if [ -z "$kb" ]; then echo 0; else echo $((kb * 1024)); fi
|
||||
}
|
||||
|
||||
# Ensure archive total size <= ARCHIVE_MAX_BYTES by deleting oldest tar.gz
|
||||
enforce_archive_size_limit() {
|
||||
[ -d "$ARCHIVE_DIR" ] || return 0
|
||||
total=$(dir_size_bytes "$ARCHIVE_DIR")
|
||||
if [ "$total" -le "$ARCHIVE_MAX_BYTES" ]; then return 0; fi
|
||||
|
||||
ls -1tr -- "$ARCHIVE_DIR"/*.tar.gz 2>/dev/null | while IFS= read -r af; do
|
||||
if [ -z "$af" ]; then break; fi
|
||||
rm -f -- "$af" && log "INFO: removed oldest archive $af to free space"
|
||||
total=$(dir_size_bytes "$ARCHIVE_DIR")
|
||||
if [ "$total" -le "$ARCHIVE_MAX_BYTES" ]; then break; fi
|
||||
done
|
||||
}
|
||||
|
||||
# Create a single tarball containing ALL files from PRIMARY_DIR and move to ARCHIVE_DIR.
|
||||
tar_all_primary_now() {
|
||||
ts=$(date +%Y%m%d_%H%M%S)
|
||||
tar_name="memtracker_all_${ts}.tar.gz"
|
||||
tmp_tar="${ARCHIVE_TMP_DIR}/${tar_name}.partial.$$"
|
||||
tar_err="${ARCHIVE_TMP_DIR}/tar_err_all.$$"
|
||||
|
||||
if [ ! -d "$PRIMARY_DIR" ]; then
|
||||
echo "ERROR: PRIMARY_DIR '$PRIMARY_DIR' missing" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
set -- "$PRIMARY_DIR"/*
|
||||
if [ ! -e "$1" ]; then
|
||||
echo "DEBUG: no files in $PRIMARY_DIR to archive" >&2
|
||||
return 2
|
||||
fi
|
||||
|
||||
(
|
||||
cd "$PRIMARY_DIR" || { echo "ERROR: cannot cd $PRIMARY_DIR" >&2; exit 3; }
|
||||
if ! tar -czf "$tmp_tar" . 2>"$tar_err"; then
|
||||
echo "ERROR: tar failed (see $tar_err)" >&2
|
||||
[ -f "$tmp_tar" ] && rm -f "$tmp_tar"
|
||||
exit 4
|
||||
fi
|
||||
exit 0
|
||||
)
|
||||
rc=$?
|
||||
if [ $rc -ne 0 ]; then
|
||||
return $rc
|
||||
fi
|
||||
|
||||
if [ ! -d "$ARCHIVE_DIR" ]; then
|
||||
mkdir -p "$ARCHIVE_DIR" 2>/dev/null || {
|
||||
echo "WARN: cannot create ARCHIVE_DIR $ARCHIVE_DIR; leaving tar in $ARCHIVE_TMP_DIR" >&2
|
||||
mv -f "$tmp_tar" "${ARCHIVE_TMP_DIR}/${tar_name}" 2>/dev/null || true
|
||||
return 5
|
||||
}
|
||||
fi
|
||||
|
||||
if mv -f "$tmp_tar" "$ARCHIVE_DIR/$tar_name" 2>/dev/null; then
|
||||
sync || true
|
||||
find "$PRIMARY_DIR" -maxdepth 1 -type f -print0 2>/dev/null |
|
||||
while IFS= read -r -d '' src; do rm -f -- "$src"; done
|
||||
echo "INFO: archived all -> $ARCHIVE_DIR/$tar_name" >&2
|
||||
return 0
|
||||
fi
|
||||
|
||||
if cp -f "$tmp_tar" "$ARCHIVE_DIR/$tar_name" 2>/dev/null; then
|
||||
sync || true
|
||||
rm -f "$tmp_tar"
|
||||
find "$PRIMARY_DIR" -maxdepth 1 -type f -print0 2>/dev/null |
|
||||
while IFS= read -r -d '' src; do rm -f -- "$src"; done
|
||||
echo "INFO: copied archive -> $ARCHIVE_DIR/$tar_name (fallback)" >&2
|
||||
return 0
|
||||
fi
|
||||
|
||||
mv -f "$tmp_tar" "${ARCHIVE_TMP_DIR}/${tar_name}" 2>/dev/null || true
|
||||
echo "WARN: failed to move/copy $tar_name to $ARCHIVE_DIR; kept ${ARCHIVE_TMP_DIR}/${tar_name}" >&2
|
||||
return 6
|
||||
}
|
||||
|
||||
collect_meminfo() {
|
||||
ts=$(date +%Y%m%d_%H%M%S)
|
||||
out="$PRIMARY_DIR/meminfo_${ts}.csv"
|
||||
|
||||
if [ ! -r /proc/meminfo ]; then
|
||||
echo "ERROR: Cannot read /proc/meminfo" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
{
|
||||
# header
|
||||
printf "timestamp,mac"
|
||||
awk '{gsub(":", "", $1); printf ",%s", $1}' /proc/meminfo
|
||||
printf "\n"
|
||||
|
||||
# row of values
|
||||
printf "%s,%s" "$ts" "$MAC"
|
||||
awk '{printf ",%s", $2}' /proc/meminfo
|
||||
printf "\n"
|
||||
} > "$out"
|
||||
|
||||
echo "Collected meminfo -> $out"
|
||||
}
|
||||
|
||||
collect_slabinfo() {
|
||||
ts=$(date +%Y%m%d_%H%M%S)
|
||||
out="$PRIMARY_DIR/slabinfo_${ts}.csv"
|
||||
|
||||
[ -r /proc/slabinfo ] || { echo "ERROR: Cannot read /proc/slabinfo" >&2; return 1; }
|
||||
|
||||
awk -v ts="$ts" -v mac="$MAC" '
|
||||
BEGIN {
|
||||
OFS = ","
|
||||
ncount = 0
|
||||
}
|
||||
/^slabinfo/ { next }
|
||||
/^#/ { next }
|
||||
{
|
||||
line = $0
|
||||
# split into up to 3 parts by ":" (some lines contain two ":" separators)
|
||||
parts_count = split(line, parts, ":")
|
||||
|
||||
# trim leading/trailing whitespace from parts[1]
|
||||
gsub(/^[[:space:]]+|[[:space:]]+$/, "", parts[1])
|
||||
|
||||
# parse first segment tokens (name + first numeric columns)
|
||||
toks0_count = split(parts[1], t0, /[[:space:]]+/)
|
||||
name_raw = (toks0_count >= 1 ? t0[1] : "")
|
||||
# sanitize name to be CSV-safe
|
||||
name = name_raw
|
||||
gsub(/[^A-Za-z0-9_]/, "_", name)
|
||||
|
||||
active = (toks0_count >= 2 ? t0[2] : 0)
|
||||
num_objs = (toks0_count >= 3 ? t0[3] : 0)
|
||||
objsize = (toks0_count >= 4 ? t0[4] : 0)
|
||||
objperslab = (toks0_count >= 5 ? t0[5] : 0)
|
||||
#pagesperslab= (toks0_count >= 6 ? t0[6] : 0)
|
||||
|
||||
# tunables: parse parts[2] if present
|
||||
tun_limit = tun_batch = tun_shared = 0
|
||||
if (parts_count >= 2) {
|
||||
# trim whitespace
|
||||
gsub(/^[[:space:]]+|[[:space:]]+$/, "", parts[2])
|
||||
ni = split(parts[2], t1, /[[:space:]]+/)
|
||||
# pick last 3 numeric tokens (limit, batchcount, sharedfactor)
|
||||
cnt = 0
|
||||
for (i = ni; i >= 1 && cnt < 3; i--) {
|
||||
if (t1[i] ~ /^[0-9]+$/) {
|
||||
if (cnt == 0) tun_shared = t1[i]
|
||||
else if (cnt == 1) tun_batch = t1[i]
|
||||
else if (cnt == 2) tun_limit = t1[i]
|
||||
cnt++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# slabdata: usually parts[3]; if missing, it may be in parts[2] - we try parts[3] first
|
||||
active_slabs = num_slabs = sharedavail = 0
|
||||
if (parts_count >= 3) {
|
||||
gsub(/^[[:space:]]+|[[:space:]]+$/, "", parts[3])
|
||||
ni2 = split(parts[3], t2, /[[:space:]]+/)
|
||||
cnt2 = 0
|
||||
for (i = ni2; i >= 1 && cnt2 < 3; i--) {
|
||||
if (t2[i] ~ /^[0-9]+$/) {
|
||||
if (cnt2 == 0) sharedavail = t2[i]
|
||||
else if (cnt2 == 1) num_slabs = t2[i]
|
||||
else if (cnt2 == 2) active_slabs = t2[i]
|
||||
cnt2++
|
||||
}
|
||||
}
|
||||
} else if (parts_count == 2) {
|
||||
# fallback: try to extract slabdata numeric suffix from parts[2]
|
||||
ni2 = split(parts[2], t2, /[[:space:]]+/)
|
||||
cnt2 = 0
|
||||
for (i = ni2; i >= 1 && cnt2 < 3; i--) {
|
||||
if (t2[i] ~ /^[0-9]+$/) {
|
||||
if (cnt2 == 0) sharedavail = t2[i]
|
||||
else if (cnt2 == 1) num_slabs = t2[i]
|
||||
else if (cnt2 == 2) active_slabs = t2[i]
|
||||
cnt2++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# store values
|
||||
names[++ncount] = name
|
||||
vals[name, "active"] = active
|
||||
vals[name, "num_objs"] = num_objs
|
||||
vals[name, "objsize"] = objsize
|
||||
#vals[name, "objperslab"] = objperslab
|
||||
#vals[name, "pagesperslab"] = pagesperslab
|
||||
#vals[name, "tun_limit"] = tun_limit
|
||||
#vals[name, "tun_batch"] = tun_batch
|
||||
#vals[name, "tun_shared"] = tun_shared
|
||||
#vals[name, "active_slabs"] = active_slabs
|
||||
#vals[name, "num_slabs"] = num_slabs
|
||||
#vals[name, "sharedavail"] = sharedavail
|
||||
}
|
||||
END {
|
||||
# Header
|
||||
printf "timestamp%smac", OFS
|
||||
for (i = 1; i <= ncount; i++) {
|
||||
nm = names[i]
|
||||
printf "%s%s_active", OFS, nm
|
||||
printf "%s%s_num_objs", OFS, nm
|
||||
printf "%s%s_objsize", OFS, nm
|
||||
#printf "%s%s_objperslab", OFS, nm
|
||||
#printf "%s%s_pagesperslab", OFS, nm
|
||||
#printf "%s%s_tun_limit", OFS, nm
|
||||
#printf "%s%s_tun_batch", OFS, nm
|
||||
#printf "%s%s_tun_shared", OFS, nm
|
||||
#printf "%s%s_active_slabs", OFS, nm
|
||||
#printf "%s%s_num_slabs", OFS, nm
|
||||
#printf "%s%s_sharedavail", OFS, nm
|
||||
}
|
||||
printf "\n"
|
||||
|
||||
# Values row
|
||||
printf "%s%s%s", ts, OFS, mac
|
||||
for (i = 1; i <= ncount; i++) {
|
||||
nm = names[i]
|
||||
printf "%s%s", OFS, (vals[nm, "active"] != "" ? vals[nm, "active"] : 0)
|
||||
printf "%s%s", OFS, (vals[nm, "num_objs"] != "" ? vals[nm, "num_objs"] : 0)
|
||||
printf "%s%s", OFS, (vals[nm, "objsize"] != "" ? vals[nm, "objsize"] : 0)
|
||||
#printf "%s%s", OFS, (vals[nm, "objperslab"] != "" ? vals[nm, "objperslab"] : 0)
|
||||
#printf "%s%s", OFS, (vals[nm, "pagesperslab"] != "" ? vals[nm, "pagesperslab"] : 0)
|
||||
#printf "%s%s", OFS, (vals[nm, "tun_limit"] != "" ? vals[nm, "tun_limit"] : 0)
|
||||
#printf "%s%s", OFS, (vals[nm, "tun_batch"] != "" ? vals[nm, "tun_batch"] : 0)
|
||||
#printf "%s%s", OFS, (vals[nm, "tun_shared"] != "" ? vals[nm, "tun_shared"] : 0)
|
||||
#printf "%s%s", OFS, (vals[nm, "active_slabs"] != "" ? vals[nm, "active_slabs"] : 0)
|
||||
#printf "%s%s", OFS, (vals[nm, "num_slabs"] != "" ? vals[nm, "num_slabs"] : 0)
|
||||
#printf "%s%s", OFS, (vals[nm, "sharedavail"] != "" ? vals[nm, "sharedavail"] : 0)
|
||||
}
|
||||
printf "\n"
|
||||
}' /proc/slabinfo > "$out" 2>/dev/null || { echo "ERROR: slabinfo parsing failed" >&2; return 2; }
|
||||
|
||||
echo "Collected slabinfo -> $out"
|
||||
return 0
|
||||
}
|
||||
|
||||
collect_kmemleak() {
|
||||
ts=$(date +%Y%m%d_%H%M%S)
|
||||
out="$PRIMARY_DIR/kmemleak_${ts}.txt"
|
||||
|
||||
if [ ! -d "$(dirname "$KMEMLEAK_IFACE")" ] || [ ! -e "$KMEMLEAK_IFACE" ]; then
|
||||
echo "WARN: kmemleak interface not present at $KMEMLEAK_IFACE" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Trigger kernel scan (best-effort; may require root)
|
||||
if [ -w "$KMEMLEAK_IFACE" ]; then
|
||||
# echo "scan" returns nothing; do it in a safe way
|
||||
echo scan > "$KMEMLEAK_IFACE" 2>/dev/null || true
|
||||
# small pause to let kernel produce a report (optional)
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
# Save the current kmemleak output (read-only)
|
||||
if [ -r "$KMEMLEAK_IFACE" ]; then
|
||||
# prefix with timestamp for clarity
|
||||
printf 'kmemleak snapshot: %s\n\n' "$ts" > "$out"
|
||||
cat "$KMEMLEAK_IFACE" >> "$out" 2>/dev/null || true
|
||||
sync || true
|
||||
echo "Collected kmemleak -> $out"
|
||||
return 0
|
||||
else
|
||||
echo "ERROR: cannot read $KMEMLEAK_IFACE" >&2
|
||||
return 2
|
||||
fi
|
||||
}
|
||||
|
||||
log "Starting mem_monitor. PRIMARY_DIR=$PRIMARY_DIR ARCHIVE_DIR=$ARCHIVE_DIR"
|
||||
while true; do
|
||||
|
||||
collect_meminfo
|
||||
collect_slabinfo
|
||||
collect_kmemleak
|
||||
|
||||
prim_size=$(du -s "$PRIMARY_DIR" 2>/dev/null | awk '{print $1}')
|
||||
prim_size=$(( prim_size * 1024 )) # convert KB to bytes
|
||||
if [ "$prim_size" -ge "$PRIMARY_MAX_BYTES" ]; then
|
||||
echo "DEBUG: PRIMARY threshold reached: ${prim_size} bytes >= ${PRIMARY_MAX_BYTES}" >&2
|
||||
tar_all_primary_now || echo "WARN: tar_all_primary_now returned $?" >&2
|
||||
fi
|
||||
|
||||
enforce_archive_size_limit
|
||||
|
||||
sleep "$SLEEP_INTERVAL"
|
||||
done
|
||||
@@ -6,8 +6,8 @@ STOP=01
|
||||
USE_PROCD=1
|
||||
|
||||
start_service() {
|
||||
rm -rf /tmp/threshold_breach_count_phy*
|
||||
rm -rf /tmp/fixed_channel_phy*
|
||||
rm -rf /tmp/threshold_breach_count*
|
||||
rm -rf /tmp/fixed_channel*
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command /usr/bin/rrmd.uc
|
||||
|
||||
@@ -265,7 +265,7 @@ function dfs_chan_check(iface_num, rcs_channel) {
|
||||
}
|
||||
|
||||
function fixed_channel_config(iface, iface_num, fixed_channel_f, auto_channel_f, fixed_chan_bkp, channel_config) {
|
||||
// if fixed channel config is stored in the /tmp/fixed_channel_phyX file
|
||||
// if fixed channel config is stored in the /tmp/fixed_channel_<radio_iface> file
|
||||
if (fixed_channel_f == 1) {
|
||||
if (auto_channel_f == 1) {
|
||||
// if current channel is auto => change to fixed
|
||||
@@ -675,7 +675,7 @@ function channel_optimize() {
|
||||
ulog_info(`[%s] Allowed consecutive Channel Utilization threshold breach count = %d \n`, radio_iface[j], config.consecutive_threshold_breach);
|
||||
|
||||
if (!current_threshold_breach_count || current_threshold_breach_count == null || current_threshold_breach_count == 'NaN') {
|
||||
// /tmp/phyX_breachcount file doesn't exist yet or has invalid value
|
||||
// /tmp/threshold_breach_count_<radio_iface> file doesn't exist yet or has invalid value
|
||||
current_threshold_breach_count = 0;
|
||||
}
|
||||
ulog_info(`[%s] Previous consecutive Channel Utilization threshold breach count = %d \n`, radio_iface[j], current_threshold_breach_count);
|
||||
|
||||
@@ -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:=cd070141672c85e72001e2e36616aa7159c6dc8ca4bbacca1b61a41c145cde2f
|
||||
PKG_MIRROR_HASH:=280d87658fa36c1d5d6852dcb8203042eba6bbc9101ac317a2088e2dd68249da
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2025-01-27
|
||||
PKG_SOURCE_VERSION:=048a53d4a6cf3ef570dab9e2d10989844ae7c355
|
||||
PKG_SOURCE_VERSION:=52afdf8f1d1cb8445b6b56eba3768d0edffa63e1
|
||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
|
||||
|
||||
@@ -3,12 +3,6 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=ucentral-tools
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_URL=https://github.com/blogic/ucentral-tools.git
|
||||
PKG_MIRROR_HASH:=9ae6a0cd431595871c233550427c4043c2ba7ddb3c5d87e46ab74a03b2b5a947
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2021-01-28
|
||||
PKG_SOURCE_VERSION:=b013fc636e48d407870a46aaa68a09ed74de8d6f
|
||||
|
||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
|
||||
|
||||
36
feeds/ucentral/ucentral-tools/src/CMakeLists.txt
Normal file
36
feeds/ucentral/ucentral-tools/src/CMakeLists.txt
Normal file
@@ -0,0 +1,36 @@
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
PROJECT(openwifi-tools C)
|
||||
INCLUDE(GNUInstallDirs)
|
||||
ADD_DEFINITIONS(-Os -ggdb -Wall -Werror --std=gnu99 -Wmissing-declarations)
|
||||
|
||||
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
|
||||
|
||||
ADD_EXECUTABLE(firstcontact firstcontact.c)
|
||||
TARGET_LINK_LIBRARIES(firstcontact curl crypto ssl ubox)
|
||||
INSTALL(TARGETS firstcontact
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}
|
||||
)
|
||||
|
||||
ADD_EXECUTABLE(dhcpdiscover dhcpdiscover.c)
|
||||
INSTALL(TARGETS dhcpdiscover
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}
|
||||
)
|
||||
|
||||
ADD_EXECUTABLE(dnsprobe dnsprobe.c)
|
||||
TARGET_LINK_LIBRARIES(dnsprobe ubox resolv)
|
||||
INSTALL(TARGETS dnsprobe
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}
|
||||
)
|
||||
|
||||
ADD_EXECUTABLE(radiusprobe radiusprobe.c)
|
||||
TARGET_LINK_LIBRARIES(radiusprobe radcli)
|
||||
INSTALL(TARGETS radiusprobe
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}
|
||||
)
|
||||
|
||||
ADD_EXECUTABLE(ip-collide ip-collide.c)
|
||||
TARGET_LINK_LIBRARIES(ip-collide ubox)
|
||||
INSTALL(TARGETS ip-collide
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}
|
||||
)
|
||||
1345
feeds/ucentral/ucentral-tools/src/dhcpdiscover.c
Normal file
1345
feeds/ucentral/ucentral-tools/src/dhcpdiscover.c
Normal file
File diff suppressed because it is too large
Load Diff
690
feeds/ucentral/ucentral-tools/src/dnsprobe.c
Normal file
690
feeds/ucentral/ucentral-tools/src/dnsprobe.c
Normal file
@@ -0,0 +1,690 @@
|
||||
/*
|
||||
* nslookup_lede - musl compatible replacement for busybox nslookup
|
||||
*
|
||||
* Copyright (C) 2017 Jo-Philipp Wich <jo@mein.io>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
//config:config NSLOOKUP_OPENWRT
|
||||
//config: bool "nslookup_openwrt"
|
||||
//config: depends on !NSLOOKUP
|
||||
//config: default y
|
||||
//config: help
|
||||
//config: nslookup is a tool to query Internet name servers (LEDE flavor).
|
||||
//config:
|
||||
//config:config FEATURE_NSLOOKUP_OPENWRT_LONG_OPTIONS
|
||||
//config: bool "Enable long options"
|
||||
//config: default y
|
||||
//config: depends on NSLOOKUP_OPENWRT && LONG_OPTS
|
||||
//config: help
|
||||
//config: Support long options for the nslookup applet.
|
||||
|
||||
//applet:IF_NSLOOKUP_OPENWRT(APPLET(nslookup, BB_DIR_USR_BIN, BB_SUID_DROP))
|
||||
|
||||
//kbuild:lib-$(CONFIG_NSLOOKUP_OPENWRT) += nslookup_lede.o
|
||||
|
||||
//usage:#define nslookup_lede_trivial_usage
|
||||
//usage: "[HOST] [SERVER]"
|
||||
//usage:#define nslookup_lede_full_usage "\n\n"
|
||||
//usage: "Query the nameserver for the IP address of the given HOST\n"
|
||||
//usage: "optionally using a specified DNS server"
|
||||
//usage:
|
||||
//usage:#define nslookup_lede_example_usage
|
||||
//usage: "$ nslookup localhost\n"
|
||||
//usage: "Server: default\n"
|
||||
//usage: "Address: default\n"
|
||||
//usage: "\n"
|
||||
//usage: "Name: debian\n"
|
||||
//usage: "Address: 127.0.0.1\n"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <resolv.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <time.h>
|
||||
#include <poll.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <net/if.h>
|
||||
#include <netdb.h>
|
||||
|
||||
#include <libubox/ulog.h>
|
||||
|
||||
#define ENABLE_FEATURE_IPV6 1
|
||||
|
||||
typedef struct len_and_sockaddr {
|
||||
socklen_t len;
|
||||
union {
|
||||
struct sockaddr sa;
|
||||
struct sockaddr_in sin;
|
||||
#if ENABLE_FEATURE_IPV6
|
||||
struct sockaddr_in6 sin6;
|
||||
#endif
|
||||
} u;
|
||||
} len_and_sockaddr;
|
||||
|
||||
struct ns {
|
||||
const char *name;
|
||||
len_and_sockaddr addr;
|
||||
int failures;
|
||||
int replies;
|
||||
};
|
||||
|
||||
struct query {
|
||||
const char *name;
|
||||
size_t qlen, rlen;
|
||||
unsigned char query[512], reply[512];
|
||||
unsigned long latency;
|
||||
int rcode, n_ns;
|
||||
};
|
||||
|
||||
static const char *rcodes[] = {
|
||||
"NOERROR",
|
||||
"FORMERR",
|
||||
"SERVFAIL",
|
||||
"NXDOMAIN",
|
||||
"NOTIMP",
|
||||
"REFUSED",
|
||||
"YXDOMAIN",
|
||||
"YXRRSET",
|
||||
"NXRRSET",
|
||||
"NOTAUTH",
|
||||
"NOTZONE",
|
||||
"RESERVED11",
|
||||
"RESERVED12",
|
||||
"RESERVED13",
|
||||
"RESERVED14",
|
||||
"RESERVED15",
|
||||
"BADVERS"
|
||||
};
|
||||
|
||||
static unsigned int default_port = 53;
|
||||
static unsigned int default_retry = 1;
|
||||
static unsigned int default_timeout = 2;
|
||||
|
||||
|
||||
static int parse_reply(const unsigned char *msg, size_t len, int *bb_style_counter)
|
||||
{
|
||||
ns_msg handle;
|
||||
ns_rr rr;
|
||||
int i, n, rdlen;
|
||||
const char *format = NULL;
|
||||
char astr[INET6_ADDRSTRLEN], dname[MAXDNAME];
|
||||
const unsigned char *cp;
|
||||
|
||||
if (ns_initparse(msg, len, &handle) != 0) {
|
||||
//fprintf(stderr, "Unable to parse reply: %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < ns_msg_count(handle, ns_s_an); i++) {
|
||||
if (ns_parserr(&handle, ns_s_an, i, &rr) != 0) {
|
||||
//fprintf(stderr, "Unable to parse resource record: %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
rdlen = ns_rr_rdlen(rr);
|
||||
|
||||
switch (ns_rr_type(rr))
|
||||
{
|
||||
case ns_t_a:
|
||||
if (rdlen != 4) {
|
||||
//fprintf(stderr, "Unexpected A record length\n");
|
||||
return -1;
|
||||
}
|
||||
inet_ntop(AF_INET, ns_rr_rdata(rr), astr, sizeof(astr));
|
||||
printf("Name:\t%s\nAddress: %s\n", ns_rr_name(rr), astr);
|
||||
break;
|
||||
|
||||
#if ENABLE_FEATURE_IPV6
|
||||
case ns_t_aaaa:
|
||||
if (rdlen != 16) {
|
||||
//fprintf(stderr, "Unexpected AAAA record length\n");
|
||||
return -1;
|
||||
}
|
||||
inet_ntop(AF_INET6, ns_rr_rdata(rr), astr, sizeof(astr));
|
||||
printf("%s\thas AAAA address %s\n", ns_rr_name(rr), astr);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ns_t_ns:
|
||||
if (!format)
|
||||
format = "%s\tnameserver = %s\n";
|
||||
/* fall through */
|
||||
|
||||
case ns_t_cname:
|
||||
if (!format)
|
||||
format = "%s\tcanonical name = %s\n";
|
||||
/* fall through */
|
||||
|
||||
case ns_t_ptr:
|
||||
if (!format)
|
||||
format = "%s\tname = %s\n";
|
||||
if (ns_name_uncompress(ns_msg_base(handle), ns_msg_end(handle),
|
||||
ns_rr_rdata(rr), dname, sizeof(dname)) < 0) {
|
||||
//fprintf(stderr, "Unable to uncompress domain: %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
printf(format, ns_rr_name(rr), dname);
|
||||
break;
|
||||
|
||||
case ns_t_mx:
|
||||
if (rdlen < 2) {
|
||||
fprintf(stderr, "MX record too short\n");
|
||||
return -1;
|
||||
}
|
||||
n = ns_get16(ns_rr_rdata(rr));
|
||||
if (ns_name_uncompress(ns_msg_base(handle), ns_msg_end(handle),
|
||||
ns_rr_rdata(rr) + 2, dname, sizeof(dname)) < 0) {
|
||||
//fprintf(stderr, "Cannot uncompress MX domain: %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
printf("%s\tmail exchanger = %d %s\n", ns_rr_name(rr), n, dname);
|
||||
break;
|
||||
|
||||
case ns_t_txt:
|
||||
if (rdlen < 1) {
|
||||
//fprintf(stderr, "TXT record too short\n");
|
||||
return -1;
|
||||
}
|
||||
n = *(unsigned char *)ns_rr_rdata(rr);
|
||||
if (n > 0) {
|
||||
memset(dname, 0, sizeof(dname));
|
||||
memcpy(dname, ns_rr_rdata(rr) + 1, n);
|
||||
printf("%s\ttext = \"%s\"\n", ns_rr_name(rr), dname);
|
||||
}
|
||||
break;
|
||||
|
||||
case ns_t_soa:
|
||||
if (rdlen < 20) {
|
||||
//fprintf(stderr, "SOA record too short\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("%s\n", ns_rr_name(rr));
|
||||
|
||||
cp = ns_rr_rdata(rr);
|
||||
n = ns_name_uncompress(ns_msg_base(handle), ns_msg_end(handle),
|
||||
cp, dname, sizeof(dname));
|
||||
|
||||
if (n < 0) {
|
||||
//fprintf(stderr, "Unable to uncompress domain: %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("\torigin = %s\n", dname);
|
||||
cp += n;
|
||||
|
||||
n = ns_name_uncompress(ns_msg_base(handle), ns_msg_end(handle),
|
||||
cp, dname, sizeof(dname));
|
||||
|
||||
if (n < 0) {
|
||||
//fprintf(stderr, "Unable to uncompress domain: %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("\tmail addr = %s\n", dname);
|
||||
cp += n;
|
||||
|
||||
printf("\tserial = %lu\n", ns_get32(cp));
|
||||
cp += 4;
|
||||
|
||||
printf("\trefresh = %lu\n", ns_get32(cp));
|
||||
cp += 4;
|
||||
|
||||
printf("\tretry = %lu\n", ns_get32(cp));
|
||||
cp += 4;
|
||||
|
||||
printf("\texpire = %lu\n", ns_get32(cp));
|
||||
cp += 4;
|
||||
|
||||
printf("\tminimum = %lu\n", ns_get32(cp));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
static int parse_nsaddr(const char *addrstr, len_and_sockaddr *lsa)
|
||||
{
|
||||
char *eptr, *hash, ifname[IFNAMSIZ];
|
||||
unsigned int port = default_port;
|
||||
unsigned int scope = 0;
|
||||
|
||||
hash = strchr(addrstr, '#');
|
||||
|
||||
if (hash) {
|
||||
*hash++ = '\0';
|
||||
port = strtoul(hash, &eptr, 10);
|
||||
|
||||
if (eptr == hash || *eptr != '\0' || port > 65535) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
hash = strchr(addrstr, '%');
|
||||
|
||||
if (hash) {
|
||||
for (eptr = ++hash; *eptr != '\0' && *eptr != '#'; eptr++) {
|
||||
if ((eptr - hash) >= IFNAMSIZ) {
|
||||
errno = ENODEV;
|
||||
return -1;
|
||||
}
|
||||
|
||||
ifname[eptr - hash] = *eptr;
|
||||
}
|
||||
|
||||
ifname[eptr - hash] = '\0';
|
||||
scope = if_nametoindex(ifname);
|
||||
|
||||
if (scope == 0) {
|
||||
errno = ENODEV;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
#if ENABLE_FEATURE_IPV6
|
||||
if (inet_pton(AF_INET6, addrstr, &lsa->u.sin6.sin6_addr)) {
|
||||
lsa->u.sin6.sin6_family = AF_INET6;
|
||||
lsa->u.sin6.sin6_port = htons(port);
|
||||
lsa->u.sin6.sin6_scope_id = scope;
|
||||
lsa->len = sizeof(lsa->u.sin6);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!scope && inet_pton(AF_INET, addrstr, &lsa->u.sin.sin_addr)) {
|
||||
lsa->u.sin.sin_family = AF_INET;
|
||||
lsa->u.sin.sin_port = htons(port);
|
||||
lsa->len = sizeof(lsa->u.sin);
|
||||
return 0;
|
||||
}
|
||||
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static unsigned long mtime(void)
|
||||
{
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_REALTIME, &ts);
|
||||
return (unsigned long)ts.tv_sec * 1000 + ts.tv_nsec / 1000000;
|
||||
}
|
||||
|
||||
#if ENABLE_FEATURE_IPV6
|
||||
static void to_v4_mapped(len_and_sockaddr *a)
|
||||
{
|
||||
if (a->u.sa.sa_family != AF_INET)
|
||||
return;
|
||||
|
||||
memcpy(a->u.sin6.sin6_addr.s6_addr + 12,
|
||||
&a->u.sin.sin_addr, 4);
|
||||
|
||||
memcpy(a->u.sin6.sin6_addr.s6_addr,
|
||||
"\0\0\0\0\0\0\0\0\0\0\xff\xff", 12);
|
||||
|
||||
a->u.sin6.sin6_family = AF_INET6;
|
||||
a->u.sin6.sin6_flowinfo = 0;
|
||||
a->u.sin6.sin6_scope_id = 0;
|
||||
a->len = sizeof(a->u.sin6);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Function logic borrowed & modified from musl libc, res_msend.c
|
||||
*/
|
||||
|
||||
static int send_queries(struct ns *ns, int n_ns, struct query *queries, int n_queries)
|
||||
{
|
||||
int fd;
|
||||
int timeout = default_timeout * 1000, retry_interval, servfail_retry = 0;
|
||||
len_and_sockaddr from = { };
|
||||
#if ENABLE_FEATURE_IPV6
|
||||
int one = 1;
|
||||
#endif
|
||||
int recvlen = 0;
|
||||
int n_replies = 0;
|
||||
struct pollfd pfd;
|
||||
unsigned long t0, t1, t2;
|
||||
int nn, qn, next_query = 0;
|
||||
|
||||
from.u.sa.sa_family = AF_INET;
|
||||
from.len = sizeof(from.u.sin);
|
||||
|
||||
#if ENABLE_FEATURE_IPV6
|
||||
for (nn = 0; nn < n_ns; nn++) {
|
||||
if (ns[nn].addr.u.sa.sa_family == AF_INET6) {
|
||||
from.u.sa.sa_family = AF_INET6;
|
||||
from.len = sizeof(from.u.sin6);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Get local address and open/bind a socket */
|
||||
fd = socket(from.u.sa.sa_family, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
|
||||
|
||||
#if ENABLE_FEATURE_IPV6
|
||||
/* Handle case where system lacks IPv6 support */
|
||||
if (fd < 0 && from.u.sa.sa_family == AF_INET6 && errno == EAFNOSUPPORT) {
|
||||
fd = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
|
||||
from.u.sa.sa_family = AF_INET;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
||||
if (bind(fd, &from.u.sa, from.len) < 0) {
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if ENABLE_FEATURE_IPV6
|
||||
/* Convert any IPv4 addresses in a mixed environment to v4-mapped */
|
||||
if (from.u.sa.sa_family == AF_INET6) {
|
||||
setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(one));
|
||||
|
||||
for (nn = 0; nn < n_ns; nn++)
|
||||
to_v4_mapped(&ns[nn].addr);
|
||||
}
|
||||
#endif
|
||||
|
||||
pfd.fd = fd;
|
||||
pfd.events = POLLIN;
|
||||
retry_interval = timeout / default_retry;
|
||||
t0 = t2 = mtime();
|
||||
t1 = t2 - retry_interval;
|
||||
|
||||
for (; t2 - t0 < timeout; t2 = mtime()) {
|
||||
if (t2 - t1 >= retry_interval) {
|
||||
for (qn = 0; qn < n_queries; qn++) {
|
||||
if (queries[qn].rlen)
|
||||
continue;
|
||||
|
||||
for (nn = 0; nn < n_ns; nn++) {
|
||||
sendto(fd, queries[qn].query, queries[qn].qlen,
|
||||
MSG_NOSIGNAL, &ns[nn].addr.u.sa, ns[nn].addr.len);
|
||||
}
|
||||
}
|
||||
|
||||
t1 = t2;
|
||||
servfail_retry = 2 * n_queries;
|
||||
}
|
||||
|
||||
/* Wait for a response, or until time to retry */
|
||||
if (poll(&pfd, 1, t1+retry_interval-t2) <= 0)
|
||||
continue;
|
||||
|
||||
while (1) {
|
||||
recvlen = recvfrom(fd, queries[next_query].reply,
|
||||
sizeof(queries[next_query].reply), 0,
|
||||
&from.u.sa, &from.len);
|
||||
|
||||
/* read error */
|
||||
if (recvlen < 0)
|
||||
break;
|
||||
|
||||
/* Ignore non-identifiable packets */
|
||||
if (recvlen < 4)
|
||||
continue;
|
||||
|
||||
/* Ignore replies from addresses we didn't send to */
|
||||
for (nn = 0; nn < n_ns; nn++)
|
||||
if (memcmp(&from.u.sa, &ns[nn].addr.u.sa, from.len) == 0)
|
||||
break;
|
||||
|
||||
if (nn >= n_ns)
|
||||
continue;
|
||||
|
||||
/* Find which query this answer goes with, if any */
|
||||
for (qn = next_query; qn < n_queries; qn++)
|
||||
if (!memcmp(queries[next_query].reply, queries[qn].query, 2))
|
||||
break;
|
||||
|
||||
if (qn >= n_queries || queries[qn].rlen)
|
||||
continue;
|
||||
|
||||
queries[qn].rcode = queries[next_query].reply[3] & 15;
|
||||
queries[qn].latency = mtime() - t0;
|
||||
queries[qn].n_ns = nn;
|
||||
|
||||
ns[nn].replies++;
|
||||
|
||||
/* Only accept positive or negative responses;
|
||||
* retry immediately on server failure, and ignore
|
||||
* all other codes such as refusal. */
|
||||
switch (queries[qn].rcode) {
|
||||
case 0:
|
||||
case 3:
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (servfail_retry && servfail_retry--) {
|
||||
ns[nn].failures++;
|
||||
sendto(fd, queries[qn].query, queries[qn].qlen,
|
||||
MSG_NOSIGNAL, &ns[nn].addr.u.sa, ns[nn].addr.len);
|
||||
}
|
||||
/* fall through */
|
||||
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Store answer */
|
||||
n_replies++;
|
||||
|
||||
queries[qn].rlen = recvlen;
|
||||
|
||||
if (qn == next_query) {
|
||||
while (next_query < n_queries) {
|
||||
if (!queries[next_query].rlen)
|
||||
break;
|
||||
|
||||
next_query++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
memcpy(queries[qn].reply, queries[next_query].reply, recvlen);
|
||||
}
|
||||
|
||||
if (next_query >= n_queries)
|
||||
return n_replies;
|
||||
}
|
||||
}
|
||||
|
||||
return n_replies;
|
||||
}
|
||||
|
||||
static struct ns *add_ns(struct ns **ns, int *n_ns, const char *addr)
|
||||
{
|
||||
char portstr[sizeof("65535")], *p;
|
||||
len_and_sockaddr a = { };
|
||||
struct ns *tmp;
|
||||
struct addrinfo *ai, *aip, hints = {
|
||||
.ai_flags = AI_NUMERICSERV,
|
||||
.ai_socktype = SOCK_DGRAM
|
||||
};
|
||||
|
||||
if (parse_nsaddr(addr, &a)) {
|
||||
/* Maybe we got a domain name, attempt to resolve it using the standard
|
||||
* resolver routines */
|
||||
|
||||
p = strchr(addr, '#');
|
||||
snprintf(portstr, sizeof(portstr), "%hu",
|
||||
(unsigned short)(p ? strtoul(p, NULL, 10) : default_port));
|
||||
|
||||
if (!getaddrinfo(addr, portstr, &hints, &ai)) {
|
||||
for (aip = ai; aip; aip = aip->ai_next) {
|
||||
if (aip->ai_addr->sa_family != AF_INET &&
|
||||
aip->ai_addr->sa_family != AF_INET6)
|
||||
continue;
|
||||
|
||||
#if ! ENABLE_FEATURE_IPV6
|
||||
if (aip->ai_addr->sa_family != AF_INET)
|
||||
continue;
|
||||
#endif
|
||||
|
||||
tmp = realloc(*ns, sizeof(**ns) * (*n_ns + 1));
|
||||
|
||||
if (!tmp)
|
||||
return NULL;
|
||||
|
||||
*ns = tmp;
|
||||
|
||||
(*ns)[*n_ns].name = addr;
|
||||
(*ns)[*n_ns].replies = 0;
|
||||
(*ns)[*n_ns].failures = 0;
|
||||
(*ns)[*n_ns].addr.len = aip->ai_addrlen;
|
||||
|
||||
memcpy(&(*ns)[*n_ns].addr.u.sa, aip->ai_addr, aip->ai_addrlen);
|
||||
|
||||
(*n_ns)++;
|
||||
}
|
||||
|
||||
freeaddrinfo(ai);
|
||||
|
||||
return &(*ns)[*n_ns];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
tmp = realloc(*ns, sizeof(**ns) * (*n_ns + 1));
|
||||
|
||||
if (!tmp)
|
||||
return NULL;
|
||||
|
||||
*ns = tmp;
|
||||
|
||||
(*ns)[*n_ns].addr = a;
|
||||
(*ns)[*n_ns].name = addr;
|
||||
(*ns)[*n_ns].replies = 0;
|
||||
(*ns)[*n_ns].failures = 0;
|
||||
|
||||
return &(*ns)[(*n_ns)++];
|
||||
}
|
||||
|
||||
static struct query *add_query(struct query **queries, int *n_queries,
|
||||
int type, const char *dname)
|
||||
{
|
||||
struct query *tmp;
|
||||
ssize_t qlen;
|
||||
|
||||
tmp = realloc(*queries, sizeof(**queries) * (*n_queries + 1));
|
||||
|
||||
if (!tmp)
|
||||
return NULL;
|
||||
|
||||
memset(&tmp[*n_queries], 0, sizeof(*tmp));
|
||||
|
||||
qlen = res_mkquery(QUERY, dname, C_IN, type, NULL, 0, NULL,
|
||||
tmp[*n_queries].query, sizeof(tmp[*n_queries].query));
|
||||
|
||||
tmp[*n_queries].qlen = qlen;
|
||||
tmp[*n_queries].name = dname;
|
||||
*queries = tmp;
|
||||
|
||||
return &tmp[(*n_queries)++];
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int rc = 1;
|
||||
struct ns *ns = NULL;
|
||||
struct query *queries = NULL;
|
||||
int n_ns = 0, n_queries = 0;
|
||||
int c = 0;
|
||||
|
||||
char *url = "telecominfraproject.com";
|
||||
char *server = "127.0.0.1";
|
||||
int v6 = 0;
|
||||
|
||||
while (1) {
|
||||
int option = getopt(argc, argv, "u:s:i:6");
|
||||
|
||||
if (option == -1)
|
||||
break;
|
||||
|
||||
switch (option) {
|
||||
case '6':
|
||||
v6 = 1;
|
||||
break;
|
||||
case 'u':
|
||||
url = optarg;
|
||||
break;
|
||||
case 's':
|
||||
server = optarg;
|
||||
break;
|
||||
default:
|
||||
case 'h':
|
||||
printf("Usage: dnsprobe OPTIONS\n"
|
||||
" -6 - use ipv6\n"
|
||||
" -u <url>\n"
|
||||
" -s <server>\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
ulog_open(ULOG_SYSLOG | ULOG_STDIO, LOG_DAEMON, "dnsprobe");
|
||||
|
||||
ULOG_INFO("attempting to probe dns - %s %s %s\n",
|
||||
url, server, v6 ? "ipv6" : "");
|
||||
|
||||
|
||||
add_query(&queries, &n_queries, v6 ? T_AAAA : T_A, url);
|
||||
|
||||
add_ns(&ns, &n_ns, server);
|
||||
|
||||
rc = send_queries(&ns[0], 1, queries, n_queries);
|
||||
if (rc <= 0) {
|
||||
fprintf(stderr, "Failed to send queries: %s\n", strerror(errno));
|
||||
rc = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (queries[0].rcode != 0) {
|
||||
printf("** server can't find %s: %s\n", queries[0].name,
|
||||
rcodes[queries[0].rcode]);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (queries[0].rlen) {
|
||||
c = parse_reply(queries[0].reply, queries[0].rlen, NULL);
|
||||
}
|
||||
|
||||
if (c == 0)
|
||||
printf("*** Can't find %s: No answer\n", queries[0].name);
|
||||
else if (c < 0)
|
||||
printf("*** Can't find %s: Parse error\n", queries[0].name);
|
||||
else
|
||||
rc = 0;
|
||||
|
||||
out:
|
||||
if (n_ns)
|
||||
free(ns);
|
||||
|
||||
if (n_queries)
|
||||
free(queries);
|
||||
|
||||
return rc;
|
||||
}
|
||||
100
feeds/ucentral/ucentral-tools/src/firstcontact.c
Normal file
100
feeds/ucentral/ucentral-tools/src/firstcontact.c
Normal file
@@ -0,0 +1,100 @@
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <getopt.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
#include <libubox/ulog.h>
|
||||
|
||||
static const char *file_cert = "/etc/open-wifi/client.pem";
|
||||
static const char *file_key = "/etc/open-wifi/client_dec.key";
|
||||
static const char *file_json = "/etc/open-wifi/redirector.json";
|
||||
static const char *file_dbg = "/tmp/firstcontact.hdr";
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
FILE *fp_json;
|
||||
FILE *fp_dbg;
|
||||
CURLcode res;
|
||||
CURL *curl;
|
||||
char *devid = NULL;
|
||||
char *url;
|
||||
|
||||
while (1) {
|
||||
int option = getopt(argc, argv, "k:c:o:hi:");
|
||||
|
||||
if (option == -1)
|
||||
break;
|
||||
|
||||
switch (option) {
|
||||
case 'k':
|
||||
file_key = optarg;
|
||||
break;
|
||||
case 'c':
|
||||
file_cert = optarg;
|
||||
break;
|
||||
case 'o':
|
||||
file_json = optarg;
|
||||
break;
|
||||
case 'i':
|
||||
devid = optarg;
|
||||
break;
|
||||
default:
|
||||
case 'h':
|
||||
printf("Usage: firstcontact OPTIONS\n"
|
||||
" -k <keyfile>\n"
|
||||
" -c <certfile>\n"
|
||||
" -o <outfile>\n"
|
||||
" -i <devid>\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!devid) {
|
||||
fprintf(stderr, "missing devid\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ulog_open(ULOG_SYSLOG | ULOG_STDIO, LOG_DAEMON, "firstcontact");
|
||||
ULOG_INFO("attempting first contact\n");
|
||||
|
||||
fp_dbg = fopen(file_dbg, "wb");
|
||||
fp_json = fopen(file_json, "wb");
|
||||
if (!fp_json) {
|
||||
ULOG_ERR("failed to create %s\n", file_json);
|
||||
return -1;
|
||||
}
|
||||
|
||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
curl = curl_easy_init();
|
||||
if (!curl) {
|
||||
ULOG_ERR("curl_easy_init failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (asprintf(&url, "https://clientauth.demo.one.digicert.com/iot/api/v2/device/%s", devid) < 0) {
|
||||
ULOG_ERR("failed to assemble url\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp_json);
|
||||
curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp_dbg);
|
||||
curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
|
||||
curl_easy_setopt(curl, CURLOPT_SSLCERT, file_cert);
|
||||
curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, "PEM");
|
||||
curl_easy_setopt(curl, CURLOPT_SSLKEY, file_key);
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
|
||||
|
||||
res = curl_easy_perform(curl);
|
||||
if (res != CURLE_OK)
|
||||
ULOG_ERR("curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
|
||||
else
|
||||
ULOG_INFO("downloaded first contact data\n");
|
||||
curl_easy_cleanup(curl);
|
||||
curl_global_cleanup();
|
||||
|
||||
ulog_close();
|
||||
|
||||
return (res != CURLE_OK);
|
||||
}
|
||||
86
feeds/ucentral/ucentral-tools/src/ip-collide.c
Normal file
86
feeds/ucentral/ucentral-tools/src/ip-collide.c
Normal file
@@ -0,0 +1,86 @@
|
||||
#include <arpa/inet.h>
|
||||
#include <net/if.h>
|
||||
|
||||
#include <libubox/list.h>
|
||||
#include <libubox/ulog.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
struct route {
|
||||
struct list_head list;
|
||||
char devname[64];
|
||||
uint32_t domain;
|
||||
uint32_t mask;
|
||||
};
|
||||
|
||||
static struct list_head routes = LIST_HEAD_INIT(routes);
|
||||
|
||||
static int parse_routes(void)
|
||||
{
|
||||
FILE *fp = fopen("/proc/net/route", "r");
|
||||
int flgs, ref, use, metric, mtu, win, ir;
|
||||
struct route *route;
|
||||
unsigned long g;
|
||||
int r;
|
||||
|
||||
r = fscanf(fp, "%*[^\n]\n");
|
||||
if (r < 0) {
|
||||
fprintf(stderr, "failed to parse routes\n");
|
||||
return -1;
|
||||
}
|
||||
while (1) {
|
||||
route = malloc(sizeof(*route));
|
||||
if (!route)
|
||||
break;
|
||||
memset(route, 0, sizeof(*route));
|
||||
r = fscanf(fp, "%63s%x%lx%X%d%d%d%x%d%d%d\n",
|
||||
route->devname, &route->domain, &g, &flgs, &ref, &use, &metric, &route->mask,
|
||||
&mtu, &win, &ir);
|
||||
if (r != 11 && (r < 0) && feof(fp))
|
||||
break;
|
||||
list_add(&route->list, &routes);
|
||||
printf("1 %s %x %x\n", route->devname, ntohl(route->domain), ntohl(route->mask));
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int find_collisions(void)
|
||||
{
|
||||
struct route *route;
|
||||
|
||||
list_for_each_entry(route, &routes, list) {
|
||||
struct route *compare;
|
||||
|
||||
if (!route->domain || !route->mask)
|
||||
continue;
|
||||
list_for_each_entry(compare, &routes, list) {
|
||||
if (!compare->domain || !compare->mask)
|
||||
continue;
|
||||
if (compare == route)
|
||||
continue;
|
||||
if (((route->domain & route->mask) == (compare->domain & route->mask)) ||
|
||||
((route->domain & compare->mask) == (compare->domain & compare->mask))) {
|
||||
ULOG_ERR("collision detected\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
ULOG_INFO("no collision detected\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
ulog_open(ULOG_SYSLOG | ULOG_STDIO, LOG_DAEMON, "ip-collide");
|
||||
|
||||
parse_routes();
|
||||
if (!list_empty(&routes))
|
||||
return find_collisions();
|
||||
|
||||
return 0;
|
||||
}
|
||||
47
feeds/ucentral/ucentral-tools/src/radiusprobe.c
Normal file
47
feeds/ucentral/ucentral-tools/src/radiusprobe.c
Normal file
@@ -0,0 +1,47 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <radcli/radcli.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int result;
|
||||
char username[128];
|
||||
char passwd[AUTH_PASS_LEN + 1];
|
||||
VALUE_PAIR *send, *received;
|
||||
uint32_t service;
|
||||
rc_handle *rh;
|
||||
|
||||
/* Not needed if you already used openlog() */
|
||||
rc_openlog("radiusprobe");
|
||||
|
||||
if ((rh = rc_read_config("/tmp/radius.conf")) == NULL)
|
||||
return ERROR_RC;
|
||||
|
||||
strcpy(username, "healthcheck");
|
||||
strcpy(passwd, "uCentral");
|
||||
|
||||
send = NULL;
|
||||
|
||||
if (rc_avpair_add(rh, &send, PW_USER_NAME, username, -1, 0) == NULL)
|
||||
return ERROR_RC;
|
||||
|
||||
if (rc_avpair_add(rh, &send, PW_USER_PASSWORD, passwd, -1, 0) == NULL)
|
||||
return ERROR_RC;
|
||||
|
||||
service = PW_AUTHENTICATE_ONLY;
|
||||
if (rc_avpair_add(rh, &send, PW_SERVICE_TYPE, &service, -1, 0) == NULL)
|
||||
return ERROR_RC;
|
||||
|
||||
result = rc_auth(rh, 0, send, &received, NULL);
|
||||
|
||||
if (result == OK_RC || result == REJECT_RC) {
|
||||
fprintf(stderr, "RADIUS server OK\n");
|
||||
result = 0;
|
||||
} else {
|
||||
fprintf(stderr, "RADIUS server failure\n");
|
||||
result = -1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -5,3 +5,6 @@
|
||||
# list ssid 'EAP101-ERICHI'
|
||||
# list ssid 'EAP101-AKIHO'
|
||||
# list ssid 'EAP101-DAMAYU'
|
||||
#
|
||||
# config dhcpinject 'dhcpinject'
|
||||
# option iface_count '6'
|
||||
|
||||
@@ -9,9 +9,9 @@ SERVICE_NAME="dhcpinject"
|
||||
PROG=/usr/bin/udhcpinject
|
||||
|
||||
start_service() {
|
||||
local ssid_list=""
|
||||
local ssids=""
|
||||
local ports=""
|
||||
local ifaces=""
|
||||
|
||||
# Function to process each ssid
|
||||
append_ssid() {
|
||||
@@ -40,6 +40,9 @@ start_service() {
|
||||
|
||||
# Get the list of ports
|
||||
config_list_foreach uplink port append_port
|
||||
|
||||
# Get the iface_count
|
||||
config_get ifaces dhcpinject iface_count
|
||||
|
||||
# Fallback to eth0 if no ports are specified
|
||||
if [ -z "$ports" ]; then
|
||||
@@ -47,11 +50,11 @@ start_service() {
|
||||
fi
|
||||
|
||||
# Optional: Log or echo for debugging
|
||||
logger -t dhcp_inject "Generated SSIDs=$ssids, Uplink=$ports"
|
||||
logger -t dhcp_inject "Generated SSIDs=$ssids, Uplink=$ports, IFACEs=$ifaces"
|
||||
|
||||
procd_open_instance "$SERVICE_NAME"
|
||||
procd_set_param command $PROG
|
||||
procd_set_param env SSIDs="$ssids" PORTs="$ports"
|
||||
procd_set_param env SSIDs="$ssids" PORTs="$ports" IFACEs="$ifaces"
|
||||
procd_set_param respawn 3600 10 10
|
||||
procd_set_param file /etc/config/dhcpinject
|
||||
procd_set_param reload_signal SIGHUP
|
||||
|
||||
@@ -26,6 +26,7 @@ struct iface_info *iface_map = NULL;
|
||||
static struct port_info *ports = NULL;
|
||||
int iface_count = 0;
|
||||
int port_count = 0;
|
||||
int total_iface = 0;
|
||||
static pcap_t *handle = NULL;
|
||||
static char *provided_ssids = NULL;
|
||||
static char *provided_ports = NULL;
|
||||
@@ -192,6 +193,11 @@ int parse_ssids(const char *ssids) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (iface_count != total_iface) {
|
||||
syslog(LOG_ERR, "Expect %d but only %d interfaces were found.\n", total_iface, iface_count);
|
||||
return -1;
|
||||
}
|
||||
|
||||
syslog(LOG_INFO, "Found %d matching interfaces\n", iface_count);
|
||||
return 0;
|
||||
}
|
||||
@@ -310,7 +316,6 @@ void signal_handler(int sig) {
|
||||
exit(0);
|
||||
} else if (sig == SIGHUP) {
|
||||
syslog(LOG_INFO, "Received reload signal, reconfiguring...\n");
|
||||
sleep(5);
|
||||
// Clean up existing resources
|
||||
cleanup_tc();
|
||||
|
||||
@@ -561,7 +566,19 @@ int main(int argc, char *argv[]) {
|
||||
signal(SIGTERM, signal_handler);
|
||||
signal(SIGHUP, signal_handler);
|
||||
|
||||
sleep(5);
|
||||
// Read IFACEs from environment variable
|
||||
char *iface_env = getenv("IFACEs");
|
||||
if (!iface_env) {
|
||||
syslog(LOG_ERR, "No IFACEs provided. Exiting...\n");
|
||||
cleanup();
|
||||
return 1;
|
||||
}
|
||||
total_iface = atoi(iface_env);
|
||||
if (total_iface <= 0) {
|
||||
syslog(LOG_ERR, "Invalid IFACEs value: %s. Exiting...\n", iface_env);
|
||||
cleanup();
|
||||
return 1;
|
||||
}
|
||||
|
||||
provided_ssids = getenv("SSIDs");
|
||||
syslog(LOG_INFO, "Provided SSIDs: %s\n", provided_ssids);
|
||||
@@ -618,4 +635,4 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
cleanup();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
16
profiles/sercomm_ap72tip-v4.yml
Normal file
16
profiles/sercomm_ap72tip-v4.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
profile: sercomm_ap72tip-v4
|
||||
target: ipq53xx
|
||||
subtarget: generic
|
||||
description: Build image for the Sercomm AP72TIP-v4
|
||||
image: bin/targets/ipq53xx/generic/openwrt-ipq53xx-sercomm_ap72tip-v4-squashfs-sysupgrade.tar
|
||||
feeds:
|
||||
- name: qca
|
||||
path: ../../feeds/qca-wifi-7
|
||||
include:
|
||||
- ucentral-ap
|
||||
packages:
|
||||
- ipq53xx
|
||||
- qca-ssdk-shell
|
||||
diffconfig: |
|
||||
CONFIG_KERNEL_IPQ_MEM_PROFILE=0
|
||||
@@ -2,14 +2,14 @@
|
||||
profile: sercomm_ap72tip
|
||||
target: ipq53xx
|
||||
subtarget: generic
|
||||
description: Build image for the Sercomm AP72 TIP
|
||||
description: Build image for the Sercomm AP72TIP
|
||||
image: bin/targets/ipq53xx/generic/openwrt-ipq53xx-sercomm_ap72tip-squashfs-sysupgrade.tar
|
||||
feeds:
|
||||
- name: ipq95xx
|
||||
path: ../../feeds/ipq95xx
|
||||
packages:
|
||||
- ipq53xx
|
||||
- name: qca
|
||||
path: ../../feeds/qca-wifi-7
|
||||
include:
|
||||
- ucentral-ap
|
||||
packages:
|
||||
- ipq53xx
|
||||
diffconfig: |
|
||||
CONFIG_KERNEL_IPQ_MEM_PROFILE=0
|
||||
|
||||
15
profiles/sonicfi_rap650c.yml
Normal file
15
profiles/sonicfi_rap650c.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
profile: sonicfi_rap650c
|
||||
target: ipq807x
|
||||
subtarget: generic
|
||||
description: Build image for the SonicFi RAP650C
|
||||
image: bin/targets/ipq807x/generic/openwrt-ipq807x-sonicfi_rap650c-squashfs-sysupgrade.tar
|
||||
feeds:
|
||||
- name: ipq807x
|
||||
path: ../../feeds/ipq807x_v5.4
|
||||
include:
|
||||
- ucentral-ap
|
||||
packages:
|
||||
- ipq807x
|
||||
diffconfig: |
|
||||
CONFIG_KERNEL_IPQ_MEM_PROFILE=0
|
||||
Reference in New Issue
Block a user