diff --git a/.github/workflows/w1700k.yaml b/.github/workflows/w1700k.yaml index 464c0cefdc..7ee3d74634 100644 --- a/.github/workflows/w1700k.yaml +++ b/.github/workflows/w1700k.yaml @@ -6,7 +6,7 @@ on: env: REMOTE_REPOSITORY: danpawlik/openwrt - REMOTE_BRANCH: w1700k + REMOTE_BRANCH: w1700k-npu RELEASE_PREFIX: airoha jobs: @@ -53,14 +53,23 @@ jobs: ./scripts/feeds update -a ./scripts/feeds install -a + # NOTE: something seems to be not right after + # https://github.com/openwrt/openwrt/compare/4d653973de0eb6254d7c343de58de9b632b26ebe..37ebcb6c22ea8ef410d1dd9604ae8a77340fe32c + # Include removed packages. + # NOTE: Since https://github.com/openwrt/openwrt/pull/22151, we changed + # way to run the system. Now it would be using chainload. + # To bootstrap the router, see: https://github.com/hurrian/w1700k-ubi-installer + # then in the system, push the firmware and just do: sysupgrade --force firmware.bin - name: Configure firmware image run: | - curl -SL https://raw.githubusercontent.com/danpawlik/openwrt-builder/master/configs/airoha/an7581/gemtek_w1700k > .config ; + curl -SL https://raw.githubusercontent.com/danpawlik/openwrt-builder/master/configs/airoha/an7581/gemtek_w1700k_chainload > .config ; curl -SL https://raw.githubusercontent.com/danpawlik/openwrt-builder/master/configs/common/dumb_ap >> .config ; curl -SL https://raw.githubusercontent.com/danpawlik/openwrt-builder/master/configs/common/snapshot >> .config ; curl -SL https://raw.githubusercontent.com/danpawlik/openwrt-builder/master/configs/common/mlo >> .config; curl -SL https://raw.githubusercontent.com/danpawlik/openwrt-builder/master/configs/common/optimize >> .config ; echo "CONFIG_PACKAGE_librespeed-go=y" >> .config + echo "CONFIG_PACKAGE_kmod-phy-realtek=y" >> .config + echo "CONFIG_PACKAGE_rtl8261n-firmware=y" >> .config - name: Run defconfig run: @@ -103,10 +112,12 @@ jobs: with: files: bin/targets/airoha/an7581/* tag_name: ${{ env.RELEASE_PREFIX }}-${{ env.REMOTE_BRANCH }}-${{ env.RELEASE_DATE }} - name: OpenWrt Quantum Fiber W1700k - vanila - ${{ env.REMOTE_BRANCH }} - ${{ env.RELEASE_DATE }} + name: OpenWrt Quantum Fiber W1700k - vanilla with bl chainload - ${{ env.REMOTE_BRANCH }} - ${{ env.RELEASE_DATE }} body: | Updated prebuilt images for ${{ env.RELEASE_DATE }} Build Commit: ${{ needs.check_commits.outputs.latest_commit_sha }} + Uses also chainload proposed in https://github.com/openwrt/openwrt/pull/22151. + To bootstrap the device, use: https://github.com/hurrian/w1700k-ubi-installer - name: Clean up old releases uses: dev-drprasad/delete-older-releases@master diff --git a/Dockerfile b/Dockerfile index d2b767c216..ee374409b4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM fedora:42 +FROM fedora:43 RUN yum update -y && dnf -y group install development-tools diff --git a/configs/airoha/an7581/gemtek_w1700k_chainload b/configs/airoha/an7581/gemtek_w1700k_chainload new file mode 100644 index 0000000000..689b1e7cea --- /dev/null +++ b/configs/airoha/an7581/gemtek_w1700k_chainload @@ -0,0 +1,11 @@ +# +# curl -SL https://raw.githubusercontent.com/danpawlik/openwrt-builder/master/configs/airoha/an7581/gemtek_w1700k_chainload > .config +# + +CONFIG_TARGET_airoha=y +CONFIG_TARGET_airoha_an7581=y +CONFIG_TARGET_airoha_an7581_DEVICE_gemtek_w1700k-ubi=y +CONFIG_PACKAGE_u-boot-an7581_chainload=y + +# enable HW crypto acceleration +CONFIG_PACKAGE_kmod-crypto-hw-eip93=y diff --git a/configs/common/dumb_ap b/configs/common/dumb_ap index a94d1818e9..6bfa34792a 100644 --- a/configs/common/dumb_ap +++ b/configs/common/dumb_ap @@ -29,6 +29,7 @@ CONFIG_PACKAGE_irqbalance=y CONFIG_PACKAGE_luci-app-irqbalance=y # CONFIG_PACKAGE_fping=y # CONFIG_PACKAGE_coreutils=y +CONFIG_PACKAGE_tmux=y # attendedsysupgrade / owut CONFIG_PACKAGE_owut=y diff --git a/configs/common/main-router b/configs/common/main-router index 809e2cd4f2..7f0943894e 100644 --- a/configs/common/main-router +++ b/configs/common/main-router @@ -32,6 +32,7 @@ CONFIG_PACKAGE_ethtool-full=y CONFIG_PACKAGE_tc-full=y # CONFIG_PACKAGE_fping=y # CONFIG_PACKAGE_coreutils=y +CONFIG_PACKAGE_tmux=y # attendedsysupgrade / owut CONFIG_PACKAGE_owut=y @@ -87,22 +88,22 @@ CONFIG_PACKAGE_collectd-mod-ping=y CONFIG_PACKAGE_irqbalance=y CONFIG_PACKAGE_luci-app-irqbalance=y -# SQM +# SQM - remove one or all via rc.local CONFIG_PACKAGE_luci-app-sqm=y CONFIG_PACKAGE_sqm-scripts=y CONFIG_PACKAGE_ip6tables-nft=y +# just additional kmods for sqm-scripts - just in case +CONFIG_PACKAGE_kmod-ipt-core=y +CONFIG_PACKAGE_kmod-nft-compat=y +CONFIG_PACKAGE_kmod-ipt-ipopt=y + # Qosify CONFIG_PACKAGE_qosify=y CONFIG_PACKAGE_kmod-ifb=y CONFIG_PACKAGE_kmod-sched-bpf=y CONFIG_PACKAGE_kmod-sched-cake=y -# just additional kmods for sqm-scripts - just in case -CONFIG_PACKAGE_kmod-ipt-core=y -CONFIG_PACKAGE_kmod-nft-compat=y -CONFIG_PACKAGE_kmod-ipt-ipopt=y - # just additional kmods for qosmate - just in case CONFIG_PACKAGE_ip-full=y CONFIG_PACKAGE_kmod-sched=y @@ -120,6 +121,11 @@ CONFIG_PACKAGE_ddns-scripts=y # do not disable firewall on dumb ap's. CONFIG_PACKAGE_bridger=y +# IGMPv3 and MLDv2 multicast proxy +CONFIG_PACKAGE_omcproxy=y +CONFIG_PACKAGE_luci-app-omcproxy=y + + # language CONFIG_LUCI_LANG_pl=y diff --git a/configs/common/openssl b/configs/common/openssl index af168ad678..adafc4b147 100644 --- a/configs/common/openssl +++ b/configs/common/openssl @@ -27,7 +27,8 @@ CONFIG_PACKAGE_libopenssl-devcrypto=y # CONFIG_PACKAGE_libopenssl-afalg_sync is not set ### Force add /dev/crypto into libcrypto -# CONFIG_OPENSSL_ENGINE_BUILTIN=y -# CONFIG_OPENSSL_ENGINE_BUILTIN_DEVCRYPTO=y +CONFIG_OPENSSL_ENGINE_BUILTIN=y +CONFIG_OPENSSL_ENGINE_BUILTIN_DEVCRYPTO=y +CONFIG_OPENSSL_ENGINE_BUILTIN_AFALG=y #### replace mbedtls with openssl - remember to leave commented "is not set" or remove it! diff --git a/configs/common/sfp b/configs/common/sfp index c63e9fdb56..ee9a11b30c 100644 --- a/configs/common/sfp +++ b/configs/common/sfp @@ -5,3 +5,6 @@ CONFIG_PACKAGE_dtc=y CONFIG_PACKAGE_kmod-phy-realtek=y CONFIG_PACKAGE_kmod-phy-rtl8261n=y CONFIG_PACKAGE_kmod-phy-aquantia=y +CONFIG_PACKAGE_kmod-phy-motorcomm=y + +CONFIG_PACKAGE_rtl8261n-firmware=y diff --git a/settings-configs/BPI-R4/wireless-mlo-openwrt b/settings-configs/BPI-R4/wireless-mlo-openwrt index 11c1f78d73..4f7b18b47f 100644 --- a/settings-configs/BPI-R4/wireless-mlo-openwrt +++ b/settings-configs/BPI-R4/wireless-mlo-openwrt @@ -10,16 +10,6 @@ config wifi-device 'radio0' option country 'DE' option cell_density '0' -config wifi-iface 'default_radio0' - option device 'radio0' - option network 'lan' - option mode 'ap' - option ssid 'Test_2G' - option encryption 'psk2+ccmp' - option key 'test1234test' - option wnm_sleep_mode_no_keys '1' - option bss_transition '1' - config wifi-device 'radio1' option type 'mac80211' option path 'soc/11300000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0' @@ -42,7 +32,6 @@ config wifi-device 'radio2' option country 'DE' option cell_density '0' - config wifi-iface 'wifinet0' list device 'radio0' list device 'radio1' diff --git a/settings-configs/w1700k-dumb-ap/attendedsysupgrade b/settings-configs/w1700k-dumb-ap/attendedsysupgrade new file mode 100644 index 0000000000..cdb186bd24 --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/attendedsysupgrade @@ -0,0 +1,24 @@ + +config server 'server' + option url 'https://sysupgrade.openwrt.org' + +config client 'client' + option upgrade_packages '1' + option auto_search '0' + option advanced_mode '0' + +# Example configuration for 'owut'. The option names are the same +# as those used on the command line, with all '-' dashes replaced by +# '_' underscores. Use 'owut --help' to see more. + +config owut 'owut' +# option verbosity 0 +# option keep true +# option init_script '/root/data/my-init-script.sh' +# option image '/tmp/my-firmware-img.bin' +# option rootfs_size 256 +# option pre_install '/etc/owut.d/pre-install.sh' +# option poll_interval 10000 # In milliseconds +# list ignored_defaults 'kmod-drm-i915' +# list ignored_defaults 'kmod-dwmac-intel' + diff --git a/settings-configs/w1700k-dumb-ap/bridger b/settings-configs/w1700k-dumb-ap/bridger new file mode 100644 index 0000000000..bad8508f14 --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/bridger @@ -0,0 +1,7 @@ +config defaults + # handle bridge local rx/tx + option bridge_local_tx 1 + option bridge_local_rx 0 + + # example for blacklisting individual devices or bridges + # list blacklist eth0 diff --git a/settings-configs/w1700k-dumb-ap/collectd b/settings-configs/w1700k-dumb-ap/collectd new file mode 100644 index 0000000000..b7db1a2f17 --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/collectd @@ -0,0 +1,238 @@ +config globals 'globals' + option alt_config_file "/etc/collectd.conf" +# option BaseDir '/var/run/collectd' +# option Include '/tmp/collectd.d' +# option PIDFile '/var/run/collectd.pid' +# option PluginDir '/usr/lib/collectd' +# option TypesDB '/usr/share/collectd/types.db' +# option Interval '30' +# option ReadThreads '2' +# option WriteThreads '2' +# option WriteQueueLimitLow '0' +# option WriteQueueLimitHigh '0' +# option CollectInternalStats '0' + +#config plugin 'apcups' +# option enable '0' +# option Host 'localhost' +# option Port '3551' + +#config plugin 'conntrack' +# option enable '0' + +#config plugin 'contextswitch' +# option enable '0' + +#config plugin 'cpu' +# option enable '0' + +#config plugin 'cpufreq' +# option enable '0' + +#config plugin 'csv' +# option enable '0' +# option StoreRates '0' +# option DataDir '/tmp' + +#config plugin 'curl' +# option enable '0' + +#config curl_page +# option name 'test' +# option url 'http://finance.google.com/finance?q=NYSE%3AAMD%22' + +#config plugin 'df' +# option enable '0' +# list Device '/dev/mtdblock/4' +# list MountPoint '/jffs' +# list FSType 'tmpfs' +# option IgnoreSelected '0' + +#config plugin 'disk' +# option enable '0' +# list Disk 'hda1' +# list Disk 'hdb' +# option IgnoreSelected '0' + +#config plugin 'dns' +# option enable '0' +# list Interface 'br-lan' +# list IgnoreSource '127.0.0.1' + +#config plugin 'email' +# option enable '0' +# option SocketFile '/var/run/collectd/email.sock' +# option SocketGroup 'nogroup' + +#config plugin 'entropy' +# option enable '0' + +#config plugin 'exec' +# option enable '0' + +#config exec_input +# option cmdline '/usr/bin/stat-dhcpusers' +# option cmduser 'nobody' +# option cmdgroup 'nogroup' + +#config exec_notify +# option cmdline '/usr/bin/stat-dhcpusers' +# option cmduser 'nobody' +# option cmdgroup 'nogroup' + +#config plugin 'interface' +# option enable '1' +# list Interface 'br-lan' +# option IgnoreSelected '0' + +#config plugin 'iptables' +# option enable '1' + +#config iptables_match +# option table 'nat' +# option chain 'zone_wan_postrouting' +# option index '1' +# option name 'WLAN-Clients traffic' + +#config plugin 'irq' +# option enable '0' +# list Irq '2' +# list Irq '3' +# list Irq '4' +# list Irq '7' + +#config plugin 'iwinfo' +# option enable '0' + +#config plugin 'load' +# option enable '0' + +#config plugin 'lua' +# option BasePath '/usr/share/collectd-mod-lua' +# list Script 'script1.lua' +# list Script 'script2.lua + +#config plugin 'memory' +# option enable '0' + +#config plugin 'netlink' +# option enable '0' +# option IgnoreSelected '0' +# list VerboseInterface 'br-lan' +# list QDisc 'br-lan' + +#config plugin 'network' +# option enable '1' +# option TimeToLive '128' +# option Forward '1' +# option CacheFlush '86400' + +#config network_listen +# option host '0.0.0.0' +# option port '25826' + +#config network_server +# option host '1.1.1.1' +# option port '25826' + +#config plugin 'nut' +# option enable '0' +# option UPS 'myupsname' + +#config plugin 'olsrd' +# option enable '0' +# option Port '2006' +# option Host '127.0.0.1' + +#config plugin 'openvpn' +# option enable '0' +# option StatusFile '/var/run/openvpn/openvpn.status' +# option CollectIndividualUsers '1' +# optoin CollectUserCount '1' +# optoin CollectCompression '1' +# option ImprovedNamingSchema '0' + +#config plugin 'ping' +# option enable '0' +# option TTL '127' +# option Interval '30' +# list Host '127.0.0.1' + +#config plugin 'processes' +# option enable '0' +# list Process 'uhttpd' +# list Process 'dnsmasq' +# list Process 'dropbear' + +#config plugin 'rrdtool' +# option enable '0' +# option DataDir '/tmp/rrd' +# option RRARows '100' +# option RRASingle '1' +# list RRATimespan '3600' +# list RRATimespan '86400' +# list RRATimespan '604800' +# list RRATimespan '2678400' +# list RRATimespan '31622400' + +#config plugin 'sensors' +# option enable '0' + +#config plugin 'swap' +# option enable '0' +# option ReportByDevice '1' +# option ValuesAbsolute '1' +# option ValuesPercentage '0' +# option ReportIO '1' +# option ReportBytes '1' + +#config plugin 'tcpconns' +# option enable '0' +# option ListeningPorts '0' +# option AllPortsSummary '0' +# list LocalPort '22' +# list LocalPort '80' + +#config plugin 'thermal' +# option enable '0' +# option IgnoreSelected '0' +# list Device '' + +#config plugin 'ubi' +# option enable '0' +# list Device 'ubi0' +# option IgnoreSelected '0' + +#config plugin 'unixsock' +# option enable '0' +# option SocketFile '/var/run/collectd/query.sock' +# option SocketGroup 'nogroup' + +#config plugin 'uptime' +# option enable '0' + +#config plugin 'vmem' +# option enable '0' +# option Verbose '0' +# +#config plugin 'write_http' +# option enable '0' +# +#config write_http_node +# option name 'foo' +# option URL 'http://example.org/post-collectd' +# +#config plugin 'mqtt' +# option enable '1' +# +#config mqtt_block +# option name 'foo' +# option blocktype 'Subscribe' +# option Host 'localhost' +# option Topic 'collectd/#' + +#config plugin 'write_prometheus' +# option enable '0' +# option Host '0.0.0.0' +# option Port '9103' +# option StalenessDelta '300' diff --git a/settings-configs/w1700k-dumb-ap/dhcp b/settings-configs/w1700k-dumb-ap/dhcp new file mode 100644 index 0000000000..83a5d3e573 --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/dhcp @@ -0,0 +1,43 @@ + +config dnsmasq + option domainneeded '1' + option boguspriv '1' + option filterwin2k '0' + option localise_queries '1' + option rebind_protection '1' + option rebind_localhost '1' + option local '/lan/' + option domain 'lan' + option expandhosts '1' + option nonegcache '0' + option cachesize '1000' + option authoritative '1' + option readethers '1' + option leasefile '/tmp/dhcp.leases' + option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto' + option nonwildcard '1' + option localservice '1' + option ednspacket_max '1232' + option filter_aaaa '0' + option filter_a '0' + +config dhcp 'lan' + option interface 'lan' + option start '100' + option limit '150' + option leasetime '12h' + option dhcpv4 'server' + option ignore '1' + +config dhcp 'wan' + option interface 'wan' + option ignore '1' + +config odhcpd 'odhcpd' + option maindhcp '0' + option leasefile '/tmp/odhcpd.leases' + option leasetrigger '/usr/sbin/odhcpd-update' + option loglevel '4' + option hostsdir '/tmp/hosts' + option piodir '/tmp/odhcpd-piodir' + diff --git a/settings-configs/w1700k-dumb-ap/firewall b/settings-configs/w1700k-dumb-ap/firewall new file mode 100644 index 0000000000..ea2ca7a562 --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/firewall @@ -0,0 +1,123 @@ + +config defaults + option input 'REJECT' + option output 'ACCEPT' + option forward 'REJECT' + option synflood_protect '1' + option flow_offloading '1' + option flow_offloading_hw '1' + +config zone + option name 'lan' + list network 'lan' + option input 'ACCEPT' + option output 'ACCEPT' + option forward 'ACCEPT' + +config zone + option name 'wan' + list network 'wan' + list network 'wan6' + option input 'REJECT' + option output 'ACCEPT' + option forward 'DROP' + option masq '1' + option mtu_fix '1' + +config forwarding + option src 'lan' + option dest 'wan' + +config rule + option name 'Allow-DHCP-Renew' + option src 'wan' + option proto 'udp' + option dest_port '68' + option target 'ACCEPT' + option family 'ipv4' + +config rule + option name 'Allow-Ping' + option src 'wan' + option proto 'icmp' + option icmp_type 'echo-request' + option family 'ipv4' + option target 'ACCEPT' + +config rule + option name 'Allow-IGMP' + option src 'wan' + option proto 'igmp' + option family 'ipv4' + option target 'ACCEPT' + +config rule + option name 'Allow-DHCPv6' + option src 'wan' + option proto 'udp' + option dest_port '546' + option family 'ipv6' + option target 'ACCEPT' + +config rule + option name 'Allow-MLD' + option src 'wan' + option proto 'icmp' + option src_ip 'fe80::/10' + list icmp_type '130/0' + list icmp_type '131/0' + list icmp_type '132/0' + list icmp_type '143/0' + option family 'ipv6' + option target 'ACCEPT' + +config rule + option name 'Allow-ICMPv6-Input' + option src 'wan' + option proto 'icmp' + list icmp_type 'echo-request' + list icmp_type 'echo-reply' + list icmp_type 'destination-unreachable' + list icmp_type 'packet-too-big' + list icmp_type 'time-exceeded' + list icmp_type 'bad-header' + list icmp_type 'unknown-header-type' + list icmp_type 'router-solicitation' + list icmp_type 'neighbour-solicitation' + list icmp_type 'router-advertisement' + list icmp_type 'neighbour-advertisement' + option limit '1000/sec' + option family 'ipv6' + option target 'ACCEPT' + +config rule + option name 'Allow-ICMPv6-Forward' + option src 'wan' + option dest '*' + option proto 'icmp' + list icmp_type 'echo-request' + list icmp_type 'echo-reply' + list icmp_type 'destination-unreachable' + list icmp_type 'packet-too-big' + list icmp_type 'time-exceeded' + list icmp_type 'bad-header' + list icmp_type 'unknown-header-type' + option limit '1000/sec' + option family 'ipv6' + option target 'ACCEPT' + +config rule + option name 'Allow-IPSec-ESP' + option src 'wan' + option dest 'lan' + option proto 'esp' + option target 'ACCEPT' + +config rule + option name 'Allow-ISAKMP' + option src 'wan' + option dest 'lan' + option dest_port '500' + option proto 'udp' + option target 'ACCEPT' + diff --git a/settings-configs/w1700k-dumb-ap/irqbalance b/settings-configs/w1700k-dumb-ap/irqbalance new file mode 100644 index 0000000000..75a4f2b471 --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/irqbalance @@ -0,0 +1,4 @@ + +config irqbalance 'irqbalance' + option enabled '1' + diff --git a/settings-configs/w1700k-dumb-ap/librespeed-go b/settings-configs/w1700k-dumb-ap/librespeed-go new file mode 100644 index 0000000000..116dc2316a --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/librespeed-go @@ -0,0 +1,47 @@ + +config librespeed-go 'config' + option enabled '1' + + # bind address, use empty string to bind to all interfaces + option bind_address '' + # backend listen port + option listen_port '8989' + + # change the base URL + # option url_base '/librespeed' + # proxy protocol port, use 0 to disable + option proxyprotocol_port '0' + # Server location, use zeroes to fetch from API automatically + option server_lat '0' + option server_lng '0' + # ipinfo.io API key, if applicable + option ipinfo_api_key '' + + # assets directory path, defaults to `assets` in the same directory + # if the path cannot be found, embedded default assets will be used + option assets_path '' + + # password for logging into statistics page, change this to enable stats page + # option statistics_password 'PASSWORD' + # redact IP addresses (boolean) + option redact_ip_addresses '0' + + # database type for statistics data, currently supports: none, memory, bolt, mysql, postgresql + # if none is specified, no telemetry/stats will be recorded, and no result PNG will be generated + option database_type 'none' + # option database_hostname '' + # option database_name '' + # option database_username '' + # option database_password '' + + # if you use `bolt` as database, set database_file to database file location + # option database_file '/etc/librespeed-go/speedtest.db' + + # TLS and HTTP/2 settings. TLS is required for HTTP/2 (boolean) + option enable_tls '0' + option enable_http2 '0' + + # if you use HTTP/2 or TLS, you need to prepare certificates and private keys + # option tls_cert_file '/etc/librespeed-go/cert.pem' + # option tls_key_file '/etc/librespeed-go/privkey.pem' + diff --git a/settings-configs/w1700k-dumb-ap/luci b/settings-configs/w1700k-dumb-ap/luci new file mode 100644 index 0000000000..a4e2261cef --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/luci @@ -0,0 +1,42 @@ + +config core 'main' + option lang 'auto' + option mediaurlbase '/luci-static/bootstrap' + option resourcebase '/luci-static/resources' + option ubuspath '/ubus/' + +config extern 'flash_keep' + option uci '/etc/config/' + option dropbear '/etc/dropbear/' + option openvpn '/etc/openvpn/' + option passwd '/etc/passwd' + option opkg '/etc/opkg.conf' + option firewall '/etc/firewall.user' + option uploads '/lib/uci/upload/' + +config internal 'languages' + option pl 'Polski (Polish)' + +config internal 'sauth' + option sessionpath '/tmp/luci-sessions' + option sessiontime '3600' + +config internal 'ccache' + option enable '1' + +config internal 'themes' + option Bootstrap '/luci-static/bootstrap' + option BootstrapDark '/luci-static/bootstrap-dark' + option BootstrapLight '/luci-static/bootstrap-light' + +config internal 'apply' + option rollback '90' + option holdoff '4' + option timeout '5' + option display '1.5' + +config internal 'diag' + option dns 'openwrt.org' + option ping 'openwrt.org' + option route 'openwrt.org' + diff --git a/settings-configs/w1700k-dumb-ap/luci_statistics b/settings-configs/w1700k-dumb-ap/luci_statistics new file mode 100644 index 0000000000..1303601988 --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/luci_statistics @@ -0,0 +1,214 @@ + +config statistics 'collectd' + option BaseDir '/var/run/collectd' + option PIDFile '/var/run/collectd.pid' + option PluginDir '/usr/lib/collectd' + option TypesDB '/usr/share/collectd/types.db' + option Interval '30' + option ReadThreads '2' + option Include '/etc/collectd/conf.d/*.conf' + +config statistics 'rrdtool' + option default_timespan '2hour' + option image_width '600' + option image_height '150' + option image_path '/tmp/rrdimg' + +config statistics 'collectd_rrdtool' + option enable '1' + option DataDir '/tmp/rrd' + option RRARows '288' + option RRASingle '1' + option backup '1' + list RRATimespans '2hour' + list RRATimespans '1day' + list RRATimespans '1week' + list RRATimespans '1month' + list RRATimespans '1year' + +config statistics 'collectd_csv' + option enable '0' + option StoreRates '0' + option DataDir '/tmp' + +config statistics 'collectd_email' + option enable '0' + option SocketFile '/var/run/collectd/email.sock' + option SocketGroup 'nogroup' + +config statistics 'collectd_logfile' + option enable '0' + option LogLevel 'notice' + option File '/var/log/collectd.log' + option Timestamp '1' + +config statistics 'collectd_network' + +config statistics 'collectd_syslog' + option enable '0' + option LogLevel 'warning' + option NotifyLevel 'WARNING' + +config statistics 'collectd_unixsock' + option enable '0' + option SocketFile '/var/run/collectd/query.sock' + option SocketGroup 'nogroup' + +config statistics 'collectd_apcups' + option enable '0' + option Host 'localhost' + option Port '3551' + +config statistics 'collectd_chrony' + option enable '0' + option Host '127.0.0.1' + option Port '323' + option Timeout '2' + +config statistics 'collectd_conntrack' + option enable '0' + +config statistics 'collectd_contextswitch' + option enable '0' + +config statistics 'collectd_cpu' + option enable '1' + option ReportByCpu '1' + option ReportByState '1' + option ShowIdle '0' + option ValuesPercentage '1' + +config statistics 'collectd_cpufreq' + option enable '0' + +config statistics 'collectd_curl' + option enable '0' + +config statistics 'collectd_df' + option enable '0' + option Devices '/dev/mtdblock/4' + option MountPoints '/overlay' + option FSTypes 'tmpfs' + option IgnoreSelected '0' + option ValuesPercentage '0' + +config statistics 'collectd_dhcpleases' + option enable '0' + option Path '/tmp/dhcp.leases' + +config statistics 'collectd_disk' + option enable '0' + option Disks 'hda1 hdb' + option IgnoreSelected '0' + +config statistics 'collectd_dns' + option enable '0' + option Interfaces 'br-lan' + option IgnoreSources '127.0.0.1' + +config statistics 'collectd_entropy' + option enable '0' + +config statistics 'collectd_exec' + option enable '0' + +config statistics 'collectd_interface' + option enable '1' + option Interfaces 'br-lan' + option IgnoreSelected '0' + +config statistics 'collectd_ipstatistics' + option enable '0' + +config statistics 'collectd_iptables' + option enable '0' + +config collectd_iptables_match + option table 'nat' + option chain 'luci_fw_postrouting' + option target 'MASQUERADE' + option source '192.168.1.0/24' + option outputif 'br-ff' + option name 'LAN-Clients traffic' + +config collectd_iptables_match + option chain 'luci_fw_postrouting' + option table 'nat' + option target 'MASQUERADE' + option source '10.61.230.0/24' + option outputif 'br-ff' + option name 'WLAN-Clients traffic' + +config statistics 'collectd_irq' + option enable '0' + option Irqs '2 3 4 7' + +config statistics 'collectd_iwinfo' + option enable '1' + +config statistics 'collectd_load' + option enable '1' + +config statistics 'collectd_memory' + option enable '1' + option HideFree '0' + option ValuesAbsolute '1' + option ValuesPercentage '0' + +config statistics 'collectd_netlink' + option enable '0' + option IgnoreSelected '0' + option VerboseInterfaces 'br-lan' + option QDiscs 'br-lan' + +config statistics 'collectd_nut' + option enable '0' + list UPS 'myupsname' + +config statistics 'collectd_olsrd' + option enable '0' + option Port '2006' + option Host '127.0.0.1' + +config statistics 'collectd_openvpn' + option enable '0' + +config statistics 'collectd_ping' + option enable '1' + option TTL '127' + option Interval '5' + list Hosts '9.9.9.10' + list Hosts '1.1.1.1' + option AddressFamily 'any' + +config statistics 'collectd_processes' + option enable '0' + option Processes 'uhttpd dnsmasq dropbear' + +config statistics 'collectd_sensors' + option enable '1' + option IgnoreSelected '1' + +config statistics 'collectd_snmp6' + option enable '0' + option Interfaces 'br-lan' + option IgnoreSelected '0' + +config statistics 'collectd_splash_leases' + option enable '0' + +config statistics 'collectd_tcpconns' + option enable '0' + option ListeningPorts '0' + list LocalPorts '22' + option AllPortsSummary '0' + +config statistics 'collectd_thermal' + option enable '0' + option IgnoreSelected '0' + +config statistics 'collectd_uptime' + option enable '0' + +config statistics 'collectd_mqtt' + diff --git a/settings-configs/w1700k-dumb-ap/network b/settings-configs/w1700k-dumb-ap/network new file mode 100644 index 0000000000..bd08e58275 --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/network @@ -0,0 +1,40 @@ +config interface 'loopback' + option device 'lo' + option proto 'static' + list ipaddr '127.0.0.1/8' + +config globals 'globals' + option dhcp_default_duid '00047a23e014xxxc93e2809' + option ula_prefix 'fd26:66cd:xxx::/48' + option packet_steering '1' + option steering_flows '256' + +config device + option name 'br-lan' + option type 'bridge' + list ports 'lan3' + list ports 'lan4' + list ports 'lan2' + option igmp_snooping '1' + +config interface 'lan' + option device 'br-lan' + option proto 'static' + option ip6assign '60' + list ipaddr '192.168.88.2/24' + list ipaddr '192.168.1.2/24' + list dns '192.168.88.1' + option gateway '192.168.88.1' + +config interface 'wan' + option device 'wan' + option proto 'dhcp' + option auto '0' + +config interface 'wan6' + option device 'wan' + option proto 'dhcpv6' + option auto '0' + option reqaddress 'try' + option reqprefix 'auto' + option norelease '1' diff --git a/settings-configs/w1700k-dumb-ap/openssl b/settings-configs/w1700k-dumb-ap/openssl new file mode 100644 index 0000000000..d146129b85 --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/openssl @@ -0,0 +1,3 @@ + +config provider 'legacy' + option enabled '1' diff --git a/settings-configs/w1700k-dumb-ap/system b/settings-configs/w1700k-dumb-ap/system new file mode 100644 index 0000000000..9fd823a287 --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/system @@ -0,0 +1,45 @@ + +config system + option hostname 'W1700K' + option timezone 'CET-1CEST,M3.5.0,M10.5.0/3' + option zonename 'Europe/Warsaw' + option ttylogin '0' + option log_size '128' + option urandom_seed '0' + +config timeserver 'ntp' + option enabled '1' + option enable_server '0' + list server '194.177.4.1' + list server '213.222.217.11' + list server '80.50.102.114' + list server '193.219.28.60' + +config led 'led_lan3_yellow' + option name 'lan3' + option sysfs 'yellow:lan-3' + option trigger 'netdev' + option mode 'link_10 link_100' + option dev 'lan3' + +config led 'led_lan3_green' + option name 'lan3' + option sysfs 'green:lan-3' + option trigger 'netdev' + option mode 'link_1000 tx rx' + option dev 'lan3' + +config led 'led_lan4_yellow' + option name 'lan4' + option sysfs 'yellow:lan-4' + option trigger 'netdev' + option mode 'link_10 link_100' + option dev 'lan4' + +config led 'led_lan4_green' + option name 'lan4' + option sysfs 'green:lan-4' + option trigger 'netdev' + option mode 'link_1000 tx rx' + option dev 'lan4' + diff --git a/settings-configs/w1700k-dumb-ap/ubihealthd b/settings-configs/w1700k-dumb-ap/ubihealthd new file mode 100644 index 0000000000..230b27a0ed --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/ubihealthd @@ -0,0 +1,5 @@ + +config ubi-device 'ubi0' + option device '/dev/ubi0' + option enable '1' + diff --git a/settings-configs/w1700k-dumb-ap/ubootenv b/settings-configs/w1700k-dumb-ap/ubootenv new file mode 100644 index 0000000000..850abfe259 --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/ubootenv @@ -0,0 +1,6 @@ + +config ubootenv + option dev '/dev/mtd1' + option offset '0x0' + option envsize '0x4000' + diff --git a/settings-configs/w1700k-dumb-ap/wireless b/settings-configs/w1700k-dumb-ap/wireless new file mode 100644 index 0000000000..e8febd135e --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/wireless @@ -0,0 +1,62 @@ + +config wifi-device 'radio0' + option type 'mac80211' + option path 'soc/1fc00000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0' + option radio '0' + option band '2g' + option channel '8' + option htmode 'EHT20' + option txpower '20' + option country 'GB' + option cell_density '0' + +config wifi-iface 'default_radio0' + option device 'radio0' + option network 'lan' + option mode 'ap' + option ssid 'Test_2G' + option encryption 'psk2+ccmp' + option key 'test1234test' + +config wifi-device 'radio1' + option type 'mac80211' + option path 'soc/1fc00000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0' + option radio '1' + option band '5g' + option channel '100' + option htmode 'EHT160' + option txpower '20' + option country 'GB' + option cell_density '0' + +config wifi-iface 'default_radio1' + option device 'radio1' + option network 'lan' + option mode 'ap' + option ssid 'Test' + option encryption 'sae' + option key 'test1234test' + option ocv '0' + option ieee80211w '2' + +config wifi-device 'radio2' + option type 'mac80211' + option path 'soc/1fc00000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0' + option radio '2' + option band '6g' + option channel '53' + option htmode 'EHT320' + option txpower '20' + option country 'GB' + option cell_density '0' + +config wifi-iface 'default_radio2' + option device 'radio2' + option network 'lan' + option mode 'ap' + option ssid 'Test_6G' + option encryption 'sae' + option key 'test1234test' + option ocv '0' + option ieee80211w '2' + diff --git a/settings-configs/w1700k-dumb-ap/wireless-mlo b/settings-configs/w1700k-dumb-ap/wireless-mlo new file mode 100644 index 0000000000..56ae0c52dc --- /dev/null +++ b/settings-configs/w1700k-dumb-ap/wireless-mlo @@ -0,0 +1,46 @@ + +config wifi-device 'radio0' + option type 'mac80211' + option path 'soc/1fc00000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0' + option radio '0' + option band '2g' + option channel '8' + option htmode 'EHT20' + option txpower '20' + option country 'GB' + option cell_density '0' + +config wifi-device 'radio1' + option type 'mac80211' + option path 'soc/1fc00000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0' + option radio '1' + option band '5g' + option channel '100' + option htmode 'EHT160' + option txpower '25' + option country 'GB' + option cell_density '0' + +config wifi-device 'radio2' + option type 'mac80211' + option path 'soc/1fc00000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0' + option radio '2' + option band '6g' + option channel '53' + option htmode 'EHT160' + option txpower '20' + option country 'GB' + option cell_density '0' + +config wifi-iface 'wifinet0' + list device 'radio0' + list device 'radio1' + list device 'radio2' + option mlo '1' + option network 'lan' + option mode 'ap' + option ssid 'Test' + option encryption 'sae' + option key 'test1234test' + option ieee80211w '2' + option log_level '1' diff --git a/wireless-scripts-example/mtk-feed/common.uc b/wireless-scripts-example/mtk-feed/common.uc new file mode 100644 index 0000000000..ce0d298de7 --- /dev/null +++ b/wireless-scripts-example/mtk-feed/common.uc @@ -0,0 +1,462 @@ +import * as nl80211 from "nl80211"; +import * as rtnl from "rtnl"; +import { readfile, glob, basename, readlink, open } from "fs"; + +const iftypes = { + ap: nl80211.const.NL80211_IFTYPE_AP, + mesh: nl80211.const.NL80211_IFTYPE_MESH_POINT, + sta: nl80211.const.NL80211_IFTYPE_STATION, + adhoc: nl80211.const.NL80211_IFTYPE_ADHOC, + monitor: nl80211.const.NL80211_IFTYPE_MONITOR, +}; + +const mesh_params = { + mesh_retry_timeout: "retry_timeout", + mesh_confirm_timeout: "confirm_timeout", + mesh_holding_timeout: "holding_timeout", + mesh_max_peer_links: "max_peer_links", + mesh_max_retries: "max_retries", + mesh_ttl: "ttl", + mesh_element_ttl: "element_ttl", + mesh_auto_open_plinks: "auto_open_plinks", + mesh_hwmp_max_preq_retries: "hwmp_max_preq_retries", + mesh_path_refresh_time: "path_refresh_time", + mesh_min_discovery_timeout: "min_discovery_timeout", + mesh_hwmp_active_path_timeout: "hwmp_active_path_timeout", + mesh_hwmp_preq_min_interval: "hwmp_preq_min_interval", + mesh_hwmp_net_diameter_traversal_time: "hwmp_net_diam_trvs_time", + mesh_hwmp_rootmode: "hwmp_rootmode", + mesh_hwmp_rann_interval: "hwmp_rann_interval", + mesh_gate_announcements: "gate_announcements", + mesh_sync_offset_max_neighor: "sync_offset_max_neighbor", + mesh_rssi_threshold: "rssi_threshold", + mesh_hwmp_active_path_to_root_timeout: "hwmp_path_to_root_timeout", + mesh_hwmp_root_interval: "hwmp_root_interval", + mesh_hwmp_confirmation_interval: "hwmp_confirmation_interval", + mesh_awake_window: "awake_window", + mesh_plink_timeout: "plink_timeout", + mesh_fwding: "forwarding", + mesh_power_mode: "power_mode", + mesh_nolearn: "nolearn" +}; + +function wdev_remove(name) +{ + nl80211.request(nl80211.const.NL80211_CMD_DEL_INTERFACE, 0, { dev: name }); +} + +function __phy_is_fullmac(phyidx) +{ + let data = nl80211.request(nl80211.const.NL80211_CMD_GET_WIPHY, 0, { wiphy: phyidx }); + + return !data.software_iftypes.monitor; +} + +function phy_is_fullmac(phy) +{ + let phyidx = int(trim(readfile(`/sys/class/ieee80211/${phy}/index`))); + + return __phy_is_fullmac(phyidx); +} + +function find_reusable_wdev(phyidx) +{ + if (!__phy_is_fullmac(phyidx)) + return null; + + let data = nl80211.request( + nl80211.const.NL80211_CMD_GET_INTERFACE, + nl80211.const.NLM_F_DUMP, + { wiphy: phyidx }); + for (let res in data) + if (trim(readfile(`/sys/class/net/${res.ifname}/operstate`)) == "down") + return res.ifname; + return null; +} + +function wdev_set_radio_mask(name, mask) +{ + nl80211.request(nl80211.const.NL80211_CMD_SET_INTERFACE, 0, { + dev: name, + vif_radio_mask: mask + }); +} + +function wdev_create(phy, name, data) +{ + let phyidx = int(readfile(`/sys/class/ieee80211/${phy}/index`)); + + wdev_remove(name); + + if (!iftypes[data.mode]) + return `Invalid mode: ${data.mode}`; + + let req = { + wiphy: phyidx, + ifname: name, + iftype: iftypes[data.mode], + }; + + if (data["4addr"]) + req["4addr"] = data["4addr"]; + if (data.macaddr) + req.mac = data.macaddr; + if (data.radio_mask > 0) + req.vif_radio_mask = data.radio_mask; + else if (data.radio != null && data.radio >= 0) + req.vif_radio_mask = 1 << data.radio; + else if (data.mld_radio_mask != null && data.mld_radio_mask > 0) + req.vif_radio_mask = data.mld_radio_mask; + + nl80211.error(); + + let reuse_ifname = find_reusable_wdev(phyidx); + if (reuse_ifname && + (reuse_ifname == name || + rtnl.request(rtnl.const.RTM_SETLINK, 0, { dev: reuse_ifname, ifname: name}) != false)) { + req.dev = req.ifname; + delete req.ifname; + nl80211.request(nl80211.const.NL80211_CMD_SET_INTERFACE, 0, req); + } else { + nl80211.request( + nl80211.const.NL80211_CMD_NEW_INTERFACE, + nl80211.const.NLM_F_CREATE, + req); + } + + let error = nl80211.error(); + if (error) + return error; + + if (data.powersave != null) { + nl80211.request(nl80211.const.NL80211_CMD_SET_POWER_SAVE, 0, + { dev: name, ps_state: data.powersave ? 1 : 0}); + } + + return null; +} + +function wdev_set_mesh_params(name, data) +{ + let mesh_cfg = {}; + + for (let key in mesh_params) { + let val = data[key]; + if (val == null) + continue; + mesh_cfg[mesh_params[key]] = int(val); + } + + if (!length(mesh_cfg)) + return null; + + nl80211.request(nl80211.const.NL80211_CMD_SET_MESH_CONFIG, 0, + { dev: name, mesh_params: mesh_cfg }); + + return nl80211.error(); +} + +function wdev_set_up(name, up) +{ + rtnl.request(rtnl.const.RTM_SETLINK, 0, { dev: name, change: 1, flags: up ? 1 : 0 }); +} + +function phy_sysfs_file(phy, name) +{ + return trim(readfile(`/sys/class/ieee80211/${phy}/${name}`)); +} + +function macaddr_split(str) +{ + return map(split(str, ":"), (val) => hex(val)); +} + +function macaddr_join(addr) +{ + return join(":", map(addr, (val) => sprintf("%02x", val))); +} + +function wdev_macaddr(wdev) +{ + return trim(readfile(`/sys/class/net/${wdev}/address`)); +} + +const phy_proto = { + macaddr_init: function(used, options) { + this.macaddr_options = options ?? {}; + this.macaddr_list = {}; + this.mbssid_list = []; + + if (type(used) == "object") + for (let addr in used) + this.macaddr_list[addr] = used[addr]; + else + for (let addr in used) + this.macaddr_list[addr] = -1; + + this.for_each_wdev((wdev) => { + let macaddr = wdev_macaddr(wdev); + this.macaddr_list[macaddr] ??= -1; + }); + + return this.macaddr_list; + }, + + macaddr_generate: function(data) { + let phy = this.phy; + let radio_idx = this.radio; + let idx = int(data.id ?? 0); + let mbssid = int(data.mbssid ?? 0) > 0; + let num_global = int(data.num_global ?? 1); + + let base_addr = phy_sysfs_file(phy, "macaddress"); + if (!base_addr) + return null; + + let base_mask = phy_sysfs_file(phy, "address_mask"); + if (!base_mask) + return null; + + if (base_mask == "00:00:00:00:00:00") + base_mask = "ff:ff:ff:ff:ff:ff"; + + if (data.macaddr_base) + base_addr = data.macaddr_base; + else if (base_mask == "ff:ff:ff:ff:ff:ff" && + (radio_idx > 0 || idx >= num_global)) { + let addrs = split(phy_sysfs_file(phy, "addresses"), "\n"); + + if (radio_idx != null) { + if (radio_idx && radio_idx < length(addrs)) + base_addr = addrs[radio_idx]; + else + idx += radio_idx * 32; + } else { + if (idx < length(addrs)) + return addrs[idx]; + } + } + + if (!idx && !mbssid) + return base_addr; + + let use_global = !mbssid && idx < num_global; + let addr = macaddr_split(base_addr); + let mask = macaddr_split(base_mask); + let type; + + if (use_global) + type = "add"; + else if (mask[0] > 0) + type = "b1"; + else if (mask[5] < 0xff) + type = "b5"; + else + type = "add"; + + switch (type) { + case "b5": + if (mbssid) + addr[0] |= 2; + addr[5] ^= idx; + break; + case "b1": + addr[0] |= 2; + addr[0] ^= (radio_idx ?? 0) << 2; + // fallthrough + default: + for (let i = 4; i > 0; i--) { + addr[i] += idx; + if (addr[i] < 256) + break; + idx = addr[i] / 256; + addr[i] %= 256; + } + break; + } + + return macaddr_join(addr); + }, + + mbssid_macaddr_generate: function(data) { + /* check if we can keep MAC addresses for non-TX BSSes */ + let base_addr = macaddr_split(this.mbssid_list[0]); + let num_bss = 1 << data.mbssid_indicator; + let b5 = base_addr[5] % num_bss; + let list = this.macaddr_list; + let mbssid_list = this.mbssid_list; + + for (let i = 1; i < num_bss; i++) { + let addr = [...base_addr]; + addr[5] = base_addr[5] - b5 + ((b5 + i) % num_bss); + + let addr_str = macaddr_join(addr); + if (list[addr_str] != null) + return -1; + + list[addr_str] = -1; + mbssid_list[i] = addr_str; + } + + return 0; + }, + + set_mbssid_macaddr: function(tx_addr) { + let data = this.macaddr_options ?? {}; + + this.mbssid_list[0] = tx_addr; + return this.mbssid_macaddr_generate(data) + }, + + macaddr_next: function(val) { + let data = this.macaddr_options ?? {}; + let list = this.macaddr_list; + + if (data.mbssid && val > 0 && val < length(this.mbssid_list)) + return this.mbssid_list[val]; + + for (let i = 0; i < 32; i++) { + data.id = i; + + let mac = this.macaddr_generate(data); + if (!mac) + return null; + + if (list[mac] != null) + continue; + + if (data.mbssid && val == 0) { + this.mbssid_list[0] = mac; + if (this.mbssid_macaddr_generate(data)) + continue; + } + + list[mac] = val != null ? val : -1; + return mac; + } + }, + + wdev_add: function(name, data) { + let phydev = this; + wdev_create(this.phy, name, { + ...data, + radio: this.radio, + }); + }, + + for_each_wdev: function(cb) { + let wdevs = nl80211.request( + nl80211.const.NL80211_CMD_GET_INTERFACE, + nl80211.const.NLM_F_DUMP, + { wiphy: this.idx } + ); + + let mac_wdev = {}; + for (let wdev in wdevs) { + if (wdev.iftype == nl80211.const.NL80211_IFTYPE_AP_VLAN) + continue; + if (this.radio != null && wdev.vif_radio_mask != null && + wdev.vif_radio_mask != (1 << this.radio)) + continue; + mac_wdev[wdev.mac] = wdev; + } + + for (let wdev in wdevs) { + if (!mac_wdev[wdev.mac]) + continue; + + cb(wdev.ifname); + } + } +}; + +function phy_open(phy, radio) +{ + let phyidx = readfile(`/sys/class/ieee80211/${phy}/index`); + if (!phyidx) + return null; + + let name = phy; + if (radio === "" || radio < 0) + radio = null; + if (radio != null) + name += "." + radio; + + return proto({ + phy, name, radio, + idx: int(phyidx), + }, phy_proto); +} + +const vlist_proto = { + update: function(values, arg) { + let data = this.data; + let cb = this.cb; + let seq = { }; + let new_data = {}; + let old_data = {}; + + this.data = new_data; + + if (type(values) == "object") { + for (let key in values) { + old_data[key] = data[key]; + new_data[key] = values[key]; + delete data[key]; + } + } else { + for (let val in values) { + let cur_key = val[0]; + let cur_obj = val[1]; + + old_data[cur_key] = data[cur_key]; + new_data[cur_key] = val[1]; + delete data[cur_key]; + } + } + + for (let key in data) { + cb(null, data[key], arg); + delete data[key]; + } + for (let key in new_data) + cb(new_data[key], old_data[key], arg); + } +}; + +function is_equal(val1, val2) { + let t1 = type(val1); + + if (t1 != type(val2)) + return false; + + if (t1 == "array") { + if (length(val1) != length(val2)) + return false; + + for (let i = 0; i < length(val1); i++) + if (!is_equal(val1[i], val2[i])) + return false; + + return true; + } else if (t1 == "object") { + for (let key in val1) + if (!is_equal(val1[key], val2[key])) + return false; + for (let key in val2) + if (val1[key] == null) + return false; + return true; + } else { + return val1 == val2; + } +} + +function vlist_new(cb) { + return proto({ + cb: cb, + data: {} + }, vlist_proto); +} + +export { wdev_remove, wdev_create, wdev_set_mesh_params, wdev_set_radio_mask, wdev_set_up, is_equal, vlist_new, phy_is_fullmac, phy_open }; diff --git a/wireless-scripts-example/mtk-feed/hostapd.sh b/wireless-scripts-example/mtk-feed/hostapd.sh new file mode 100644 index 0000000000..b9bb07751e --- /dev/null +++ b/wireless-scripts-example/mtk-feed/hostapd.sh @@ -0,0 +1,1639 @@ +. /lib/functions/network.sh +. /lib/functions.sh + +wpa_supplicant_add_rate() { + local var="$1" + local val="$(($2 / 1000))" + local sub="$((($2 / 100) % 10))" + append $var "$val" "," + [ $sub -gt 0 ] && append $var "." +} + +hostapd_add_rate() { + local var="$1" + local val="$(($2 / 100))" + append $var "$val" " " +} + +hostapd_append_wep_key() { + local var="$1" + + wep_keyidx=0 + set_default key 1 + case "$key" in + [1234]) + for idx in 1 2 3 4; do + local zidx + zidx="$(($idx - 1))" + json_get_var ckey "key${idx}" + [ -n "$ckey" ] && \ + append $var "wep_key${zidx}=$(prepare_key_wep "$ckey")" "$N$T" + done + wep_keyidx="$((key - 1))" + ;; + *) + append $var "wep_key0=$(prepare_key_wep "$key")" "$N$T" + ;; + esac +} + +hostapd_append_wpa_key_mgmt() { + local auth_type_l="$(echo $auth_type | tr 'a-z' 'A-Z')" + + case "$auth_type" in + psk|eap) + append wpa_key_mgmt "WPA-$auth_type_l" + [ "${wpa:-2}" -ge 2 ] && [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-${auth_type_l}" + [ "${ieee80211w:-0}" -gt 0 ] && append wpa_key_mgmt "WPA-${auth_type_l}-SHA256" + ;; + eap192) + append wpa_key_mgmt "WPA-EAP-SUITE-B-192" + [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-EAP-SHA384" + ;; + eap-eap2) + append wpa_key_mgmt "WPA-EAP-SHA256" + [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-EAP" + [ "$rsn_override" -gt 0 ] && rsn_override_key_mgmt="$wpa_key_mgmt" + append wpa_key_mgmt "WPA-EAP" + ;; + eap2) + [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-EAP" + append wpa_key_mgmt "WPA-EAP-SHA256" + ;; + sae) + append wpa_key_mgmt "SAE" + [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-SAE" + ;; + psk-sae) + append wpa_key_mgmt "SAE" + [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-SAE" + [ "$rsn_override" -gt 0 ] && rsn_override_key_mgmt="$wpa_key_mgmt" + [ "$rsn_override" -gt 1 ] && wpa_key_mgmt= + [ "$band" = "6g" ] || { + append wpa_key_mgmt "WPA-PSK" + [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-PSK" + [ "${ieee80211w:-0}" -gt 0 ] && append wpa_key_mgmt "WPA-PSK-SHA256" + } + ;; + owe) + append wpa_key_mgmt "OWE" + ;; + esac + + [ "$fils" -gt 0 ] && { + case "$auth_type" in + eap192) + append wpa_key_mgmt FILS-SHA384 + [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt FT-FILS-SHA384 + ;; + eap*) + append wpa_key_mgmt FILS-SHA256 + [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt FT-FILS-SHA256 + + [ "$rsn_override" -gt 0 ] && { + append rsn_override_key_mgmt FILS-SHA256 + [ "${ieee80211r:-0}" -gt 0 ] && append rsn_override_key_mgmt FT-FILS-SHA256 + } + ;; + esac + } +} + +hostapd_add_log_config() { + config_add_boolean \ + log_80211 \ + log_8021x \ + log_radius \ + log_wpa \ + log_driver \ + log_iapp \ + log_mlme + + config_add_int log_level +} + +hostapd_common_add_device_config() { + config_add_array basic_rate + config_add_array supported_rates + config_add_string beacon_rate + + config_add_string country country3 + config_add_boolean country_ie doth + config_add_boolean spectrum_mgmt_required + config_add_int local_pwr_constraint + config_add_string require_mode + config_add_boolean legacy_rates + config_add_int cell_density + config_add_int rts_threshold + config_add_int rssi_reject_assoc_rssi + config_add_int rssi_reject_assoc_timeout + config_add_int rssi_ignore_probe_request + config_add_int maxassoc + config_add_int reg_power_type + config_add_boolean stationary_ap + + config_add_string acs_chan_bias + config_add_array hostapd_options + + config_add_int airtime_mode + config_add_int mbssid + + hostapd_add_log_config +} + +hostapd_prepare_device_config() { + local config="$1" + local driver="$2" + + local base_cfg= + + json_get_vars country country3 country_ie beacon_int:100 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_reject_assoc_timeout rssi_ignore_probe_request \ + maxassoc mbssid:0 band reg_power_type stationary_ap + + hostapd_set_log_options base_cfg + + set_default country_ie 1 + set_default spectrum_mgmt_required 0 + set_default doth 1 + set_default legacy_rates 0 + set_default airtime_mode 0 + set_default cell_density 0 + + [ -n "$country" ] && { + append base_cfg "country_code=$country" "$N" + [ -n "$country3" ] && append base_cfg "country3=$country3" "$N" + + [ "$country_ie" -gt 0 ] && { + append base_cfg "ieee80211d=1" "$N" + [ -n "$local_pwr_constraint" ] && append base_cfg "local_pwr_constraint=$local_pwr_constraint" "$N" + [ "$spectrum_mgmt_required" -gt 0 ] && append base_cfg "spectrum_mgmt_required=$spectrum_mgmt_required" "$N" + } + [ "$hwmode" = "a" -a "$doth" -gt 0 ] && append base_cfg "ieee80211h=1" "$N" + } + + [ -n "$acs_chan_bias" ] && append base_cfg "acs_chan_bias=$acs_chan_bias" "$N" + + local brlist= br + json_get_values basic_rate_list basic_rate + local rlist= r + json_get_values rate_list supported_rates + + [ -n "$hwmode" ] && append base_cfg "hw_mode=$hwmode" "$N" + if [ "$hwmode" = "g" ] || [ "$hwmode" = "a" ]; then + [ -n "$require_mode" ] && legacy_rates=0 + case "$require_mode" in + n) append base_cfg "require_ht=1" "$N";; + ac) append base_cfg "require_vht=1" "$N";; + esac + fi + case "$hwmode" in + b) + if [ "$cell_density" -eq 1 ]; then + set_default rate_list "5500 11000" + set_default basic_rate_list "5500 11000" + elif [ "$cell_density" -ge 2 ]; then + set_default rate_list "11000" + set_default basic_rate_list "11000" + fi + ;; + g) + if [ "$cell_density" -eq 0 ] || [ "$cell_density" -eq 1 ]; then + if [ "$legacy_rates" -eq 0 ]; then + set_default rate_list "6000 9000 12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "6000 12000 24000" + elif [ "$cell_density" -eq 1 ]; then + set_default rate_list "5500 6000 9000 11000 12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "5500 11000" + fi + elif [ "$cell_density" -ge 3 ] && [ "$legacy_rates" -ne 0 ] || [ "$cell_density" -eq 2 ]; then + if [ "$legacy_rates" -eq 0 ]; then + set_default rate_list "12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "12000 24000" + else + set_default rate_list "11000 12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "11000" + fi + elif [ "$cell_density" -ge 3 ]; then + set_default rate_list "24000 36000 48000 54000" + set_default basic_rate_list "24000" + fi + ;; + a) + if [ "$cell_density" -eq 1 ]; then + set_default rate_list "6000 9000 12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "6000 12000 24000" + elif [ "$cell_density" -eq 2 ]; then + set_default rate_list "12000 18000 24000 36000 48000 54000" + set_default basic_rate_list "12000 24000" + elif [ "$cell_density" -ge 3 ]; then + set_default rate_list "24000 36000 48000 54000" + set_default basic_rate_list "24000" + fi + ;; + esac + + for r in $rate_list; do + hostapd_add_rate rlist "$r" + done + + for br in $basic_rate_list; do + hostapd_add_rate brlist "$br" + done + + [ -n "$rssi_reject_assoc_rssi" ] && append base_cfg "rssi_reject_assoc_rssi=$rssi_reject_assoc_rssi" "$N" + [ -n "$rssi_reject_assoc_timeout" ] && append base_cfg "rssi_reject_assoc_timeout=$rssi_reject_assoc_timeout" "$N" + [ -n "$rssi_ignore_probe_request" ] && append base_cfg "rssi_ignore_probe_request=$rssi_ignore_probe_request" "$N" + [ -n "$beacon_rate" ] && append base_cfg "beacon_rate=$beacon_rate" "$N" + [ -n "$rlist" ] && append base_cfg "supported_rates=$rlist" "$N" + [ -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" + [ "$airtime_mode" -gt 0 ] && append base_cfg "airtime_mode=$airtime_mode" "$N" + [ -n "$maxassoc" ] && append base_cfg "iface_max_num_sta=$maxassoc" "$N" + [ "$mbssid" -gt 0 ] && [ "$mbssid" -le 2 ] && append base_cfg "mbssid=$mbssid" "$N" + + [ "$band" = "6g" ] && { + set_default reg_power_type 0 + append base_cfg "he_6ghz_reg_pwr_type=$reg_power_type" "$N" + } + + set_default stationary_ap 1 + append base_cfg "stationary_ap=$stationary_ap" "$N" + + json_get_values opts hostapd_options + for val in $opts; do + append base_cfg "$val" "$N" + done + + cat > "$config" <