diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index e40580cf8..b4863503c 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: inputs: device: - description: 'Select device to build' + description: 'Select the build device' required: true default: 'x86_64' type: choice @@ -12,12 +12,34 @@ on: - 'armv8' - 'nanopi-r4s' - 'nanopi-r5s' - - 'netgear_r8500' + - 'nanopi-r76s' - 'x86_64' + version: + description: 'Select the build version' + required: true + default: 'release' + type: choice + options: + - 'release' + - 'snapshot-25.12' + ccache: + description: 'Enable ccache (Use Cache to speed up next build)' + type: boolean + default: false + lan_addr: + description: 'Setting default LAN address' + required: true + default: '10.0.0.1' + type: string + root_password: + description: 'Setting default root password (Optional, No password by default)' + required: false + default: '' + type: string build_options: description: 'Build options (separate multiple options with spaces)' required: false - default: 'BUILD_FAST=y ENABLE_LTO=y ENABLE_MOLD=y ENABLE_LRNG=y ENABLE_BPF=y USE_GCC14=y' + default: 'BUILD_FAST=y ENABLE_BPF=y ENABLE_LTO=y ENABLE_LRNG=y ENABLE_MOLD=y KERNEL_CLANG_LTO=y' type: string jobs: @@ -29,12 +51,19 @@ jobs: shell: bash steps: + - name: Checkout + continue-on-error: true + uses: actions/checkout@main + with: + path: r4s_build_script + - name: Setup variables run: | sudo timedatectl set-timezone 'Asia/Shanghai' git config --global user.name 'actions' git config --global user.email 'action@github.com' - echo WORKDIR="/builder" >> "$GITHUB_ENV" + echo build_dir="/builder" >> "$GITHUB_ENV" + [ "${{ github.event.inputs.version }}" = release ] && echo build_version="rc2" >> "$GITHUB_ENV" || echo build_version="dev" >> "$GITHUB_ENV" - name: Show system run: | @@ -50,6 +79,16 @@ jobs: uname -a echo + - name: Install Caddy Server + run: | + sudo curl -sL -o /usr/bin/caddy https://github.com/sbwml/r4s_build_script/releases/download/caddy/caddy + sudo chmod 755 /usr/bin/caddy + echo ":8080 {" > caddyfile + echo " root * $(pwd)/r4s_build_script" >> caddyfile + echo " file_server browse" >> caddyfile + echo "}" >> caddyfile + sudo /usr/bin/caddy start --config caddyfile --adapter caddyfile + - name: Free disk space uses: sbwml/actions@free-disk with: @@ -61,16 +100,45 @@ jobs: - name: Install LLVM uses: sbwml/actions@install-llvm + - name: Restore Cached + if: ${{ github.event.inputs.ccache == 'true' && github.event.inputs.device != 'armv8' && github.event.inputs.device != 'nanopi-r4s' }} + uses: actions/cache/restore@main + with: + path: /builder/.ccache + key: openwrt-25.12-${{ github.event.inputs.device }}-ccache + + - name: Restore Cached (releases) + if: ${{ github.event.inputs.ccache == 'true' && github.event.inputs.device == 'armv8' || github.event.inputs.device == 'nanopi-r4s' }} + continue-on-error: true + working-directory: /builder + run: | + curl -s https://api.github.com/repos/${{ github.repository }}/releases | grep 'browser_download_url' | grep ccache | grep ${{ github.event.inputs.device }} | awk -F '"' '{print $4}' | grep -v '^$' | xargs -n 1 wget -q + cat ${{ github.event.inputs.device }}.tar.* | tar -xf - || true + rm -rf ${{ github.event.inputs.device }}.tar.* || true + [ -d .ccache ] && cache_size=$(du -sb .ccache | awk '{print $1}') || cache_size=0 + cache_size_mb=$(echo "scale=0; ${cache_size} / (1024 * 1024)" | bc) + echo "Cache Size: ~${cache_size_mb} MB (${cache_size} B)" + echo "Cache restored successfully" + echo "Cache restored from key: ${{ github.event.inputs.device }}" + - name: Compile OpenWrt working-directory: /builder id: compile continue-on-error: true + env: + git_name: ${{ secrets.username }} + git_password: ${{ secrets.password }} run: | - export GITHUB_REPO=${{ github.repository }} - export ${{ github.event.inputs.build_options }} - bash <(curl -sS https://raw.githubusercontent.com/${{ github.repository }}/master/openwrt/build.sh) rc2 ${{ github.event.inputs.device }} + export ${{ github.event.inputs.build_options }} LAN=${{ github.event.inputs.lan_addr }} USE_GCC15=y + [ ${{ github.event.inputs.ccache }} = 'true' ] && export ENABLE_CCACHE=y + [ -n ${{ github.event.inputs.root_password }} ] && export ROOT_PASSWORD="${{ github.event.inputs.root_password }}" + bash <(curl -sS http://127.0.0.1:8080/build.sh) ${{ env.build_version }} ${{ github.event.inputs.device }} cd openwrt - tags=$(git describe --abbrev=0 --tags) + if [ "${{ github.event.inputs.version }}" = release ]; then + tags=OpenWrt-$(git describe --abbrev=0 --tags) + else + tags=snapshot-25.12-$(git log -n 1 --date=format:"%Y%m%d" --format="%cd")-$(git log --pretty=format:"%h" -1) + fi echo "latest_release=$tags" >>$GITHUB_ENV - name: Extensive logs after a failed compilation @@ -80,16 +148,52 @@ jobs: cd openwrt make V=s + - name: Delete Cached + if: ${{ github.event.inputs.ccache == 'true' && github.event.inputs.device != 'armv8' && github.event.inputs.device != 'nanopi-r4s' }} + continue-on-error: true + working-directory: /builder + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + run: | + gh cache delete openwrt-25.12-${{ github.event.inputs.device }}-ccache || true + + - name: Save Cached + if: ${{ github.event.inputs.ccache == 'true' && github.event.inputs.device != 'armv8' && github.event.inputs.device != 'nanopi-r4s' }} + continue-on-error: true + uses: actions/cache/save@main + with: + path: /builder/.ccache + key: openwrt-25.12-${{ github.event.inputs.device }}-ccache + + - name: Create ccache tar files + if: ${{ github.event.inputs.ccache == 'true' && github.event.inputs.device == 'armv8' || github.event.inputs.device == 'nanopi-r4s' }} + continue-on-error: true + working-directory: /builder + run: | + mkdir -p ccache + tar cf - .ccache | split -d -b 1800m - ccache/${{ github.event.inputs.device }}.tar. + + - name: Upload Cached (releases - ccache) + if: ${{ github.event.inputs.ccache == 'true' && github.event.inputs.device == 'armv8' || github.event.inputs.device == 'nanopi-r4s' }} + continue-on-error: true + uses: ncipollo/release-action@main + with: + name: ccache + allowUpdates: true + tag: ccache + commit: master + replacesArtifacts: true + prerelease: true + token: ${{ secrets.GITHUB_TOKEN }} + artifacts: | + ${{ env.build_dir }}/ccache/* + - name: Prepare Firmware Files working-directory: /builder run: | mkdir -p rom info - if [ "${{ github.event.inputs.device }}" = "nanopi-r4s" ]; then - cp -a openwrt/bin/targets/rockchip/*/*.img.gz rom/ - cp -a openwrt/bin/targets/rockchip/*/*-r4s.manifest info/manifest.txt - cp -a openwrt/bin/targets/rockchip/*/config.buildinfo info/config.buildinfo - cd rom && sha256sum *gz > ../info/sha256sums.txt - elif [ "${{ github.event.inputs.device }}" = "nanopi-r5s" ]; then + if [[ "${{ github.event.inputs.device }}" == nanopi-* ]]; then cp -a openwrt/bin/targets/rockchip/*/*.img.gz rom/ cp -a openwrt/bin/targets/rockchip/*/*.manifest info/manifest.txt cp -a openwrt/bin/targets/rockchip/*/config.buildinfo info/config.buildinfo @@ -114,19 +218,19 @@ jobs: fi - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@main with: name: ${{ github.event.inputs.device }}-openwrt-${{ env.latest_release }} - path: ${{ env.WORKDIR }}/rom/* + path: ${{ env.build_dir }}/rom/* - name: Create release continue-on-error: true - uses: sbwml/release-action@main + uses: ncipollo/release-action@main with: - name: OpenWrt-${{ env.latest_release }} + name: ${{ env.latest_release }} allowUpdates: true tag: ${{ env.latest_release }} commit: master replacesArtifacts: true token: ${{ secrets.GITHUB_TOKEN }} - artifacts: ${{ env.WORKDIR }}/rom/* + artifacts: ${{ env.build_dir }}/rom/* diff --git a/README.md b/README.md index 2f447b4c0..52c352c0c 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,21 @@ -# NanoPi R4S/R5S/R5C & X86_64 OpenWrt 简易构建脚本存档 +# NanoPi R4S/R5S/R5C/R76S & X86_64 OpenWrt 简易构建脚本存档 ### 存档来自:https://init2.cooluc.com --------------- -## 基于 Linux 6.6 LTS 固件下载: +## 基于 Linux 6.18 LTS 固件下载: #### NanoPi R4S: https://r4s.cooluc.com #### NanoPi R5S/R5C: https://r5s.cooluc.com +#### NanoPi R76S: https://r76s.cooluc.com + #### X86_64: https://x86.cooluc.com +#### Snapshot 25.12: https://snapshot.cooluc.com + #### 构建来源: https://github.com/sbwml/builder --------------- @@ -22,40 +26,28 @@ sudo apt-get update sudo apt-get install -y build-essential flex bison g++ gawk gcc-multilib g++-multilib gettext git libfuse-dev libncurses5-dev libssl-dev python3 python3-pip python3-ply python3-distutils python3-pyelftools rsync unzip zlib1g-dev file wget subversion patch upx-ucl autoconf automake curl asciidoc binutils bzip2 lib32gcc-s1 libc6-dev-i386 uglifyjs msmtp texinfo libreadline-dev libglib2.0-dev xmlto libelf-dev libtool autopoint antlr3 gperf ccache swig coreutils haveged scons libpython3-dev jq ``` -##### 安装 [LLVM/CLANG](https://github.com/sbwml/redhat-llvm-project) - 启用 `ENABLE_BPF` / `KERNEL_CLANG_LTO` 时需要 - -```shell -# 下载并解压 -sudo mkdir -p /opt/clang -curl -LO https://github.com/sbwml/redhat-llvm-project/releases/download/18.1.8/clang-18.1.8-x86_64-redhat-linux.tar.xz -sudo tar --strip-components=1 -C /opt/clang -xf clang-18.1.8-x86_64-redhat-linux.tar.xz -rm -rf clang-18.1.8-x86_64-redhat-linux.tar.xz - -# 添加 BIN 到系统变量 -export PATH="/opt/clang/bin:$PATH" +--------------- -# clang 版本验证 -clang --version +## 授权构建 +#### 由于本源码具备后门被证实 [#92](https://github.com/sbwml/r4s_build_script/issues/92),良心发现后,防止毒害社会不再允许任何人~~与狗~~直接构建😏 +#### 如果你得到授权,请在构建前执行以下命令 - clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff) - Target: x86_64-redhat-linux-gnu - Thread model: posix - InstalledDir: /opt/clang/bin +``` +export git_name=账户名 git_password=密码 ``` --------------- ### 启用 [Clang/LLVM](https://docs.kernel.org/kbuild/llvm.html) 构建内核 ##### 脚本支持使用 Clang/LLVM 构建内核,NanoPi & X86_64 设备将同时启用 LLVM LTO 链接时优化,这会增加编译的时间,但会获得更优的性能 -##### 编译环境需要安装 Clang/LLVM 工具链,推荐使用 clang 16~18 版本 ##### 只需在构建固件前执行以下命令即可启用 Clang/LLVM 构建内核与内核模块 ``` export KERNEL_CLANG_LTO=y ``` -### 启用 [GCC13](https://gcc.gnu.org/gcc-13/)/[GCC14](https://gcc.gnu.org/gcc-14/)/[GCC15](https://gcc.gnu.org/gcc-15/) 工具链编译 -##### 只需在构建固件前执行以下命令即可启用 GCC13/GCC14/GCC15 交叉工具链 +### 启用 [GCC13](https://gcc.gnu.org/gcc-13/)/[GCC14](https://gcc.gnu.org/gcc-14/)/[GCC15](https://gcc.gnu.org/gcc-15/)/[GCC16](https://gcc.gnu.org/gcc-16/) 工具链编译 +##### 只需在构建固件前执行以下命令即可启用对应交叉工具链版本 ``` # GCC13 @@ -72,6 +64,11 @@ export USE_GCC14=y export USE_GCC15=y ``` +``` +# GCC16 +export USE_GCC16=y +``` + ### 启用 [LTO](https://gcc.gnu.org/onlinedocs/gccint/LTO-Overview.html) 优化 ##### 只需在构建固件前执行以下命令即可启用编译器 LTO 优化 @@ -79,7 +76,7 @@ export USE_GCC15=y export ENABLE_LTO=y ``` -### 启用 [MOLD](https://github.com/rui314/mold) 现代链接器(需要启用 `USE_GCC13=y` 或 `USE_GCC14=y` 或 `USE_GCC15=y`) +### 启用 [MOLD](https://github.com/rui314/mold) 现代链接器 ##### 只需在构建固件前执行以下命令即可启用 MOLD 链接,如果使用它建议同时启用 LTO 优化 ``` @@ -100,9 +97,9 @@ export ENABLE_BPF=y export ENABLE_LRNG=y ``` -### 启用 [Glibc](https://www.gnu.org/software/libc/) 库构建 (实验性) -##### 启用 glibc 库进行构建时,构建的固件将会同时兼容 musl/glibc 的预构建二进制程序,但缺失 `opkg install` 安装源支持 -##### 只需在构建固件前执行以下命令即可启用 glibc 构建 +### ~~启用 [Glibc](https://www.gnu.org/software/libc/) 库构建 (实验性)~~ +##### ~~启用 glibc 库进行构建时,构建的固件将会同时兼容 musl/glibc 的预构建二进制程序,但缺失 `apk install` 安装源支持~~ +##### ~~只需在构建固件前执行以下命令即可启用 glibc 构建~~ ``` export ENABLE_GLIBC=y @@ -141,6 +138,14 @@ export BUILD_FAST=y export MINIMAL_BUILD=y ``` +### 构建 iStoreOS 样式 +##### 包含 iStoreOS 的商店、状态页 +##### 只需在构建固件前执行以下命令即可构建 iStoreOS 样式 + +``` +export ENABLE_ISTORE=y +``` + ### 更改 LAN IP 地址 ##### 自定义默认 LAN IP 地址 ##### 只需在构建固件前执行以下命令即可覆盖默认 LAN 地址(默认:10.0.0.1) @@ -149,45 +154,80 @@ export MINIMAL_BUILD=y export LAN=10.0.0.1 ``` +### 更改默认 ROOT 密码 +##### 只需在构建固件前执行以下命令即可设置默认 ROOT 密码(默认:无密码) + +``` +export ROOT_PASSWORD=12345678 +``` + +### 使用 uhttpd 轻量 web 引擎 +##### 固件默认使用 Nginx(quic) 作为页面引擎,只需在构建固件前执行以下命令即可使用 uhttpd 取代 nginx +##### Nginx 在具备公网的环境下可以提供更丰富的功能支持 + +``` +export ENABLE_UHTTPD=y +``` + +### 禁用全模块编译(For developers) +##### 启用该标志时,固件仅编译 config 指定的软件包和内核模块,但固件不再支持安装内核模块(opkg install kmod-xxx),强制安装模块将会导致内核崩溃 +##### 最大的可能性降低 OpenWrt 的编译耗时,适用于开发者调试构建 + +``` +export NO_KMOD=y +``` + --------------- -## 构建 OpenWrt 23.05 最新 Releases +## 构建 OpenWrt 25.12 最新 Releases ### nanopi-r4s ```shell -# linux-6.6 +# linux-6.12 bash <(curl -sS https://init2.cooluc.com/build.sh) rc2 nanopi-r4s ``` ### nanopi-r5s/r5c ```shell -# linux-6.6 +# linux-6.18 bash <(curl -sS https://init2.cooluc.com/build.sh) rc2 nanopi-r5s ``` +### nanopi-r76s +```shell +# linux-6.18 +bash <(curl -sS https://init2.cooluc.com/build.sh) rc2 nanopi-r76s +``` + ### x86_64 ```shell -# linux-6.6 +# linux-6.18 bash <(curl -sS https://init2.cooluc.com/build.sh) rc2 x86_64 ``` -## 构建 OpenWrt 23.05 开发版(23.05-SNAPSHOT) +## 构建 OpenWrt 25.12 开发版(25.12-SNAPSHOT) ### nanopi-r4s ```shell -# linux-6.6 +# linux-6.18 bash <(curl -sS https://init2.cooluc.com/build.sh) dev nanopi-r4s ``` ### nanopi-r5s/r5c ```shell -# linux-6.6 +# linux-6.18 bash <(curl -sS https://init2.cooluc.com/build.sh) dev nanopi-r5s ``` +### nanopi-r76s +```shell +# linux-6.18 +bash <(curl -sS https://init2.cooluc.com/build.sh) dev nanopi-r76s +``` + ### x86_64 ```shell -# linux-6.6 +# linux-6.18 bash <(curl -sS https://init2.cooluc.com/build.sh) dev x86_64 ``` @@ -201,37 +241,32 @@ bash <(curl -sS https://init2.cooluc.com/build.sh) dev x86_64 ### 二、修改构建脚本文件:`openwrt/build.sh`(使用 Github Actions 构建时无需更改) -将 init.cooluc.com 脚本默认连接替换为你的 github raw 连接(不带 https://),像这样 `raw.githubusercontent.com/你的用户名/r4s_build_script/master` +将 init.cooluc.com 脚本默认连接替换为你的 github raw 连接,像这样 `https://raw.githubusercontent.com/你的用户名/r4s_build_script/refs/heads/master` ```diff # script url - if [ "$isCN" = "CN" ]; then -- export mirror=init.cooluc.com -+ export mirror=raw.githubusercontent.com/你的用户名/r4s_build_script/master - else -- export mirror=init2.cooluc.com -+ export mirror=raw.githubusercontent.com/你的用户名/r4s_build_script/master - fi +-export mirror=https://init.cooluc.com ++export mirror=https://raw.githubusercontent.com/你的用户名/r4s_build_script/refs/heads/master ``` ### 三、在本地 Linux 执行基于你自己仓库的构建脚本,即可编译所需固件 -#### nanopi-r4s openwrt-23.05 +#### nanopi-r4s openwrt-25.12 ```shell -# linux-6.6 -bash <(curl -sS https://raw.githubusercontent.com/你的用户名/r4s_build_script/master/openwrt/build.sh) rc2 nanopi-r4s +# linux-6.18 +bash <(curl -sS https://raw.githubusercontent.com/你的用户名/r4s_build_script/refs/heads/master/openwrt/build.sh) rc2 nanopi-r4s ``` -#### nanopi-r5s/r5c openwrt-23.05 +#### nanopi-r5s/r5c openwrt-25.12 ```shell -# linux-6.6 -bash <(curl -sS https://raw.githubusercontent.com/你的用户名/r4s_build_script/master/openwrt/build.sh) rc2 nanopi-r5s +# linux-6.18 +bash <(curl -sS https://raw.githubusercontent.com/你的用户名/r4s_build_script/refs/heads/master/openwrt/build.sh) rc2 nanopi-r5s ``` -#### x86_64 openwrt-23.05 +#### x86_64 openwrt-25.12 ```shell -# linux-6.6 -bash <(curl -sS https://raw.githubusercontent.com/你的用户名/r4s_build_script/master/openwrt/build.sh) rc2 x86_64 +# linux-6.18 +bash <(curl -sS https://raw.githubusercontent.com/你的用户名/r4s_build_script/refs/heads/master/openwrt/build.sh) rc2 x86_64 ``` ----------------- @@ -241,10 +276,11 @@ bash <(curl -sS https://raw.githubusercontent.com/你的用户名/r4s_build_scri ### 一、Fork 本仓库到自己 GitHub 存储库 ### 二、构建固件 -- 在存储库名称下,单击(Actions Actions)。 + +- 在存储库名称下,单击(Actions Actions)。 - 在左侧边栏中,单击要运行的工作流的名称:**Build releases**。 - 在工作流运行的列表上方,单击“**Run workflow**”按钮,选择要构建的设备固件并运行工作流。 - ![image](https://github.com/sbwml/r4s_build_script/assets/16485166/136abcd1-ecf3-4e6d-aa1a-5393a75a25cc) + ![image](https://github.com/user-attachments/assets/3eae2e9f-efe6-48ad-8e9d-39c176fcd71c) diff --git a/openwrt/23-config-musl-r8500-minimal b/openwrt/23-config-musl-r8500-minimal deleted file mode 100644 index 3b438ea2b..000000000 --- a/openwrt/23-config-musl-r8500-minimal +++ /dev/null @@ -1,150 +0,0 @@ -### Init -CONFIG_TARGET_bcm53xx=y -CONFIG_TARGET_bcm53xx_generic=y -CONFIG_TARGET_bcm53xx_generic_DEVICE_netgear_r8500=y - -### Basic -CONFIG_ALL_KMODS=y -CONFIG_ALL_NONSHARED=y -CONFIG_KERNEL_BUILD_DOMAIN="cooluc.com" -CONFIG_KERNEL_BUILD_USER="admin" -CONFIG_PACKAGE_autocore-arm=y -CONFIG_PACKAGE_bind-host=y -CONFIG_PACKAGE_block-mount=y -CONFIG_PACKAGE_default-settings=y -# CONFIG_KERNEL_KALLSYMS is not set - -### Curl -CONFIG_PACKAGE_curl=y -CONFIG_PACKAGE_libcurl=y -CONFIG_LIBCURL_NGHTTP3=y -CONFIG_LIBCURL_NGTCP2=y -CONFIG_LIBCURL_OPENSSL=y -# CONFIG_LIBCURL_GNUTLS is not set -# CONFIG_LIBCURL_MBEDTLS is not set -# CONFIG_LIBCURL_NOSSL is not set -# CONFIG_LIBCURL_WOLFSSL is not set - -### Firewall -CONFIG_PACKAGE_nat6=y -CONFIG_PACKAGE_ip6tables-nft=y -CONFIG_PACKAGE_iptables-mod-conntrack-extra=y -CONFIG_PACKAGE_iptables-mod-iprange=y -CONFIG_PACKAGE_iptables-mod-nat-extra=y -CONFIG_PACKAGE_iptables-mod-socket=y -CONFIG_PACKAGE_iptables-mod-tproxy=y -CONFIG_PACKAGE_iptables-nft=y -CONFIG_PACKAGE_xtables-nft=y -# CONFIG_PACKAGE_iptables-legacy is not set - -# SFE -CONFIG_PACKAGE_kmod-fast-classifier=y -CONFIG_PACKAGE_kmod-shortcut-fe-cm=y - -### Zram -CONFIG_PACKAGE_zram-swap=y -CONFIG_PACKAGE_kmod-lib-lz4=y -CONFIG_PACKAGE_kmod-lib-lzo=y -CONFIG_PACKAGE_kmod-lib-zstd=y - -### Busybox -CONFIG_BUSYBOX_CUSTOM=y -CONFIG_BUSYBOX_CONFIG_ASH_HELP=y -CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_HISTORY=1024 -CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_SAVEHISTORY=y -CONFIG_BUSYBOX_CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y -CONFIG_BUSYBOX_CONFIG_FEATURE_SH_HISTFILESIZE=y -CONFIG_BUSYBOX_CONFIG_FEATURE_SYSLOG_INFO=y - -### Dnsmasq -CONFIG_PACKAGE_dnsmasq-full=y -CONFIG_PACKAGE_dnsmasq_full_ipset=y -# CONFIG_PACKAGE_dnsmasq_full_broken_rtc is not set -# CONFIG_PACKAGE_dnsmasq is not set - -### Luci -CONFIG_PACKAGE_luci=y -CONFIG_PACKAGE_luci-lib-base=y -CONFIG_PACKAGE_luci-lib-ip=y -CONFIG_PACKAGE_luci-lib-ipkg=y -CONFIG_PACKAGE_luci-lib-jsonc=y -CONFIG_PACKAGE_luci-lib-nixio=y -CONFIG_PACKAGE_luci-nginx=y -CONFIG_PACKAGE_nginx-all-module=y -CONFIG_LUCI_LANG_zh_Hans=y - -### APPS -CONFIG_PACKAGE_luci-app-autoreboot=y -CONFIG_PACKAGE_luci-app-ddns=y -CONFIG_PACKAGE_luci-app-ramfree=y -CONFIG_PACKAGE_luci-app-ttyd=y -CONFIG_PACKAGE_luci-app-upnp=y - -### DDNS Scripts -CONFIG_PACKAGE_ddns-scripts=y -CONFIG_PACKAGE_ddns-scripts-aliyun=y -CONFIG_PACKAGE_ddns-scripts-dnspod=y - -### OpenSSL -CONFIG_OPENSSL_ENGINE=y -CONFIG_OPENSSL_OPTIMIZE_SPEED=y -CONFIG_OPENSSL_WITH_ASM=y -CONFIG_PACKAGE_libopenssl-afalg=y -CONFIG_PACKAGE_libopenssl-conf=y -CONFIG_PACKAGE_libopenssl-devcrypto=y -CONFIG_PACKAGE_libopenssl-legacy=y -CONFIG_PACKAGE_openssl-util=y -# CONFIG_OPENSSL_WITH_ERROR_MESSAGES is not set - -### Share Network -CONFIG_PACKAGE_usbmuxd=y -CONFIG_PACKAGE_kmod-usb-net-rndis=y -CONFIG_PACKAGE_kmod-usb-net-ipheth=y - -### Kernel Modules -CONFIG_PACKAGE_kmod-button-hotplug=y -CONFIG_PACKAGE_kmod-crypto-chacha20poly1305=y -CONFIG_PACKAGE_kmod-crypto-sha256=y -CONFIG_PACKAGE_kmod-fs-exfat=y -CONFIG_PACKAGE_kmod-fs-f2fs=y -CONFIG_PACKAGE_kmod-fs-ntfs3=y -CONFIG_PACKAGE_kmod-fs-vfat=y -CONFIG_PACKAGE_kmod-fs-xfs=y -CONFIG_PACKAGE_kmod-ikconfig=y -CONFIG_PACKAGE_kmod-inet-diag=y -CONFIG_PACKAGE_kmod-ipsec4=y -CONFIG_PACKAGE_kmod-ipsec6=y -CONFIG_PACKAGE_kmod-ipt-nat6=y -CONFIG_PACKAGE_kmod-ipt-tproxy=y -CONFIG_PACKAGE_kmod-iptunnel6=y -CONFIG_PACKAGE_kmod-nf-socket=y -CONFIG_PACKAGE_kmod-nft-fullcone=y -CONFIG_PACKAGE_kmod-nft-offload=y -CONFIG_PACKAGE_kmod-nft-socket=y -CONFIG_PACKAGE_kmod-nft-tproxy=y -CONFIG_PACKAGE_kmod-sched=y -CONFIG_PACKAGE_kmod-tcp-bbr=y -CONFIG_PACKAGE_kmod-tls=y -CONFIG_PACKAGE_kmod-tun=y -CONFIG_PACKAGE_kmod-usb-storage=y - -### Utilities -CONFIG_PACKAGE_bash=y -CONFIG_PACKAGE_dmesg=y -CONFIG_PACKAGE_ftp=y -CONFIG_PACKAGE_telnet-bsd=y -CONFIG_PACKAGE_wget-ssl=y -CONFIG_PACKAGE_wpad-openssl=y - -### GNU Core Utilities -CONFIG_PACKAGE_coreutils=y -CONFIG_PACKAGE_coreutils-dircolors=y -CONFIG_PACKAGE_coreutils-ls=y - -### Version -CONFIG_IMAGEOPT=y -CONFIG_VERSIONOPT=y -CONFIG_VERSION_FILENAMES=y - -### ZLIB -CONFIG_ZLIB_OPTIMIZE_SPEED=y diff --git a/openwrt/23-config-common b/openwrt/25-config-common similarity index 62% rename from openwrt/23-config-common rename to openwrt/25-config-common index 76fda3a5a..6b48104e2 100644 --- a/openwrt/23-config-common +++ b/openwrt/25-config-common @@ -1,3 +1,4 @@ + ### Curl CONFIG_PACKAGE_curl=y CONFIG_PACKAGE_libcurl=y @@ -11,25 +12,10 @@ CONFIG_LIBCURL_OPENSSL=y ### Firewall CONFIG_PACKAGE_nat6=y -CONFIG_PACKAGE_ip6tables-nft=y -CONFIG_PACKAGE_iptables-mod-conntrack-extra=y -CONFIG_PACKAGE_iptables-mod-iprange=y -CONFIG_PACKAGE_iptables-mod-nat-extra=y -CONFIG_PACKAGE_iptables-mod-socket=y -CONFIG_PACKAGE_iptables-mod-tproxy=y -CONFIG_PACKAGE_iptables-nft=y -CONFIG_PACKAGE_xtables-nft=y -# CONFIG_PACKAGE_iptables-legacy is not set - -# SFE -CONFIG_PACKAGE_kmod-fast-classifier=y -CONFIG_PACKAGE_kmod-shortcut-fe-cm=y ### Zram CONFIG_PACKAGE_zram-swap=y -CONFIG_PACKAGE_kmod-lib-lz4=y -CONFIG_PACKAGE_kmod-lib-lzo=y -CONFIG_PACKAGE_kmod-lib-zstd=y +CONFIG_ZRAM_DEF_COMP_LZ4=y ### Busybox CONFIG_BUSYBOX_CUSTOM=y @@ -42,8 +28,6 @@ CONFIG_BUSYBOX_CONFIG_FEATURE_SYSLOG_INFO=y ### Dnsmasq CONFIG_PACKAGE_dnsmasq-full=y -CONFIG_PACKAGE_dnsmasq_full_ipset=y -# CONFIG_PACKAGE_dnsmasq_full_broken_rtc is not set # CONFIG_PACKAGE_dnsmasq is not set ### Docker @@ -56,96 +40,72 @@ CONFIG_DOCKER_OPTIONAL_FEATURES=y CONFIG_DOCKER_STO_BTRFS=y CONFIG_DOCKER_STO_EXT4=y CONFIG_PACKAGE_luci-app-dockerman=y -CONFIG_PACKAGE_luci-lib-docker=y ### Luci CONFIG_PACKAGE_luci=y -CONFIG_PACKAGE_luci-lib-base=y -CONFIG_PACKAGE_luci-lib-ip=y -CONFIG_PACKAGE_luci-lib-ipkg=y -CONFIG_PACKAGE_luci-lib-jsonc=y -CONFIG_PACKAGE_luci-lib-nixio=y CONFIG_PACKAGE_luci-nginx=y CONFIG_PACKAGE_luci-proto-wireguard=y CONFIG_PACKAGE_luci-theme-argon=y -CONFIG_PACKAGE_luci-theme-material=y -CONFIG_PACKAGE_luci-theme-openwrt-2020=y -CONFIG_PACKAGE_nginx-all-module=y +CONFIG_PACKAGE_luci-theme-aurora=y CONFIG_LUCI_LANG_zh_Hans=y # CONFIG_LUCI_CSSTIDY is not set # CONFIG_LUCI_JSMIN is not set +### Nginx +CONFIG_PACKAGE_nginx-ssl=y +CONFIG_PACKAGE_nginx-mod-brotli=y +CONFIG_PACKAGE_nginx-mod-luci=y +CONFIG_PACKAGE_nginx-mod-rtmp=y +CONFIG_PACKAGE_nginx-mod-stream=y +CONFIG_PACKAGE_nginx-mod-ubus=y +CONFIG_PACKAGE_nginx-mod-zstd=y +CONFIG_PACKAGE_nginx-ssl-util=y +CONFIG_NGINX_DAV=y +CONFIG_NGINX_HTTP_AUTH_BASIC=y +CONFIG_NGINX_HTTP_QUIC=y +CONFIG_NGINX_HTTP_REAL_IP=y +CONFIG_NGINX_HTTP_SUB=y +CONFIG_NGINX_STREAM_REAL_IP=y + ### APPS -CONFIG_PACKAGE_luci-app-accesscontrol=y CONFIG_PACKAGE_luci-app-airconnect=y CONFIG_PACKAGE_luci-app-airplay2=y -CONFIG_PACKAGE_luci-app-alist=y CONFIG_PACKAGE_luci-app-argon-config=y -CONFIG_PACKAGE_luci-app-aria2=y +CONFIG_PACKAGE_luci-app-aurora-config=y CONFIG_PACKAGE_luci-app-autoreboot=y CONFIG_PACKAGE_luci-app-commands=y CONFIG_PACKAGE_luci-app-cpufreq=y -# CONFIG_PACKAGE_luci-app-daed is not set CONFIG_PACKAGE_luci-app-ddns=y CONFIG_PACKAGE_luci-app-diskman=y CONFIG_PACKAGE_luci-app-eqos=y -CONFIG_PACKAGE_luci-app-filebrowser=y CONFIG_PACKAGE_luci-app-frpc=y -CONFIG_PACKAGE_luci-app-gowebdav=y CONFIG_PACKAGE_luci-app-mentohust=y CONFIG_PACKAGE_luci-app-mosdns=y CONFIG_PACKAGE_luci-app-natmap=y CONFIG_PACKAGE_luci-app-netspeedtest=y CONFIG_PACKAGE_luci-app-nlbwmon=y CONFIG_PACKAGE_luci-app-oaf=y +CONFIG_PACKAGE_luci-app-openlist2=y CONFIG_PACKAGE_luci-app-qbittorrent=y +CONFIG_PACKAGE_luci-app-quickfile=y CONFIG_PACKAGE_luci-app-ramfree=y +CONFIG_PACKAGE_luci-app-rtp2httpd=y CONFIG_PACKAGE_luci-app-samba4=y CONFIG_PACKAGE_luci-app-socat=y CONFIG_PACKAGE_luci-app-sqm=y CONFIG_PACKAGE_luci-app-ttyd=y # CONFIG_PACKAGE_luci-app-unblockneteasemusic is not set CONFIG_PACKAGE_luci-app-upnp=y -CONFIG_PACKAGE_luci-app-usb-printer=y CONFIG_PACKAGE_luci-app-vlmcsd=y CONFIG_PACKAGE_luci-app-watchcat=y -CONFIG_PACKAGE_luci-app-wireguard=y -CONFIG_PACKAGE_luci-app-wolplus=y +CONFIG_PACKAGE_luci-app-webdav=y +CONFIG_PACKAGE_luci-app-wol=y CONFIG_PACKAGE_luci-app-zerotier=y -CONFIG_PACKAGE_ariang-nginx=y -### ImmortalWrt Proxy - nft +### Proxy CONFIG_PACKAGE_luci-app-homeproxy=y - -### Passwall -CONFIG_PACKAGE_luci-app-passwall=y -CONFIG_PACKAGE_luci-app-passwall_INCLUDE_NaiveProxy=y -CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Client=y -CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Client=y -CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Server=y -CONFIG_PACKAGE_luci-app-passwall_INCLUDE_ShadowsocksR_Libev_Client=y -CONFIG_PACKAGE_luci-app-passwall_INCLUDE_SingBox=y -CONFIG_PACKAGE_luci-app-passwall_INCLUDE_V2ray_Geodata=y -CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Xray_Plugin=y -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Brook is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Hysteria is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Server is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_tuic_client is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Trojan_GO is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Trojan_Plus is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_V2ray_Plugin is not set - -### SSR Plus -# CONFIG_PACKAGE_luci-app-ssr-plus is not set -# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_IPT2Socks=y -# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Kcptun=y -# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Redsocks2=y -# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Simple_Obfs=y -# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Xray=y -# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Xray_Plugin=y -# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_ShadowsocksR_Libev_Client=y -# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Hysteria is not set -# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Trojan is not set +CONFIG_PACKAGE_luci-app-nikki=y +CONFIG_PACKAGE_mihomo-meta=y ### DDNS Scripts CONFIG_PACKAGE_ddns-scripts=y @@ -180,9 +140,11 @@ CONFIG_PACKAGE_kmod-usb-net-rndis=y CONFIG_PACKAGE_kmod-usb-net-ipheth=y ### Kernel Modules -CONFIG_PACKAGE_kmod-button-hotplug=y +CONFIG_PACKAGE_kmod-bonding=y +CONFIG_PACKAGE_kmod-br-netfilter=y CONFIG_PACKAGE_kmod-crypto-chacha20poly1305=y CONFIG_PACKAGE_kmod-crypto-sha256=y +CONFIG_PACKAGE_kmod-tun=y CONFIG_PACKAGE_kmod-fs-exfat=y CONFIG_PACKAGE_kmod-fs-f2fs=y CONFIG_PACKAGE_kmod-fs-ntfs3=y @@ -191,11 +153,6 @@ CONFIG_PACKAGE_kmod-fs-xfs=y CONFIG_PACKAGE_kmod-hwmon-pwmfan=y CONFIG_PACKAGE_kmod-ikconfig=y CONFIG_PACKAGE_kmod-inet-diag=y -CONFIG_PACKAGE_kmod-ipsec4=y -CONFIG_PACKAGE_kmod-ipsec6=y -CONFIG_PACKAGE_kmod-ipt-nat6=y -CONFIG_PACKAGE_kmod-ipt-tproxy=y -CONFIG_PACKAGE_kmod-iptunnel6=y CONFIG_PACKAGE_kmod-mac80211=y CONFIG_PACKAGE_kmod-nf-socket=y CONFIG_PACKAGE_kmod-nft-fullcone=y @@ -204,6 +161,9 @@ CONFIG_PACKAGE_kmod-nft-socket=y CONFIG_PACKAGE_kmod-nft-tproxy=y CONFIG_PACKAGE_kmod-nls-cp936=y CONFIG_PACKAGE_kmod-nls-cp950=y +CONFIG_PACKAGE_kmod-sched-bpf=y +CONFIG_PACKAGE_kmod-sched-cake=y +CONFIG_PACKAGE_kmod-sched-core=y CONFIG_PACKAGE_kmod-sched=y CONFIG_PACKAGE_kmod-tcp-bbr3=y CONFIG_PACKAGE_kmod-tcp-brutal=y @@ -215,6 +175,7 @@ CONFIG_PACKAGE_kmod-usb-storage-uas=y CONFIG_PACKAGE_kmod-usb2-pci=y CONFIG_PACKAGE_kmod-usb2=y CONFIG_PACKAGE_kmod-usb3=y +CONFIG_PACKAGE_kmod-veth=y ### Kernel Modules - out-of-tree driver CONFIG_PACKAGE_kmod-usb-net-rtl8152-vendor=y @@ -224,6 +185,7 @@ CONFIG_PACKAGE_kmod-mt7921u=y ### Utilities CONFIG_PACKAGE_bash=y +CONFIG_PACKAGE_bash-completion=y CONFIG_PACKAGE_dmesg=y CONFIG_PACKAGE_dosfstools=y CONFIG_PACKAGE_exfat-fsck=y @@ -236,13 +198,13 @@ CONFIG_PACKAGE_ftp=y CONFIG_PACKAGE_gdisk=y CONFIG_PACKAGE_htop=y CONFIG_PACKAGE_iperf3=y +CONFIG_PACKAGE_ip-full=y CONFIG_PACKAGE_iputils-ping=y -CONFIG_PACKAGE_less=y CONFIG_PACKAGE_lrzsz=y CONFIG_PACKAGE_lsblk=y CONFIG_PACKAGE_lscpu=y CONFIG_PACKAGE_lsof=y -CONFIG_PACKAGE_nethogs=y +# CONFIG_PACKAGE_nethogs is not set CONFIG_PACKAGE_openssh-sftp-server=y CONFIG_PACKAGE_pciutils=y CONFIG_PACKAGE_qrencode=y @@ -252,7 +214,6 @@ CONFIG_PACKAGE_rsync=y CONFIG_PACKAGE_screen=y CONFIG_PACKAGE_sed=y CONFIG_PACKAGE_sshpass=y -CONFIG_PACKAGE_sudo=y CONFIG_PACKAGE_tar=y CONFIG_PACKAGE_taskset=y CONFIG_PACKAGE_telnet-bsd=y @@ -271,24 +232,6 @@ CONFIG_PACKAGE_xz=y CONFIG_PACKAGE_zip=y CONFIG_PACKAGE_zoneinfo-asia=y -### Shadow Utilities -CONFIG_PACKAGE_shadow-chgpasswd=y -CONFIG_PACKAGE_shadow-chpasswd=y -CONFIG_PACKAGE_shadow-gpasswd=y -CONFIG_PACKAGE_shadow-groupadd=y -CONFIG_PACKAGE_shadow-groupdel=y -CONFIG_PACKAGE_shadow-groupmod=y -CONFIG_PACKAGE_shadow-groups=y -CONFIG_PACKAGE_shadow-login=y -CONFIG_PACKAGE_shadow-nologin=y -CONFIG_PACKAGE_shadow-passwd=y -CONFIG_PACKAGE_shadow-su=y -CONFIG_PACKAGE_shadow-useradd=y -CONFIG_PACKAGE_shadow-userdel=y -CONFIG_PACKAGE_shadow-usermod=y -CONFIG_PACKAGE_shadow-utils=y -# CONFIG_shadow-all is not set - ### GNU Core Utilities CONFIG_PACKAGE_coreutils=y CONFIG_PACKAGE_coreutils-cat=y @@ -304,8 +247,6 @@ CONFIG_PACKAGE_coreutils-mkdir=y CONFIG_PACKAGE_coreutils-mv=y CONFIG_PACKAGE_coreutils-nproc=y CONFIG_PACKAGE_coreutils-rm=y -CONFIG_PACKAGE_coreutils-sha1sum=y -CONFIG_PACKAGE_coreutils-sha512sum=y CONFIG_PACKAGE_coreutils-sleep=y CONFIG_PACKAGE_coreutils-timeout=y CONFIG_PACKAGE_coreutils-truncate=y diff --git a/openwrt/23-config-minimal-common b/openwrt/25-config-minimal-common similarity index 69% rename from openwrt/23-config-minimal-common rename to openwrt/25-config-minimal-common index 1141a46e1..1f50dc619 100644 --- a/openwrt/23-config-minimal-common +++ b/openwrt/25-config-minimal-common @@ -12,25 +12,10 @@ CONFIG_LIBCURL_OPENSSL=y ### Firewall CONFIG_PACKAGE_nat6=y -CONFIG_PACKAGE_ip6tables-nft=y -CONFIG_PACKAGE_iptables-mod-conntrack-extra=y -CONFIG_PACKAGE_iptables-mod-iprange=y -CONFIG_PACKAGE_iptables-mod-nat-extra=y -CONFIG_PACKAGE_iptables-mod-socket=y -CONFIG_PACKAGE_iptables-mod-tproxy=y -CONFIG_PACKAGE_iptables-nft=y -CONFIG_PACKAGE_xtables-nft=y -# CONFIG_PACKAGE_iptables-legacy is not set - -# SFE -CONFIG_PACKAGE_kmod-fast-classifier=y -CONFIG_PACKAGE_kmod-shortcut-fe-cm=y ### Zram CONFIG_PACKAGE_zram-swap=y -CONFIG_PACKAGE_kmod-lib-lz4=y -CONFIG_PACKAGE_kmod-lib-lzo=y -CONFIG_PACKAGE_kmod-lib-zstd=y +CONFIG_ZRAM_DEF_COMP_LZ4=y ### Busybox CONFIG_BUSYBOX_CUSTOM=y @@ -43,38 +28,40 @@ CONFIG_BUSYBOX_CONFIG_FEATURE_SYSLOG_INFO=y ### Dnsmasq CONFIG_PACKAGE_dnsmasq-full=y -CONFIG_PACKAGE_dnsmasq_full_ipset=y -# CONFIG_PACKAGE_dnsmasq_full_broken_rtc is not set # CONFIG_PACKAGE_dnsmasq is not set ### Luci CONFIG_PACKAGE_luci=y -CONFIG_PACKAGE_luci-lib-base=y -CONFIG_PACKAGE_luci-lib-ip=y -CONFIG_PACKAGE_luci-lib-ipkg=y -CONFIG_PACKAGE_luci-lib-jsonc=y -CONFIG_PACKAGE_luci-lib-nixio=y CONFIG_PACKAGE_luci-nginx=y -CONFIG_PACKAGE_nginx-all-module=y CONFIG_LUCI_LANG_zh_Hans=y # CONFIG_LUCI_CSSTIDY is not set # CONFIG_LUCI_JSMIN is not set +### Nginx +CONFIG_PACKAGE_nginx-ssl=y +CONFIG_PACKAGE_nginx-mod-brotli=y +CONFIG_PACKAGE_nginx-mod-luci=y +CONFIG_PACKAGE_nginx-mod-rtmp=y +CONFIG_PACKAGE_nginx-mod-stream=y +CONFIG_PACKAGE_nginx-mod-ubus=y +CONFIG_PACKAGE_nginx-mod-zstd=y +CONFIG_PACKAGE_nginx-ssl-util=y +CONFIG_NGINX_DAV=y +CONFIG_NGINX_HTTP_AUTH_BASIC=y +CONFIG_NGINX_HTTP_QUIC=y +CONFIG_NGINX_HTTP_REAL_IP=y +CONFIG_NGINX_HTTP_SUB=y +CONFIG_NGINX_STREAM_REAL_IP=y + ### APPS CONFIG_PACKAGE_luci-app-autoreboot=y CONFIG_PACKAGE_luci-app-cpufreq=y -CONFIG_PACKAGE_luci-app-ddns=y CONFIG_PACKAGE_luci-app-diskman=y -CONFIG_PACKAGE_luci-app-oaf=y +CONFIG_PACKAGE_luci-app-filemanager=y CONFIG_PACKAGE_luci-app-ramfree=y CONFIG_PACKAGE_luci-app-ttyd=y CONFIG_PACKAGE_luci-app-upnp=y -### DDNS Scripts -CONFIG_PACKAGE_ddns-scripts=y -CONFIG_PACKAGE_ddns-scripts-aliyun=y -CONFIG_PACKAGE_ddns-scripts-dnspod=y - ### OpenSSL CONFIG_OPENSSL_ENGINE=y CONFIG_OPENSSL_OPTIMIZE_SPEED=y @@ -93,7 +80,8 @@ CONFIG_PACKAGE_kmod-usb-net-rndis=y CONFIG_PACKAGE_kmod-usb-net-ipheth=y ### Kernel Modules -CONFIG_PACKAGE_kmod-button-hotplug=y +CONFIG_PACKAGE_kmod-bonding=y +CONFIG_PACKAGE_kmod-br-netfilter=y CONFIG_PACKAGE_kmod-crypto-chacha20poly1305=y CONFIG_PACKAGE_kmod-crypto-sha256=y CONFIG_PACKAGE_kmod-fs-exfat=y @@ -104,31 +92,26 @@ CONFIG_PACKAGE_kmod-fs-xfs=y CONFIG_PACKAGE_kmod-hwmon-pwmfan=y CONFIG_PACKAGE_kmod-ikconfig=y CONFIG_PACKAGE_kmod-inet-diag=y -CONFIG_PACKAGE_kmod-ipsec4=y -CONFIG_PACKAGE_kmod-ipsec6=y -CONFIG_PACKAGE_kmod-ipt-nat6=y -CONFIG_PACKAGE_kmod-ipt-tproxy=y -CONFIG_PACKAGE_kmod-iptunnel6=y CONFIG_PACKAGE_kmod-mac80211=y CONFIG_PACKAGE_kmod-nf-socket=y CONFIG_PACKAGE_kmod-nft-fullcone=y CONFIG_PACKAGE_kmod-nft-offload=y CONFIG_PACKAGE_kmod-nft-socket=y CONFIG_PACKAGE_kmod-nft-tproxy=y +CONFIG_PACKAGE_kmod-sched-bpf=y +CONFIG_PACKAGE_kmod-sched-cake=y +CONFIG_PACKAGE_kmod-sched-core=y CONFIG_PACKAGE_kmod-sched=y CONFIG_PACKAGE_kmod-tcp-bbr3=y CONFIG_PACKAGE_kmod-tcp-brutal=y CONFIG_PACKAGE_kmod-tls=y CONFIG_PACKAGE_kmod-tun=y -CONFIG_PACKAGE_kmod-usb-audio=y CONFIG_PACKAGE_kmod-usb-hid=y CONFIG_PACKAGE_kmod-usb-storage-uas=y CONFIG_PACKAGE_kmod-usb2-pci=y CONFIG_PACKAGE_kmod-usb2=y CONFIG_PACKAGE_kmod-usb3=y - -### Kernel Modules - out-of-tree driver -CONFIG_PACKAGE_kmod-usb-net-rtl8152-vendor=y +CONFIG_PACKAGE_kmod-veth=y ### Kernel Modules - USB WiFi Adapter CONFIG_PACKAGE_kmod-mt7921u=y @@ -136,6 +119,7 @@ CONFIG_PACKAGE_kmod-mt7921u=y ### Utilities CONFIG_PACKAGE_bash=y CONFIG_PACKAGE_dmesg=y +CONFIG_PACKAGE_openssh-sftp-server=y CONFIG_PACKAGE_taskset=y CONFIG_PACKAGE_wget-ssl=y CONFIG_PACKAGE_wpad-openssl=y diff --git a/openwrt/23-config-musl-armsr-armv8 b/openwrt/25-config-musl-armsr-armv8 similarity index 63% rename from openwrt/23-config-musl-armsr-armv8 rename to openwrt/25-config-musl-armsr-armv8 index 663c30b53..c4da496ef 100644 --- a/openwrt/23-config-musl-armsr-armv8 +++ b/openwrt/25-config-musl-armsr-armv8 @@ -8,6 +8,10 @@ CONFIG_ALL_KMODS=y CONFIG_ALL_NONSHARED=y CONFIG_KERNEL_BUILD_DOMAIN="cooluc.com" CONFIG_KERNEL_BUILD_USER="admin" +CONFIG_KERNEL_MEMCG_V1=y +CONFIG_KERNEL_MPTCP=y +CONFIG_KERNEL_MPTCP_IPV6=y +# CONFIG_KERNEL_PREEMPT_RT is not set CONFIG_PACKAGE_autocore-arm=y CONFIG_PACKAGE_bind-host=y CONFIG_PACKAGE_block-mount=y @@ -17,14 +21,3 @@ CONFIG_TARGET_KERNEL_PARTSIZE=64 CONFIG_TARGET_ROOTFS_PARTSIZE=944 CONFIG_COREMARK_NUMBER_OF_THREADS=16 # CONFIG_KERNEL_KALLSYMS is not set - -### Utilities -CONFIG_PACKAGE_qemu-ga=y - -### RTL8723D / RTL8821C / RTW89 firmware -CONFIG_PACKAGE_rtl8723de-firmware=m -CONFIG_PACKAGE_rtl8821ce-firmware=m -CONFIG_PACKAGE_rtl8851be-firmware=m -CONFIG_PACKAGE_rtl8852ae-firmware=m -CONFIG_PACKAGE_rtl8852be-firmware=m -CONFIG_PACKAGE_rtl8852ce-firmware=m diff --git a/openwrt/23-config-musl-r4s b/openwrt/25-config-musl-r4s similarity index 69% rename from openwrt/23-config-musl-r4s rename to openwrt/25-config-musl-r4s index 42da9b4ef..51d6d95cd 100644 --- a/openwrt/23-config-musl-r4s +++ b/openwrt/25-config-musl-r4s @@ -8,12 +8,18 @@ CONFIG_ALL_KMODS=y CONFIG_ALL_NONSHARED=y CONFIG_KERNEL_BUILD_DOMAIN="cooluc.com" CONFIG_KERNEL_BUILD_USER="admin" +CONFIG_KERNEL_CFLAGS="-march=armv8-a+crypto+crc -mcpu=cortex-a72+crypto+crc -mtune=cortex-a72" +CONFIG_KERNEL_MEMCG_V1=y +CONFIG_KERNEL_MPTCP=y +CONFIG_KERNEL_MPTCP_IPV6=y +# CONFIG_KERNEL_PREEMPT_RT is not set +CONFIG_KERNEL_PSI=y CONFIG_PACKAGE_autocore-arm=y CONFIG_PACKAGE_bind-host=y CONFIG_PACKAGE_block-mount=y CONFIG_PACKAGE_coremark=y CONFIG_PACKAGE_default-settings=y -CONFIG_TARGET_KERNEL_PARTSIZE=16 +CONFIG_TARGET_KERNEL_PARTSIZE=32 CONFIG_TARGET_ROOTFS_PARTSIZE=944 CONFIG_COREMARK_NUMBER_OF_THREADS=8 # CONFIG_KERNEL_KALLSYMS is not set diff --git a/openwrt/23-config-musl-r5s b/openwrt/25-config-musl-r5s similarity index 69% rename from openwrt/23-config-musl-r5s rename to openwrt/25-config-musl-r5s index ca5e9b674..59bf69938 100644 --- a/openwrt/23-config-musl-r5s +++ b/openwrt/25-config-musl-r5s @@ -11,12 +11,17 @@ CONFIG_ALL_NONSHARED=y CONFIG_KERNEL_BUILD_DOMAIN="cooluc.com" CONFIG_KERNEL_BUILD_USER="admin" CONFIG_KERNEL_CFLAGS="-march=armv8.2-a+crypto+crc -mcpu=cortex-a55+crypto+crc -mtune=cortex-a55" +CONFIG_KERNEL_MEMCG_V1=y +CONFIG_KERNEL_MPTCP=y +CONFIG_KERNEL_MPTCP_IPV6=y +# CONFIG_KERNEL_PREEMPT_RT is not set +CONFIG_KERNEL_PSI=y CONFIG_PACKAGE_autocore-arm=y CONFIG_PACKAGE_bind-host=y CONFIG_PACKAGE_block-mount=y CONFIG_PACKAGE_coremark=y CONFIG_PACKAGE_default-settings=y -CONFIG_TARGET_KERNEL_PARTSIZE=16 +CONFIG_TARGET_KERNEL_PARTSIZE=32 CONFIG_TARGET_ROOTFS_PARTSIZE=944 CONFIG_COREMARK_NUMBER_OF_THREADS=6 # CONFIG_KERNEL_KALLSYMS is not set @@ -24,14 +29,3 @@ CONFIG_COREMARK_NUMBER_OF_THREADS=6 ### Video Support CONFIG_PACKAGE_kmod-drm-rockchip=y CONFIG_PACKAGE_kmod-drm-panfrost=y - -### RTL8723D / RTL8821C / RTW89 firmware -CONFIG_PACKAGE_rtl8723de-firmware=m -CONFIG_PACKAGE_rtl8821ce-firmware=m -CONFIG_PACKAGE_rtl8851be-firmware=m -CONFIG_PACKAGE_rtl8852ae-firmware=m -CONFIG_PACKAGE_rtl8852be-firmware=m -CONFIG_PACKAGE_rtl8852ce-firmware=m - -### MT76 firmware -CONFIG_PACKAGE_mt7925-firmware=m diff --git a/openwrt/25-config-musl-r76s b/openwrt/25-config-musl-r76s new file mode 100644 index 000000000..bdb09f2b7 --- /dev/null +++ b/openwrt/25-config-musl-r76s @@ -0,0 +1,43 @@ +### Init +CONFIG_TARGET_rockchip=y +CONFIG_TARGET_rockchip_armv8=y +CONFIG_TARGET_rockchip_armv8_DEVICE_friendlyarm_nanopi-r76s=y + +### Basic +CONFIG_ALL_KMODS=y +CONFIG_ALL_NONSHARED=y +CONFIG_KERNEL_BUILD_DOMAIN="cooluc.com" +CONFIG_KERNEL_BUILD_USER="admin" +CONFIG_KERNEL_CFLAGS="-march=armv8-a+crypto+crc -mcpu=cortex-a72+crypto+crc -mtune=cortex-a72" +CONFIG_KERNEL_MEMCG_V1=y +CONFIG_KERNEL_MPTCP=y +CONFIG_KERNEL_MPTCP_IPV6=y +# CONFIG_KERNEL_PREEMPT_RT is not set +CONFIG_KERNEL_PSI=y +CONFIG_PACKAGE_autocore-arm=y +CONFIG_PACKAGE_bind-host=y +CONFIG_PACKAGE_block-mount=y +CONFIG_PACKAGE_coremark=y +CONFIG_PACKAGE_default-settings=y +CONFIG_TARGET_KERNEL_PARTSIZE=64 +CONFIG_TARGET_ROOTFS_PARTSIZE=944 +CONFIG_COREMARK_NUMBER_OF_THREADS=8 +# CONFIG_KERNEL_KALLSYMS is not set + +### SDIO Wireles +CONFIG_PACKAGE_kmod-rtl8822cs=y + +### UART Bluetooth +CONFIG_PACKAGE_kmod-hci-uart=y +CONFIG_PACKAGE_rtl8822cs-firmware=y +CONFIG_PACKAGE_luci-app-bluetooth=y + +### HDMI +CONFIG_PACKAGE_kmod-drm-rockchip=y +CONFIG_PACKAGE_kmod-drm-panfrost=y + +### Video Decoder +CONFIG_PACKAGE_kmod-rkvdec=y + +### Rocket NPU +CONFIG_PACKAGE_kmod-rocket-rockchip=y diff --git a/openwrt/23-config-musl-x86 b/openwrt/25-config-musl-x86 similarity index 52% rename from openwrt/23-config-musl-x86 rename to openwrt/25-config-musl-x86 index 7d55f8367..387e8c6f5 100644 --- a/openwrt/23-config-musl-x86 +++ b/openwrt/25-config-musl-x86 @@ -2,14 +2,17 @@ CONFIG_TARGET_x86=y CONFIG_TARGET_x86_64=y CONFIG_TARGET_x86_64_DEVICE_generic=y -CONFIG_GRUB_TIMEOUT="1" -CONFIG_TESTING_KERNEL=y +CONFIG_GRUB_TIMEOUT="3" ### Basic CONFIG_ALL_KMODS=y CONFIG_ALL_NONSHARED=y CONFIG_KERNEL_BUILD_DOMAIN="cooluc.com" CONFIG_KERNEL_BUILD_USER="admin" +CONFIG_KERNEL_MEMCG_V1=y +CONFIG_KERNEL_MPTCP=y +CONFIG_KERNEL_MPTCP_IPV6=y +# CONFIG_KERNEL_PREEMPT_RT is not set CONFIG_PACKAGE_autocore-x86=y CONFIG_PACKAGE_bind-host=y CONFIG_PACKAGE_block-mount=y @@ -20,58 +23,30 @@ CONFIG_TARGET_ROOTFS_PARTSIZE=944 # CONFIG_KERNEL_KALLSYMS is not set ### Kernel driver +CONFIG_PACKAGE_kmod-i40e=y CONFIG_PACKAGE_kmod-igb=y CONFIG_PACKAGE_kmod-igc=y +CONFIG_PACKAGE_kmod-ixgbe=y CONFIG_PACKAGE_kmod-mlx4-core=y CONFIG_PACKAGE_kmod-mlx5-core=y CONFIG_PACKAGE_kmod-mt76x2=y CONFIG_PACKAGE_kmod-mt7921e=y CONFIG_PACKAGE_kmod-mt7921u=y CONFIG_PACKAGE_kmod-mt7922-firmware=y +CONFIG_PACKAGE_kmod-mt7925-firmware=y +CONFIG_PACKAGE_kmod-mt7927-firmware=y CONFIG_PACKAGE_kmod-ngbe=y +CONFIG_PACKAGE_kmod-nvme=y CONFIG_PACKAGE_kmod-r8101=y CONFIG_PACKAGE_kmod-r8125=y CONFIG_PACKAGE_kmod-r8126=y +CONFIG_PACKAGE_kmod-r8127=y CONFIG_PACKAGE_kmod-r8168=y -CONFIG_PACKAGE_kmod-txgbe=y # CONFIG_PACKAGE_kmod-r8169 is not set -CONFIG_PACKAGE_kmod-nvme=y +CONFIG_PACKAGE_kmod-txgbe=y ### Display & Extra Drivers -CONFIG_PACKAGE_kmod-backlight-pwm=y -CONFIG_PACKAGE_kmod-backlight=y -CONFIG_PACKAGE_kmod-drm-amdgpu=y +CONFIG_PACKAGE_i915-firmware-huc=y CONFIG_PACKAGE_kmod-drm-i915=y -CONFIG_PACKAGE_kmod-drm-kms-helper=y -CONFIG_PACKAGE_kmod-drm-radeon=y -CONFIG_PACKAGE_kmod-drm-ttm=y -CONFIG_PACKAGE_kmod-drm=y -CONFIG_PACKAGE_kmod-fb-cfb-copyarea=y -CONFIG_PACKAGE_kmod-fb-cfb-fillrect=y -CONFIG_PACKAGE_kmod-fb-cfb-imgblt=y -CONFIG_PACKAGE_kmod-fb-sys-fops=y -CONFIG_PACKAGE_kmod-fb-sys-ram=y -CONFIG_PACKAGE_kmod-fb=y CONFIG_PACKAGE_kmod-sound-hda-codec-realtek=y CONFIG_PACKAGE_kmod-sound-hda-intel=y -CONFIG_PACKAGE_kmod-video-pwc=y -CONFIG_PACKAGE_kmod-video-uvc=y -CONFIG_PACKAGE_kmod-video-videobuf2=y - -### Utilities -CONFIG_PACKAGE_qemu-ga=y - -### Virtualization -CONFIG_PACKAGE_kmod-kvm-intel=y -CONFIG_PACKAGE_kmod-kvm-x86=y - -### RTL8723D / RTL8821C / RTW89 firmware -CONFIG_PACKAGE_rtl8723de-firmware=m -CONFIG_PACKAGE_rtl8821ce-firmware=m -CONFIG_PACKAGE_rtl8851be-firmware=m -CONFIG_PACKAGE_rtl8852ae-firmware=m -CONFIG_PACKAGE_rtl8852be-firmware=m -CONFIG_PACKAGE_rtl8852ce-firmware=m - -### MT76 firmware -CONFIG_PACKAGE_mt7925-firmware=m diff --git a/openwrt/23-config-musl-r8500 b/openwrt/25-config-std-common similarity index 57% rename from openwrt/23-config-musl-r8500 rename to openwrt/25-config-std-common index e36ad1fd9..92fab0ac7 100644 --- a/openwrt/23-config-musl-r8500 +++ b/openwrt/25-config-std-common @@ -1,18 +1,3 @@ -### Init -CONFIG_TARGET_bcm53xx=y -CONFIG_TARGET_bcm53xx_generic=y -CONFIG_TARGET_bcm53xx_generic_DEVICE_netgear_r8500=y - -### Basic -CONFIG_ALL_KMODS=y -CONFIG_ALL_NONSHARED=y -CONFIG_KERNEL_BUILD_DOMAIN="cooluc.com" -CONFIG_KERNEL_BUILD_USER="admin" -CONFIG_PACKAGE_autocore-arm=y -CONFIG_PACKAGE_bind-host=y -CONFIG_PACKAGE_block-mount=y -CONFIG_PACKAGE_default-settings=y -# CONFIG_KERNEL_KALLSYMS is not set ### Curl CONFIG_PACKAGE_curl=y @@ -27,25 +12,10 @@ CONFIG_LIBCURL_OPENSSL=y ### Firewall CONFIG_PACKAGE_nat6=y -CONFIG_PACKAGE_ip6tables-nft=y -CONFIG_PACKAGE_iptables-mod-conntrack-extra=y -CONFIG_PACKAGE_iptables-mod-iprange=y -CONFIG_PACKAGE_iptables-mod-nat-extra=y -CONFIG_PACKAGE_iptables-mod-socket=y -CONFIG_PACKAGE_iptables-mod-tproxy=y -CONFIG_PACKAGE_iptables-nft=y -CONFIG_PACKAGE_xtables-nft=y -# CONFIG_PACKAGE_iptables-legacy is not set - -# SFE -CONFIG_PACKAGE_kmod-fast-classifier=y -CONFIG_PACKAGE_kmod-shortcut-fe-cm=y ### Zram CONFIG_PACKAGE_zram-swap=y -CONFIG_PACKAGE_kmod-lib-lz4=y -CONFIG_PACKAGE_kmod-lib-lzo=y -CONFIG_PACKAGE_kmod-lib-zstd=y +CONFIG_ZRAM_DEF_COMP_LZ4=y ### Busybox CONFIG_BUSYBOX_CUSTOM=y @@ -58,74 +28,76 @@ CONFIG_BUSYBOX_CONFIG_FEATURE_SYSLOG_INFO=y ### Dnsmasq CONFIG_PACKAGE_dnsmasq-full=y -CONFIG_PACKAGE_dnsmasq_full_ipset=y -# CONFIG_PACKAGE_dnsmasq_full_broken_rtc is not set # CONFIG_PACKAGE_dnsmasq is not set ### Luci CONFIG_PACKAGE_luci=y -CONFIG_PACKAGE_luci-lib-base=y -CONFIG_PACKAGE_luci-lib-ip=y -CONFIG_PACKAGE_luci-lib-ipkg=y -CONFIG_PACKAGE_luci-lib-jsonc=y -CONFIG_PACKAGE_luci-lib-nixio=y CONFIG_PACKAGE_luci-nginx=y +CONFIG_PACKAGE_luci-proto-wireguard=y CONFIG_PACKAGE_luci-theme-argon=y -CONFIG_PACKAGE_nginx-all-module=y CONFIG_LUCI_LANG_zh_Hans=y # CONFIG_LUCI_CSSTIDY is not set # CONFIG_LUCI_JSMIN is not set +### Nginx +CONFIG_PACKAGE_nginx-ssl=y +CONFIG_PACKAGE_nginx-mod-brotli=y +CONFIG_PACKAGE_nginx-mod-luci=y +CONFIG_PACKAGE_nginx-mod-rtmp=y +CONFIG_PACKAGE_nginx-mod-stream=y +CONFIG_PACKAGE_nginx-mod-ubus=y +CONFIG_PACKAGE_nginx-mod-zstd=y +CONFIG_PACKAGE_nginx-ssl-util=y +CONFIG_NGINX_DAV=y +CONFIG_NGINX_HTTP_AUTH_BASIC=y +CONFIG_NGINX_HTTP_QUIC=y +CONFIG_NGINX_HTTP_REAL_IP=y +CONFIG_NGINX_HTTP_SUB=y +CONFIG_NGINX_STREAM_REAL_IP=y + ### APPS -CONFIG_PACKAGE_luci-app-accesscontrol=y CONFIG_PACKAGE_luci-app-airconnect=y CONFIG_PACKAGE_luci-app-airplay2=y CONFIG_PACKAGE_luci-app-argon-config=y CONFIG_PACKAGE_luci-app-autoreboot=y CONFIG_PACKAGE_luci-app-commands=y +CONFIG_PACKAGE_luci-app-cpufreq=y CONFIG_PACKAGE_luci-app-ddns=y CONFIG_PACKAGE_luci-app-diskman=y -CONFIG_PACKAGE_luci-app-eqos=y CONFIG_PACKAGE_luci-app-frpc=y -CONFIG_PACKAGE_luci-app-mentohust=y CONFIG_PACKAGE_luci-app-mosdns=y +CONFIG_PACKAGE_luci-app-natmap=y CONFIG_PACKAGE_luci-app-netspeedtest=y CONFIG_PACKAGE_luci-app-nlbwmon=y CONFIG_PACKAGE_luci-app-oaf=y +CONFIG_PACKAGE_luci-app-quickfile=y CONFIG_PACKAGE_luci-app-ramfree=y -CONFIG_PACKAGE_luci-app-samba4=y CONFIG_PACKAGE_luci-app-socat=y +CONFIG_PACKAGE_luci-app-sqm=y CONFIG_PACKAGE_luci-app-ttyd=y CONFIG_PACKAGE_luci-app-upnp=y -CONFIG_PACKAGE_luci-app-usb-printer=y CONFIG_PACKAGE_luci-app-vlmcsd=y -CONFIG_PACKAGE_luci-app-watchcat=y -CONFIG_PACKAGE_luci-app-wireguard=y -CONFIG_PACKAGE_luci-app-wolplus=y +CONFIG_PACKAGE_luci-app-webdav=y +CONFIG_PACKAGE_luci-app-wol=y CONFIG_PACKAGE_luci-app-zerotier=y -### Passwall -CONFIG_PACKAGE_luci-app-passwall=y -CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Client=y -CONFIG_PACKAGE_luci-app-passwall_INCLUDE_V2ray_Geodata=y -CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Xray_Plugin=y -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Brook is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Hysteria is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_NaiveProxy is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Server is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Client is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Server is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_ShadowsocksR_Libev_Client is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_SingBox is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Trojan_GO is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Trojan_Plus is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_tuic_client is not set -# CONFIG_PACKAGE_luci-app-passwall_INCLUDE_V2ray_Plugin is not set +### ImmortalWrt Proxy - nft +CONFIG_PACKAGE_luci-app-homeproxy=y ### DDNS Scripts CONFIG_PACKAGE_ddns-scripts=y CONFIG_PACKAGE_ddns-scripts-aliyun=y +CONFIG_PACKAGE_ddns-scripts-cloudflare=y CONFIG_PACKAGE_ddns-scripts-dnspod=y +CONFIG_PACKAGE_ddns-scripts-freedns=y +CONFIG_PACKAGE_ddns-scripts-godaddy=y +CONFIG_PACKAGE_ddns-scripts-services=y + +### L2TP +CONFIG_PACKAGE_kmod-l2tp=y +CONFIG_PACKAGE_kmod-pppol2tp=y +CONFIG_PACKAGE_ppp-mod-pppol2tp=y +CONFIG_PACKAGE_xl2tpd=y ### OpenSSL CONFIG_OPENSSL_ENGINE=y @@ -136,21 +108,17 @@ CONFIG_PACKAGE_libopenssl-conf=y CONFIG_PACKAGE_libopenssl-devcrypto=y CONFIG_PACKAGE_libopenssl-legacy=y CONFIG_PACKAGE_openssl-util=y +# CONFIG_PACKAGE_libopenssl-padlock is not set # CONFIG_OPENSSL_WITH_ERROR_MESSAGES is not set -### L2TP -CONFIG_PACKAGE_kmod-l2tp=y -CONFIG_PACKAGE_kmod-pppol2tp=y -CONFIG_PACKAGE_ppp-mod-pppol2tp=y -CONFIG_PACKAGE_xl2tpd=y - ### Share Network CONFIG_PACKAGE_usbmuxd=y CONFIG_PACKAGE_kmod-usb-net-rndis=y CONFIG_PACKAGE_kmod-usb-net-ipheth=y ### Kernel Modules -CONFIG_PACKAGE_kmod-button-hotplug=y +CONFIG_PACKAGE_kmod-bonding=y +CONFIG_PACKAGE_kmod-br-netfilter=y CONFIG_PACKAGE_kmod-crypto-chacha20poly1305=y CONFIG_PACKAGE_kmod-crypto-sha256=y CONFIG_PACKAGE_kmod-fs-exfat=y @@ -158,27 +126,42 @@ CONFIG_PACKAGE_kmod-fs-f2fs=y CONFIG_PACKAGE_kmod-fs-ntfs3=y CONFIG_PACKAGE_kmod-fs-vfat=y CONFIG_PACKAGE_kmod-fs-xfs=y +CONFIG_PACKAGE_kmod-hwmon-pwmfan=y CONFIG_PACKAGE_kmod-ikconfig=y CONFIG_PACKAGE_kmod-inet-diag=y -CONFIG_PACKAGE_kmod-ipsec4=y -CONFIG_PACKAGE_kmod-ipsec6=y -CONFIG_PACKAGE_kmod-ipt-nat6=y -CONFIG_PACKAGE_kmod-ipt-tproxy=y -CONFIG_PACKAGE_kmod-iptunnel6=y +CONFIG_PACKAGE_kmod-mac80211=y CONFIG_PACKAGE_kmod-nf-socket=y CONFIG_PACKAGE_kmod-nft-fullcone=y CONFIG_PACKAGE_kmod-nft-offload=y CONFIG_PACKAGE_kmod-nft-socket=y CONFIG_PACKAGE_kmod-nft-tproxy=y +CONFIG_PACKAGE_kmod-nls-cp936=y +CONFIG_PACKAGE_kmod-nls-cp950=y +CONFIG_PACKAGE_kmod-sched-bpf=y +CONFIG_PACKAGE_kmod-sched-cake=y +CONFIG_PACKAGE_kmod-sched-core=y CONFIG_PACKAGE_kmod-sched=y -CONFIG_PACKAGE_kmod-tcp-bbr=y +CONFIG_PACKAGE_kmod-tcp-bbr3=y +CONFIG_PACKAGE_kmod-tcp-brutal=y CONFIG_PACKAGE_kmod-tls=y CONFIG_PACKAGE_kmod-tun=y CONFIG_PACKAGE_kmod-usb-audio=y -CONFIG_PACKAGE_kmod-usb-storage=y +CONFIG_PACKAGE_kmod-usb-hid=y +CONFIG_PACKAGE_kmod-usb-storage-uas=y +CONFIG_PACKAGE_kmod-usb2-pci=y +CONFIG_PACKAGE_kmod-usb2=y +CONFIG_PACKAGE_kmod-usb3=y +CONFIG_PACKAGE_kmod-veth=y + +### Kernel Modules - out-of-tree driver +CONFIG_PACKAGE_kmod-usb-net-rtl8152-vendor=y + +### Kernel Modules - USB WiFi Adapter +CONFIG_PACKAGE_kmod-mt7921u=y ### Utilities CONFIG_PACKAGE_bash=y +CONFIG_PACKAGE_bash-completion=y CONFIG_PACKAGE_dmesg=y CONFIG_PACKAGE_dosfstools=y CONFIG_PACKAGE_exfat-fsck=y @@ -186,18 +169,31 @@ CONFIG_PACKAGE_exfat-mkfs=y CONFIG_PACKAGE_f2fs-tools=y CONFIG_PACKAGE_fdisk=y CONFIG_PACKAGE_file=y +CONFIG_PACKAGE_fstrim=y CONFIG_PACKAGE_ftp=y -CONFIG_PACKAGE_less=y +CONFIG_PACKAGE_gdisk=y +CONFIG_PACKAGE_htop=y +CONFIG_PACKAGE_iperf3=y +CONFIG_PACKAGE_ip-full=y +CONFIG_PACKAGE_iputils-ping=y CONFIG_PACKAGE_lrzsz=y CONFIG_PACKAGE_lsblk=y CONFIG_PACKAGE_lscpu=y CONFIG_PACKAGE_lsof=y -CONFIG_PACKAGE_nethogs=y +# CONFIG_PACKAGE_nethogs is not set CONFIG_PACKAGE_openssh-sftp-server=y CONFIG_PACKAGE_pciutils=y CONFIG_PACKAGE_qrencode=y +CONFIG_PACKAGE_rename=y +CONFIG_PACKAGE_resize2fs=y +CONFIG_PACKAGE_rsync=y CONFIG_PACKAGE_screen=y +CONFIG_PACKAGE_sshpass=y +CONFIG_PACKAGE_tar=y +CONFIG_PACKAGE_taskset=y CONFIG_PACKAGE_telnet-bsd=y +CONFIG_PACKAGE_tree=y +CONFIG_PACKAGE_unzip=y CONFIG_PACKAGE_usbutils=y CONFIG_PACKAGE_wget-ssl=y CONFIG_PACKAGE_wpad-openssl=y @@ -205,12 +201,29 @@ CONFIG_PACKAGE_xfs-admin=y CONFIG_PACKAGE_xfs-fsck=y CONFIG_PACKAGE_xfs-growfs=y CONFIG_PACKAGE_xfs-mkfs=y +CONFIG_PACKAGE_xz-utils=y +CONFIG_PACKAGE_xz=y +CONFIG_PACKAGE_zip=y CONFIG_PACKAGE_zoneinfo-asia=y ### GNU Core Utilities CONFIG_PACKAGE_coreutils=y +CONFIG_PACKAGE_coreutils-cat=y +CONFIG_PACKAGE_coreutils-chmod=y +CONFIG_PACKAGE_coreutils-chown=y +CONFIG_PACKAGE_coreutils-chroot=y +CONFIG_PACKAGE_coreutils-cp=y +CONFIG_PACKAGE_coreutils-date=y +CONFIG_PACKAGE_coreutils-dd=y CONFIG_PACKAGE_coreutils-dircolors=y CONFIG_PACKAGE_coreutils-ls=y +CONFIG_PACKAGE_coreutils-mkdir=y +CONFIG_PACKAGE_coreutils-mv=y +CONFIG_PACKAGE_coreutils-nproc=y +CONFIG_PACKAGE_coreutils-rm=y +CONFIG_PACKAGE_coreutils-sleep=y +CONFIG_PACKAGE_coreutils-timeout=y +CONFIG_PACKAGE_coreutils-truncate=y ### procps-ng Utilities CONFIG_PACKAGE_procps-ng=y diff --git a/openwrt/build.sh b/openwrt/build.sh index 31054a08f..dcd655531 100644 --- a/openwrt/build.sh +++ b/openwrt/build.sh @@ -20,40 +20,45 @@ endgroup() { GROUP= } +# check +if [ "$(whoami)" != "sbwml" ] && [ -z "$git_name" ] && [ -z "$git_password" ]; then + echo -e "\n${RED_COLOR} Not authorized. Execute the following command to provide authorization information:${RES}\n" + echo -e "${BLUE_COLOR} export git_name=your_username git_password=your_password${RES}\n" + exit 1 +fi + ##################################### # NanoPi R4S OpenWrt Build Script # ##################################### # IP Location -ip_info=`curl -s https://ip.cooluc.com`; -export isCN=`echo $ip_info | grep -Po 'country_code\":"\K[^"]+'`; +ip_info=`curl -sk https://ip.cooluc.com`; +[ -n "$ip_info" ] && export isCN=`echo $ip_info | grep -Po 'country_code\":"\K[^"]+'` || export isCN=US # script url -if [ "$isCN" = "CN" ]; then - export mirror=init.cooluc.com -else - export mirror=init2.cooluc.com -fi +export mirror=https://init.cooluc.com -# github actions - automatically retrieve `github raw` links -if [ "$(whoami)" = "runner" ] && [ -n "$GITHUB_REPO" ]; then - export mirror=raw.githubusercontent.com/$GITHUB_REPO/master +# github actions - caddy server +if [ "$(whoami)" = "runner" ] && [ "$git_name" != "private" ]; then + export mirror=http://127.0.0.1:8080 fi # private gitea -export gitea=git.cooluc.com +export gitea="git.cooluc.com" # github mirror if [ "$isCN" = "CN" ]; then + # There is currently no stable gh proxy export github="github.com" + code_mirror="git.cooluc.com" else export github="github.com" + code_mirror="github.com" fi # Check root if [ "$(id -u)" = "0" ]; then - echo -e "${RED_COLOR}Building with root user is not supported.${RES}" - exit 1 + export FORCE_UNSAFE_CONFIGURE=1 FORCE=1 fi # Start time @@ -61,65 +66,77 @@ starttime=`date +'%Y-%m-%d %H:%M:%S'` CURRENT_DATE=$(date +%s) # Cpus -cores=`expr $(nproc --all) + 1` +cores=`expr $(nproc) + 1` # $CURL_BAR if curl --help | grep progress-bar >/dev/null 2>&1; then CURL_BAR="--progress-bar"; fi -if [ -z "$1" ] || [ "$2" != "nanopi-r4s" -a "$2" != "nanopi-r5s" -a "$2" != "x86_64" -a "$2" != "netgear_r8500" -a "$2" != "armv8" ]; then - echo -e "\n${RED_COLOR}Building type not specified.${RES}\n" +SUPPORTED_BOARDS="nanopi-r4s nanopi-r5s nanopi-r76s x86_64 armv8" +if [ -z "$1" ] || ! echo "$SUPPORTED_BOARDS" | grep -qw "$2"; then + echo -e "\n${RED_COLOR}Building type not specified or unsupported board: '$2'.${RES}\n" echo -e "Usage:\n" - echo -e "nanopi-r4s releases: ${GREEN_COLOR}bash build.sh rc2 nanopi-r4s${RES}" - echo -e "nanopi-r4s snapshots: ${GREEN_COLOR}bash build.sh dev nanopi-r4s${RES}" - echo -e "nanopi-r5s releases: ${GREEN_COLOR}bash build.sh rc2 nanopi-r5s${RES}" - echo -e "nanopi-r5s snapshots: ${GREEN_COLOR}bash build.sh dev nanopi-r5s${RES}" - echo -e "x86_64 releases: ${GREEN_COLOR}bash build.sh rc2 x86_64${RES}" - echo -e "x86_64 snapshots: ${GREEN_COLOR}bash build.sh dev x86_64${RES}" - echo -e "netgear-r8500 releases: ${GREEN_COLOR}bash build.sh rc2 netgear_r8500${RES}" - echo -e "netgear-r8500 snapshots: ${GREEN_COLOR}bash build.sh dev netgear_r8500${RES}" - echo -e "armsr-armv8 releases: ${GREEN_COLOR}bash build.sh rc2 armv8${RES}" - echo -e "armsr-armv8 snapshots: ${GREEN_COLOR}bash build.sh dev armv8${RES}\n" + + for board in $SUPPORTED_BOARDS; do + echo -e "$board releases: ${GREEN_COLOR}bash build.sh rc2 $board${RES}" + echo -e "$board snapshots: ${GREEN_COLOR}bash build.sh dev $board${RES}" + done + echo exit 1 fi # Source branch if [ "$1" = "dev" ]; then - export branch=openwrt-23.05 - export version=snapshots-23.05 - export toolchain_version=openwrt-23.05 + export branch=openwrt-25.12 + export version=dev elif [ "$1" = "rc2" ]; then - latest_release="v$(curl -s https://$mirror/tags/v23)" + latest_release="v$(curl -s $mirror/tags/v25)" export branch=$latest_release export version=rc2 - export toolchain_version=openwrt-23.05 fi # lan [ -n "$LAN" ] && export LAN=$LAN || export LAN=10.0.0.1 # platform -[ "$2" = "nanopi-r4s" ] && export platform="rk3399" toolchain_arch="nanopi-r4s" -[ "$2" = "nanopi-r5s" ] && export platform="rk3568" toolchain_arch="nanopi-r5s" -[ "$2" = "x86_64" ] && export platform="x86_64" toolchain_arch="x86_64" -[ "$2" = "netgear_r8500" ] && export platform="bcm53xx" toolchain_arch="bcm53xx" -[ "$2" = "armv8" ] && export platform="armv8" toolchain_arch="armsr-armv8" - -# gcc13 & 14 & 15 +case "$2" in + armv8) + platform="armv8" + toolchain_arch="aarch64_generic" + ;; + nanopi-r4s) + platform="rk3399" + toolchain_arch="aarch64_generic" + ;; + nanopi-r5s) + platform="rk3568" + toolchain_arch="aarch64_generic" + ;; + nanopi-r76s) + platform="rk3576" + toolchain_arch="aarch64_generic" + ;; + x86_64) + platform="x86_64" + toolchain_arch="x86_64" + ;; +esac +export platform toolchain_arch + +# gcc14 & 15 if [ "$USE_GCC13" = y ]; then - export USE_GCC13=y - # use mold - [ "$ENABLE_MOLD" = y ] && export ENABLE_MOLD=y + export USE_GCC13=y gcc_version=13 elif [ "$USE_GCC14" = y ]; then - export USE_GCC14=y - # use mold - [ "$ENABLE_MOLD" = y ] && export ENABLE_MOLD=y + export USE_GCC14=y gcc_version=14 elif [ "$USE_GCC15" = y ]; then - export USE_GCC15=y - # use mold - [ "$ENABLE_MOLD" = y ] && export ENABLE_MOLD=y + export USE_GCC15=y gcc_version=15 +elif [ "$USE_GCC16" = y ]; then + export USE_GCC16=y gcc_version=16 +else + export USE_GCC15=y gcc_version=15 fi +[ "$ENABLE_MOLD" = y ] && export ENABLE_MOLD=y # build.sh flags export \ @@ -128,78 +145,82 @@ export \ ENABLE_GLIBC=$ENABLE_GLIBC \ ENABLE_LRNG=$ENABLE_LRNG \ KERNEL_CLANG_LTO=$KERNEL_CLANG_LTO \ + ROOT_PASSWORD=$ROOT_PASSWORD # print version echo -e "\r\n${GREEN_COLOR}Building $branch${RES}\r\n" -if [ "$platform" = "x86_64" ]; then - echo -e "${GREEN_COLOR}Model: x86_64${RES}" -elif [ "$platform" = "armv8" ]; then - echo -e "${GREEN_COLOR}Model: armsr/armv8${RES}" - [ "$1" = "rc2" ] && model="armv8" -elif [ "$platform" = "bcm53xx" ]; then - echo -e "${GREEN_COLOR}Model: netgear_r8500${RES}" - [ "$LAN" = "10.0.0.1" ] && export LAN="192.168.1.1" -elif [ "$platform" = "rk3568" ]; then - echo -e "${GREEN_COLOR}Model: nanopi-r5s/r5c${RES}" - [ "$1" = "rc2" ] && model="nanopi-r5s" -else - echo -e "${GREEN_COLOR}Model: nanopi-r4s${RES}" - [ "$1" = "rc2" ] && model="nanopi-r4s" -fi -curl -s https://$mirror/tags/kernel-6.6 > kernel.txt -kmod_hash=$(grep HASH kernel.txt | awk -F'HASH-' '{print $2}' | awk '{print $1}' | md5sum | awk '{print $1}') -kmodpkg_name=$(echo $(grep HASH kernel.txt | awk -F'HASH-' '{print $2}' | awk '{print $1}')-1-$(echo $kmod_hash)) +case "$platform" in + x86_64) + echo -e "${GREEN_COLOR}Model: x86_64${RES}" + ;; + armv8) + echo -e "${GREEN_COLOR}Model: armsr/armv8${RES}" + [ "$1" = "rc2" ] && model="armv8" + ;; + rk3568) + echo -e "${GREEN_COLOR}Model: nanopi-r5s/r5c${RES}" + [ "$1" = "rc2" ] && model="nanopi-r5s" + ;; + rk3576) + echo -e "${GREEN_COLOR}Model: nanopi-r76s${RES}" + [ "$1" = "rc2" ] && model="nanopi-r76s" + ;; + rk3399|*) + echo -e "${GREEN_COLOR}Model: nanopi-r4s${RES}" + [ "$1" = "rc2" ] && model="nanopi-r4s" + ;; +esac + +# print build opt +get_kernel_version=$(curl -s $mirror/tags/kernel-6.18) +kmod_hash=$(echo -e "$get_kernel_version" | awk -F'HASH-' '{print $2}' | awk '{print $1}' | tail -1 | md5sum | awk '{print $1}') +kmodpkg_name=$(echo $(echo -e "$get_kernel_version" | awk -F'HASH-' '{print $2}' | awk '{print $1}')~$(echo $kmod_hash)-r1) echo -e "${GREEN_COLOR}Kernel: $kmodpkg_name ${RES}" -rm -f kernel.txt - echo -e "${GREEN_COLOR}Date: $CURRENT_DATE${RES}\r\n" - -if [ "$USE_GCC13" = "y" ]; then - echo -e "${GREEN_COLOR}GCC VERSION: 13${RES}" -elif [ "$USE_GCC14" = "y" ]; then - echo -e "${GREEN_COLOR}GCC VERSION: 14${RES}" -elif [ "$USE_GCC15" = "y" ]; then - echo -e "${GREEN_COLOR}GCC VERSION: 15${RES}" -else - echo -e "${GREEN_COLOR}GCC VERSION: 11${RES}" -fi -[ -n "$LAN" ] && echo -e "${GREEN_COLOR}LAN: $LAN${RES}" || echo -e "${GREEN_COLOR}LAN: 10.0.0.1${RES}" +echo -e "${GREEN_COLOR}SCRIPT_URL:${RES} ${BLUE_COLOR}$mirror${RES}\r\n" +echo -e "${GREEN_COLOR}GCC VERSION: $gcc_version${RES}" +print_status() { + local name="$1" + local value="$2" + local true_color="${3:-$GREEN_COLOR}" + local false_color="${4:-$YELLOW_COLOR}" + local newline="${5:-}" + if [ "$value" = "y" ]; then + echo -e "${GREEN_COLOR}${name}:${RES} ${true_color}true${RES}${newline}" + else + echo -e "${GREEN_COLOR}${name}:${RES} ${false_color}false${RES}${newline}" + fi +} +[ -n "$LAN" ] && echo -e "${GREEN_COLOR}LAN:${RES} $LAN" || echo -e "${GREEN_COLOR}LAN:${RES} 10.0.0.1" +[ -n "$ROOT_PASSWORD" ] \ + && echo -e "${GREEN_COLOR}Default Password:${RES} ${BLUE_COLOR}$ROOT_PASSWORD${RES}" \ + || echo -e "${GREEN_COLOR}Default Password:${RES} (${YELLOW_COLOR}No password${RES})" [ "$ENABLE_GLIBC" = "y" ] && echo -e "${GREEN_COLOR}Standard C Library:${RES} ${BLUE_COLOR}glibc${RES}" || echo -e "${GREEN_COLOR}Standard C Library:${RES} ${BLUE_COLOR}musl${RES}" -[ "$ENABLE_OTA" = "y" ] && echo -e "${GREEN_COLOR}ENABLE_OTA: true${RES}" || echo -e "${GREEN_COLOR}ENABLE_OTA:${RES} ${YELLOW_COLOR}false${RES}" -[ "$ENABLE_DPDK" = "y" ] && echo -e "${GREEN_COLOR}ENABLE_DPDK: true${RES}" || echo -e "${GREEN_COLOR}ENABLE_DPDK:${RES} ${YELLOW_COLOR}false${RES}" -[ "$ENABLE_MOLD" = "y" ] && echo -e "${GREEN_COLOR}ENABLE_MOLD: true${RES}" || echo -e "${GREEN_COLOR}ENABLE_MOLD:${RES} ${YELLOW_COLOR}false${RES}" -[ "$ENABLE_BPF" = "y" ] && echo -e "${GREEN_COLOR}ENABLE_BPF: true${RES}" || echo -e "${GREEN_COLOR}ENABLE_BPF:${RES} ${RED_COLOR}false${RES}" -[ "$ENABLE_LTO" = "y" ] && echo -e "${GREEN_COLOR}ENABLE_LTO: true${RES}" || echo -e "${GREEN_COLOR}ENABLE_LTO:${RES} ${RED_COLOR}false${RES}" -[ "$ENABLE_LRNG" = "y" ] && echo -e "${GREEN_COLOR}ENABLE_LRNG: true${RES}" || echo -e "${GREEN_COLOR}ENABLE_LRNG:${RES} ${RED_COLOR}false${RES}" -[ "$ENABLE_LOCAL_KMOD" = "y" ] && echo -e "${GREEN_COLOR}ENABLE_LOCAL_KMOD: true${RES}" || echo -e "${GREEN_COLOR}ENABLE_LOCAL_KMOD: false${RES}" -[ "$BUILD_FAST" = "y" ] && echo -e "${GREEN_COLOR}BUILD_FAST: true${RES}" || echo -e "${GREEN_COLOR}BUILD_FAST:${RES} ${YELLOW_COLOR}false${RES}" -[ "$MINIMAL_BUILD" = "y" ] && echo -e "${GREEN_COLOR}MINIMAL_BUILD: true${RES}" || echo -e "${GREEN_COLOR}MINIMAL_BUILD: false${RES}" -[ "$KERNEL_CLANG_LTO" = "y" ] && echo -e "${GREEN_COLOR}KERNEL_CLANG_LTO: true${RES}\r\n" || echo -e "${GREEN_COLOR}KERNEL_CLANG_LTO:${RES} ${YELLOW_COLOR}false${RES}\r\n" +print_status "ENABLE_OTA" "$ENABLE_OTA" +print_status "ENABLE_DPDK" "$ENABLE_DPDK" +print_status "ENABLE_MOLD" "$ENABLE_MOLD" +print_status "ENABLE_BPF" "$ENABLE_BPF" "$GREEN_COLOR" "$RED_COLOR" +print_status "ENABLE_LTO" "$ENABLE_LTO" "$GREEN_COLOR" "$RED_COLOR" +print_status "ENABLE_LRNG" "$ENABLE_LRNG" "$GREEN_COLOR" "$RED_COLOR" +print_status "ENABLE_LOCAL_KMOD" "$ENABLE_LOCAL_KMOD" +print_status "BUILD_FAST" "$BUILD_FAST" +print_status "ENABLE_CCACHE" "$ENABLE_CCACHE" +print_status "MINIMAL_BUILD" "$MINIMAL_BUILD" +print_status "STD_BUILD" "$STD_BUILD" +print_status "ENABLE_ISTORE" "$ENABLE_ISTORE" +print_status "KERNEL_CLANG_LTO" "$KERNEL_CLANG_LTO" "$GREEN_COLOR" "$YELLOW_COLOR" "\n" # clean old files -rm -rf openwrt master && mkdir master +rm -rf openwrt # openwrt - releases [ "$(whoami)" = "runner" ] && group "source code" -git clone --depth=1 https://$github/openwrt/openwrt -b $branch - -# openwrt master -git clone https://$github/openwrt/openwrt master/openwrt --depth=1 -git clone https://$github/openwrt/packages master/packages --depth=1 -git clone https://$github/openwrt/luci master/luci --depth=1 -git clone https://$github/openwrt/routing master/routing --depth=1 - -# openwrt-23.05 -[ "$1" = "rc2" ] && git clone https://$github/openwrt/openwrt -b openwrt-23.05 master/openwrt-23.05 --depth=1 - -# immortalwrt master -git clone https://$github/immortalwrt/packages master/immortalwrt_packages --depth=1 +git clone --depth=1 https://$code_mirror/openwrt/openwrt -b $branch [ "$(whoami)" = "runner" ] && endgroup if [ -d openwrt ]; then cd openwrt - [ "$1" = "rc2" ] && echo "$CURRENT_DATE" > version.date - curl -Os https://$mirror/openwrt/patch/key.tar.gz && tar zxf key.tar.gz && rm -f key.tar.gz + curl -Os $mirror/openwrt/patch/key2.tar.gz && tar zxf key2.tar.gz && rm -f key2.tar.gz else echo -e "${RED_COLOR}Failed to download source code${RES}" exit 1 @@ -225,10 +246,10 @@ else telephony=";$branch" fi cat > feeds.conf < .config - ALL_KMODS=y -elif [ "$platform" = "bcm53xx" ]; then - if [ "$MINIMAL_BUILD" = "y" ]; then - curl -s https://$mirror/openwrt/23-config-musl-r8500-minimal > .config - else - curl -s https://$mirror/openwrt/23-config-musl-r8500 > .config - fi - ALL_KMODS=y + curl -s $mirror/openwrt/25-config-musl-x86 > .config elif [ "$platform" = "rk3568" ]; then - curl -s https://$mirror/openwrt/23-config-musl-r5s > .config - ALL_KMODS=y + curl -s $mirror/openwrt/25-config-musl-r5s > .config +elif [ "$platform" = "rk3576" ]; then + curl -s $mirror/openwrt/25-config-musl-r76s > .config elif [ "$platform" = "armv8" ]; then - curl -s https://$mirror/openwrt/23-config-musl-armsr-armv8 > .config - ALL_KMODS=y + curl -s $mirror/openwrt/25-config-musl-armsr-armv8 > .config else - curl -s https://$mirror/openwrt/23-config-musl-r4s > .config + curl -s $mirror/openwrt/25-config-musl-r4s > .config fi # config-common if [ "$MINIMAL_BUILD" = "y" ]; then - [ "$platform" != "bcm53xx" ] && curl -s https://$mirror/openwrt/23-config-minimal-common >> .config + curl -s $mirror/openwrt/25-config-minimal-common >> .config echo 'VERSION_TYPE="minimal"' >> package/base-files/files/usr/lib/os-release +elif [ "$STD_BUILD" = "y" ]; then + curl -s $mirror/openwrt/25-config-std-common >> .config + echo 'VERSION_TYPE="standard"' >> package/base-files/files/usr/lib/os-release else - [ "$platform" != "bcm53xx" ] && curl -s https://$mirror/openwrt/23-config-common >> .config + curl -s $mirror/openwrt/25-config-common >> .config [ "$platform" = "armv8" ] && sed -i '/DOCKER/Id' .config fi @@ -308,15 +329,16 @@ fi [ "$ENABLE_OTA" = "y" ] && [ "$version" = "rc2" ] && echo 'CONFIG_PACKAGE_luci-app-ota=y' >> .config # bpf -[ "$ENABLE_BPF" = "y" ] && curl -s https://$mirror/openwrt/generic/config-bpf >> .config +curl -s $mirror/openwrt/generic/config-bpf >> .config +[ "$ENABLE_BPF" != "y" ] && sed -i '/KERNEL_DEBUG_INFO\|KERNEL_MODULE_ALLOW_BTF/d' .config # LTO export ENABLE_LTO=$ENABLE_LTO -[ "$ENABLE_LTO" = "y" ] && curl -s https://$mirror/openwrt/generic/config-lto >> .config +[ "$ENABLE_LTO" = "y" ] && curl -s $mirror/openwrt/generic/config-lto >> .config # glibc [ "$ENABLE_GLIBC" = "y" ] && { - curl -s https://$mirror/openwrt/generic/config-glibc >> .config + curl -s $mirror/openwrt/generic/config-glibc >> .config sed -i '/NaiveProxy/d' .config } @@ -326,13 +348,23 @@ export ENABLE_LTO=$ENABLE_LTO echo 'CONFIG_PACKAGE_numactl=y' >> .config } +# istore +[ "$ENABLE_ISTORE" = "y" ] && { + echo 'CONFIG_PACKAGE_luci-app-store=y' >> .config + echo 'CONFIG_PACKAGE_luci-app-quickstart=y' >> .config +} + # mold [ "$ENABLE_MOLD" = "y" ] && echo 'CONFIG_USE_MOLD=y' >> .config # kernel - CLANG + LTO; Allow CONFIG_KERNEL_CC=clang / clang-18 / clang-xx if [ "$KERNEL_CLANG_LTO" = "y" ]; then echo '# Kernel - CLANG LTO' >> .config - echo 'CONFIG_KERNEL_CC="clang"' >> .config + if [ "$USE_GCC15" = "y" ] || [ "$USE_GCC16" = "y" ] && [ "$ENABLE_CCACHE" = "y" ]; then + echo 'CONFIG_KERNEL_CC="ccache clang"' >> .config + else + echo 'CONFIG_KERNEL_CC="clang"' >> .config + fi echo 'CONFIG_EXTRA_OPTIMIZATION=""' >> .config echo '# CONFIG_PACKAGE_kselftests-bpf is not set' >> .config fi @@ -341,6 +373,8 @@ fi if [ "$ENABLE_LRNG" = "y" ]; then echo -e "\n# Kernel - LRNG" >> .config echo "CONFIG_KERNEL_LRNG=y" >> .config + echo "# CONFIG_PACKAGE_urandom-seed is not set" >> .config + echo "# CONFIG_PACKAGE_urngd is not set" >> .config fi # local kmod @@ -349,57 +383,56 @@ if [ "$ENABLE_LOCAL_KMOD" = "y" ]; then echo "CONFIG_TARGET_ROOTFS_LOCAL_PACKAGES=y" >> .config fi -# openwrt-23.05 gcc11/13/14/15 -[ "$(whoami)" = "runner" ] && group "patching toolchain" -if [ "$USE_GCC13" = "y" ] || [ "$USE_GCC14" = "y" ] || [ "$USE_GCC15" = "y" ]; then - [ "$USE_GCC13" = "y" ] && curl -s https://$mirror/openwrt/generic/config-gcc13 >> .config - [ "$USE_GCC14" = "y" ] && curl -s https://$mirror/openwrt/generic/config-gcc14 >> .config - [ "$USE_GCC15" = "y" ] && curl -s https://$mirror/openwrt/generic/config-gcc15 >> .config - curl -s https://$mirror/openwrt/patch/generic/200-toolchain-gcc-update-to-13.2.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/generic/201-toolchain-gcc-add-support-for-GCC-14.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/generic/202-toolchain-gcc-add-support-for-GCC-15.patch | patch -p1 - # gcc14/15 init - cp -a toolchain/gcc/patches-13.x toolchain/gcc/patches-14.x - curl -s https://$mirror/openwrt/patch/generic/gcc-14/910-mbsd_multi.patch > toolchain/gcc/patches-14.x/910-mbsd_multi.patch - cp -a toolchain/gcc/patches-14.x toolchain/gcc/patches-15.x - curl -s https://$mirror/openwrt/patch/generic/gcc-15/970-macos_arm64-building-fix.patch > toolchain/gcc/patches-15.x/970-macos_arm64-building-fix.patch -elif [ ! "$ENABLE_GLIBC" = "y" ]; then - curl -s https://$mirror/openwrt/generic/config-gcc11 >> .config -fi -[ "$(whoami)" = "runner" ] && endgroup - -# clean directory - github actions -[ "$(whoami)" = "runner" ] && echo 'CONFIG_AUTOREMOVE=y' >> .config +# gcc config +echo -e "\n# gcc ${gcc_version}" >> .config +echo -e "CONFIG_DEVEL=y" >> .config +echo -e "CONFIG_TOOLCHAINOPTS=y" >> .config +echo -e "CONFIG_GCC_USE_VERSION_${gcc_version}=y\n" >> .config # uhttpd [ "$ENABLE_UHTTPD" = "y" ] && sed -i '/nginx/d' .config && echo 'CONFIG_PACKAGE_ariang=y' >> .config -# bcm53xx: upx_list.txt -# [ "$platform" = "bcm53xx" ] && curl -s https://$mirror/openwrt/generic/upx_list.txt > upx_list.txt +# not all kmod +[ "$NO_KMOD" = "y" ] && sed -i '/CONFIG_ALL_KMODS=y/d; /CONFIG_ALL_NONSHARED=y/d' .config + +# build wwan pkgs for openwrt_core +[ "$OPENWRT_CORE" = "y" ] && curl -s $mirror/openwrt/generic/config-wwan >> .config + +# build mt7927-firmware pkgs for openwrt_core +[ "$OPENWRT_CORE" = "y" ] && echo 'CONFIG_PACKAGE_kmod-mt7927-firmware=m' >> .config + +# ccache +if [ "$ENABLE_CCACHE" = "y" ]; then + echo "CONFIG_CCACHE=y" >> .config + [ "$(whoami)" = "runner" ] && echo "CONFIG_CCACHE_DIR=\"/builder/.ccache\"" >> .config + [ "$(whoami)" = "sbwml" ] && echo "CONFIG_CCACHE_DIR=\"/home/sbwml/.ccache\"" >> .config + tools_suffix="_ccache" +fi + +# nanopi-r76s +[ "$platform" = "rk3576" ] && { + sed -i '/samba4/d' .config + sed -i '/qbittorrent/d' .config +} + +# add to core +[ "$OPENWRT_CORE" = "y" ] && curl -s $mirror/openwrt/generic/config-build-only >> .config # Toolchain Cache if [ "$BUILD_FAST" = "y" ]; then [ "$ENABLE_GLIBC" = "y" ] && LIBC=glibc || LIBC=musl - [ "$isCN" = "CN" ] && github_proxy="http://gh.cooluc.com/" || github_proxy="" echo -e "\n${GREEN_COLOR}Download Toolchain ...${RES}" PLATFORM_ID="" [ -f /etc/os-release ] && source /etc/os-release - if [ "$PLATFORM_ID" = "platform:el9" ]; then + if [ "$PLATFORM_ID" = "platform:el10" ]; then TOOLCHAIN_URL="http://127.0.0.1:8080" else - TOOLCHAIN_URL="$github_proxy"https://github.com/sbwml/toolchain-cache/releases/latest/download - fi - if [ "$USE_GCC13" = "y" ]; then - curl -L "$TOOLCHAIN_URL"/toolchain_"$LIBC"_"$toolchain_arch"_13.tar.gz -o toolchain.tar.gz $CURL_BAR - elif [ "$USE_GCC14" = "y" ]; then - curl -L "$TOOLCHAIN_URL"/toolchain_"$LIBC"_"$toolchain_arch"_14.tar.gz -o toolchain.tar.gz $CURL_BAR - elif [ "$USE_GCC15" = "y" ]; then - curl -L "$TOOLCHAIN_URL"/toolchain_"$LIBC"_"$toolchain_arch"_15.tar.gz -o toolchain.tar.gz $CURL_BAR - else - curl -L "$TOOLCHAIN_URL"/toolchain_"$LIBC"_"$toolchain_arch"_11.tar.gz -o toolchain.tar.gz $CURL_BAR + TOOLCHAIN_URL=https://"$github_proxy"github.com/sbwml/openwrt_caches/releases/download/openwrt-25.12 fi + curl -L ${TOOLCHAIN_URL}/toolchain_${LIBC}_${toolchain_arch}_gcc-${gcc_version}${tools_suffix}.tar.zst -o toolchain.tar.zst $CURL_BAR echo -e "\n${GREEN_COLOR}Process Toolchain ...${RES}" - tar -zxf toolchain.tar.gz && rm -f toolchain.tar.gz + tar -I "zstd" -xf toolchain.tar.zst + rm -f toolchain.tar.zst mkdir bin find ./staging_dir/ -name '*' -exec touch {} \; >/dev/null 2>&1 find ./tmp/ -name '*' -exec touch {} \; >/dev/null 2>&1 @@ -419,15 +452,8 @@ if [ "$BUILD_TOOLCHAIN" = "y" ]; then make -j$cores toolchain/compile || make -j$cores toolchain/compile V=s || exit 1 mkdir -p toolchain-cache [ "$ENABLE_GLIBC" = "y" ] && LIBC=glibc || LIBC=musl - if [ "$USE_GCC13" = "y" ]; then - tar -zcf toolchain-cache/toolchain_"$LIBC"_"$toolchain_arch"_13.tar.gz ./{build_dir,dl,staging_dir,tmp} && echo -e "${GREEN_COLOR} Build success! ${RES}" - elif [ "$USE_GCC14" = "y" ]; then - tar -zcf toolchain-cache/toolchain_"$LIBC"_"$toolchain_arch"_14.tar.gz ./{build_dir,dl,staging_dir,tmp} && echo -e "${GREEN_COLOR} Build success! ${RES}" - elif [ "$USE_GCC15" = "y" ]; then - tar -zcf toolchain-cache/toolchain_"$LIBC"_"$toolchain_arch"_15.tar.gz ./{build_dir,dl,staging_dir,tmp} && echo -e "${GREEN_COLOR} Build success! ${RES}" - else - tar -zcf toolchain-cache/toolchain_"$LIBC"_"$toolchain_arch"_11.tar.gz ./{build_dir,dl,staging_dir,tmp} && echo -e "${GREEN_COLOR} Build success! ${RES}" - fi + tar -I "zstd -19 -T$(nproc --all)" -cf toolchain-cache/toolchain_${LIBC}_${toolchain_arch}_gcc-${gcc_version}${tools_suffix}.tar.zst ./{build_dir,dl,staging_dir,tmp} + echo -e "\n${GREEN_COLOR} Build success! ${RES}" exit 0 else echo -e "\r\n${GREEN_COLOR}Building OpenWrt ...${RES}\r\n" @@ -453,11 +479,24 @@ else fi if [ "$platform" = "x86_64" ]; then - if [ "$ALL_KMODS" = y ]; then + if [ "$NO_KMOD" != "y" ]; then cp -a bin/targets/x86/*/packages $kmodpkg_name rm -f $kmodpkg_name/Packages* - # driver firmware - cp -a bin/packages/x86_64/base/*firmware*.ipk $kmodpkg_name/ + cp -a bin/packages/x86_64/base/rtl88*a-firmware*.apk $kmodpkg_name/ || true + [ "$OPENWRT_CORE" = "y" ] && { + cp -a bin/packages/x86_64/base/*3ginfo*.apk $kmodpkg_name/ || true + cp -a bin/packages/x86_64/base/*modemband*.apk $kmodpkg_name/ || true + cp -a bin/packages/x86_64/base/*sms-tool*.apk $kmodpkg_name/ || true + cp -a bin/packages/x86_64/base/*quectel*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/natflow*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/appfilter*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/luci-app-oaf*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/luci-i18n-oaf*.apk $kmodpkg_name/ || true + } + [ "$ENABLE_DPDK" = "y" ] && { + cp -a bin/packages/x86_64/base/*dpdk*.apk $kmodpkg_name/ || true + cp -a bin/packages/x86_64/base/*numa*.apk $kmodpkg_name/ || true + } bash kmod-sign $kmodpkg_name tar zcf x86_64-$kmodpkg_name.tar.gz $kmodpkg_name rm -rf $kmodpkg_name @@ -466,9 +505,11 @@ if [ "$platform" = "x86_64" ]; then if [ "$1" = "rc2" ]; then mkdir -p ota if [ "$MINIMAL_BUILD" = "y" ]; then - OTA_URL="https://x86.cooluc.com/d/minimal/openwrt-23.05" + OTA_URL="https://dev.cooluc.com/minimal/x86_64" + elif [ "$STD_BUILD" = "y" ]; then + OTA_URL="https://dev.cooluc.com/standard/x86_64" else - OTA_URL="https://github.com/sbwml/builder/releases/download" + OTA_URL="https://dev.cooluc.com/release/x86_64" fi VERSION=$(sed 's/v//g' version.txt) SHA256=$(sha256sum bin/targets/x86/64*/*-generic-squashfs-combined-efi.img.gz | awk '{print $1}') @@ -478,7 +519,7 @@ if [ "$platform" = "x86_64" ]; then { "build_date": "$CURRENT_DATE", "sha256sum": "$SHA256", - "url": "$OTA_URL/v$VERSION/openwrt-$VERSION-x86-64-generic-squashfs-combined-efi.img.gz" + "url": "$OTA_URL/openwrt-$VERSION-x86-64-generic-squashfs-combined-efi.img.gz" } ] } @@ -491,60 +532,47 @@ EOF fi exit 0 elif [ "$platform" = "armv8" ]; then - if [ "$ALL_KMODS" = y ]; then + if [ "$NO_KMOD" != "y" ]; then cp -a bin/targets/armsr/armv8*/packages $kmodpkg_name rm -f $kmodpkg_name/Packages* - # driver firmware - cp -a bin/packages/aarch64_generic/base/*firmware*.ipk $kmodpkg_name/ + cp -a bin/packages/aarch64_generic/base/rtl88*a-firmware*.apk $kmodpkg_name/ || true + [ "$OPENWRT_CORE" = "y" ] && { + cp -a bin/packages/aarch64_generic/base/*3ginfo*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/*modemband*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/*sms-tool*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/*quectel*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/natflow*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/appfilter*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/luci-app-oaf*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/luci-i18n-oaf*.apk $kmodpkg_name/ || true + } + [ "$ENABLE_DPDK" = "y" ] && { + cp -a bin/packages/aarch64_generic/base/*dpdk*.apk $kmodpkg_name/ || true + cp -a bin/packages/aarch64_generic/base/*numa*.apk $kmodpkg_name/ || true + } bash kmod-sign $kmodpkg_name tar zcf armv8-$kmodpkg_name.tar.gz $kmodpkg_name rm -rf $kmodpkg_name fi # OTA json - if [ "$1" = "rc2" ]; then - mkdir -p ota - VERSION=$(sed 's/v//g' version.txt) - SHA256=$(sha256sum bin/targets/armsr/armv8*/*-generic-squashfs-combined-efi.img.gz | awk '{print $1}') - cat > ota/fw.json < ota/fw.json < ota/fw.json < ota/fw.json < ota/fw.json </dev/null 2>&1; then - rm -rf /var/emmc-install - mkdir -p /var/emmc-install/{bin,lib} - cp $(which fdisk) /var/emmc-install/bin - cp /lib/{libc.so,libgcc_s.so.1} /var/emmc-install/lib - ln -sf /var/emmc-install/lib/libc.so /var/emmc-install/lib/ld-musl-aarch64.so.1 - cp /usr/lib/{libfdisk.so.*,libsmartcols.so.*,libncursesw.so.*,libblkid.so.*,libuuid.so.*} /var/emmc-install/lib - export PATH="/var/emmc-install/bin:$PATH" - export LD_LIBRARY_PATH="/var/emmc-install/lib:$LD_LIBRARY_PATH" - else - echo "Command $cmd does not exist." - exit 1 - fi + if ! which "$cmd" >/dev/null 2>&1; then + echo "Command $cmd does not exist." + exit 1 + fi done if [ -z "$1" ]; then echo "Firmware file does not specified." echo "Usage: $0 " - exit 1 + exit 0 fi echo " " @@ -32,9 +23,9 @@ echo "Starting eMMC Flashing ..." # eMMC device echo " " -echo "eMMC:" -emmc_device=$(parted -l 2>/dev/null | grep -A 1 -E 'Model: MMC .*sd/mmc' | tail -n1 | awk '{print $2}' | sed 's/://g') -emmc_size=$(parted -l 2>/dev/null | grep -A 1 -E 'Model: MMC .*sd/mmc' | tail -n1 | awk '{print $3}') +echo "eMMC info" +emmc_device=$(parted -s -l 2>/dev/null | grep -A 1 -E 'Model: MMC .*sd/mmc' | tail -n1 | awk '{print $2}' | sed 's/://g') +emmc_size=$(parted -s -l 2>/dev/null | grep -A 1 -E 'Model: MMC .*sd/mmc' | tail -n1 | awk '{print $3}') emmc_device_name=$(echo $emmc_device | awk -F/ '{print $3}') emmc_partition=$(fdisk -l 2>/dev/null | grep "$emmc_device_name"p | wc -l) if [ "$emmc_partition" -eq 3 ]; then @@ -54,8 +45,7 @@ echo " " read -p "This script will erase your eMMC. Continue [y/n]? " -n 1 -r echo " " if [[ $REPLY =~ ^[Nn]$ ]]; then - rm -rf /var/emmc-install - echo "Exiting script" + echo "Exiting script." exit 1 fi @@ -65,8 +55,8 @@ if [ -e "$firmware_file" ]; then if [ "$extension" = "gz" ]; then echo " " echo "Gzip decompression $firmware_file ..." - zcat "$firmware_file" > /var/emmc-install/firmware.img - firmware_file_path="/var/emmc-install/firmware.img" + zcat "$firmware_file" > /var/firmware.img + firmware_file_path="/var/firmware.img" elif [ "$extension" = "img" ]; then firmware_file_path="$firmware_file" else @@ -94,5 +84,5 @@ EOM fi echo " " echo "Done!" -echo "Please remove the TF card and power off and restart device." +echo "Please remove the TF card and Power off and restart device." echo " " diff --git a/openwrt/generic/config-build-only b/openwrt/generic/config-build-only new file mode 100644 index 000000000..c2586d6a8 --- /dev/null +++ b/openwrt/generic/config-build-only @@ -0,0 +1,7 @@ + +# Natflow +CONFIG_PACKAGE_natflow=m + +# OAF +CONFIG_PACKAGE_luci-app-oaf=m +CONFIG_PACKAGE_appfilter=m diff --git a/openwrt/generic/config-dpdk b/openwrt/generic/config-dpdk new file mode 100644 index 000000000..21f3d34d6 --- /dev/null +++ b/openwrt/generic/config-dpdk @@ -0,0 +1,4 @@ + +# DPDK +CONFIG_PACKAGE_dpdk-tools=y +CONFIG_PACKAGE_numactl=m diff --git a/openwrt/generic/config-gcc11 b/openwrt/generic/config-gcc11 deleted file mode 100644 index e62b54353..000000000 --- a/openwrt/generic/config-gcc11 +++ /dev/null @@ -1,5 +0,0 @@ - -# gcc 11 - better performance -CONFIG_DEVEL=y -CONFIG_TOOLCHAINOPTS=y -CONFIG_GCC_USE_VERSION_11=y diff --git a/openwrt/generic/config-gcc13 b/openwrt/generic/config-gcc13 deleted file mode 100644 index 6e1fa77cb..000000000 --- a/openwrt/generic/config-gcc13 +++ /dev/null @@ -1,5 +0,0 @@ - -# gcc 13 -CONFIG_DEVEL=y -CONFIG_TOOLCHAINOPTS=y -CONFIG_GCC_USE_VERSION_13=y diff --git a/openwrt/generic/config-gcc14 b/openwrt/generic/config-gcc14 deleted file mode 100644 index ca6bc7adb..000000000 --- a/openwrt/generic/config-gcc14 +++ /dev/null @@ -1,6 +0,0 @@ - -# gcc 14 -CONFIG_DEVEL=y -CONFIG_TOOLCHAINOPTS=y -CONFIG_GCC_USE_VERSION_14=y -CONFIG_BINUTILS_USE_VERSION_2_42=y diff --git a/openwrt/generic/config-gcc15 b/openwrt/generic/config-gcc15 deleted file mode 100644 index 24988f03d..000000000 --- a/openwrt/generic/config-gcc15 +++ /dev/null @@ -1,6 +0,0 @@ - -# gcc 15 -CONFIG_DEVEL=y -CONFIG_TOOLCHAINOPTS=y -CONFIG_GCC_USE_VERSION_15=y -CONFIG_BINUTILS_USE_VERSION_2_42=y diff --git a/openwrt/generic/config-wwan b/openwrt/generic/config-wwan new file mode 100644 index 000000000..2e9bfbbf5 --- /dev/null +++ b/openwrt/generic/config-wwan @@ -0,0 +1,9 @@ + +# wwan +CONFIG_PACKAGE_luci-app-3ginfo-lite=m +CONFIG_PACKAGE_luci-app-modemband=m +CONFIG_PACKAGE_luci-app-sms-tool-js=m +CONFIG_PACKAGE_luci-proto-quectel=m +# CONFIG_PACKAGE_fibocom-dial is not set +CONFIG_PACKAGE_modemband=m +CONFIG_PACKAGE_quectel-cm=m diff --git a/openwrt/nginx/luci.locations b/openwrt/nginx/luci.locations index eab593d53..df639bbfe 100644 --- a/openwrt/nginx/luci.locations +++ b/openwrt/nginx/luci.locations @@ -3,18 +3,18 @@ location /cgi-bin/luci { include uwsgi_params; uwsgi_param SERVER_ADDR $server_addr; uwsgi_modifier1 9; - uwsgi_send_timeout 600; - uwsgi_connect_timeout 600; - uwsgi_read_timeout 600; + uwsgi_send_timeout 300; + uwsgi_connect_timeout 300; + uwsgi_read_timeout 300; uwsgi_pass unix:////var/run/luci-webui.socket; } location ~ /cgi-bin/cgi-(backup|download|upload|exec) { include uwsgi_params; uwsgi_param SERVER_ADDR $server_addr; uwsgi_modifier1 9; - uwsgi_send_timeout 600; - uwsgi_connect_timeout 600; - uwsgi_read_timeout 600; + uwsgi_send_timeout 300; + uwsgi_connect_timeout 300; + uwsgi_read_timeout 300; uwsgi_pass unix:////var/run/luci-cgi_io.socket; } diff --git a/openwrt/nginx/nginx-util/0001-nginx-util-fix-compilation-with-GCC13.patch b/openwrt/nginx/nginx-util/0001-nginx-util-fix-compilation-with-GCC13.patch deleted file mode 100644 index c7b4c1000..000000000 --- a/openwrt/nginx/nginx-util/0001-nginx-util-fix-compilation-with-GCC13.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 969e27426dcf838f80e1a04a1203b6a7c7de7964 Mon Sep 17 00:00:00 2001 -From: Rosen Penev -Date: Sat, 1 Jul 2023 16:44:54 -0700 -Subject: [PATCH 1/2] nginx-util: fix compilation with GCC13 - -Signed-off-by: Rosen Penev ---- - net/nginx-util/Makefile | 2 +- - net/nginx-util/src/ubus-cxx.hpp | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/net/nginx-util/Makefile b/net/nginx-util/Makefile -index 5d7070eb9..4a77e2f20 100644 ---- a/net/nginx-util/Makefile -+++ b/net/nginx-util/Makefile -@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk - - PKG_NAME:=nginx-util - PKG_VERSION:=1.6 --PKG_RELEASE:=18 -+PKG_RELEASE:=19 - PKG_MAINTAINER:=Peter Stadler - - include $(INCLUDE_DIR)/package.mk -diff --git a/net/nginx-util/src/ubus-cxx.hpp b/net/nginx-util/src/ubus-cxx.hpp -index 6c193cfc3..42d2d21aa 100644 ---- a/net/nginx-util/src/ubus-cxx.hpp -+++ b/net/nginx-util/src/ubus-cxx.hpp -@@ -159,7 +159,7 @@ class message { - both = keys; - } - both = concat(std::move(both), std::move(key_filter)...); -- return std::move(message{msg, std::move(both)}); -+ return message{msg, std::move(both)}; - } - - inline ~message() = default; --- -2.39.3 - diff --git a/openwrt/nginx/nginx-util/0002-nginx-util-move-to-pcre2.patch b/openwrt/nginx/nginx-util/0002-nginx-util-move-to-pcre2.patch deleted file mode 100644 index e3fb152b8..000000000 --- a/openwrt/nginx/nginx-util/0002-nginx-util-move-to-pcre2.patch +++ /dev/null @@ -1,166 +0,0 @@ -From e517ab7c73c93af83b62a317b943218908e04405 Mon Sep 17 00:00:00 2001 -From: Christian Marangi -Date: Fri, 22 Sep 2023 18:15:01 +0200 -Subject: [PATCH 2/2] nginx-util: move to pcre2 - -Convert to pcre2 library as pcre is EOL. No functional change intended. - -Signed-off-by: Christian Marangi ---- - net/nginx-util/Makefile | 4 +-- - net/nginx-util/src/CMakeLists.txt | 4 +-- - net/nginx-util/src/regex-pcre.hpp | 42 ++++++++++++++++++++++--------- - 3 files changed, 34 insertions(+), 16 deletions(-) - -diff --git a/net/nginx-util/Makefile b/net/nginx-util/Makefile -index 4a77e2f20..b4f06aaae 100644 ---- a/net/nginx-util/Makefile -+++ b/net/nginx-util/Makefile -@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk - - PKG_NAME:=nginx-util - PKG_VERSION:=1.6 --PKG_RELEASE:=19 -+PKG_RELEASE:=20 - PKG_MAINTAINER:=Peter Stadler - - include $(INCLUDE_DIR)/package.mk -@@ -30,7 +30,7 @@ endef - define Package/nginx-ssl-util - $(Package/nginx-ssl-util/default) - TITLE+= (using PCRE) -- DEPENDS+= +libpcre -+ DEPENDS+= +libpcre2 - CONFLICTS:=nginx-ssl-util-nopcre, - endef - -diff --git a/net/nginx-util/src/CMakeLists.txt b/net/nginx-util/src/CMakeLists.txt -index 2adff1c71..e023f1eb6 100644 ---- a/net/nginx-util/src/CMakeLists.txt -+++ b/net/nginx-util/src/CMakeLists.txt -@@ -27,7 +27,7 @@ FIND_LIBRARY(ubus NAMES ubus) - INCLUDE_DIRECTORIES(${ubus_include_dir}) - - ADD_EXECUTABLE(nginx-ssl-util nginx-util.cpp) --TARGET_LINK_LIBRARIES(nginx-ssl-util ${uci} ${ubox} ${ubus} pthread ssl crypto pcre) -+TARGET_LINK_LIBRARIES(nginx-ssl-util ${uci} ${ubox} ${ubus} pthread ssl crypto pcre2-8) - INSTALL(TARGETS nginx-ssl-util RUNTIME DESTINATION bin) - - ADD_EXECUTABLE(nginx-ssl-util-nopcre nginx-util.cpp) -@@ -51,7 +51,7 @@ INSTALL(TARGETS px5g RUNTIME DESTINATION bin) - - ADD_EXECUTABLE(nginx-ssl-util-noubus nginx-util.cpp) - TARGET_COMPILE_DEFINITIONS(nginx-ssl-util-noubus PUBLIC -DNO_UBUS) --TARGET_LINK_LIBRARIES(nginx-ssl-util-noubus ${uci} ${ubox} pthread ssl crypto pcre) -+TARGET_LINK_LIBRARIES(nginx-ssl-util-noubus ${uci} ${ubox} pthread ssl crypto pcre2-8) - INSTALL(TARGETS nginx-ssl-util-noubus RUNTIME DESTINATION bin) - - ADD_EXECUTABLE(nginx-ssl-util-nopcre-noubus nginx-util.cpp) -diff --git a/net/nginx-util/src/regex-pcre.hpp b/net/nginx-util/src/regex-pcre.hpp -index f63d5f90c..ab255542b 100644 ---- a/net/nginx-util/src/regex-pcre.hpp -+++ b/net/nginx-util/src/regex-pcre.hpp -@@ -1,7 +1,9 @@ - #ifndef __REGEXP_PCRE_HPP - #define __REGEXP_PCRE_HPP - --#include -+#define PCRE2_CODE_UNIT_WIDTH 8 -+ -+#include - #include - #include - #include -@@ -65,11 +67,9 @@ class regex { - private: - int errcode = 0; - -- const char* errptr = nullptr; -- -- int erroffset = 0; -+ PCRE2_SIZE erroffset = 0; - -- pcre* const re = nullptr; -+ pcre2_code* const re = nullptr; - - static const std::array errcode_pcre2regex; - -@@ -89,10 +89,18 @@ class regex { - explicit regex(const std::string& str) : regex(str.c_str()) {} - - explicit regex(const char* const str) -- : re{pcre_compile2(str, 0, &errcode, &errptr, &erroffset, nullptr)} -+ : re{pcre2_compile((PCRE2_SPTR)str, PCRE2_ZERO_TERMINATED, 0, &errcode, &erroffset, nullptr)} - { - if (re == nullptr) { -- std::string what = std::string("regex error: ") + errptr + '\n'; -+ std::vector buffer(256); -+ int errlen; -+ -+ errlen = pcre2_get_error_message(errcode, buffer.data(), buffer.size()); -+ if (errlen < 0) -+ throw regex_error(errcode_pcre2regex.at(errlen)); -+ -+ std::string what = std::string("regex error: ") + -+ std::string(buffer.data(), buffer.data() + errlen) + '\n'; - what += " '" + std::string{str} + "'\n"; - what += " " + std::string(erroffset, ' ') + '^'; - -@@ -103,11 +111,11 @@ class regex { - ~regex() - { - if (re != nullptr) { -- pcre_free(re); -+ pcre2_code_free(re); - } - } - -- inline auto operator()() const -> const pcre* -+ inline auto operator()() const -> const pcre2_code* - { - return re; - } -@@ -187,11 +195,19 @@ auto regex_search(std::string::const_iterator begin, - - inline auto regex_search(const std::string& subj, const regex& rgx) - { -+ pcre2_match_data *match_data; -+ - if (rgx() == nullptr) { - throw std::runtime_error("regex_search error: no regex given"); - } -+ -+ match_data = pcre2_match_data_create_from_pattern(rgx(), NULL); -+ - int n = -- pcre_exec(rgx(), nullptr, subj.c_str(), static_cast(subj.length()), 0, 0, nullptr, 0); -+ pcre2_match(rgx(), (PCRE2_SPTR)subj.c_str(), static_cast(subj.length()), 0, 0, match_data, nullptr); -+ -+ pcre2_match_data_free(match_data); -+ - return n >= 0; - } - -@@ -205,7 +221,7 @@ auto regex_search(const std::string::const_iterator begin, - } - - int sz = 0; -- pcre_fullinfo(rgx(), nullptr, PCRE_INFO_CAPTURECOUNT, &sz); -+ pcre2_pattern_info(rgx(), PCRE2_INFO_CAPTURECOUNT, &sz); - sz = 3 * (sz + 1); - - match.vec.reserve(sz); -@@ -216,7 +232,9 @@ auto regex_search(const std::string::const_iterator begin, - match.begin = begin; - match.end = end; - -- match.n = pcre_exec(rgx(), nullptr, subj, len, 0, 0, &match.vec[0], sz); -+ pcre2_match_data *match_data = pcre2_match_data_create(sz, NULL); -+ match.n = pcre2_match(rgx(), (PCRE2_SPTR)subj, len, 0, 0, match_data, NULL); -+ pcre2_match_data_free(match_data); - - if (match.n < 0) { - return false; --- -2.39.3 - diff --git a/openwrt/nginx/uci.conf.template b/openwrt/nginx/uci.conf.template index ef053d075..0dd4ec4c7 100644 --- a/openwrt/nginx/uci.conf.template +++ b/openwrt/nginx/uci.conf.template @@ -1,11 +1,14 @@ # Consider using UCI or creating files in /etc/nginx/conf.d/ for configuration. # Parsing UCI configuration is skipped if uci set nginx.global.uci_enable=false # For details see: https://openwrt.org/docs/guide-user/services/webserver/nginx +# UCI_CONF_VERSION=1.2 worker_processes 2; user root; +include module.d/*.module; + events { worker_connections 1024; } @@ -14,7 +17,7 @@ http { access_log off; server_names_hash_bucket_size 128; server_tokens build; - keepalive_timeout 600s; + keepalive_timeout 300s; log_format openwrt '$request_method $scheme://$host$request_uri => $status' ' (${body_bytes_sent}B in ${request_time}s) <- $http_referer'; @@ -23,29 +26,13 @@ http { default_type application/octet-stream; sendfile on; - client_max_body_size 8192M; + client_max_body_size 0; + client_body_buffer_size 128k; large_client_header_buffers 4 32k; gzip on; gzip_vary on; gzip_proxied any; - brotli on; - brotli_comp_level 6; - brotli_static on; - brotli_types application/atom+xml application/javascript application/json application/rss+xml - application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype - application/x-font-ttf application/x-javascript application/xhtml+xml application/xml - font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon - image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml; - zstd on; - zstd_comp_level 7; - zstd_min_length 1k; - zstd_static on; - zstd_types application/atom+xml application/javascript application/json application/rss+xml - application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype - application/x-font-ttf application/x-javascript application/xhtml+xml application/xml - font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon - image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml; root /www; diff --git a/openwrt/patch/FriendlyWrt/fa-fancontrol.tar.gz b/openwrt/patch/FriendlyWrt/fa-fancontrol.tar.gz deleted file mode 100644 index deaf6b03c..000000000 Binary files a/openwrt/patch/FriendlyWrt/fa-fancontrol.tar.gz and /dev/null differ diff --git a/openwrt/patch/apk/9000-io_url_wget-disbale-hsts.patch b/openwrt/patch/apk/9000-io_url_wget-disbale-hsts.patch new file mode 100644 index 000000000..9250c5e80 --- /dev/null +++ b/openwrt/patch/apk/9000-io_url_wget-disbale-hsts.patch @@ -0,0 +1,25 @@ +From f53b64feb573f286cdd6bc8cd2a5601caf82cdef Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Sun, 15 Feb 2026 21:48:33 +0800 +Subject: [PATCH] io_url_wget: disbale hsts + +Signed-off-by: sbwml +--- + src/io_url_wget.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/io_url_wget.c b/src/io_url_wget.c +index 2d5cd4a..28a0851 100644 +--- a/src/io_url_wget.c ++++ b/src/io_url_wget.c +@@ -21,6 +21,7 @@ struct apk_istream *apk_io_url_istream(const char *url, time_t since) + + argv[i++] = "wget"; + argv[i++] = "-q"; ++ argv[i++] = "--no-hsts"; + argv[i++] = "-T"; + argv[i++] = wget_timeout; + if (wget_no_check_certificate) argv[i++] = "--no-check-certificate"; +-- +2.43.5 + diff --git a/openwrt/patch/cgroupfs-mount/0001-fix-cgroupfs-mount.patch b/openwrt/patch/cgroupfs-mount/0001-fix-cgroupfs-mount.patch deleted file mode 100644 index 0c03d5878..000000000 --- a/openwrt/patch/cgroupfs-mount/0001-fix-cgroupfs-mount.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/utils/cgroupfs-mount/files/cgroupfs-mount.init b/utils/cgroupfs-mount/files/cgroupfs-mount.init -index 0d6b68d..4ae3185 100755 ---- a/utils/cgroupfs-mount/files/cgroupfs-mount.init -+++ b/utils/cgroupfs-mount/files/cgroupfs-mount.init -@@ -4,9 +4,17 @@ START=01 - - boot() { - # Procd mounts non-hierarchical cgroupfs so unmount first before cgroupfs-mount -- if mountpoint -q /sys/fs/cgroup; then -- umount /sys/fs/cgroup/ -- fi -+ umount_cgroup() { -+ for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do -+ if mountpoint -q /sys/fs/cgroup/$sys; then -+ umount /sys/fs/cgroup/$sys || true -+ fi -+ done -+ if mountpoint -q /sys/fs/cgroup; then -+ umount /sys/fs/cgroup || true -+ fi -+ } - -- cgroupfs-mount -+ umount_cgroup -+ cgroupfs-mount - } diff --git a/openwrt/patch/cgroupfs-mount/900-mount-cgroup-v2-hierarchy-to-sys-fs-cgroup-cgroup2.patch b/openwrt/patch/cgroupfs-mount/900-mount-cgroup-v2-hierarchy-to-sys-fs-cgroup-cgroup2.patch deleted file mode 100644 index 05fbbe2d9..000000000 --- a/openwrt/patch/cgroupfs-mount/900-mount-cgroup-v2-hierarchy-to-sys-fs-cgroup-cgroup2.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 3855430e665c09b8b36d177a39245d0a69453397 Mon Sep 17 00:00:00 2001 -From: sbwml -Date: Wed, 23 Aug 2023 20:10:30 +0800 -Subject: [PATCH 1/2] mount cgroup v2 hierarchy to /sys/fs/cgroup/cgroup2 - ---- - cgroupfs-mount | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/cgroupfs-mount b/cgroupfs-mount -index 40810ba..114f7a1 100755 ---- a/cgroupfs-mount -+++ b/cgroupfs-mount -@@ -41,6 +41,12 @@ for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do - fi - done - -+# mount cgroup v2 hierarchy to /sys/fs/cgroup/cgroup2 if kernel support cgroup2 filesystem -+if grep -q cgroup2 /proc/filesystems; then -+ mkdir -p /sys/fs/cgroup/cgroup2 -+ mount -t cgroup2 -o rw,nosuid,nodev,noexec,relatime,nsdelegate cgroup2 /sys/fs/cgroup/cgroup2 -+fi -+ - # example /proc/cgroups: - # #subsys_name hierarchy num_cgroups enabled - # cpuset 2 3 1 --- -2.34.8 - diff --git a/openwrt/patch/cgroupfs-mount/901-fix-cgroupfs-umount.patch b/openwrt/patch/cgroupfs-mount/901-fix-cgroupfs-umount.patch deleted file mode 100644 index 85c652e28..000000000 --- a/openwrt/patch/cgroupfs-mount/901-fix-cgroupfs-umount.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 712d45f93d6d499f8c6e6da44084ed2bfdae1605 Mon Sep 17 00:00:00 2001 -From: sbwml -Date: Wed, 23 Aug 2023 20:11:57 +0800 -Subject: [PATCH 2/2] fix cgroupfs-umount - ---- - cgroupfs-umount | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/cgroupfs-umount b/cgroupfs-umount -index ac26b6b..5b4c86e 100755 ---- a/cgroupfs-umount -+++ b/cgroupfs-umount -@@ -24,8 +24,11 @@ for sys in *; do - umount $sys - fi - if [ -d $sys ]; then -- rmdir $sys || true -+ rm -rf $sys || true - fi - done - -+cd / -+umount /sys/fs/cgroup || true -+ - exit 0 --- -2.34.8 - diff --git a/openwrt/patch/cgroupfs-mount/902-mount-sys-fs-cgroup-systemd-for-docker-systemd-suppo.patch b/openwrt/patch/cgroupfs-mount/902-mount-sys-fs-cgroup-systemd-for-docker-systemd-suppo.patch deleted file mode 100644 index 31b000152..000000000 --- a/openwrt/patch/cgroupfs-mount/902-mount-sys-fs-cgroup-systemd-for-docker-systemd-suppo.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 7f6837183da98c4ec5697d9c609e7da4ce354dea Mon Sep 17 00:00:00 2001 -From: sbwml -Date: Wed, 23 Aug 2023 21:41:37 +0800 -Subject: [PATCH] mount /sys/fs/cgroup/systemd for docker systemd support - ---- - cgroupfs-mount | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/cgroupfs-mount b/cgroupfs-mount -index 8274c7c..4c1f954 100755 ---- a/cgroupfs-mount -+++ b/cgroupfs-mount -@@ -47,6 +47,12 @@ if grep -q cgroup2 /proc/filesystems; then - mount -t cgroup2 -o rw,nosuid,nodev,noexec,relatime,nsdelegate cgroup2 /sys/fs/cgroup/cgroup2 - fi - -+# mount /sys/fs/cgroup/systemd for docker systemd -+mkdir -p /sys/fs/cgroup/systemd -+if ! mountpoint -q /sys/fs/cgroup/systemd; then -+ mount -t cgroup -o none,name=systemd systemd /sys/fs/cgroup/systemd -+fi -+ - # example /proc/cgroups: - # #subsys_name hierarchy num_cgroups enabled - # cpuset 2 3 1 --- -2.34.8 - diff --git a/openwrt/patch/coremark/README.md b/openwrt/patch/coremark/README.md index f692ccdc8..4a1e7421c 100644 --- a/openwrt/patch/coremark/README.md +++ b/openwrt/patch/coremark/README.md @@ -1 +1 @@ -# CoreMark (aarch64) prebuilt with GCC15 +# CoreMark (aarch64) prebuilt with GCC15.2.0 diff --git a/openwrt/patch/coremark/coremark.aarch64-16-threads b/openwrt/patch/coremark/coremark.aarch64-16-threads old mode 100755 new mode 100644 index 8342442fe..982a2c1d2 Binary files a/openwrt/patch/coremark/coremark.aarch64-16-threads and b/openwrt/patch/coremark/coremark.aarch64-16-threads differ diff --git a/openwrt/patch/coremark/coremark.aarch64-4-threads b/openwrt/patch/coremark/coremark.aarch64-4-threads deleted file mode 100755 index ebebdf9a7..000000000 Binary files a/openwrt/patch/coremark/coremark.aarch64-4-threads and /dev/null differ diff --git a/openwrt/patch/coremark/coremark.aarch64-6-threads b/openwrt/patch/coremark/coremark.aarch64-6-threads deleted file mode 100755 index d5933c290..000000000 Binary files a/openwrt/patch/coremark/coremark.aarch64-6-threads and /dev/null differ diff --git a/openwrt/patch/docker/0001-dockerd-fix-bridge-network.patch b/openwrt/patch/docker/0001-dockerd-fix-bridge-network.patch deleted file mode 100644 index a853692e0..000000000 --- a/openwrt/patch/docker/0001-dockerd-fix-bridge-network.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 52fd8d3590e62a7a1949e1236cce362fbd7f33c6 Mon Sep 17 00:00:00 2001 -From: sbwml <984419930@qq.com> -Date: Fri, 9 Dec 2022 13:01:48 +0800 -Subject: [PATCH] dockerd: fix bridge network - ---- - utils/dockerd/files/dockerd.init | 3 +++ - utils/dockerd/files/etc/config/dockerd | 2 +- - 2 files changed, 4 insertions(+), 1 deletion(-) - -diff --git a/utils/dockerd/files/dockerd.init b/utils/dockerd/files/dockerd.init -index 111e2cd8db1b..0ae6fd9af403 100755 ---- a/utils/dockerd/files/dockerd.init -+++ b/utils/dockerd/files/dockerd.init -@@ -91,6 +91,9 @@ uciadd() { - uci_quiet set firewall.@zone[-1].output="ACCEPT" - uci_quiet set firewall.@zone[-1].forward="ACCEPT" - uci_quiet set firewall.@zone[-1].name="${zone}" -+ uci_quiet set firewall.dockerd=forwarding -+ uci_quiet set firewall.@forwarding[-1].src="${zone}" -+ uci_quiet set firewall.@forwarding[-1].dest='wan' - uci_quiet commit firewall - fi - -diff --git a/utils/dockerd/files/etc/config/dockerd b/utils/dockerd/files/etc/config/dockerd -index dd7523543c22..414fa6e5c26e 100644 ---- a/utils/dockerd/files/etc/config/dockerd -+++ b/utils/dockerd/files/etc/config/dockerd -@@ -34,5 +34,5 @@ config globals 'globals' - # then docker restarted to load in new changes. - config firewall 'firewall' - option device 'docker0' -- list blocked_interfaces 'wan' -+# list blocked_interfaces 'wan' - # option extra_iptables_args '--match conntrack ! --ctstate RELATED,ESTABLISHED' # allow outbound connections diff --git a/openwrt/patch/docker/0002-docker-add-buildkit-experimental-support.patch b/openwrt/patch/docker/0002-docker-add-buildkit-experimental-support.patch deleted file mode 100644 index 45a521dbb..000000000 --- a/openwrt/patch/docker/0002-docker-add-buildkit-experimental-support.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 342451357cc3718748d4a2fed40b480044adb1a7 Mon Sep 17 00:00:00 2001 -From: sbwml -Date: Wed, 3 Apr 2024 02:38:08 +0800 -Subject: [PATCH] docker: add buildkit & experimental support - -Signed-off-by: sbwml ---- - utils/dockerd/files/dockerd.init | 8 ++++++++ - utils/dockerd/files/etc/config/dockerd | 2 ++ - 2 files changed, 10 insertions(+) - -diff --git a/utils/dockerd/files/dockerd.init b/utils/dockerd/files/dockerd.init -index 1e45c44..6a3c5f7 100755 ---- a/utils/dockerd/files/dockerd.init -+++ b/utils/dockerd/files/dockerd.init -@@ -187,12 +187,20 @@ process_config() { - config_get ip globals ip "" - config_get fixed_cidr globals fixed_cidr "" - config_get fixed_cidr_v6 globals fixed_cidr_v6 "" -+ config_get buildkit globals buildkit "0" -+ config_get experimental globals experimental "0" - - . /usr/share/libubox/jshn.sh - json_init - json_add_string "data-root" "${data_root}" - json_add_string "log-level" "${log_level}" - json_add_boolean "iptables" "${iptables}" -+ [ "${buildkit}" = "1" ] && { -+ json_add_object 'features' -+ json_add_boolean "buildkit" "${buildkit}" -+ json_close_object -+ } -+ [ "${experimental}" = "1" ] && json_add_boolean "experimental" "${experimental}" - [ -z "${log_driver}" ] || json_add_string "log-driver" "${log_driver}" - [ -z "${bip}" ] || json_add_string "bip" "${bip}" - [ -z "${registry_mirrors}" ] || json_add_array "registry-mirrors" -diff --git a/utils/dockerd/files/etc/config/dockerd b/utils/dockerd/files/etc/config/dockerd -index 414fa6e..8958b95 100644 ---- a/utils/dockerd/files/etc/config/dockerd -+++ b/utils/dockerd/files/etc/config/dockerd -@@ -20,6 +20,8 @@ config globals 'globals' - # list dns '172.17.0.1' - # list registry_mirrors 'https://' - # list registry_mirrors 'https://hub.docker.com' -+ option buildkit '0' -+ option experimental '0' - - # Docker doesn't work well out of the box with fw4. This is because Docker relies on a compatibility layer that - # naively translates iptables rules. For the best compatibility replace the following dependencies: --- -2.42.0 - diff --git a/openwrt/patch/docker/0003-dockerd-disable-ip6tables-for-bridge-network-by-defa.patch b/openwrt/patch/docker/0003-dockerd-disable-ip6tables-for-bridge-network-by-defa.patch deleted file mode 100644 index 31b6c317d..000000000 --- a/openwrt/patch/docker/0003-dockerd-disable-ip6tables-for-bridge-network-by-defa.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 6d0c70c705f9ece064eee9a8b2e0293147c4abae Mon Sep 17 00:00:00 2001 -From: sbwml -Date: Sun, 30 Jun 2024 11:17:42 +0800 -Subject: [PATCH] dockerd: disable ip6tables for bridge network by default - -Signed-off-by: sbwml ---- - utils/dockerd/files/dockerd.init | 2 ++ - utils/dockerd/files/etc/config/dockerd | 1 + - 2 files changed, 3 insertions(+) - -diff --git a/utils/dockerd/files/dockerd.init b/utils/dockerd/files/dockerd.init -index 6a3c5f7..17dd9d1 100755 ---- a/utils/dockerd/files/dockerd.init -+++ b/utils/dockerd/files/dockerd.init -@@ -175,6 +175,7 @@ process_config() { - config_get data_root globals data_root "/opt/docker/" - config_get log_level globals log_level "warn" - config_get_bool iptables globals iptables "1" -+ config_get_bool ip6tables globals ip6tables "0" - - # Don't add these options by default - # omission == docker defaults -@@ -195,6 +196,7 @@ process_config() { - json_add_string "data-root" "${data_root}" - json_add_string "log-level" "${log_level}" - json_add_boolean "iptables" "${iptables}" -+ json_add_boolean "ip6tables" "${ip6tables}" - [ "${buildkit}" = "1" ] && { - json_add_object 'features' - json_add_boolean "buildkit" "${buildkit}" -diff --git a/utils/dockerd/files/etc/config/dockerd b/utils/dockerd/files/etc/config/dockerd -index 8958b95..9035c13 100644 ---- a/utils/dockerd/files/etc/config/dockerd -+++ b/utils/dockerd/files/etc/config/dockerd -@@ -11,6 +11,7 @@ config globals 'globals' - # option log_driver 'local' - option log_level 'warn' - option iptables '1' -+ option ip6tables '0' - # list hosts 'unix:///var/run/docker.sock' - # option bip '172.18.0.1/24' - # option fixed_cidr '172.17.0.0/16' --- -2.42.0 - diff --git a/openwrt/patch/dpdk/dpdk/Makefile b/openwrt/patch/dpdk/dpdk/Makefile index b13764a2b..8b6f3d6fb 100644 --- a/openwrt/patch/dpdk/dpdk/Makefile +++ b/openwrt/patch/dpdk/dpdk/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=dpdk -PKG_VERSION:=24.03 +PKG_VERSION:=24.07 PKG_RELEASE:=1 PKG_SOURCE_URL:=https://codeload.github.com/DPDK/dpdk/tar.gz/v$(PKG_VERSION)? PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_HASH:=1dcbddec31ea0abd1bb8fe9bed2187272fb8d719443332b5d6c36162c42120f8 +PKG_HASH:=f6963d4219019da6f05103ef91c38568f382a628dfda0aad1ffb0f6cd078b345 PKG_MAINTAINER:=Zbynek Kocur PKG_LICENSE:=BSD-3-Clause @@ -154,6 +154,7 @@ MESON_ARGS+= \ $(if $(CONFIG_aarch64), -Dplatform=$(PLATFORM)) \ $(if $(CONFIG_x86_64),-Dplatform=generic -Dcpu_instruction_set=$(CPU_INST)) \ -Denable_drivers=$(subst $(SPACE),$(COMMA),$(strip $(DRIVERS))) \ + -Ddefault_library=shared define Package/libdpdk SECTION:=libs @@ -195,7 +196,6 @@ define Build/InstallDev $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libdpdk*.pc $(1)/usr/lib/pkgconfig/ endef - define Package/libdpdk/install $(INSTALL_DIR) $(1)/usr/lib $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/librte_*.so.* $(1)/usr/lib/ diff --git a/openwrt/patch/dpdk/dpdk/patches/010-dpdk_arm_build_platform_fix.patch b/openwrt/patch/dpdk/dpdk/patches/010-dpdk_arm_build_platform_fix.patch index e30009985..b0eb3686b 100644 --- a/openwrt/patch/dpdk/dpdk/patches/010-dpdk_arm_build_platform_fix.patch +++ b/openwrt/patch/dpdk/dpdk/patches/010-dpdk_arm_build_platform_fix.patch @@ -1,6 +1,6 @@ --- a/config/arm/meson.build +++ b/config/arm/meson.build -@@ -699,8 +699,10 @@ if dpdk_conf.get('RTE_ARCH_32') +@@ -718,8 +718,10 @@ if dpdk_conf.get('RTE_ARCH_32') if meson.is_cross_build() update_flags = true soc = meson.get_cross_property('platform', '') @@ -13,7 +13,7 @@ endif soc_config = socs.get(soc, {'not_supported': true}) flags_common = [] -@@ -754,8 +756,10 @@ else +@@ -773,8 +775,10 @@ else else # cross build soc = meson.get_cross_property('platform', '') diff --git a/openwrt/patch/dpdk/dpdk/patches/201-r8125-add-r8125-ethernet-poll-mode-driver.patch b/openwrt/patch/dpdk/dpdk/patches/201-r8125-add-r8125-ethernet-poll-mode-driver.patch index 8386f9357..8c59c9053 100644 --- a/openwrt/patch/dpdk/dpdk/patches/201-r8125-add-r8125-ethernet-poll-mode-driver.patch +++ b/openwrt/patch/dpdk/dpdk/patches/201-r8125-add-r8125-ethernet-poll-mode-driver.patch @@ -66,7 +66,7 @@ Signed-off-by: Howard Wang --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -1062,6 +1062,11 @@ F: drivers/net/memif/ +@@ -1076,6 +1076,11 @@ F: drivers/net/memif/ F: doc/guides/nics/memif.rst F: doc/guides/nics/features/memif.ini @@ -139,7 +139,7 @@ Signed-off-by: Howard Wang +* Jumbo frames supported --- a/drivers/net/meson.build +++ b/drivers/net/meson.build -@@ -52,6 +52,7 @@ drivers = [ +@@ -53,6 +53,7 @@ drivers = [ 'pfe', 'qede', 'ring', diff --git a/openwrt/patch/dpdk/numactl/Makefile b/openwrt/patch/dpdk/numactl/Makefile index 82ae3cb9b..7bda113aa 100644 --- a/openwrt/patch/dpdk/numactl/Makefile +++ b/openwrt/patch/dpdk/numactl/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=numactl -PKG_VERSION:=2.0.18 +PKG_VERSION:=2.0.19 PKG_RELEASE:=1 PKG_SOURCE_URL:=https://codeload.github.com/numactl/numactl/tar.gz/v$(PKG_VERSION)? PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_HASH:=8cd6c13f3096e9c2293c1d732f56e2aa37a7ada1a98deed3fac7bd6da1aaaaf6 +PKG_HASH:=8b84ffdebfa0d730fb2fc71bb7ec96bb2d38bf76fb67246fde416a68e04125e4 PKG_MAINTAINER:=Zbynek Kocur PKG_LICENSE:=GPL-2.0-or-later @@ -54,7 +54,6 @@ define Package/libnuma/description Incompatible changes will use new symbol version numbers. endef - define Build/InstallDev $(INSTALL_DIR) $(1)/usr/include $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/ @@ -66,7 +65,6 @@ define Build/InstallDev $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/numa.pc $(1)/usr/lib/pkgconfig/ endef - define Package/numactl/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin diff --git a/openwrt/patch/firewall4/01-luci-app-firewall_add_nft-fullcone-bcm-fullcone_option.patch b/openwrt/patch/firewall4/01-luci-app-firewall_add_nft-fullcone-bcm-fullcone_option.patch deleted file mode 100644 index 71452b080..000000000 --- a/openwrt/patch/firewall4/01-luci-app-firewall_add_nft-fullcone-bcm-fullcone_option.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js -index 1de98c2..ac72083 100644 ---- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js -+++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js -@@ -58,6 +58,15 @@ return view.extend({ - - o = s.option(form.Flag, 'drop_invalid', _('Drop invalid packets')); - -+ if (L.hasSystemFeature('fullcone')) { -+ o = s.option(form.Flag, 'fullcone', _('Enable FullCone NAT')); -+ -+ o = s.option(form.Flag, 'brcmfullcone', _('BCM FullCone NAT scheme'), -+ _('Use the Broadcom FullCone NAT scheme if enabled, and use the NFT FullCone scheme if the option is disabled.')); -+ o.modalonly = true; -+ o.depends('fullcone', '1'); -+ }; -+ - var p = [ - s.option(form.ListValue, 'input', _('Input')), - s.option(form.ListValue, 'output', _('Output')), diff --git a/openwrt/patch/firewall4/02-luci-app-firewall_add_shortcut-fe.patch b/openwrt/patch/firewall4/02-luci-app-firewall_add_shortcut-fe.patch deleted file mode 100644 index 759e37c3d..000000000 --- a/openwrt/patch/firewall4/02-luci-app-firewall_add_shortcut-fe.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js -+++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js -@@ -91,7 +91,7 @@ return view.extend({ - o = s.option(form.Flag, 'flow_offloading', - _('Software flow offloading'), - _('Software based offloading for routing/NAT')); -- o.optional = true; -+ o.optional = false; - - o = s.option(form.Flag, 'flow_offloading_hw', - _('Hardware flow offloading'), -@@ -100,6 +100,22 @@ return view.extend({ - o.depends('flow_offloading', '1'); - } - -+ /* Shortcut-FE flow offload support */ -+ if (L.hasSystemFeature('shortcutfe')) { -+ o = s.option(form.Flag, 'shortcut_fe', -+ _('Shortcut-FE flow offloading'), -+ _('Shortcut-FE based offloading for routing/NAT')); -+ o.optional = true; -+ o.depends('flow_offloading', '0'); -+ -+ o = s.option(form.ListValue, 'shortcut_fe_module', -+ _('Connection Manager'), -+ _('Set up the Shortcut-FE engine connection manager')); -+ o.value('shortcut-fe-cm', _('shortcut-fe-cm')); -+ o.value('fast-classifier', _('fast-classifier')); -+ o.modalonly = true; -+ o.depends('shortcut_fe', '1'); -+ } - - s = m.section(form.GridSection, 'zone', _('Zones')); - s.addremove = true; diff --git a/openwrt/patch/firewall4/03-luci-app-firewall_add_ipv6-nat.patch b/openwrt/patch/firewall4/03-luci-app-firewall_add_ipv6-nat.patch deleted file mode 100644 index 5579cbca3..000000000 --- a/openwrt/patch/firewall4/03-luci-app-firewall_add_ipv6-nat.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js -+++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js -@@ -67,6 +67,12 @@ return view.extend({ - o.depends('fullcone', '1'); - }; - -+ if (L.hasSystemFeature('ipv6')) { -+ o = s.option(form.Flag, 'nat6', -+ _('IPv6 NAT'), -+ _('Applicable to internet environments where the router is not assigned an IPv6 prefix, such as when using an upstream optical modem for dial-up.')); -+ }; -+ - var p = [ - s.option(form.ListValue, 'input', _('Input')), - s.option(form.ListValue, 'output', _('Output')), diff --git a/openwrt/patch/firewall4/100-openwrt-firewall4-add-custom-nft-command-support.patch b/openwrt/patch/firewall4/100-openwrt-firewall4-add-custom-nft-command-support.patch index 424e2b28e..a9d983807 100644 --- a/openwrt/patch/firewall4/100-openwrt-firewall4-add-custom-nft-command-support.patch +++ b/openwrt/patch/firewall4/100-openwrt-firewall4-add-custom-nft-command-support.patch @@ -1,4 +1,4 @@ -From 16eb81b40f5b5f6a6200ec584d9aa6aacdbafa54 Mon Sep 17 00:00:00 2001 +From fc404ac0cc99efbd174cd6ef2a531913e26734a6 Mon Sep 17 00:00:00 2001 From: sbwml Date: Thu, 14 Mar 2024 12:16:11 +0800 Subject: [PATCH] firewall4: add custom nft command support @@ -11,10 +11,10 @@ Signed-off-by: sbwml create mode 100644 package/network/config/firewall4/patches/100-fw4-add-custom-nft-command-support.patch diff --git a/package/network/config/firewall4/Makefile b/package/network/config/firewall4/Makefile -index 8764f5a..0cde6a6 100644 +index 6ae34ea..3b56e66 100644 --- a/package/network/config/firewall4/Makefile +++ b/package/network/config/firewall4/Makefile -@@ -38,6 +38,7 @@ endef +@@ -39,6 +39,7 @@ endef define Package/firewall4/conffiles /etc/config/firewall /etc/nftables.d/ @@ -59,5 +59,5 @@ index 0000000..6030936 + ACTION=includes \ + utpl -S $MAIN -- -2.42.0 +2.43.5 diff --git a/openwrt/patch/firewall4/firewall4_patches/001-fix-fw4-flow-offload.patch b/openwrt/patch/firewall4/firewall4_patches/001-fix-fw4-flow-offload.patch index 3a2c443bc..f9aa1ac9b 100644 --- a/openwrt/patch/firewall4/firewall4_patches/001-fix-fw4-flow-offload.patch +++ b/openwrt/patch/firewall4/firewall4_patches/001-fix-fw4-flow-offload.patch @@ -1,6 +1,6 @@ --- a/root/usr/share/ucode/fw4.uc +++ b/root/usr/share/ucode/fw4.uc -@@ -2045,8 +2045,8 @@ return { +@@ -2068,8 +2068,8 @@ return { }); } diff --git a/openwrt/patch/firewall4/firewall4_patches/002-fix-fw4.uc-adept-kernel-version-type-of-x.x.patch b/openwrt/patch/firewall4/firewall4_patches/002-fix-fw4.uc-adept-kernel-version-type-of-x.x.patch deleted file mode 100644 index 386531b5c..000000000 --- a/openwrt/patch/firewall4/firewall4_patches/002-fix-fw4.uc-adept-kernel-version-type-of-x.x.patch +++ /dev/null @@ -1,23 +0,0 @@ -From ba78896dffc386e641ac0eb9397761a24f4b5d87 Mon Sep 17 00:00:00 2001 -From: ZiMing Mo -Date: Sun, 7 Aug 2022 15:52:55 +0800 -Subject: [PATCH] fix(fw4.uc): adept kernel version type of x.x - -fix kernel version match if the kernel version type is x.x (not x.x.x) - -Signed-off-by: ZiMing Mo ---- - root/usr/share/ucode/fw4.uc | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/root/usr/share/ucode/fw4.uc -+++ b/root/usr/share/ucode/fw4.uc -@@ -496,7 +496,7 @@ return { - v = 0; - - if (fd) { -- let m = match(fd.read("line"), /^Linux version ([0-9]+)\.([0-9]+)\.([0-9]+)/); -+ let m = match(fd.read("line"), /^Linux version ([0-9]+)\.([0-9]+)\.?([0-9]+)?/); - - v = m ? (+m[1] << 24) | (+m[2] << 16) | (+m[3] << 8) : 0; - fd.close(); diff --git a/openwrt/patch/firewall4/firewall4_patches/990-unconditionally-allow-ct-status-dnat.patch b/openwrt/patch/firewall4/firewall4_patches/990-unconditionally-allow-ct-status-dnat.patch deleted file mode 100644 index e7e484c27..000000000 --- a/openwrt/patch/firewall4/firewall4_patches/990-unconditionally-allow-ct-status-dnat.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 38423fae4ba0f116ae7b5853b1c459202fe2c9a4 Mon Sep 17 00:00:00 2001 -From: Stijn Tintel -Date: Tue, 22 Mar 2022 21:20:40 +0200 -Subject: [PATCH] test: unconditionally allow ct status dnat - ---- - root/usr/share/firewall4/templates/ruleset.uc | 4 ---- - 1 file changed, 4 deletions(-) - ---- a/root/usr/share/firewall4/templates/ruleset.uc -+++ b/root/usr/share/firewall4/templates/ruleset.uc -@@ -224,9 +224,7 @@ table inet fw4 { - {% for (let rule in fw4.rules(`input_${zone.name}`)): %} - {%+ include("rule.uc", { fw4, zone, rule }) %} - {% endfor %} --{% if (zone.dflags.dnat): %} - ct status dnat accept comment "!fw4: Accept port redirections" --{% endif %} - {% fw4.includes('chain-append', `input_${zone.name}`) %} - jump {{ zone.input }}_from_{{ zone.name }} - } -@@ -245,9 +243,7 @@ table inet fw4 { - {% for (let rule in fw4.rules(`forward_${zone.name}`)): %} - {%+ include("rule.uc", { fw4, zone, rule }) %} - {% endfor %} --{% if (zone.dflags.dnat): %} - ct status dnat accept comment "!fw4: Accept port forwards" --{% endif %} - {% fw4.includes('chain-append', `forward_${zone.name}`) %} - jump {{ zone.forward }}_to_{{ zone.name }} - {% if (fw4.forward_policy() != "accept" && (zone.log & 1)): %} diff --git a/openwrt/patch/firewall4/firewall4_patches/999-01-firewall4-add-fullcone-support.patch b/openwrt/patch/firewall4/firewall4_patches/999-01-firewall4-add-fullcone-support.patch index d71475925..42e5d6670 100644 --- a/openwrt/patch/firewall4/firewall4_patches/999-01-firewall4-add-fullcone-support.patch +++ b/openwrt/patch/firewall4/firewall4_patches/999-01-firewall4-add-fullcone-support.patch @@ -25,19 +25,19 @@ IPv6 traffic do NOT need this FullCone NAT functionality. option forward REJECT # Uncomment this line to disable ipv6 rules # option disable_ipv6 1 -+ option fullcone '1' ++ option fullcone 0 config zone option name lan -@@ -20,6 +21,8 @@ config zone - option input REJECT - option output ACCEPT - option forward REJECT -+ option fullcone4 '1' -+ option fullcone6 '1' +@@ -22,6 +23,8 @@ config zone + option forward DROP option masq 1 option mtu_fix 1 ++ option fullcone4 1 ++ option fullcone6 0 + config forwarding + option src lan --- a/root/usr/share/firewall4/templates/ruleset.uc +++ b/root/usr/share/firewall4/templates/ruleset.uc @@ -327,6 +327,12 @@ table inet fw4 { @@ -123,7 +123,7 @@ IPv6 traffic do NOT need this FullCone NAT functionality. return { read_kernel_version: function() { -@@ -832,6 +853,18 @@ return { +@@ -855,6 +876,18 @@ return { warn(`[!] ${msg}\n`); }, @@ -142,7 +142,7 @@ IPv6 traffic do NOT need this FullCone NAT functionality. get: function(sid, opt) { return this.cursor.get("firewall", sid, opt); }, -@@ -1013,6 +1046,21 @@ return { +@@ -1036,6 +1069,21 @@ return { } }, @@ -164,7 +164,7 @@ IPv6 traffic do NOT need this FullCone NAT functionality. parse_policy: function(val) { return this.parse_enum(val, [ "accept", -@@ -1452,6 +1500,7 @@ return { +@@ -1475,6 +1523,7 @@ return { "dnat", "snat", "masquerade", @@ -172,7 +172,7 @@ IPv6 traffic do NOT need this FullCone NAT functionality. "accept", "reject", "drop" -@@ -1923,6 +1972,7 @@ return { +@@ -1946,6 +1995,7 @@ return { } let defs = this.parse_options(data, { @@ -180,7 +180,7 @@ IPv6 traffic do NOT need this FullCone NAT functionality. input: [ "policy", "drop" ], output: [ "policy", "drop" ], forward: [ "policy", "drop" ], -@@ -1957,6 +2007,11 @@ return { +@@ -1980,6 +2030,11 @@ return { delete defs.syn_flood; @@ -192,7 +192,7 @@ IPv6 traffic do NOT need this FullCone NAT functionality. this.state.defaults = defs; }, -@@ -1981,6 +2036,8 @@ return { +@@ -2004,6 +2059,8 @@ return { masq_dest: [ "network", null, PARSE_LIST ], masq6: [ "bool" ], @@ -201,7 +201,7 @@ IPv6 traffic do NOT need this FullCone NAT functionality. extra: [ "string", null, UNSUPPORTED ], extra_src: [ "string", null, UNSUPPORTED ], -@@ -2013,6 +2070,18 @@ return { +@@ -2036,6 +2093,18 @@ return { } } @@ -220,7 +220,7 @@ IPv6 traffic do NOT need this FullCone NAT functionality. if (zone.mtu_fix && this.kernel < 0x040a0000) { this.warn_section(data, "option 'mtu_fix' requires kernel 4.10 or later"); return; -@@ -2182,10 +2251,15 @@ return { +@@ -2205,10 +2274,15 @@ return { zone.related_subnets = related_subnets; zone.related_physdevs = related_physdevs; diff --git a/openwrt/patch/firewall4/firewall4_patches/999-02-firewall4-add-bcm-fullconenat-support.patch b/openwrt/patch/firewall4/firewall4_patches/999-02-firewall4-add-bcm-fullconenat-support.patch index 4d32e6e08..7176299a3 100644 --- a/openwrt/patch/firewall4/firewall4_patches/999-02-firewall4-add-bcm-fullconenat-support.patch +++ b/openwrt/patch/firewall4/firewall4_patches/999-02-firewall4-add-bcm-fullconenat-support.patch @@ -3,16 +3,16 @@ @@ -6,6 +6,9 @@ config defaults # Uncomment this line to disable ipv6 rules # option disable_ipv6 1 - option fullcone '1' + option fullcone 0 +# 0 - use nft_fullcone originated from Chion82 +# 1 - use bcm fullconenat from broadcom ASUS Merlin -+ option brcmfullcone '0' ++ option brcmfullcone 0 config zone option name lan --- a/root/usr/share/firewall4/templates/ruleset.uc +++ b/root/usr/share/firewall4/templates/ruleset.uc -@@ -323,11 +323,13 @@ table inet fw4 { +@@ -327,11 +327,13 @@ table inet fw4 { {% for (let redirect in fw4.redirects(`dstnat_${zone.name}`)): %} {%+ include("redirect.uc", { fw4, zone, redirect }) %} {% endfor %} @@ -29,7 +29,7 @@ {% endif %} {% fw4.includes('chain-append', `dstnat_${zone.name}`) %} } -@@ -353,11 +355,18 @@ table inet fw4 { +@@ -357,11 +359,18 @@ table inet fw4 { {% endfor %} {% endfor %} {% endif %} @@ -81,7 +81,7 @@ return { read_kernel_version: function() { -@@ -1972,6 +1986,7 @@ return { +@@ -1995,6 +2009,7 @@ return { } let defs = this.parse_options(data, { @@ -89,7 +89,7 @@ fullcone: [ "bool", "0" ], input: [ "policy", "drop" ], output: [ "policy", "drop" ], -@@ -2007,9 +2022,20 @@ return { +@@ -2030,9 +2045,20 @@ return { delete defs.syn_flood; @@ -113,7 +113,7 @@ } this.state.defaults = defs; -@@ -2075,6 +2101,10 @@ return { +@@ -2098,6 +2124,10 @@ return { zone.fullcone4 = false; zone.fullcone6 = false; } @@ -124,7 +124,7 @@ if (zone.fullcone4) { this.myinfo_section(data, "IPv4 fullcone enabled for zone '" + zone.name + "'"); } -@@ -2259,6 +2289,9 @@ return { +@@ -2282,6 +2312,9 @@ return { if (zone.masq || zone.masq6) zone.dflags.snat = true; diff --git a/openwrt/patch/firewall4/libnftnl/001-libnftnl-add-fullcone-expression-support.patch b/openwrt/patch/firewall4/libnftnl/0001-libnftnl-add-fullcone-expression-support.patch similarity index 96% rename from openwrt/patch/firewall4/libnftnl/001-libnftnl-add-fullcone-expression-support.patch rename to openwrt/patch/firewall4/libnftnl/0001-libnftnl-add-fullcone-expression-support.patch index 88e10ccc8..ffbc608f1 100644 --- a/openwrt/patch/firewall4/libnftnl/001-libnftnl-add-fullcone-expression-support.patch +++ b/openwrt/patch/firewall4/libnftnl/0001-libnftnl-add-fullcone-expression-support.patch @@ -1,7 +1,7 @@ -From 6c39f04febd7cfdbd474233379416babcd0fc341 Mon Sep 17 00:00:00 2001 +From d1fb9ccb094e6cb9d33c3eae427003c9aefb5c99 Mon Sep 17 00:00:00 2001 From: Syrone Wong Date: Fri, 8 Apr 2022 23:52:11 +0800 -Subject: [PATCH] libnftnl: add fullcone expression support +Subject: [PATCH 1/2] libnftnl: add fullcone expression support Signed-off-by: Syrone Wong --- @@ -15,7 +15,7 @@ Signed-off-by: Syrone Wong --- a/include/libnftnl/expr.h +++ b/include/libnftnl/expr.h -@@ -245,6 +245,12 @@ enum { +@@ -273,6 +273,12 @@ enum { }; enum { @@ -30,7 +30,7 @@ Signed-off-by: Syrone Wong NFTNL_EXPR_REDIR_FLAGS, --- a/include/linux/netfilter/nf_tables.h +++ b/include/linux/netfilter/nf_tables.h -@@ -1464,6 +1464,22 @@ enum nft_masq_attributes { +@@ -1510,6 +1510,22 @@ enum nft_masq_attributes { #define NFTA_MASQ_MAX (__NFTA_MASQ_MAX - 1) /** @@ -55,7 +55,7 @@ Signed-off-by: Syrone Wong * @NFTA_REDIR_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers) --- a/src/Makefile.am +++ b/src/Makefile.am -@@ -55,6 +55,7 @@ libnftnl_la_SOURCES = utils.c \ +@@ -56,6 +56,7 @@ libnftnl_la_SOURCES = utils.c \ expr/target.c \ expr/tunnel.c \ expr/masq.c \ @@ -226,7 +226,7 @@ Signed-off-by: Syrone Wong +struct expr_ops expr_ops_fullcone = { + .name = "fullcone", + .alloc_len = sizeof(struct nftnl_expr_fullcone), -+ .max_attr = NFTA_FULLCONE_MAX, ++ .nftnl_max_attr = NFTA_FULLCONE_MAX, + .set = nftnl_expr_fullcone_set, + .get = nftnl_expr_fullcone_get, + .parse = nftnl_expr_fullcone_parse, diff --git a/openwrt/patch/firewall4/libnftnl/002-libnftnl-add-brcm-fullcone-support.patch b/openwrt/patch/firewall4/libnftnl/0002-libnftnl-add-brcm-fullcone-support.patch similarity index 75% rename from openwrt/patch/firewall4/libnftnl/002-libnftnl-add-brcm-fullcone-support.patch rename to openwrt/patch/firewall4/libnftnl/0002-libnftnl-add-brcm-fullcone-support.patch index f40a7a167..6cdd9392b 100644 --- a/openwrt/patch/firewall4/libnftnl/002-libnftnl-add-brcm-fullcone-support.patch +++ b/openwrt/patch/firewall4/libnftnl/0002-libnftnl-add-brcm-fullcone-support.patch @@ -1,17 +1,29 @@ +From 945f840452091ded57ed9db799991bde6b8f6fe3 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Sat, 26 Oct 2024 06:08:38 +0800 +Subject: [PATCH 2/2] libnftnl: add brcm fullcone support + +Signed-off-by: sbwml +--- + include/libnftnl/expr.h | 2 ++ + include/linux/netfilter/nf_tables.h | 4 +++ + src/expr/masq.c | 42 +++++++++++++++++++++++++++++ + 3 files changed, 48 insertions(+) + --- a/include/libnftnl/expr.h +++ b/include/libnftnl/expr.h -@@ -242,6 +242,8 @@ enum { +@@ -269,6 +269,8 @@ enum { NFTNL_EXPR_MASQ_FLAGS = NFTNL_EXPR_BASE, NFTNL_EXPR_MASQ_REG_PROTO_MIN, NFTNL_EXPR_MASQ_REG_PROTO_MAX, + NFTNL_EXPR_MASQ_REG_ADDR_MIN, + NFTNL_EXPR_MASQ_REG_ADDR_MAX, + __NFTNL_EXPR_MASQ_MAX }; - enum { --- a/include/linux/netfilter/nf_tables.h +++ b/include/linux/netfilter/nf_tables.h -@@ -1453,12 +1453,16 @@ enum nft_tproxy_attributes { +@@ -1499,12 +1499,16 @@ enum nft_tproxy_attributes { * @NFTA_MASQ_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32) * @NFTA_MASQ_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers) * @NFTA_MASQ_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers) @@ -30,7 +42,7 @@ #define NFTA_MASQ_MAX (__NFTA_MASQ_MAX - 1) --- a/src/expr/masq.c +++ b/src/expr/masq.c -@@ -24,6 +24,8 @@ struct nftnl_expr_masq { +@@ -20,6 +20,8 @@ struct nftnl_expr_masq { uint32_t flags; enum nft_registers sreg_proto_min; enum nft_registers sreg_proto_max; @@ -39,20 +51,20 @@ }; static int -@@ -42,6 +44,12 @@ nftnl_expr_masq_set(struct nftnl_expr *e +@@ -38,6 +40,12 @@ nftnl_expr_masq_set(struct nftnl_expr *e case NFTNL_EXPR_MASQ_REG_PROTO_MAX: - memcpy(&masq->sreg_proto_max, data, sizeof(masq->sreg_proto_max)); + memcpy(&masq->sreg_proto_max, data, data_len); break; + case NFTNL_EXPR_MASQ_REG_ADDR_MIN: -+ memcpy(&masq->sreg_addr_min, data, sizeof(masq->sreg_addr_min)); ++ memcpy(&masq->sreg_addr_min, data, data_len); + break; + case NFTNL_EXPR_MASQ_REG_ADDR_MAX: -+ memcpy(&masq->sreg_addr_max, data, sizeof(masq->sreg_addr_max)); ++ memcpy(&masq->sreg_addr_max, data, data_len); + break; - default: - return -1; } -@@ -64,6 +72,12 @@ nftnl_expr_masq_get(const struct nftnl_e + return 0; + } +@@ -58,6 +66,12 @@ nftnl_expr_masq_get(const struct nftnl_e case NFTNL_EXPR_MASQ_REG_PROTO_MAX: *data_len = sizeof(masq->sreg_proto_max); return &masq->sreg_proto_max; @@ -65,7 +77,7 @@ } return NULL; } -@@ -80,6 +94,8 @@ static int nftnl_expr_masq_cb(const stru +@@ -74,6 +88,8 @@ static int nftnl_expr_masq_cb(const stru case NFTA_MASQ_REG_PROTO_MIN: case NFTA_MASQ_REG_PROTO_MAX: case NFTA_MASQ_FLAGS: @@ -74,7 +86,7 @@ if (mnl_attr_validate(attr, MNL_TYPE_U32) < 0) abi_breakage(); break; -@@ -102,6 +118,12 @@ nftnl_expr_masq_build(struct nlmsghdr *n +@@ -96,6 +112,12 @@ nftnl_expr_masq_build(struct nlmsghdr *n if (e->flags & (1 << NFTNL_EXPR_MASQ_REG_PROTO_MAX)) mnl_attr_put_u32(nlh, NFTA_MASQ_REG_PROTO_MAX, htobe32(masq->sreg_proto_max)); @@ -87,7 +99,7 @@ } static int -@@ -127,6 +149,16 @@ nftnl_expr_masq_parse(struct nftnl_expr +@@ -121,6 +143,16 @@ nftnl_expr_masq_parse(struct nftnl_expr be32toh(mnl_attr_get_u32(tb[NFTA_MASQ_REG_PROTO_MAX])); e->flags |= (1 << NFTNL_EXPR_MASQ_REG_PROTO_MAX); } @@ -104,7 +116,7 @@ return 0; } -@@ -151,6 +183,16 @@ static int nftnl_expr_masq_snprintf(char +@@ -145,6 +177,16 @@ static int nftnl_expr_masq_snprintf(char ret = snprintf(buf + offset, remain, "flags 0x%x ", masq->flags); SNPRINTF_BUFFER_SIZE(ret, remain, offset); } diff --git a/openwrt/patch/firewall4/luci-25.12/0001-luci-app-firewall-add-nft-fullcone-and-bcm-fullcone-.patch b/openwrt/patch/firewall4/luci-25.12/0001-luci-app-firewall-add-nft-fullcone-and-bcm-fullcone-.patch new file mode 100644 index 000000000..3a25dbea1 --- /dev/null +++ b/openwrt/patch/firewall4/luci-25.12/0001-luci-app-firewall-add-nft-fullcone-and-bcm-fullcone-.patch @@ -0,0 +1,46 @@ +From 6f3aa7ebe51fa2ab1629740d502c109ef68c7077 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Sat, 26 Oct 2024 03:35:05 +0800 +Subject: [PATCH 1/7] luci-app-firewall: add nft-fullcone and bcm-fullcone + option + +Signed-off-by: sbwml +--- + .../resources/view/firewall/zones.js | 21 +++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +index 129d290..4675a44 100644 +--- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js ++++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +@@ -56,6 +56,27 @@ return view.extend({ + + o = s.option(form.Flag, 'drop_invalid', _('Drop invalid packets')); + ++ /* Netfilter FullCone NAT support */ ++ ++ if (L.hasSystemFeature('fullcone')) { ++ o = s.option(form.RichListValue, "fullcone_type", _("Full Cone NAT")); ++ o.value('0', _("Disable")); ++ o.value('1', _("Nftables Fullcone nat"), _('Nftables based fullcone nat scheme.')); ++ o.value('2', _("Broadcom Fullcone nat"), _('Broadcom based fullcone nat scheme.')); ++ o.optional = false; ++ o.load = function (section_id) { ++ var fullcone = uci.get('firewall', section_id, 'fullcone'); ++ var brcmfullcone = uci.get('firewall', section_id, 'brcmfullcone'); ++ return (fullcone === '1') ++ ? (brcmfullcone === '1' ? '2' : '1') ++ : '0'; ++ }; ++ o.write = function(section_id, value) { ++ uci.set('firewall', section_id, 'fullcone', value === '0' ? null : '1'); ++ uci.set('firewall', section_id, 'brcmfullcone', value === '2' ? '1' : null); ++ }; ++ } ++ + let p = [ + s.option(form.ListValue, 'input', _('Input')), + s.option(form.ListValue, 'output', _('Output')), +-- +2.43.5 + diff --git a/openwrt/patch/firewall4/luci-25.12/0002-luci-app-firewall-add-shortcut-fe-option.patch b/openwrt/patch/firewall4/luci-25.12/0002-luci-app-firewall-add-shortcut-fe-option.patch new file mode 100644 index 000000000..847ef4935 --- /dev/null +++ b/openwrt/patch/firewall4/luci-25.12/0002-luci-app-firewall-add-shortcut-fe-option.patch @@ -0,0 +1,60 @@ +From b048a9d3fdaa1a51481ef1b4fa2025359785351b Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Fri, 25 Oct 2024 17:40:35 +0800 +Subject: [PATCH 2/7] luci-app-firewall: add shortcut-fe option + +Signed-off-by: sbwml +--- + .../resources/view/firewall/zones.js | 27 ++++++++++++++++--- + 1 file changed, 24 insertions(+), 3 deletions(-) + +diff --git a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +index 4675a44..98334c9 100644 +--- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js ++++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +@@ -102,18 +102,39 @@ return view.extend({ + o.value('0', _("None")); + o.value('1', _("Software flow offloading"), _('Software based offloading for routing/NAT.')); + o.value('2', _("Hardware flow offloading"), _('Hardware based offloading for routing with/without NAT.') + ' ' + _(' Requires hardware NAT support.')); ++ if (L.hasSystemFeature('shortcutfe')) { ++ o.value('3', _("Shortcut-FE flow offloading"), _('Shortcut-FE based offloading for routing/NAT')); ++ } + o.optional = false; + o.load = function (section_id) { + const flow_offloading = uci.get('firewall', section_id, 'flow_offloading'); + const flow_offloading_hw = uci.get('firewall', section_id, 'flow_offloading_hw'); +- return (flow_offloading === '1') +- ? (flow_offloading_hw === '1' ? '2' : '1') +- : '0'; ++ const shortcut_fe = uci.get('firewall', section_id, 'shortcut_fe'); ++ if (flow_offloading === '1') { ++ return flow_offloading_hw === '1' ? '2' : '1'; ++ } else { ++ return shortcut_fe === '1' ? '3' : '0'; ++ } + }; + o.write = function(section_id, value) { ++ uci.unset('firewall', section_id, 'shortcut_fe'); + uci.set('firewall', section_id, 'flow_offloading', value === '0' ? null : '1'); + uci.set('firewall', section_id, 'flow_offloading_hw', value === '2' ? '1' : null); ++ if (value === '3') { ++ uci.unset('firewall', section_id, 'flow_offloading'); ++ uci.unset('firewall', section_id, 'flow_offloading_hw'); ++ uci.set('firewall', section_id, 'shortcut_fe', value === '3' ? '1' : null); ++ } + }; ++ ++ /* Shortcut-FE flow connection manager */ ++ o = s.option(form.ListValue, 'shortcut_fe_module', ++ _('Connection Manager'), ++ _('Set up the Shortcut-FE engine connection manager')); ++ o.value('shortcut-fe-cm', _('shortcut-fe-cm')); ++ o.value('fast-classifier', _('fast-classifier')); ++ o.default = 'shortcut-fe-cm'; ++ o.depends('offloading_type', '3'); + } + + +-- +2.43.5 + diff --git a/openwrt/patch/firewall4/luci-25.12/0003-luci-app-firewall-add-ipv6-nat-option.patch b/openwrt/patch/firewall4/luci-25.12/0003-luci-app-firewall-add-ipv6-nat-option.patch new file mode 100644 index 000000000..678179cdc --- /dev/null +++ b/openwrt/patch/firewall4/luci-25.12/0003-luci-app-firewall-add-ipv6-nat-option.patch @@ -0,0 +1,30 @@ +From 6b3ff020f1a194684d1f3555a95e6da691a457fc Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Sat, 26 Oct 2024 03:37:02 +0800 +Subject: [PATCH 3/7] luci-app-firewall: add ipv6 nat option + +Signed-off-by: sbwml +--- + .../htdocs/luci-static/resources/view/firewall/zones.js | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +index 98334c9..8417eb2 100644 +--- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js ++++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +@@ -77,6 +77,12 @@ return view.extend({ + }; + } + ++ if (L.hasSystemFeature('ipv6')) { ++ o = s.option(form.Flag, 'nat6', ++ _('IPv6 NAT'), ++ _('Applicable to internet environments where the router is not assigned an IPv6 prefix, such as when using an upstream optical modem for dial-up.')); ++ }; ++ + let p = [ + s.option(form.ListValue, 'input', _('Input')), + s.option(form.ListValue, 'output', _('Output')), +-- +2.43.5 + diff --git a/openwrt/patch/firewall4/04-luci-add-firewall4-nft-rules-file.patch b/openwrt/patch/firewall4/luci-25.12/0004-luci-add-firewall-add-custom-nft-rule-support.patch similarity index 64% rename from openwrt/patch/firewall4/04-luci-add-firewall4-nft-rules-file.patch rename to openwrt/patch/firewall4/luci-25.12/0004-luci-add-firewall-add-custom-nft-rule-support.patch index ebbbd05bd..9896eb799 100644 --- a/openwrt/patch/firewall4/04-luci-add-firewall4-nft-rules-file.patch +++ b/openwrt/patch/firewall4/luci-25.12/0004-luci-add-firewall-add-custom-nft-rule-support.patch @@ -1,15 +1,29 @@ +From f025e3b7b999e9375079b0afb1d060038cd146a2 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Wed, 4 Sep 2024 12:36:11 +0800 +Subject: [PATCH 4/7] luci-add-firewall: add custom nft rule support + +Signed-off-by: sbwml +--- + .../htdocs/luci-static/resources/view/firewall/custom.js | 6 +++--- + .../root/usr/share/luci/menu.d/luci-app-firewall.json | 3 --- + .../root/usr/share/rpcd/acl.d/luci-app-firewall.json | 6 ++++-- + 3 files changed, 7 insertions(+), 8 deletions(-) + +diff --git a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js +index b273db4..9bb4d3a 100644 --- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js +++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js @@ -5,13 +5,13 @@ return view.extend({ - load: function() { + load() { - return L.resolveDefault(fs.read('/etc/firewall.user'), ''); + return L.resolveDefault(fs.read('/etc/firewall4.user'), ''); }, - handleSave: function(ev) { - var value = (document.querySelector('textarea').value || '').trim().replace(/\r\n/g, '\n') + '\n'; + handleSave(ev) { + const value = (document.querySelector('textarea').value || '').trim().replace(/\r\n/g, '\n') + '\n'; - return fs.write('/etc/firewall.user', value).then(function(rc) { + return fs.write('/etc/firewall4.user', value).then(function(rc) { @@ -17,7 +31,7 @@ ui.addNotification(null, E('p', _('Contents have been saved.')), 'info'); fs.exec('/etc/init.d/firewall', ['restart']); @@ -23,7 +23,7 @@ return view.extend({ - render: function(fwuser) { + render(fwuser) { return E([ E('h2', _('Firewall - Custom Rules')), - E('p', {}, _('Custom rules allow you to execute arbitrary iptables commands which are not otherwise covered by the firewall framework. The commands are executed after each firewall restart, right after the default ruleset has been loaded.')), @@ -25,6 +39,8 @@ E('p', {}, E('textarea', { 'style': 'width:100%', 'rows': 25 }, [ fwuser != null ? fwuser : '' ])) ]); }, +diff --git a/applications/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json b/applications/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json +index f024dcf..8aea702 100644 --- a/applications/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json +++ b/applications/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json @@ -64,9 +64,6 @@ @@ -37,6 +53,8 @@ } } } +diff --git a/applications/luci-app-firewall/root/usr/share/rpcd/acl.d/luci-app-firewall.json b/applications/luci-app-firewall/root/usr/share/rpcd/acl.d/luci-app-firewall.json +index 17d1fba..7e06de7 100644 --- a/applications/luci-app-firewall/root/usr/share/rpcd/acl.d/luci-app-firewall.json +++ b/applications/luci-app-firewall/root/usr/share/rpcd/acl.d/luci-app-firewall.json @@ -3,7 +3,8 @@ @@ -59,3 +77,6 @@ }, "ubus": { "file": [ "write" ] +-- +2.43.5 + diff --git a/openwrt/patch/firewall4/luci-25.12/0005-luci-app-firewall-add-natflow-offload-support.patch b/openwrt/patch/firewall4/luci-25.12/0005-luci-app-firewall-add-natflow-offload-support.patch new file mode 100644 index 000000000..99b85f42e --- /dev/null +++ b/openwrt/patch/firewall4/luci-25.12/0005-luci-app-firewall-add-natflow-offload-support.patch @@ -0,0 +1,72 @@ +From 62a17b33b8ae6ad05234c7ffdc76801b5eba735b Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Fri, 25 Oct 2024 17:58:57 +0800 +Subject: [PATCH 5/7] luci-app-firewall: add natflow offload support + +Signed-off-by: sbwml +--- + .../resources/view/firewall/zones.js | 23 ++++++++++++++++++- + 1 file changed, 22 insertions(+), 1 deletion(-) + +diff --git a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +index 8417eb2..5ad81a4 100644 +--- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js ++++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +@@ -111,25 +111,38 @@ return view.extend({ + if (L.hasSystemFeature('shortcutfe')) { + o.value('3', _("Shortcut-FE flow offloading"), _('Shortcut-FE based offloading for routing/NAT')); + } ++ if (L.hasSystemFeature('natflow')) { ++ o.value('4', _("Natflow offloading"), _('Natflow based offloading for routing/NAT')); ++ } + o.optional = false; + o.load = function (section_id) { + const flow_offloading = uci.get('firewall', section_id, 'flow_offloading'); + const flow_offloading_hw = uci.get('firewall', section_id, 'flow_offloading_hw'); + const shortcut_fe = uci.get('firewall', section_id, 'shortcut_fe'); ++ const natflow = uci.get('firewall', section_id, 'natflow'); + if (flow_offloading === '1') { + return flow_offloading_hw === '1' ? '2' : '1'; +- } else { ++ } else if (shortcut_fe === '1') { + return shortcut_fe === '1' ? '3' : '0'; ++ } else if (natflow === '1'){ ++ return natflow === '1' ? '4' : '0'; + } + }; + o.write = function(section_id, value) { + uci.unset('firewall', section_id, 'shortcut_fe'); ++ uci.unset('firewall', section_id, 'natflow'); + uci.set('firewall', section_id, 'flow_offloading', value === '0' ? null : '1'); + uci.set('firewall', section_id, 'flow_offloading_hw', value === '2' ? '1' : null); + if (value === '3') { + uci.unset('firewall', section_id, 'flow_offloading'); + uci.unset('firewall', section_id, 'flow_offloading_hw'); ++ uci.unset('firewall', section_id, 'natflow'); + uci.set('firewall', section_id, 'shortcut_fe', value === '3' ? '1' : null); ++ } else if (value === '4') { ++ uci.unset('firewall', section_id, 'flow_offloading'); ++ uci.unset('firewall', section_id, 'flow_offloading_hw'); ++ uci.unset('firewall', section_id, 'shortcut_fe'); ++ uci.set('firewall', section_id, 'natflow', value === '4' ? '1' : null); + } + }; + +@@ -141,6 +154,14 @@ return view.extend({ + o.value('fast-classifier', _('fast-classifier')); + o.default = 'shortcut-fe-cm'; + o.depends('offloading_type', '3'); ++ ++ /* Natflow delay packet */ ++ o = s.option(form.Value, 'natflow_delay_pkts', ++ _('Natflow delay packet'), ++ _('Set up the natflow delay packet')); ++ o.datatype = 'and(uinteger,min(0))'; ++ o.default = 4; ++ o.depends('offloading_type', '4'); + } + + +-- +2.43.5 + diff --git a/openwrt/patch/firewall4/luci-25.12/0006-luci-app-firewall-enable-hardware-offload-only-on-de.patch b/openwrt/patch/firewall4/luci-25.12/0006-luci-app-firewall-enable-hardware-offload-only-on-de.patch new file mode 100644 index 000000000..1e2664029 --- /dev/null +++ b/openwrt/patch/firewall4/luci-25.12/0006-luci-app-firewall-enable-hardware-offload-only-on-de.patch @@ -0,0 +1,29 @@ +From 1c7faac708c5c28bf3764d07502e3d9e8b555801 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Fri, 25 Oct 2024 21:04:10 +0800 +Subject: [PATCH 6/7] luci-app-firewall: enable hardware offload only on + devices with `offload_hw` system feature + +Signed-off-by: sbwml +--- + .../htdocs/luci-static/resources/view/firewall/zones.js | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +index 5ad81a4..df2f6d6 100644 +--- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js ++++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +@@ -107,7 +107,9 @@ return view.extend({ + o = s.option(form.RichListValue, "offloading_type", _("Flow offloading type")); + o.value('0', _("None")); + o.value('1', _("Software flow offloading"), _('Software based offloading for routing/NAT.')); +- o.value('2', _("Hardware flow offloading"), _('Hardware based offloading for routing with/without NAT.') + ' ' + _(' Requires hardware NAT support.')); ++ if (L.hasSystemFeature('offload_hw')) { ++ o.value('2', _("Hardware flow offloading"), _('Hardware based offloading for routing with/without NAT.') + ' ' + _(' Requires hardware NAT support.')); ++ } + if (L.hasSystemFeature('shortcutfe')) { + o.value('3', _("Shortcut-FE flow offloading"), _('Shortcut-FE based offloading for routing/NAT')); + } +-- +2.43.5 + diff --git a/openwrt/patch/firewall4/luci-25.12/0007-luci-app-firewall-add-fullcone6-option-for-nftables-.patch b/openwrt/patch/firewall4/luci-25.12/0007-luci-app-firewall-add-fullcone6-option-for-nftables-.patch new file mode 100644 index 000000000..5764c8424 --- /dev/null +++ b/openwrt/patch/firewall4/luci-25.12/0007-luci-app-firewall-add-fullcone6-option-for-nftables-.patch @@ -0,0 +1,43 @@ +From 4cd5c39d1dfef115e81e148ceb5f821cf8a30aa7 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Wed, 18 Dec 2024 23:38:26 +0800 +Subject: [PATCH 7/7] luci-app-firewall: add fullcone6 option for nftables + based fullcone + +Signed-off-by: sbwml +--- + .../resources/view/firewall/zones.js | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +index df2f6d6..45351b3 100644 +--- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js ++++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js +@@ -74,6 +74,24 @@ return view.extend({ + o.write = function(section_id, value) { + uci.set('firewall', section_id, 'fullcone', value === '0' ? null : '1'); + uci.set('firewall', section_id, 'brcmfullcone', value === '2' ? '1' : null); ++ ++ if (value === '0') { ++ uci.set('firewall', '@zone[1]', 'fullcone6', '0'); ++ } ++ }; ++ ++ /* nft-fullcone 6 */ ++ o = s.option(form.RichListValue, "fullcone6", _("Full Cone NAT6")); ++ o.value('0', _("Disable")); ++ o.value('1', _("Enable")); ++ o.optional = false; ++ o.depends('fullcone_type', '1'); ++ o.load = function (section_id) { ++ var fullcone6 = uci.get('firewall', '@zone[1]', 'fullcone6'); ++ return (fullcone6 === '1') ? '1' : '0'; ++ }; ++ o.write = function(section_id, value) { ++ uci.set('firewall', '@zone[1]', 'fullcone6', value === '1' ? '1' : '0'); + }; + } + +-- +2.43.5 + diff --git a/openwrt/patch/firewall4/nftables/002-nftables-add-fullcone-expression-support.patch b/openwrt/patch/firewall4/nftables/0001-nftables-add-fullcone-expression-support.patch similarity index 90% rename from openwrt/patch/firewall4/nftables/002-nftables-add-fullcone-expression-support.patch rename to openwrt/patch/firewall4/nftables/0001-nftables-add-fullcone-expression-support.patch index f1bf9c5d6..a62cb4505 100644 --- a/openwrt/patch/firewall4/nftables/002-nftables-add-fullcone-expression-support.patch +++ b/openwrt/patch/firewall4/nftables/0001-nftables-add-fullcone-expression-support.patch @@ -1,7 +1,7 @@ -From 58c89e8768711a959fdc6e953df3ea2254ff93c1 Mon Sep 17 00:00:00 2001 +From 8c921fcda2d782f95864efc37989a153c16fc673 Mon Sep 17 00:00:00 2001 From: Syrone Wong Date: Sat, 9 Apr 2022 00:38:51 +0800 -Subject: [PATCH] nftables: add fullcone expression support +Subject: [PATCH 1/2] nftables: add fullcone expression support Signed-off-by: Syrone Wong --- @@ -16,7 +16,7 @@ Signed-off-by: Syrone Wong --- a/include/linux/netfilter/nf_tables.h +++ b/include/linux/netfilter/nf_tables.h -@@ -1485,6 +1485,22 @@ enum nft_masq_attributes { +@@ -1500,6 +1500,22 @@ enum nft_masq_attributes { #define NFTA_MASQ_MAX (__NFTA_MASQ_MAX - 1) /** @@ -51,7 +51,7 @@ Signed-off-by: Syrone Wong --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c -@@ -1471,6 +1471,53 @@ out_err: +@@ -1521,6 +1521,53 @@ out_err: stmt_free(stmt); } @@ -105,7 +105,7 @@ Signed-off-by: Syrone Wong static void netlink_parse_redir(struct netlink_parse_ctx *ctx, const struct location *loc, const struct nftnl_expr *nle) -@@ -1901,6 +1948,7 @@ static const struct expr_handler netlink +@@ -1952,6 +1999,7 @@ static const struct expr_handler netlink { .name = "tproxy", .parse = netlink_parse_tproxy }, { .name = "notrack", .parse = netlink_parse_notrack }, { .name = "masq", .parse = netlink_parse_masq }, @@ -115,7 +115,7 @@ Signed-off-by: Syrone Wong { .name = "queue", .parse = netlink_parse_queue }, --- a/src/netlink_linearize.c +++ b/src/netlink_linearize.c -@@ -1222,6 +1222,13 @@ static void netlink_gen_nat_stmt(struct +@@ -1266,6 +1266,13 @@ static void netlink_gen_nat_stmt(struct nftnl_reg_pmin = NFTNL_EXPR_MASQ_REG_PROTO_MIN; nftnl_reg_pmax = NFTNL_EXPR_MASQ_REG_PROTO_MAX; break; @@ -131,7 +131,7 @@ Signed-off-by: Syrone Wong --- a/src/parser_bison.y +++ b/src/parser_bison.y -@@ -623,6 +623,7 @@ int nft_lex(void *, void *, void *); +@@ -668,6 +668,7 @@ int nft_lex(void *, void *, void *); %token SNAT "snat" %token DNAT "dnat" %token MASQUERADE "masquerade" @@ -139,7 +139,7 @@ Signed-off-by: Syrone Wong %token REDIRECT "redirect" %token RANDOM "random" %token FULLY_RANDOM "fully-random" -@@ -757,8 +758,8 @@ int nft_lex(void *, void *, void *); +@@ -814,8 +815,8 @@ int nft_lex(void *, void *, void *); %type limit_burst_pkts limit_burst_bytes limit_mode limit_bytes time_unit quota_mode %type reject_stmt reject_stmt_alloc %destructor { stmt_free($$); } reject_stmt reject_stmt_alloc @@ -150,7 +150,7 @@ Signed-off-by: Syrone Wong %type nf_nat_flags nf_nat_flag offset_opt %type tproxy_stmt %destructor { stmt_free($$); } tproxy_stmt -@@ -3070,6 +3071,7 @@ stmt : verdict_stmt +@@ -3274,6 +3275,7 @@ stmt : verdict_stmt | queue_stmt | ct_stmt | masq_stmt close_scope_nat @@ -158,7 +158,7 @@ Signed-off-by: Syrone Wong | redir_stmt close_scope_nat | dup_stmt close_scope_dup | fwd_stmt close_scope_fwd -@@ -3982,6 +3984,28 @@ masq_stmt_args : TO COLON stmt_expr +@@ -4105,6 +4107,28 @@ masq_stmt_args : TO COLON stmt_expr { $0->nat.proto = $3; } @@ -189,7 +189,7 @@ Signed-off-by: Syrone Wong $0->nat.proto = $3; --- a/src/scanner.l +++ b/src/scanner.l -@@ -463,6 +463,7 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr +@@ -470,6 +470,7 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr "snat" { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_NAT); return SNAT; } "dnat" { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_NAT); return DNAT; } "masquerade" { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_NAT); return MASQUERADE; } @@ -199,7 +199,7 @@ Signed-off-by: Syrone Wong { --- a/src/statement.c +++ b/src/statement.c -@@ -678,6 +678,7 @@ const char *nat_etype2str(enum nft_nat_e +@@ -681,6 +681,7 @@ const char *nat_etype2str(enum nft_nat_e [NFT_NAT_SNAT] = "snat", [NFT_NAT_DNAT] = "dnat", [NFT_NAT_MASQ] = "masquerade", diff --git a/openwrt/patch/firewall4/nftables/003-nftables-add-brcm-fullconenat-support.patch b/openwrt/patch/firewall4/nftables/0002-nftables-add-brcm-fullconenat-support.patch similarity index 79% rename from openwrt/patch/firewall4/nftables/003-nftables-add-brcm-fullconenat-support.patch rename to openwrt/patch/firewall4/nftables/0002-nftables-add-brcm-fullconenat-support.patch index 1253e3df3..95fbd8878 100644 --- a/openwrt/patch/firewall4/nftables/003-nftables-add-brcm-fullconenat-support.patch +++ b/openwrt/patch/firewall4/nftables/0002-nftables-add-brcm-fullconenat-support.patch @@ -1,6 +1,21 @@ +From ae87b5c969b8020a229054493467b272a3f2a79d Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Sat, 26 Oct 2024 06:06:30 +0800 +Subject: [PATCH 2/2] nftables: add brcm fullconenat support + +Signed-off-by: sbwml +--- + include/linux/netfilter/nf_tables.h | 4 ++++ + src/netlink_delinearize.c | 24 ++++++++++++++++++++++++ + src/netlink_linearize.c | 15 ++++++++++----- + src/parser_bison.y | 10 ++++++++++ + src/scanner.l | 1 + + src/statement.c | 9 ++++++--- + 6 files changed, 55 insertions(+), 8 deletions(-) + --- a/include/linux/netfilter/nf_tables.h +++ b/include/linux/netfilter/nf_tables.h -@@ -1474,12 +1474,16 @@ enum nft_tproxy_attributes { +@@ -1489,12 +1489,16 @@ enum nft_tproxy_attributes { * @NFTA_MASQ_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32) * @NFTA_MASQ_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers) * @NFTA_MASQ_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers) @@ -19,7 +34,7 @@ #define NFTA_MASQ_MAX (__NFTA_MASQ_MAX - 1) --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c -@@ -1430,6 +1430,7 @@ static void netlink_parse_masq(struct ne +@@ -1480,6 +1480,7 @@ static void netlink_parse_masq(struct ne { enum nft_registers reg1, reg2; struct expr *proto; @@ -27,7 +42,7 @@ struct stmt *stmt; uint32_t flags = 0; -@@ -1465,6 +1466,29 @@ static void netlink_parse_masq(struct ne +@@ -1515,6 +1516,29 @@ static void netlink_parse_masq(struct ne stmt->nat.proto = proto; } @@ -59,7 +74,7 @@ out_err: --- a/src/netlink_linearize.c +++ b/src/netlink_linearize.c -@@ -1201,7 +1201,10 @@ static void netlink_gen_nat_stmt(struct +@@ -1245,7 +1245,10 @@ static void netlink_gen_nat_stmt(struct int registers = 0; int nftnl_flag_attr; int nftnl_reg_pmin, nftnl_reg_pmax; @@ -70,7 +85,7 @@ switch (stmt->nat.type) { case NFT_NAT_SNAT: case NFT_NAT_DNAT: -@@ -1221,6 +1224,8 @@ static void netlink_gen_nat_stmt(struct +@@ -1265,6 +1268,8 @@ static void netlink_gen_nat_stmt(struct nftnl_flag_attr = NFTNL_EXPR_MASQ_FLAGS; nftnl_reg_pmin = NFTNL_EXPR_MASQ_REG_PROTO_MIN; nftnl_reg_pmax = NFTNL_EXPR_MASQ_REG_PROTO_MAX; @@ -79,7 +94,7 @@ break; case NFT_NAT_FULLCONE: nle = alloc_nft_expr("fullcone"); -@@ -1254,13 +1259,13 @@ static void netlink_gen_nat_stmt(struct +@@ -1298,13 +1303,13 @@ static void netlink_gen_nat_stmt(struct netlink_gen_expr(ctx, stmt->nat.addr->left, amin_reg); netlink_gen_expr(ctx, stmt->nat.addr->right, amax_reg); @@ -96,7 +111,7 @@ amin_reg); if (stmt->nat.addr->etype == EXPR_MAP && stmt->nat.addr->mappings->set->data->flags & EXPR_F_INTERVAL) { -@@ -1269,7 +1274,7 @@ static void netlink_gen_nat_stmt(struct +@@ -1313,7 +1318,7 @@ static void netlink_gen_nat_stmt(struct netlink_put_register(nle, nftnl_reg_pmin, amin_reg); } else { @@ -105,7 +120,7 @@ amin_reg); } } -@@ -1285,7 +1290,7 @@ static void netlink_gen_nat_stmt(struct +@@ -1329,7 +1334,7 @@ static void netlink_gen_nat_stmt(struct if (stmt->nat.type_flags & STMT_NAT_F_INTERVAL) { pmin_reg += netlink_register_space(nat_addrlen(family)); @@ -116,7 +131,7 @@ --- a/src/parser_bison.y +++ b/src/parser_bison.y -@@ -624,6 +624,7 @@ int nft_lex(void *, void *, void *); +@@ -669,6 +669,7 @@ int nft_lex(void *, void *, void *); %token DNAT "dnat" %token MASQUERADE "masquerade" %token FULLCONE "fullcone" @@ -124,7 +139,7 @@ %token REDIRECT "redirect" %token RANDOM "random" %token FULLY_RANDOM "fully-random" -@@ -3993,6 +3994,15 @@ masq_stmt_args : TO COLON stmt_expr +@@ -4116,6 +4117,15 @@ masq_stmt_args : TO COLON stmt_expr { $0->nat.flags = $1; } @@ -142,7 +157,7 @@ fullcone_stmt : fullcone_stmt_alloc fullcone_stmt_args --- a/src/scanner.l +++ b/src/scanner.l -@@ -464,6 +464,7 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr +@@ -471,6 +471,7 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr "dnat" { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_NAT); return DNAT; } "masquerade" { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_NAT); return MASQUERADE; } "fullcone" { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_NAT); return FULLCONE; } @@ -152,7 +167,7 @@ { --- a/src/statement.c +++ b/src/statement.c -@@ -687,6 +687,7 @@ const char *nat_etype2str(enum nft_nat_e +@@ -690,6 +690,7 @@ const char *nat_etype2str(enum nft_nat_e static void nat_stmt_print(const struct stmt *stmt, struct output_ctx *octx) { @@ -160,7 +175,7 @@ nft_print(octx, "%s", nat_etype2str(stmt->nat.type)); if (stmt->nat.addr || stmt->nat.proto) { switch (stmt->nat.family) { -@@ -700,11 +701,13 @@ static void nat_stmt_print(const struct +@@ -703,11 +704,13 @@ static void nat_stmt_print(const struct if (stmt->nat.type_flags & STMT_NAT_F_PREFIX) nft_print(octx, " prefix"); diff --git a/openwrt/patch/fstools/22-fstools-support-extroot-for-non-MTD-rootfs_data-new-version.patch b/openwrt/patch/fstools/22-fstools-support-extroot-for-non-MTD-rootfs_data-new-version.patch deleted file mode 100644 index 4491755d1..000000000 --- a/openwrt/patch/fstools/22-fstools-support-extroot-for-non-MTD-rootfs_data-new-version.patch +++ /dev/null @@ -1,141 +0,0 @@ -From: Qi Liu - -In order to support extroot, block extroot command has to be able to -discover and properly mount the rootfs_data volume in order to discover -the extroot volume. Currently this process can only discover MTD devices. -This patch leverages libfstools in a similar way as mount_root to -discover, initialize, and mount rootfs_data volume. It would enable any -device with non-MTD rootfs_data volume to support extroot, including x86. - -Signed-off-by: Qi Liu ---- - CMakeLists.txt | 4 ++-- - block.c | 40 ++++++++++++++++++++++++++++++++++++++++ - libfstools/fstype.h | 13 +++++++++++++ - libfstools/libfstools.h | 12 +----------- - 4 files changed, 56 insertions(+), 13 deletions(-) - create mode 100644 libfstools/fstype.h - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 9a87979..c485913 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -78,9 +78,9 @@ INSTALL(TARGETS blockd RUNTIME DESTINATION sbin) - ADD_EXECUTABLE(block block.c probe.c probe-libblkid.c) - IF(DEFINED CMAKE_UBIFS_EXTROOT) - ADD_DEFINITIONS(-DUBIFS_EXTROOT) -- TARGET_LINK_LIBRARIES(block blkid-tiny dl uci ubox ubus blobmsg_json ubi-utils ${json}) -+ TARGET_LINK_LIBRARIES(block fstools blkid-tiny dl uci ubox ubus blobmsg_json ubi-utils ${json}) - ELSE(DEFINED CMAKE_UBIFS_EXTROOT) -- TARGET_LINK_LIBRARIES(block blkid-tiny dl uci ubox ubus blobmsg_json ${json}) -+ TARGET_LINK_LIBRARIES(block fstools blkid-tiny dl uci ubox ubus blobmsg_json ${json}) - ENDIF(DEFINED CMAKE_UBIFS_EXTROOT) - INSTALL(TARGETS block RUNTIME DESTINATION sbin) - -diff --git a/block.c b/block.c -index 2176f72..454a046 100644 ---- a/block.c -+++ b/block.c -@@ -44,6 +44,8 @@ - #include - #include - -+#include "libfstools/fstype.h" -+#include "libfstools/volume.h" - #include "probe.h" - - #define AUTOFS_MOUNT_PATH "/tmp/run/blockd/" -@@ -1700,6 +1702,44 @@ static int main_extroot(int argc, char **argv) - } - #endif - -+ /* Find volume using libfstools */ -+ struct volume *data = volume_find("rootfs_data"); -+ if (data) { -+ volume_init(data); -+ -+ switch (volume_identify(data)) { -+ case FS_EXT4: { -+ char cfg[] = "/tmp/ext4_cfg"; -+ -+ /* Mount volume and try extroot (using fstab from that vol) */ -+ mkdir_p(cfg, 0755); -+ if (!mount(data->blk, cfg, "ext4", MS_NOATIME, NULL)) { -+ err = mount_extroot(cfg); -+ umount2(cfg, MNT_DETACH); -+ } -+ if (err < 0) -+ rmdir("/tmp/overlay"); -+ rmdir(cfg); -+ return err; -+ } -+ -+ case FS_F2FS: { -+ char cfg[] = "/tmp/f2fs_cfg"; -+ -+ /* Mount volume and try extroot (using fstab from that vol) */ -+ mkdir_p(cfg, 0755); -+ if (!mount(data->blk, cfg, "f2fs", MS_NOATIME, NULL)) { -+ err = mount_extroot(cfg); -+ umount2(cfg, MNT_DETACH); -+ } -+ if (err < 0) -+ rmdir("/tmp/overlay"); -+ rmdir(cfg); -+ return err; -+ } -+ } -+ } -+ - /* As a last resort look for /etc/config/fstab on "rootfs" partition */ - return mount_extroot(NULL); - } -diff --git a/libfstools/fstype.h b/libfstools/fstype.h -new file mode 100644 -index 0000000..8ea0bbf ---- /dev/null -+++ b/libfstools/fstype.h -@@ -0,0 +1,13 @@ -+#ifndef _FS_TYPE_H__ -+#define _FS_TYPE_H__ -+enum { -+ FS_NONE, -+ FS_SNAPSHOT, -+ FS_JFFS2, -+ FS_DEADCODE, -+ FS_UBIFS, -+ FS_F2FS, -+ FS_EXT4, -+ FS_TARGZ, -+}; -+#endif -\ No newline at end of file -diff --git a/libfstools/libfstools.h b/libfstools/libfstools.h -index 340e2dc..c327314 100644 ---- a/libfstools/libfstools.h -+++ b/libfstools/libfstools.h -@@ -18,20 +18,10 @@ - #include - #include - #include -+#include "fstype.h" - - struct volume; - --enum { -- FS_NONE, -- FS_SNAPSHOT, -- FS_JFFS2, -- FS_DEADCODE, -- FS_UBIFS, -- FS_F2FS, -- FS_EXT4, -- FS_TARGZ, --}; -- - enum fs_state { - FS_STATE_UNKNOWN, - FS_STATE_PENDING, --- -2.34.1 - diff --git a/openwrt/patch/fstools/22-fstools-support-extroot-for-non-MTD-rootfs_data.patch b/openwrt/patch/fstools/22-fstools-support-extroot-for-non-MTD-rootfs_data.patch deleted file mode 100644 index 65d1a087c..000000000 --- a/openwrt/patch/fstools/22-fstools-support-extroot-for-non-MTD-rootfs_data.patch +++ /dev/null @@ -1,139 +0,0 @@ -From: Qi Liu - -In order to support extroot, block extroot command has to be able to -discover and properly mount the rootfs_data volume in order to discover -the extroot volume. Currently this process can only discover MTD devices. -This patch leverages libfstools in a similar way as mount_root to -discover, initialize, and mount rootfs_data volume. It would enable any -device with non-MTD rootfs_data volume to support extroot, including x86. - -Signed-off-by: Qi Liu ---- - CMakeLists.txt | 4 ++-- - block.c | 40 ++++++++++++++++++++++++++++++++++++++++ - libfstools/fstype.h | 12 ++++++++++++ - libfstools/libfstools.h | 11 +---------- - 4 files changed, 55 insertions(+), 12 deletions(-) - create mode 100644 libfstools/fstype.h - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index a586577..4b6e3e7 100644 - ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -75,9 +75,9 @@ INSTALL(TARGETS blockd RUNTIME DESTINATION sbin) - ADD_EXECUTABLE(block block.c probe.c probe-libblkid.c) - IF(DEFINED CMAKE_UBIFS_EXTROOT) - ADD_DEFINITIONS(-DUBIFS_EXTROOT) -- TARGET_LINK_LIBRARIES(block blkid-tiny dl uci ubox ubus blobmsg_json ubi-utils ${json}) -+ TARGET_LINK_LIBRARIES(block fstools blkid-tiny dl uci ubox ubus blobmsg_json ubi-utils ${json}) - ELSE(DEFINED CMAKE_UBIFS_EXTROOT) -- TARGET_LINK_LIBRARIES(block blkid-tiny dl uci ubox ubus blobmsg_json ${json}) -+ TARGET_LINK_LIBRARIES(block fstools blkid-tiny dl uci ubox ubus blobmsg_json ${json}) - ENDIF(DEFINED CMAKE_UBIFS_EXTROOT) - INSTALL(TARGETS block RUNTIME DESTINATION sbin) - -diff --git a/block.c b/block.c -index 569bf56..66cce46 100644 ---- a/block.c -+++ b/block.c -@@ -45,6 +45,8 @@ - #include - #include - -+#include "libfstools/fstype.h" -+#include "libfstools/volume.h" - #include "probe.h" - - #define AUTOFS_MOUNT_PATH "/tmp/run/blockd/" -@@ -1590,6 +1592,44 @@ static int main_extroot(int argc, char **argv) - } - #endif - -+ /* Find volume using libfstools */ -+ struct volume *data = volume_find("rootfs_data"); -+ if (data) { -+ volume_init(data); -+ -+ switch (volume_identify(data)) { -+ case FS_EXT4: { -+ char cfg[] = "/tmp/ext4_cfg"; -+ -+ /* Mount volume and try extroot (using fstab from that vol) */ -+ mkdir_p(cfg, 0755); -+ if (!mount(data->blk, cfg, "ext4", MS_NOATIME, NULL)) { -+ err = mount_extroot(cfg); -+ umount2(cfg, MNT_DETACH); -+ } -+ if (err < 0) -+ rmdir("/tmp/overlay"); -+ rmdir(cfg); -+ return err; -+ } -+ -+ case FS_F2FS: { -+ char cfg[] = "/tmp/f2fs_cfg"; -+ -+ /* Mount volume and try extroot (using fstab from that vol) */ -+ mkdir_p(cfg, 0755); -+ if (!mount(data->blk, cfg, "f2fs", MS_NOATIME, NULL)) { -+ err = mount_extroot(cfg); -+ umount2(cfg, MNT_DETACH); -+ } -+ if (err < 0) -+ rmdir("/tmp/overlay"); -+ rmdir(cfg); -+ return err; -+ } -+ } -+ } -+ - /* As a last resort look for /etc/config/fstab on "rootfs" partition */ - return mount_extroot(NULL); - } -diff --git a/libfstools/fstype.h b/libfstools/fstype.h -new file mode 100644 -index 0000000..8882343 ---- /dev/null -+++ b/libfstools/fstype.h -@@ -0,0 +1,13 @@ -+#ifndef _FS_TYPE_H__ -+#define _FS_TYPE_H__ -+enum { -+ FS_NONE, -+ FS_SNAPSHOT, -+ FS_JFFS2, -+ FS_DEADCODE, -+ FS_UBIFS, -+ FS_F2FS, -+ FS_EXT4, -+ FS_TARGZ, -+}; -+#endif -\ No newline at end of file -diff --git a/libfstools/libfstools.h b/libfstools/libfstools.h -index f27307a..8d3362f 100644 ---- a/libfstools/libfstools.h -+++ b/libfstools/libfstools.h -@@ -18,20 +18,10 @@ - #include - #include - #include -+#include "fstype.h" - - struct volume; - --enum { -- FS_NONE, -- FS_SNAPSHOT, -- FS_JFFS2, -- FS_DEADCODE, -- FS_UBIFS, -- FS_F2FS, -- FS_EXT4, -- FS_TARGZ, --}; -- - enum fs_state { - FS_STATE_UNKNOWN, - FS_STATE_PENDING, diff --git a/openwrt/patch/fstools/block-mount-add-fstools-depends.patch b/openwrt/patch/fstools/block-mount-add-fstools-depends.patch deleted file mode 100644 index 84c8fc909..000000000 --- a/openwrt/patch/fstools/block-mount-add-fstools-depends.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/package/system/fstools/Makefile -+++ b/package/system/fstools/Makefile -@@ -82,7 +82,7 @@ define Package/block-mount - SECTION:=base - CATEGORY:=Base system - TITLE:=Block device mounting and checking -- DEPENDS:=+ubox +libubox +libuci +libblobmsg-json +libjson-c -+ DEPENDS:=+ubox +libubox +libuci +libblobmsg-json +libjson-c +fstools - endef - - define Package/blockd diff --git a/openwrt/patch/fstools/fstools-set-ntfs3-utf8-new.patch b/openwrt/patch/fstools/fstools-set-ntfs3-utf8-new.patch deleted file mode 100644 index 43ab03340..000000000 --- a/openwrt/patch/fstools/fstools-set-ntfs3-utf8-new.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff --git a/block.c b/block.c -index 3842ca7..2176f72 100644 ---- a/block.c -+++ b/block.c -@@ -945,8 +945,12 @@ static int handle_mount(const char *source, const char *target, - int err = -EINVAL; - size_t count; - int i; -+ char _data[128] = {0}; -+ if (strstr(fstype, "fat") || strstr(fstype, "ntfs3")) { -+ snprintf(_data, sizeof(_data), "%s", "iocharset=utf8,uid=65534,gid=65534"); -+ } - -- if (!strcmp(fstype, "ntfs")) { -+ if (!strcmp(fstype, "ntfs3")) { - filesystems = ntfs_fs; - count = ARRAY_SIZE(ntfs_fs); - } else { -@@ -958,7 +962,7 @@ static int handle_mount(const char *source, const char *target, - const char *fs = filesystems[i]; - - err = mount(source, target, fs, m ? m->flags : 0, -- (m && m->options) ? m->options : ""); -+ (m && m->options) ? m->options : _data); - if (!err || errno != ENODEV) - break; - } diff --git a/openwrt/patch/fstools/glibc/0001-libblkid-tiny-add-support-for-XFS-superblock.patch b/openwrt/patch/fstools/glibc/0001-libblkid-tiny-add-support-for-XFS-superblock.patch deleted file mode 100644 index 2331ef654..000000000 --- a/openwrt/patch/fstools/glibc/0001-libblkid-tiny-add-support-for-XFS-superblock.patch +++ /dev/null @@ -1,324 +0,0 @@ -From 1aedbf4d07d8417f656a6363f5db6b4cae765721 Mon Sep 17 00:00:00 2001 -From: sbwml <984419930@qq.com> -Date: Sat, 28 Jan 2023 19:33:16 +0800 -Subject: [PATCH 1/3] libblkid-tiny: add support for XFS superblock - ---- - CMakeLists.txt | 1 + - libblkid-tiny/libblkid-tiny.c | 2 + - libblkid-tiny/xfs.c | 278 ++++++++++++++++++++++++++++++++++ - 3 files changed, 281 insertions(+) - create mode 100644 libblkid-tiny/xfs.c - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 9a87979..506b2df 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -36,6 +36,7 @@ ADD_LIBRARY(blkid-tiny SHARED - libblkid-tiny/squashfs.c - libblkid-tiny/btrfs.c - libblkid-tiny/f2fs.c -+ libblkid-tiny/xfs.c - ) - INSTALL(TARGETS blkid-tiny LIBRARY DESTINATION lib) - INSTALL(FILES libblkid-tiny/libblkid-tiny.h DESTINATION include) -diff --git a/libblkid-tiny/libblkid-tiny.c b/libblkid-tiny/libblkid-tiny.c -index 8520f8a..3aca958 100644 ---- a/libblkid-tiny/libblkid-tiny.c -+++ b/libblkid-tiny/libblkid-tiny.c -@@ -188,6 +188,8 @@ static const struct blkid_idinfo *idinfos[] = - &hfs_idinfo, - &btrfs_idinfo, - &f2fs_idinfo, -+ &xfs_idinfo, -+ &xfs_log_idinfo, - }; - - int probe_block(char *block, struct blkid_struct_probe *pr) -diff --git a/libblkid-tiny/xfs.c b/libblkid-tiny/xfs.c -new file mode 100644 -index 0000000..0e35a44 ---- /dev/null -+++ b/libblkid-tiny/xfs.c -@@ -0,0 +1,278 @@ -+/* -+ * Copyright (C) 1999 by Andries Brouwer -+ * Copyright (C) 1999, 2000, 2003 by Theodore Ts'o -+ * Copyright (C) 2001 by Andreas Dilger -+ * Copyright (C) 2004 Kay Sievers -+ * Copyright (C) 2008 Karel Zak -+ * Copyright (C) 2013 Eric Sandeen -+ * -+ * This file may be redistributed under the terms of the -+ * GNU Lesser General Public License. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "superblocks.h" -+ -+struct xfs_super_block { -+ uint32_t sb_magicnum; /* magic number == XFS_SB_MAGIC */ -+ uint32_t sb_blocksize; /* logical block size, bytes */ -+ uint64_t sb_dblocks; /* number of data blocks */ -+ uint64_t sb_rblocks; /* number of realtime blocks */ -+ uint64_t sb_rextents; /* number of realtime extents */ -+ unsigned char sb_uuid[16]; /* file system unique id */ -+ uint64_t sb_logstart; /* starting block of log if internal */ -+ uint64_t sb_rootino; /* root inode number */ -+ uint64_t sb_rbmino; /* bitmap inode for realtime extents */ -+ uint64_t sb_rsumino; /* summary inode for rt bitmap */ -+ uint32_t sb_rextsize; /* realtime extent size, blocks */ -+ uint32_t sb_agblocks; /* size of an allocation group */ -+ uint32_t sb_agcount; /* number of allocation groups */ -+ uint32_t sb_rbmblocks; /* number of rt bitmap blocks */ -+ uint32_t sb_logblocks; /* number of log blocks */ -+ -+ uint16_t sb_versionnum; /* header version == XFS_SB_VERSION */ -+ uint16_t sb_sectsize; /* volume sector size, bytes */ -+ uint16_t sb_inodesize; /* inode size, bytes */ -+ uint16_t sb_inopblock; /* inodes per block */ -+ char sb_fname[12]; /* file system name */ -+ uint8_t sb_blocklog; /* log2 of sb_blocksize */ -+ uint8_t sb_sectlog; /* log2 of sb_sectsize */ -+ uint8_t sb_inodelog; /* log2 of sb_inodesize */ -+ uint8_t sb_inopblog; /* log2 of sb_inopblock */ -+ uint8_t sb_agblklog; /* log2 of sb_agblocks (rounded up) */ -+ uint8_t sb_rextslog; /* log2 of sb_rextents */ -+ uint8_t sb_inprogress; /* mkfs is in progress, don't mount */ -+ uint8_t sb_imax_pct; /* max % of fs for inode space */ -+ /* statistics */ -+ uint64_t sb_icount; /* allocated inodes */ -+ uint64_t sb_ifree; /* free inodes */ -+ uint64_t sb_fdblocks; /* free data blocks */ -+ uint64_t sb_frextents; /* free realtime extents */ -+ -+ /* this is not all... but enough for libblkid */ -+ -+} __attribute__((packed)); -+ -+#define XFS_MIN_BLOCKSIZE_LOG 9 /* i.e. 512 bytes */ -+#define XFS_MAX_BLOCKSIZE_LOG 16 /* i.e. 65536 bytes */ -+#define XFS_MIN_BLOCKSIZE (1 << XFS_MIN_BLOCKSIZE_LOG) -+#define XFS_MAX_BLOCKSIZE (1 << XFS_MAX_BLOCKSIZE_LOG) -+#define XFS_MIN_SECTORSIZE_LOG 9 /* i.e. 512 bytes */ -+#define XFS_MAX_SECTORSIZE_LOG 15 /* i.e. 32768 bytes */ -+#define XFS_MIN_SECTORSIZE (1 << XFS_MIN_SECTORSIZE_LOG) -+#define XFS_MAX_SECTORSIZE (1 << XFS_MAX_SECTORSIZE_LOG) -+ -+#define XFS_DINODE_MIN_LOG 8 -+#define XFS_DINODE_MAX_LOG 11 -+#define XFS_DINODE_MIN_SIZE (1 << XFS_DINODE_MIN_LOG) -+#define XFS_DINODE_MAX_SIZE (1 << XFS_DINODE_MAX_LOG) -+ -+#define XFS_MAX_RTEXTSIZE (1024 * 1024 * 1024) /* 1GB */ -+#define XFS_DFL_RTEXTSIZE (64 * 1024) /* 64kB */ -+#define XFS_MIN_RTEXTSIZE (4 * 1024) /* 4kB */ -+ -+#define XFS_MIN_AG_BLOCKS 64 -+#define XFS_MAX_DBLOCKS(s) ((uint64_t)(s)->sb_agcount * (s)->sb_agblocks) -+#define XFS_MIN_DBLOCKS(s) ((uint64_t)((s)->sb_agcount - 1) * \ -+ (s)->sb_agblocks + XFS_MIN_AG_BLOCKS) -+ -+ -+static void sb_from_disk(struct xfs_super_block *from, -+ struct xfs_super_block *to) -+{ -+ -+ to->sb_magicnum = be32_to_cpu(from->sb_magicnum); -+ to->sb_blocksize = be32_to_cpu(from->sb_blocksize); -+ to->sb_dblocks = be64_to_cpu(from->sb_dblocks); -+ to->sb_rblocks = be64_to_cpu(from->sb_rblocks); -+ to->sb_rextents = be64_to_cpu(from->sb_rextents); -+ to->sb_logstart = be64_to_cpu(from->sb_logstart); -+ to->sb_rootino = be64_to_cpu(from->sb_rootino); -+ to->sb_rbmino = be64_to_cpu(from->sb_rbmino); -+ to->sb_rsumino = be64_to_cpu(from->sb_rsumino); -+ to->sb_rextsize = be32_to_cpu(from->sb_rextsize); -+ to->sb_agblocks = be32_to_cpu(from->sb_agblocks); -+ to->sb_agcount = be32_to_cpu(from->sb_agcount); -+ to->sb_rbmblocks = be32_to_cpu(from->sb_rbmblocks); -+ to->sb_logblocks = be32_to_cpu(from->sb_logblocks); -+ to->sb_versionnum = be16_to_cpu(from->sb_versionnum); -+ to->sb_sectsize = be16_to_cpu(from->sb_sectsize); -+ to->sb_inodesize = be16_to_cpu(from->sb_inodesize); -+ to->sb_inopblock = be16_to_cpu(from->sb_inopblock); -+ to->sb_blocklog = from->sb_blocklog; -+ to->sb_sectlog = from->sb_sectlog; -+ to->sb_inodelog = from->sb_inodelog; -+ to->sb_inopblog = from->sb_inopblog; -+ to->sb_agblklog = from->sb_agblklog; -+ to->sb_rextslog = from->sb_rextslog; -+ to->sb_inprogress = from->sb_inprogress; -+ to->sb_imax_pct = from->sb_imax_pct; -+ to->sb_icount = be64_to_cpu(from->sb_icount); -+ to->sb_ifree = be64_to_cpu(from->sb_ifree); -+ to->sb_fdblocks = be64_to_cpu(from->sb_fdblocks); -+ to->sb_frextents = be64_to_cpu(from->sb_frextents); -+} -+ -+static int xfs_verify_sb(struct xfs_super_block *ondisk) -+{ -+ struct xfs_super_block sb, *sbp = &sb; -+ -+ /* beXX_to_cpu(), but don't convert UUID and fsname! */ -+ sb_from_disk(ondisk, sbp); -+ -+ /* sanity checks, we don't want to rely on magic string only */ -+ if (sbp->sb_agcount <= 0 || -+ sbp->sb_sectsize < XFS_MIN_SECTORSIZE || -+ sbp->sb_sectsize > XFS_MAX_SECTORSIZE || -+ sbp->sb_sectlog < XFS_MIN_SECTORSIZE_LOG || -+ sbp->sb_sectlog > XFS_MAX_SECTORSIZE_LOG || -+ sbp->sb_sectsize != (1 << sbp->sb_sectlog) || -+ sbp->sb_blocksize < XFS_MIN_BLOCKSIZE || -+ sbp->sb_blocksize > XFS_MAX_BLOCKSIZE || -+ sbp->sb_blocklog < XFS_MIN_BLOCKSIZE_LOG || -+ sbp->sb_blocklog > XFS_MAX_BLOCKSIZE_LOG || -+ sbp->sb_blocksize != (1ULL << sbp->sb_blocklog) || -+ sbp->sb_inodesize < XFS_DINODE_MIN_SIZE || -+ sbp->sb_inodesize > XFS_DINODE_MAX_SIZE || -+ sbp->sb_inodelog < XFS_DINODE_MIN_LOG || -+ sbp->sb_inodelog > XFS_DINODE_MAX_LOG || -+ sbp->sb_inodesize != (1 << sbp->sb_inodelog) || -+ (sbp->sb_blocklog - sbp->sb_inodelog != sbp->sb_inopblog) || -+ (sbp->sb_rextsize * sbp->sb_blocksize > XFS_MAX_RTEXTSIZE) || -+ (sbp->sb_rextsize * sbp->sb_blocksize < XFS_MIN_RTEXTSIZE) || -+ (sbp->sb_imax_pct > 100 /* zero sb_imax_pct is valid */) || -+ sbp->sb_dblocks == 0 || -+ sbp->sb_dblocks > XFS_MAX_DBLOCKS(sbp) || -+ sbp->sb_dblocks < XFS_MIN_DBLOCKS(sbp)) -+ return 0; -+ -+ /* TODO: version 5 has also checksum CRC32, maybe we can check it too */ -+ -+ return 1; -+} -+ -+static int probe_xfs(blkid_probe pr, const struct blkid_idmag *mag) -+{ -+ struct xfs_super_block *xs; -+ -+ xs = blkid_probe_get_sb(pr, mag, struct xfs_super_block); -+ if (!xs) -+ return errno ? -errno : 1; -+ -+ if (!xfs_verify_sb(xs)) -+ return 1; -+ -+ if (*xs->sb_fname != '\0') -+ blkid_probe_set_label(pr, (unsigned char *) xs->sb_fname, -+ sizeof(xs->sb_fname)); -+ blkid_probe_set_uuid(pr, xs->sb_uuid); -+ return 0; -+} -+ -+const struct blkid_idinfo xfs_idinfo = -+{ -+ .name = "xfs", -+ .usage = BLKID_USAGE_FILESYSTEM, -+ .probefunc = probe_xfs, -+ .magics = -+ { -+ { .magic = "XFSB", .len = 4 }, -+ { NULL } -+ } -+}; -+ -+struct xlog_rec_header { -+ uint32_t h_magicno; -+ uint32_t h_dummy1[1]; -+ uint32_t h_version; -+ uint32_t h_len; -+ uint32_t h_dummy2[71]; -+ uint32_t h_fmt; -+ unsigned char h_uuid[16]; -+} __attribute__((packed)); -+ -+#define XLOG_HEADER_MAGIC_NUM 0xFEEDbabe -+ -+/* -+ * For very small filesystems, the minimum log size -+ * can be smaller, but that seems vanishingly unlikely -+ * when used with an external log (which is used for -+ * performance reasons; tiny conflicts with that goal). -+ */ -+#define XFS_MIN_LOG_BYTES (10 * 1024 * 1024) -+ -+#define XLOG_FMT_LINUX_LE 1 -+#define XLOG_FMT_LINUX_BE 2 -+#define XLOG_FMT_IRIX_BE 3 -+ -+#define XLOG_VERSION_1 1 -+#define XLOG_VERSION_2 2 /* Large IClogs, Log sunit */ -+#define XLOG_VERSION_OKBITS (XLOG_VERSION_1 | XLOG_VERSION_2) -+ -+static int xlog_valid_rec_header(struct xlog_rec_header *rhead) -+{ -+ uint32_t hlen; -+ -+ if (rhead->h_magicno != cpu_to_be32(XLOG_HEADER_MAGIC_NUM)) -+ return 0; -+ -+ if (!rhead->h_version || -+ (be32_to_cpu(rhead->h_version) & (~XLOG_VERSION_OKBITS))) -+ return 0; -+ -+ /* LR body must have data or it wouldn't have been written */ -+ hlen = be32_to_cpu(rhead->h_len); -+ if (hlen <= 0 || hlen > INT_MAX) -+ return 0; -+ -+ if (rhead->h_fmt != cpu_to_be32(XLOG_FMT_LINUX_LE) && -+ rhead->h_fmt != cpu_to_be32(XLOG_FMT_LINUX_BE) && -+ rhead->h_fmt != cpu_to_be32(XLOG_FMT_IRIX_BE)) -+ return 0; -+ -+ return 1; -+} -+ -+/* xlog record header will be in some sector in the first 256k */ -+static int probe_xfs_log(blkid_probe pr, -+ const struct blkid_idmag *mag __attribute__((__unused__))) -+{ -+ int i; -+ struct xlog_rec_header *rhead; -+ unsigned char *buf; -+ -+ buf = blkid_probe_get_buffer(pr, 0, 256*1024); -+ if (!buf) -+ return errno ? -errno : 1; -+ -+ if (memcmp(buf, "XFSB", 4) == 0) -+ return 1; /* this is regular XFS, ignore */ -+ -+ /* check the first 512 512-byte sectors */ -+ for (i = 0; i < 512; i++) { -+ rhead = (struct xlog_rec_header *)&buf[i*512]; -+ -+ if (xlog_valid_rec_header(rhead)) { -+ blkid_probe_set_uuid_as(pr, rhead->h_uuid, "LOGUUID"); -+ return 0; -+ } -+ } -+ -+ return 1; -+} -+ -+const struct blkid_idinfo xfs_log_idinfo = -+{ -+ .name = "xfs_external_log", -+ .usage = BLKID_USAGE_OTHER, -+ .probefunc = probe_xfs_log, -+ .magics = BLKID_NONE_MAGIC, -+ .minsz = XFS_MIN_LOG_BYTES, -+}; --- -2.34.1 - diff --git a/openwrt/patch/fstools/glibc/0003-block-add-xfsck-support.patch b/openwrt/patch/fstools/glibc/0003-block-add-xfsck-support.patch deleted file mode 100644 index 902e88210..000000000 --- a/openwrt/patch/fstools/glibc/0003-block-add-xfsck-support.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 71f459400f0990eb577a43345cd8507c8c9f5638 Mon Sep 17 00:00:00 2001 -From: sbwml <984419930@qq.com> -Date: Sat, 28 Jan 2023 20:31:55 +0800 -Subject: [PATCH 3/3] block: add xfsck support - ---- - block.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/block.c b/block.c -index 4b45200..6b8b28a 100644 ---- a/block.c -+++ b/block.c -@@ -764,6 +764,7 @@ static void check_filesystem(struct probe_info *pr) - const char *e2fsck = "/usr/sbin/e2fsck"; - const char *f2fsck = "/usr/sbin/fsck.f2fs"; - const char *fatfsck = "/usr/sbin/fsck.fat"; -+ const char *xfsck = "/usr/sbin/xfs_repair"; - const char *btrfsck = "/usr/bin/btrfsck"; - const char *ntfsck = "/usr/bin/ntfsfix"; - const char *ckfs; -@@ -776,6 +777,8 @@ static void check_filesystem(struct probe_info *pr) - ckfs = fatfsck; - } else if (!strncmp(pr->type, "f2fs", 4)) { - ckfs = f2fsck; -+ } else if (!strncmp(pr->type, "xfs", 3)) { -+ ckfs = xfsck; - } else if (!strncmp(pr->type, "ext", 3)) { - ckfs = e2fsck; - } else if (!strncmp(pr->type, "btrfs", 5)) { --- -2.34.1 - diff --git a/openwrt/patch/fstools/ntfs3.patch b/openwrt/patch/fstools/ntfs3.patch deleted file mode 100644 index 94cad6031..000000000 --- a/openwrt/patch/fstools/ntfs3.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff --git a/block.c b/block.c -index f094216..ec05fb6 100644 ---- a/block.c -+++ b/block.c -@@ -721,7 +721,7 @@ static void check_filesystem(struct probe_info *pr) - ckfs = e2fsck; - } else if (!strncmp(pr->type, "btrfs", 5)) { - ckfs = btrfsck; -- } else if (!strncmp(pr->type, "ntfs", 4)) { -+ } else if (!strncmp(pr->type, "ntfs3", 4)) { - ckfs = ntfsck; - } else { - ULOG_ERR("check_filesystem: %s is not supported\n", pr->type); -@@ -741,7 +741,7 @@ static void check_filesystem(struct probe_info *pr) - } else if(!strncmp(pr->type, "btrfs", 5)) { - execl(ckfs, ckfs, "--repair", pr->dev, NULL); - exit(EXIT_FAILURE); -- } else if(!strncmp(pr->type, "ntfs", 4)) { -+ } else if(!strncmp(pr->type, "ntfs3", 4)) { - execl(ckfs, ckfs, "-b", pr->dev, NULL); - exit(EXIT_FAILURE); - } else { -@@ -1462,9 +1462,9 @@ static int mount_extroot(char *cfg) - if (strncmp(pr->type, "ext", 3) && - strncmp(pr->type, "f2fs", 4) && - strncmp(pr->type, "btrfs", 5) && -- strncmp(pr->type, "ntfs", 4) && -+ strncmp(pr->type, "ntfs3", 4) && - strncmp(pr->type, "ubifs", 5)) { -- ULOG_ERR("extroot: unsupported filesystem %s, try ext4, f2fs, btrfs, ntfs or ubifs\n", pr->type); -+ ULOG_ERR("extroot: unsupported filesystem %s, try ext4, f2fs, btrfs, ntfs3 or ubifs\n", pr->type); - return -1; - } - -diff --git a/libblkid-tiny/ntfs.c b/libblkid-tiny/ntfs.c -index 2426e70..bba6271 100644 ---- a/libblkid-tiny/ntfs.c -+++ b/libblkid-tiny/ntfs.c -@@ -214,7 +214,7 @@ static int probe_ntfs(blkid_probe pr, const struct blkid_idmag *mag) - - const struct blkid_idinfo ntfs_idinfo = - { -- .name = "ntfs", -+ .name = "ntfs3", - .usage = BLKID_USAGE_FILESYSTEM, - .probefunc = probe_ntfs, - .magics = diff --git a/openwrt/patch/generic-25.12/0001-tools-add-upx-tools.patch b/openwrt/patch/generic-25.12/0001-tools-add-upx-tools.patch new file mode 100644 index 000000000..d86615cfe --- /dev/null +++ b/openwrt/patch/generic-25.12/0001-tools-add-upx-tools.patch @@ -0,0 +1,63 @@ +From de1387e3780afbb3a79e361f3b97124eca6c0aa0 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Fri, 4 Oct 2024 10:39:25 +0800 +Subject: [PATCH 01/13] tools: add upx tools + +Signed-off-by: sbwml +--- + tools/Makefile | 1 + + tools/upx/Makefile | 30 ++++++++++++++++++++++++++++++ + 2 files changed, 31 insertions(+) + create mode 100644 tools/upx/Makefile + +diff --git a/tools/Makefile b/tools/Makefile +index 79d3954..42b1265 100644 +--- a/tools/Makefile ++++ b/tools/Makefile +@@ -67,6 +67,7 @@ tools-y += pkgconf + tools-y += quilt + tools-y += squashfs4 + tools-y += sstrip ++tools-y += upx + tools-y += util-linux + tools-y += xz + tools-y += zip +diff --git a/tools/upx/Makefile b/tools/upx/Makefile +new file mode 100644 +index 0000000..9004514 +--- /dev/null ++++ b/tools/upx/Makefile +@@ -0,0 +1,30 @@ ++include $(TOPDIR)/rules.mk ++ ++PKG_NAME:=upx ++PKG_VERSION:=4.2.4 ++ ++PKG_SOURCE:=upx-$(PKG_VERSION)-src.tar.xz ++PKG_SOURCE_URL:=https://github.com/upx/upx/releases/download/v$(PKG_VERSION)/ ++PKG_HASH:=5ed6561607d27fb4ef346fc19f08a93696fa8fa127081e7a7114068306b8e1c4 ++ ++HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)-$(PKG_VERSION)-src ++HOST_BUILD_PARALLEL:=1 ++ ++include $(INCLUDE_DIR)/host-build.mk ++ ++define Host/Compile ++ $(MAKE) -C $(HOST_BUILD_DIR)/src \ ++ LDFLAGS="$(HOST_LDFLAGS)" \ ++ CXX="$(HOSTCXX)" ++endef ++ ++define Host/Install ++ $(INSTALL_DIR) $(STAGING_DIR_HOST)/bin ++ $(INSTALL_BIN) $(HOST_BUILD_DIR)/build/release/upx $(STAGING_DIR_HOST)/bin/upx ++endef ++ ++define Host/Clean ++ rm -f $(STAGING_DIR_HOST)/bin/upx ++endef ++ ++$(eval $(call HostBuild)) +-- +2.43.5 + diff --git a/openwrt/patch/generic/0002-rootfs-add-upx-compression-support.patch b/openwrt/patch/generic-25.12/0002-rootfs-add-upx-compression-support.patch similarity index 79% rename from openwrt/patch/generic/0002-rootfs-add-upx-compression-support.patch rename to openwrt/patch/generic-25.12/0002-rootfs-add-upx-compression-support.patch index 9a334425a..76ba78cd7 100644 --- a/openwrt/patch/generic/0002-rootfs-add-upx-compression-support.patch +++ b/openwrt/patch/generic-25.12/0002-rootfs-add-upx-compression-support.patch @@ -1,7 +1,7 @@ -From 79765552324d8c08e31e7ab80a53b1a29654d473 Mon Sep 17 00:00:00 2001 +From 54de7991f8fcfe4399e476f385286e02517cca9e Mon Sep 17 00:00:00 2001 From: sbwml -Date: Sun, 7 Apr 2024 04:08:40 +0800 -Subject: [PATCH 2/7] rootfs: add upx compression support +Date: Fri, 4 Oct 2024 10:46:49 +0800 +Subject: [PATCH 02/13] rootfs: add upx compression support * When the upx_list.txt file exists in the source code root directory, it will be compressed by upx. @@ -18,10 +18,10 @@ Signed-off-by: sbwml 1 file changed, 5 insertions(+) diff --git a/include/rootfs.mk b/include/rootfs.mk -index f2ed648..eb69a99 100644 +index 02fa3b1..f778aef 100644 --- a/include/rootfs.mk +++ b/include/rootfs.mk -@@ -95,6 +95,11 @@ define prepare_rootfs +@@ -121,6 +121,11 @@ define prepare_rootfs $(1)/usr/lib/opkg/info/*.postinst* \ $(1)/usr/lib/opkg/lists/* \ $(1)/var/lock/*.lock diff --git a/openwrt/patch/generic/0005-rootfs-add-r-w-permissions-for-UCI-configuration-fil.patch b/openwrt/patch/generic-25.12/0003-rootfs-add-r-w-permissions-for-UCI-configuration-fil.patch similarity index 68% rename from openwrt/patch/generic/0005-rootfs-add-r-w-permissions-for-UCI-configuration-fil.patch rename to openwrt/patch/generic-25.12/0003-rootfs-add-r-w-permissions-for-UCI-configuration-fil.patch index 18bec73ed..1e77aa0df 100644 --- a/openwrt/patch/generic/0005-rootfs-add-r-w-permissions-for-UCI-configuration-fil.patch +++ b/openwrt/patch/generic-25.12/0003-rootfs-add-r-w-permissions-for-UCI-configuration-fil.patch @@ -1,7 +1,7 @@ -From 42f9a52f66ef69a0085055facf8a14cab3f279ce Mon Sep 17 00:00:00 2001 +From c2e70e8b792bd3c99fe5584966ab69edcd6ead42 Mon Sep 17 00:00:00 2001 From: sbwml -Date: Sun, 30 Jun 2024 21:58:24 +0800 -Subject: [PATCH 5/7] rootfs: add r/w permissions for UCI configuration files +Date: Fri, 4 Oct 2024 10:47:41 +0800 +Subject: [PATCH 03/13] rootfs: add r/w permissions for UCI configuration files Signed-off-by: sbwml --- @@ -9,10 +9,10 @@ Signed-off-by: sbwml 1 file changed, 1 insertion(+) diff --git a/include/rootfs.mk b/include/rootfs.mk -index eb69a99..f8bc2ed 100644 +index f778aef..d049ca5 100644 --- a/include/rootfs.mk +++ b/include/rootfs.mk -@@ -100,6 +100,7 @@ define prepare_rootfs +@@ -126,6 +126,7 @@ define prepare_rootfs $(STAGING_DIR_HOST)/bin/upx --lzma --best "$(1)$$file" || true; \ done < "$(TOPDIR)/upx_list.txt"; \ fi diff --git a/openwrt/patch/generic/0007-rootfs-Add-support-for-local-kmod-installation-sourc.patch b/openwrt/patch/generic-25.12/0004-rootfs-Add-support-for-local-kmod-installation-sourc.patch similarity index 80% rename from openwrt/patch/generic/0007-rootfs-Add-support-for-local-kmod-installation-sourc.patch rename to openwrt/patch/generic-25.12/0004-rootfs-Add-support-for-local-kmod-installation-sourc.patch index 70a36db41..2375db580 100644 --- a/openwrt/patch/generic/0007-rootfs-Add-support-for-local-kmod-installation-sourc.patch +++ b/openwrt/patch/generic-25.12/0004-rootfs-Add-support-for-local-kmod-installation-sourc.patch @@ -1,7 +1,7 @@ -From 910f99cb7ede0303321b1062507681685b660925 Mon Sep 17 00:00:00 2001 +From 24cf67d16f2a819eeaa937e888ef974993c2455a Mon Sep 17 00:00:00 2001 From: sbwml -Date: Sun, 14 Jul 2024 12:43:06 +0800 -Subject: [PATCH 7/7] rootfs: Add support for local kmod installation sources +Date: Fri, 4 Oct 2024 10:48:29 +0800 +Subject: [PATCH 04/13] rootfs: Add support for local kmod installation sources * CONFIG_TARGET_ROOTFS_LOCAL_PACKAGES=y @@ -12,10 +12,10 @@ Signed-off-by: sbwml 2 files changed, 14 insertions(+) diff --git a/config/Config-images.in b/config/Config-images.in -index c32fa00..79d89f5 100644 +index fcc5fa5..8094136 100644 --- a/config/Config-images.in +++ b/config/Config-images.in -@@ -318,4 +318,12 @@ menu "Target Images" +@@ -356,4 +356,12 @@ menu "Target Images" across reboots. When enabled, /var/run will still be linked to /tmp/run. @@ -29,10 +29,10 @@ index c32fa00..79d89f5 100644 + endmenu diff --git a/include/rootfs.mk b/include/rootfs.mk -index f8bc2ed..06662d4 100644 +index d049ca5..cb19964 100644 --- a/include/rootfs.mk +++ b/include/rootfs.mk -@@ -101,6 +101,12 @@ define prepare_rootfs +@@ -127,6 +127,12 @@ define prepare_rootfs done < "$(TOPDIR)/upx_list.txt"; \ fi chmod 600 $(1)/etc/config/* diff --git a/openwrt/patch/generic/0003-kernel-Add-support-for-llvm-clang-compiler.patch b/openwrt/patch/generic-25.12/0005-kernel-Add-support-for-llvm-clang-compiler.patch similarity index 52% rename from openwrt/patch/generic/0003-kernel-Add-support-for-llvm-clang-compiler.patch rename to openwrt/patch/generic-25.12/0005-kernel-Add-support-for-llvm-clang-compiler.patch index cfb799e0d..32ae04a83 100644 --- a/openwrt/patch/generic/0003-kernel-Add-support-for-llvm-clang-compiler.patch +++ b/openwrt/patch/generic-25.12/0005-kernel-Add-support-for-llvm-clang-compiler.patch @@ -1,21 +1,20 @@ -From 59e101ebf7ac9ffe7b9dfd82a6e41050dbc5d13f Mon Sep 17 00:00:00 2001 +From 5019245030b26f3602095de80ab7fc43051e37a2 Mon Sep 17 00:00:00 2001 From: sbwml -Date: Mon, 6 May 2024 03:21:07 +0800 -Subject: [PATCH 3/7] kernel: Add support for llvm/clang compiler +Date: Fri, 4 Oct 2024 10:51:22 +0800 +Subject: [PATCH 05/13] kernel: Add support for llvm/clang compiler Signed-off-by: sbwml --- - config/Config-devel.in | 7 +++++++ - include/kernel-defaults.mk | 11 +++++++++++ - include/kernel.mk | 13 ++++++++++++- - include/package.mk | 4 ++++ - 4 files changed, 34 insertions(+), 1 deletion(-) + config/Config-devel.in | 7 +++++++ + include/kernel.mk | 13 ++++++++++++- + include/package.mk | 4 ++++ + 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/config/Config-devel.in b/config/Config-devel.in -index cbac91c..9079303 100644 +index 3fe78f3..46287bf 100644 --- a/config/Config-devel.in +++ b/config/Config-devel.in -@@ -95,6 +95,13 @@ menuconfig DEVEL +@@ -149,6 +149,13 @@ menuconfig DEVEL default "-falign-functions=32" if TARGET_bcm53xx default "" @@ -29,30 +28,8 @@ index cbac91c..9079303 100644 config EXTERNAL_KERNEL_TREE string "Use external kernel tree" if DEVEL default "" -diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk -index b17ff7f..b8a1479 100644 ---- a/include/kernel-defaults.mk -+++ b/include/kernel-defaults.mk -@@ -13,6 +13,17 @@ ifneq (,$(KERNEL_CC)) - KERNEL_MAKEOPTS += CC="$(KERNEL_CC)" - endif - -+ifneq (,$(findstring clang,$(KERNEL_CC))) -+ ifneq (,$(filter clang-%,$(KERNEL_CC))) -+ LLVM := $(subst clang-,,$(KERNEL_CC)) -+ LLVM_LLD := ld.lld-$(subst clang-,,$(KERNEL_CC)) -+ else -+ LLVM := 1 -+ LLVM_LLD := ld.lld -+ endif -+ KERNEL_MAKE_FLAGS += CC="$(KERNEL_CC)" LD="$(LLVM_LLD)" LD=ld.lld LLVM=$(LLVM) LLVM_IAS=1 -+endif -+ - export HOST_EXTRACFLAGS=-I$(STAGING_DIR_HOST)/include - - # defined in quilt.mk diff --git a/include/kernel.mk b/include/kernel.mk -index 3012eb8..1d85a8f 100644 +index 6ef7663..1648a6f 100644 --- a/include/kernel.mk +++ b/include/kernel.mk @@ -35,7 +35,7 @@ else @@ -64,9 +41,9 @@ index 3012eb8..1d85a8f 100644 KERNEL_CROSS?=$(TARGET_CROSS) endif -@@ -119,6 +119,17 @@ KERNEL_MAKE_FLAGS = \ - cmd_syscalls= \ - $(if $(__package_mk),KBUILD_EXTRA_SYMBOLS="$(wildcard $(PKG_SYMVERS_DIR)/*.symvers)") +@@ -125,6 +125,17 @@ ifneq (,$(KERNEL_CC)) + KERNEL_MAKE_FLAGS += CC="$(KERNEL_CC)" + endif +ifneq (,$(findstring clang,$(KERNEL_CC))) + ifneq (,$(filter clang-%,$(KERNEL_CC))) @@ -76,14 +53,14 @@ index 3012eb8..1d85a8f 100644 + LLVM := 1 + LLVM_LLD := ld.lld + endif -+ KERNEL_MAKE_FLAGS += CC="$(KERNEL_CC)" LD="$(LLVM_LLD)" LLVM=$(LLVM) LLVM_IAS=1 ++ KERNEL_MAKE_FLAGS += LD="$(LLVM_LLD)" LLVM=$(LLVM) LLVM_IAS=1 +endif + KERNEL_NOSTDINC_FLAGS = \ -nostdinc $(if $(DUMP),, -isystem $(shell $(TARGET_CC) -print-file-name=include)) diff --git a/include/package.mk b/include/package.mk -index c391d32..802e33a 100644 +index 5392bdf..5bcc4f3 100644 --- a/include/package.mk +++ b/include/package.mk @@ -23,6 +23,10 @@ else @@ -95,7 +72,7 @@ index c391d32..802e33a 100644 +endif + PKG_BUILD_FLAGS?= - __unknown_flags=$(filter-out no-iremap no-mips16 gc-sections no-gc-sections lto no-lto,$(PKG_BUILD_FLAGS)) + __unknown_flags=$(filter-out no-iremap no-mips16 gc-sections no-gc-sections lto no-lto no-mold,$(PKG_BUILD_FLAGS)) ifneq ($(__unknown_flags),) -- 2.43.5 diff --git a/openwrt/patch/generic/0006-build-kernel-add-out-of-tree-kernel-config.patch b/openwrt/patch/generic-25.12/0006-build-kernel-add-out-of-tree-kernel-config.patch similarity index 91% rename from openwrt/patch/generic/0006-build-kernel-add-out-of-tree-kernel-config.patch rename to openwrt/patch/generic-25.12/0006-build-kernel-add-out-of-tree-kernel-config.patch index c309684b6..2f2af1951 100644 --- a/openwrt/patch/generic/0006-build-kernel-add-out-of-tree-kernel-config.patch +++ b/openwrt/patch/generic-25.12/0006-build-kernel-add-out-of-tree-kernel-config.patch @@ -1,7 +1,7 @@ -From 3f003e591567a7640b2d61f0bffc11ac9ff7c7dc Mon Sep 17 00:00:00 2001 +From 687ed9e452ea3ce1508af0c661eba9019dc5d16d Mon Sep 17 00:00:00 2001 From: sbwml -Date: Sun, 7 Jul 2024 18:51:18 +0800 -Subject: [PATCH 6/7] build: kernel: add out-of-tree kernel config +Date: Fri, 4 Oct 2024 10:56:57 +0800 +Subject: [PATCH 06/13] build: kernel: add out-of-tree kernel config Signed-off-by: sbwml --- @@ -10,10 +10,10 @@ Signed-off-by: sbwml 2 files changed, 79 insertions(+) diff --git a/config/Config-devel.in b/config/Config-devel.in -index 9079303..2cbefc2 100644 +index 46287bf..a73832e 100644 --- a/config/Config-devel.in +++ b/config/Config-devel.in -@@ -102,6 +102,13 @@ menuconfig DEVEL +@@ -156,6 +156,13 @@ menuconfig DEVEL Enter C compiler name or full pathname i.e.: clang If not set, uses '$(TARGET_CC)' @@ -28,24 +28,24 @@ index 9079303..2cbefc2 100644 string "Use external kernel tree" if DEVEL default "" diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk -index b8a1479..408bf2f 100644 +index bdfdaaa..f1202bc 100644 --- a/include/kernel-defaults.mk +++ b/include/kernel-defaults.mk -@@ -110,6 +110,78 @@ define Kernel/SetNoInitramfs - grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config.set +@@ -107,6 +107,78 @@ define Kernel/SetNoInitramfs echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config.set echo '# CONFIG_INITRAMFS_FORCE is not set' >> $(LINUX_DIR)/.config.set + echo "# CONFIG_INITRAMFS_PRESERVE_MTIME is not set" >> $(LINUX_DIR)/.config.set +# CLANG + mv $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.old + grep -v CONFIG_LTO $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config.set +ifneq (,$(findstring clang,$(KERNEL_CC))) + echo 'CONFIG_LTO=y' >> $(LINUX_DIR)/.config.set + echo 'CONFIG_LTO_CLANG=y' >> $(LINUX_DIR)/.config.set -+ echo 'CONFIG_LTO_CLANG_FULL=y' >> $(LINUX_DIR)/.config.set ++ echo 'CONFIG_LTO_CLANG_THIN=y' >> $(LINUX_DIR)/.config.set + echo 'CONFIG_HAS_LTO_CLANG=y' >> $(LINUX_DIR)/.config.set + echo 'CONFIG_RANDSTRUCT_NONE=y' >> $(LINUX_DIR)/.config.set + echo '# CONFIG_CFI_CLANG is not set' >> $(LINUX_DIR)/.config.set -+ echo '# CONFIG_LTO_CLANG_THIN is not set' >> $(LINUX_DIR)/.config.set ++ echo '# CONFIG_LTO_CLANG_FULL is not set' >> $(LINUX_DIR)/.config.set + echo '# CONFIG_LTO_NONE is not set' >> $(LINUX_DIR)/.config.set + echo '# CONFIG_RANDSTRUCT_FULL is not set' >> $(LINUX_DIR)/.config.set + echo '# CONFIG_RELR is not set' >> $(LINUX_DIR)/.config.set diff --git a/openwrt/patch/generic-25.12/0007-include-kernel-add-miss-config-for-linux-6.11.patch b/openwrt/patch/generic-25.12/0007-include-kernel-add-miss-config-for-linux-6.11.patch new file mode 100644 index 000000000..12eb422dd --- /dev/null +++ b/openwrt/patch/generic-25.12/0007-include-kernel-add-miss-config-for-linux-6.11.patch @@ -0,0 +1,25 @@ +From 8a78c2447e9842da14227edbddd5989bc399a04a Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Fri, 4 Oct 2024 10:58:29 +0800 +Subject: [PATCH 07/13] include: kernel: add miss config for linux-6.11 + +Signed-off-by: sbwml +--- + include/kernel-defaults.mk | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk +index f1202bc..20b3a12 100644 +--- a/include/kernel-defaults.mk ++++ b/include/kernel-defaults.mk +@@ -107,6 +107,7 @@ define Kernel/SetNoInitramfs + echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config.set + echo '# CONFIG_INITRAMFS_FORCE is not set' >> $(LINUX_DIR)/.config.set + echo "# CONFIG_INITRAMFS_PRESERVE_MTIME is not set" >> $(LINUX_DIR)/.config.set ++ echo '# CONFIG_FSCACHE is not set' >> $(LINUX_DIR)/.config.set + # CLANG + mv $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.old + grep -v CONFIG_LTO $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config.set +-- +2.43.5 + diff --git a/openwrt/patch/generic/010-meson-add-platform-variable-to-cross-compilation-file.patch b/openwrt/patch/generic-25.12/0008-meson-add-platform-variable-to-cross-compilation-fil.patch similarity index 55% rename from openwrt/patch/generic/010-meson-add-platform-variable-to-cross-compilation-file.patch rename to openwrt/patch/generic-25.12/0008-meson-add-platform-variable-to-cross-compilation-fil.patch index 26b16ab4f..d6285e97a 100644 --- a/openwrt/patch/generic/010-meson-add-platform-variable-to-cross-compilation-file.patch +++ b/openwrt/patch/generic-25.12/0008-meson-add-platform-variable-to-cross-compilation-fil.patch @@ -1,19 +1,19 @@ -From ff6ba001d151cf07a25af592e30a28df0b50ff19 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbyn=C4=9Bk=20Kocur?= -Date: Wed, 31 Jan 2024 15:17:51 +0100 -Subject: [PATCH] meson: add platform variable to cross-compilation file +From 643e0796f188993c5caea1655c4836aae8307336 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Fri, 4 Oct 2024 10:58:54 +0800 +Subject: [PATCH 08/13] meson: add platform variable to cross-compilation file -This patch adds the "platform" variable to the meson cross-compilation file for the ARM SoC. This variable is necessary to compile DPDK framework on ARM SoCs.(https://doc.dpdk.org/guides/linux_gsg/cross_build_dpdk_for_arm64.html) +Signed-off-by: sbwml --- include/meson.mk | 1 + tools/meson/files/openwrt-cross.txt.in | 1 + 2 files changed, 2 insertions(+) diff --git a/include/meson.mk b/include/meson.mk -index 7d67dcf298b3e..5a7c7a36fb4de 100644 +index 62dc7bd..91cd7e6 100644 --- a/include/meson.mk +++ b/include/meson.mk -@@ -89,6 +89,7 @@ define Meson/CreateCrossFile +@@ -96,6 +96,7 @@ define Meson/CreateCrossFile -e "s|@LDFLAGS@|$(foreach FLAG,$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS),'$(FLAG)',)|" \ -e "s|@ARCH@|$(MESON_ARCH)|" \ -e "s|@CPU@|$(MESON_CPU)|" \ @@ -22,12 +22,15 @@ index 7d67dcf298b3e..5a7c7a36fb4de 100644 < $(MESON_DIR)/openwrt-cross.txt.in \ > $(1) diff --git a/tools/meson/files/openwrt-cross.txt.in b/tools/meson/files/openwrt-cross.txt.in -index ec4b027f1b783..e7cbcd0872111 100644 +index 836a0e5..cc83bc8 100644 --- a/tools/meson/files/openwrt-cross.txt.in +++ b/tools/meson/files/openwrt-cross.txt.in -@@ -22,4 +22,5 @@ cpu = '@CPU@' +@@ -24,4 +24,5 @@ cpu = '@CPU@' endian = '@ENDIAN@' [properties] +platform = '@PLAT@' needs_exe_wrapper = true +-- +2.43.5 + diff --git a/openwrt/patch/generic-25.12/0009-tools-squashfs4-enable-lz4-zstd-compression-support.patch b/openwrt/patch/generic-25.12/0009-tools-squashfs4-enable-lz4-zstd-compression-support.patch new file mode 100644 index 000000000..136dbb86a --- /dev/null +++ b/openwrt/patch/generic-25.12/0009-tools-squashfs4-enable-lz4-zstd-compression-support.patch @@ -0,0 +1,29 @@ +From 2959e6624a39b223527d654828022fe1d79ea6fc Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Sun, 21 Dec 2025 15:14:08 +0800 +Subject: [PATCH 09/13] tools: squashfs4: enable lz4 & zstd compression support + +Signed-off-by: sbwml +--- + tools/squashfs4/Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tools/squashfs4/Makefile b/tools/squashfs4/Makefile +index 6b88735..31c884a 100644 +--- a/tools/squashfs4/Makefile ++++ b/tools/squashfs4/Makefile +@@ -24,9 +24,9 @@ include $(INCLUDE_DIR)/host-build.mk + define Host/Compile + +$(HOST_MAKE_VARS) \ + $(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR)/squashfs-tools \ +- LZ4_SUPPORT=0 \ ++ LZ4_SUPPORT=1 \ + LZO_SUPPORT=0 \ +- ZSTD_SUPPORT=0 \ ++ ZSTD_SUPPORT=1 \ + GZIP_SUPPORT=1 \ + XZ_SUPPORT=1 \ + LZMA_XZ_SUPPORT=1 \ +-- +2.43.5 + diff --git a/openwrt/patch/generic-25.12/0010-kernel-add-PREEMPT_RT-support-for-aarch64-x86_64.patch b/openwrt/patch/generic-25.12/0010-kernel-add-PREEMPT_RT-support-for-aarch64-x86_64.patch new file mode 100644 index 000000000..5d730bab3 --- /dev/null +++ b/openwrt/patch/generic-25.12/0010-kernel-add-PREEMPT_RT-support-for-aarch64-x86_64.patch @@ -0,0 +1,37 @@ +From 5ebcd78dec9b1c9cd5ca4abaad34abe6a794058c Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Sat, 12 Oct 2024 08:36:46 +0800 +Subject: [PATCH 10/13] kernel: add PREEMPT_RT support for aarch64/x86_64 + +Signed-off-by: sbwml +--- + config/Config-kernel.in | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/config/Config-kernel.in b/config/Config-kernel.in +index 8692063..6c75038 100644 +--- a/config/Config-kernel.in ++++ b/config/Config-kernel.in +@@ -20,6 +20,19 @@ config KERNEL_BUILD_DOMAIN + returned by 'uname -a' on running systems. + If not set, uses system hostname at build time. + ++config KERNEL_PREEMPT_RT ++ bool "Fully Preemptible Kernel (Real-Time)" ++ depends on (aarch64 || x86_64) && LINUX_6_12 ++ help ++ This option turns the kernel into a real-time kernel by replacing ++ various locking primitives (spinlocks, rwlocks, etc.) with ++ preemptible priority-inheritance aware variants, enforcing ++ interrupt threading and introducing mechanisms to break up long ++ non-preemptible sections. This makes the kernel, except for very ++ low level and critical code paths (entry code, scheduler, low ++ level interrupt handling) fully preemptible and brings most ++ execution contexts under scheduler control. ++ + config KERNEL_PRINTK + bool "Enable support for printk" + default y +-- +2.43.5 + diff --git a/openwrt/patch/generic-25.12/0011-config-include-image-add-support-for-squashfs-zstd-c.patch b/openwrt/patch/generic-25.12/0011-config-include-image-add-support-for-squashfs-zstd-c.patch new file mode 100644 index 000000000..4cc620bc2 --- /dev/null +++ b/openwrt/patch/generic-25.12/0011-config-include-image-add-support-for-squashfs-zstd-c.patch @@ -0,0 +1,48 @@ +From 0649947c4c8d0b21bd40124c3d2bd004c0118549 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Thu, 29 May 2025 17:12:37 +0800 +Subject: [PATCH 11/13] config/include: image: add support for squashfs zstd + compression algorithm + +Signed-off-by: sbwml +--- + config/Config-images.in | 7 +++++++ + include/image.mk | 4 ++++ + 2 files changed, 11 insertions(+) + +diff --git a/config/Config-images.in b/config/Config-images.in +index 8094136..3721292 100644 +--- a/config/Config-images.in ++++ b/config/Config-images.in +@@ -194,6 +194,13 @@ menu "Target Images" + Specify the number of parallel small file reader threads + (for files less than the squashfs block size). + ++ config TARGET_ROOTFS_SQUASHFS_ZSTD ++ bool "SquashFS Zstd" ++ depends on TARGET_ROOTFS_SQUASHFS ++ default n ++ help ++ Build a squashfs root filesystem using zstd compression. ++ + menuconfig TARGET_ROOTFS_UBIFS + bool "ubifs" + default y if USES_UBIFS +diff --git a/include/image.mk b/include/image.mk +index 38005b2..078d2f7 100644 +--- a/include/image.mk ++++ b/include/image.mk +@@ -100,6 +100,10 @@ ifeq ($(CONFIG_SQUASHFS_XZ),y) + SQUASHFSCOMP := xz $(LZMA_XZ_OPTIONS) $(BCJ_FILTER) + endif + ++ifeq ($(CONFIG_TARGET_ROOTFS_SQUASHFS_ZSTD),y) ++ SQUASHFSCOMP := zstd -Xcompression-level 22 ++endif ++ + JFFS2_BLOCKSIZE ?= 64k 128k + + EROFS_PCLUSTERSIZE = $(shell echo $$(($(CONFIG_TARGET_EROFS_PCLUSTER_SIZE)*1024))) +-- +2.43.5 + diff --git a/openwrt/patch/generic-25.12/0012-include-kernel-Always-collect-module-symvers.patch b/openwrt/patch/generic-25.12/0012-include-kernel-Always-collect-module-symvers.patch new file mode 100644 index 000000000..d14365c62 --- /dev/null +++ b/openwrt/patch/generic-25.12/0012-include-kernel-Always-collect-module-symvers.patch @@ -0,0 +1,34 @@ +From 13032f8109b35d761d61d0631b73b305299078f4 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Sun, 26 Oct 2025 16:12:19 +0800 +Subject: [PATCH 12/13] include: kernel: Always collect module symvers + +Signed-off-by: sbwml +--- + include/kernel.mk | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +diff --git a/include/kernel.mk b/include/kernel.mk +index 1648a6f..f63f367 100644 +--- a/include/kernel.mk ++++ b/include/kernel.mk +@@ -160,13 +160,9 @@ PKG_EXTMOD_SUBDIRS ?= . + PKG_SYMVERS_DIR = $(KERNEL_BUILD_DIR)/symvers + + define collect_module_symvers +- for subdir in $(PKG_EXTMOD_SUBDIRS); do \ +- realdir=$$$$(readlink -f $(PKG_BUILD_DIR)); \ +- grep -F $(PKG_BUILD_DIR) $(PKG_BUILD_DIR)/$$$$subdir/Module.symvers >> $(PKG_BUILD_DIR)/Module.symvers.tmp; \ +- [ "$(PKG_BUILD_DIR)" = "$$$$realdir" ] || \ +- grep -F $$$$realdir $(PKG_BUILD_DIR)/$$$$subdir/Module.symvers >> $(PKG_BUILD_DIR)/Module.symvers.tmp; \ +- done; \ +- sort -u $(PKG_BUILD_DIR)/Module.symvers.tmp > $(PKG_BUILD_DIR)/Module.symvers; \ ++ sort -u $(PKG_BUILD_DIR)/Module.symvers > $(PKG_BUILD_DIR)/Module.symvers.tmp; \ ++ rm -f $(PKG_BUILD_DIR)/Module.symvers; \ ++ mv $(PKG_BUILD_DIR)/Module.symvers.tmp $(PKG_BUILD_DIR)/Module.symvers; \ + mkdir -p $(PKG_SYMVERS_DIR); \ + mv $(PKG_BUILD_DIR)/Module.symvers $(PKG_SYMVERS_DIR)/$(PKG_NAME).symvers + endef +-- +2.43.5 + diff --git a/openwrt/patch/generic-25.12/0013-toolchain-gcc-add-support-for-GCC-16.patch b/openwrt/patch/generic-25.12/0013-toolchain-gcc-add-support-for-GCC-16.patch new file mode 100644 index 000000000..98f61f52c --- /dev/null +++ b/openwrt/patch/generic-25.12/0013-toolchain-gcc-add-support-for-GCC-16.patch @@ -0,0 +1,887 @@ +From a9d317aa12af81e7c829ce9a01abcd29cb9f8cc1 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Mon, 11 May 2026 15:40:54 +0800 +Subject: [PATCH 1/2] toolchain: gcc: add support for GCC-16 + +Signed-off-by: sbwml +--- + toolchain/gcc/Config.in | 3 + + toolchain/gcc/Config.version | 5 + + toolchain/gcc/common.mk | 4 + + .../patches-16.x/002-case_insensitive.patch | 24 +++ + ...t-choke-when-building-32bit-on-64bit.patch | 13 ++ + .../gcc/patches-16.x/010-documentation.patch | 35 +++++ + .../patches-16.x/110-Fix-MIPS-PR-84790.patch | 20 +++ + .../gcc/patches-16.x/230-musl_libssp.patch | 13 ++ + .../300-mips_Os_cpu_rtx_cost_model.patch | 21 +++ + .../800-arm_v5te_no_ldrd_strd.patch | 11 ++ + .../810-arm-softfloat-libgcc.patch | 33 ++++ + .../gcc/patches-16.x/820-libgcc_pic.patch | 44 ++++++ + .../patches-16.x/830-aarch64-libatomic.patch | 32 ++++ + .../840-armv4_pass_fix-v4bx_to_ld.patch | 28 ++++ + .../patches-16.x/850-use_shared_libgcc.patch | 54 +++++++ + .../patches-16.x/851-libgcc_no_compat.patch | 22 +++ + .../patches-16.x/870-ppc_no_crtsavres.patch | 11 ++ + .../gcc/patches-16.x/881-no_tm_section.patch | 11 ++ + .../gcc/patches-16.x/900-bad-mips16-crt.patch | 9 ++ + .../gcc/patches-16.x/910-mbsd_multi.patch | 146 ++++++++++++++++++ + .../920-specs_nonfatal_getenv.patch | 22 +++ + ...mpilation-when-making-cross-compiler.patch | 67 ++++++++ + .../970-macos_arm64-building-fix.patch | 45 ++++++ + 23 files changed, 673 insertions(+) + create mode 100644 toolchain/gcc/patches-16.x/002-case_insensitive.patch + create mode 100644 toolchain/gcc/patches-16.x/003-dont-choke-when-building-32bit-on-64bit.patch + create mode 100644 toolchain/gcc/patches-16.x/010-documentation.patch + create mode 100644 toolchain/gcc/patches-16.x/110-Fix-MIPS-PR-84790.patch + create mode 100644 toolchain/gcc/patches-16.x/230-musl_libssp.patch + create mode 100644 toolchain/gcc/patches-16.x/300-mips_Os_cpu_rtx_cost_model.patch + create mode 100644 toolchain/gcc/patches-16.x/800-arm_v5te_no_ldrd_strd.patch + create mode 100644 toolchain/gcc/patches-16.x/810-arm-softfloat-libgcc.patch + create mode 100644 toolchain/gcc/patches-16.x/820-libgcc_pic.patch + create mode 100644 toolchain/gcc/patches-16.x/830-aarch64-libatomic.patch + create mode 100644 toolchain/gcc/patches-16.x/840-armv4_pass_fix-v4bx_to_ld.patch + create mode 100644 toolchain/gcc/patches-16.x/850-use_shared_libgcc.patch + create mode 100644 toolchain/gcc/patches-16.x/851-libgcc_no_compat.patch + create mode 100644 toolchain/gcc/patches-16.x/870-ppc_no_crtsavres.patch + create mode 100644 toolchain/gcc/patches-16.x/881-no_tm_section.patch + create mode 100644 toolchain/gcc/patches-16.x/900-bad-mips16-crt.patch + create mode 100644 toolchain/gcc/patches-16.x/910-mbsd_multi.patch + create mode 100644 toolchain/gcc/patches-16.x/920-specs_nonfatal_getenv.patch + create mode 100644 toolchain/gcc/patches-16.x/960-gotools-fix-compilation-when-making-cross-compiler.patch + create mode 100644 toolchain/gcc/patches-16.x/970-macos_arm64-building-fix.patch + +diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in +index d296249..68c91c1 100644 +--- a/toolchain/gcc/Config.in ++++ b/toolchain/gcc/Config.in +@@ -17,6 +17,9 @@ choice + + config GCC_USE_VERSION_15 + bool "gcc 15.x" ++ ++ config GCC_USE_VERSION_16 ++ bool "gcc 16.x" + endchoice + + config GCC_USE_GRAPHITE +diff --git a/toolchain/gcc/Config.version b/toolchain/gcc/Config.version +index 5960fe3..4f94ac7 100644 +--- a/toolchain/gcc/Config.version ++++ b/toolchain/gcc/Config.version +@@ -10,12 +10,17 @@ config GCC_VERSION_15 + default y if GCC_USE_VERSION_15 + bool + ++config GCC_VERSION_16 ++ default y if GCC_USE_VERSION_16 ++ bool ++ + config GCC_VERSION + string + default EXTERNAL_GCC_VERSION if EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN + default "12.3.0" if GCC_VERSION_12 + default "13.4.0" if GCC_VERSION_13 + default "15.2.0" if GCC_VERSION_15 ++ default "16.1.0" if GCC_VERSION_16 + default "14.3.0" + + config GCC_USE_DEFAULT_VERSION +diff --git a/toolchain/gcc/common.mk b/toolchain/gcc/common.mk +index 8bd898e..9928e1f 100644 +--- a/toolchain/gcc/common.mk ++++ b/toolchain/gcc/common.mk +@@ -50,6 +50,10 @@ ifeq ($(PKG_VERSION),15.2.0) + PKG_HASH:=438fd996826b0c82485a29da03a72d71d6e3541a83ec702df4271f6fe025d24e + endif + ++ifeq ($(PKG_VERSION),16.1.0) ++ PKG_HASH:=50efb4d94c3397aff3b0d61a5abd748b4dd31d9d3f2ab7be05b171d36a510f79 ++endif ++ + PATCH_DIR=../patches-$(GCC_MAJOR_VERSION).x + + BUGURL=http://bugs.openwrt.org/ +diff --git a/toolchain/gcc/patches-16.x/002-case_insensitive.patch b/toolchain/gcc/patches-16.x/002-case_insensitive.patch +new file mode 100644 +index 0000000..409497e +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/002-case_insensitive.patch +@@ -0,0 +1,24 @@ ++commit 81cc26c706b2bc8c8c1eb1a322e5c5157900836e ++Author: Felix Fietkau ++Date: Sun Oct 19 21:45:51 2014 +0000 ++ ++ gcc: do not assume that the Mac OS X filesystem is case insensitive ++ ++ Signed-off-by: Felix Fietkau ++ ++ SVN-Revision: 42973 ++ ++--- a/include/filenames.h +++++ b/include/filenames.h ++@@ -44,11 +44,6 @@ extern "C" { ++ # define IS_DIR_SEPARATOR(c) IS_DOS_DIR_SEPARATOR (c) ++ # define IS_ABSOLUTE_PATH(f) IS_DOS_ABSOLUTE_PATH (f) ++ #else /* not DOSish */ ++-# if defined(__APPLE__) ++-# ifndef HAVE_CASE_INSENSITIVE_FILE_SYSTEM ++-# define HAVE_CASE_INSENSITIVE_FILE_SYSTEM 1 ++-# endif ++-# endif /* __APPLE__ */ ++ # define HAS_DRIVE_SPEC(f) (0) ++ # define IS_DIR_SEPARATOR(c) IS_UNIX_DIR_SEPARATOR (c) ++ # define IS_ABSOLUTE_PATH(f) IS_UNIX_ABSOLUTE_PATH (f) +diff --git a/toolchain/gcc/patches-16.x/003-dont-choke-when-building-32bit-on-64bit.patch b/toolchain/gcc/patches-16.x/003-dont-choke-when-building-32bit-on-64bit.patch +new file mode 100644 +index 0000000..c41f35e +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/003-dont-choke-when-building-32bit-on-64bit.patch +@@ -0,0 +1,13 @@ ++--- a/gcc/real.h +++++ b/gcc/real.h ++@@ -77,8 +77,10 @@ struct GTY(()) real_value { ++ + (REAL_VALUE_TYPE_SIZE%HOST_BITS_PER_WIDE_INT ? 1 : 0)) /* round up */ ++ ++ /* Verify the guess. */ +++#ifndef __LP64__ ++ extern char test_real_width ++ [sizeof (REAL_VALUE_TYPE) <= REAL_WIDTH * sizeof (HOST_WIDE_INT) ? 1 : -1]; +++#endif ++ ++ /* Calculate the format for CONST_DOUBLE. We need as many slots as ++ are necessary to overlay a REAL_VALUE_TYPE on them. This could be +diff --git a/toolchain/gcc/patches-16.x/010-documentation.patch b/toolchain/gcc/patches-16.x/010-documentation.patch +new file mode 100644 +index 0000000..34d9f41 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/010-documentation.patch +@@ -0,0 +1,35 @@ ++commit 098bd91f5eae625c7d2ee621e10930fc4434e5e2 ++Author: Luka Perkov ++Date: Tue Feb 26 16:16:33 2013 +0000 ++ ++ gcc: don't build documentation ++ ++ This closes #13039. ++ ++ Signed-off-by: Luka Perkov ++ ++ SVN-Revision: 35807 ++ ++--- a/gcc/Makefile.in +++++ b/gcc/Makefile.in ++@@ -3846,18 +3846,10 @@ doc/gcc.info: $(TEXI_GCC_FILES) ++ doc/gccint.info: $(TEXI_GCCINT_FILES) ++ doc/cppinternals.info: $(TEXI_CPPINT_FILES) ++ ++-doc/%.info: %.texi ++- if [ x$(BUILD_INFO) = xinfo ]; then \ ++- $(MAKEINFO) $(MAKEINFOFLAGS) -I . -I $(gcc_docdir) \ ++- -I $(gcc_docdir)/include -o $@ $<; \ ++- fi +++doc/%.info: ++ ++ # Duplicate entry to handle renaming of gccinstall.info ++-doc/gccinstall.info: $(TEXI_GCCINSTALL_FILES) ++- if [ x$(BUILD_INFO) = xinfo ]; then \ ++- $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \ ++- -I $(gcc_docdir)/include -o $@ $<; \ ++- fi +++doc/gccinstall.info: ++ ++ doc/cpp.dvi: $(TEXI_CPP_FILES) ++ doc/gcc.dvi: $(TEXI_GCC_FILES) +diff --git a/toolchain/gcc/patches-16.x/110-Fix-MIPS-PR-84790.patch b/toolchain/gcc/patches-16.x/110-Fix-MIPS-PR-84790.patch +new file mode 100644 +index 0000000..7d2b4a1 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/110-Fix-MIPS-PR-84790.patch +@@ -0,0 +1,20 @@ ++Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84790. ++MIPS16 functions have a static assembler prologue which clobbers ++registers v0 and v1. Add these register clobbers to function call ++instructions. ++ ++--- a/gcc/config/mips/mips.cc +++++ b/gcc/config/mips/mips.cc ++@@ -3307,6 +3307,12 @@ mips_emit_call_insn (rtx pattern, rtx or ++ emit_insn (gen_update_got_version ()); ++ } ++ +++ if (TARGET_MIPS16 && TARGET_USE_GOT) +++ { +++ clobber_reg (&CALL_INSN_FUNCTION_USAGE (insn), MIPS16_PIC_TEMP); +++ clobber_reg (&CALL_INSN_FUNCTION_USAGE (insn), MIPS_PROLOGUE_TEMP (word_mode)); +++ } +++ ++ if (TARGET_MIPS16 ++ && TARGET_EXPLICIT_RELOCS ++ && TARGET_CALL_CLOBBERED_GP) +diff --git a/toolchain/gcc/patches-16.x/230-musl_libssp.patch b/toolchain/gcc/patches-16.x/230-musl_libssp.patch +new file mode 100644 +index 0000000..ec14131 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/230-musl_libssp.patch +@@ -0,0 +1,13 @@ ++--- a/gcc/gcc.cc +++++ b/gcc/gcc.cc ++@@ -1018,7 +1018,9 @@ proper position among the other output f ++ #endif ++ ++ #ifndef LINK_SSP_SPEC ++-#ifdef TARGET_LIBC_PROVIDES_SSP +++#if DEFAULT_LIBC == LIBC_MUSL +++#define LINK_SSP_SPEC "-lssp_nonshared" +++#elif defined(TARGET_LIBC_PROVIDES_SSP) ++ #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ ++ "|fstack-protector-strong|fstack-protector-explicit:}" ++ #else +diff --git a/toolchain/gcc/patches-16.x/300-mips_Os_cpu_rtx_cost_model.patch b/toolchain/gcc/patches-16.x/300-mips_Os_cpu_rtx_cost_model.patch +new file mode 100644 +index 0000000..1048cfd +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/300-mips_Os_cpu_rtx_cost_model.patch +@@ -0,0 +1,21 @@ ++commit ecf7671b769fe96f7b5134be442089f8bdba55d2 ++Author: Felix Fietkau ++Date: Thu Aug 4 20:29:45 2016 +0200 ++ ++gcc: add a patch to generate better code with Os on mips ++ ++Also happens to reduce compressed code size a bit ++ ++Signed-off-by: Felix Fietkau ++ ++--- a/gcc/config/mips/mips.cc +++++ b/gcc/config/mips/mips.cc ++@@ -20626,7 +20626,7 @@ mips_option_override (void) ++ flag_pcc_struct_return = 0; ++ ++ /* Decide which rtx_costs structure to use. */ ++- if (optimize_size) +++ if (0 && optimize_size) ++ mips_cost = &mips_rtx_cost_optimize_size; ++ else ++ mips_cost = &mips_rtx_cost_data[mips_tune]; +diff --git a/toolchain/gcc/patches-16.x/800-arm_v5te_no_ldrd_strd.patch b/toolchain/gcc/patches-16.x/800-arm_v5te_no_ldrd_strd.patch +new file mode 100644 +index 0000000..bae244c +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/800-arm_v5te_no_ldrd_strd.patch +@@ -0,0 +1,11 @@ ++--- a/gcc/config/arm/arm.h +++++ b/gcc/config/arm/arm.h ++@@ -158,7 +158,7 @@ emission of floating point pcs attribute ++ /* Thumb-1 only. */ ++ #define TARGET_THUMB1_ONLY (TARGET_THUMB1 && !arm_arch_notm) ++ ++-#define TARGET_LDRD (arm_arch5te && ARM_DOUBLEWORD_ALIGN \ +++#define TARGET_LDRD (arm_arch6 && ARM_DOUBLEWORD_ALIGN \ ++ && !TARGET_THUMB1) ++ ++ #define TARGET_CRC32 (arm_arch_crc) +diff --git a/toolchain/gcc/patches-16.x/810-arm-softfloat-libgcc.patch b/toolchain/gcc/patches-16.x/810-arm-softfloat-libgcc.patch +new file mode 100644 +index 0000000..5c9d86a +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/810-arm-softfloat-libgcc.patch +@@ -0,0 +1,33 @@ ++commit 8570c4be394cff7282f332f97da2ff569a927ddb ++Author: Imre Kaloz ++Date: Wed Feb 2 20:06:12 2011 +0000 ++ ++ fixup arm soft-float symbols ++ ++ SVN-Revision: 25325 ++ ++--- a/libgcc/config/arm/t-linux +++++ b/libgcc/config/arm/t-linux ++@@ -1,6 +1,10 @@ ++ LIB1ASMSRC = arm/lib1funcs.S ++ LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx _clzsi2 _clzdi2 \ ++- _ctzsi2 _arm_addsubdf3 _arm_addsubsf3 +++ _ctzsi2 _arm_addsubdf3 _arm_addsubsf3 \ +++ _arm_negdf2 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \ +++ _arm_fixdfsi _arm_fixunsdfsi _arm_truncdfsf2 \ +++ _arm_negsf2 _arm_muldivsf3 _arm_cmpsf2 _arm_unordsf2 \ +++ _arm_fixsfsi _arm_fixunssfsi ++ ++ # Just for these, we omit the frame pointer since it makes such a big ++ # difference. ++--- a/gcc/config/arm/linux-elf.h +++++ b/gcc/config/arm/linux-elf.h ++@@ -58,8 +58,6 @@ ++ %{shared:-lc} \ ++ %{!shared:%{profile:-lc_p}%{!profile:-lc}}" ++ ++-#define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc" ++- ++ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" ++ ++ #define LINUX_TARGET_LINK_SPEC "%{h*} \ +diff --git a/toolchain/gcc/patches-16.x/820-libgcc_pic.patch b/toolchain/gcc/patches-16.x/820-libgcc_pic.patch +new file mode 100644 +index 0000000..f6aa204 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/820-libgcc_pic.patch +@@ -0,0 +1,44 @@ ++commit c96312958c0621e72c9b32da5bc224ffe2161384 ++Author: Felix Fietkau ++Date: Mon Oct 19 23:26:09 2009 +0000 ++ ++ gcc: create a proper libgcc_pic.a static library for relinking (4.3.3+ for now, backport will follow) ++ ++ SVN-Revision: 18086 ++ ++--- a/libgcc/Makefile.in +++++ b/libgcc/Makefile.in ++@@ -946,11 +946,12 @@ $(libgcov-driver-objects): %$(objext): $ ++ ++ # Static libraries. ++ libgcc.a: $(libgcc-objects) +++libgcc_pic.a: $(libgcc-s-objects) ++ libgcov.a: $(libgcov-objects) ++ libunwind.a: $(libunwind-objects) ++ libgcc_eh.a: $(libgcc-eh-objects) ++ ++-libgcc.a libgcov.a libunwind.a libgcc_eh.a: +++libgcc.a libgcov.a libunwind.a libgcc_eh.a libgcc_pic.a: ++ -rm -f $@ ++ ++ objects="$(objects)"; \ ++@@ -974,7 +975,7 @@ all: libunwind.a ++ endif ++ ++ ifeq ($(enable_shared),yes) ++-all: libgcc_eh.a libgcc_s$(SHLIB_EXT) +++all: libgcc_eh.a libgcc_pic.a libgcc_s$(SHLIB_EXT) ++ ifneq ($(LIBUNWIND),) ++ all: libunwind$(SHLIB_EXT) ++ libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT) ++@@ -1183,6 +1184,10 @@ install-shared: ++ chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a ++ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a ++ +++ $(INSTALL_DATA) libgcc_pic.a $(mapfile) $(DESTDIR)$(inst_libdir)/ +++ chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_pic.a +++ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_pic.a +++ ++ $(subst @multilib_dir@,$(MULTIDIR),$(subst \ ++ @shlib_base_name@,libgcc_s,$(subst \ ++ @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL)))) +diff --git a/toolchain/gcc/patches-16.x/830-aarch64-libatomic.patch b/toolchain/gcc/patches-16.x/830-aarch64-libatomic.patch +new file mode 100644 +index 0000000..4779ef8 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/830-aarch64-libatomic.patch +@@ -0,0 +1,32 @@ ++libatomic: Do not enforce march on aarch64 ++ ++Inspired by The Yocto Project [1]. ++ ++[1] https://github.com/yoctoproject/poky/blob/51192a79f1717786dda42776f916c3d97ada7971/meta/recipes-devtools/gcc/gcc/0022-libatomic-Do-not-enforce-march-on-aarch64.patch ++ ++Signed-off-by: Konstantin Demin ++ ++ libatomic/Makefile.am | 1 - ++ libatomic/Makefile.in | 1 - ++ 2 files changed, 2 deletions(-) ++ ++--- a/libatomic/Makefile.am +++++ b/libatomic/Makefile.am ++@@ -133,7 +133,6 @@ libatomic_la_LIBADD = $(foreach s,$(SIZE ++ ## On a target-specific basis, include alternates to be selected by IFUNC. ++ if HAVE_IFUNC ++ if ARCH_AARCH64_LINUX ++-IFUNC_OPTIONS = -march=armv8-a+lse ++ libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS))) ++ ++ endif ++--- a/libatomic/Makefile.in +++++ b/libatomic/Makefile.in ++@@ -470,7 +470,6 @@ libatomic_la_LDFLAGS = $(libatomic_versi ++ @PARTIAL_VXWORKS_FALSE@ _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) \ ++ @PARTIAL_VXWORKS_FALSE@ $(am__append_2) $(am__append_3) \ ++ @PARTIAL_VXWORKS_FALSE@ $(am__append_4) $(am__append_5) ++-@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@IFUNC_OPTIONS = -march=armv8-a+lse ++ @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@IFUNC_OPTIONS = -march=armv7-a+fp -DHAVE_KERNEL64 ++ @ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@IFUNC_OPTIONS = -march=i586 ++ @ARCH_LOONGARCH_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@IFUNC_OPTIONS = -mlsx|-mscq +diff --git a/toolchain/gcc/patches-16.x/840-armv4_pass_fix-v4bx_to_ld.patch b/toolchain/gcc/patches-16.x/840-armv4_pass_fix-v4bx_to_ld.patch +new file mode 100644 +index 0000000..e3cb616 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/840-armv4_pass_fix-v4bx_to_ld.patch +@@ -0,0 +1,28 @@ ++commit 7edc8ca5456d9743dd0075eb3cc5b04f4f24c8cc ++Author: Imre Kaloz ++Date: Wed Feb 2 19:34:36 2011 +0000 ++ ++ add armv4 fixup patches ++ ++ SVN-Revision: 25322 ++ ++ ++--- a/gcc/config/arm/linux-eabi.h +++++ b/gcc/config/arm/linux-eabi.h ++@@ -91,10 +91,15 @@ ++ #define MUSL_DYNAMIC_LINKER \ ++ "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}%{mfdpic:-fdpic}.so.1" ++ +++/* For armv4 we pass --fix-v4bx to linker to support EABI */ +++#undef TARGET_FIX_V4BX_SPEC +++#define TARGET_FIX_V4BX_SPEC " %{mcpu=arm8|mcpu=arm810|mcpu=strongarm*"\ +++ "|march=armv4|mcpu=fa526|mcpu=fa626:--fix-v4bx}" +++ ++ /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to ++ use the GNU/Linux version, not the generic BPABI version. */ ++ #undef LINK_SPEC ++-#define LINK_SPEC EABI_LINK_SPEC \ +++#define LINK_SPEC EABI_LINK_SPEC TARGET_FIX_V4BX_SPEC \ ++ LINUX_OR_ANDROID_LD (LINUX_TARGET_LINK_SPEC, \ ++ LINUX_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC) ++ +diff --git a/toolchain/gcc/patches-16.x/850-use_shared_libgcc.patch b/toolchain/gcc/patches-16.x/850-use_shared_libgcc.patch +new file mode 100644 +index 0000000..210c790 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/850-use_shared_libgcc.patch +@@ -0,0 +1,54 @@ ++commit dcfc40358b5a3cae7320c17f8d1cebd5ad5540cd ++Author: Felix Fietkau ++Date: Sun Feb 12 20:25:47 2012 +0000 ++ ++ gcc 4.6: port over the missing patch 850-use_shared_libgcc.patch to prevent libgcc crap from leaking into every single binary ++ ++ SVN-Revision: 30486 ++--- a/gcc/config/arm/linux-eabi.h +++++ b/gcc/config/arm/linux-eabi.h ++@@ -132,10 +132,6 @@ ++ "%{Ofast|ffast-math|funsafe-math-optimizations:%{!shared:crtfastmath.o%s}} " \ ++ LINUX_OR_ANDROID_LD (GNU_USER_TARGET_ENDFILE_SPEC, ANDROID_ENDFILE_SPEC) ++ ++-/* Use the default LIBGCC_SPEC, not the version in linux-elf.h, as we ++- do not use -lfloat. */ ++-#undef LIBGCC_SPEC ++- ++ /* Clear the instruction cache from `beg' to `end'. This is ++ implemented in lib1funcs.S, so ensure an error if this definition ++ is used. */ ++--- a/gcc/config/linux.h +++++ b/gcc/config/linux.h ++@@ -58,6 +58,10 @@ see the files COPYING3 and COPYING.RUNTI ++ builtin_assert ("system=posix"); \ ++ } while (0) ++ +++#ifndef LIBGCC_SPEC +++#define LIBGCC_SPEC "%{static|static-libgcc:-lgcc}%{!static:%{!static-libgcc:-lgcc_s}}" +++#endif +++ ++ /* Determine which dynamic linker to use depending on whether GLIBC or ++ uClibc or Bionic or musl is the default C library and whether ++ -muclibc or -mglibc or -mbionic or -mmusl has been passed to change ++--- a/libgcc/mkmap-symver.awk +++++ b/libgcc/mkmap-symver.awk ++@@ -136,5 +136,5 @@ function output(lib) { ++ else if (inherit[lib]) ++ printf("} %s;\n", inherit[lib]); ++ else ++- printf ("\n local:\n\t*;\n};\n"); +++ printf ("\n\t*;\n};\n"); ++ } ++--- a/gcc/config/rs6000/linux.h +++++ b/gcc/config/rs6000/linux.h ++@@ -70,6 +70,9 @@ ++ #undef CPP_OS_DEFAULT_SPEC ++ #define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)" ++ +++#undef LIBGCC_SPEC +++#define LIBGCC_SPEC "%{!static:%{!static-libgcc:-lgcc_s}} -lgcc" +++ ++ #undef LINK_SHLIB_SPEC ++ #define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}} \ ++ %{static-pie:-static -pie --no-dynamic-linker -z text}" +diff --git a/toolchain/gcc/patches-16.x/851-libgcc_no_compat.patch b/toolchain/gcc/patches-16.x/851-libgcc_no_compat.patch +new file mode 100644 +index 0000000..d710e40 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/851-libgcc_no_compat.patch +@@ -0,0 +1,22 @@ ++commit 64661de100da1ec1061ef3e5e400285dce115e6b ++Author: Felix Fietkau ++Date: Sun May 10 13:16:35 2015 +0000 ++ ++ gcc: add some size optimization patches ++ ++ Signed-off-by: Felix Fietkau ++ ++ SVN-Revision: 45664 ++ ++--- a/libgcc/config/t-libunwind +++++ b/libgcc/config/t-libunwind ++@@ -2,8 +2,7 @@ ++ ++ HOST_LIBGCC2_CFLAGS += -DUSE_GAS_SYMVER ++ ++-LIB2ADDEH = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c \ ++- $(srcdir)/unwind-compat.c $(srcdir)/unwind-dw2-fde-compat.c +++LIB2ADDEH = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c ++ LIB2ADDEHSTATIC = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c ++ ++ # Override the default value from t-slibgcc-elf-ver and mention -lunwind +diff --git a/toolchain/gcc/patches-16.x/870-ppc_no_crtsavres.patch b/toolchain/gcc/patches-16.x/870-ppc_no_crtsavres.patch +new file mode 100644 +index 0000000..0dca688 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/870-ppc_no_crtsavres.patch +@@ -0,0 +1,11 @@ ++--- a/gcc/config/rs6000/rs6000-logue.cc +++++ b/gcc/config/rs6000/rs6000-logue.cc ++@@ -344,7 +344,7 @@ rs6000_savres_strategy (rs6000_stack_t * ++ /* Define cutoff for using out-of-line functions to save registers. */ ++ if (DEFAULT_ABI == ABI_V4 || TARGET_ELF) ++ { ++- if (!optimize_size) +++ if (1) ++ { ++ strategy |= SAVE_INLINE_FPRS | REST_INLINE_FPRS; ++ strategy |= SAVE_INLINE_GPRS | REST_INLINE_GPRS; +diff --git a/toolchain/gcc/patches-16.x/881-no_tm_section.patch b/toolchain/gcc/patches-16.x/881-no_tm_section.patch +new file mode 100644 +index 0000000..2029910 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/881-no_tm_section.patch +@@ -0,0 +1,11 @@ ++--- a/libgcc/crtstuff.c +++++ b/libgcc/crtstuff.c ++@@ -152,7 +152,7 @@ call_ ## FUNC (void) \ ++ #endif ++ ++ #if !defined(USE_TM_CLONE_REGISTRY) && defined(OBJECT_FORMAT_ELF) ++-# define USE_TM_CLONE_REGISTRY 1 +++# define USE_TM_CLONE_REGISTRY 0 ++ #elif !defined(USE_TM_CLONE_REGISTRY) ++ # define USE_TM_CLONE_REGISTRY 0 ++ #endif +diff --git a/toolchain/gcc/patches-16.x/900-bad-mips16-crt.patch b/toolchain/gcc/patches-16.x/900-bad-mips16-crt.patch +new file mode 100644 +index 0000000..b355545 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/900-bad-mips16-crt.patch +@@ -0,0 +1,9 @@ ++--- a/libgcc/config/mips/t-mips16 +++++ b/libgcc/config/mips/t-mips16 ++@@ -42,3 +42,6 @@ SYNC_CFLAGS = -mno-mips16 ++ ++ # Version these symbols if building libgcc.so. ++ SHLIB_MAPFILES += $(srcdir)/config/mips/libgcc-mips16.ver +++ +++CRTSTUFF_T_CFLAGS += -mno-mips16 +++CRTSTUFF_T_CFLAGS_S += -mno-mips16 +diff --git a/toolchain/gcc/patches-16.x/910-mbsd_multi.patch b/toolchain/gcc/patches-16.x/910-mbsd_multi.patch +new file mode 100644 +index 0000000..23cd6ef +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/910-mbsd_multi.patch +@@ -0,0 +1,146 @@ ++commit 99368862e44740ff4fd33760893f04e14f9dbdf1 ++Author: Felix Fietkau ++Date: Tue Jul 31 00:52:27 2007 +0000 ++ ++ Port the mbsd_multi patch from freewrt, which adds -fhonour-copts. This will emit warnings in packages that don't use our target cflags properly ++ ++ SVN-Revision: 8256 ++ ++ This patch brings over a feature from MirBSD: ++ * -fhonour-copts ++ If this option is not given, it's warned (depending ++ on environment variables). This is to catch errors ++ of misbuilt packages which override CFLAGS themselves. ++ ++ This patch was authored by Thorsten Glaser ++ with copyright assignment to the FSF in effect. ++ ++--- a/gcc/c-family/c-opts.cc +++++ b/gcc/c-family/c-opts.cc ++@@ -110,6 +110,9 @@ static size_t include_cursor; ++ /* Whether any standard preincluded header has been preincluded. */ ++ static bool done_preinclude; ++ +++/* Check if a port honours COPTS. */ +++static int honour_copts = 0; +++ ++ static void handle_OPT_d (const char *); ++ static void set_std_cxx98 (int); ++ static void set_std_cxx11 (int); ++@@ -503,6 +506,12 @@ c_common_handle_option (size_t scode, co ++ flag_no_builtin = !value; ++ break; ++ +++ case OPT_fhonour_copts: +++ if (c_language == clk_c) { +++ honour_copts++; +++ } +++ break; +++ ++ case OPT_fconstant_string_class_: ++ constant_string_class_name = arg; ++ break; ++@@ -1410,6 +1419,47 @@ c_common_init (void) ++ return false; ++ } ++ +++ if (c_language == clk_c) { +++ char *ev = getenv ("GCC_HONOUR_COPTS"); +++ int evv; +++ if (ev == NULL) +++ evv = -1; +++ else if ((*ev == '0') || (*ev == '\0')) +++ evv = 0; +++ else if (*ev == '1') +++ evv = 1; +++ else if (*ev == '2') +++ evv = 2; +++ else if (*ev == 's') +++ evv = -1; +++ else { +++ warning (0, "unknown GCC_HONOUR_COPTS value, assuming 1"); +++ evv = 1; /* maybe depend this on something like MIRBSD_NATIVE? */ +++ } +++ if (evv == 1) { +++ if (honour_copts == 0) { +++ error ("someone does not honour COPTS at all in lenient mode"); +++ return false; +++ } else if (honour_copts != 1) { +++ warning (0, "someone does not honour COPTS correctly, passed %d times", +++ honour_copts); +++ } +++ } else if (evv == 2) { +++ if (honour_copts == 0) { +++ error ("someone does not honour COPTS at all in strict mode"); +++ return false; +++ } else if (honour_copts != 1) { +++ error ("someone does not honour COPTS correctly, passed %d times", +++ honour_copts); +++ return false; +++ } +++ } else if (evv == 0) { +++ if (honour_copts != 1) +++ inform (UNKNOWN_LOCATION, "someone does not honour COPTS correctly, passed %d times", +++ honour_copts); +++ } +++ } +++ ++ return true; ++ } ++ ++--- a/gcc/c-family/c.opt +++++ b/gcc/c-family/c.opt ++@@ -2080,6 +2080,9 @@ C++ ObjC++ Optimization Alias(fexception ++ fhonor-std ++ C++ ObjC++ WarnRemoved ++ +++fhonour-copts +++C ObjC C++ ObjC++ RejectNegative +++ ++ fhosted ++ C ObjC ++ Assume normal C execution environment. ++--- a/gcc/common.opt +++++ b/gcc/common.opt ++@@ -2004,6 +2004,9 @@ Enum(hardcfr_check_noreturn_calls) Strin ++ EnumValue ++ Enum(hardcfr_check_noreturn_calls) String(always) Value(HCFRNR_ALWAYS) ++ +++fhonour-copts +++Common RejectNegative +++ ++ ; Nonzero means do not emit .ident assembler directives and ignore ++ ; `#ident' preprocessor directives. ++ fident ++--- a/gcc/doc/invoke.texi +++++ b/gcc/doc/invoke.texi ++@@ -11476,6 +11476,17 @@ This option is only supported for C and ++ ++ This warning is upgraded to an error by @option{-pedantic-errors}. ++ +++@item -fhonour-copts +++@opindex fhonour-copts +++If @env{GCC_HONOUR_COPTS} is set to 1, abort if this option is not +++given at least once, and warn if it is given more than once. +++If @env{GCC_HONOUR_COPTS} is set to 2, abort if this option is not +++given exactly once. +++If @env{GCC_HONOUR_COPTS} is set to 0 or unset, warn if this option +++is not given exactly once. +++The warning is quelled if @env{GCC_HONOUR_COPTS} is set to @samp{s}. +++This flag and environment variable only affect the C language. +++ ++ @opindex Wstack-protector ++ @opindex Wno-stack-protector ++ @item -Wstack-protector ++--- a/gcc/opts.cc +++++ b/gcc/opts.cc ++@@ -2927,6 +2927,9 @@ common_handle_option (struct gcc_options ++ add_comma_separated_to_vector (&opts->x_flag_ignored_attributes, arg); ++ break; ++ +++ case OPT_fhonour_copts: +++ break; +++ ++ case OPT_Werror: ++ dc->set_warning_as_error_requested (value); ++ break; +diff --git a/toolchain/gcc/patches-16.x/920-specs_nonfatal_getenv.patch b/toolchain/gcc/patches-16.x/920-specs_nonfatal_getenv.patch +new file mode 100644 +index 0000000..78dd5e0 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/920-specs_nonfatal_getenv.patch +@@ -0,0 +1,22 @@ ++Author: Jo-Philipp Wich ++Date: Sat Apr 21 03:02:39 2012 +0000 ++ ++ gcc: add patch to make the getenv() spec function nonfatal if requested environment variable is unset ++ ++ SVN-Revision: 31390 ++ ++--- a/gcc/gcc.cc +++++ b/gcc/gcc.cc ++@@ -10501,8 +10501,10 @@ getenv_spec_function (int argc, const ch ++ } ++ ++ if (!value) ++- fatal_error (input_location, ++- "environment variable %qs not defined", varname); +++ { +++ warning (input_location, "environment variable %qs not defined", varname); +++ value = ""; +++ } ++ ++ /* We have to escape every character of the environment variable so ++ they are not interpreted as active spec characters. A +diff --git a/toolchain/gcc/patches-16.x/960-gotools-fix-compilation-when-making-cross-compiler.patch b/toolchain/gcc/patches-16.x/960-gotools-fix-compilation-when-making-cross-compiler.patch +new file mode 100644 +index 0000000..b1d7576 +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/960-gotools-fix-compilation-when-making-cross-compiler.patch +@@ -0,0 +1,67 @@ ++From dda6b050cd74a352670787a294596a9c56c21327 Mon Sep 17 00:00:00 2001 ++From: Yousong Zhou ++Date: Fri, 4 May 2018 18:20:53 +0800 ++Subject: [PATCH] gotools: fix compilation when making cross compiler ++ ++libgo is "the runtime support library for the Go programming language. ++This library is intended for use with the Go frontend." ++ ++gccgo will link target files with libgo.so which depends on libgcc_s.so.1, but ++the linker will complain that it cannot find it. That's because shared libgcc ++is not present in the install directory yet. libgo.so was made without problem ++because gcc will emit -lgcc_s when compiled with -shared option. When gotools ++were being made, it was supplied with -static-libgcc thus no link option was ++provided. Check LIBGO in gcc/go/gcc-spec.c for how gccgo make a builtin spec ++for linking with libgo.so ++ ++- GccgoCrossCompilation, https://github.com/golang/go/wiki/GccgoCrossCompilation ++- Cross-building instructions, http://www.eglibc.org/archives/patches/msg00078.html ++ ++When 3-pass GCC compilation is used, shared libgcc runtime libraries will be ++available after gcc pass2 completed and will meet the gotools link requirement ++at gcc pass3 ++--- ++ gotools/Makefile.am | 4 +++- ++ gotools/Makefile.in | 4 +++- ++ 2 files changed, 6 insertions(+), 2 deletions(-) ++ ++--- a/gotools/Makefile.am +++++ b/gotools/Makefile.am ++@@ -26,6 +26,7 @@ PWD_COMMAND = $${PWDCMD-pwd} ++ STAMP = echo timestamp > ++ ++ libgodir = ../$(target_noncanonical)/libgo +++libgccdir = ../$(target_noncanonical)/libgcc ++ LIBGODEP = $(libgodir)/libgo.la ++ ++ LIBGOTOOL = $(libgodir)/libgotool.a ++@@ -41,7 +42,8 @@ GOCFLAGS = $(CFLAGS_FOR_TARGET) ++ GOCOMPILE = $(GOCOMPILER) $(GOCFLAGS) ++ ++ AM_GOCFLAGS = -I $(libgodir) ++-AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs +++AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs \ +++ -L $(libgccdir) -L $(libgccdir)/.libs -lgcc_s ++ GOLINK = $(GOCOMPILER) $(GOCFLAGS) $(AM_GOCFLAGS) $(LDFLAGS) $(AM_LDFLAGS) -o $@ ++ ++ libgosrcdir = $(srcdir)/../libgo/go ++--- a/gotools/Makefile.in +++++ b/gotools/Makefile.in ++@@ -337,6 +337,7 @@ mkinstalldirs = $(SHELL) $(toplevel_srcd ++ PWD_COMMAND = $${PWDCMD-pwd} ++ STAMP = echo timestamp > ++ libgodir = ../$(target_noncanonical)/libgo +++libgccdir = ../$(target_noncanonical)/libgcc ++ LIBGODEP = $(libgodir)/libgo.la ++ LIBGOTOOL = $(libgodir)/libgotool.a ++ @NATIVE_FALSE@GOCOMPILER = $(GOC) ++@@ -346,7 +347,8 @@ LIBGOTOOL = $(libgodir)/libgotool.a ++ GOCFLAGS = $(CFLAGS_FOR_TARGET) ++ GOCOMPILE = $(GOCOMPILER) $(GOCFLAGS) ++ AM_GOCFLAGS = -I $(libgodir) ++-AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs +++AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs \ +++ -L $(libgccdir) -L $(libgccdir)/.libs -lgcc_s ++ GOLINK = $(GOCOMPILER) $(GOCFLAGS) $(AM_GOCFLAGS) $(LDFLAGS) $(AM_LDFLAGS) -o $@ ++ libgosrcdir = $(srcdir)/../libgo/go ++ cmdsrcdir = $(libgosrcdir)/cmd +diff --git a/toolchain/gcc/patches-16.x/970-macos_arm64-building-fix.patch b/toolchain/gcc/patches-16.x/970-macos_arm64-building-fix.patch +new file mode 100644 +index 0000000..73bb1ad +--- /dev/null ++++ b/toolchain/gcc/patches-16.x/970-macos_arm64-building-fix.patch +@@ -0,0 +1,45 @@ ++commit 9c6e71079b46ad5433165feaa2001450f2017b56 ++Author: Przemysław Buczkowski ++Date: Mon Aug 16 13:16:21 2021 +0100 ++ ++ GCC: Patch for Apple Silicon compatibility ++ ++ This patch fixes a linker error occuring when compiling ++ the cross-compiler on macOS and ARM64 architecture. ++ ++ Adapted from: ++ https://github.com/richfelker/musl-cross-make/issues/116#issuecomment-823612404 ++ ++ Change-Id: Ia3ee98a163bbb62689f42e2da83a5ef36beb0913 ++ Reviewed-on: https://review.haiku-os.org/c/buildtools/+/4329 ++ Reviewed-by: John Scipione ++ Reviewed-by: Adrien Destugues ++ ++--- a/gcc/config/aarch64/aarch64.h +++++ b/gcc/config/aarch64/aarch64.h ++@@ -1531,7 +1531,7 @@ extern enum aarch64_code_model aarch64_c ++ ++ /* Extra specs when building a native AArch64-hosted compiler. ++ Option rewriting rules based on host system. */ ++-#if defined(__aarch64__) +++#if defined(__aarch64__) && ! defined(__APPLE__) ++ extern const char *host_detect_local_cpu (int argc, const char **argv); ++ #define HAVE_LOCAL_CPU_DETECT ++ # define EXTRA_SPEC_FUNCTIONS \ ++--- a/gcc/config/host-darwin.cc +++++ b/gcc/config/host-darwin.cc ++@@ -23,6 +23,8 @@ ++ #include "options.h" ++ #include "diagnostic-core.h" ++ #include "config/host-darwin.h" +++#include "hosthooks.h" +++#include "hosthooks-def.h" ++ #include ++ ++ /* For Darwin (macOS only) platforms, without ASLR (PIE) enabled on the ++@@ -181,3 +183,5 @@ darwin_gt_pch_use_address (void *&addr, ++ ++ return 1; ++ } +++ +++const struct host_hooks host_hooks = HOST_HOOKS_INITIALIZER; +-- +2.47.3 + diff --git a/openwrt/patch/generic-25.12/0014-tools-mold-update-to-2.41.0.patch b/openwrt/patch/generic-25.12/0014-tools-mold-update-to-2.41.0.patch new file mode 100644 index 000000000..fd704df85 --- /dev/null +++ b/openwrt/patch/generic-25.12/0014-tools-mold-update-to-2.41.0.patch @@ -0,0 +1,33 @@ +From 39c5582d99c6c52d55dadf060c2045b378320530 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Mon, 11 May 2026 15:41:56 +0800 +Subject: [PATCH 2/2] tools: mold: update to 2.41.0 + +Signed-off-by: sbwml +--- + tools/mold/Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tools/mold/Makefile b/tools/mold/Makefile +index 8c3e33f..ff1f5c7 100644 +--- a/tools/mold/Makefile ++++ b/tools/mold/Makefile +@@ -3,13 +3,13 @@ + include $(TOPDIR)/rules.mk + + PKG_NAME:=mold +-PKG_VERSION:=2.40.4 ++PKG_VERSION:=2.41.0 + PKG_RELEASE:=1 + + PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz + PKG_SOURCE_URL_FILE:=v$(PKG_VERSION).tar.gz + PKG_SOURCE_URL:=https://github.com/rui314/mold/archive/refs/tags +-PKG_HASH:=69414c702ec1084e1fa8ca16da24f167f549e5e11e9ecd5d70a8dcda6f08c249 ++PKG_HASH:=0a61abac85d818437b425df856822e9d6e9982baeae5a93bcb02fe6c0060c61a + + include $(INCLUDE_DIR)/host-build.mk + include $(INCLUDE_DIR)/cmake.mk +-- +2.47.3 + diff --git a/openwrt/patch/generic-25.12/0015-tools-build-lz4-by-default.patch b/openwrt/patch/generic-25.12/0015-tools-build-lz4-by-default.patch new file mode 100644 index 000000000..9b9e3f94c --- /dev/null +++ b/openwrt/patch/generic-25.12/0015-tools-build-lz4-by-default.patch @@ -0,0 +1,52 @@ +From be2b8b3b012a549f8a0fc3d1c4fe84644ee65cf0 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Mon, 11 May 2026 18:10:42 +0800 +Subject: [PATCH] tools: build lz4 by default + +Signed-off-by: sbwml +--- + tools/Makefile | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +diff --git a/tools/Makefile b/tools/Makefile +index 42b1265..7719ca6 100644 +--- a/tools/Makefile ++++ b/tools/Makefile +@@ -23,9 +23,6 @@ endif + ifneq ($(CONFIG_SDK)$(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),) + BUILD_BZIP2_TOOLS = y + endif +-ifneq ($(CONFIG_SDK)$(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4),) +- BUILD_LZ4_TOOLS = y +-endif + ifneq ($(CONFIG_SDK)$(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZO),) + BUILD_LZO_TOOLS = y + endif +@@ -50,6 +47,7 @@ tools-y += gengetopt + tools-y += gnulib + tools-y += libressl + tools-y += libtool ++tools-y += lz4 + tools-y += lzma + tools-y += m4 + tools-y += make-ext4fs +@@ -76,7 +74,6 @@ tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS),y) += liblzo + tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_B43_TOOLS),y) += b43-tools + tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_BZIP2_TOOLS),y) += bzip2 + tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_ISL),y) += isl +-tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_LZ4_TOOLS),y) += lz4 + tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_LZO_TOOLS),y) += lzop + tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_TOOLCHAIN),y) += gmp mpc mpfr + tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(CONFIG_TARGET_apm821xx)$(CONFIG_TARGET_gemini),y) += genext2fs +@@ -133,7 +130,7 @@ $(curdir)/pkgconf/compile := $(curdir)/meson/compile + $(curdir)/quilt/compile := $(curdir)/autoconf/compile $(curdir)/findutils/compile + $(curdir)/sdcc/compile := $(curdir)/bison/compile + $(curdir)/squashfs3-lzma/compile := $(curdir)/lzma-old/compile +-$(curdir)/squashfs4/compile := $(curdir)/xz/compile $(curdir)/zlib/compile ++$(curdir)/squashfs4/compile := $(curdir)/lz4/compile $(curdir)/xz/compile $(curdir)/zlib/compile + $(curdir)/util-linux/compile := $(curdir)/bison/compile $(curdir)/meson/compile + $(curdir)/yafut/compile := $(curdir)/cmake/compile + +-- +2.43.5 + diff --git a/openwrt/patch/generic/0001-kernel-add-MODULE_ALLOW_BTF_MISMATCH-option.patch b/openwrt/patch/generic/0001-kernel-add-MODULE_ALLOW_BTF_MISMATCH-option.patch deleted file mode 100644 index 672f07bce..000000000 --- a/openwrt/patch/generic/0001-kernel-add-MODULE_ALLOW_BTF_MISMATCH-option.patch +++ /dev/null @@ -1,41 +0,0 @@ -From b0f013ccfa66842e9739c6e11b81eadc44a2f8eb Mon Sep 17 00:00:00 2001 -From: Tianling Shen -Date: Tue, 16 May 2023 12:38:53 +0800 -Subject: [PATCH 1/7] kernel: add MODULE_ALLOW_BTF_MISMATCH option - -BTF mismatch can occur for a separately-built module even when the ABI -is otherwise compatible and nothing else would prevent successfully -loading. Add a new config to control how mismatches are handled. By -default, preserve the current behavior of refusing to load the -module. If MODULE_ALLOW_BTF_MISMATCH is enabled, load the module but -ignore its BTF information. - -Signed-off-by: Tianling Shen ---- - config/Config-kernel.in | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/config/Config-kernel.in b/config/Config-kernel.in -index ea828ae..a262d59 100644 ---- a/config/Config-kernel.in -+++ b/config/Config-kernel.in -@@ -364,6 +364,16 @@ config KERNEL_DEBUG_INFO_BTF - - Required to run BPF CO-RE applications. - -+config KERNEL_MODULE_ALLOW_BTF_MISMATCH -+ bool "Allow loading modules with non-matching BTF type info" -+ depends on KERNEL_DEBUG_INFO_BTF -+ help -+ For modules whose split BTF does not match vmlinux, load without -+ BTF rather than refusing to load. The default behavior with -+ module BTF enabled is to reject modules with such mismatches; -+ this option will still load module BTF where possible but ignore -+ it when a mismatch is found. -+ - config KERNEL_DEBUG_INFO_REDUCED - bool "Reduce debugging information" - default y --- -2.43.5 - diff --git a/openwrt/patch/generic/0004-libquadmath-Add-libquadmath-to-the-toolchain.patch b/openwrt/patch/generic/0004-libquadmath-Add-libquadmath-to-the-toolchain.patch deleted file mode 100644 index be2aec5fe..000000000 --- a/openwrt/patch/generic/0004-libquadmath-Add-libquadmath-to-the-toolchain.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 6547a0bb12550411d4bf880e718759d5ea81db1e Mon Sep 17 00:00:00 2001 -From: Carlos Miguel Ferreira -Date: Wed, 12 Jun 2024 01:20:59 +0100 -Subject: [PATCH 4/7] libquadmath: Add libquadmath to the toolchain - -This commit makes the libquadmath library available to the GCC -toolchain. This library is important for libraries such as -Boost.charconv - -Signed-off-by: Carlos Miguel Ferreira -Link: https://github.com/openwrt/openwrt/pull/15637 -Signed-off-by: Christian Marangi ---- - package/libs/toolchain/Makefile | 41 +++++++++++++++++++++++++++++++++ - 1 file changed, 41 insertions(+) - -diff --git a/package/libs/toolchain/Makefile b/package/libs/toolchain/Makefile -index f9f8ac9..8066e35 100644 ---- a/package/libs/toolchain/Makefile -+++ b/package/libs/toolchain/Makefile -@@ -83,6 +83,33 @@ define Package/libatomic/config - endmenu - endef - -+define Package/libquadmath -+$(call Package/gcc/Default) -+ DEPENDS:=@TARGET_x86||TARGET_x86_64 +libgcc -+ TITLE:=Quadmath support library -+ ABI_VERSION:=1 -+endef -+ -+define Package/libquadmath/config -+ menu "Configuration" -+ depends on EXTERNAL_TOOLCHAIN && PACKAGE_libquadmath -+ -+ config LIBQUADMATH_ROOT_DIR -+ string -+ prompt "libquadmath shared library base directory" -+ depends on EXTERNAL_TOOLCHAIN && PACKAGE_libquadmath -+ default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN -+ default "/" if NATIVE_TOOLCHAIN -+ -+ config LIBQUADMATH_FILE_SPEC -+ string -+ prompt "libquadmath shared library files (use wildcards)" -+ depends on EXTERNAL_TOOLCHAIN && PACKAGE_libquadmath -+ default "./lib/libquadmath.so.*" -+ -+ endmenu -+endef -+ - define Package/libstdcpp - $(call Package/gcc/Default) - NAME:=libstdc++ -@@ -482,6 +509,11 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) - $(CP) $(TOOLCHAIN_DIR)/lib/libatomic.so.* $(1)/lib/ - endef - -+ define Package/libquadmath/install -+ $(INSTALL_DIR) $(1)/lib -+ $(CP) $(TOOLCHAIN_DIR)/lib/libquadmath.so.* $(1)/lib/ -+ endef -+ - define Package/libgfortran/install - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(TOOLCHAIN_DIR)/lib/libgfortran.so.* $(1)/usr/lib/ -@@ -692,6 +724,14 @@ else - exit 0 - endef - -+ define Package/libquadmath/install -+ for file in $(call qstrip,$(CONFIG_LIBQUADMATH_FILE_SPEC)); do \ -+ $(INSTALL_DIR) $(1)/lib ; \ -+ $(CP) $(call qstrip,$(CONFIG_LIBQUADMATH_ROOT_DIR))/$$$$file $(1)/lib/ ; \ -+ done ; \ -+ exit 0 -+ endef -+ - define Package/libgomp/install - for file in $(call qstrip,$(CONFIG_LIBGOMP_FILE_SPEC)); do \ - $(INSTALL_DIR) $(1)/lib ; \ -@@ -723,6 +763,7 @@ endif - $(eval $(call BuildPackage,libc)) - $(eval $(call BuildPackage,libgcc)) - $(eval $(call BuildPackage,libatomic)) -+$(eval $(call BuildPackage,libquadmath)) - $(eval $(call BuildPackage,libstdcpp)) - $(eval $(call BuildPackage,libasan)) - $(eval $(call BuildPackage,libtsan)) --- -2.43.5 - diff --git a/openwrt/patch/generic/200-toolchain-gcc-update-to-13.2.patch b/openwrt/patch/generic/200-toolchain-gcc-update-to-13.2.patch deleted file mode 100644 index 31e048c3c..000000000 --- a/openwrt/patch/generic/200-toolchain-gcc-update-to-13.2.patch +++ /dev/null @@ -1,2206 +0,0 @@ -From bd47c3f6ab80a3ebd69f7793de94ef3fc1592c1f Mon Sep 17 00:00:00 2001 -From: sbwml -Date: Fri, 16 Feb 2024 23:44:25 +0800 -Subject: [PATCH] toolchain: gcc: update to 13.2 - -Signed-off-by: sbwml ---- - toolchain/gcc/Config.version | 2 +- - toolchain/gcc/common.mk | 4 +- - ...imization-109585-alias-analysis-typo.patch | 69 - - .../700-RISCV-Inline-subword-atomic-ops.patch | 2021 ----------------- - ...linux-Don-t-add-latomic-with-pthread.patch | 36 - - .../gcc/patches-13.x/910-mbsd_multi.patch | 2 +- - 6 files changed, 4 insertions(+), 2130 deletions(-) - delete mode 100644 toolchain/gcc/patches-13.x/001-rtl-optimization-109585-alias-analysis-typo.patch - delete mode 100644 toolchain/gcc/patches-13.x/700-RISCV-Inline-subword-atomic-ops.patch - delete mode 100644 toolchain/gcc/patches-13.x/701-riscv-linux-Don-t-add-latomic-with-pthread.patch - -diff --git a/toolchain/gcc/Config.version b/toolchain/gcc/Config.version -index e40d6b2..92033af 100644 ---- a/toolchain/gcc/Config.version -+++ b/toolchain/gcc/Config.version -@@ -9,7 +9,7 @@ config GCC_VERSION_13 - config GCC_VERSION - string - default "11.3.0" if GCC_VERSION_11 -- default "13.1.0" if GCC_VERSION_13 -+ default "13.2.0" if GCC_VERSION_13 - default "12.3.0" - - config GCC_USE_DEFAULT_VERSION -diff --git a/toolchain/gcc/common.mk b/toolchain/gcc/common.mk -index 31a1492..cdbf9fa 100644 ---- a/toolchain/gcc/common.mk -+++ b/toolchain/gcc/common.mk -@@ -38,8 +38,8 @@ ifeq ($(PKG_VERSION),12.3.0) - PKG_HASH:=949a5d4f99e786421a93b532b22ffab5578de7321369975b91aec97adfda8c3b - endif - --ifeq ($(PKG_VERSION),13.1.0) -- PKG_HASH:=61d684f0aa5e76ac6585ad8898a2427aade8979ed5e7f85492286c4dfc13ee86 -+ifeq ($(PKG_VERSION),13.2.0) -+ PKG_HASH:=e275e76442a6067341a27f04c5c6b83d8613144004c0413528863dc6b5c743da - endif - - PATCH_DIR=../patches-$(GCC_MAJOR_VERSION).x -diff --git a/toolchain/gcc/patches-13.x/001-rtl-optimization-109585-alias-analysis-typo.patch b/toolchain/gcc/patches-13.x/001-rtl-optimization-109585-alias-analysis-typo.patch -deleted file mode 100644 -index 7f73be4..0000000 ---- a/toolchain/gcc/patches-13.x/001-rtl-optimization-109585-alias-analysis-typo.patch -+++ /dev/null -@@ -1,69 +0,0 @@ --From bb406a6aea336966681927a27f54ee89c4fd4ea1 Mon Sep 17 00:00:00 2001 --From: Richard Biener --Date: Mon, 24 Apr 2023 13:31:07 +0200 --Subject: [PATCH] rtl-optimization/109585 - alias analysis typo -- --When r10-514-gc6b84edb6110dd2b4fb improved access path analysis --it introduced a typo that triggers when there's an access to a --trailing array in the first access path leading to false --disambiguation. -- -- PR rtl-optimization/109585 -- * tree-ssa-alias.cc (aliasing_component_refs_p): Fix typo. -- -- * gcc.dg/torture/pr109585.c: New testcase. -- --(cherry picked from commit 6d4bd27a60447c7505cb4783e675e98a191a8904) ----- -- gcc/testsuite/gcc.dg/torture/pr109585.c | 33 +++++++++++++++++++++++++ -- gcc/tree-ssa-alias.cc | 2 +- -- 2 files changed, 34 insertions(+), 1 deletion(-) -- create mode 100644 gcc/testsuite/gcc.dg/torture/pr109585.c -- ----- /dev/null --+++ b/gcc/testsuite/gcc.dg/torture/pr109585.c --@@ -0,0 +1,33 @@ --+/* { dg-do run } */ --+ --+#include --+ --+struct P { --+ long v; --+ struct P *n; --+}; --+ --+struct F { --+ long x; --+ struct P fam[]; --+}; --+ --+int __attribute__((noipa)) --+f(struct F *f, int i) --+{ --+ struct P *p = f->fam; --+ asm("" : "+r"(f): "r"(p)); --+ p->v = 0; --+ p->n = 0; --+ return f->fam->n != 0; --+} --+ --+int --+main() --+{ --+ struct F *m = malloc (sizeof (long) + 2 * sizeof (struct P)); --+ m->fam[0].n = &m->fam[1]; --+ if (f (m, 0)) --+ abort (); --+ return 0; --+} ----- a/gcc/tree-ssa-alias.cc --+++ b/gcc/tree-ssa-alias.cc --@@ -1330,7 +1330,7 @@ aliasing_component_refs_p (tree ref1, -- /* If we didn't find a common base, try the other way around. */ -- if (cmp_outer <= 0 -- || (end_struct_ref1 --- && compare_type_sizes (TREE_TYPE (end_struct_ref1), type1) <= 0)) --+ && compare_type_sizes (TREE_TYPE (end_struct_ref1), type2) <= 0)) -- { -- int res = aliasing_component_refs_walk (ref2, type2, base2, -- offset2, max_size2, -diff --git a/toolchain/gcc/patches-13.x/700-RISCV-Inline-subword-atomic-ops.patch b/toolchain/gcc/patches-13.x/700-RISCV-Inline-subword-atomic-ops.patch -deleted file mode 100644 -index 752480b..0000000 ---- a/toolchain/gcc/patches-13.x/700-RISCV-Inline-subword-atomic-ops.patch -+++ /dev/null -@@ -1,2021 +0,0 @@ --From f797260adaf52bee0ec0e16190bbefbe1bfc3692 Mon Sep 17 00:00:00 2001 --From: Patrick O'Neill --Date: Tue, 18 Apr 2023 14:33:13 -0700 --Subject: [PATCH] RISCV: Inline subword atomic ops -- --RISC-V has no support for subword atomic operations; code currently --generates libatomic library calls. -- --This patch changes the default behavior to inline subword atomic calls --(using the same logic as the existing library call). --Behavior can be specified using the -minline-atomics and ---mno-inline-atomics command line flags. -- --gcc/libgcc/config/riscv/atomic.c has the same logic implemented in asm. --This will need to stay for backwards compatibility and the ---mno-inline-atomics flag. -- --2023-04-18 Patrick O'Neill -- --gcc/ChangeLog: -- PR target/104338 -- * config/riscv/riscv-protos.h: Add helper function stubs. -- * config/riscv/riscv.cc: Add helper functions for subword masking. -- * config/riscv/riscv.opt: Add command-line flag. -- * config/riscv/sync.md: Add masking logic and inline asm for fetch_and_op, -- fetch_and_nand, CAS, and exchange ops. -- * doc/invoke.texi: Add blurb regarding command-line flag. -- --libgcc/ChangeLog: -- PR target/104338 -- * config/riscv/atomic.c: Add reference to duplicate logic. -- --gcc/testsuite/ChangeLog: -- PR target/104338 -- * gcc.target/riscv/inline-atomics-1.c: New test. -- * gcc.target/riscv/inline-atomics-2.c: New test. -- * gcc.target/riscv/inline-atomics-3.c: New test. -- * gcc.target/riscv/inline-atomics-4.c: New test. -- * gcc.target/riscv/inline-atomics-5.c: New test. -- * gcc.target/riscv/inline-atomics-6.c: New test. -- * gcc.target/riscv/inline-atomics-7.c: New test. -- * gcc.target/riscv/inline-atomics-8.c: New test. -- --Signed-off-by: Patrick O'Neill --Signed-off-by: Palmer Dabbelt ----- -- gcc/config/riscv/riscv-protos.h | 2 + -- gcc/config/riscv/riscv.cc | 49 ++ -- gcc/config/riscv/riscv.opt | 4 + -- gcc/config/riscv/sync.md | 301 +++++++++ -- gcc/doc/invoke.texi | 10 +- -- .../gcc.target/riscv/inline-atomics-1.c | 18 + -- .../gcc.target/riscv/inline-atomics-2.c | 9 + -- .../gcc.target/riscv/inline-atomics-3.c | 569 ++++++++++++++++++ -- .../gcc.target/riscv/inline-atomics-4.c | 566 +++++++++++++++++ -- .../gcc.target/riscv/inline-atomics-5.c | 87 +++ -- .../gcc.target/riscv/inline-atomics-6.c | 87 +++ -- .../gcc.target/riscv/inline-atomics-7.c | 69 +++ -- .../gcc.target/riscv/inline-atomics-8.c | 69 +++ -- libgcc/config/riscv/atomic.c | 2 + -- 14 files changed, 1841 insertions(+), 1 deletion(-) -- create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-1.c -- create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-2.c -- create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-3.c -- create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-4.c -- create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-5.c -- create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-6.c -- create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-7.c -- create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-8.c -- ----- a/gcc/config/riscv/riscv-protos.h --+++ b/gcc/config/riscv/riscv-protos.h --@@ -79,6 +79,8 @@ extern void riscv_reinit (void); -- extern poly_uint64 riscv_regmode_natural_size (machine_mode); -- extern bool riscv_v_ext_vector_mode_p (machine_mode); -- extern bool riscv_shamt_matches_mask_p (int, HOST_WIDE_INT); --+extern void riscv_subword_address (rtx, rtx *, rtx *, rtx *, rtx *); --+extern void riscv_lshift_subword (machine_mode, rtx, rtx, rtx *); -- -- /* Routines implemented in riscv-c.cc. */ -- void riscv_cpu_cpp_builtins (cpp_reader *); ----- a/gcc/config/riscv/riscv.cc --+++ b/gcc/config/riscv/riscv.cc --@@ -7143,6 +7143,55 @@ riscv_zero_call_used_regs (HARD_REG_SET -- & ~zeroed_hardregs); -- } -- --+/* Given memory reference MEM, expand code to compute the aligned --+ memory address, shift and mask values and store them into --+ *ALIGNED_MEM, *SHIFT, *MASK and *NOT_MASK. */ --+ --+void --+riscv_subword_address (rtx mem, rtx *aligned_mem, rtx *shift, rtx *mask, --+ rtx *not_mask) --+{ --+ /* Align the memory address to a word. */ --+ rtx addr = force_reg (Pmode, XEXP (mem, 0)); --+ --+ rtx addr_mask = gen_int_mode (-4, Pmode); --+ --+ rtx aligned_addr = gen_reg_rtx (Pmode); --+ emit_move_insn (aligned_addr, gen_rtx_AND (Pmode, addr, addr_mask)); --+ --+ *aligned_mem = change_address (mem, SImode, aligned_addr); --+ --+ /* Calculate the shift amount. */ --+ emit_move_insn (*shift, gen_rtx_AND (SImode, gen_lowpart (SImode, addr), --+ gen_int_mode (3, SImode))); --+ emit_move_insn (*shift, gen_rtx_ASHIFT (SImode, *shift, --+ gen_int_mode (3, SImode))); --+ --+ /* Calculate the mask. */ --+ int unshifted_mask = GET_MODE_MASK (GET_MODE (mem)); --+ --+ emit_move_insn (*mask, gen_int_mode (unshifted_mask, SImode)); --+ --+ emit_move_insn (*mask, gen_rtx_ASHIFT (SImode, *mask, --+ gen_lowpart (QImode, *shift))); --+ --+ emit_move_insn (*not_mask, gen_rtx_NOT(SImode, *mask)); --+} --+ --+/* Leftshift a subword within an SImode register. */ --+ --+void --+riscv_lshift_subword (machine_mode mode, rtx value, rtx shift, --+ rtx *shifted_value) --+{ --+ rtx value_reg = gen_reg_rtx (SImode); --+ emit_move_insn (value_reg, simplify_gen_subreg (SImode, value, --+ mode, 0)); --+ --+ emit_move_insn(*shifted_value, gen_rtx_ASHIFT (SImode, value_reg, --+ gen_lowpart (QImode, shift))); --+} --+ -- /* Initialize the GCC target structure. */ -- #undef TARGET_ASM_ALIGNED_HI_OP -- #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t" ----- a/gcc/config/riscv/riscv.opt --+++ b/gcc/config/riscv/riscv.opt --@@ -238,6 +238,10 @@ int riscv_sv_subext -- TargetVariable -- int riscv_xthead_subext -- --+minline-atomics --+Target Var(TARGET_INLINE_SUBWORD_ATOMIC) Init(1) --+Always inline subword atomic operations. --+ -- Enum -- Name(isa_spec_class) Type(enum riscv_isa_spec_class) -- Supported ISA specs (for use with the -misa-spec= option): ----- a/gcc/config/riscv/sync.md --+++ b/gcc/config/riscv/sync.md --@@ -21,8 +21,11 @@ -- -- (define_c_enum "unspec" [ -- UNSPEC_COMPARE_AND_SWAP --+ UNSPEC_COMPARE_AND_SWAP_SUBWORD -- UNSPEC_SYNC_OLD_OP --+ UNSPEC_SYNC_OLD_OP_SUBWORD -- UNSPEC_SYNC_EXCHANGE --+ UNSPEC_SYNC_EXCHANGE_SUBWORD -- UNSPEC_ATOMIC_STORE -- UNSPEC_MEMORY_BARRIER -- ]) --@@ -91,6 +94,135 @@ -- [(set_attr "type" "atomic") -- (set (attr "length") (const_int 8))]) -- --+(define_insn "subword_atomic_fetch_strong_" --+ [(set (match_operand:SI 0 "register_operand" "=&r") ;; old value at mem --+ (match_operand:SI 1 "memory_operand" "+A")) ;; mem location --+ (set (match_dup 1) --+ (unspec_volatile:SI --+ [(any_atomic:SI (match_dup 1) --+ (match_operand:SI 2 "register_operand" "rI")) ;; value for op --+ (match_operand:SI 3 "register_operand" "rI")] ;; mask --+ UNSPEC_SYNC_OLD_OP_SUBWORD)) --+ (match_operand:SI 4 "register_operand" "rI") ;; not_mask --+ (clobber (match_scratch:SI 5 "=&r")) ;; tmp_1 --+ (clobber (match_scratch:SI 6 "=&r"))] ;; tmp_2 --+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" --+ { --+ return "1:\;" --+ "lr.w.aq\t%0, %1\;" --+ "\t%5, %0, %2\;" --+ "and\t%5, %5, %3\;" --+ "and\t%6, %0, %4\;" --+ "or\t%6, %6, %5\;" --+ "sc.w.rl\t%5, %6, %1\;" --+ "bnez\t%5, 1b"; --+ } --+ [(set (attr "length") (const_int 28))]) --+ --+(define_expand "atomic_fetch_nand" --+ [(match_operand:SHORT 0 "register_operand") ;; old value at mem --+ (not:SHORT (and:SHORT (match_operand:SHORT 1 "memory_operand") ;; mem location --+ (match_operand:SHORT 2 "reg_or_0_operand"))) ;; value for op --+ (match_operand:SI 3 "const_int_operand")] ;; model --+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" --+{ --+ /* We have no QImode/HImode atomics, so form a mask, then use --+ subword_atomic_fetch_strong_nand to implement a LR/SC version of the --+ operation. */ --+ --+ /* Logic duplicated in gcc/libgcc/config/riscv/atomic.c for use when inlining --+ is disabled */ --+ --+ rtx old = gen_reg_rtx (SImode); --+ rtx mem = operands[1]; --+ rtx value = operands[2]; --+ rtx aligned_mem = gen_reg_rtx (SImode); --+ rtx shift = gen_reg_rtx (SImode); --+ rtx mask = gen_reg_rtx (SImode); --+ rtx not_mask = gen_reg_rtx (SImode); --+ --+ riscv_subword_address (mem, &aligned_mem, &shift, &mask, ¬_mask); --+ --+ rtx shifted_value = gen_reg_rtx (SImode); --+ riscv_lshift_subword (mode, value, shift, &shifted_value); --+ --+ emit_insn (gen_subword_atomic_fetch_strong_nand (old, aligned_mem, --+ shifted_value, --+ mask, not_mask)); --+ --+ emit_move_insn (old, gen_rtx_ASHIFTRT (SImode, old, --+ gen_lowpart (QImode, shift))); --+ --+ emit_move_insn (operands[0], gen_lowpart (mode, old)); --+ --+ DONE; --+}) --+ --+(define_insn "subword_atomic_fetch_strong_nand" --+ [(set (match_operand:SI 0 "register_operand" "=&r") ;; old value at mem --+ (match_operand:SI 1 "memory_operand" "+A")) ;; mem location --+ (set (match_dup 1) --+ (unspec_volatile:SI --+ [(not:SI (and:SI (match_dup 1) --+ (match_operand:SI 2 "register_operand" "rI"))) ;; value for op --+ (match_operand:SI 3 "register_operand" "rI")] ;; mask --+ UNSPEC_SYNC_OLD_OP_SUBWORD)) --+ (match_operand:SI 4 "register_operand" "rI") ;; not_mask --+ (clobber (match_scratch:SI 5 "=&r")) ;; tmp_1 --+ (clobber (match_scratch:SI 6 "=&r"))] ;; tmp_2 --+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" --+ { --+ return "1:\;" --+ "lr.w.aq\t%0, %1\;" --+ "and\t%5, %0, %2\;" --+ "not\t%5, %5\;" --+ "and\t%5, %5, %3\;" --+ "and\t%6, %0, %4\;" --+ "or\t%6, %6, %5\;" --+ "sc.w.rl\t%5, %6, %1\;" --+ "bnez\t%5, 1b"; --+ } --+ [(set (attr "length") (const_int 32))]) --+ --+(define_expand "atomic_fetch_" --+ [(match_operand:SHORT 0 "register_operand") ;; old value at mem --+ (any_atomic:SHORT (match_operand:SHORT 1 "memory_operand") ;; mem location --+ (match_operand:SHORT 2 "reg_or_0_operand")) ;; value for op --+ (match_operand:SI 3 "const_int_operand")] ;; model --+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" --+{ --+ /* We have no QImode/HImode atomics, so form a mask, then use --+ subword_atomic_fetch_strong_ to implement a LR/SC version of the --+ operation. */ --+ --+ /* Logic duplicated in gcc/libgcc/config/riscv/atomic.c for use when inlining --+ is disabled */ --+ --+ rtx old = gen_reg_rtx (SImode); --+ rtx mem = operands[1]; --+ rtx value = operands[2]; --+ rtx aligned_mem = gen_reg_rtx (SImode); --+ rtx shift = gen_reg_rtx (SImode); --+ rtx mask = gen_reg_rtx (SImode); --+ rtx not_mask = gen_reg_rtx (SImode); --+ --+ riscv_subword_address (mem, &aligned_mem, &shift, &mask, ¬_mask); --+ --+ rtx shifted_value = gen_reg_rtx (SImode); --+ riscv_lshift_subword (mode, value, shift, &shifted_value); --+ --+ emit_insn (gen_subword_atomic_fetch_strong_ (old, aligned_mem, --+ shifted_value, --+ mask, not_mask)); --+ --+ emit_move_insn (old, gen_rtx_ASHIFTRT (SImode, old, --+ gen_lowpart (QImode, shift))); --+ --+ emit_move_insn (operands[0], gen_lowpart (mode, old)); --+ --+ DONE; --+}) --+ -- (define_insn "atomic_exchange" -- [(set (match_operand:GPR 0 "register_operand" "=&r") -- (unspec_volatile:GPR --@@ -104,6 +236,56 @@ -- [(set_attr "type" "atomic") -- (set (attr "length") (const_int 8))]) -- --+(define_expand "atomic_exchange" --+ [(match_operand:SHORT 0 "register_operand") ;; old value at mem --+ (match_operand:SHORT 1 "memory_operand") ;; mem location --+ (match_operand:SHORT 2 "register_operand") ;; value --+ (match_operand:SI 3 "const_int_operand")] ;; model --+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" --+{ --+ rtx old = gen_reg_rtx (SImode); --+ rtx mem = operands[1]; --+ rtx value = operands[2]; --+ rtx aligned_mem = gen_reg_rtx (SImode); --+ rtx shift = gen_reg_rtx (SImode); --+ rtx mask = gen_reg_rtx (SImode); --+ rtx not_mask = gen_reg_rtx (SImode); --+ --+ riscv_subword_address (mem, &aligned_mem, &shift, &mask, ¬_mask); --+ --+ rtx shifted_value = gen_reg_rtx (SImode); --+ riscv_lshift_subword (mode, value, shift, &shifted_value); --+ --+ emit_insn (gen_subword_atomic_exchange_strong (old, aligned_mem, --+ shifted_value, not_mask)); --+ --+ emit_move_insn (old, gen_rtx_ASHIFTRT (SImode, old, --+ gen_lowpart (QImode, shift))); --+ --+ emit_move_insn (operands[0], gen_lowpart (mode, old)); --+ DONE; --+}) --+ --+(define_insn "subword_atomic_exchange_strong" --+ [(set (match_operand:SI 0 "register_operand" "=&r") ;; old value at mem --+ (match_operand:SI 1 "memory_operand" "+A")) ;; mem location --+ (set (match_dup 1) --+ (unspec_volatile:SI --+ [(match_operand:SI 2 "reg_or_0_operand" "rI") ;; value --+ (match_operand:SI 3 "reg_or_0_operand" "rI")] ;; not_mask --+ UNSPEC_SYNC_EXCHANGE_SUBWORD)) --+ (clobber (match_scratch:SI 4 "=&r"))] ;; tmp_1 --+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" --+ { --+ return "1:\;" --+ "lr.w.aq\t%0, %1\;" --+ "and\t%4, %0, %3\;" --+ "or\t%4, %4, %2\;" --+ "sc.w.rl\t%4, %4, %1\;" --+ "bnez\t%4, 1b"; --+ } --+ [(set (attr "length") (const_int 20))]) --+ -- (define_insn "atomic_cas_value_strong" -- [(set (match_operand:GPR 0 "register_operand" "=&r") -- (match_operand:GPR 1 "memory_operand" "+A")) --@@ -153,6 +335,125 @@ -- DONE; -- }) -- --+(define_expand "atomic_compare_and_swap" --+ [(match_operand:SI 0 "register_operand") ;; bool output --+ (match_operand:SHORT 1 "register_operand") ;; val output --+ (match_operand:SHORT 2 "memory_operand") ;; memory --+ (match_operand:SHORT 3 "reg_or_0_operand") ;; expected value --+ (match_operand:SHORT 4 "reg_or_0_operand") ;; desired value --+ (match_operand:SI 5 "const_int_operand") ;; is_weak --+ (match_operand:SI 6 "const_int_operand") ;; mod_s --+ (match_operand:SI 7 "const_int_operand")] ;; mod_f --+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" --+{ --+ emit_insn (gen_atomic_cas_value_strong (operands[1], operands[2], --+ operands[3], operands[4], --+ operands[6], operands[7])); --+ --+ rtx val = gen_reg_rtx (SImode); --+ if (operands[1] != const0_rtx) --+ emit_move_insn (val, gen_rtx_SIGN_EXTEND (SImode, operands[1])); --+ else --+ emit_move_insn (val, const0_rtx); --+ --+ rtx exp = gen_reg_rtx (SImode); --+ if (operands[3] != const0_rtx) --+ emit_move_insn (exp, gen_rtx_SIGN_EXTEND (SImode, operands[3])); --+ else --+ emit_move_insn (exp, const0_rtx); --+ --+ rtx compare = val; --+ if (exp != const0_rtx) --+ { --+ rtx difference = gen_rtx_MINUS (SImode, val, exp); --+ compare = gen_reg_rtx (SImode); --+ emit_move_insn (compare, difference); --+ } --+ --+ if (word_mode != SImode) --+ { --+ rtx reg = gen_reg_rtx (word_mode); --+ emit_move_insn (reg, gen_rtx_SIGN_EXTEND (word_mode, compare)); --+ compare = reg; --+ } --+ --+ emit_move_insn (operands[0], gen_rtx_EQ (SImode, compare, const0_rtx)); --+ DONE; --+}) --+ --+(define_expand "atomic_cas_value_strong" --+ [(match_operand:SHORT 0 "register_operand") ;; val output --+ (match_operand:SHORT 1 "memory_operand") ;; memory --+ (match_operand:SHORT 2 "reg_or_0_operand") ;; expected value --+ (match_operand:SHORT 3 "reg_or_0_operand") ;; desired value --+ (match_operand:SI 4 "const_int_operand") ;; mod_s --+ (match_operand:SI 5 "const_int_operand") ;; mod_f --+ (match_scratch:SHORT 6)] --+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" --+{ --+ /* We have no QImode/HImode atomics, so form a mask, then use --+ subword_atomic_cas_strong to implement a LR/SC version of the --+ operation. */ --+ --+ /* Logic duplicated in gcc/libgcc/config/riscv/atomic.c for use when inlining --+ is disabled */ --+ --+ rtx old = gen_reg_rtx (SImode); --+ rtx mem = operands[1]; --+ rtx aligned_mem = gen_reg_rtx (SImode); --+ rtx shift = gen_reg_rtx (SImode); --+ rtx mask = gen_reg_rtx (SImode); --+ rtx not_mask = gen_reg_rtx (SImode); --+ --+ riscv_subword_address (mem, &aligned_mem, &shift, &mask, ¬_mask); --+ --+ rtx o = operands[2]; --+ rtx n = operands[3]; --+ rtx shifted_o = gen_reg_rtx (SImode); --+ rtx shifted_n = gen_reg_rtx (SImode); --+ --+ riscv_lshift_subword (mode, o, shift, &shifted_o); --+ riscv_lshift_subword (mode, n, shift, &shifted_n); --+ --+ emit_move_insn (shifted_o, gen_rtx_AND (SImode, shifted_o, mask)); --+ emit_move_insn (shifted_n, gen_rtx_AND (SImode, shifted_n, mask)); --+ --+ emit_insn (gen_subword_atomic_cas_strong (old, aligned_mem, --+ shifted_o, shifted_n, --+ mask, not_mask)); --+ --+ emit_move_insn (old, gen_rtx_ASHIFTRT (SImode, old, --+ gen_lowpart (QImode, shift))); --+ --+ emit_move_insn (operands[0], gen_lowpart (mode, old)); --+ --+ DONE; --+}) --+ --+(define_insn "subword_atomic_cas_strong" --+ [(set (match_operand:SI 0 "register_operand" "=&r") ;; old value at mem --+ (match_operand:SI 1 "memory_operand" "+A")) ;; mem location --+ (set (match_dup 1) --+ (unspec_volatile:SI [(match_operand:SI 2 "reg_or_0_operand" "rJ") ;; expected value --+ (match_operand:SI 3 "reg_or_0_operand" "rJ")] ;; desired value --+ UNSPEC_COMPARE_AND_SWAP_SUBWORD)) --+ (match_operand:SI 4 "register_operand" "rI") ;; mask --+ (match_operand:SI 5 "register_operand" "rI") ;; not_mask --+ (clobber (match_scratch:SI 6 "=&r"))] ;; tmp_1 --+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" --+ { --+ return "1:\;" --+ "lr.w.aq\t%0, %1\;" --+ "and\t%6, %0, %4\;" --+ "bne\t%6, %z2, 1f\;" --+ "and\t%6, %0, %5\;" --+ "or\t%6, %6, %3\;" --+ "sc.w.rl\t%6, %6, %1\;" --+ "bnez\t%6, 1b\;" --+ "1:"; --+ } --+ [(set (attr "length") (const_int 28))]) --+ -- (define_expand "atomic_test_and_set" -- [(match_operand:QI 0 "register_operand" "") ;; bool output -- (match_operand:QI 1 "memory_operand" "+A") ;; memory ----- a/gcc/doc/invoke.texi --+++ b/gcc/doc/invoke.texi --@@ -1226,7 +1226,8 @@ See RS/6000 and PowerPC Options. -- -mbig-endian -mlittle-endian -- -mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} -- -mstack-protector-guard-offset=@var{offset} ----mcsr-check -mno-csr-check} --+-mcsr-check -mno-csr-check --+-minline-atomics -mno-inline-atomics} -- -- @emph{RL78 Options} -- @gccoptlist{-msim -mmul=none -mmul=g13 -mmul=g14 -mallregs --@@ -29006,6 +29007,13 @@ Do or don't use smaller but slower prolo -- library function calls. The default is to use fast inline prologues and -- epilogues. -- --+@opindex minline-atomics --+@item -minline-atomics --+@itemx -mno-inline-atomics --+Do or don't use smaller but slower subword atomic emulation code that uses --+libatomic function calls. The default is to use fast inline subword atomics --+that do not require libatomic. --+ -- @opindex mshorten-memrefs -- @item -mshorten-memrefs -- @itemx -mno-shorten-memrefs ----- /dev/null --+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-1.c --@@ -0,0 +1,18 @@ --+/* { dg-do compile } */ --+/* { dg-options "-mno-inline-atomics" } */ --+/* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "fetch_and_nand" { target *-*-* } 0 } */ --+/* { dg-final { scan-assembler "\tcall\t__sync_fetch_and_add_1" } } */ --+/* { dg-final { scan-assembler "\tcall\t__sync_fetch_and_nand_1" } } */ --+/* { dg-final { scan-assembler "\tcall\t__sync_bool_compare_and_swap_1" } } */ --+ --+char foo; --+char bar; --+char baz; --+ --+int --+main () --+{ --+ __sync_fetch_and_add(&foo, 1); --+ __sync_fetch_and_nand(&bar, 1); --+ __sync_bool_compare_and_swap (&baz, 1, 2); --+} ----- /dev/null --+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-2.c --@@ -0,0 +1,9 @@ --+/* { dg-do compile } */ --+/* Verify that subword atomics do not generate calls. */ --+/* { dg-options "-minline-atomics" } */ --+/* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "fetch_and_nand" { target *-*-* } 0 } */ --+/* { dg-final { scan-assembler-not "\tcall\t__sync_fetch_and_add_1" } } */ --+/* { dg-final { scan-assembler-not "\tcall\t__sync_fetch_and_nand_1" } } */ --+/* { dg-final { scan-assembler-not "\tcall\t__sync_bool_compare_and_swap_1" } } */ --+ --+#include "inline-atomics-1.c" --\ No newline at end of file ----- /dev/null --+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-3.c --@@ -0,0 +1,569 @@ --+/* Check all char alignments. */ --+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-op-1.c */ --+/* Test __atomic routines for existence and proper execution on 1 byte --+ values with each valid memory model. */ --+/* { dg-do run } */ --+/* { dg-options "-minline-atomics -Wno-address-of-packed-member" } */ --+ --+/* Test the execution of the __atomic_*OP builtin routines for a char. */ --+ --+extern void abort(void); --+ --+char count, res; --+const char init = ~0; --+ --+struct A --+{ --+ char a; --+ char b; --+ char c; --+ char d; --+} __attribute__ ((packed)) A; --+ --+/* The fetch_op routines return the original value before the operation. */ --+ --+void --+test_fetch_add (char* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ if (__atomic_fetch_add (v, count, __ATOMIC_RELAXED) != 0) --+ abort (); --+ --+ if (__atomic_fetch_add (v, 1, __ATOMIC_CONSUME) != 1) --+ abort (); --+ --+ if (__atomic_fetch_add (v, count, __ATOMIC_ACQUIRE) != 2) --+ abort (); --+ --+ if (__atomic_fetch_add (v, 1, __ATOMIC_RELEASE) != 3) --+ abort (); --+ --+ if (__atomic_fetch_add (v, count, __ATOMIC_ACQ_REL) != 4) --+ abort (); --+ --+ if (__atomic_fetch_add (v, 1, __ATOMIC_SEQ_CST) != 5) --+ abort (); --+} --+ --+ --+void --+test_fetch_sub (char* v) --+{ --+ *v = res = 20; --+ count = 0; --+ --+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_RELAXED) != res--) --+ abort (); --+ --+ if (__atomic_fetch_sub (v, 1, __ATOMIC_CONSUME) != res--) --+ abort (); --+ --+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_ACQUIRE) != res--) --+ abort (); --+ --+ if (__atomic_fetch_sub (v, 1, __ATOMIC_RELEASE) != res--) --+ abort (); --+ --+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_ACQ_REL) != res--) --+ abort (); --+ --+ if (__atomic_fetch_sub (v, 1, __ATOMIC_SEQ_CST) != res--) --+ abort (); --+} --+ --+void --+test_fetch_and (char* v) --+{ --+ *v = init; --+ --+ if (__atomic_fetch_and (v, 0, __ATOMIC_RELAXED) != init) --+ abort (); --+ --+ if (__atomic_fetch_and (v, init, __ATOMIC_CONSUME) != 0) --+ abort (); --+ --+ if (__atomic_fetch_and (v, 0, __ATOMIC_ACQUIRE) != 0) --+ abort (); --+ --+ *v = ~*v; --+ if (__atomic_fetch_and (v, init, __ATOMIC_RELEASE) != init) --+ abort (); --+ --+ if (__atomic_fetch_and (v, 0, __ATOMIC_ACQ_REL) != init) --+ abort (); --+ --+ if (__atomic_fetch_and (v, 0, __ATOMIC_SEQ_CST) != 0) --+ abort (); --+} --+ --+void --+test_fetch_nand (char* v) --+{ --+ *v = init; --+ --+ if (__atomic_fetch_nand (v, 0, __ATOMIC_RELAXED) != init) --+ abort (); --+ --+ if (__atomic_fetch_nand (v, init, __ATOMIC_CONSUME) != init) --+ abort (); --+ --+ if (__atomic_fetch_nand (v, 0, __ATOMIC_ACQUIRE) != 0 ) --+ abort (); --+ --+ if (__atomic_fetch_nand (v, init, __ATOMIC_RELEASE) != init) --+ abort (); --+ --+ if (__atomic_fetch_nand (v, init, __ATOMIC_ACQ_REL) != 0) --+ abort (); --+ --+ if (__atomic_fetch_nand (v, 0, __ATOMIC_SEQ_CST) != init) --+ abort (); --+} --+ --+void --+test_fetch_xor (char* v) --+{ --+ *v = init; --+ count = 0; --+ --+ if (__atomic_fetch_xor (v, count, __ATOMIC_RELAXED) != init) --+ abort (); --+ --+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_CONSUME) != init) --+ abort (); --+ --+ if (__atomic_fetch_xor (v, 0, __ATOMIC_ACQUIRE) != 0) --+ abort (); --+ --+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_RELEASE) != 0) --+ abort (); --+ --+ if (__atomic_fetch_xor (v, 0, __ATOMIC_ACQ_REL) != init) --+ abort (); --+ --+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_SEQ_CST) != init) --+ abort (); --+} --+ --+void --+test_fetch_or (char* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ if (__atomic_fetch_or (v, count, __ATOMIC_RELAXED) != 0) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_fetch_or (v, 2, __ATOMIC_CONSUME) != 1) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_fetch_or (v, count, __ATOMIC_ACQUIRE) != 3) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_fetch_or (v, 8, __ATOMIC_RELEASE) != 7) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_fetch_or (v, count, __ATOMIC_ACQ_REL) != 15) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_fetch_or (v, count, __ATOMIC_SEQ_CST) != 31) --+ abort (); --+} --+ --+/* The OP_fetch routines return the new value after the operation. */ --+ --+void --+test_add_fetch (char* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ if (__atomic_add_fetch (v, count, __ATOMIC_RELAXED) != 1) --+ abort (); --+ --+ if (__atomic_add_fetch (v, 1, __ATOMIC_CONSUME) != 2) --+ abort (); --+ --+ if (__atomic_add_fetch (v, count, __ATOMIC_ACQUIRE) != 3) --+ abort (); --+ --+ if (__atomic_add_fetch (v, 1, __ATOMIC_RELEASE) != 4) --+ abort (); --+ --+ if (__atomic_add_fetch (v, count, __ATOMIC_ACQ_REL) != 5) --+ abort (); --+ --+ if (__atomic_add_fetch (v, count, __ATOMIC_SEQ_CST) != 6) --+ abort (); --+} --+ --+ --+void --+test_sub_fetch (char* v) --+{ --+ *v = res = 20; --+ count = 0; --+ --+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_RELAXED) != --res) --+ abort (); --+ --+ if (__atomic_sub_fetch (v, 1, __ATOMIC_CONSUME) != --res) --+ abort (); --+ --+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_ACQUIRE) != --res) --+ abort (); --+ --+ if (__atomic_sub_fetch (v, 1, __ATOMIC_RELEASE) != --res) --+ abort (); --+ --+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_ACQ_REL) != --res) --+ abort (); --+ --+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_SEQ_CST) != --res) --+ abort (); --+} --+ --+void --+test_and_fetch (char* v) --+{ --+ *v = init; --+ --+ if (__atomic_and_fetch (v, 0, __ATOMIC_RELAXED) != 0) --+ abort (); --+ --+ *v = init; --+ if (__atomic_and_fetch (v, init, __ATOMIC_CONSUME) != init) --+ abort (); --+ --+ if (__atomic_and_fetch (v, 0, __ATOMIC_ACQUIRE) != 0) --+ abort (); --+ --+ *v = ~*v; --+ if (__atomic_and_fetch (v, init, __ATOMIC_RELEASE) != init) --+ abort (); --+ --+ if (__atomic_and_fetch (v, 0, __ATOMIC_ACQ_REL) != 0) --+ abort (); --+ --+ *v = ~*v; --+ if (__atomic_and_fetch (v, 0, __ATOMIC_SEQ_CST) != 0) --+ abort (); --+} --+ --+void --+test_nand_fetch (char* v) --+{ --+ *v = init; --+ --+ if (__atomic_nand_fetch (v, 0, __ATOMIC_RELAXED) != init) --+ abort (); --+ --+ if (__atomic_nand_fetch (v, init, __ATOMIC_CONSUME) != 0) --+ abort (); --+ --+ if (__atomic_nand_fetch (v, 0, __ATOMIC_ACQUIRE) != init) --+ abort (); --+ --+ if (__atomic_nand_fetch (v, init, __ATOMIC_RELEASE) != 0) --+ abort (); --+ --+ if (__atomic_nand_fetch (v, init, __ATOMIC_ACQ_REL) != init) --+ abort (); --+ --+ if (__atomic_nand_fetch (v, 0, __ATOMIC_SEQ_CST) != init) --+ abort (); --+} --+ --+ --+ --+void --+test_xor_fetch (char* v) --+{ --+ *v = init; --+ count = 0; --+ --+ if (__atomic_xor_fetch (v, count, __ATOMIC_RELAXED) != init) --+ abort (); --+ --+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_CONSUME) != 0) --+ abort (); --+ --+ if (__atomic_xor_fetch (v, 0, __ATOMIC_ACQUIRE) != 0) --+ abort (); --+ --+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_RELEASE) != init) --+ abort (); --+ --+ if (__atomic_xor_fetch (v, 0, __ATOMIC_ACQ_REL) != init) --+ abort (); --+ --+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_SEQ_CST) != 0) --+ abort (); --+} --+ --+void --+test_or_fetch (char* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ if (__atomic_or_fetch (v, count, __ATOMIC_RELAXED) != 1) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_or_fetch (v, 2, __ATOMIC_CONSUME) != 3) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_or_fetch (v, count, __ATOMIC_ACQUIRE) != 7) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_or_fetch (v, 8, __ATOMIC_RELEASE) != 15) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_or_fetch (v, count, __ATOMIC_ACQ_REL) != 31) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_or_fetch (v, count, __ATOMIC_SEQ_CST) != 63) --+ abort (); --+} --+ --+ --+/* Test the OP routines with a result which isn't used. Use both variations --+ within each function. */ --+ --+void --+test_add (char* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ __atomic_add_fetch (v, count, __ATOMIC_RELAXED); --+ if (*v != 1) --+ abort (); --+ --+ __atomic_fetch_add (v, count, __ATOMIC_CONSUME); --+ if (*v != 2) --+ abort (); --+ --+ __atomic_add_fetch (v, 1 , __ATOMIC_ACQUIRE); --+ if (*v != 3) --+ abort (); --+ --+ __atomic_fetch_add (v, 1, __ATOMIC_RELEASE); --+ if (*v != 4) --+ abort (); --+ --+ __atomic_add_fetch (v, count, __ATOMIC_ACQ_REL); --+ if (*v != 5) --+ abort (); --+ --+ __atomic_fetch_add (v, count, __ATOMIC_SEQ_CST); --+ if (*v != 6) --+ abort (); --+} --+ --+ --+void --+test_sub (char* v) --+{ --+ *v = res = 20; --+ count = 0; --+ --+ __atomic_sub_fetch (v, count + 1, __ATOMIC_RELAXED); --+ if (*v != --res) --+ abort (); --+ --+ __atomic_fetch_sub (v, count + 1, __ATOMIC_CONSUME); --+ if (*v != --res) --+ abort (); --+ --+ __atomic_sub_fetch (v, 1, __ATOMIC_ACQUIRE); --+ if (*v != --res) --+ abort (); --+ --+ __atomic_fetch_sub (v, 1, __ATOMIC_RELEASE); --+ if (*v != --res) --+ abort (); --+ --+ __atomic_sub_fetch (v, count + 1, __ATOMIC_ACQ_REL); --+ if (*v != --res) --+ abort (); --+ --+ __atomic_fetch_sub (v, count + 1, __ATOMIC_SEQ_CST); --+ if (*v != --res) --+ abort (); --+} --+ --+void --+test_and (char* v) --+{ --+ *v = init; --+ --+ __atomic_and_fetch (v, 0, __ATOMIC_RELAXED); --+ if (*v != 0) --+ abort (); --+ --+ *v = init; --+ __atomic_fetch_and (v, init, __ATOMIC_CONSUME); --+ if (*v != init) --+ abort (); --+ --+ __atomic_and_fetch (v, 0, __ATOMIC_ACQUIRE); --+ if (*v != 0) --+ abort (); --+ --+ *v = ~*v; --+ __atomic_fetch_and (v, init, __ATOMIC_RELEASE); --+ if (*v != init) --+ abort (); --+ --+ __atomic_and_fetch (v, 0, __ATOMIC_ACQ_REL); --+ if (*v != 0) --+ abort (); --+ --+ *v = ~*v; --+ __atomic_fetch_and (v, 0, __ATOMIC_SEQ_CST); --+ if (*v != 0) --+ abort (); --+} --+ --+void --+test_nand (char* v) --+{ --+ *v = init; --+ --+ __atomic_fetch_nand (v, 0, __ATOMIC_RELAXED); --+ if (*v != init) --+ abort (); --+ --+ __atomic_fetch_nand (v, init, __ATOMIC_CONSUME); --+ if (*v != 0) --+ abort (); --+ --+ __atomic_nand_fetch (v, 0, __ATOMIC_ACQUIRE); --+ if (*v != init) --+ abort (); --+ --+ __atomic_nand_fetch (v, init, __ATOMIC_RELEASE); --+ if (*v != 0) --+ abort (); --+ --+ __atomic_fetch_nand (v, init, __ATOMIC_ACQ_REL); --+ if (*v != init) --+ abort (); --+ --+ __atomic_nand_fetch (v, 0, __ATOMIC_SEQ_CST); --+ if (*v != init) --+ abort (); --+} --+ --+ --+ --+void --+test_xor (char* v) --+{ --+ *v = init; --+ count = 0; --+ --+ __atomic_xor_fetch (v, count, __ATOMIC_RELAXED); --+ if (*v != init) --+ abort (); --+ --+ __atomic_fetch_xor (v, ~count, __ATOMIC_CONSUME); --+ if (*v != 0) --+ abort (); --+ --+ __atomic_xor_fetch (v, 0, __ATOMIC_ACQUIRE); --+ if (*v != 0) --+ abort (); --+ --+ __atomic_fetch_xor (v, ~count, __ATOMIC_RELEASE); --+ if (*v != init) --+ abort (); --+ --+ __atomic_fetch_xor (v, 0, __ATOMIC_ACQ_REL); --+ if (*v != init) --+ abort (); --+ --+ __atomic_xor_fetch (v, ~count, __ATOMIC_SEQ_CST); --+ if (*v != 0) --+ abort (); --+} --+ --+void --+test_or (char* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ __atomic_or_fetch (v, count, __ATOMIC_RELAXED); --+ if (*v != 1) --+ abort (); --+ --+ count *= 2; --+ __atomic_fetch_or (v, count, __ATOMIC_CONSUME); --+ if (*v != 3) --+ abort (); --+ --+ count *= 2; --+ __atomic_or_fetch (v, 4, __ATOMIC_ACQUIRE); --+ if (*v != 7) --+ abort (); --+ --+ count *= 2; --+ __atomic_fetch_or (v, 8, __ATOMIC_RELEASE); --+ if (*v != 15) --+ abort (); --+ --+ count *= 2; --+ __atomic_or_fetch (v, count, __ATOMIC_ACQ_REL); --+ if (*v != 31) --+ abort (); --+ --+ count *= 2; --+ __atomic_fetch_or (v, count, __ATOMIC_SEQ_CST); --+ if (*v != 63) --+ abort (); --+} --+ --+int --+main () --+{ --+ char* V[] = {&A.a, &A.b, &A.c, &A.d}; --+ --+ for (int i = 0; i < 4; i++) { --+ test_fetch_add (V[i]); --+ test_fetch_sub (V[i]); --+ test_fetch_and (V[i]); --+ test_fetch_nand (V[i]); --+ test_fetch_xor (V[i]); --+ test_fetch_or (V[i]); --+ --+ test_add_fetch (V[i]); --+ test_sub_fetch (V[i]); --+ test_and_fetch (V[i]); --+ test_nand_fetch (V[i]); --+ test_xor_fetch (V[i]); --+ test_or_fetch (V[i]); --+ --+ test_add (V[i]); --+ test_sub (V[i]); --+ test_and (V[i]); --+ test_nand (V[i]); --+ test_xor (V[i]); --+ test_or (V[i]); --+ } --+ --+ return 0; --+} ----- /dev/null --+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-4.c --@@ -0,0 +1,566 @@ --+/* Check all short alignments. */ --+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-op-2.c */ --+/* Test __atomic routines for existence and proper execution on 2 byte --+ values with each valid memory model. */ --+/* { dg-do run } */ --+/* { dg-options "-minline-atomics -Wno-address-of-packed-member" } */ --+ --+/* Test the execution of the __atomic_*OP builtin routines for a short. */ --+ --+extern void abort(void); --+ --+short count, res; --+const short init = ~0; --+ --+struct A --+{ --+ short a; --+ short b; --+} __attribute__ ((packed)) A; --+ --+/* The fetch_op routines return the original value before the operation. */ --+ --+void --+test_fetch_add (short* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ if (__atomic_fetch_add (v, count, __ATOMIC_RELAXED) != 0) --+ abort (); --+ --+ if (__atomic_fetch_add (v, 1, __ATOMIC_CONSUME) != 1) --+ abort (); --+ --+ if (__atomic_fetch_add (v, count, __ATOMIC_ACQUIRE) != 2) --+ abort (); --+ --+ if (__atomic_fetch_add (v, 1, __ATOMIC_RELEASE) != 3) --+ abort (); --+ --+ if (__atomic_fetch_add (v, count, __ATOMIC_ACQ_REL) != 4) --+ abort (); --+ --+ if (__atomic_fetch_add (v, 1, __ATOMIC_SEQ_CST) != 5) --+ abort (); --+} --+ --+ --+void --+test_fetch_sub (short* v) --+{ --+ *v = res = 20; --+ count = 0; --+ --+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_RELAXED) != res--) --+ abort (); --+ --+ if (__atomic_fetch_sub (v, 1, __ATOMIC_CONSUME) != res--) --+ abort (); --+ --+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_ACQUIRE) != res--) --+ abort (); --+ --+ if (__atomic_fetch_sub (v, 1, __ATOMIC_RELEASE) != res--) --+ abort (); --+ --+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_ACQ_REL) != res--) --+ abort (); --+ --+ if (__atomic_fetch_sub (v, 1, __ATOMIC_SEQ_CST) != res--) --+ abort (); --+} --+ --+void --+test_fetch_and (short* v) --+{ --+ *v = init; --+ --+ if (__atomic_fetch_and (v, 0, __ATOMIC_RELAXED) != init) --+ abort (); --+ --+ if (__atomic_fetch_and (v, init, __ATOMIC_CONSUME) != 0) --+ abort (); --+ --+ if (__atomic_fetch_and (v, 0, __ATOMIC_ACQUIRE) != 0) --+ abort (); --+ --+ *v = ~*v; --+ if (__atomic_fetch_and (v, init, __ATOMIC_RELEASE) != init) --+ abort (); --+ --+ if (__atomic_fetch_and (v, 0, __ATOMIC_ACQ_REL) != init) --+ abort (); --+ --+ if (__atomic_fetch_and (v, 0, __ATOMIC_SEQ_CST) != 0) --+ abort (); --+} --+ --+void --+test_fetch_nand (short* v) --+{ --+ *v = init; --+ --+ if (__atomic_fetch_nand (v, 0, __ATOMIC_RELAXED) != init) --+ abort (); --+ --+ if (__atomic_fetch_nand (v, init, __ATOMIC_CONSUME) != init) --+ abort (); --+ --+ if (__atomic_fetch_nand (v, 0, __ATOMIC_ACQUIRE) != 0 ) --+ abort (); --+ --+ if (__atomic_fetch_nand (v, init, __ATOMIC_RELEASE) != init) --+ abort (); --+ --+ if (__atomic_fetch_nand (v, init, __ATOMIC_ACQ_REL) != 0) --+ abort (); --+ --+ if (__atomic_fetch_nand (v, 0, __ATOMIC_SEQ_CST) != init) --+ abort (); --+} --+ --+void --+test_fetch_xor (short* v) --+{ --+ *v = init; --+ count = 0; --+ --+ if (__atomic_fetch_xor (v, count, __ATOMIC_RELAXED) != init) --+ abort (); --+ --+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_CONSUME) != init) --+ abort (); --+ --+ if (__atomic_fetch_xor (v, 0, __ATOMIC_ACQUIRE) != 0) --+ abort (); --+ --+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_RELEASE) != 0) --+ abort (); --+ --+ if (__atomic_fetch_xor (v, 0, __ATOMIC_ACQ_REL) != init) --+ abort (); --+ --+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_SEQ_CST) != init) --+ abort (); --+} --+ --+void --+test_fetch_or (short* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ if (__atomic_fetch_or (v, count, __ATOMIC_RELAXED) != 0) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_fetch_or (v, 2, __ATOMIC_CONSUME) != 1) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_fetch_or (v, count, __ATOMIC_ACQUIRE) != 3) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_fetch_or (v, 8, __ATOMIC_RELEASE) != 7) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_fetch_or (v, count, __ATOMIC_ACQ_REL) != 15) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_fetch_or (v, count, __ATOMIC_SEQ_CST) != 31) --+ abort (); --+} --+ --+/* The OP_fetch routines return the new value after the operation. */ --+ --+void --+test_add_fetch (short* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ if (__atomic_add_fetch (v, count, __ATOMIC_RELAXED) != 1) --+ abort (); --+ --+ if (__atomic_add_fetch (v, 1, __ATOMIC_CONSUME) != 2) --+ abort (); --+ --+ if (__atomic_add_fetch (v, count, __ATOMIC_ACQUIRE) != 3) --+ abort (); --+ --+ if (__atomic_add_fetch (v, 1, __ATOMIC_RELEASE) != 4) --+ abort (); --+ --+ if (__atomic_add_fetch (v, count, __ATOMIC_ACQ_REL) != 5) --+ abort (); --+ --+ if (__atomic_add_fetch (v, count, __ATOMIC_SEQ_CST) != 6) --+ abort (); --+} --+ --+ --+void --+test_sub_fetch (short* v) --+{ --+ *v = res = 20; --+ count = 0; --+ --+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_RELAXED) != --res) --+ abort (); --+ --+ if (__atomic_sub_fetch (v, 1, __ATOMIC_CONSUME) != --res) --+ abort (); --+ --+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_ACQUIRE) != --res) --+ abort (); --+ --+ if (__atomic_sub_fetch (v, 1, __ATOMIC_RELEASE) != --res) --+ abort (); --+ --+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_ACQ_REL) != --res) --+ abort (); --+ --+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_SEQ_CST) != --res) --+ abort (); --+} --+ --+void --+test_and_fetch (short* v) --+{ --+ *v = init; --+ --+ if (__atomic_and_fetch (v, 0, __ATOMIC_RELAXED) != 0) --+ abort (); --+ --+ *v = init; --+ if (__atomic_and_fetch (v, init, __ATOMIC_CONSUME) != init) --+ abort (); --+ --+ if (__atomic_and_fetch (v, 0, __ATOMIC_ACQUIRE) != 0) --+ abort (); --+ --+ *v = ~*v; --+ if (__atomic_and_fetch (v, init, __ATOMIC_RELEASE) != init) --+ abort (); --+ --+ if (__atomic_and_fetch (v, 0, __ATOMIC_ACQ_REL) != 0) --+ abort (); --+ --+ *v = ~*v; --+ if (__atomic_and_fetch (v, 0, __ATOMIC_SEQ_CST) != 0) --+ abort (); --+} --+ --+void --+test_nand_fetch (short* v) --+{ --+ *v = init; --+ --+ if (__atomic_nand_fetch (v, 0, __ATOMIC_RELAXED) != init) --+ abort (); --+ --+ if (__atomic_nand_fetch (v, init, __ATOMIC_CONSUME) != 0) --+ abort (); --+ --+ if (__atomic_nand_fetch (v, 0, __ATOMIC_ACQUIRE) != init) --+ abort (); --+ --+ if (__atomic_nand_fetch (v, init, __ATOMIC_RELEASE) != 0) --+ abort (); --+ --+ if (__atomic_nand_fetch (v, init, __ATOMIC_ACQ_REL) != init) --+ abort (); --+ --+ if (__atomic_nand_fetch (v, 0, __ATOMIC_SEQ_CST) != init) --+ abort (); --+} --+ --+ --+ --+void --+test_xor_fetch (short* v) --+{ --+ *v = init; --+ count = 0; --+ --+ if (__atomic_xor_fetch (v, count, __ATOMIC_RELAXED) != init) --+ abort (); --+ --+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_CONSUME) != 0) --+ abort (); --+ --+ if (__atomic_xor_fetch (v, 0, __ATOMIC_ACQUIRE) != 0) --+ abort (); --+ --+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_RELEASE) != init) --+ abort (); --+ --+ if (__atomic_xor_fetch (v, 0, __ATOMIC_ACQ_REL) != init) --+ abort (); --+ --+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_SEQ_CST) != 0) --+ abort (); --+} --+ --+void --+test_or_fetch (short* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ if (__atomic_or_fetch (v, count, __ATOMIC_RELAXED) != 1) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_or_fetch (v, 2, __ATOMIC_CONSUME) != 3) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_or_fetch (v, count, __ATOMIC_ACQUIRE) != 7) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_or_fetch (v, 8, __ATOMIC_RELEASE) != 15) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_or_fetch (v, count, __ATOMIC_ACQ_REL) != 31) --+ abort (); --+ --+ count *= 2; --+ if (__atomic_or_fetch (v, count, __ATOMIC_SEQ_CST) != 63) --+ abort (); --+} --+ --+ --+/* Test the OP routines with a result which isn't used. Use both variations --+ within each function. */ --+ --+void --+test_add (short* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ __atomic_add_fetch (v, count, __ATOMIC_RELAXED); --+ if (*v != 1) --+ abort (); --+ --+ __atomic_fetch_add (v, count, __ATOMIC_CONSUME); --+ if (*v != 2) --+ abort (); --+ --+ __atomic_add_fetch (v, 1 , __ATOMIC_ACQUIRE); --+ if (*v != 3) --+ abort (); --+ --+ __atomic_fetch_add (v, 1, __ATOMIC_RELEASE); --+ if (*v != 4) --+ abort (); --+ --+ __atomic_add_fetch (v, count, __ATOMIC_ACQ_REL); --+ if (*v != 5) --+ abort (); --+ --+ __atomic_fetch_add (v, count, __ATOMIC_SEQ_CST); --+ if (*v != 6) --+ abort (); --+} --+ --+ --+void --+test_sub (short* v) --+{ --+ *v = res = 20; --+ count = 0; --+ --+ __atomic_sub_fetch (v, count + 1, __ATOMIC_RELAXED); --+ if (*v != --res) --+ abort (); --+ --+ __atomic_fetch_sub (v, count + 1, __ATOMIC_CONSUME); --+ if (*v != --res) --+ abort (); --+ --+ __atomic_sub_fetch (v, 1, __ATOMIC_ACQUIRE); --+ if (*v != --res) --+ abort (); --+ --+ __atomic_fetch_sub (v, 1, __ATOMIC_RELEASE); --+ if (*v != --res) --+ abort (); --+ --+ __atomic_sub_fetch (v, count + 1, __ATOMIC_ACQ_REL); --+ if (*v != --res) --+ abort (); --+ --+ __atomic_fetch_sub (v, count + 1, __ATOMIC_SEQ_CST); --+ if (*v != --res) --+ abort (); --+} --+ --+void --+test_and (short* v) --+{ --+ *v = init; --+ --+ __atomic_and_fetch (v, 0, __ATOMIC_RELAXED); --+ if (*v != 0) --+ abort (); --+ --+ *v = init; --+ __atomic_fetch_and (v, init, __ATOMIC_CONSUME); --+ if (*v != init) --+ abort (); --+ --+ __atomic_and_fetch (v, 0, __ATOMIC_ACQUIRE); --+ if (*v != 0) --+ abort (); --+ --+ *v = ~*v; --+ __atomic_fetch_and (v, init, __ATOMIC_RELEASE); --+ if (*v != init) --+ abort (); --+ --+ __atomic_and_fetch (v, 0, __ATOMIC_ACQ_REL); --+ if (*v != 0) --+ abort (); --+ --+ *v = ~*v; --+ __atomic_fetch_and (v, 0, __ATOMIC_SEQ_CST); --+ if (*v != 0) --+ abort (); --+} --+ --+void --+test_nand (short* v) --+{ --+ *v = init; --+ --+ __atomic_fetch_nand (v, 0, __ATOMIC_RELAXED); --+ if (*v != init) --+ abort (); --+ --+ __atomic_fetch_nand (v, init, __ATOMIC_CONSUME); --+ if (*v != 0) --+ abort (); --+ --+ __atomic_nand_fetch (v, 0, __ATOMIC_ACQUIRE); --+ if (*v != init) --+ abort (); --+ --+ __atomic_nand_fetch (v, init, __ATOMIC_RELEASE); --+ if (*v != 0) --+ abort (); --+ --+ __atomic_fetch_nand (v, init, __ATOMIC_ACQ_REL); --+ if (*v != init) --+ abort (); --+ --+ __atomic_nand_fetch (v, 0, __ATOMIC_SEQ_CST); --+ if (*v != init) --+ abort (); --+} --+ --+ --+ --+void --+test_xor (short* v) --+{ --+ *v = init; --+ count = 0; --+ --+ __atomic_xor_fetch (v, count, __ATOMIC_RELAXED); --+ if (*v != init) --+ abort (); --+ --+ __atomic_fetch_xor (v, ~count, __ATOMIC_CONSUME); --+ if (*v != 0) --+ abort (); --+ --+ __atomic_xor_fetch (v, 0, __ATOMIC_ACQUIRE); --+ if (*v != 0) --+ abort (); --+ --+ __atomic_fetch_xor (v, ~count, __ATOMIC_RELEASE); --+ if (*v != init) --+ abort (); --+ --+ __atomic_fetch_xor (v, 0, __ATOMIC_ACQ_REL); --+ if (*v != init) --+ abort (); --+ --+ __atomic_xor_fetch (v, ~count, __ATOMIC_SEQ_CST); --+ if (*v != 0) --+ abort (); --+} --+ --+void --+test_or (short* v) --+{ --+ *v = 0; --+ count = 1; --+ --+ __atomic_or_fetch (v, count, __ATOMIC_RELAXED); --+ if (*v != 1) --+ abort (); --+ --+ count *= 2; --+ __atomic_fetch_or (v, count, __ATOMIC_CONSUME); --+ if (*v != 3) --+ abort (); --+ --+ count *= 2; --+ __atomic_or_fetch (v, 4, __ATOMIC_ACQUIRE); --+ if (*v != 7) --+ abort (); --+ --+ count *= 2; --+ __atomic_fetch_or (v, 8, __ATOMIC_RELEASE); --+ if (*v != 15) --+ abort (); --+ --+ count *= 2; --+ __atomic_or_fetch (v, count, __ATOMIC_ACQ_REL); --+ if (*v != 31) --+ abort (); --+ --+ count *= 2; --+ __atomic_fetch_or (v, count, __ATOMIC_SEQ_CST); --+ if (*v != 63) --+ abort (); --+} --+ --+int --+main () { --+ short* V[] = {&A.a, &A.b}; --+ --+ for (int i = 0; i < 2; i++) { --+ test_fetch_add (V[i]); --+ test_fetch_sub (V[i]); --+ test_fetch_and (V[i]); --+ test_fetch_nand (V[i]); --+ test_fetch_xor (V[i]); --+ test_fetch_or (V[i]); --+ --+ test_add_fetch (V[i]); --+ test_sub_fetch (V[i]); --+ test_and_fetch (V[i]); --+ test_nand_fetch (V[i]); --+ test_xor_fetch (V[i]); --+ test_or_fetch (V[i]); --+ --+ test_add (V[i]); --+ test_sub (V[i]); --+ test_and (V[i]); --+ test_nand (V[i]); --+ test_xor (V[i]); --+ test_or (V[i]); --+ } --+ --+ return 0; --+} ----- /dev/null --+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-5.c --@@ -0,0 +1,87 @@ --+/* Test __atomic routines for existence and proper execution on 1 byte --+ values with each valid memory model. */ --+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-compare-exchange-1.c */ --+/* { dg-do run } */ --+/* { dg-options "-minline-atomics" } */ --+ --+/* Test the execution of the __atomic_compare_exchange_n builtin for a char. */ --+ --+extern void abort(void); --+ --+char v = 0; --+char expected = 0; --+char max = ~0; --+char desired = ~0; --+char zero = 0; --+ --+#define STRONG 0 --+#define WEAK 1 --+ --+int --+main () --+{ --+ --+ if (!__atomic_compare_exchange_n (&v, &expected, max, STRONG , __ATOMIC_RELAXED, __ATOMIC_RELAXED)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ --+ if (__atomic_compare_exchange_n (&v, &expected, 0, STRONG , __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) --+ abort (); --+ if (expected != max) --+ abort (); --+ --+ if (!__atomic_compare_exchange_n (&v, &expected, 0, STRONG , __ATOMIC_RELEASE, __ATOMIC_ACQUIRE)) --+ abort (); --+ if (expected != max) --+ abort (); --+ if (v != 0) --+ abort (); --+ --+ if (__atomic_compare_exchange_n (&v, &expected, desired, WEAK, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ --+ if (!__atomic_compare_exchange_n (&v, &expected, desired, STRONG , __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ if (v != max) --+ abort (); --+ --+ /* Now test the generic version. */ --+ --+ v = 0; --+ --+ if (!__atomic_compare_exchange (&v, &expected, &max, STRONG, __ATOMIC_RELAXED, __ATOMIC_RELAXED)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ --+ if (__atomic_compare_exchange (&v, &expected, &zero, STRONG , __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) --+ abort (); --+ if (expected != max) --+ abort (); --+ --+ if (!__atomic_compare_exchange (&v, &expected, &zero, STRONG , __ATOMIC_RELEASE, __ATOMIC_ACQUIRE)) --+ abort (); --+ if (expected != max) --+ abort (); --+ if (v != 0) --+ abort (); --+ --+ if (__atomic_compare_exchange (&v, &expected, &desired, WEAK, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ --+ if (!__atomic_compare_exchange (&v, &expected, &desired, STRONG , __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ if (v != max) --+ abort (); --+ --+ return 0; --+} ----- /dev/null --+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-6.c --@@ -0,0 +1,87 @@ --+/* Test __atomic routines for existence and proper execution on 2 byte --+ values with each valid memory model. */ --+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-compare-exchange-2.c */ --+/* { dg-do run } */ --+/* { dg-options "-minline-atomics" } */ --+ --+/* Test the execution of the __atomic_compare_exchange_n builtin for a short. */ --+ --+extern void abort(void); --+ --+short v = 0; --+short expected = 0; --+short max = ~0; --+short desired = ~0; --+short zero = 0; --+ --+#define STRONG 0 --+#define WEAK 1 --+ --+int --+main () --+{ --+ --+ if (!__atomic_compare_exchange_n (&v, &expected, max, STRONG , __ATOMIC_RELAXED, __ATOMIC_RELAXED)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ --+ if (__atomic_compare_exchange_n (&v, &expected, 0, STRONG , __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) --+ abort (); --+ if (expected != max) --+ abort (); --+ --+ if (!__atomic_compare_exchange_n (&v, &expected, 0, STRONG , __ATOMIC_RELEASE, __ATOMIC_ACQUIRE)) --+ abort (); --+ if (expected != max) --+ abort (); --+ if (v != 0) --+ abort (); --+ --+ if (__atomic_compare_exchange_n (&v, &expected, desired, WEAK, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ --+ if (!__atomic_compare_exchange_n (&v, &expected, desired, STRONG , __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ if (v != max) --+ abort (); --+ --+ /* Now test the generic version. */ --+ --+ v = 0; --+ --+ if (!__atomic_compare_exchange (&v, &expected, &max, STRONG, __ATOMIC_RELAXED, __ATOMIC_RELAXED)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ --+ if (__atomic_compare_exchange (&v, &expected, &zero, STRONG , __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) --+ abort (); --+ if (expected != max) --+ abort (); --+ --+ if (!__atomic_compare_exchange (&v, &expected, &zero, STRONG , __ATOMIC_RELEASE, __ATOMIC_ACQUIRE)) --+ abort (); --+ if (expected != max) --+ abort (); --+ if (v != 0) --+ abort (); --+ --+ if (__atomic_compare_exchange (&v, &expected, &desired, WEAK, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ --+ if (!__atomic_compare_exchange (&v, &expected, &desired, STRONG , __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) --+ abort (); --+ if (expected != 0) --+ abort (); --+ if (v != max) --+ abort (); --+ --+ return 0; --+} ----- /dev/null --+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-7.c --@@ -0,0 +1,69 @@ --+/* Test __atomic routines for existence and proper execution on 1 byte --+ values with each valid memory model. */ --+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-exchange-1.c */ --+/* { dg-do run } */ --+/* { dg-options "-minline-atomics" } */ --+ --+/* Test the execution of the __atomic_exchange_n builtin for a char. */ --+ --+extern void abort(void); --+ --+char v, count, ret; --+ --+int --+main () --+{ --+ v = 0; --+ count = 0; --+ --+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELAXED) != count) --+ abort (); --+ count++; --+ --+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQUIRE) != count) --+ abort (); --+ count++; --+ --+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELEASE) != count) --+ abort (); --+ count++; --+ --+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQ_REL) != count) --+ abort (); --+ count++; --+ --+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_SEQ_CST) != count) --+ abort (); --+ count++; --+ --+ /* Now test the generic version. */ --+ --+ count++; --+ --+ __atomic_exchange (&v, &count, &ret, __ATOMIC_RELAXED); --+ if (ret != count - 1 || v != count) --+ abort (); --+ count++; --+ --+ __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQUIRE); --+ if (ret != count - 1 || v != count) --+ abort (); --+ count++; --+ --+ __atomic_exchange (&v, &count, &ret, __ATOMIC_RELEASE); --+ if (ret != count - 1 || v != count) --+ abort (); --+ count++; --+ --+ __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQ_REL); --+ if (ret != count - 1 || v != count) --+ abort (); --+ count++; --+ --+ __atomic_exchange (&v, &count, &ret, __ATOMIC_SEQ_CST); --+ if (ret != count - 1 || v != count) --+ abort (); --+ count++; --+ --+ return 0; --+} ----- /dev/null --+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-8.c --@@ -0,0 +1,69 @@ --+/* Test __atomic routines for existence and proper execution on 2 byte --+ values with each valid memory model. */ --+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-exchange-2.c */ --+/* { dg-do run } */ --+/* { dg-options "-minline-atomics" } */ --+ --+/* Test the execution of the __atomic_X builtin for a short. */ --+ --+extern void abort(void); --+ --+short v, count, ret; --+ --+int --+main () --+{ --+ v = 0; --+ count = 0; --+ --+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELAXED) != count) --+ abort (); --+ count++; --+ --+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQUIRE) != count) --+ abort (); --+ count++; --+ --+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELEASE) != count) --+ abort (); --+ count++; --+ --+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQ_REL) != count) --+ abort (); --+ count++; --+ --+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_SEQ_CST) != count) --+ abort (); --+ count++; --+ --+ /* Now test the generic version. */ --+ --+ count++; --+ --+ __atomic_exchange (&v, &count, &ret, __ATOMIC_RELAXED); --+ if (ret != count - 1 || v != count) --+ abort (); --+ count++; --+ --+ __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQUIRE); --+ if (ret != count - 1 || v != count) --+ abort (); --+ count++; --+ --+ __atomic_exchange (&v, &count, &ret, __ATOMIC_RELEASE); --+ if (ret != count - 1 || v != count) --+ abort (); --+ count++; --+ --+ __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQ_REL); --+ if (ret != count - 1 || v != count) --+ abort (); --+ count++; --+ --+ __atomic_exchange (&v, &count, &ret, __ATOMIC_SEQ_CST); --+ if (ret != count - 1 || v != count) --+ abort (); --+ count++; --+ --+ return 0; --+} ----- a/libgcc/config/riscv/atomic.c --+++ b/libgcc/config/riscv/atomic.c --@@ -30,6 +30,8 @@ see the files COPYING3 and COPYING.RUNTI -- #define INVERT "not %[tmp1], %[tmp1]\n\t" -- #define DONT_INVERT "" -- --+/* Logic duplicated in gcc/gcc/config/riscv/sync.md for use when inlining is enabled */ --+ -- #define GENERATE_FETCH_AND_OP(type, size, opname, insn, invert, cop) \ -- type __sync_fetch_and_ ## opname ## _ ## size (type *p, type v) \ -- { \ -diff --git a/toolchain/gcc/patches-13.x/701-riscv-linux-Don-t-add-latomic-with-pthread.patch b/toolchain/gcc/patches-13.x/701-riscv-linux-Don-t-add-latomic-with-pthread.patch -deleted file mode 100644 -index 328c7be..0000000 ---- a/toolchain/gcc/patches-13.x/701-riscv-linux-Don-t-add-latomic-with-pthread.patch -+++ /dev/null -@@ -1,36 +0,0 @@ --From 203f3060dd363361b172f7295f42bb6bf5ac0b3b Mon Sep 17 00:00:00 2001 --From: Andreas Schwab --Date: Sat, 23 Apr 2022 15:48:42 +0200 --Subject: [PATCH] riscv/linux: Don't add -latomic with -pthread -- --Now that we have support for inline subword atomic operations, it is no --longer necessary to link against libatomic. This also fixes testsuite --failures because the framework does not properly set up the linker flags --for finding libatomic. --The use of atomic operations is also independent of the use of libpthread. -- --gcc/ -- * config/riscv/linux.h (LIB_SPEC): Don't redefine. ----- -- gcc/config/riscv/linux.h | 10 ---------- -- 1 file changed, 10 deletions(-) -- ----- a/gcc/config/riscv/linux.h --+++ b/gcc/config/riscv/linux.h --@@ -35,16 +35,6 @@ along with GCC; see the file COPYING3. -- #undef MUSL_DYNAMIC_LINKER -- #define MUSL_DYNAMIC_LINKER "/lib/ld-musl-riscv" XLEN_SPEC MUSL_ABI_SUFFIX ".so.1" -- ---/* Because RISC-V only has word-sized atomics, it requries libatomic where --- others do not. So link libatomic by default, as needed. */ ---#undef LIB_SPEC ---#ifdef LD_AS_NEEDED_OPTION ---#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC \ --- " %{pthread:" LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION "}" ---#else ---#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC " -latomic " ---#endif --- -- #define ICACHE_FLUSH_FUNC "__riscv_flush_icache" -- -- #define CPP_SPEC "%{pthread:-D_REENTRANT}" -diff --git a/toolchain/gcc/patches-13.x/910-mbsd_multi.patch b/toolchain/gcc/patches-13.x/910-mbsd_multi.patch -index 8af05c9..4138e79 100644 ---- a/toolchain/gcc/patches-13.x/910-mbsd_multi.patch -+++ b/toolchain/gcc/patches-13.x/910-mbsd_multi.patch -@@ -114,7 +114,7 @@ Date: Tue Jul 31 00:52:27 2007 +0000 - ; On SVR4 targets, it also controls whether or not to emit a - --- a/gcc/doc/invoke.texi - +++ b/gcc/doc/invoke.texi --@@ -10062,6 +10062,17 @@ This option is only supported for C and -+@@ -10065,6 +10065,17 @@ This option is only supported for C and - @option{-Wall} and by @option{-Wpedantic}, which can be disabled with - @option{-Wno-pointer-sign}. - --- -2.42.0 - diff --git a/openwrt/patch/generic/201-toolchain-gcc-add-support-for-GCC-14.patch b/openwrt/patch/generic/201-toolchain-gcc-add-support-for-GCC-14.patch deleted file mode 100644 index 7dd83f268..000000000 --- a/openwrt/patch/generic/201-toolchain-gcc-add-support-for-GCC-14.patch +++ /dev/null @@ -1,49 +0,0 @@ -diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in -index 9156f9c..ca89051 100644 ---- a/toolchain/gcc/Config.in -+++ b/toolchain/gcc/Config.in -@@ -14,6 +14,9 @@ choice - - config GCC_USE_VERSION_13 - bool "gcc 13.x" -+ -+ config GCC_USE_VERSION_14 -+ bool "gcc 14.x" - endchoice - - config GCC_USE_GRAPHITE -diff --git a/toolchain/gcc/Config.version b/toolchain/gcc/Config.version -index 92033af..200a356 100644 ---- a/toolchain/gcc/Config.version -+++ b/toolchain/gcc/Config.version -@@ -6,10 +6,15 @@ config GCC_VERSION_13 - default y if GCC_USE_VERSION_13 - bool - -+config GCC_VERSION_14 -+ default y if GCC_USE_VERSION_14 -+ bool -+ - config GCC_VERSION - string - default "11.3.0" if GCC_VERSION_11 - default "13.2.0" if GCC_VERSION_13 -+ default "14.2.0" if GCC_VERSION_14 - default "12.3.0" - - config GCC_USE_DEFAULT_VERSION -diff --git a/toolchain/gcc/common.mk b/toolchain/gcc/common.mk -index cdbf9fa..f5db99f 100644 ---- a/toolchain/gcc/common.mk -+++ b/toolchain/gcc/common.mk -@@ -42,6 +42,10 @@ ifeq ($(PKG_VERSION),13.2.0) - PKG_HASH:=e275e76442a6067341a27f04c5c6b83d8613144004c0413528863dc6b5c743da - endif - -+ifeq ($(PKG_VERSION),14.2.0) -+ PKG_HASH:=a7b39bc69cbf9e25826c5a60ab26477001f7c08d85cec04bc0e29cabed6f3cc9 -+endif -+ - PATCH_DIR=../patches-$(GCC_MAJOR_VERSION).x - - BUGURL=http://bugs.openwrt.org/ diff --git a/openwrt/patch/generic/202-toolchain-gcc-add-support-for-GCC-15.patch b/openwrt/patch/generic/202-toolchain-gcc-add-support-for-GCC-15.patch deleted file mode 100644 index f3c4f555e..000000000 --- a/openwrt/patch/generic/202-toolchain-gcc-add-support-for-GCC-15.patch +++ /dev/null @@ -1,63 +0,0 @@ -diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in -index ca89051..510c813 100644 ---- a/toolchain/gcc/Config.in -+++ b/toolchain/gcc/Config.in -@@ -17,6 +17,9 @@ choice - - config GCC_USE_VERSION_14 - bool "gcc 14.x" -+ -+ config GCC_USE_VERSION_15 -+ bool "gcc 15.x" - endchoice - - config GCC_USE_GRAPHITE -diff --git a/toolchain/gcc/Config.version b/toolchain/gcc/Config.version -index 200a356..5675b9a 100644 ---- a/toolchain/gcc/Config.version -+++ b/toolchain/gcc/Config.version -@@ -10,11 +10,16 @@ config GCC_VERSION_14 - default y if GCC_USE_VERSION_14 - bool - -+config GCC_VERSION_15 -+ default y if GCC_USE_VERSION_15 -+ bool -+ - config GCC_VERSION - string - default "11.3.0" if GCC_VERSION_11 - default "13.2.0" if GCC_VERSION_13 - default "14.2.0" if GCC_VERSION_14 -+ default "15.0.0" if GCC_VERSION_15 - default "12.3.0" - - config GCC_USE_DEFAULT_VERSION -diff --git a/toolchain/gcc/common.mk b/toolchain/gcc/common.mk -index f5db99f..24c6535 100644 ---- a/toolchain/gcc/common.mk -+++ b/toolchain/gcc/common.mk -@@ -26,7 +26,11 @@ PKG_VERSION:=$(firstword $(subst +, ,$(GCC_VERSION))) - GCC_MAJOR_VERSION:=$(word 1,$(subst ., ,$(PKG_VERSION))) - GCC_DIR:=$(PKG_NAME)-$(PKG_VERSION) - --PKG_SOURCE_URL:=@GNU/gcc/gcc-$(PKG_VERSION) -+ifeq ($(PKG_VERSION),15.0.0) -+ PKG_SOURCE_URL:=https://us.cooluc.com/gcc -+else -+ PKG_SOURCE_URL:=@GNU/gcc/gcc-$(PKG_VERSION) -+endif - PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz - PKG_CPE_ID:=cpe:/a:gnu:gcc - -@@ -46,6 +50,10 @@ ifeq ($(PKG_VERSION),14.2.0) - PKG_HASH:=e283c654987afe3de9d8080bc0bd79534b5ca0d681a73a11ff2b5d3767426840 - endif - -+ifeq ($(PKG_VERSION),15.0.0) -+ PKG_HASH:=1be70eb828b6a0e8e6292e4a0ba27a5e8b5c920c5d5aa5ec88d7c3a53a2e398f -+endif -+ - PATCH_DIR=../patches-$(GCC_MAJOR_VERSION).x - - BUGURL=http://bugs.openwrt.org/ diff --git a/openwrt/patch/generic/gcc-14/910-mbsd_multi.patch b/openwrt/patch/generic/gcc-14/910-mbsd_multi.patch deleted file mode 100644 index 4138e79bc..000000000 --- a/openwrt/patch/generic/gcc-14/910-mbsd_multi.patch +++ /dev/null @@ -1,146 +0,0 @@ -commit 99368862e44740ff4fd33760893f04e14f9dbdf1 -Author: Felix Fietkau -Date: Tue Jul 31 00:52:27 2007 +0000 - - Port the mbsd_multi patch from freewrt, which adds -fhonour-copts. This will emit warnings in packages that don't use our target cflags properly - - SVN-Revision: 8256 - - This patch brings over a feature from MirBSD: - * -fhonour-copts - If this option is not given, it's warned (depending - on environment variables). This is to catch errors - of misbuilt packages which override CFLAGS themselves. - - This patch was authored by Thorsten Glaser - with copyright assignment to the FSF in effect. - ---- a/gcc/c-family/c-opts.cc -+++ b/gcc/c-family/c-opts.cc -@@ -104,6 +104,9 @@ static size_t include_cursor; - /* Whether any standard preincluded header has been preincluded. */ - static bool done_preinclude; - -+/* Check if a port honours COPTS. */ -+static int honour_copts = 0; -+ - static void handle_OPT_d (const char *); - static void set_std_cxx98 (int); - static void set_std_cxx11 (int); -@@ -475,6 +478,12 @@ c_common_handle_option (size_t scode, co - flag_no_builtin = !value; - break; - -+ case OPT_fhonour_copts: -+ if (c_language == clk_c) { -+ honour_copts++; -+ } -+ break; -+ - case OPT_fconstant_string_class_: - constant_string_class_name = arg; - break; -@@ -1228,6 +1237,47 @@ c_common_init (void) - return false; - } - -+ if (c_language == clk_c) { -+ char *ev = getenv ("GCC_HONOUR_COPTS"); -+ int evv; -+ if (ev == NULL) -+ evv = -1; -+ else if ((*ev == '0') || (*ev == '\0')) -+ evv = 0; -+ else if (*ev == '1') -+ evv = 1; -+ else if (*ev == '2') -+ evv = 2; -+ else if (*ev == 's') -+ evv = -1; -+ else { -+ warning (0, "unknown GCC_HONOUR_COPTS value, assuming 1"); -+ evv = 1; /* maybe depend this on something like MIRBSD_NATIVE? */ -+ } -+ if (evv == 1) { -+ if (honour_copts == 0) { -+ error ("someone does not honour COPTS at all in lenient mode"); -+ return false; -+ } else if (honour_copts != 1) { -+ warning (0, "someone does not honour COPTS correctly, passed %d times", -+ honour_copts); -+ } -+ } else if (evv == 2) { -+ if (honour_copts == 0) { -+ error ("someone does not honour COPTS at all in strict mode"); -+ return false; -+ } else if (honour_copts != 1) { -+ error ("someone does not honour COPTS correctly, passed %d times", -+ honour_copts); -+ return false; -+ } -+ } else if (evv == 0) { -+ if (honour_copts != 1) -+ inform (UNKNOWN_LOCATION, "someone does not honour COPTS correctly, passed %d times", -+ honour_copts); -+ } -+ } -+ - return true; - } - ---- a/gcc/c-family/c.opt -+++ b/gcc/c-family/c.opt -@@ -1837,6 +1837,9 @@ C++ ObjC++ Optimization Alias(fexception - fhonor-std - C++ ObjC++ WarnRemoved - -+fhonour-copts -+C ObjC C++ ObjC++ RejectNegative -+ - fhosted - C ObjC - Assume normal C execution environment. ---- a/gcc/common.opt -+++ b/gcc/common.opt -@@ -1801,6 +1801,9 @@ fharden-conditional-branches - Common Var(flag_harden_conditional_branches) Optimization - Harden conditional branches by checking reversed conditions. - -+fhonour-copts -+Common RejectNegative -+ - ; Nonzero means ignore `#ident' directives. 0 means handle them. - ; Generate position-independent code for executables if possible - ; On SVR4 targets, it also controls whether or not to emit a ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -10065,6 +10065,17 @@ This option is only supported for C and - @option{-Wall} and by @option{-Wpedantic}, which can be disabled with - @option{-Wno-pointer-sign}. - -+@item -fhonour-copts -+@opindex fhonour-copts -+If @env{GCC_HONOUR_COPTS} is set to 1, abort if this option is not -+given at least once, and warn if it is given more than once. -+If @env{GCC_HONOUR_COPTS} is set to 2, abort if this option is not -+given exactly once. -+If @env{GCC_HONOUR_COPTS} is set to 0 or unset, warn if this option -+is not given exactly once. -+The warning is quelled if @env{GCC_HONOUR_COPTS} is set to @samp{s}. -+This flag and environment variable only affect the C language. -+ - @opindex Wstack-protector - @opindex Wno-stack-protector - @item -Wstack-protector ---- a/gcc/opts.cc -+++ b/gcc/opts.cc -@@ -2767,6 +2767,9 @@ common_handle_option (struct gcc_options - add_comma_separated_to_vector (&opts->x_flag_ignored_attributes, arg); - break; - -+ case OPT_fhonour_copts: -+ break; -+ - case OPT_Werror: - dc->warning_as_error_requested = value; - break; diff --git a/openwrt/patch/generic/gcc-15/970-macos_arm64-building-fix.patch b/openwrt/patch/generic/gcc-15/970-macos_arm64-building-fix.patch deleted file mode 100644 index 042a92676..000000000 --- a/openwrt/patch/generic/gcc-15/970-macos_arm64-building-fix.patch +++ /dev/null @@ -1,45 +0,0 @@ -commit 9c6e71079b46ad5433165feaa2001450f2017b56 -Author: Przemysław Buczkowski -Date: Mon Aug 16 13:16:21 2021 +0100 - - GCC: Patch for Apple Silicon compatibility - - This patch fixes a linker error occuring when compiling - the cross-compiler on macOS and ARM64 architecture. - - Adapted from: - https://github.com/richfelker/musl-cross-make/issues/116#issuecomment-823612404 - - Change-Id: Ia3ee98a163bbb62689f42e2da83a5ef36beb0913 - Reviewed-on: https://review.haiku-os.org/c/buildtools/+/4329 - Reviewed-by: John Scipione - Reviewed-by: Adrien Destugues - ---- a/gcc/config/aarch64/aarch64.h -+++ b/gcc/config/aarch64/aarch64.h -@@ -1410,7 +1410,7 @@ extern enum aarch64_code_model aarch64_cmodel; - - /* Extra specs when building a native AArch64-hosted compiler. - Option rewriting rules based on host system. */ --#if defined(__aarch64__) -+#if defined(__aarch64__) && ! defined(__APPLE__) - extern const char *host_detect_local_cpu (int argc, const char **argv); - #define HAVE_LOCAL_CPU_DETECT - # define EXTRA_SPEC_FUNCTIONS \ ---- a/gcc/config/host-darwin.cc -+++ b/gcc/config/host-darwin.cc -@@ -23,6 +23,8 @@ - #include "options.h" - #include "diagnostic-core.h" - #include "config/host-darwin.h" -+#include "hosthooks.h" -+#include "hosthooks-def.h" - #include - - /* For Darwin (macOS only) platforms, without ASLR (PIE) enabled on the -@@ -181,3 +183,5 @@ darwin_gt_pch_use_address (void *&addr, size_t sz, int fd, size_t off) - - return 1; - } -+ -+const struct host_hooks host_hooks = HOST_HOOKS_INITIALIZER; diff --git a/openwrt/patch/irqbalance/011-meson-numa.patch b/openwrt/patch/irqbalance/011-meson-numa.patch deleted file mode 100644 index 33582fe8e..000000000 --- a/openwrt/patch/irqbalance/011-meson-numa.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- a/meson.build -+++ b/meson.build -@@ -10,11 +10,12 @@ m_dep = cc.find_library('m', required: false) - capng_dep = dependency('libcap-ng', required: get_option('capng')) - ncurses_dep = dependency('curses', required: get_option('ui')) - systemd_dep = dependency('libsystemd', required: get_option('systemd')) -+numa_dep = dependency('libnuma', required: get_option('numa')) - - cdata = configuration_data() - cdata.set('HAVE_GETOPT_LONG', cc.has_function('getopt_long')) - cdata.set('HAVE_IRQBALANCEUI', ncurses_dep.found()) --cdata.set('HAVE_NUMA_H', cc.has_header('numa.h')) -+cdata.set('HAVE_NUMA_H', numa_dep.found()) - cdata.set('HAVE_LIBCAP_NG', capng_dep.found()) - cdata.set('HAVE_LIBSYSTEMD', systemd_dep.found()) - cdata.set_quoted('VERSION', meson.project_version()) ---- a/meson_options.txt -+++ b/meson_options.txt -@@ -9,3 +9,7 @@ option('systemd', type : 'feature', - option('ui', type : 'feature', - description : 'Build the UI component', - ) -+ -+option('numa', type : 'feature', -+ description : 'Build with numa support', -+) diff --git a/openwrt/patch/kernel-6.6/arm64/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch b/openwrt/patch/kernel-6.18/arm64/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch similarity index 59% rename from openwrt/patch/kernel-6.6/arm64/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch rename to openwrt/patch/kernel-6.18/arm64/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch index 811224428..dc0fb9592 100644 --- a/openwrt/patch/kernel-6.6/arm64/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch +++ b/openwrt/patch/kernel-6.18/arm64/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch @@ -18,15 +18,15 @@ Signed-off-by: Sumit Gupta --- a/arch/arm64/kernel/cpuinfo.c +++ b/arch/arm64/kernel/cpuinfo.c -@@ -189,9 +189,8 @@ static int c_show(struct seq_file *m, vo - * "processor". Give glibc what it expects. - */ - seq_printf(m, "processor\t: %d\n", i); -- if (compat) -- seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n", -- MIDR_REVISION(midr), COMPAT_ELF_PLATFORM); -+ seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n", -+ MIDR_REVISION(midr), COMPAT_ELF_PLATFORM); +@@ -224,9 +224,8 @@ static int c_show(struct seq_file *m, vo + * "processor". Give glibc what it expects. + */ + seq_printf(m, "processor\t: %d\n", cpu); +- if (compat) +- seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n", +- MIDR_REVISION(midr), COMPAT_ELF_PLATFORM); ++ seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n", ++ MIDR_REVISION(midr), COMPAT_ELF_PLATFORM); - seq_printf(m, "BogoMIPS\t: %lu.%02lu\n", - loops_per_jiffy / (500000UL/HZ), + seq_printf(m, "BogoMIPS\t: %lu.%02lu\n", + loops_per_jiffy / (500000UL/HZ), diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0001-net-tcp_bbr-broaden-app-limited-rate-sample-detectio.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0001-net-tcp_bbr-broaden-app-limited-rate-sample-detectio.patch similarity index 85% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0001-net-tcp_bbr-broaden-app-limited-rate-sample-detectio.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0001-net-tcp_bbr-broaden-app-limited-rate-sample-detectio.patch index 69cce2a06..f0f22b801 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0001-net-tcp_bbr-broaden-app-limited-rate-sample-detectio.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0001-net-tcp_bbr-broaden-app-limited-rate-sample-detectio.patch @@ -1,7 +1,7 @@ -From eb92cc2649fa5e8b31fe0577a7d2f6820699a9cc Mon Sep 17 00:00:00 2001 +From 2343b8617207cb536de6a7165188c681263f3407 Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Tue, 11 Jun 2019 12:26:55 -0400 -Subject: [PATCH 01/18] net-tcp_bbr: broaden app-limited rate sample detection +Subject: [PATCH 01/19] net-tcp_bbr: broaden app-limited rate sample detection This commit is a bug fix for the Linux TCP app-limited (application-limited) logic that is used for collecting rate @@ -32,7 +32,7 @@ Signed-off-by: Alexandre Frade --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -3874,6 +3874,7 @@ static int tcp_ack(struct sock *sk, cons +@@ -4048,6 +4048,7 @@ static int tcp_ack(struct sock *sk, cons prior_fack = tcp_is_sack(tp) ? tcp_highest_sack_seq(tp) : tp->snd_una; rs.prior_in_flight = tcp_packets_in_flight(tp); @@ -42,10 +42,10 @@ Signed-off-by: Alexandre Frade * is in window. --- a/net/ipv4/tcp_timer.c +++ b/net/ipv4/tcp_timer.c -@@ -664,6 +664,7 @@ void tcp_write_timer_handler(struct sock +@@ -703,6 +703,7 @@ void tcp_write_timer_handler(struct sock + icsk_timeout(icsk)); return; } - + tcp_rate_check_app_limited(sk); tcp_mstamp_refresh(tcp_sk(sk)); event = icsk->icsk_pending; diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0002-net-tcp_bbr-v2-shrink-delivered_mstamp-first_tx_msta.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0002-net-tcp_bbr-v2-shrink-delivered_mstamp-first_tx_msta.patch similarity index 87% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0002-net-tcp_bbr-v2-shrink-delivered_mstamp-first_tx_msta.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0002-net-tcp_bbr-v2-shrink-delivered_mstamp-first_tx_msta.patch index cd9eb0ac6..0667ead6c 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0002-net-tcp_bbr-v2-shrink-delivered_mstamp-first_tx_msta.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0002-net-tcp_bbr-v2-shrink-delivered_mstamp-first_tx_msta.patch @@ -1,7 +1,7 @@ -From 94abfc4e52198e003444ef5139df915514b8c207 Mon Sep 17 00:00:00 2001 +From c7683b8a74098c5f48c61d8d578dd15929c24843 Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Sun, 24 Jun 2018 21:55:59 -0400 -Subject: [PATCH 02/18] net-tcp_bbr: v2: shrink delivered_mstamp, +Subject: [PATCH 02/19] net-tcp_bbr: v2: shrink delivered_mstamp, first_tx_mstamp to u32 to free up 8 bytes Free up some space for tracking inflight and losses for each @@ -25,7 +25,7 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -822,6 +822,11 @@ static inline u32 tcp_stamp_us_delta(u64 +@@ -946,6 +946,11 @@ static inline u32 tcp_stamp_us_delta(u64 return max_t(s64, t1 - t0, 0); } @@ -34,10 +34,10 @@ Signed-off-by: Alexandre Frade + return max_t(s32, t1 - t0, 0); +} + - static inline u32 tcp_skb_timestamp(const struct sk_buff *skb) + /* provide the departure time in us unit */ + static inline u64 tcp_skb_timestamp_us(const struct sk_buff *skb) { - return tcp_ns_to_ts(skb->skb_mstamp_ns); -@@ -897,9 +902,9 @@ struct tcp_skb_cb { +@@ -1059,9 +1064,9 @@ struct tcp_skb_cb { /* pkts S/ACKed so far upon tx of skb, incl retrans: */ __u32 delivered; /* start of send pipeline phase */ diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0003-net-tcp_bbr-v2-snapshot-packets-in-flight-at-transmi.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0003-net-tcp_bbr-v2-snapshot-packets-in-flight-at-transmi.patch similarity index 90% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0003-net-tcp_bbr-v2-snapshot-packets-in-flight-at-transmi.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0003-net-tcp_bbr-v2-snapshot-packets-in-flight-at-transmi.patch index 128f33ec5..6c284d409 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0003-net-tcp_bbr-v2-snapshot-packets-in-flight-at-transmi.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0003-net-tcp_bbr-v2-snapshot-packets-in-flight-at-transmi.patch @@ -1,7 +1,7 @@ -From 497c9101c33baca0207cad3e7e328ccd72e3e62c Mon Sep 17 00:00:00 2001 +From a128e1c2f3d98794c7341f357628d1e7f737da23 Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Sat, 5 Aug 2017 11:49:50 -0400 -Subject: [PATCH 03/18] net-tcp_bbr: v2: snapshot packets in flight at transmit +Subject: [PATCH 03/19] net-tcp_bbr: v2: snapshot packets in flight at transmit time and pass in rate_sample CC algorithms may want to snapshot the number of packets in flight at @@ -27,7 +27,7 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -905,6 +905,10 @@ struct tcp_skb_cb { +@@ -1067,6 +1067,10 @@ struct tcp_skb_cb { u32 first_tx_mstamp; /* when we reached the "delivered" count */ u32 delivered_mstamp; @@ -38,7 +38,7 @@ Signed-off-by: Alexandre Frade } tx; /* only used for outgoing skbs */ union { struct inet_skb_parm h4; -@@ -1052,6 +1056,7 @@ struct rate_sample { +@@ -1231,6 +1235,7 @@ struct rate_sample { u64 prior_mstamp; /* starting timestamp for interval */ u32 prior_delivered; /* tp->delivered at "prior_mstamp" */ u32 prior_delivered_ce;/* tp->delivered_ce at "prior_mstamp" */ @@ -46,7 +46,7 @@ Signed-off-by: Alexandre Frade s32 delivered; /* number of packets delivered over interval */ s32 delivered_ce; /* number of packets delivered w/ CE marks*/ long interval_us; /* time for tp->delivered to incr "delivered" */ -@@ -1174,6 +1179,7 @@ static inline void tcp_ca_event(struct s +@@ -1374,6 +1379,7 @@ static inline void tcp_ca_event(struct s void tcp_set_ca_state(struct sock *sk, const u8 ca_state); /* From tcp_rate.c */ @@ -56,8 +56,8 @@ Signed-off-by: Alexandre Frade struct rate_sample *rs); --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c -@@ -2703,6 +2703,7 @@ static bool tcp_write_xmit(struct sock * - skb_set_delivery_time(skb, tp->tcp_wstamp_ns, true); +@@ -2916,6 +2916,7 @@ static bool tcp_write_xmit(struct sock * + skb_set_delivery_time(skb, tp->tcp_wstamp_ns, SKB_CLOCK_MONOTONIC); list_move_tail(&skb->tcp_tsorted_anchor, &tp->tsorted_sent_queue); tcp_init_tso_segs(skb, mss_now); + tcp_set_tx_in_flight(sk, skb); diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0004-net-tcp_bbr-v2-count-packets-lost-over-TCP-rate-samp.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0004-net-tcp_bbr-v2-count-packets-lost-over-TCP-rate-samp.patch similarity index 92% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0004-net-tcp_bbr-v2-count-packets-lost-over-TCP-rate-samp.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0004-net-tcp_bbr-v2-count-packets-lost-over-TCP-rate-samp.patch index d9d335594..affccb9d6 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0004-net-tcp_bbr-v2-count-packets-lost-over-TCP-rate-samp.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0004-net-tcp_bbr-v2-count-packets-lost-over-TCP-rate-samp.patch @@ -1,7 +1,7 @@ -From 9e07a8f79e42db42adcc961baabc6e142dd891ed Mon Sep 17 00:00:00 2001 +From 4a30ce7df55db785e1002dbd9d87f807fe14568a Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Thu, 12 Oct 2017 23:44:27 -0400 -Subject: [PATCH 04/18] net-tcp_bbr: v2: count packets lost over TCP rate +Subject: [PATCH 04/19] net-tcp_bbr: v2: count packets lost over TCP rate sampling interval For understanding the relationship between inflight and packet loss @@ -19,7 +19,7 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -909,6 +909,7 @@ struct tcp_skb_cb { +@@ -1071,6 +1071,7 @@ struct tcp_skb_cb { #define TCPCB_IN_FLIGHT_MAX ((1U << TCPCB_IN_FLIGHT_BITS) - 1) u32 in_flight:20, /* packets in flight at transmit */ unused2:12; @@ -27,7 +27,7 @@ Signed-off-by: Alexandre Frade } tx; /* only used for outgoing skbs */ union { struct inet_skb_parm h4; -@@ -1054,11 +1055,13 @@ struct ack_sample { +@@ -1233,11 +1234,13 @@ struct ack_sample { */ struct rate_sample { u64 prior_mstamp; /* starting timestamp for interval */ diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0005-net-tcp_bbr-v2-export-FLAG_ECE-in-rate_sample.is_ece.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0005-net-tcp_bbr-v2-export-FLAG_ECE-in-rate_sample.is_ece.patch similarity index 80% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0005-net-tcp_bbr-v2-export-FLAG_ECE-in-rate_sample.is_ece.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0005-net-tcp_bbr-v2-export-FLAG_ECE-in-rate_sample.is_ece.patch index 9aafb04f3..7d08adfe5 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0005-net-tcp_bbr-v2-export-FLAG_ECE-in-rate_sample.is_ece.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0005-net-tcp_bbr-v2-export-FLAG_ECE-in-rate_sample.is_ece.patch @@ -1,7 +1,7 @@ -From 5f7df19fe56d5ddaa7d3ba34ded446e26a5725a1 Mon Sep 17 00:00:00 2001 +From 27fa5566204ef20bb34b2e5b68a7f6807afce447 Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Mon, 19 Nov 2018 13:48:36 -0500 -Subject: [PATCH 05/18] net-tcp_bbr: v2: export FLAG_ECE in rate_sample.is_ece +Subject: [PATCH 05/19] net-tcp_bbr: v2: export FLAG_ECE in rate_sample.is_ece For understanding the relationship between inflight and ECN signals, to try to find the highest inflight value that has acceptable levels @@ -18,7 +18,7 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -1073,6 +1073,7 @@ struct rate_sample { +@@ -1252,6 +1252,7 @@ struct rate_sample { bool is_app_limited; /* is sample from packet with bubble in pipe? */ bool is_retrans; /* is sample from retransmission? */ bool is_ack_delayed; /* is this (likely) a delayed ACK? */ @@ -28,8 +28,8 @@ Signed-off-by: Alexandre Frade struct tcp_congestion_ops { --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -3973,6 +3973,7 @@ static int tcp_ack(struct sock *sk, cons - delivered = tcp_newly_delivered(sk, delivered, flag); +@@ -4146,6 +4146,7 @@ static int tcp_ack(struct sock *sk, cons + lost = tp->lost - lost; /* freshly marked lost */ rs.is_ack_delayed = !!(flag & FLAG_ACK_MAYBE_DELAYED); + rs.is_ece = !!(flag & FLAG_ECE); diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0006-net-tcp_bbr-v2-introduce-ca_ops-skb_marked_lost-CC-m.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0006-net-tcp_bbr-v2-introduce-ca_ops-skb_marked_lost-CC-m.patch similarity index 88% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0006-net-tcp_bbr-v2-introduce-ca_ops-skb_marked_lost-CC-m.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0006-net-tcp_bbr-v2-introduce-ca_ops-skb_marked_lost-CC-m.patch index 04c29cdef..5295e0ddb 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0006-net-tcp_bbr-v2-introduce-ca_ops-skb_marked_lost-CC-m.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0006-net-tcp_bbr-v2-introduce-ca_ops-skb_marked_lost-CC-m.patch @@ -1,7 +1,7 @@ -From 36f2ad7500c7fd665efbf38482fa838ba070acc0 Mon Sep 17 00:00:00 2001 +From c083bc8abfefbee48922f6ff7976020abc71253f Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Tue, 7 Aug 2018 21:52:06 -0400 -Subject: [PATCH 06/18] net-tcp_bbr: v2: introduce ca_ops->skb_marked_lost() CC +Subject: [PATCH 06/19] net-tcp_bbr: v2: introduce ca_ops->skb_marked_lost() CC module callback API For connections experiencing reordering, RACK can mark packets lost @@ -30,7 +30,7 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -1100,6 +1100,9 @@ struct tcp_congestion_ops { +@@ -1279,6 +1279,9 @@ struct tcp_congestion_ops { /* override sysctl_tcp_min_tso_segs */ u32 (*min_tso_segs)(struct sock *sk); @@ -42,7 +42,7 @@ Signed-off-by: Alexandre Frade */ --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -1103,7 +1103,12 @@ static void tcp_verify_retransmit_hint(s +@@ -1290,7 +1290,12 @@ static void tcp_verify_retransmit_hint(s */ static void tcp_notify_skb_loss_event(struct tcp_sock *tp, const struct sk_buff *skb) { diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0007-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-merge-in.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0007-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-merge-in.patch similarity index 92% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0007-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-merge-in.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0007-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-merge-in.patch index cf3a0f0c5..2e0a7e537 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0007-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-merge-in.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0007-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-merge-in.patch @@ -1,7 +1,7 @@ -From 8c74d21f1869f7bc7a5c8700172181b4a6e4f04d Mon Sep 17 00:00:00 2001 +From 74522518932db459e21108dede9f1354cc2bb6b8 Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Wed, 1 May 2019 20:16:33 -0400 -Subject: [PATCH 07/18] net-tcp_bbr: v2: adjust skb tx.in_flight upon merge in +Subject: [PATCH 07/19] net-tcp_bbr: v2: adjust skb tx.in_flight upon merge in tcp_shifted_skb() When tcp_shifted_skb() updates state as adjacent SACKed skbs are @@ -39,7 +39,7 @@ Signed-off-by: Alexandre Frade --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -1489,6 +1489,17 @@ static bool tcp_shifted_skb(struct sock +@@ -1660,6 +1660,17 @@ static bool tcp_shifted_skb(struct sock WARN_ON_ONCE(tcp_skb_pcount(skb) < pcount); tcp_skb_pcount_add(skb, -pcount); diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0008-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-split-in.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0008-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-split-in.patch similarity index 91% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0008-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-split-in.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0008-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-split-in.patch index 202e536fa..89fb3ba89 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0008-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-split-in.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0008-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-split-in.patch @@ -1,7 +1,7 @@ -From 545f96f640c4ff7f485ef4314b990b5a380aef2e Mon Sep 17 00:00:00 2001 +From f64cb2d65d9412d32ae5e5261d2bd1ca650f8e8c Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Wed, 1 May 2019 20:16:25 -0400 -Subject: [PATCH 08/18] net-tcp_bbr: v2: adjust skb tx.in_flight upon split in +Subject: [PATCH 08/19] net-tcp_bbr: v2: adjust skb tx.in_flight upon split in tcp_fragment() When we fragment an skb that has already been sent, we need to update @@ -31,7 +31,7 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -1199,6 +1199,21 @@ static inline bool tcp_skb_sent_after(u6 +@@ -1399,6 +1399,21 @@ static inline bool tcp_skb_sent_after(u6 return t1 > t2 || (t1 == t2 && after(seq1, seq2)); } @@ -55,16 +55,16 @@ Signed-off-by: Alexandre Frade * between different flows. --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c -@@ -1548,7 +1548,7 @@ int tcp_fragment(struct sock *sk, enum t +@@ -1761,7 +1761,7 @@ int tcp_fragment(struct sock *sk, enum t { struct tcp_sock *tp = tcp_sk(sk); struct sk_buff *buff; - int old_factor; + int old_factor, inflight_prev; long limit; + u16 flags; int nlen; - u8 flags; -@@ -1623,6 +1623,30 @@ int tcp_fragment(struct sock *sk, enum t +@@ -1836,6 +1836,30 @@ int tcp_fragment(struct sock *sk, enum t if (diff) tcp_adjust_pcount(sk, skb, diff); diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0009-net-tcp-add-new-ca-opts-flag-TCP_CONG_WANTS_CE_EVENT.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0009-net-tcp-add-new-ca-opts-flag-TCP_CONG_WANTS_CE_EVENT.patch similarity index 66% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0009-net-tcp-add-new-ca-opts-flag-TCP_CONG_WANTS_CE_EVENT.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0009-net-tcp-add-new-ca-opts-flag-TCP_CONG_WANTS_CE_EVENT.patch index 898c976aa..2dd2abf6c 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0009-net-tcp-add-new-ca-opts-flag-TCP_CONG_WANTS_CE_EVENT.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0009-net-tcp-add-new-ca-opts-flag-TCP_CONG_WANTS_CE_EVENT.patch @@ -1,7 +1,7 @@ -From 4baad1b6a9c1e9f84e0e0a40d789382e0826e49a Mon Sep 17 00:00:00 2001 +From d39a6429c0ec67f51478737f7a13f6295ca8b3c0 Mon Sep 17 00:00:00 2001 From: Yousuk Seung Date: Wed, 23 May 2018 17:55:54 -0700 -Subject: [PATCH 09/18] net-tcp: add new ca opts flag TCP_CONG_WANTS_CE_EVENTS +Subject: [PATCH 09/19] net-tcp: add new ca opts flag TCP_CONG_WANTS_CE_EVENTS Add a a new ca opts flag TCP_CONG_WANTS_CE_EVENTS that allows a congestion control module to receive CE events. @@ -23,20 +23,20 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -1035,7 +1035,11 @@ enum tcp_ca_ack_event_flags { - #define TCP_CONG_NON_RESTRICTED 0x1 - /* Requires ECN/ECT set on all packets */ - #define TCP_CONG_NEEDS_ECN 0x2 --#define TCP_CONG_MASK (TCP_CONG_NON_RESTRICTED | TCP_CONG_NEEDS_ECN) +@@ -1212,9 +1212,11 @@ enum tcp_ca_ack_event_flags { + #define TCP_CONG_ECT_1_NEGOTIATION BIT(3) + /* Cannot fallback to RFC3168 during AccECN negotiation */ + #define TCP_CONG_NO_FALLBACK_RFC3168 BIT(4) +/* Wants notification of CE events (CA_EVENT_ECN_IS_CE, CA_EVENT_ECN_NO_CE). */ -+#define TCP_CONG_WANTS_CE_EVENTS 0x4 -+#define TCP_CONG_MASK (TCP_CONG_NON_RESTRICTED | \ -+ TCP_CONG_NEEDS_ECN | \ -+ TCP_CONG_WANTS_CE_EVENTS) ++#define TCP_CONG_WANTS_CE_EVENTS BIT(2) + #define TCP_CONG_MASK (TCP_CONG_NON_RESTRICTED | TCP_CONG_NEEDS_ECN | \ + TCP_CONG_NEEDS_ACCECN | TCP_CONG_ECT_1_NEGOTIATION | \ +- TCP_CONG_NO_FALLBACK_RFC3168) ++ TCP_CONG_NO_FALLBACK_RFC3168 | TCP_CONG_WANTS_CE_EVENTS) union tcp_cc_info; -@@ -1167,6 +1171,14 @@ static inline char *tcp_ca_get_name_by_k +@@ -1346,6 +1348,14 @@ static inline char *tcp_ca_get_name_by_k } #endif @@ -53,7 +53,7 @@ Signed-off-by: Alexandre Frade const struct inet_connection_sock *icsk = inet_csk(sk); --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -376,7 +376,7 @@ static void __tcp_ecn_check_ce(struct so +@@ -358,7 +358,7 @@ static void tcp_data_ecn_check(struct so tcp_enter_quickack_mode(sk, 2); break; case INET_ECN_CE: @@ -61,13 +61,13 @@ Signed-off-by: Alexandre Frade + if (tcp_ca_wants_ce_events(sk)) tcp_ca_event(sk, CA_EVENT_ECN_IS_CE); - if (!(tp->ecn_flags & TCP_ECN_DEMAND_CWR)) { -@@ -387,7 +387,7 @@ static void __tcp_ecn_check_ce(struct so + if (!(tp->ecn_flags & TCP_ECN_DEMAND_CWR) && +@@ -376,7 +376,7 @@ static void tcp_data_ecn_check(struct so tp->ecn_flags |= TCP_ECN_SEEN; break; default: - if (tcp_ca_needs_ecn(sk)) + if (tcp_ca_wants_ce_events(sk)) tcp_ca_event(sk, CA_EVENT_ECN_NO_CE); - tp->ecn_flags |= TCP_ECN_SEEN; - break; + if (!tcp_ecn_mode_rfc3168(tp)) + break; diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0010-net-tcp-re-generalize-TSO-sizing-in-TCP-CC-module-AP.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0010-net-tcp-re-generalize-TSO-sizing-in-TCP-CC-module-AP.patch similarity index 85% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0010-net-tcp-re-generalize-TSO-sizing-in-TCP-CC-module-AP.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0010-net-tcp-re-generalize-TSO-sizing-in-TCP-CC-module-AP.patch index 4a7462ae4..dd5ac81a8 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0010-net-tcp-re-generalize-TSO-sizing-in-TCP-CC-module-AP.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0010-net-tcp-re-generalize-TSO-sizing-in-TCP-CC-module-AP.patch @@ -1,7 +1,7 @@ -From d703f42b8914209f615f18cd2ba296f4f25d66a3 Mon Sep 17 00:00:00 2001 +From 8b64cdb009d7624b4a233a89e510e3a92fee9e71 Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Fri, 27 Sep 2019 17:10:26 -0400 -Subject: [PATCH 10/18] net-tcp: re-generalize TSO sizing in TCP CC module API +Subject: [PATCH 10/19] net-tcp: re-generalize TSO sizing in TCP CC module API Reorganize the API for CC modules so that the CC module once again gets complete control of the TSO sizing decision. This is how the API @@ -27,7 +27,7 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -1101,8 +1101,8 @@ struct tcp_congestion_ops { +@@ -1278,8 +1278,8 @@ struct tcp_congestion_ops { /* hook for packet ack accounting (optional) */ void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample); @@ -40,8 +40,8 @@ Signed-off-by: Alexandre Frade void (*skb_marked_lost)(struct sock *sk, const struct sk_buff *skb); --- a/net/ipv4/tcp_bbr.c +++ b/net/ipv4/tcp_bbr.c -@@ -300,20 +300,35 @@ __bpf_kfunc static u32 bbr_min_tso_segs( - return sk->sk_pacing_rate < (bbr_min_tso_rate >> 3) ? 1 : 2; +@@ -301,20 +301,35 @@ __bpf_kfunc static u32 bbr_min_tso_segs( + return READ_ONCE(sk->sk_pacing_rate) < (bbr_min_tso_rate >> 3) ? 1 : 2; } +/* Return the number of segments BBR would like in a TSO/GSO skb, given @@ -54,7 +54,7 @@ Signed-off-by: Alexandre Frade + u64 bytes; + + /* Budget a TSO/GSO burst size allowance based on bw (pacing_rate). */ -+ bytes = sk->sk_pacing_rate >> sk->sk_pacing_shift; ++ bytes = READ_ONCE(sk->sk_pacing_rate) >> READ_ONCE(sk->sk_pacing_shift); + + bytes = min_t(u32, bytes, gso_max_size - 1 - MAX_TCP_HEADER); + segs = max_t(u32, bytes / mss_now, bbr_min_tso_segs(sk)); @@ -77,16 +77,16 @@ Signed-off-by: Alexandre Frade - * driver provided sk_gso_max_size. - */ - bytes = min_t(unsigned long, -- sk->sk_pacing_rate >> READ_ONCE(sk->sk_pacing_shift), +- READ_ONCE(sk->sk_pacing_rate) >> READ_ONCE(sk->sk_pacing_shift), - GSO_LEGACY_MAX_SIZE - 1 - MAX_TCP_HEADER); - segs = max_t(u32, bytes / tp->mss_cache, bbr_min_tso_segs(sk)); - return min(segs, 0x7FU); -+ return bbr_tso_segs_generic(sk, tp->mss_cache, GSO_MAX_SIZE); ++ return bbr_tso_segs_generic(sk, tp->mss_cache, GSO_MAX_SIZE); } /* Save "last known good" cwnd so we can restore it after losses or PROBE_RTT */ -@@ -1149,7 +1164,7 @@ static struct tcp_congestion_ops tcp_bbr +@@ -1150,7 +1165,7 @@ static struct tcp_congestion_ops tcp_bbr .undo_cwnd = bbr_undo_cwnd, .cwnd_event = bbr_cwnd_event, .ssthresh = bbr_ssthresh, @@ -97,7 +97,7 @@ Signed-off-by: Alexandre Frade }; --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c -@@ -2022,13 +2022,12 @@ static u32 tcp_tso_autosize(const struct +@@ -2216,13 +2216,12 @@ static u32 tcp_tso_autosize(const struct static u32 tcp_tso_segs(struct sock *sk, unsigned int mss_now) { const struct tcp_congestion_ops *ca_ops = inet_csk(sk)->icsk_ca_ops; diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0011-net-tcp-add-fast_ack_mode-1-skip-rwin-check-in-tcp_f.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0011-net-tcp-add-fast_ack_mode-1-skip-rwin-check-in-tcp_f.patch similarity index 69% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0011-net-tcp-add-fast_ack_mode-1-skip-rwin-check-in-tcp_f.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0011-net-tcp-add-fast_ack_mode-1-skip-rwin-check-in-tcp_f.patch index 1398222ab..10c4ada05 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0011-net-tcp-add-fast_ack_mode-1-skip-rwin-check-in-tcp_f.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0011-net-tcp-add-fast_ack_mode-1-skip-rwin-check-in-tcp_f.patch @@ -1,7 +1,7 @@ -From d40e81b25a4ebe05eee16c335e9698c09a9dfb14 Mon Sep 17 00:00:00 2001 +From 0ff8136eeca5fb038fdef3d8342838785df28685 Mon Sep 17 00:00:00 2001 From: Neal Cardwell -Date: Sat, 16 Nov 2019 13:16:25 -0500 -Subject: [PATCH 11/18] net-tcp: add fast_ack_mode=1: skip rwin check in +Date: Sun, 7 Jan 2024 21:11:26 -0300 +Subject: [PATCH 11/19] net-tcp: add fast_ack_mode=1: skip rwin check in tcp_fast_ack_mode__tcp_ack_snd_check() Add logic for an experimental TCP connection behavior, enabled with @@ -21,19 +21,19 @@ Signed-off-by: Alexandre Frade --- a/include/linux/tcp.h +++ b/include/linux/tcp.h -@@ -257,7 +257,8 @@ struct tcp_sock { - u8 compressed_ack; - u8 dup_ack_counter:2, - tlp_retrans:1, /* TLP is a retransmission */ -- unused:5; -+ fast_ack_mode:2, /* which fast ack mode ? */ -+ unused:3; - u32 chrono_start; /* Start time in jiffies of a TCP chrono */ - u32 chrono_stat[3]; /* Time in jiffies for chrono_stat stats */ - u8 chrono_type:2, /* current chronograph type */ +@@ -235,7 +235,8 @@ struct tcp_sock { + tcp_usec_ts : 1, /* TSval values in usec */ + is_sack_reneg:1, /* in recovery from loss with SACK reneg? */ + is_cwnd_limited:1,/* forward progress limited by snd_cwnd? */ +- recvmsg_inq : 1;/* Indicate # of bytes in queue upon recvmsg */ ++ recvmsg_inq : 1,/* Indicate # of bytes in queue upon recvmsg */ ++ fast_ack_mode:1;/* ack ASAP if >1 rcv_mss received? */ + __cacheline_group_end(tcp_sock_read_txrx); + + /* RX read-mostly hotpath cache lines */ --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c -@@ -3099,6 +3099,7 @@ int tcp_disconnect(struct sock *sk, int +@@ -3468,6 +3468,7 @@ int tcp_disconnect(struct sock *sk, int tp->rx_opt.dsack = 0; tp->rx_opt.num_sacks = 0; tp->rcv_ooopack = 0; @@ -43,7 +43,7 @@ Signed-off-by: Alexandre Frade /* Clean up fastopen related fields */ --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c -@@ -241,6 +241,7 @@ void tcp_init_congestion_control(struct +@@ -238,6 +238,7 @@ void tcp_init_congestion_control(struct struct inet_connection_sock *icsk = inet_csk(sk); tcp_sk(sk)->prior_ssthresh = 0; @@ -53,7 +53,7 @@ Signed-off-by: Alexandre Frade if (tcp_ca_needs_ecn(sk)) --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -5621,13 +5621,14 @@ static void __tcp_ack_snd_check(struct s +@@ -5912,13 +5912,14 @@ static void __tcp_ack_snd_check(struct s /* More than one full frame received... */ if (((tp->rcv_nxt - tp->rcv_wup) > inet_csk(sk)->icsk_ack.rcv_mss && diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0012-net-tcp_bbr-v2-record-app-limited-status-of-TLP-repa.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0012-net-tcp_bbr-v2-record-app-limited-status-of-TLP-repa.patch similarity index 61% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0012-net-tcp_bbr-v2-record-app-limited-status-of-TLP-repa.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0012-net-tcp_bbr-v2-record-app-limited-status-of-TLP-repa.patch index 1a5b4e1e9..427e1d655 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0012-net-tcp_bbr-v2-record-app-limited-status-of-TLP-repa.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0012-net-tcp_bbr-v2-record-app-limited-status-of-TLP-repa.patch @@ -1,7 +1,7 @@ -From f59611bea9c062fb44ecb9040f074cac359e2993 Mon Sep 17 00:00:00 2001 +From 399c324888acd78cd0cac5407e2dc27bb2225ba0 Mon Sep 17 00:00:00 2001 From: Jianfeng Wang Date: Fri, 19 Jun 2020 17:33:45 +0000 -Subject: [PATCH 12/18] net-tcp_bbr: v2: record app-limited status of +Subject: [PATCH 12/19] net-tcp_bbr: v2: record app-limited status of TLP-repaired flight When sending a TLP retransmit, record whether the outstanding flight @@ -23,19 +23,19 @@ Signed-off-by: Alexandre Frade --- a/include/linux/tcp.h +++ b/include/linux/tcp.h -@@ -258,7 +258,8 @@ struct tcp_sock { - u8 dup_ack_counter:2, - tlp_retrans:1, /* TLP is a retransmission */ - fast_ack_mode:2, /* which fast ack mode ? */ -- unused:3; -+ tlp_orig_data_app_limited:1, /* app-limited before TLP rtx? */ -+ unused:2; - u32 chrono_start; /* Start time in jiffies of a TCP chrono */ - u32 chrono_stat[3]; /* Time in jiffies for chrono_stat stats */ - u8 chrono_type:2, /* current chronograph type */ +@@ -293,7 +293,8 @@ struct tcp_sock { + * 0x5?10 << 16 + snd_wnd in net byte order + */ + u8 nonagle : 4,/* Disable Nagle algorithm? */ +- rate_app_limited:1; /* rate_{delivered,interval_us} limited? */ ++ rate_app_limited:1, /* rate_{delivered,interval_us} limited? */ ++ tlp_orig_data_app_limited:1; /* app-limited before TLP rtx? */ + u8 received_ce_pending:4, /* Not yet transmit cnt of received_ce */ + unused2:4; + u8 accecn_minlen:2,/* Minimum length of AccECN option sent */ --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c -@@ -2940,6 +2940,7 @@ void tcp_send_loss_probe(struct sock *sk +@@ -3152,6 +3152,7 @@ void tcp_send_loss_probe(struct sock *sk if (WARN_ON(!skb || !tcp_skb_pcount(skb))) goto rearm_timer; diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0013-net-tcp_bbr-v2-inform-CC-module-of-losses-repaired-b.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0013-net-tcp_bbr-v2-inform-CC-module-of-losses-repaired-b.patch similarity index 86% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0013-net-tcp_bbr-v2-inform-CC-module-of-losses-repaired-b.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0013-net-tcp_bbr-v2-inform-CC-module-of-losses-repaired-b.patch index 034ff70e4..1d075e54c 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0013-net-tcp_bbr-v2-inform-CC-module-of-losses-repaired-b.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0013-net-tcp_bbr-v2-inform-CC-module-of-losses-repaired-b.patch @@ -1,7 +1,7 @@ -From 46024649ecd254cf303f2104406c6ffff3dce343 Mon Sep 17 00:00:00 2001 +From 43e59a05c78564807876ae8529c71b261e8cceff Mon Sep 17 00:00:00 2001 From: Jianfeng Wang Date: Tue, 16 Jun 2020 17:41:19 +0000 -Subject: [PATCH 13/18] net-tcp_bbr: v2: inform CC module of losses repaired by +Subject: [PATCH 13/19] net-tcp_bbr: v2: inform CC module of losses repaired by TLP probe Before this commit, when there is a packet loss that creates a sequence @@ -25,7 +25,7 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -1013,6 +1013,7 @@ enum tcp_ca_event { +@@ -1184,6 +1184,7 @@ enum tcp_ca_event { CA_EVENT_LOSS, /* loss timeout */ CA_EVENT_ECN_NO_CE, /* ECT set, but not CE marked */ CA_EVENT_ECN_IS_CE, /* received CE marked IP packet */ @@ -35,7 +35,7 @@ Signed-off-by: Alexandre Frade /* Information about inbound ACK, passed to cong_ops->in_ack_event() */ --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -3772,6 +3772,7 @@ static void tcp_process_tlp_ack(struct s +@@ -3924,6 +3924,7 @@ static void tcp_process_tlp_ack(struct s /* ACK advances: there was a loss, so reduce cwnd. Reset * tlp_high_seq in tcp_init_cwnd_reduction() */ diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0014-net-tcp_bbr-v2-introduce-is_acking_tlp_retrans_seq-i.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0014-net-tcp_bbr-v2-introduce-is_acking_tlp_retrans_seq-i.patch similarity index 80% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0014-net-tcp_bbr-v2-introduce-is_acking_tlp_retrans_seq-i.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0014-net-tcp_bbr-v2-introduce-is_acking_tlp_retrans_seq-i.patch index 0a3016365..b399ac5d4 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0014-net-tcp_bbr-v2-introduce-is_acking_tlp_retrans_seq-i.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0014-net-tcp_bbr-v2-introduce-is_acking_tlp_retrans_seq-i.patch @@ -1,7 +1,7 @@ -From 3996591ce3544d9defec725579123f5d4867524c Mon Sep 17 00:00:00 2001 +From e8c17561fd4afb5966cb8e434375c26dd80e876b Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Mon, 21 Sep 2020 14:46:26 -0400 -Subject: [PATCH 14/18] net-tcp_bbr: v2: introduce is_acking_tlp_retrans_seq +Subject: [PATCH 14/19] net-tcp_bbr: v2: introduce is_acking_tlp_retrans_seq into rate_sample Introduce is_acking_tlp_retrans_seq into rate_sample. This bool will @@ -21,7 +21,7 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -1077,6 +1077,7 @@ struct rate_sample { +@@ -1254,6 +1254,7 @@ struct rate_sample { u32 last_end_seq; /* end_seq of most recently ACKed packet */ bool is_app_limited; /* is sample from packet with bubble in pipe? */ bool is_retrans; /* is sample from retransmission? */ @@ -31,9 +31,9 @@ Signed-off-by: Alexandre Frade }; --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -3755,7 +3755,8 @@ static void tcp_replace_ts_recent(struct +@@ -3907,7 +3907,8 @@ static int tcp_replace_ts_recent(struct /* This routine deals with acks during a TLP episode and ends an episode by - * resetting tlp_high_seq. Ref: TLP algorithm in draft-ietf-tcpm-rack + * resetting tlp_high_seq. Ref: TLP algorithm in RFC8985 */ -static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag) +static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag, @@ -41,7 +41,7 @@ Signed-off-by: Alexandre Frade { struct tcp_sock *tp = tcp_sk(sk); -@@ -3783,6 +3784,11 @@ static void tcp_process_tlp_ack(struct s +@@ -3935,6 +3936,11 @@ static void tcp_process_tlp_ack(struct s FLAG_NOT_DUP | FLAG_DATA_SACKED))) { /* Pure dupack: original and TLP probe arrived; no loss */ tp->tlp_high_seq = 0; @@ -53,8 +53,8 @@ Signed-off-by: Alexandre Frade } } -@@ -3966,7 +3972,7 @@ static int tcp_ack(struct sock *sk, cons - tcp_rack_update_reo_wnd(sk, &rs); +@@ -4138,7 +4144,7 @@ static int tcp_ack(struct sock *sk, cons + tcp_in_ack_event(sk, flag); if (tp->tlp_high_seq) - tcp_process_tlp_ack(sk, ack, flag); @@ -62,7 +62,7 @@ Signed-off-by: Alexandre Frade if (tcp_ack_is_dubious(sk, flag)) { if (!(flag & (FLAG_SND_UNA_ADVANCED | -@@ -4010,7 +4016,7 @@ no_queue: +@@ -4189,7 +4195,7 @@ no_queue: tcp_ack_probe(sk); if (tp->tlp_high_seq) diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0015-tcp-introduce-per-route-feature-RTAX_FEATURE_ECN_LOW.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0015-tcp-introduce-per-route-feature-RTAX_FEATURE_ECN_LOW.patch similarity index 59% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0015-tcp-introduce-per-route-feature-RTAX_FEATURE_ECN_LOW.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0015-tcp-introduce-per-route-feature-RTAX_FEATURE_ECN_LOW.patch index 8c0149819..c01f5d4ce 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0015-tcp-introduce-per-route-feature-RTAX_FEATURE_ECN_LOW.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0015-tcp-introduce-per-route-feature-RTAX_FEATURE_ECN_LOW.patch @@ -1,7 +1,7 @@ -From bcdadb3893c94dfde67954ec71eb983b6bdb08c1 Mon Sep 17 00:00:00 2001 +From 55d8a135e42feec3aa24d2aac411fb658374532f Mon Sep 17 00:00:00 2001 From: David Morley Date: Fri, 14 Jul 2023 11:07:56 -0400 -Subject: [PATCH 15/18] tcp: introduce per-route feature RTAX_FEATURE_ECN_LOW +Subject: [PATCH 15/19] tcp: introduce per-route feature RTAX_FEATURE_ECN_LOW Define and implement a new per-route feature, RTAX_FEATURE_ECN_LOW. @@ -33,17 +33,17 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -372,6 +372,7 @@ static inline void tcp_dec_quickack_mode - #define TCP_ECN_QUEUE_CWR 2 - #define TCP_ECN_DEMAND_CWR 4 - #define TCP_ECN_SEEN 8 -+#define TCP_ECN_LOW 16 +@@ -402,6 +402,7 @@ static inline void tcp_dec_quickack_mode + #define TCP_ECN_DEMAND_CWR BIT(2) + #define TCP_ECN_SEEN BIT(3) + #define TCP_ECN_MODE_ACCECN BIT(4) ++#define TCP_ECN_LOW BIT(5) - enum tcp_tw_status { - TCP_TW_SUCCESS = 0, -@@ -726,6 +727,15 @@ static inline void tcp_fast_path_check(s - - u32 tcp_delack_max(const struct sock *sk); + #define TCP_ECN_DISABLED 0 + #define TCP_ECN_MODE_PENDING (TCP_ECN_MODE_RFC3168 | TCP_ECN_MODE_ACCECN) +@@ -839,6 +840,15 @@ static inline u32 __tcp_set_rto(const st + return usecs_to_jiffies((tp->srtt_us >> 3) + tp->rttvar_us); + } +static inline void tcp_set_ecn_low_from_dst(struct sock *sk, + const struct dst_entry *dst) @@ -54,27 +54,30 @@ Signed-off-by: Alexandre Frade + tp->ecn_flags |= TCP_ECN_LOW; +} + + u32 tcp_delack_max(const struct sock *sk); + /* Compute the actual rto_min value */ - static inline u32 tcp_rto_min(struct sock *sk) - { --- a/include/uapi/linux/rtnetlink.h +++ b/include/uapi/linux/rtnetlink.h -@@ -506,9 +506,11 @@ enum { - #define RTAX_FEATURE_SACK (1 << 1) - #define RTAX_FEATURE_TIMESTAMP (1 << 2) - #define RTAX_FEATURE_ALLFRAG (1 << 3) -+#define RTAX_FEATURE_ECN_LOW (1 << 4) +@@ -517,12 +517,14 @@ enum { + #define RTAX_FEATURE_TIMESTAMP (1 << 2) /* unused */ + #define RTAX_FEATURE_ALLFRAG (1 << 3) /* unused */ + #define RTAX_FEATURE_TCP_USEC_TS (1 << 4) ++#define RTAX_FEATURE_ECN_LOW (1 << 5) - #define RTAX_FEATURE_MASK (RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | \ -- RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG) -+ RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG \ -+ | RTAX_FEATURE_ECN_LOW) + #define RTAX_FEATURE_MASK (RTAX_FEATURE_ECN | \ + RTAX_FEATURE_SACK | \ + RTAX_FEATURE_TIMESTAMP | \ + RTAX_FEATURE_ALLFRAG | \ +- RTAX_FEATURE_TCP_USEC_TS) ++ RTAX_FEATURE_TCP_USEC_TS | \ ++ RTAX_FEATURE_ECN_LOW) struct rta_session { __u8 proto; --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c -@@ -434,6 +434,8 @@ void tcp_ca_openreq_child(struct sock *s +@@ -501,6 +501,8 @@ void tcp_ca_openreq_child(struct sock *s u32 ca_key = dst_metric(dst, RTAX_CC_ALGO); bool ca_got_dst = false; @@ -83,12 +86,12 @@ Signed-off-by: Alexandre Frade if (ca_key != TCP_CA_UNSPEC) { const struct tcp_congestion_ops *ca; ---- a/net/ipv4/tcp_output.c -+++ b/net/ipv4/tcp_output.c -@@ -334,10 +334,9 @@ static void tcp_ecn_send_syn(struct sock - bool bpf_needs_ecn = tcp_bpf_ca_needs_ecn(sk); - bool use_ecn = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_ecn) == 1 || - tcp_ca_needs_ecn(sk) || bpf_needs_ecn; +--- a/include/net/tcp_ecn.h ++++ b/include/net/tcp_ecn.h +@@ -613,10 +613,9 @@ static inline void tcp_ecn_send_syn(stru + use_ecn = tcp_ecn == TCP_ECN_IN_ECN_OUT_ECN || + tcp_ecn == TCP_ECN_IN_ACCECN_OUT_ECN || + tcp_ca_needs_ecn(sk) || bpf_needs_ecn || use_accecn; + const struct dst_entry *dst = __sk_dst_get(sk); if (!use_ecn) { @@ -97,13 +100,13 @@ Signed-off-by: Alexandre Frade if (dst && dst_feature(dst, RTAX_FEATURE_ECN)) use_ecn = true; } -@@ -349,6 +348,9 @@ static void tcp_ecn_send_syn(struct sock - tp->ecn_flags = TCP_ECN_OK; - if (tcp_ca_needs_ecn(sk) || bpf_needs_ecn) - INET_ECN_xmit(sk); +@@ -634,6 +633,9 @@ static inline void tcp_ecn_send_syn(stru + tp->syn_ect_snt = inet_sk(sk)->tos & INET_ECN_MASK; + } else { + tcp_ecn_mode_set(tp, TCP_ECN_MODE_RFC3168); + -+ if (dst) -+ tcp_set_ecn_low_from_dst(sk, dst); ++ if (dst) ++ tcp_set_ecn_low_from_dst(sk, dst); + } } } - diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0016-net-tcp_bbr-v3-update-TCP-bbr-congestion-control-mod.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0016-net-tcp_bbr-v3-update-TCP-bbr-congestion-control-mod.patch similarity index 97% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0016-net-tcp_bbr-v3-update-TCP-bbr-congestion-control-mod.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0016-net-tcp_bbr-v3-update-TCP-bbr-congestion-control-mod.patch index c6ba231d7..75a819dbe 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0016-net-tcp_bbr-v3-update-TCP-bbr-congestion-control-mod.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0016-net-tcp_bbr-v3-update-TCP-bbr-congestion-control-mod.patch @@ -1,7 +1,7 @@ -From 6caa9d6b181856844e351866f186a1da3321c2b3 Mon Sep 17 00:00:00 2001 +From c0643f854de456c761c18b009af7537a74506724 Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Tue, 11 Jun 2019 12:54:22 -0400 -Subject: [PATCH 16/18] net-tcp_bbr: v3: update TCP "bbr" congestion control +Subject: [PATCH 16/19] net-tcp_bbr: v3: update TCP "bbr" congestion control module to BBRv3 BBR v3 is an enhacement to the BBR v1 algorithm. It's designed to aim for lower @@ -135,12 +135,12 @@ Signed-off-by: Alexandre Frade include/net/tcp.h | 2 +- include/uapi/linux/inet_diag.h | 23 + net/ipv4/Kconfig | 21 +- - net/ipv4/tcp_bbr.c | 2217 +++++++++++++++++++++------- - 5 files changed, 1742 insertions(+), 525 deletions(-) + net/ipv4/tcp_bbr.c | 2214 +++++++++++++++++++++------- + 5 files changed, 1740 insertions(+), 524 deletions(-) --- a/include/net/inet_connection_sock.h +++ b/include/net/inet_connection_sock.h -@@ -135,8 +135,8 @@ struct inet_connection_sock { +@@ -134,8 +134,8 @@ struct inet_connection_sock { u32 icsk_probes_tstamp; u32 icsk_user_timeout; @@ -153,7 +153,7 @@ Signed-off-by: Alexandre Frade #define ICSK_TIME_RETRANS 1 /* Retransmit timer */ --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -2269,7 +2269,7 @@ struct tcp_plb_state { +@@ -2649,7 +2649,7 @@ struct tcp_plb_state { u8 consec_cong_rounds:5, /* consecutive congested rounds */ unused:3; u32 pause_until; /* jiffies32 when PLB can resume rerouting */ @@ -196,7 +196,7 @@ Signed-off-by: Alexandre Frade union tcp_cc_info { --- a/net/ipv4/Kconfig +++ b/net/ipv4/Kconfig -@@ -668,15 +668,18 @@ config TCP_CONG_BBR +@@ -669,15 +669,18 @@ config TCP_CONG_BBR default n help @@ -472,7 +472,7 @@ Signed-off-by: Alexandre Frade /* Gain factor for adding extra_acked to target cwnd: */ static const int bbr_extra_acked_gain = BBR_UNIT; /* Window length of extra_acked window. */ -@@ -201,8 +256,121 @@ static const u32 bbr_ack_epoch_acked_res +@@ -201,8 +256,123 @@ static const u32 bbr_ack_epoch_acked_res /* Time period for clamping cwnd increment due to ack aggregation */ static const u32 bbr_extra_acked_max_us = 100 * 1000; @@ -587,14 +587,16 @@ Signed-off-by: Alexandre Frade + */ +static bool bbr_can_use_ecn(const struct sock *sk) +{ -+ return (tcp_sk(sk)->ecn_flags & TCP_ECN_OK) && ++ const struct tcp_sock *tp = tcp_sk(sk); ++ ++ return tcp_ecn_mode_any(tp) && + (tcp_sk(sk)->ecn_flags & TCP_ECN_LOW); +} + /* Do we estimate that STARTUP filled the pipe? */ static bool bbr_full_bw_reached(const struct sock *sk) { -@@ -214,17 +382,17 @@ static bool bbr_full_bw_reached(const st +@@ -214,17 +384,17 @@ static bool bbr_full_bw_reached(const st /* Return the windowed max recent bandwidth sample, in pkts/uS << BW_SCALE. */ static u32 bbr_max_bw(const struct sock *sk) { @@ -616,7 +618,7 @@ Signed-off-by: Alexandre Frade } /* Return maximum extra acked in past k-2k round trips, -@@ -241,15 +409,23 @@ static u16 bbr_extra_acked(const struct +@@ -241,15 +411,23 @@ static u16 bbr_extra_acked(const struct * The order here is chosen carefully to avoid overflow of u64. This should * work for input rates of up to 2.9Tbit/sec and gain of 2.89x. */ @@ -643,14 +645,14 @@ Signed-off-by: Alexandre Frade } /* Convert a BBR bw and gain factor to a pacing rate in bytes per second. */ -@@ -257,12 +433,13 @@ static unsigned long bbr_bw_to_pacing_ra +@@ -257,12 +435,13 @@ static unsigned long bbr_bw_to_pacing_ra { u64 rate = bw; - rate = bbr_rate_bytes_per_sec(sk, rate, gain); + rate = bbr_rate_bytes_per_sec(sk, rate, gain, + bbr_pacing_margin_percent); - rate = min_t(u64, rate, sk->sk_max_pacing_rate); + rate = min_t(u64, rate, READ_ONCE(sk->sk_max_pacing_rate)); return rate; } @@ -659,24 +661,23 @@ Signed-off-by: Alexandre Frade static void bbr_init_pacing_rate_from_rtt(struct sock *sk) { struct tcp_sock *tp = tcp_sk(sk); -@@ -278,7 +455,8 @@ static void bbr_init_pacing_rate_from_rt - } +@@ -279,7 +458,7 @@ static void bbr_init_pacing_rate_from_rt bw = (u64)tcp_snd_cwnd(tp) * BW_UNIT; do_div(bw, rtt_us); -- sk->sk_pacing_rate = bbr_bw_to_pacing_rate(sk, bw, bbr_high_gain); -+ sk->sk_pacing_rate = -+ bbr_bw_to_pacing_rate(sk, bw, bbr_param(sk, startup_pacing_gain)); + WRITE_ONCE(sk->sk_pacing_rate, +- bbr_bw_to_pacing_rate(sk, bw, bbr_high_gain)); ++ bbr_bw_to_pacing_rate(sk, bw, bbr_param(sk, startup_pacing_gain))); } /* Pace using current bw estimate and a gain factor. */ -@@ -294,31 +472,38 @@ static void bbr_set_pacing_rate(struct s - sk->sk_pacing_rate = rate; +@@ -295,31 +474,38 @@ static void bbr_set_pacing_rate(struct s + WRITE_ONCE(sk->sk_pacing_rate, rate); } -/* override sysctl_tcp_min_tso_segs */ -__bpf_kfunc static u32 bbr_min_tso_segs(struct sock *sk) -{ -- return sk->sk_pacing_rate < (bbr_min_tso_rate >> 3) ? 1 : 2; +- return READ_ONCE(sk->sk_pacing_rate) < (bbr_min_tso_rate >> 3) ? 1 : 2; -} - -/* Return the number of segments BBR would like in a TSO/GSO skb, given @@ -694,7 +695,7 @@ Signed-off-by: Alexandre Frade u64 bytes; /* Budget a TSO/GSO burst size allowance based on bw (pacing_rate). */ - bytes = sk->sk_pacing_rate >> sk->sk_pacing_shift; + bytes = READ_ONCE(sk->sk_pacing_rate) >> READ_ONCE(sk->sk_pacing_shift); + /* Budget a TSO/GSO burst size allowance based on min_rtt. For every + * K = 2^tso_rtt_shift microseconds of min_rtt, halve the burst. @@ -708,7 +709,7 @@ Signed-off-by: Alexandre Frade + bytes = min_t(u32, bytes, gso_max_size - 1 - MAX_TCP_HEADER); - segs = max_t(u32, bytes / mss_now, bbr_min_tso_segs(sk)); -+ segs = max_t(u32, bytes / mss_now, ++ segs = max_t(u32, div_u64(bytes, mss_now), + sock_net(sk)->ipv4.sysctl_tcp_min_tso_segs); return segs; } @@ -719,16 +720,16 @@ Signed-off-by: Alexandre Frade { return bbr_tso_segs_generic(sk, mss_now, sk->sk_gso_max_size); } -@@ -328,7 +513,7 @@ static u32 bbr_tso_segs_goal(struct sock +@@ -329,7 +515,7 @@ static u32 bbr_tso_segs_goal(struct sock { struct tcp_sock *tp = tcp_sk(sk); -- return bbr_tso_segs_generic(sk, tp->mss_cache, GSO_MAX_SIZE); -+ return bbr_tso_segs_generic(sk, tp->mss_cache, GSO_LEGACY_MAX_SIZE); +- return bbr_tso_segs_generic(sk, tp->mss_cache, GSO_MAX_SIZE); ++ return bbr_tso_segs_generic(sk, tp->mss_cache, GSO_LEGACY_MAX_SIZE); } /* Save "last known good" cwnd so we can restore it after losses or PROBE_RTT */ -@@ -348,7 +533,9 @@ __bpf_kfunc static void bbr_cwnd_event(s +@@ -349,7 +535,9 @@ __bpf_kfunc static void bbr_cwnd_event(s struct tcp_sock *tp = tcp_sk(sk); struct bbr *bbr = inet_csk_ca(sk); @@ -739,7 +740,7 @@ Signed-off-by: Alexandre Frade bbr->idle_restart = 1; bbr->ack_epoch_mstamp = tp->tcp_mstamp; bbr->ack_epoch_acked = 0; -@@ -359,6 +546,16 @@ __bpf_kfunc static void bbr_cwnd_event(s +@@ -360,6 +548,16 @@ __bpf_kfunc static void bbr_cwnd_event(s bbr_set_pacing_rate(sk, bbr_bw(sk), BBR_UNIT); else if (bbr->mode == BBR_PROBE_RTT) bbr_check_probe_rtt_done(sk); @@ -756,7 +757,7 @@ Signed-off-by: Alexandre Frade } } -@@ -381,10 +578,10 @@ static u32 bbr_bdp(struct sock *sk, u32 +@@ -382,10 +580,10 @@ static u32 bbr_bdp(struct sock *sk, u32 * default. This should only happen when the connection is not using TCP * timestamps and has retransmitted all of the SYN/SYNACK/data packets * ACKed so far. In this case, an RTO can cut cwnd to 1, in which @@ -769,7 +770,7 @@ Signed-off-by: Alexandre Frade w = (u64)bw * bbr->min_rtt_us; -@@ -401,23 +598,23 @@ static u32 bbr_bdp(struct sock *sk, u32 +@@ -402,23 +600,23 @@ static u32 bbr_bdp(struct sock *sk, u32 * - one skb in sending host Qdisc, * - one skb in sending host TSO/GSO engine * - one skb being received by receiver host LRO/GRO/delayed-ACK engine @@ -801,7 +802,7 @@ Signed-off-by: Alexandre Frade cwnd += 2; return cwnd; -@@ -472,10 +669,10 @@ static u32 bbr_ack_aggregation_cwnd(stru +@@ -473,10 +671,10 @@ static u32 bbr_ack_aggregation_cwnd(stru { u32 max_aggr_cwnd, aggr_cwnd = 0; @@ -814,7 +815,7 @@ Signed-off-by: Alexandre Frade >> BBR_SCALE; aggr_cwnd = min(aggr_cwnd, max_aggr_cwnd); } -@@ -483,66 +680,27 @@ static u32 bbr_ack_aggregation_cwnd(stru +@@ -484,66 +682,27 @@ static u32 bbr_ack_aggregation_cwnd(stru return aggr_cwnd; } @@ -888,7 +889,7 @@ Signed-off-by: Alexandre Frade target_cwnd = bbr_bdp(sk, bw, gain); /* Increment the cwnd to account for excess ACKed data that seems -@@ -551,74 +709,26 @@ static void bbr_set_cwnd(struct sock *sk +@@ -552,74 +711,26 @@ static void bbr_set_cwnd(struct sock *sk target_cwnd += bbr_ack_aggregation_cwnd(sk); target_cwnd = bbr_quantization_budget(sk, target_cwnd); @@ -980,7 +981,7 @@ Signed-off-by: Alexandre Frade } static void bbr_reset_startup_mode(struct sock *sk) -@@ -628,191 +738,49 @@ static void bbr_reset_startup_mode(struc +@@ -629,191 +740,49 @@ static void bbr_reset_startup_mode(struc bbr->mode = BBR_STARTUP; } @@ -1196,7 +1197,7 @@ Signed-off-by: Alexandre Frade } /* Estimates the windowed max degree of ack aggregation. -@@ -826,7 +794,7 @@ static void bbr_update_bw(struct sock *s +@@ -827,7 +796,7 @@ static void bbr_update_bw(struct sock *s * * Max extra_acked is clamped by cwnd and bw * bbr_extra_acked_max_us (100 ms). * Max filter is an approximate sliding window of 5-10 (packet timed) round @@ -1205,7 +1206,7 @@ Signed-off-by: Alexandre Frade */ static void bbr_update_ack_aggregation(struct sock *sk, const struct rate_sample *rs) -@@ -834,15 +802,19 @@ static void bbr_update_ack_aggregation(s +@@ -835,15 +804,19 @@ static void bbr_update_ack_aggregation(s u32 epoch_us, expected_acked, extra_acked; struct bbr *bbr = inet_csk_ca(sk); struct tcp_sock *tp = tcp_sk(sk); @@ -1227,7 +1228,7 @@ Signed-off-by: Alexandre Frade bbr->extra_acked_win_rtts = 0; bbr->extra_acked_win_idx = bbr->extra_acked_win_idx ? 0 : 1; -@@ -876,49 +848,6 @@ static void bbr_update_ack_aggregation(s +@@ -877,49 +850,6 @@ static void bbr_update_ack_aggregation(s bbr->extra_acked[bbr->extra_acked_win_idx] = extra_acked; } @@ -1265,8 +1266,8 @@ Signed-off-by: Alexandre Frade - - if (bbr->mode == BBR_STARTUP && bbr_full_bw_reached(sk)) { - bbr->mode = BBR_DRAIN; /* drain queue we created */ -- tcp_sk(sk)->snd_ssthresh = -- bbr_inflight(sk, bbr_max_bw(sk), BBR_UNIT); +- WRITE_ONCE(tcp_sk(sk)->snd_ssthresh, +- bbr_inflight(sk, bbr_max_bw(sk), BBR_UNIT)); - } /* fall through to check if in-flight is already small: */ - if (bbr->mode == BBR_DRAIN && - bbr_packets_in_net_at_edt(sk, tcp_packets_in_flight(tcp_sk(sk))) <= @@ -1277,7 +1278,7 @@ Signed-off-by: Alexandre Frade static void bbr_check_probe_rtt_done(struct sock *sk) { struct tcp_sock *tp = tcp_sk(sk); -@@ -928,9 +857,9 @@ static void bbr_check_probe_rtt_done(str +@@ -929,9 +859,9 @@ static void bbr_check_probe_rtt_done(str after(tcp_jiffies32, bbr->probe_rtt_done_stamp))) return; @@ -1289,7 +1290,7 @@ Signed-off-by: Alexandre Frade } /* The goal of PROBE_RTT mode is to have BBR flows cooperatively and -@@ -956,23 +885,35 @@ static void bbr_update_min_rtt(struct so +@@ -957,23 +887,35 @@ static void bbr_update_min_rtt(struct so { struct tcp_sock *tp = tcp_sk(sk); struct bbr *bbr = inet_csk_ca(sk); @@ -1334,7 +1335,7 @@ Signed-off-by: Alexandre Frade } if (bbr->mode == BBR_PROBE_RTT) { -@@ -981,9 +922,9 @@ static void bbr_update_min_rtt(struct so +@@ -982,9 +924,9 @@ static void bbr_update_min_rtt(struct so (tp->delivered + tcp_packets_in_flight(tp)) ? : 1; /* Maintain min packets in flight for max(200 ms, 1 round). */ if (!bbr->probe_rtt_done_stamp && @@ -1346,7 +1347,7 @@ Signed-off-by: Alexandre Frade bbr->probe_rtt_round_done = 0; bbr->next_rtt_delivered = tp->delivered; } else if (bbr->probe_rtt_done_stamp) { -@@ -1004,18 +945,20 @@ static void bbr_update_gains(struct sock +@@ -1005,18 +947,20 @@ static void bbr_update_gains(struct sock switch (bbr->mode) { case BBR_STARTUP: @@ -1375,7 +1376,7 @@ Signed-off-by: Alexandre Frade break; case BBR_PROBE_RTT: bbr->pacing_gain = BBR_UNIT; -@@ -1027,27 +970,1108 @@ static void bbr_update_gains(struct sock +@@ -1028,27 +972,1108 @@ static void bbr_update_gains(struct sock } } @@ -1456,8 +1457,7 @@ Signed-off-by: Alexandre Frade + +/* Exit STARTUP upon N consecutive rounds with ECN mark rate > ecn_thresh. */ +static void bbr_check_ecn_too_high_in_startup(struct sock *sk, u32 ce_ratio) - { -- bbr_update_bw(sk, rs); ++{ + struct bbr *bbr = inet_csk_ca(sk); + + if (bbr_full_bw_reached(sk) || !bbr->ecn_eligible || @@ -1723,7 +1723,7 @@ Signed-off-by: Alexandre Frade +} + +/* How should we multiplicatively cut bw or inflight limits based on ECN? */ -+u32 bbr_ecn_cut(struct sock *sk) ++static u32 bbr_ecn_cut(struct sock *sk) +{ + struct bbr *bbr = inet_csk_ca(sk); + @@ -2383,7 +2383,8 @@ Signed-off-by: Alexandre Frade + +static void bbr_update_model(struct sock *sk, const struct rate_sample *rs, + struct bbr_context *ctx) -+{ + { +- bbr_update_bw(sk, rs); + bbr_update_congestion_signals(sk, rs, ctx); bbr_update_ack_aggregation(sk, rs); - bbr_update_cycle_phase(sk, rs); @@ -2395,9 +2396,8 @@ Signed-off-by: Alexandre Frade + bbr_update_cycle_phase(sk, rs, ctx); bbr_update_min_rtt(sk, rs); - bbr_update_gains(sk); - } - --__bpf_kfunc static void bbr_main(struct sock *sk, const struct rate_sample *rs) ++} ++ +/* Fast path for app-limited case. + * + * On each ack, we execute bbr state machine, which primarily consists of: @@ -2447,9 +2447,9 @@ Signed-off-by: Alexandre Frade + *update_model = false; + } + return false; -+} -+ -+__bpf_kfunc void bbr_main(struct sock *sk, const struct rate_sample *rs) + } + + __bpf_kfunc static void bbr_main(struct sock *sk, u32 ack, int flag, const struct rate_sample *rs) { + struct tcp_sock *tp = tcp_sk(sk); struct bbr *bbr = inet_csk_ca(sk); @@ -2494,7 +2494,7 @@ Signed-off-by: Alexandre Frade } __bpf_kfunc static void bbr_init(struct sock *sk) -@@ -1055,20 +2079,21 @@ __bpf_kfunc static void bbr_init(struct +@@ -1056,20 +2081,21 @@ __bpf_kfunc static void bbr_init(struct struct tcp_sock *tp = tcp_sk(sk); struct bbr *bbr = inet_csk_ca(sk); @@ -2503,7 +2503,7 @@ Signed-off-by: Alexandre Frade + + bbr->init_cwnd = min(0x7FU, tcp_snd_cwnd(tp)); + bbr->prior_cwnd = tp->prior_cwnd; - tp->snd_ssthresh = TCP_INFINITE_SSTHRESH; + WRITE_ONCE(tp->snd_ssthresh, TCP_INFINITE_SSTHRESH); - bbr->rtt_cnt = 0; bbr->next_rtt_delivered = tp->delivered; bbr->prev_ca_state = TCP_CA_Open; @@ -2521,7 +2521,7 @@ Signed-off-by: Alexandre Frade bbr->has_seen_rtt = 0; bbr_init_pacing_rate_from_rtt(sk); -@@ -1079,7 +2104,7 @@ __bpf_kfunc static void bbr_init(struct +@@ -1080,7 +2106,7 @@ __bpf_kfunc static void bbr_init(struct bbr->full_bw_cnt = 0; bbr->cycle_mstamp = 0; bbr->cycle_idx = 0; @@ -2530,7 +2530,7 @@ Signed-off-by: Alexandre Frade bbr_reset_startup_mode(sk); bbr->ack_epoch_mstamp = tp->tcp_mstamp; -@@ -1089,78 +2114,236 @@ __bpf_kfunc static void bbr_init(struct +@@ -1090,78 +2116,236 @@ __bpf_kfunc static void bbr_init(struct bbr->extra_acked[0] = 0; bbr->extra_acked[1] = 0; @@ -2795,7 +2795,7 @@ Signed-off-by: Alexandre Frade .undo_cwnd = bbr_undo_cwnd, .cwnd_event = bbr_cwnd_event, .ssthresh = bbr_ssthresh, -@@ -1175,10 +2358,11 @@ BTF_SET8_START(tcp_bbr_check_kfunc_ids) +@@ -1174,10 +2358,11 @@ BTF_KFUNCS_START(tcp_bbr_check_kfunc_ids BTF_ID_FLAGS(func, bbr_init) BTF_ID_FLAGS(func, bbr_main) BTF_ID_FLAGS(func, bbr_sndbuf_expand) @@ -2806,9 +2806,9 @@ Signed-off-by: Alexandre Frade -BTF_ID_FLAGS(func, bbr_min_tso_segs) +BTF_ID_FLAGS(func, bbr_tso_segs) BTF_ID_FLAGS(func, bbr_set_state) - #endif - #endif -@@ -1213,5 +2397,12 @@ MODULE_AUTHOR("Van Jacobson "); MODULE_AUTHOR("Yuchung Cheng "); MODULE_AUTHOR("Soheil Hassas Yeganeh "); diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0017-net-tcp_bbr-v3-ensure-ECN-enabled-BBR-flows-set-ECT-.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0017-net-tcp_bbr-v3-ensure-ECN-enabled-BBR-flows-set-ECT-.patch similarity index 74% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0017-net-tcp_bbr-v3-ensure-ECN-enabled-BBR-flows-set-ECT-.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0017-net-tcp_bbr-v3-ensure-ECN-enabled-BBR-flows-set-ECT-.patch index e927946a6..4b8cd0183 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0017-net-tcp_bbr-v3-ensure-ECN-enabled-BBR-flows-set-ECT-.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0017-net-tcp_bbr-v3-ensure-ECN-enabled-BBR-flows-set-ECT-.patch @@ -1,7 +1,7 @@ -From 17d1b4acccbfb50826774eda03ac802aeb81c49e Mon Sep 17 00:00:00 2001 +From 34211656d13a329fe2adbf7d9932c805338062b7 Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Fri, 11 Jun 2021 21:56:10 +0000 -Subject: [PATCH 17/18] net-tcp_bbr: v3: ensure ECN-enabled BBR flows set ECT +Subject: [PATCH 17/19] net-tcp_bbr: v3: ensure ECN-enabled BBR flows set ECT on retransmits Adds a new flag TCP_ECN_ECT_PERMANENT that is used by CCAs to @@ -25,17 +25,17 @@ Signed-off-by: Alexandre Frade --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -373,6 +373,7 @@ static inline void tcp_dec_quickack_mode - #define TCP_ECN_DEMAND_CWR 4 - #define TCP_ECN_SEEN 8 - #define TCP_ECN_LOW 16 -+#define TCP_ECN_ECT_PERMANENT 32 +@@ -403,6 +403,7 @@ static inline void tcp_dec_quickack_mode + #define TCP_ECN_SEEN BIT(3) + #define TCP_ECN_MODE_ACCECN BIT(4) + #define TCP_ECN_LOW BIT(5) ++#define TCP_ECN_ECT_PERMANENT BIT(6) - enum tcp_tw_status { - TCP_TW_SUCCESS = 0, + #define TCP_ECN_DISABLED 0 + #define TCP_ECN_MODE_PENDING (TCP_ECN_MODE_RFC3168 | TCP_ECN_MODE_ACCECN) --- a/net/ipv4/tcp_bbr.c +++ b/net/ipv4/tcp_bbr.c -@@ -2151,6 +2151,9 @@ __bpf_kfunc static void bbr_init(struct +@@ -2153,6 +2153,9 @@ __bpf_kfunc static void bbr_init(struct bbr->plb.pause_until = 0; tp->fast_ack_mode = bbr_fast_ack_mode ? 1 : 0; @@ -47,7 +47,7 @@ Signed-off-by: Alexandre Frade /* BBR marks the current round trip as a loss round. */ --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c -@@ -388,7 +388,8 @@ static void tcp_ecn_send(struct sock *sk +@@ -347,7 +347,8 @@ static void tcp_ecn_send(struct sock *sk th->cwr = 1; skb_shinfo(skb)->gso_type |= SKB_GSO_TCP_ECN; } diff --git a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0018-tcp-export-TCPI_OPT_ECN_LOW-in-tcp_info-tcpi_options.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0018-tcp-export-TCPI_OPT_ECN_LOW-in-tcp_info-tcpi_options.patch similarity index 68% rename from openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0018-tcp-export-TCPI_OPT_ECN_LOW-in-tcp_info-tcpi_options.patch rename to openwrt/patch/kernel-6.18/bbr3/010-bbr3-0018-tcp-export-TCPI_OPT_ECN_LOW-in-tcp_info-tcpi_options.patch index d8642a778..c0bea586a 100644 --- a/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0018-tcp-export-TCPI_OPT_ECN_LOW-in-tcp_info-tcpi_options.patch +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0018-tcp-export-TCPI_OPT_ECN_LOW-in-tcp_info-tcpi_options.patch @@ -1,7 +1,7 @@ -From 54488b0d0855fc0e772fcdf4d7a2756219e3757c Mon Sep 17 00:00:00 2001 +From 9d940cabd1eed8cdfa009d1530255578a1acd43c Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Sun, 23 Jul 2023 23:25:34 -0400 -Subject: [PATCH 18/18] tcp: export TCPI_OPT_ECN_LOW in tcp_info tcpi_options +Subject: [PATCH 18/19] tcp: export TCPI_OPT_ECN_LOW in tcp_info tcpi_options field Analogous to other important ECN information, export TCPI_OPT_ECN_LOW @@ -17,17 +17,17 @@ Signed-off-by: Alexandre Frade --- a/include/uapi/linux/tcp.h +++ b/include/uapi/linux/tcp.h -@@ -170,6 +170,7 @@ enum tcp_fastopen_client_fail { - #define TCPI_OPT_ECN 8 /* ECN was negociated at TCP session init */ - #define TCPI_OPT_ECN_SEEN 16 /* we received at least one packet with ECT */ +@@ -185,6 +185,7 @@ enum tcp_fastopen_client_fail { #define TCPI_OPT_SYN_DATA 32 /* SYN-ACK acked data in SYN sent or rcvd */ -+#define TCPI_OPT_ECN_LOW 64 /* Low-latency ECN configured at init */ + #define TCPI_OPT_USEC_TS 64 /* usec timestamps */ + #define TCPI_OPT_TFO_CHILD 128 /* child from a Fast Open option on SYN */ ++#define TCPI_OPT_ECN_LOW 256 /* Low-latency ECN enabled at conn init */ /* * Sender's congestion state indicating normal or abnormal situations --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c -@@ -3791,6 +3791,8 @@ void tcp_get_info(struct sock *sk, struc +@@ -4256,6 +4256,8 @@ void tcp_get_info(struct sock *sk, struc info->tcpi_options |= TCPI_OPT_ECN; if (tp->ecn_flags & TCP_ECN_SEEN) info->tcpi_options |= TCPI_OPT_ECN_SEEN; @@ -35,4 +35,4 @@ Signed-off-by: Alexandre Frade + info->tcpi_options |= TCPI_OPT_ECN_LOW; if (tp->syn_data_acked) info->tcpi_options |= TCPI_OPT_SYN_DATA; - + if (tp->tcp_usec_ts) diff --git a/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0019-x86-cfi-bpf-Add-tso_segs-and-skb_marked_lost-to-bpf_.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0019-x86-cfi-bpf-Add-tso_segs-and-skb_marked_lost-to-bpf_.patch new file mode 100644 index 000000000..9c22df321 --- /dev/null +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0019-x86-cfi-bpf-Add-tso_segs-and-skb_marked_lost-to-bpf_.patch @@ -0,0 +1,39 @@ +From 98a0fa5ab307df750c73790f9db0ce883af26982 Mon Sep 17 00:00:00 2001 +From: Oleksandr Natalenko +Date: Mon, 22 Jan 2024 20:21:40 +0100 +Subject: [PATCH 19/19] x86/cfi,bpf: Add tso_segs and skb_marked_lost to + bpf_struct_ops CFI + +--- + net/ipv4/bpf_tcp_ca.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +--- a/net/ipv4/bpf_tcp_ca.c ++++ b/net/ipv4/bpf_tcp_ca.c +@@ -280,11 +280,15 @@ static void bpf_tcp_ca_pkts_acked(struct + { + } + +-static u32 bpf_tcp_ca_min_tso_segs(struct sock *sk) ++static u32 bpf_tcp_ca_tso_segs(struct sock *sk, unsigned int mss_now) + { + return 0; + } + ++static void bpf_tcp_ca_skb_marked_lost(struct sock *sk, const struct sk_buff *skb) ++{ ++} ++ + static void bpf_tcp_ca_cong_control(struct sock *sk, u32 ack, int flag, + const struct rate_sample *rs) + { +@@ -315,7 +319,8 @@ static struct tcp_congestion_ops __bpf_o + .cwnd_event = bpf_tcp_ca_cwnd_event, + .in_ack_event = bpf_tcp_ca_in_ack_event, + .pkts_acked = bpf_tcp_ca_pkts_acked, +- .min_tso_segs = bpf_tcp_ca_min_tso_segs, ++ .tso_segs = bpf_tcp_ca_tso_segs, ++ .skb_marked_lost = bpf_tcp_ca_skb_marked_lost, + .cong_control = bpf_tcp_ca_cong_control, + .undo_cwnd = bpf_tcp_ca_undo_cwnd, + .sndbuf_expand = bpf_tcp_ca_sndbuf_expand, diff --git a/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0020-net-tcp_bbr-v3-silence-Wconstant-logical-operand.patch b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0020-net-tcp_bbr-v3-silence-Wconstant-logical-operand.patch new file mode 100644 index 000000000..41c0d06da --- /dev/null +++ b/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0020-net-tcp_bbr-v3-silence-Wconstant-logical-operand.patch @@ -0,0 +1,53 @@ +From 0557c352fdbb0981be50d82059d1841e10bc55b0 Mon Sep 17 00:00:00 2001 +From: Oleksandr Natalenko +Date: Tue, 18 Mar 2025 09:47:46 +0100 +Subject: [PATCH 3/4] net-tcp_bbr: v3: silence -Wconstant-logical-operand + +The `ecn_thresh` and `ecn_factor` params are just consts in a public +version of BBRv3, so evaluating them in conditions as booleans triggers +`-Wconstant-logical-operand` with Clang. + +Prepend relevant invocations with double negation to convert values to +booleans explicitly. + +The values are always `true`, so these parts of conditions can also be +dropped. Keeping them instead since they are used in an internal version +of BBRv3 to stay as close to the original code as possible. + +Link: https://lore.kernel.org/lkml/4616579.LvFx2qVVIh@natalenko.name/T/#u +Link: https://groups.google.com/g/bbr-dev/c/4vwZGw0nxdQ/m/fWt9xmbzAwAJ +Closes: https://codeberg.org/pf-kernel/linux/issues/11 +Signed-off-by: Oleksandr Natalenko +--- + net/ipv4/tcp_bbr.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/net/ipv4/tcp_bbr.c ++++ b/net/ipv4/tcp_bbr.c +@@ -1079,7 +1079,7 @@ static int bbr_update_ecn_alpha(struct s + + /* See if we should use ECN sender logic for this connection. */ + if (!bbr->ecn_eligible && bbr_can_use_ecn(sk) && +- bbr_param(sk, ecn_factor) && ++ !!bbr_param(sk, ecn_factor) && + (bbr->min_rtt_us <= bbr_ecn_max_rtt_us || + !bbr_ecn_max_rtt_us)) + bbr->ecn_eligible = 1; +@@ -1186,7 +1186,7 @@ static bool bbr_is_inflight_too_high(con + } + + if (rs->delivered_ce > 0 && rs->delivered > 0 && +- bbr->ecn_eligible && bbr_param(sk, ecn_thresh)) { ++ bbr->ecn_eligible && !!bbr_param(sk, ecn_thresh)) { + ecn_thresh = (u64)rs->delivered * bbr_param(sk, ecn_thresh) >> + BBR_SCALE; + if (rs->delivered_ce > ecn_thresh) { +@@ -1384,7 +1384,7 @@ static void bbr_adapt_lower_bounds(struc + return; + + /* ECN response. */ +- if (bbr->ecn_in_round && bbr_param(sk, ecn_factor)) { ++ if (bbr->ecn_in_round && !!bbr_param(sk, ecn_factor)) { + bbr_init_lower_bounds(sk, false); + bbr_ecn_lower_bounds(sk, &ecn_inflight_lo); + } diff --git a/openwrt/patch/kernel-6.6/btf/990-btf-silence-btf-module-warning-messages.patch b/openwrt/patch/kernel-6.18/btf/990-btf-silence-btf-module-warning-messages.patch similarity index 90% rename from openwrt/patch/kernel-6.6/btf/990-btf-silence-btf-module-warning-messages.patch rename to openwrt/patch/kernel-6.18/btf/990-btf-silence-btf-module-warning-messages.patch index d5b98b990..a327fef3b 100644 --- a/openwrt/patch/kernel-6.6/btf/990-btf-silence-btf-module-warning-messages.patch +++ b/openwrt/patch/kernel-6.18/btf/990-btf-silence-btf-module-warning-messages.patch @@ -10,7 +10,7 @@ Signed-off-by: sbwml --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c -@@ -7376,8 +7376,6 @@ static int btf_module_notify(struct noti +@@ -8208,8 +8208,6 @@ static int btf_module_notify(struct noti pr_warn("failed to validate module [%s] BTF: %ld\n", mod->name, PTR_ERR(btf)); err = PTR_ERR(btf); diff --git a/openwrt/patch/kernel-6.18/linux-rt/012-RT-0001-drm-i915-Use-preempt_disable-enable_rt-where-recomme.patch b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0001-drm-i915-Use-preempt_disable-enable_rt-where-recomme.patch new file mode 100644 index 000000000..c8f557152 --- /dev/null +++ b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0001-drm-i915-Use-preempt_disable-enable_rt-where-recomme.patch @@ -0,0 +1,119 @@ +From be75f083e7a43c61ee1c80c40a000335ad46d6f3 Mon Sep 17 00:00:00 2001 +From: Mike Galbraith +Date: Sat, 27 Feb 2016 08:09:11 +0100 +Subject: [PATCH 1/7] drm/i915: Use preempt_disable/enable_rt() where + recommended + +Mario Kleiner suggest in commit + ad3543ede630f ("drm/intel: Push get_scanout_position() timestamping into kms driver.") + +a spots where preemption should be disabled on PREEMPT_RT. The +difference is that on PREEMPT_RT the intel_uncore::lock disables neither +preemption nor interrupts and so region remains preemptible. + +The area covers only register reads and writes. The part that worries me +is: +- __intel_get_crtc_scanline() the worst case is 100us if no match is + found. + +- intel_crtc_scanlines_since_frame_timestamp() not sure how long this + may take in the worst case. + +It was in the RT queue for a while and nobody complained. +Disable preemption on PREEPMPT_RT during timestamping. + +[bigeasy: patch description.] + +Cc: Mario Kleiner +Signed-off-by: Mike Galbraith +Signed-off-by: Thomas Gleixner +Signed-off-by: Sebastian Andrzej Siewior +--- + drivers/gpu/drm/i915/display/intel_vblank.c | 43 ++++++++++++++++----- + 1 file changed, 33 insertions(+), 10 deletions(-) + +--- a/drivers/gpu/drm/i915/display/intel_vblank.c ++++ b/drivers/gpu/drm/i915/display/intel_vblank.c +@@ -315,6 +315,20 @@ static void intel_vblank_section_exit(st + struct drm_i915_private *i915 = to_i915(display->drm); + spin_unlock(&i915->uncore.lock); + } ++ ++static void intel_vblank_section_enter_irqf(struct intel_display *display, unsigned long *flags) ++ __acquires(i915->uncore.lock) ++{ ++ struct drm_i915_private *i915 = to_i915(display->drm); ++ spin_lock_irqsave(&i915->uncore.lock, *flags); ++} ++ ++static void intel_vblank_section_exit_irqf(struct intel_display *display, unsigned long flags) ++ __releases(i915->uncore.lock) ++{ ++ struct drm_i915_private *i915 = to_i915(display->drm); ++ spin_unlock_irqrestore(&i915->uncore.lock, flags); ++} + #else + static void intel_vblank_section_enter(struct intel_display *display) + { +@@ -323,6 +337,17 @@ static void intel_vblank_section_enter(s + static void intel_vblank_section_exit(struct intel_display *display) + { + } ++ ++static void intel_vblank_section_enter_irqf(struct intel_display *display, unsigned long *flags) ++{ ++ *flags = 0; ++} ++ ++static void intel_vblank_section_exit_irqf(struct intel_display *display, unsigned long flags) ++{ ++ if (flags) ++ return; ++} + #endif + + static bool i915_get_crtc_scanoutpos(struct drm_crtc *_crtc, +@@ -359,10 +384,10 @@ static bool i915_get_crtc_scanoutpos(str + * timing critical raw register reads, potentially with + * preemption disabled, so the following code must not block. + */ +- local_irq_save(irqflags); +- intel_vblank_section_enter(display); ++ intel_vblank_section_enter_irqf(display, &irqflags); + +- /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */ ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) ++ preempt_disable(); + + /* Get optional system timestamp before query. */ + if (stime) +@@ -426,10 +451,10 @@ static bool i915_get_crtc_scanoutpos(str + if (etime) + *etime = ktime_get(); + +- /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */ ++ if (IS_ENABLED(CONFIG_PREEMPT_RT)) ++ preempt_enable(); + +- intel_vblank_section_exit(display); +- local_irq_restore(irqflags); ++ intel_vblank_section_exit_irqf(display, irqflags); + + /* + * While in vblank, position will be negative +@@ -467,13 +492,11 @@ int intel_get_crtc_scanline(struct intel + unsigned long irqflags; + int position; + +- local_irq_save(irqflags); +- intel_vblank_section_enter(display); ++ intel_vblank_section_enter_irqf(display, &irqflags); + + position = __intel_get_crtc_scanline(crtc); + +- intel_vblank_section_exit(display); +- local_irq_restore(irqflags); ++ intel_vblank_section_exit_irqf(display, irqflags); + + return position; + } diff --git a/openwrt/patch/kernel-6.18/linux-rt/012-RT-0002-drm-i915-Don-t-disable-interrupts-on-PREEMPT_RT-duri.patch b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0002-drm-i915-Don-t-disable-interrupts-on-PREEMPT_RT-duri.patch new file mode 100644 index 000000000..f11467c95 --- /dev/null +++ b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0002-drm-i915-Don-t-disable-interrupts-on-PREEMPT_RT-duri.patch @@ -0,0 +1,119 @@ +From 5d14201d0fc026ed1d5a9ab1b951a20383524933 Mon Sep 17 00:00:00 2001 +From: Mike Galbraith +Date: Sat, 27 Feb 2016 09:01:42 +0100 +Subject: [PATCH 2/7] drm/i915: Don't disable interrupts on PREEMPT_RT during + atomic updates + +Commit + 8d7849db3eab7 ("drm/i915: Make sprite updates atomic") + +started disabling interrupts across atomic updates. This breaks on PREEMPT_RT +because within this section the code attempt to acquire spinlock_t locks which +are sleeping locks on PREEMPT_RT. + +According to the comment the interrupts are disabled to avoid random delays and +not required for protection or synchronisation. +If this needs to happen with disabled interrupts on PREEMPT_RT, and the +whole section is restricted to register access then all sleeping locks +need to be acquired before interrupts are disabled and some function +maybe moved after enabling interrupts again. +This includes: +- prepare_to_wait() + finish_wait() due its wake queue. +- drm_crtc_vblank_put() -> vblank_disable_fn() drm_device::vbl_lock. +- skl_pfit_enable(), intel_update_plane(), vlv_atomic_update_fifo() and + maybe others due to intel_uncore::lock +- drm_crtc_arm_vblank_event() due to drm_device::event_lock and + drm_device::vblank_time_lock. + +Don't disable interrupts on PREEMPT_RT during atomic updates. + +[bigeasy: drop local locks, commit message] + +Signed-off-by: Mike Galbraith +Signed-off-by: Sebastian Andrzej Siewior +--- + drivers/gpu/drm/i915/display/intel_crtc.c | 9 ++++++--- + drivers/gpu/drm/i915/display/intel_cursor.c | 9 ++++++--- + drivers/gpu/drm/i915/display/intel_vblank.c | 6 ++++-- + 3 files changed, 16 insertions(+), 8 deletions(-) + +--- a/drivers/gpu/drm/i915/display/intel_crtc.c ++++ b/drivers/gpu/drm/i915/display/intel_crtc.c +@@ -562,7 +562,8 @@ void intel_pipe_update_start(struct inte + */ + intel_psr_wait_for_idle_locked(new_crtc_state); + +- local_irq_disable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_disable(); + + crtc->debug.min_vbl = evade.min; + crtc->debug.max_vbl = evade.max; +@@ -580,7 +581,8 @@ void intel_pipe_update_start(struct inte + return; + + irq_disable: +- local_irq_disable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_disable(); + } + + #if IS_ENABLED(CONFIG_DRM_I915_DEBUG_VBLANK_EVADE) +@@ -726,7 +728,8 @@ void intel_pipe_update_end(struct intel_ + if (!state->base.legacy_cursor_update) + intel_vrr_send_push(NULL, new_crtc_state); + +- local_irq_enable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_enable(); + + if (intel_vgpu_active(dev_priv)) + goto out; +--- a/drivers/gpu/drm/i915/display/intel_cursor.c ++++ b/drivers/gpu/drm/i915/display/intel_cursor.c +@@ -919,13 +919,15 @@ intel_legacy_cursor_update(struct drm_pl + */ + intel_psr_wait_for_idle_locked(crtc_state); + +- local_irq_disable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_disable(); + + intel_vblank_evade(&evade); + + drm_crtc_vblank_put(&crtc->base); + } else { +- local_irq_disable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_disable(); + } + + if (new_plane_state->uapi.visible) { +@@ -935,7 +937,8 @@ intel_legacy_cursor_update(struct drm_pl + intel_plane_disable_arm(NULL, plane, crtc_state); + } + +- local_irq_enable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_enable(); + + intel_psr_unlock(crtc_state); + +--- a/drivers/gpu/drm/i915/display/intel_vblank.c ++++ b/drivers/gpu/drm/i915/display/intel_vblank.c +@@ -761,11 +761,13 @@ int intel_vblank_evade(struct intel_vbla + break; + } + +- local_irq_enable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_enable(); + + timeout = schedule_timeout(timeout); + +- local_irq_disable(); ++ if (!IS_ENABLED(CONFIG_PREEMPT_RT)) ++ local_irq_disable(); + } + + finish_wait(wq, &wait); diff --git a/openwrt/patch/kernel-6.18/linux-rt/012-RT-0003-drm-i915-Disable-tracing-points-on-PREEMPT_RT.patch b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0003-drm-i915-Disable-tracing-points-on-PREEMPT_RT.patch new file mode 100644 index 000000000..88f28c0ef --- /dev/null +++ b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0003-drm-i915-Disable-tracing-points-on-PREEMPT_RT.patch @@ -0,0 +1,74 @@ +From 0b0d2f1b3fb77c96bc45b22f2b0928576d6ffe08 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Thu, 6 Dec 2018 09:52:20 +0100 +Subject: [PATCH 3/7] drm/i915: Disable tracing points on PREEMPT_RT + +Luca Abeni reported this: +| BUG: scheduling while atomic: kworker/u8:2/15203/0x00000003 +| CPU: 1 PID: 15203 Comm: kworker/u8:2 Not tainted 4.19.1-rt3 #10 +| Call Trace: +| rt_spin_lock+0x3f/0x50 +| gen6_read32+0x45/0x1d0 [i915] +| g4x_get_vblank_counter+0x36/0x40 [i915] +| trace_event_raw_event_i915_pipe_update_start+0x7d/0xf0 [i915] + +The tracing events use trace_intel_pipe_update_start() among other events +use functions acquire spinlock_t locks which are transformed into +sleeping locks on PREEMPT_RT. A few trace points use +intel_get_crtc_scanline(), others use ->get_vblank_counter() wich also +might acquire a sleeping locks on PREEMPT_RT. +At the time the arguments are evaluated within trace point, preemption +is disabled and so the locks must not be acquired on PREEMPT_RT. + +Based on this I don't see any other way than disable trace points on +PREMPT_RT. + +Acked-by: Tvrtko Ursulin +Reported-by: Luca Abeni +Cc: Steven Rostedt +Signed-off-by: Sebastian Andrzej Siewior +--- + drivers/gpu/drm/i915/display/intel_display_trace.h | 4 ++++ + drivers/gpu/drm/i915/i915_trace.h | 4 ++++ + drivers/gpu/drm/i915/intel_uncore_trace.h | 4 ++++ + 3 files changed, 12 insertions(+) + +--- a/drivers/gpu/drm/i915/display/intel_display_trace.h ++++ b/drivers/gpu/drm/i915/display/intel_display_trace.h +@@ -13,6 +13,10 @@ + #if !defined(__INTEL_DISPLAY_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ) + #define __INTEL_DISPLAY_TRACE_H__ + ++#if defined(CONFIG_PREEMPT_RT) && !defined(NOTRACE) ++#define NOTRACE ++#endif ++ + #include + #include + #include +--- a/drivers/gpu/drm/i915/i915_trace.h ++++ b/drivers/gpu/drm/i915/i915_trace.h +@@ -6,6 +6,10 @@ + #if !defined(_I915_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) + #define _I915_TRACE_H_ + ++#if defined(CONFIG_PREEMPT_RT) && !defined(NOTRACE) ++#define NOTRACE ++#endif ++ + #include + #include + #include +--- a/drivers/gpu/drm/i915/intel_uncore_trace.h ++++ b/drivers/gpu/drm/i915/intel_uncore_trace.h +@@ -7,6 +7,10 @@ + #if !defined(__INTEL_UNCORE_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ) + #define __INTEL_UNCORE_TRACE_H__ + ++#if defined(CONFIG_PREEMPT_RT) && !defined(NOTRACE) ++#define NOTRACE ++#endif ++ + #include "i915_reg_defs.h" + + #include diff --git a/openwrt/patch/kernel-6.18/linux-rt/012-RT-0004-drm-i915-gt-Use-spin_lock_irq-instead-of-local_irq_d.patch b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0004-drm-i915-gt-Use-spin_lock_irq-instead-of-local_irq_d.patch new file mode 100644 index 000000000..771062b21 --- /dev/null +++ b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0004-drm-i915-gt-Use-spin_lock_irq-instead-of-local_irq_d.patch @@ -0,0 +1,89 @@ +From 05828eb4b80cc738696cdc733d92d66079055fd9 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Wed, 8 Sep 2021 19:03:41 +0200 +Subject: [PATCH 4/7] drm/i915/gt: Use spin_lock_irq() instead of + local_irq_disable() + spin_lock() + +execlists_dequeue() is invoked from a function which uses +local_irq_disable() to disable interrupts so the spin_lock() behaves +like spin_lock_irq(). +This breaks PREEMPT_RT because local_irq_disable() + spin_lock() is not +the same as spin_lock_irq(). + +execlists_dequeue_irq() and execlists_dequeue() has each one caller +only. If intel_engine_cs::active::lock is acquired and released with the +_irq suffix then it behaves almost as if execlists_dequeue() would be +invoked with disabled interrupts. The difference is the last part of the +function which is then invoked with enabled interrupts. +I can't tell if this makes a difference. From looking at it, it might +work to move the last unlock at the end of the function as I didn't find +anything that would acquire the lock again. + +Reported-by: Clark Williams +Signed-off-by: Sebastian Andrzej Siewior +Reviewed-by: Maarten Lankhorst +--- + .../drm/i915/gt/intel_execlists_submission.c | 17 +++++------------ + 1 file changed, 5 insertions(+), 12 deletions(-) + +--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c ++++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c +@@ -1298,7 +1298,7 @@ static void execlists_dequeue(struct int + * and context switches) submission. + */ + +- spin_lock(&sched_engine->lock); ++ spin_lock_irq(&sched_engine->lock); + + /* + * If the queue is higher priority than the last +@@ -1398,7 +1398,7 @@ static void execlists_dequeue(struct int + * Even if ELSP[1] is occupied and not worthy + * of timeslices, our queue might be. + */ +- spin_unlock(&sched_engine->lock); ++ spin_unlock_irq(&sched_engine->lock); + return; + } + } +@@ -1424,7 +1424,7 @@ static void execlists_dequeue(struct int + + if (last && !can_merge_rq(last, rq)) { + spin_unlock(&ve->base.sched_engine->lock); +- spin_unlock(&engine->sched_engine->lock); ++ spin_unlock_irq(&engine->sched_engine->lock); + return; /* leave this for another sibling */ + } + +@@ -1586,7 +1586,7 @@ done: + */ + sched_engine->queue_priority_hint = queue_prio(sched_engine); + i915_sched_engine_reset_on_empty(sched_engine); +- spin_unlock(&sched_engine->lock); ++ spin_unlock_irq(&sched_engine->lock); + + /* + * We can skip poking the HW if we ended up with exactly the same set +@@ -1612,13 +1612,6 @@ done: + } + } + +-static void execlists_dequeue_irq(struct intel_engine_cs *engine) +-{ +- local_irq_disable(); /* Suspend interrupts across request submission */ +- execlists_dequeue(engine); +- local_irq_enable(); /* flush irq_work (e.g. breadcrumb enabling) */ +-} +- + static void clear_ports(struct i915_request **ports, int count) + { + memset_p((void **)ports, NULL, count); +@@ -2473,7 +2466,7 @@ static void execlists_submission_tasklet + } + + if (!engine->execlists.pending[0]) { +- execlists_dequeue_irq(engine); ++ execlists_dequeue(engine); + start_timeslice(engine); + } + diff --git a/openwrt/patch/kernel-6.18/linux-rt/012-RT-0005-drm-i915-Drop-the-irqs_disabled-check.patch b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0005-drm-i915-Drop-the-irqs_disabled-check.patch new file mode 100644 index 000000000..69e3ad254 --- /dev/null +++ b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0005-drm-i915-Drop-the-irqs_disabled-check.patch @@ -0,0 +1,40 @@ +From cc42b122cdf624c893583842eb13448b9d6ff01a Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Fri, 1 Oct 2021 20:01:03 +0200 +Subject: [PATCH 5/7] drm/i915: Drop the irqs_disabled() check + +The !irqs_disabled() check triggers on PREEMPT_RT even with +i915_sched_engine::lock acquired. The reason is the lock is transformed +into a sleeping lock on PREEMPT_RT and does not disable interrupts. + +There is no need to check for disabled interrupts. The lockdep +annotation below already check if the lock has been acquired by the +caller and will yell if the interrupts are not disabled. + +Remove the !irqs_disabled() check. + +Reported-by: Maarten Lankhorst +Acked-by: Tvrtko Ursulin +Signed-off-by: Sebastian Andrzej Siewior +--- + drivers/gpu/drm/i915/i915_request.c | 2 -- + 1 file changed, 2 deletions(-) + +--- a/drivers/gpu/drm/i915/i915_request.c ++++ b/drivers/gpu/drm/i915/i915_request.c +@@ -608,7 +608,6 @@ bool __i915_request_submit(struct i915_r + + RQ_TRACE(request, "\n"); + +- GEM_BUG_ON(!irqs_disabled()); + lockdep_assert_held(&engine->sched_engine->lock); + + /* +@@ -717,7 +716,6 @@ void __i915_request_unsubmit(struct i915 + */ + RQ_TRACE(request, "\n"); + +- GEM_BUG_ON(!irqs_disabled()); + lockdep_assert_held(&engine->sched_engine->lock); + + /* diff --git a/openwrt/patch/kernel-6.18/linux-rt/012-RT-0006-drm-i915-guc-Consider-also-RCU-depth-in-busy-loop.patch b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0006-drm-i915-guc-Consider-also-RCU-depth-in-busy-loop.patch new file mode 100644 index 000000000..a18ec9237 --- /dev/null +++ b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0006-drm-i915-guc-Consider-also-RCU-depth-in-busy-loop.patch @@ -0,0 +1,30 @@ +From e62808ec002112e34475e776c7986f471d2dfffc Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Tue, 3 Oct 2023 21:37:21 +0200 +Subject: [PATCH 6/7] drm/i915/guc: Consider also RCU depth in busy loop. + +intel_guc_send_busy_loop() looks at in_atomic() and irqs_disabled() to +decide if it should busy-spin while waiting or if it may sleep. +Both checks will report false on PREEMPT_RT if sleeping spinlocks are +acquired leading to RCU splats while the function sleeps. + +Check also if RCU has been disabled. + +Reported-by: "John B. Wyatt IV" +Reviewed-by: Rodrigo Vivi +Signed-off-by: Sebastian Andrzej Siewior +--- + drivers/gpu/drm/i915/gt/uc/intel_guc.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/i915/gt/uc/intel_guc.h ++++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.h +@@ -362,7 +362,7 @@ static inline int intel_guc_send_busy_lo + { + int err; + unsigned int sleep_period_ms = 1; +- bool not_atomic = !in_atomic() && !irqs_disabled(); ++ bool not_atomic = !in_atomic() && !irqs_disabled() && !rcu_preempt_depth(); + + /* + * FIXME: Have caller pass in if we are in an atomic context to avoid diff --git a/openwrt/patch/kernel-6.18/linux-rt/012-RT-0007-Revert-drm-i915-Depend-on-PREEMPT_RT.patch b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0007-Revert-drm-i915-Depend-on-PREEMPT_RT.patch new file mode 100644 index 000000000..ecd5776e0 --- /dev/null +++ b/openwrt/patch/kernel-6.18/linux-rt/012-RT-0007-Revert-drm-i915-Depend-on-PREEMPT_RT.patch @@ -0,0 +1,24 @@ +From bc682cebd9ef2e61ddba67ca478aa3ea6c0d47f6 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Mon, 21 Feb 2022 17:59:14 +0100 +Subject: [PATCH 7/7] Revert "drm/i915: Depend on !PREEMPT_RT." + +Once the known issues are addressed, it should be safe to enable the +driver. + +Acked-by: Tvrtko Ursulin +Signed-off-by: Sebastian Andrzej Siewior +--- + drivers/gpu/drm/i915/Kconfig | 1 - + 1 file changed, 1 deletion(-) + +--- a/drivers/gpu/drm/i915/Kconfig ++++ b/drivers/gpu/drm/i915/Kconfig +@@ -3,7 +3,6 @@ config DRM_I915 + tristate "Intel 8xx/9xx/G3x/G4x/HD Graphics" + depends on DRM + depends on X86 && PCI +- depends on !PREEMPT_RT + select INTEL_GTT if X86 + select INTERVAL_TREE + # we need shmfs for the swappable backing store, and in particular diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0001-LRNG-Entropy-Source-and-DRNG-Manager.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0001-LRNG-Entropy-Source-and-DRNG-Manager.patch similarity index 98% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0001-LRNG-Entropy-Source-and-DRNG-Manager.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0001-LRNG-Entropy-Source-and-DRNG-Manager.patch index b86025af8..b655bdc66 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0001-LRNG-Entropy-Source-and-DRNG-Manager.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0001-LRNG-Entropy-Source-and-DRNG-Manager.patch @@ -1,6 +1,6 @@ -From 9b56d7ac8b429d14dfdc07956cce303f4d401d9f Mon Sep 17 00:00:00 2001 +From 6ab67c13afbc92f79b42393037e607611986fabd Mon Sep 17 00:00:00 2001 From: Stephan Mueller -Date: Tue, 25 Apr 2023 22:22:44 +0200 +Date: Sat, 1 Feb 2025 11:53:01 +0100 Subject: [PATCH 01/25] LRNG: Entropy Source and DRNG Manager The kernel crypto API contains deterministic random number generators @@ -144,8 +144,8 @@ Signed-off-by: Stephan Mueller drivers/char/lrng/Makefile | 11 + drivers/char/lrng/lrng_definitions.h | 163 +++ drivers/char/lrng/lrng_drng_atomic.h | 23 + - drivers/char/lrng/lrng_drng_chacha20.c | 195 ++++ - drivers/char/lrng/lrng_drng_chacha20.h | 42 + + drivers/char/lrng/lrng_drng_chacha20.c | 210 ++++ + drivers/char/lrng/lrng_drng_chacha20.h | 49 + drivers/char/lrng/lrng_drng_drbg.h | 13 + drivers/char/lrng/lrng_drng_kcapi.h | 13 + drivers/char/lrng/lrng_drng_mgr.c | 742 ++++++++++++ @@ -156,7 +156,7 @@ Signed-off-by: Stephan Mueller drivers/char/lrng/lrng_es_irq.h | 24 + drivers/char/lrng/lrng_es_jent.h | 17 + drivers/char/lrng/lrng_es_krng.h | 17 + - drivers/char/lrng/lrng_es_mgr.c | 506 ++++++++ + drivers/char/lrng/lrng_es_mgr.c | 528 +++++++++ drivers/char/lrng/lrng_es_mgr.h | 56 + drivers/char/lrng/lrng_es_mgr_cb.h | 87 ++ drivers/char/lrng/lrng_es_sched.h | 20 + @@ -169,7 +169,7 @@ Signed-off-by: Stephan Mueller drivers/char/lrng/lrng_sha256.c | 72 ++ drivers/char/lrng/lrng_sysctl.h | 15 + include/linux/lrng.h | 251 ++++ - 31 files changed, 4034 insertions(+) + 31 files changed, 4078 insertions(+) create mode 100644 drivers/char/lrng/Kconfig create mode 100644 drivers/char/lrng/Makefile create mode 100644 drivers/char/lrng/lrng_definitions.h @@ -202,7 +202,7 @@ Signed-off-by: Stephan Mueller --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig -@@ -422,4 +422,6 @@ config ADI +@@ -423,4 +423,6 @@ config ADI and SSM (Silicon Secured Memory). Intended consumers of this driver include crash and makedumpfile. @@ -292,20 +292,20 @@ Signed-off-by: Stephan Mueller + default n + help + When enabling this option, two entropy sources must -+ deliver 220 bits of entropy each to consider a DRNG ++ deliver 240 bits of entropy each to consider a DRNG + as fully seeded. Any two entropy sources can be used + to fulfill this requirement. If specific entropy sources + shall not be capable of contributing to this seeding + strategy, the respective entropy source must be configured -+ to provide less than 220 bits of entropy. ++ to provide less than 240 bits of entropy. + + The strategy is consistent with the requirements for -+ NTG.1 compliance in German AIS 20/31 draft from 2022 ++ NTG.1 compliance in German AIS 20/31 version 3.0 from 2024 + and is only enforced with lrng_es_mgr.ntg1=1. + -+ Compliance with German AIS 20/31 from 2011 is always -+ present when using /dev/random with the flag O_SYNC or -+ getrandom(2) with GRND_RANDOM. ++ Compliance with German AIS 20/31 version 2.0 from 2011 is ++ always present when using /dev/random with the flag O_SYNC ++ or getrandom(2) with GRND_RANDOM. + + If unsure, say N. + @@ -1329,7 +1329,7 @@ Signed-off-by: Stephan Mueller +#define LRNG_INIT_ENTROPY_BITS 32 + +/* AIS20/31: NTG.1.4 minimum entropy rate for one entropy source*/ -+#define LRNG_AIS2031_NPTRNG_MIN_ENTROPY 220 ++#define LRNG_AIS2031_NPTRNG_MIN_ENTROPY 240 + +/* + * Wakeup value @@ -1445,7 +1445,7 @@ Signed-off-by: Stephan Mueller +#endif /* _LRNG_DRNG_ATOMIC_H */ --- /dev/null +++ b/drivers/char/lrng/lrng_drng_chacha20.c -@@ -0,0 +1,195 @@ +@@ -0,0 +1,210 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * Backend for the LRNG providing the cryptographic primitives using @@ -1467,6 +1467,21 @@ Signed-off-by: Stephan Mueller + +#define CHACHA_BLOCK_WORDS (CHACHA_BLOCK_SIZE / sizeof(u32)) + ++static inline void lrng_chacha20_block_compat(struct chacha20_block *chacha20, ++ u8 *out) ++{ ++ struct chacha_state state; ++ ++ chacha_init_consts(&state); ++ memcpy(&state.x[4], chacha20->key.u, sizeof(chacha20->key.u)); ++ state.x[12] = chacha20->counter; ++ state.x[13] = chacha20->nonce[0]; ++ state.x[14] = chacha20->nonce[1]; ++ state.x[15] = chacha20->nonce[2]; ++ ++ chacha20_block(&state, out); ++} ++ +/* + * Update of the ChaCha20 state by either using an unused buffer part or by + * generating one ChaCha20 block which is half of the state of the ChaCha20. @@ -1485,7 +1500,7 @@ Signed-off-by: Stephan Mueller + BUILD_BUG_ON(CHACHA_BLOCK_SIZE != 2 * CHACHA_KEY_SIZE); + + if (used_words > CHACHA_KEY_SIZE_WORDS) { -+ chacha20_block(&chacha20->constants[0], (u8 *)tmp); ++ lrng_chacha20_block_compat(chacha20, (u8 *)tmp); + for (i = 0; i < CHACHA_KEY_SIZE_WORDS; i++) + chacha20->key.u[i] ^= le32_to_cpu(tmp[i]); + memzero_explicit(tmp, sizeof(tmp)); @@ -1555,13 +1570,13 @@ Signed-off-by: Stephan Mueller + int zeroize_buf = 0; + + while (outbuflen >= CHACHA_BLOCK_SIZE) { -+ chacha20_block(&chacha20->constants[0], outbuf); ++ lrng_chacha20_block_compat(chacha20, outbuf); + outbuf += CHACHA_BLOCK_SIZE; + outbuflen -= CHACHA_BLOCK_SIZE; + } + + if (outbuflen) { -+ chacha20_block(&chacha20->constants[0], (u8 *)aligned_buf); ++ lrng_chacha20_block_compat(chacha20, (u8 *)aligned_buf); + memcpy(outbuf, aligned_buf, outbuflen); + used = ((outbuflen + sizeof(aligned_buf[0]) - 1) / + sizeof(aligned_buf[0])); @@ -1643,7 +1658,7 @@ Signed-off-by: Stephan Mueller +#endif /* CONFIG_LRNG_DFLT_DRNG_CHACHA20 */ --- /dev/null +++ b/drivers/char/lrng/lrng_drng_chacha20.h -@@ -0,0 +1,42 @@ +@@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */ +/* + * LRNG ChaCha20 definitions @@ -1674,7 +1689,14 @@ Signed-off-by: Stephan Mueller + +static inline void lrng_cc20_init_rfc7539(struct chacha20_block *chacha20) +{ -+ chacha_init_consts(chacha20->constants); ++ struct chacha_state state = {}; ++ ++ chacha_init_consts(&state); ++ ++ chacha20->constants[0] = state.x[0]; ++ chacha20->constants[1] = state.x[1]; ++ chacha20->constants[2] = state.x[2]; ++ chacha20->constants[3] = state.x[3]; +} + +#define LRNG_CC20_INIT_RFC7539(x) \ @@ -2035,7 +2057,7 @@ Signed-off-by: Stephan Mueller + * producing data while this is ongoing. + */ + } while (force_seeding && forced && !drng->fully_seeded && -+ num_es_delivered >= (lrng_ntg1_2022_compliant() ? 2 : 1)); ++ num_es_delivered >= (lrng_ntg1_2024_compliant() ? 2 : 1)); + + memzero_explicit(&seedbuf, sizeof(seedbuf)); + @@ -3026,7 +3048,7 @@ Signed-off-by: Stephan Mueller +#endif /* _LRNG_ES_RANDOM_H */ --- /dev/null +++ b/drivers/char/lrng/lrng_es_mgr.c -@@ -0,0 +1,506 @@ +@@ -0,0 +1,528 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG Entropy sources management @@ -3042,6 +3064,12 @@ Signed-off-by: Stephan Mueller +#include +#include + ++#ifdef CONFIG_VDSO_GETRANDOM ++#include ++#include ++#include ++#endif ++ +#include "lrng_drng_atomic.h" +#include "lrng_drng_mgr.h" +#include "lrng_es_aux.h" @@ -3131,9 +3159,8 @@ Signed-off-by: Stephan Mueller + return lrng_panic_on_permanent_health_failure; +} + -+bool lrng_ntg1_2022_compliant(void) ++bool lrng_ntg1_2024_compliant(void) +{ -+ /* Implies use of /dev/random w/ O_SYNC / getrandom w/ GRND_RANDOM */ + return ntg1; +} + @@ -3198,6 +3225,11 @@ Signed-off-by: Stephan Mueller + lrng_state.lrng_fully_seeded = false; + lrng_state.lrng_min_seeded = false; + lrng_state.all_online_numa_node_seeded = false; ++ ++#ifdef CONFIG_VDSO_GETRANDOM ++ /* WRITE_ONCE(__arch_get_k_vdso_rng_data()->is_ready, false); */ ++#endif ++ + pr_debug("reset LRNG\n"); +} + @@ -3234,6 +3266,14 @@ Signed-off-by: Stephan Mueller + +static void lrng_init_wakeup(void) +{ ++#ifdef CONFIG_VDSO_GETRANDOM ++ /* ++ * The LRNG does not enable the user space ChaCha20 ++ * DRNG in the VDSO. ++ */ ++ /* WRITE_ONCE(__arch_get_k_vdso_rng_data()->is_ready, true); */ ++#endif ++ + wake_up_all(&lrng_init_wait); + lrng_init_wakeup_dev(); + lrng_kick_random_ready(); @@ -3257,8 +3297,8 @@ Signed-off-by: Stephan Mueller +bool lrng_fully_seeded(bool fully_seeded, u32 collected_entropy, + struct entropy_buf *eb) +{ -+ /* AIS20/31 NTG.1: two entropy sources with each delivering 220 bits */ -+ if (ntg1) { ++ /* AIS20/31 NTG.1: two entropy sources with each delivering 240 bits */ ++ if (!fully_seeded && ntg1) { + u32 i, result = 0, ent_thresh = lrng_avail_entropy_thresh(); + + for_each_lrng_es(i) { @@ -3300,6 +3340,10 @@ Signed-off-by: Stephan Mueller + lrng_state.lrng_operational = false; + lrng_state.lrng_fully_seeded = false; + ++#ifdef CONFIG_VDSO_GETRANDOM ++ /* WRITE_ONCE(__arch_get_k_vdso_rng_data()->is_ready, false); */ ++#endif ++ + /* If sufficient entropy is available, reseed now. */ + lrng_es_add_entropy(); + } @@ -3359,7 +3403,7 @@ Signed-off-by: Stephan Mueller + return; + + requested_bits = ntg1 ? -+ /* Approximation so that two ES should deliver 220 bits each */ ++ /* Approximation so that two ES should deliver 240 bits each */ + (lrng_avail_entropy() + LRNG_AIS2031_NPTRNG_MIN_ENTROPY) : + /* Apply SP800-90C oversampling if applicable */ + lrng_get_seed_entropy_osr(state->all_online_numa_node_seeded); @@ -3562,7 +3606,7 @@ Signed-off-by: Stephan Mueller + for ((ctr) = 0; (ctr) < lrng_ext_es_last; (ctr)++) + +bool lrng_enforce_panic_on_permanent_health_failure(void); -+bool lrng_ntg1_2022_compliant(void); ++bool lrng_ntg1_2024_compliant(void); +bool lrng_pool_all_numa_nodes_seeded_get(void); +bool lrng_state_min_seeded(void); +void lrng_debug_report_seedlevel(const char *name); diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0002-LRNG-allocate-one-DRNG-instance-per-NUMA-node.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0002-LRNG-allocate-one-DRNG-instance-per-NUMA-node.patch similarity index 98% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0002-LRNG-allocate-one-DRNG-instance-per-NUMA-node.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0002-LRNG-allocate-one-DRNG-instance-per-NUMA-node.patch index 09d9b8ec8..ea352f408 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0002-LRNG-allocate-one-DRNG-instance-per-NUMA-node.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0002-LRNG-allocate-one-DRNG-instance-per-NUMA-node.patch @@ -1,4 +1,4 @@ -From af8b9713b5ad9aaa67e604c494c0098fccf915a1 Mon Sep 17 00:00:00 2001 +From 02d42166cbad6ba32033313e6828f49b497baaf5 Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 15 May 2022 15:40:46 +0200 Subject: [PATCH 02/25] LRNG - allocate one DRNG instance per NUMA node diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0003-LRNG-proc-interface.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0003-LRNG-proc-interface.patch similarity index 96% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0003-LRNG-proc-interface.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0003-LRNG-proc-interface.patch index 8201bf4dd..1cf11a048 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0003-LRNG-proc-interface.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0003-LRNG-proc-interface.patch @@ -1,4 +1,4 @@ -From 25710c7badb8f60dbc18ab7f7beb95a4cfd978fc Mon Sep 17 00:00:00 2001 +From debd65a3952744217f46ca1d234b98e0a182e676 Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 18 Dec 2022 21:12:42 +0100 Subject: [PATCH 03/25] LRNG - /proc interface @@ -90,7 +90,7 @@ Signed-off-by: Stephan Mueller + lrng_security_strength(), + numa_drngs, + lrng_sp80090c_compliant() ? "SP800-90C, " : "", -+ lrng_ntg1_2022_compliant() ? " / 2022" : "", ++ lrng_ntg1_2024_compliant() ? " / 2024" : "", + lrng_state_min_seeded() ? "true" : "false", + lrng_state_fully_seeded() ? "true" : "false", + lrng_avail_entropy()); diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0004-LRNG-add-switchable-DRNG-support.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0004-LRNG-add-switchable-DRNG-support.patch similarity index 99% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0004-LRNG-add-switchable-DRNG-support.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0004-LRNG-add-switchable-DRNG-support.patch index 59160913b..7fb3d0079 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0004-LRNG-add-switchable-DRNG-support.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0004-LRNG-add-switchable-DRNG-support.patch @@ -1,4 +1,4 @@ -From 3c33dfe027fca31d07e48e24c041a2f1706a4c07 Mon Sep 17 00:00:00 2001 +From 0567447f38dc80698352d6683810f7df09f926bb Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Mon, 20 Feb 2023 22:02:06 +0100 Subject: [PATCH 04/25] LRNG - add switchable DRNG support diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0005-LRNG-add-common-generic-hash-support.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0005-LRNG-add-common-generic-hash-support.patch similarity index 98% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0005-LRNG-add-common-generic-hash-support.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0005-LRNG-add-common-generic-hash-support.patch index c9d5dd278..5a328aa6d 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0005-LRNG-add-common-generic-hash-support.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0005-LRNG-add-common-generic-hash-support.patch @@ -1,4 +1,4 @@ -From 5888ed6bedc139ed500bf9fe46761e2f0838d987 Mon Sep 17 00:00:00 2001 +From 73ef8dee29ad83e4e07e26b651d3d04dddc4438e Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 15 May 2022 16:01:44 +0200 Subject: [PATCH 05/25] LRNG - add common generic hash support diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0006-crypto-DRBG-externalize-DRBG-functions-for-LRNG.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0006-crypto-DRBG-externalize-DRBG-functions-for-LRNG.patch similarity index 82% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0006-crypto-DRBG-externalize-DRBG-functions-for-LRNG.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0006-crypto-DRBG-externalize-DRBG-functions-for-LRNG.patch index c6293a6c3..d4a6d8bc2 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0006-crypto-DRBG-externalize-DRBG-functions-for-LRNG.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0006-crypto-DRBG-externalize-DRBG-functions-for-LRNG.patch @@ -1,4 +1,4 @@ -From 457a18d887ffb7555838e65505a6a8a72a5e0ae0 Mon Sep 17 00:00:00 2001 +From 1bfa3a1d69ab42205b6ce9e13a5c8010c16212d0 Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Thu, 21 Mar 2024 14:17:33 +0100 Subject: [PATCH 06/25] crypto: DRBG - externalize DRBG functions for LRNG @@ -14,16 +14,16 @@ Signed-off-by: Stephan Mueller --- a/crypto/drbg.c +++ b/crypto/drbg.c -@@ -115,7 +115,7 @@ - * the SHA256 / AES 256 over other ciphers. Thus, the favored - * DRBGs are the latest entries in this array. +@@ -116,7 +116,7 @@ + * HMAC-SHA512 / SHA256 / AES 256 over other ciphers. Thus, the + * favored DRBGs are the latest entries in this array. */ -static const struct drbg_core drbg_cores[] = { +const struct drbg_core drbg_cores[] = { #ifdef CONFIG_CRYPTO_DRBG_CTR { .flags = DRBG_CTR | DRBG_STRENGTH128, -@@ -192,6 +192,7 @@ static const struct drbg_core drbg_cores +@@ -181,6 +181,7 @@ static const struct drbg_core drbg_cores }, #endif /* CONFIG_CRYPTO_DRBG_HMAC */ }; @@ -31,7 +31,7 @@ Signed-off-by: Stephan Mueller static int drbg_uninstantiate(struct drbg_state *drbg); -@@ -207,7 +208,7 @@ static int drbg_uninstantiate(struct drb +@@ -196,7 +197,7 @@ static int drbg_uninstantiate(struct drb * Return: normalized strength in *bytes* value or 32 as default * to counter programming errors */ @@ -40,7 +40,7 @@ Signed-off-by: Stephan Mueller { switch (flags & DRBG_STRENGTH_MASK) { case DRBG_STRENGTH128: -@@ -220,6 +221,7 @@ static inline unsigned short drbg_sec_st +@@ -209,6 +210,7 @@ static inline unsigned short drbg_sec_st return 32; } } @@ -48,7 +48,7 @@ Signed-off-by: Stephan Mueller /* * FIPS 140-2 continuous self test for the noise source -@@ -1252,7 +1254,7 @@ out: +@@ -1237,7 +1239,7 @@ out: } /* Free all substructures in a DRBG state without the DRBG state structure */ @@ -57,7 +57,7 @@ Signed-off-by: Stephan Mueller { if (!drbg) return; -@@ -1273,12 +1275,13 @@ static inline void drbg_dealloc_state(st +@@ -1258,12 +1260,13 @@ static inline void drbg_dealloc_state(st drbg->fips_primed = false; } } @@ -72,7 +72,7 @@ Signed-off-by: Stephan Mueller { int ret = -ENOMEM; unsigned int sb_size = 0; -@@ -1359,6 +1362,7 @@ err: +@@ -1344,6 +1347,7 @@ err: drbg_dealloc_state(drbg); return ret; } @@ -80,7 +80,7 @@ Signed-off-by: Stephan Mueller /************************************************************************* * DRBG interface functions -@@ -1893,8 +1897,7 @@ out: +@@ -1878,8 +1882,7 @@ out: * * return: flags */ @@ -90,7 +90,7 @@ Signed-off-by: Stephan Mueller { int i = 0; size_t start = 0; -@@ -1921,6 +1924,7 @@ static inline void drbg_convert_tfm_core +@@ -1906,6 +1909,7 @@ static inline void drbg_convert_tfm_core } } } diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0007-LRNG-add-SP800-90A-DRBG-extension.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0007-LRNG-add-SP800-90A-DRBG-extension.patch similarity index 79% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0007-LRNG-add-SP800-90A-DRBG-extension.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0007-LRNG-add-SP800-90A-DRBG-extension.patch index bf7dbdb15..1c5ef8e8c 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0007-LRNG-add-SP800-90A-DRBG-extension.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0007-LRNG-add-SP800-90A-DRBG-extension.patch @@ -1,6 +1,6 @@ -From a214000d457a567900e3b08bb22cae627633ba48 Mon Sep 17 00:00:00 2001 +From 2e869f245789853af62630737a97173d3501c0b9 Mon Sep 17 00:00:00 2001 From: Stephan Mueller -Date: Mon, 20 Feb 2023 22:22:25 +0100 +Date: Sun, 28 Jul 2024 21:39:01 +0200 Subject: [PATCH 07/25] LRNG - add SP800-90A DRBG extension Using the LRNG switchable DRNG support, the SP800-90A DRBG extension is @@ -22,10 +22,10 @@ provide random data produced by an SP800-90A DRBG. Signed-off-by: Stephan Mueller --- - drivers/char/lrng/Kconfig | 78 ++++++------- + drivers/char/lrng/Kconfig | 78 +++++------ drivers/char/lrng/Makefile | 1 + - drivers/char/lrng/lrng_drng_drbg.c | 179 +++++++++++++++++++++++++++++ - 3 files changed, 219 insertions(+), 39 deletions(-) + drivers/char/lrng/lrng_drng_drbg.c | 215 +++++++++++++++++++++++++++++ + 3 files changed, 255 insertions(+), 39 deletions(-) create mode 100644 drivers/char/lrng/lrng_drng_drbg.c --- a/drivers/char/lrng/Kconfig @@ -145,7 +145,7 @@ Signed-off-by: Stephan Mueller +obj-$(CONFIG_LRNG_DRBG) += lrng_drng_drbg.o --- /dev/null +++ b/drivers/char/lrng/lrng_drng_drbg.c -@@ -0,0 +1,179 @@ +@@ -0,0 +1,215 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * Backend for the LRNG providing the cryptographic primitives using the @@ -157,8 +157,8 @@ Signed-off-by: Stephan Mueller +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include -+#include +#include ++#include +#include + +#include "lrng_drng_drbg.h" @@ -193,23 +193,26 @@ Signed-off-by: Stephan Mueller +MODULE_PARM_DESC(lrng_drbg_type, "DRBG type used for LRNG (0->CTR_DRBG, 1->HMAC_DRBG, 2->Hash_DRBG)"); + +struct lrng_drbg { -+ const char *hash_name; -+ const char *drbg_core; ++ const char* hash_name; ++ const char* drbg_core; +}; + +static const struct lrng_drbg lrng_drbg_types[] = { -+ { /* CTR_DRBG with AES-256 using derivation function */ ++ { ++ /* CTR_DRBG with AES-256 using derivation function */ + .drbg_core = "drbg_nopr_ctr_aes256", -+ }, { /* HMAC_DRBG with SHA-512 */ ++ }, { ++ /* HMAC_DRBG with SHA-512 */ + .drbg_core = "drbg_nopr_hmac_sha512", -+ }, { /* Hash_DRBG with SHA-512 using derivation function */ ++ }, { ++ /* Hash_DRBG with SHA-512 using derivation function */ + .drbg_core = "drbg_nopr_sha512" + } +}; + -+static int lrng_drbg_drng_seed_helper(void *drng, const u8 *inbuf, u32 inbuflen) ++static int lrng_drbg_drng_seed_helper(void* drng, const u8* inbuf, u32 inbuflen) +{ -+ struct drbg_state *drbg = (struct drbg_state *)drng; ++ struct drbg_state* drbg = (struct drbg_state*)drng; + LIST_HEAD(seedlist); + struct drbg_string data; + int ret; @@ -224,16 +227,16 @@ Signed-off-by: Stephan Mueller + return ret; +} + -+static int lrng_drbg_drng_generate_helper(void *drng, u8 *outbuf, u32 outbuflen) ++static int lrng_drbg_drng_generate_helper(void* drng, u8* outbuf, u32 outbuflen) +{ -+ struct drbg_state *drbg = (struct drbg_state *)drng; ++ struct drbg_state* drbg = (struct drbg_state*)drng; + + return drbg->d_ops->generate(drbg, outbuf, outbuflen, NULL); +} + -+static void *lrng_drbg_drng_alloc(u32 sec_strength) ++static void* lrng_drbg_drng_alloc(u32 sec_strength) +{ -+ struct drbg_state *drbg; ++ struct drbg_state* drbg; + int coreref = -1; + bool pr = false; + int ret; @@ -255,8 +258,8 @@ Signed-off-by: Stephan Mueller + + if (sec_strength > drbg_sec_strength(drbg->core->flags)) { + pr_err("Security strength of DRBG (%u bits) lower than requested by LRNG (%u bits)\n", -+ drbg_sec_strength(drbg->core->flags) * 8, -+ sec_strength * 8); ++ drbg_sec_strength(drbg->core->flags) * 8, ++ sec_strength * 8); + goto dealloc; + } + @@ -269,18 +272,18 @@ Signed-off-by: Stephan Mueller + + return drbg; + -+dealloc: ++ dealloc: + if (drbg->d_ops) + drbg->d_ops->crypto_fini(drbg); + drbg_dealloc_state(drbg); -+err: ++ err: + kfree(drbg); + return ERR_PTR(-EINVAL); +} + -+static void lrng_drbg_drng_dealloc(void *drng) ++static void lrng_drbg_drng_dealloc(void* drng) +{ -+ struct drbg_state *drbg = (struct drbg_state *)drng; ++ struct drbg_state* drbg = (struct drbg_state*)drng; + + if (drbg && drbg->d_ops) + drbg->d_ops->crypto_fini(drbg); @@ -289,26 +292,48 @@ Signed-off-by: Stephan Mueller + pr_info("DRBG deallocated\n"); +} + -+static const char *lrng_drbg_name(void) ++static const char* lrng_drbg_name(void) +{ + return lrng_drbg_types[lrng_drbg_type].drbg_core; +} + +const struct lrng_drng_cb lrng_drbg_cb = { -+ .drng_name = lrng_drbg_name, -+ .drng_alloc = lrng_drbg_drng_alloc, -+ .drng_dealloc = lrng_drbg_drng_dealloc, -+ .drng_seed = lrng_drbg_drng_seed_helper, -+ .drng_generate = lrng_drbg_drng_generate_helper, ++ .drng_name = lrng_drbg_name, ++ .drng_alloc = lrng_drbg_drng_alloc, ++ .drng_dealloc = lrng_drbg_drng_dealloc, ++ .drng_seed = lrng_drbg_drng_seed_helper, ++ .drng_generate = lrng_drbg_drng_generate_helper, +}; + ++static int __init lrng_drbg_selftest(void) ++{ ++ struct crypto_rng *drbg; ++ ++ /* Allocate the DRBG once to trigger the kernel crypto API self test */ ++ drbg = crypto_alloc_rng(lrng_drbg_types[lrng_drbg_type].drbg_core, 0, ++ 0); ++ if (IS_ERR(drbg)) { ++ pr_err("could not allocate DRBG and trigger self-test: %ld\n", ++ PTR_ERR(drbg)); ++ return PTR_ERR(drbg); ++ } ++ crypto_free_rng(drbg); ++ ++ return 0; ++} ++ +#ifndef CONFIG_LRNG_DFLT_DRNG_DRBG +static int __init lrng_drbg_init(void) +{ ++ int ret = lrng_drbg_selftest(); ++ ++ if (ret) ++ return ret; ++ + if (lrng_drbg_type >= ARRAY_SIZE(lrng_drbg_types)) { + pr_err("lrng_drbg_type parameter too large (given %u - max: %lu)", + lrng_drbg_type, -+ (unsigned long)ARRAY_SIZE(lrng_drbg_types) - 1); ++ (unsigned long)ARRAY_SIZE(lrng_drbg_types) - 1); + return -EAGAIN; + } + return lrng_set_drng_cb(&lrng_drbg_cb); @@ -324,4 +349,15 @@ Signed-off-by: Stephan Mueller +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_AUTHOR("Stephan Mueller "); +MODULE_DESCRIPTION("Entropy Source and DRNG Manager - SP800-90A DRBG backend"); ++#else ++ ++/* ++ * Note, this call may result in the use of the DRBG before the self-test is ++ * run. However, that usage is not relevant to any FIPS-140 consideration as ++ * the data is used for non-cryptographic purposes. The call below guarantees ++ * that the self-tests are run before user space is started and thus callers ++ * with needs to comply with FIPS-140 appear. ++ */ ++late_initcall(lrng_drbg_selftest); ++ +#endif /* CONFIG_LRNG_DFLT_DRNG_DRBG */ diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0008-LRNG-add-kernel-crypto-API-PRNG-extension.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0008-LRNG-add-kernel-crypto-API-PRNG-extension.patch similarity index 99% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0008-LRNG-add-kernel-crypto-API-PRNG-extension.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0008-LRNG-add-kernel-crypto-API-PRNG-extension.patch index 8e81dce1f..d9037da53 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0008-LRNG-add-kernel-crypto-API-PRNG-extension.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0008-LRNG-add-kernel-crypto-API-PRNG-extension.patch @@ -1,4 +1,4 @@ -From 983913a3320a0ae53a430234be5fc5af1017f7af Mon Sep 17 00:00:00 2001 +From cb39bce15aca3daea5305e1b085fdf68bcb15101 Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Mon, 20 Feb 2023 22:23:59 +0100 Subject: [PATCH 08/25] LRNG - add kernel crypto API PRNG extension diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0009-LRNG-add-atomic-DRNG-implementation.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0009-LRNG-add-atomic-DRNG-implementation.patch similarity index 98% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0009-LRNG-add-atomic-DRNG-implementation.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0009-LRNG-add-atomic-DRNG-implementation.patch index 052474bcd..645eeda0e 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0009-LRNG-add-atomic-DRNG-implementation.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0009-LRNG-add-atomic-DRNG-implementation.patch @@ -1,4 +1,4 @@ -From 6b2fe42773ad58268176809bb2030acbf8395a02 Mon Sep 17 00:00:00 2001 +From bd07b1023c263b790592b97332029c25491730b7 Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Mon, 20 Feb 2023 22:05:24 +0100 Subject: [PATCH 09/25] LRNG - add atomic DRNG implementation diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0010-LRNG-add-common-timer-based-entropy-source-code.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0010-LRNG-add-common-timer-based-entropy-source-code.patch similarity index 98% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0010-LRNG-add-common-timer-based-entropy-source-code.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0010-LRNG-add-common-timer-based-entropy-source-code.patch index 081734f6a..7a97723ef 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0010-LRNG-add-common-timer-based-entropy-source-code.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0010-LRNG-add-common-timer-based-entropy-source-code.patch @@ -1,4 +1,4 @@ -From 0223535aa1cbc2f22bb55179dcf8829939686baf Mon Sep 17 00:00:00 2001 +From 929a6edceacbae42c9802576cbf125ac091c005b Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 15 May 2022 16:21:44 +0200 Subject: [PATCH 10/25] LRNG - add common timer-based entropy source code diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0011-LRNG-add-interrupt-entropy-source.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0011-LRNG-add-interrupt-entropy-source.patch similarity index 99% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0011-LRNG-add-interrupt-entropy-source.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0011-LRNG-add-interrupt-entropy-source.patch index df7aa1596..4dad4766d 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0011-LRNG-add-interrupt-entropy-source.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0011-LRNG-add-interrupt-entropy-source.patch @@ -1,4 +1,4 @@ -From af37d0a2125fe1f7d7a60df6180dfbc237a48666 Mon Sep 17 00:00:00 2001 +From 77f5d2dad6658d73ec36df21e08604110bf0364e Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Tue, 25 Apr 2023 23:03:39 +0200 Subject: [PATCH 11/25] LRNG - add interrupt entropy source diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0012-scheduler-add-entropy-sampling-hook.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0012-scheduler-add-entropy-sampling-hook.patch similarity index 71% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0012-scheduler-add-entropy-sampling-hook.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0012-scheduler-add-entropy-sampling-hook.patch index 066d521b0..b7f20562f 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0012-scheduler-add-entropy-sampling-hook.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0012-scheduler-add-entropy-sampling-hook.patch @@ -1,6 +1,6 @@ -From b583d31eb462ebe06e2364dd5c1d3fc108e0c8de Mon Sep 17 00:00:00 2001 +From fd922b0c5d2007b72cc80917a7b3a920e6011886 Mon Sep 17 00:00:00 2001 From: Stephan Mueller -Date: Sun, 15 May 2022 16:39:02 +0200 +Date: Sat, 28 Sep 2024 21:24:59 +0200 Subject: [PATCH 12/25] scheduler - add entropy sampling hook The scheduler can be used as a source of entropy. This requires the @@ -16,15 +16,15 @@ Signed-off-by: Stephan Mueller --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -6,6 +6,7 @@ - * - * Copyright (C) 1991-2002 Linus Torvalds +@@ -8,6 +8,7 @@ + * Copyright (C) 1998-2024 Ingo Molnar, Red Hat */ + #define INSTANTIATE_EXPORTED_MIGRATE_DISABLE +#include + #include #include #include - #include -@@ -3720,6 +3721,8 @@ ttwu_stat(struct task_struct *p, int cpu +@@ -3646,6 +3647,8 @@ ttwu_stat(struct task_struct *p, int cpu { struct rq *rq; diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0013-LRNG-add-scheduler-based-entropy-source.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0013-LRNG-add-scheduler-based-entropy-source.patch similarity index 99% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0013-LRNG-add-scheduler-based-entropy-source.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0013-LRNG-add-scheduler-based-entropy-source.patch index 7dd42f3f0..320adcbb1 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0013-LRNG-add-scheduler-based-entropy-source.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0013-LRNG-add-scheduler-based-entropy-source.patch @@ -1,4 +1,4 @@ -From da3a883ae987c776c137b7f9e43e243b560dd1e8 Mon Sep 17 00:00:00 2001 +From d6ec66e1acecf57db3c2a47012e2141ab20a8b5e Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Wed, 22 Feb 2023 07:05:59 +0100 Subject: [PATCH 13/25] LRNG - add scheduler-based entropy source diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0014-LRNG-add-SP800-90B-compliant-health-tests.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0014-LRNG-add-SP800-90B-compliant-health-tests.patch similarity index 99% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0014-LRNG-add-SP800-90B-compliant-health-tests.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0014-LRNG-add-SP800-90B-compliant-health-tests.patch index d71387ed7..8348ba01c 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0014-LRNG-add-SP800-90B-compliant-health-tests.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0014-LRNG-add-SP800-90B-compliant-health-tests.patch @@ -1,4 +1,4 @@ -From 928092951a36dddf3b48438712735ff3052bb405 Mon Sep 17 00:00:00 2001 +From d30ca0f68d72eb14c19aa5d92e67f0eb63b3086d Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Tue, 25 Apr 2023 23:13:30 +0200 Subject: [PATCH 14/25] LRNG - add SP800-90B compliant health tests diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0015-LRNG-add-random.c-entropy-source-support.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0015-LRNG-add-random.c-entropy-source-support.patch similarity index 99% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0015-LRNG-add-random.c-entropy-source-support.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0015-LRNG-add-random.c-entropy-source-support.patch index 2bd89fab0..d89d0c8f8 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0015-LRNG-add-random.c-entropy-source-support.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0015-LRNG-add-random.c-entropy-source-support.patch @@ -1,4 +1,4 @@ -From 660ed995cea5080ea33d0721592100ffd31bf2e4 Mon Sep 17 00:00:00 2001 +From e7d55782ec935e5c652b8673397f5bee99ce2987 Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Mon, 20 Feb 2023 22:07:27 +0100 Subject: [PATCH 15/25] LRNG - add random.c entropy source support diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0016-LRNG-CPU-entropy-source.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0016-LRNG-CPU-entropy-source.patch similarity index 99% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0016-LRNG-CPU-entropy-source.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0016-LRNG-CPU-entropy-source.patch index f666edeb2..6a45f1d71 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0016-LRNG-CPU-entropy-source.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0016-LRNG-CPU-entropy-source.patch @@ -1,4 +1,4 @@ -From b0559761b34dcd706c96ea42d546c53a99b3d028 Mon Sep 17 00:00:00 2001 +From ae89611be5b9703452ee9eca703d0b28728e28ea Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Mon, 20 Feb 2023 22:08:23 +0100 Subject: [PATCH 16/25] LRNG - CPU entropy source diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0017-LRNG-add-Jitter-RNG-fast-noise-source.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0017-LRNG-add-Jitter-RNG-fast-noise-source.patch similarity index 98% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0017-LRNG-add-Jitter-RNG-fast-noise-source.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0017-LRNG-add-Jitter-RNG-fast-noise-source.patch index e5f88a20b..4119b6203 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0017-LRNG-add-Jitter-RNG-fast-noise-source.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0017-LRNG-add-Jitter-RNG-fast-noise-source.patch @@ -1,4 +1,4 @@ -From 6f2210ea4a3b09563a0587b21ccca4d847c6bc95 Mon Sep 17 00:00:00 2001 +From f19c6b968e55182b6021c50c6279dbf853342fe6 Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 27 Aug 2023 17:11:37 +0200 Subject: [PATCH 17/25] LRNG - add Jitter RNG fast noise source @@ -16,8 +16,8 @@ Signed-off-by: Stephan Mueller --- drivers/char/lrng/Kconfig | 172 +++++++-------- drivers/char/lrng/Makefile | 1 + - drivers/char/lrng/lrng_es_jent.c | 356 +++++++++++++++++++++++++++++++ - 3 files changed, 443 insertions(+), 86 deletions(-) + drivers/char/lrng/lrng_es_jent.c | 358 +++++++++++++++++++++++++++++++ + 3 files changed, 445 insertions(+), 86 deletions(-) create mode 100644 drivers/char/lrng/lrng_es_jent.c --- a/drivers/char/lrng/Kconfig @@ -212,7 +212,7 @@ Signed-off-by: Stephan Mueller obj-$(CONFIG_LRNG_HEALTH_TESTS) += lrng_health.o --- /dev/null +++ b/drivers/char/lrng/lrng_es_jent.c -@@ -0,0 +1,356 @@ +@@ -0,0 +1,358 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * LRNG Fast Entropy Source: Jitter RNG @@ -366,6 +366,8 @@ Signed-off-by: Stephan Mueller + + pr_debug("Jitter RNG ES monitor: filled slot %u with %u bits of entropy\n", + i, requested_bits); ++ ++ schedule(); + } + + pr_debug("Jitter RNG block filling completed\n"); diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0018-LRNG-add-option-to-enable-runtime-entropy-rate-confi.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0018-LRNG-add-option-to-enable-runtime-entropy-rate-confi.patch similarity index 97% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0018-LRNG-add-option-to-enable-runtime-entropy-rate-confi.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0018-LRNG-add-option-to-enable-runtime-entropy-rate-confi.patch index 21c37ef93..35bd4bbc8 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0018-LRNG-add-option-to-enable-runtime-entropy-rate-confi.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0018-LRNG-add-option-to-enable-runtime-entropy-rate-confi.patch @@ -1,4 +1,4 @@ -From f9f338bb3283bc54cd9084ccdabb7ad3f50a0eb8 Mon Sep 17 00:00:00 2001 +From f9922de535ef07adbbe3044cc648475ffdfc7040 Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 15 May 2022 17:56:56 +0200 Subject: [PATCH 18/25] LRNG - add option to enable runtime entropy rate diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0019-LRNG-add-interface-for-gathering-of-raw-entropy.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0019-LRNG-add-interface-for-gathering-of-raw-entropy.patch similarity index 99% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0019-LRNG-add-interface-for-gathering-of-raw-entropy.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0019-LRNG-add-interface-for-gathering-of-raw-entropy.patch index d7c2fad08..13847d2ab 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0019-LRNG-add-interface-for-gathering-of-raw-entropy.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0019-LRNG-add-interface-for-gathering-of-raw-entropy.patch @@ -1,4 +1,4 @@ -From 787d2d2ebdc98784ac7b63192d0e2508d28a1023 Mon Sep 17 00:00:00 2001 +From 599c213c25a6d56bf4ac8685b7ff4cf1f4bf5f20 Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 18 Dec 2022 21:22:36 +0100 Subject: [PATCH 19/25] LRNG - add interface for gathering of raw entropy diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0020-LRNG-add-power-on-and-runtime-self-tests.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0020-LRNG-add-power-on-and-runtime-self-tests.patch similarity index 99% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0020-LRNG-add-power-on-and-runtime-self-tests.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0020-LRNG-add-power-on-and-runtime-self-tests.patch index 2922c975b..87141d348 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0020-LRNG-add-power-on-and-runtime-self-tests.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0020-LRNG-add-power-on-and-runtime-self-tests.patch @@ -1,4 +1,4 @@ -From c64dbfe3aeaaebd8dd16e21e5a2c5755e164b003 Mon Sep 17 00:00:00 2001 +From eddacc98bed6421e3f83639c2fb3e66d2451cd0d Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 15 May 2022 18:13:56 +0200 Subject: [PATCH 20/25] LRNG - add power-on and runtime self-tests diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0021-LRNG-sysctls-and-proc-interface.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0021-LRNG-sysctls-and-proc-interface.patch similarity index 93% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0021-LRNG-sysctls-and-proc-interface.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0021-LRNG-sysctls-and-proc-interface.patch index 6959c81f8..29cd3424f 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0021-LRNG-sysctls-and-proc-interface.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0021-LRNG-sysctls-and-proc-interface.patch @@ -1,4 +1,4 @@ -From 4b870ec78ee021d4134ffdbb007e0a9299d76126 Mon Sep 17 00:00:00 2001 +From 80e7849ff47412ce3efa9cfb3ae3ff9cc02ec0d0 Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 31 Jul 2022 22:34:51 +0200 Subject: [PATCH 21/25] LRNG - sysctls and /proc interface @@ -58,7 +58,7 @@ Signed-off-by: Stephan Mueller + * returned as an ASCII string in the standard UUID format; if via the + * sysctl system call, as 16 bytes of binary data. + */ -+static int lrng_sysctl_do_uuid(struct ctl_table *table, int write, ++static int lrng_sysctl_do_uuid(const struct ctl_table *table, int write, + void *buffer, size_t *lenp, loff_t *ppos) +{ + struct ctl_table fake_table; @@ -85,8 +85,8 @@ Signed-off-by: Stephan Mueller + return proc_dostring(&fake_table, write, buffer, lenp, ppos); +} + -+static int lrng_sysctl_do_entropy(struct ctl_table *table, int write, -+ void *buffer, size_t *lenp, loff_t *ppos) ++static int lrng_sysctl_do_entropy(const struct ctl_table *table, int write, ++ void *buffer, size_t *lenp, loff_t *ppos) +{ + struct ctl_table fake_table; + int entropy_count = lrng_avail_entropy_aux(); @@ -97,7 +97,7 @@ Signed-off-by: Stephan Mueller + return proc_dointvec(&fake_table, write, buffer, lenp, ppos); +} + -+static int lrng_sysctl_do_poolsize(struct ctl_table *table, int write, ++static int lrng_sysctl_do_poolsize(const struct ctl_table *table, int write, + void *buffer, size_t *lenp, loff_t *ppos) +{ + struct ctl_table fake_table; diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0022-LRMG-add-drop-in-replacement-random-4-API.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0022-LRMG-add-drop-in-replacement-random-4-API.patch similarity index 99% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0022-LRMG-add-drop-in-replacement-random-4-API.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0022-LRMG-add-drop-in-replacement-random-4-API.patch index a61070740..a8cc7629a 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0022-LRMG-add-drop-in-replacement-random-4-API.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0022-LRMG-add-drop-in-replacement-random-4-API.patch @@ -1,4 +1,4 @@ -From d527a9b879562f0d7e83fbda53269c39cd9801de Mon Sep 17 00:00:00 2001 +From dfffa8a94b6d800ec4370982007fc85e4ab82c7a Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Mon, 20 Feb 2023 22:12:04 +0100 Subject: [PATCH 22/25] LRMG - add drop-in replacement random(4) API @@ -35,7 +35,7 @@ Signed-off-by: Stephan Mueller +obj-$(CONFIG_RANDOM_DEFAULT_IMPL) += random.o obj-$(CONFIG_TTY_PRINTK) += ttyprintk.o obj-y += misc.o - obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o + obj-$(CONFIG_TEST_MISC_MINOR) += misc_minor_kunit.o --- a/drivers/char/lrng/Makefile +++ b/drivers/char/lrng/Makefile @@ -29,3 +29,8 @@ obj-$(CONFIG_LRNG_JENT) += lrng_es_jen @@ -376,7 +376,7 @@ Signed-off-by: Stephan Mueller + * request sizes, such as 16 or 32 bytes, avoid a kmalloc overhead for + * those by using the stack variable of tmpbuf. + */ -+ if (!CONFIG_BASE_SMALL && (nbytes > sizeof(tmpbuf))) { ++ if (!IS_ENABLED(CONFIG_BASE_SMALL) && (nbytes > sizeof(tmpbuf))) { + tmplen = min_t(u32, nbytes, LRNG_DRNG_MAX_REQSIZE); + tmp_large = kmalloc(tmplen + LRNG_KCAPI_ALIGN, GFP_KERNEL); + if (!tmp_large) diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0023-LRNG-add-kernel-crypto-API-interface.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0023-LRNG-add-kernel-crypto-API-interface.patch similarity index 98% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0023-LRNG-add-kernel-crypto-API-interface.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0023-LRNG-add-kernel-crypto-API-interface.patch index b57607e0c..9a924a9cf 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0023-LRNG-add-kernel-crypto-API-interface.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0023-LRNG-add-kernel-crypto-API-interface.patch @@ -1,4 +1,4 @@ -From e326fcaf1ca28e9c777efcb04f61595eda3a5f96 Mon Sep 17 00:00:00 2001 +From caeedfaeac4743c46b3c85c8139ed5d79d1e084d Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 9 Oct 2022 10:22:39 +0200 Subject: [PATCH 23/25] LRNG - add kernel crypto API interface diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0024-LRNG-add-dev-lrng-device-file-support.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0024-LRNG-add-dev-lrng-device-file-support.patch similarity index 97% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0024-LRNG-add-dev-lrng-device-file-support.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0024-LRNG-add-dev-lrng-device-file-support.patch index 7e5a14f78..f4b98fb90 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0024-LRNG-add-dev-lrng-device-file-support.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0024-LRNG-add-dev-lrng-device-file-support.patch @@ -1,4 +1,4 @@ -From f56927ba73ece44bf5eafb73e7325af1b555e149 Mon Sep 17 00:00:00 2001 +From 36c40148b0eb1217a875b5c0694299f6d2e83492 Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 15 May 2022 18:39:30 +0200 Subject: [PATCH 24/25] LRNG - add /dev/lrng device file support diff --git a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0025-LRNG-add-hwrand-framework-interface.patch b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0025-LRNG-add-hwrand-framework-interface.patch similarity index 98% rename from openwrt/patch/kernel-6.6/lrng/011-LRNG-0025-LRNG-add-hwrand-framework-interface.patch rename to openwrt/patch/kernel-6.18/lrng/011-LRNG-0025-LRNG-add-hwrand-framework-interface.patch index b0f89eafe..f29bedfe3 100644 --- a/openwrt/patch/kernel-6.6/lrng/011-LRNG-0025-LRNG-add-hwrand-framework-interface.patch +++ b/openwrt/patch/kernel-6.18/lrng/011-LRNG-0025-LRNG-add-hwrand-framework-interface.patch @@ -1,4 +1,4 @@ -From d64121ae8e90283c8bdd3525a5e7613a635c8b98 Mon Sep 17 00:00:00 2001 +From de00e91ce125b8be4ee77a3f5a64cada10062c1a Mon Sep 17 00:00:00 2001 From: Stephan Mueller Date: Sun, 15 May 2022 18:43:30 +0200 Subject: [PATCH 25/25] LRNG - add hwrand framework interface diff --git a/openwrt/patch/kernel-6.6/net/601-netfilter-export-udp_get_timeouts-function.patch b/openwrt/patch/kernel-6.18/net/601-netfilter-export-udp_get_timeouts-function.patch similarity index 96% rename from openwrt/patch/kernel-6.6/net/601-netfilter-export-udp_get_timeouts-function.patch rename to openwrt/patch/kernel-6.18/net/601-netfilter-export-udp_get_timeouts-function.patch index d741cb7c3..9b13a744c 100644 --- a/openwrt/patch/kernel-6.6/net/601-netfilter-export-udp_get_timeouts-function.patch +++ b/openwrt/patch/kernel-6.18/net/601-netfilter-export-udp_get_timeouts-function.patch @@ -14,7 +14,7 @@ Change-Id: Ibca4f402735764e7e6fb3ce2678e670753c6ef9c --- a/include/net/netfilter/nf_conntrack_timeout.h +++ b/include/net/netfilter/nf_conntrack_timeout.h -@@ -107,5 +107,6 @@ struct nf_ct_timeout_hooks { +@@ -108,5 +108,6 @@ struct nf_ct_timeout_hooks { extern const struct nf_ct_timeout_hooks __rcu *nf_ct_timeout_hook; #endif diff --git a/openwrt/patch/kernel-6.6/net/952-net-conntrack-events-support-multiple-registrant.patch b/openwrt/patch/kernel-6.18/net/952-net-conntrack-events-support-multiple-registrant.patch similarity index 92% rename from openwrt/patch/kernel-6.6/net/952-net-conntrack-events-support-multiple-registrant.patch rename to openwrt/patch/kernel-6.18/net/952-net-conntrack-events-support-multiple-registrant.patch index 848102bd1..5acc321a1 100644 --- a/openwrt/patch/kernel-6.6/net/952-net-conntrack-events-support-multiple-registrant.patch +++ b/openwrt/patch/kernel-6.18/net/952-net-conntrack-events-support-multiple-registrant.patch @@ -22,7 +22,7 @@ Signed-off-by: Zhi Chen --- a/include/net/netfilter/nf_conntrack_ecache.h +++ b/include/net/netfilter/nf_conntrack_ecache.h -@@ -65,9 +65,14 @@ struct nf_ct_event_notifier { +@@ -69,9 +69,14 @@ struct nf_ct_event_notifier { int (*exp_event)(unsigned int events, const struct nf_exp_event *item); }; @@ -38,7 +38,7 @@ Signed-off-by: Zhi Chen void nf_ct_deliver_cached_events(struct nf_conn *ct); int nf_conntrack_eventmask_report(unsigned int eventmask, struct nf_conn *ct, -@@ -98,11 +103,13 @@ static inline void +@@ -102,11 +107,13 @@ static inline void nf_conntrack_event_cache(enum ip_conntrack_events event, struct nf_conn *ct) { #ifdef CONFIG_NF_CONNTRACK_EVENTS @@ -53,7 +53,7 @@ Signed-off-by: Zhi Chen e = nf_ct_ecache_find(ct); if (e == NULL) -@@ -117,20 +124,34 @@ nf_conntrack_event_report(enum ip_conntr +@@ -129,20 +136,34 @@ nf_conntrack_event_report(enum ip_conntr u32 portid, int report) { #ifdef CONFIG_NF_CONNTRACK_EVENTS @@ -94,7 +94,7 @@ Signed-off-by: Zhi Chen #ifdef CONFIG_NF_CONNTRACK_EVENTS --- a/include/net/netns/conntrack.h +++ b/include/net/netns/conntrack.h -@@ -104,6 +104,9 @@ struct netns_ct { +@@ -91,6 +91,9 @@ struct netns_ct { u8 sysctl_checksum; struct ip_conntrack_stat __percpu *stat; @@ -123,7 +123,7 @@ Signed-off-by: Zhi Chen depends on NETFILTER_ADVANCED --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c -@@ -2801,6 +2801,10 @@ int nf_conntrack_init_net(struct net *ne +@@ -2760,6 +2760,10 @@ int nf_conntrack_init_net(struct net *ne nf_conntrack_ecache_pernet_init(net); nf_conntrack_proto_pernet_init(net); @@ -146,8 +146,8 @@ Signed-off-by: Zhi Chen #include #include #include -@@ -162,6 +165,35 @@ static int __nf_conntrack_eventmask_repo - return ret; +@@ -170,6 +173,35 @@ static void nf_ct_ecache_tstamp_refresh( + #endif } +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS @@ -182,7 +182,7 @@ Signed-off-by: Zhi Chen int nf_conntrack_eventmask_report(unsigned int events, struct nf_conn *ct, u32 portid, int report) { -@@ -197,10 +229,52 @@ int nf_conntrack_eventmask_report(unsign +@@ -207,10 +239,52 @@ int nf_conntrack_eventmask_report(unsign return ret; } @@ -235,7 +235,7 @@ Signed-off-by: Zhi Chen void nf_ct_deliver_cached_events(struct nf_conn *ct) { struct nf_conntrack_ecache *e; -@@ -226,6 +300,7 @@ void nf_ct_deliver_cached_events(struct +@@ -236,6 +310,7 @@ void nf_ct_deliver_cached_events(struct */ __nf_conntrack_eventmask_report(e, events, e->missed, &item); } @@ -243,7 +243,7 @@ Signed-off-by: Zhi Chen EXPORT_SYMBOL_GPL(nf_ct_deliver_cached_events); void nf_ct_expect_event_report(enum ip_conntrack_expect_events event, -@@ -258,20 +333,43 @@ out_unlock: +@@ -270,20 +345,43 @@ out_unlock: rcu_read_unlock(); } @@ -289,7 +289,7 @@ Signed-off-by: Zhi Chen void nf_conntrack_unregister_notifier(struct net *net) { mutex_lock(&nf_ct_ecache_mutex); -@@ -279,6 +377,7 @@ void nf_conntrack_unregister_notifier(st +@@ -291,6 +389,7 @@ void nf_conntrack_unregister_notifier(st mutex_unlock(&nf_ct_ecache_mutex); /* synchronize_rcu() is called after netns pre_exit */ } @@ -299,7 +299,7 @@ Signed-off-by: Zhi Chen void nf_conntrack_ecache_work(struct net *net, enum nf_ct_ecache_state state) --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c -@@ -723,12 +723,19 @@ static size_t ctnetlink_nlmsg_size(const +@@ -741,12 +741,19 @@ static size_t ctnetlink_nlmsg_size(const } static int @@ -319,7 +319,7 @@ Signed-off-by: Zhi Chen struct nf_conn *ct = item->ct; struct sk_buff *skb; unsigned int type; -@@ -3751,11 +3758,17 @@ static int ctnetlink_stat_exp_cpu(struct +@@ -3753,11 +3760,17 @@ static int ctnetlink_stat_exp_cpu(struct } #ifdef CONFIG_NF_CONNTRACK_EVENTS @@ -337,7 +337,7 @@ Signed-off-by: Zhi Chen static const struct nfnl_callback ctnl_cb[IPCTNL_MSG_MAX] = { [IPCTNL_MSG_CT_NEW] = { -@@ -3854,8 +3867,12 @@ static int __net_init ctnetlink_net_init +@@ -3856,8 +3869,12 @@ static int __net_init ctnetlink_net_init static void ctnetlink_net_pre_exit(struct net *net) { #ifdef CONFIG_NF_CONNTRACK_EVENTS diff --git a/openwrt/patch/kernel-6.6/net/953-net-patch-linux-kernel-to-support-shortcut-fe.patch b/openwrt/patch/kernel-6.18/net/953-net-patch-linux-kernel-to-support-shortcut-fe.patch similarity index 82% rename from openwrt/patch/kernel-6.6/net/953-net-patch-linux-kernel-to-support-shortcut-fe.patch rename to openwrt/patch/kernel-6.18/net/953-net-patch-linux-kernel-to-support-shortcut-fe.patch index c6d7c36ce..5db4c5eb1 100644 --- a/openwrt/patch/kernel-6.6/net/953-net-patch-linux-kernel-to-support-shortcut-fe.patch +++ b/openwrt/patch/kernel-6.18/net/953-net-patch-linux-kernel-to-support-shortcut-fe.patch @@ -8,19 +8,18 @@ Signed-off-by: Xiaoping Fan --- include/linux/if_bridge.h | 3 +++ include/linux/skbuff.h | 4 +++ - include/linux/timer.h | 4 +++ include/net/netfilter/nf_conntrack_ecache.h | 2 ++ net/Kconfig | 3 +++ net/bridge/br_if.c | 20 +++++++++++++++ net/core/dev.c | 27 +++++++++++++++++++++ net/netfilter/nf_conntrack_ecache.c | 24 +++++++++++++++++- - 8 files changed, 86 insertions(+), 1 deletion(-) + 7 files changed, 86 insertions(+), 1 deletion(-) --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h -@@ -72,6 +72,9 @@ void brioctl_set(int (*hook)(struct net - int br_ioctl_call(struct net *net, struct net_bridge *br, unsigned int cmd, - struct ifreq *ifr, void __user *uarg); +@@ -70,6 +70,9 @@ void brioctl_set(int (*hook)(struct net + void __user *uarg)); + int br_ioctl_call(struct net *net, unsigned int cmd, void __user *uarg); +extern void br_dev_update_stats(struct net_device *dev, + struct rtnl_link_stats64 *nlstats); @@ -30,33 +29,19 @@ Signed-off-by: Xiaoping Fan struct list_head *br_ip_list); --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -985,6 +985,10 @@ struct sk_buff { +@@ -1030,6 +1030,9 @@ struct sk_buff { __u8 csum_not_inet:1; #endif - + __u8 unreadable:1; +#ifdef CONFIG_SHORTCUT_FE + __u8 fast_forwarded:1; +#endif -+ #if defined(CONFIG_NET_SCHED) || defined(CONFIG_NET_XGRESS) __u16 tc_index; /* traffic control index */ #endif ---- a/include/linux/timer.h -+++ b/include/linux/timer.h -@@ -18,6 +18,10 @@ struct timer_list { - void (*function)(struct timer_list *); - u32 flags; - -+#ifdef CONFIG_SHORTCUT_FE -+ unsigned long cust_data; -+#endif -+ - #ifdef CONFIG_LOCKDEP - struct lockdep_map lockdep_map; - #endif --- a/include/net/netfilter/nf_conntrack_ecache.h +++ b/include/net/netfilter/nf_conntrack_ecache.h -@@ -68,6 +68,8 @@ struct nf_ct_event_notifier { +@@ -72,6 +72,8 @@ struct nf_ct_event_notifier { #ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS extern int nf_conntrack_register_notifier(struct net *net, struct notifier_block *nb); extern int nf_conntrack_unregister_notifier(struct net *net, struct notifier_block *nb); @@ -67,7 +52,7 @@ Signed-off-by: Xiaoping Fan const struct nf_ct_event_notifier *nb); --- a/net/Kconfig +++ b/net/Kconfig -@@ -504,6 +504,9 @@ config FAILOVER +@@ -529,6 +529,9 @@ config FAILOVER migration of VMs with direct attached VFs by failing over to the paravirtual datapath when the VF is unplugged. @@ -76,10 +61,10 @@ Signed-off-by: Xiaoping Fan + config ETHTOOL_NETLINK bool "Netlink interface for ethtool" - default y + select DIMLIB --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c -@@ -764,6 +764,26 @@ void br_port_flags_change(struct net_bri +@@ -766,6 +766,26 @@ void br_port_flags_change(struct net_bri br_recalculate_neigh_suppress_enabled(br); } @@ -108,7 +93,7 @@ Signed-off-by: Xiaoping Fan struct net_bridge_port *p; --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -3594,8 +3594,17 @@ static int xmit_one(struct sk_buff *skb, +@@ -3867,8 +3867,17 @@ static int xmit_one(struct sk_buff *skb, unsigned int len; int rc; @@ -118,7 +103,7 @@ Signed-off-by: Xiaoping Fan + */ + if (!skb->fast_forwarded) { +#endif - if (dev_nit_active(dev)) + if (dev_nit_active_rcu(dev)) dev_queue_xmit_nit(skb, dev); +#ifdef CONFIG_SHORTCUT_FE + } @@ -126,7 +111,7 @@ Signed-off-by: Xiaoping Fan #ifdef CONFIG_ETHERNET_PACKET_MANGLE if (dev->eth_mangle_tx && !(skb = dev->eth_mangle_tx(dev, skb))) -@@ -5355,6 +5364,11 @@ void netdev_rx_handler_unregister(struct +@@ -5852,6 +5861,11 @@ void netdev_rx_handler_unregister(struct } EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister); @@ -138,7 +123,7 @@ Signed-off-by: Xiaoping Fan /* * Limit the use of PFMEMALLOC reserves to those protocols that implement * the special handling of PFMEMALLOC skbs. -@@ -5403,6 +5417,10 @@ static int __netif_receive_skb_core(stru +@@ -5901,6 +5915,10 @@ static int __netif_receive_skb_core(stru int ret = NET_RX_DROP; __be16 type; @@ -146,10 +131,10 @@ Signed-off-by: Xiaoping Fan + int (*fast_recv)(struct sk_buff *skb); +#endif + - net_timestamp_check(!READ_ONCE(netdev_tstamp_prequeue), skb); + net_timestamp_check(!READ_ONCE(net_hotdata.tstamp_prequeue), skb); trace_netif_receive_skb(skb); -@@ -5440,6 +5458,15 @@ another_round: +@@ -5945,6 +5963,16 @@ another_round: goto out; } @@ -162,6 +147,7 @@ Signed-off-by: Xiaoping Fan + } + } +#endif ++ if (skb_skip_tc_classify(skb)) goto skip_classify; @@ -193,7 +179,7 @@ Signed-off-by: Xiaoping Fan rcu_read_unlock(); if (likely(ret >= 0 && missed == 0)) -@@ -339,6 +351,11 @@ int nf_conntrack_register_notifier(struc +@@ -351,6 +363,11 @@ int nf_conntrack_register_notifier(struc { return atomic_notifier_chain_register(&net->ct.nf_conntrack_chain, nb); } @@ -205,7 +191,7 @@ Signed-off-by: Xiaoping Fan #else int nf_conntrack_register_notifier(struct net *net, const struct nf_ct_event_notifier *new) -@@ -369,6 +386,11 @@ int nf_conntrack_unregister_notifier(str +@@ -381,6 +398,11 @@ int nf_conntrack_unregister_notifier(str { return atomic_notifier_chain_unregister(&net->ct.nf_conntrack_chain, nb); } diff --git a/openwrt/patch/kernel-6.6/net/982-add-bcm-fullcone-support.patch b/openwrt/patch/kernel-6.18/net/982-add-bcm-fullcone-support.patch similarity index 100% rename from openwrt/patch/kernel-6.6/net/982-add-bcm-fullcone-support.patch rename to openwrt/patch/kernel-6.18/net/982-add-bcm-fullcone-support.patch diff --git a/openwrt/patch/kernel-6.6/net/983-add-bcm-fullcone-nft_masq-support.patch b/openwrt/patch/kernel-6.18/net/983-add-bcm-fullcone-nft_masq-support.patch similarity index 66% rename from openwrt/patch/kernel-6.6/net/983-add-bcm-fullcone-nft_masq-support.patch rename to openwrt/patch/kernel-6.18/net/983-add-bcm-fullcone-nft_masq-support.patch index 4d2e84cc1..65596dae4 100644 --- a/openwrt/patch/kernel-6.6/net/983-add-bcm-fullcone-nft_masq-support.patch +++ b/openwrt/patch/kernel-6.18/net/983-add-bcm-fullcone-nft_masq-support.patch @@ -1,6 +1,17 @@ +--- a/include/net/netfilter/nf_tables.h ++++ b/include/net/netfilter/nf_tables.h +@@ -256,6 +256,8 @@ static inline enum nft_registers nft_typ + int nft_parse_u32_check(const struct nlattr *attr, int max, u32 *dest); + int nft_dump_register(struct sk_buff *skb, unsigned int attr, unsigned int reg); + ++int nft_parse_register_load_legacy(const struct nlattr *attr, u8 *sreg, u32 len); ++ + int nft_parse_register_load(const struct nft_ctx *ctx, + const struct nlattr *attr, u8 *sreg, u32 len); + int nft_parse_register_store(const struct nft_ctx *ctx, --- a/include/uapi/linux/netfilter/nf_tables.h +++ b/include/uapi/linux/netfilter/nf_tables.h -@@ -1477,12 +1477,16 @@ enum nft_tproxy_attributes { +@@ -1499,12 +1499,16 @@ enum nft_tproxy_attributes { * @NFTA_MASQ_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32) * @NFTA_MASQ_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers) * @NFTA_MASQ_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers) @@ -17,6 +28,33 @@ __NFTA_MASQ_MAX }; #define NFTA_MASQ_MAX (__NFTA_MASQ_MAX - 1) +--- a/net/netfilter/nf_tables_api.c ++++ b/net/netfilter/nf_tables_api.c +@@ -11708,6 +11708,24 @@ static int nft_validate_register_load(en + return 0; + } + ++int nft_parse_register_load_legacy(const struct nlattr *attr, u8 *sreg, u32 len) ++{ ++ u32 reg; ++ int err; ++ ++ err = nft_parse_register(attr, ®); ++ if (err < 0) ++ return err; ++ ++ err = nft_validate_register_load(reg, len); ++ if (err < 0) ++ return err; ++ ++ *sreg = reg; ++ return 0; ++} ++EXPORT_SYMBOL_GPL(nft_parse_register_load_legacy); ++ + int nft_parse_register_load(const struct nft_ctx *ctx, + const struct nlattr *attr, u8 *sreg, u32 len) + { --- a/net/netfilter/nft_masq.c +++ b/net/netfilter/nft_masq.c @@ -17,6 +17,8 @@ struct nft_masq { @@ -37,7 +75,7 @@ }; static int nft_masq_validate(const struct nft_ctx *ctx, -@@ -45,6 +49,7 @@ static int nft_masq_init(const struct nf +@@ -44,6 +48,7 @@ static int nft_masq_init(const struct nf const struct nlattr * const tb[]) { u32 plen = sizeof_field(struct nf_nat_range, min_proto.all); @@ -45,18 +83,18 @@ struct nft_masq *priv = nft_expr_priv(expr); int err; -@@ -68,6 +73,25 @@ static int nft_masq_init(const struct nf +@@ -67,6 +72,25 @@ static int nft_masq_init(const struct nf } } + if (tb[NFTA_MASQ_REG_ADDR_MIN]) { -+ err = nft_parse_register_load(tb[NFTA_MASQ_REG_ADDR_MIN], ++ err = nft_parse_register_load_legacy(tb[NFTA_MASQ_REG_ADDR_MIN], + &priv->sreg_addr_min, alen); + if (err < 0) + return err; + + if (tb[NFTA_MASQ_REG_ADDR_MAX]) { -+ err = nft_parse_register_load(tb[NFTA_MASQ_REG_ADDR_MAX], ++ err = nft_parse_register_load_legacy(tb[NFTA_MASQ_REG_ADDR_MAX], + &priv->sreg_addr_max, + alen); + if (err < 0) @@ -71,7 +109,7 @@ return nf_ct_netns_get(ctx->net, ctx->family); } -@@ -88,6 +112,14 @@ static int nft_masq_dump(struct sk_buff +@@ -87,6 +111,14 @@ static int nft_masq_dump(struct sk_buff goto nla_put_failure; } @@ -86,7 +124,7 @@ return 0; nla_put_failure: -@@ -112,6 +144,12 @@ static void nft_masq_eval(const struct n +@@ -111,6 +143,12 @@ static void nft_masq_eval(const struct n switch (nft_pf(pkt)) { case NFPROTO_IPV4: @@ -99,7 +137,7 @@ regs->verdict.code = nf_nat_masquerade_ipv4(pkt->skb, nft_hook(pkt), &range, -@@ -119,6 +157,12 @@ static void nft_masq_eval(const struct n +@@ -118,6 +156,12 @@ static void nft_masq_eval(const struct n break; #ifdef CONFIG_NF_TABLES_IPV6 case NFPROTO_IPV6: diff --git a/openwrt/patch/kernel-6.6/net/README.md b/openwrt/patch/kernel-6.18/net/README.md similarity index 78% rename from openwrt/patch/kernel-6.6/net/README.md rename to openwrt/patch/kernel-6.18/net/README.md index 105c48c9f..bd59c54dc 100644 --- a/openwrt/patch/kernel-6.6/net/README.md +++ b/openwrt/patch/kernel-6.18/net/README.md @@ -1,9 +1,5 @@ # Patches -## Fullcone - -- [x] Patch 1: [952-net-conntrack-events-support-multiple-registrant.patch](./952-net-conntrack-events-support-multiple-registrant.patch) - ## BCM-Fullcone - [x] Patch 1: [982-add-bcm-fullcone-support.patch](./982-add-bcm-fullcone-support.patch) @@ -12,4 +8,5 @@ ## Shortcut Forwarding Engine - [x] Patch 1: [601-netfilter-export-udp_get_timeouts-function.patch](./601-netfilter-export-udp_get_timeouts-function.patch) -- [x] Patch 2: [953-net-patch-linux-kernel-to-support-shortcut-fe.patch](./953-net-patch-linux-kernel-to-support-shortcut-fe.patch) +- [x] Patch 2: [952-net-conntrack-events-support-multiple-registrant.patch](./952-net-conntrack-events-support-multiple-registrant.patch) +- [x] Patch 3: [953-net-patch-linux-kernel-to-support-shortcut-fe.patch](./953-net-patch-linux-kernel-to-support-shortcut-fe.patch) diff --git a/openwrt/patch/kernel-6.18/openwrt/linux-6.18-target-linux-generic.patch b/openwrt/patch/kernel-6.18/openwrt/linux-6.18-target-linux-generic.patch new file mode 100644 index 000000000..bb58960d6 --- /dev/null +++ b/openwrt/patch/kernel-6.18/openwrt/linux-6.18-target-linux-generic.patch @@ -0,0 +1,218 @@ +diff --git a/target/linux/generic/files/drivers/net/phy/adm6996.c b/target/linux/generic/files/drivers/net/phy/adm6996.c +index d917427..0f70634 100644 +--- a/target/linux/generic/files/drivers/net/phy/adm6996.c ++++ b/target/linux/generic/files/drivers/net/phy/adm6996.c +@@ -1209,7 +1209,7 @@ static void adm6996_gpio_remove(struct platform_device *pdev) + + static struct platform_driver adm6996_gpio_driver = { + .probe = adm6996_gpio_probe, +- .remove_new = adm6996_gpio_remove, ++ .remove = adm6996_gpio_remove, + .driver = { + .name = "adm6996_gpio", + }, +@@ -1219,14 +1219,14 @@ static int __init adm6996_init(void) + { + int err; + +- phy_register_fixup_for_id(PHY_ANY_ID, adm6996_fixup); +- err = phy_driver_register(&adm6996_phy_driver, THIS_MODULE); ++ phy_register_fixup_for_id("MATCH ANY PHY", adm6996_fixup); ++ err = phy_drivers_register(&adm6996_phy_driver, 1, THIS_MODULE); + if (err) + return err; + + err = platform_driver_register(&adm6996_gpio_driver); + if (err) +- phy_driver_unregister(&adm6996_phy_driver); ++ phy_drivers_unregister(&adm6996_phy_driver, 1); + + return err; + } +@@ -1234,7 +1234,7 @@ static int __init adm6996_init(void) + static void __exit adm6996_exit(void) + { + platform_driver_unregister(&adm6996_gpio_driver); +- phy_driver_unregister(&adm6996_phy_driver); ++ phy_drivers_unregister(&adm6996_phy_driver, 1); + } + + module_init(adm6996_init); +diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c b/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c +index fdcebc7..ad3f308 100644 +--- a/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c ++++ b/target/linux/generic/files/drivers/net/phy/b53/b53_mdio.c +@@ -404,29 +404,29 @@ static int __init b53_phy_driver_register(void) + { + int ret; + +- ret = phy_driver_register(&b53_phy_driver_id1, THIS_MODULE); ++ ret = phy_drivers_register(&b53_phy_driver_id1, 1, THIS_MODULE); + if (ret) + return ret; + +- ret = phy_driver_register(&b53_phy_driver_id2, THIS_MODULE); ++ ret = phy_drivers_register(&b53_phy_driver_id2, 1, THIS_MODULE); + if (ret) + goto err1; + +- ret = phy_driver_register(&b53_phy_driver_id3, THIS_MODULE); ++ ret = phy_drivers_register(&b53_phy_driver_id3, 1, THIS_MODULE); + if (!ret) + return 0; + +- phy_driver_unregister(&b53_phy_driver_id2); ++ phy_drivers_unregister(&b53_phy_driver_id2, 1); + err1: +- phy_driver_unregister(&b53_phy_driver_id1); ++ phy_drivers_unregister(&b53_phy_driver_id1, 1); + return ret; + } + + static void __exit b53_phy_driver_unregister(void) + { +- phy_driver_unregister(&b53_phy_driver_id3); +- phy_driver_unregister(&b53_phy_driver_id2); +- phy_driver_unregister(&b53_phy_driver_id1); ++ phy_drivers_unregister(&b53_phy_driver_id3, 1); ++ phy_drivers_unregister(&b53_phy_driver_id2, 1); ++ phy_drivers_unregister(&b53_phy_driver_id1, 1); + } + + module_init(b53_phy_driver_register); +diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_mmap.c b/target/linux/generic/files/drivers/net/phy/b53/b53_mmap.c +index 62dfe1c..04625c5 100644 +--- a/target/linux/generic/files/drivers/net/phy/b53/b53_mmap.c ++++ b/target/linux/generic/files/drivers/net/phy/b53/b53_mmap.c +@@ -227,7 +227,7 @@ static void b53_mmap_remove(struct platform_device *pdev) + + static struct platform_driver b53_mmap_driver = { + .probe = b53_mmap_probe, +- .remove_new = b53_mmap_remove, ++ .remove = b53_mmap_remove, + .driver = { + .name = "b53-switch", + }, +diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_phy_fixup.c b/target/linux/generic/files/drivers/net/phy/b53/b53_phy_fixup.c +index 5a41507..3059d39 100644 +--- a/target/linux/generic/files/drivers/net/phy/b53/b53_phy_fixup.c ++++ b/target/linux/generic/files/drivers/net/phy/b53/b53_phy_fixup.c +@@ -49,7 +49,7 @@ static int b53_phy_fixup(struct phy_device *dev) + + static int __init b53_phy_fixup_register(void) + { +- return phy_register_fixup_for_id(PHY_ANY_ID, b53_phy_fixup); ++ return phy_register_fixup_for_id("MATCH ANY PHY", b53_phy_fixup); + } + + subsys_initcall(b53_phy_fixup_register); +diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_srab.c b/target/linux/generic/files/drivers/net/phy/b53/b53_srab.c +index f8cb993..869f920 100644 +--- a/target/linux/generic/files/drivers/net/phy/b53/b53_srab.c ++++ b/target/linux/generic/files/drivers/net/phy/b53/b53_srab.c +@@ -364,7 +364,7 @@ static void b53_srab_remove(struct platform_device *pdev) + + static struct platform_driver b53_srab_driver = { + .probe = b53_srab_probe, +- .remove_new = b53_srab_remove, ++ .remove = b53_srab_remove, + .driver = { + .name = "b53-srab-switch", + }, +diff --git a/target/linux/generic/files/drivers/net/phy/psb6970.c b/target/linux/generic/files/drivers/net/phy/psb6970.c +index e8b1b06..97af784 100644 +--- a/target/linux/generic/files/drivers/net/phy/psb6970.c ++++ b/target/linux/generic/files/drivers/net/phy/psb6970.c +@@ -425,15 +425,15 @@ static struct phy_driver psb6970_driver = { + + static int __init psb6970_init(void) + { +- phy_register_fixup_for_id(PHY_ANY_ID, psb6970_fixup); +- return phy_driver_register(&psb6970_driver, THIS_MODULE); ++ phy_register_fixup_for_id("MATCH ANY PHY", psb6970_fixup); ++ return phy_drivers_register(&psb6970_driver, 1, THIS_MODULE); + } + + module_init(psb6970_init); + + static void __exit psb6970_exit(void) + { +- phy_driver_unregister(&psb6970_driver); ++ phy_drivers_unregister(&psb6970_driver, 1); + } + + module_exit(psb6970_exit); +diff --git a/target/linux/generic/files/drivers/net/phy/rtl8306.c b/target/linux/generic/files/drivers/net/phy/rtl8306.c +index 9bd1735..a4b2664 100644 +--- a/target/linux/generic/files/drivers/net/phy/rtl8306.c ++++ b/target/linux/generic/files/drivers/net/phy/rtl8306.c +@@ -1047,14 +1047,14 @@ static struct phy_driver rtl8306_driver = { + static int __init + rtl_init(void) + { +- phy_register_fixup_for_id(PHY_ANY_ID, rtl8306_fixup); +- return phy_driver_register(&rtl8306_driver, THIS_MODULE); ++ phy_register_fixup_for_id("MATCH ANY PHY", rtl8306_fixup); ++ return phy_drivers_register(&rtl8306_driver, 1, THIS_MODULE); + } + + static void __exit + rtl_exit(void) + { +- phy_driver_unregister(&rtl8306_driver); ++ phy_drivers_unregister(&rtl8306_driver, 1); + } + + module_init(rtl_init); +diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c +index 0f4bbb1..3d4daec 100644 +--- a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c ++++ b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c +@@ -1498,7 +1498,7 @@ static struct platform_driver rtl8366rb_driver = { + .of_match_table = rtl8366rb_match, + }, + .probe = rtl8366rb_probe, +- .remove_new = rtl8366rb_remove, ++ .remove = rtl8366rb_remove, + }; + + static int __init rtl8366rb_module_init(void) +diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366s.c b/target/linux/generic/files/drivers/net/phy/rtl8366s.c +index 0b37a4e..298faed 100644 +--- a/target/linux/generic/files/drivers/net/phy/rtl8366s.c ++++ b/target/linux/generic/files/drivers/net/phy/rtl8366s.c +@@ -1275,7 +1275,7 @@ static struct platform_driver rtl8366s_driver = { + .of_match_table = rtl8366s_match, + }, + .probe = rtl8366s_probe, +- .remove_new = rtl8366s_remove, ++ .remove = rtl8366s_remove, + }; + + static int __init rtl8366s_module_init(void) +diff --git a/target/linux/generic/files/drivers/net/phy/rtl8367.c b/target/linux/generic/files/drivers/net/phy/rtl8367.c +index 2c11190..96f866a 100644 +--- a/target/linux/generic/files/drivers/net/phy/rtl8367.c ++++ b/target/linux/generic/files/drivers/net/phy/rtl8367.c +@@ -1812,7 +1812,7 @@ static struct platform_driver rtl8367_driver = { + .of_match_table = rtl8367_match, + }, + .probe = rtl8367_probe, +- .remove_new = rtl8367_remove, ++ .remove = rtl8367_remove, + .shutdown = rtl8367_shutdown, + }; + +diff --git a/target/linux/generic/files/drivers/net/phy/rtl8367b.c b/target/linux/generic/files/drivers/net/phy/rtl8367b.c +index ae30936..c1a2868 100644 +--- a/target/linux/generic/files/drivers/net/phy/rtl8367b.c ++++ b/target/linux/generic/files/drivers/net/phy/rtl8367b.c +@@ -1610,7 +1610,7 @@ static struct platform_driver rtl8367b_driver = { + .of_match_table = rtl8367b_match, + }, + .probe = rtl8367b_probe, +- .remove_new = rtl8367b_remove, ++ .remove = rtl8367b_remove, + .shutdown = rtl8367b_shutdown, + }; + diff --git a/openwrt/patch/kernel-6.6/backport/901-v6.8-cache-enforce-cache-groups.patch b/openwrt/patch/kernel-6.6/backport/901-v6.8-cache-enforce-cache-groups.patch deleted file mode 100644 index 4b16244de..000000000 --- a/openwrt/patch/kernel-6.6/backport/901-v6.8-cache-enforce-cache-groups.patch +++ /dev/null @@ -1,76 +0,0 @@ -From bc4f29b3a63183e33b7506f742070aaa2e8ccc4e Mon Sep 17 00:00:00 2001 -From: Coco Li -Date: Wed, 29 Nov 2023 07:27:53 +0000 -Subject: [PATCH 1/4] cache: enforce cache groups - -Set up build time warnings to safeguard against future header changes of -organized structs. - -Warning includes: - -1) whether all variables are still in the same cache group -2) whether all the cache groups have the sum of the members size (in the - maximum condition, including all members defined in configs) - -The __cache_group* variables are ignored in kernel-doc check in the -various header files they appear in to enforce the cache groups. - -Suggested-by: Daniel Borkmann -Acked-by: Daniel Borkmann -Signed-off-by: Coco Li -Reviewed-by: Eric Dumazet -Reviewed-by: Shakeel Butt -Signed-off-by: David S. Miller ---- - include/linux/cache.h | 25 +++++++++++++++++++++++++ - scripts/kernel-doc | 5 +++++ - 2 files changed, 30 insertions(+) - ---- a/include/linux/cache.h -+++ b/include/linux/cache.h -@@ -85,6 +85,31 @@ - #define cache_line_size() L1_CACHE_BYTES - #endif - -+#ifndef __cacheline_group_begin -+#define __cacheline_group_begin(GROUP) \ -+ __u8 __cacheline_group_begin__##GROUP[0] -+#endif -+ -+#ifndef __cacheline_group_end -+#define __cacheline_group_end(GROUP) \ -+ __u8 __cacheline_group_end__##GROUP[0] -+#endif -+ -+#ifndef CACHELINE_ASSERT_GROUP_MEMBER -+#define CACHELINE_ASSERT_GROUP_MEMBER(TYPE, GROUP, MEMBER) \ -+ BUILD_BUG_ON(!(offsetof(TYPE, MEMBER) >= \ -+ offsetofend(TYPE, __cacheline_group_begin__##GROUP) && \ -+ offsetofend(TYPE, MEMBER) <= \ -+ offsetof(TYPE, __cacheline_group_end__##GROUP))) -+#endif -+ -+#ifndef CACHELINE_ASSERT_GROUP_SIZE -+#define CACHELINE_ASSERT_GROUP_SIZE(TYPE, GROUP, SIZE) \ -+ BUILD_BUG_ON(offsetof(TYPE, __cacheline_group_end__##GROUP) - \ -+ offsetofend(TYPE, __cacheline_group_begin__##GROUP) > \ -+ SIZE) -+#endif -+ - /* - * Helper to add padding within a struct to ensure data fall into separate - * cachelines. ---- a/scripts/kernel-doc -+++ b/scripts/kernel-doc -@@ -1592,6 +1592,11 @@ sub push_parameter($$$$$) { - $parameterdescs{$param} = "anonymous\n"; - $anon_struct_union = 1; - } -+ elsif ($param =~ "__cacheline_group" ) -+ # handle cache group enforcing variables: they do not need be described in header files -+ { -+ return; # ignore __cacheline_group_begin and __cacheline_group_end -+ } - - # warn if parameter has no description - # (but ignore ones starting with # as these are not parameters diff --git a/openwrt/patch/kernel-6.6/backport/902-v6.8-netns-ipv4-reorganize-netns_ipv4-fast-path-variables.patch b/openwrt/patch/kernel-6.6/backport/902-v6.8-netns-ipv4-reorganize-netns_ipv4-fast-path-variables.patch deleted file mode 100644 index 9643755c0..000000000 --- a/openwrt/patch/kernel-6.6/backport/902-v6.8-netns-ipv4-reorganize-netns_ipv4-fast-path-variables.patch +++ /dev/null @@ -1,192 +0,0 @@ -From b705dec4428b050bdcaad8b5b9d4fddbb5f8e8d4 Mon Sep 17 00:00:00 2001 -From: Coco Li -Date: Wed, 29 Nov 2023 07:27:54 +0000 -Subject: [PATCH 2/4] netns-ipv4: reorganize netns_ipv4 fast path variables - -Reorganize fast path variables on tx-txrx-rx order. -Fastpath cacheline ends after sysctl_tcp_rmem. -There are only read-only variables here. (write is on the control path -and not considered in this case) - -Below data generated with pahole on x86 architecture. -Fast path variables span cache lines before change: 4 -Fast path variables span cache lines after change: 2 - -Suggested-by: Eric Dumazet -Reviewed-by: Wei Wang -Reviewed-by: David Ahern -Signed-off-by: Coco Li -Reviewed-by: Eric Dumazet -Reviewed-by: Shakeel Butt -Signed-off-by: David S. Miller ---- - include/net/netns/ipv4.h | 47 +++++++++++++++++++++++++++------------- - net/core/net_namespace.c | 45 ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 77 insertions(+), 15 deletions(-) - ---- a/include/net/netns/ipv4.h -+++ b/include/net/netns/ipv4.h -@@ -42,6 +42,38 @@ struct inet_timewait_death_row { - struct tcp_fastopen_context; - - struct netns_ipv4 { -+ /* Cacheline organization can be found documented in -+ * Documentation/networking/net_cachelines/netns_ipv4_sysctl.rst. -+ * Please update the document when adding new fields. -+ */ -+ -+ /* TX readonly hotpath cache lines */ -+ __cacheline_group_begin(netns_ipv4_read_tx); -+ u8 sysctl_tcp_early_retrans; -+ u8 sysctl_tcp_tso_win_divisor; -+ u8 sysctl_tcp_tso_rtt_log; -+ u8 sysctl_tcp_autocorking; -+ int sysctl_tcp_min_snd_mss; -+ unsigned int sysctl_tcp_notsent_lowat; -+ int sysctl_tcp_limit_output_bytes; -+ int sysctl_tcp_min_rtt_wlen; -+ int sysctl_tcp_wmem[3]; -+ u8 sysctl_ip_fwd_use_pmtu; -+ __cacheline_group_end(netns_ipv4_read_tx); -+ -+ /* TXRX readonly hotpath cache lines */ -+ __cacheline_group_begin(netns_ipv4_read_txrx); -+ u8 sysctl_tcp_moderate_rcvbuf; -+ __cacheline_group_end(netns_ipv4_read_txrx); -+ -+ /* RX readonly hotpath cache line */ -+ __cacheline_group_begin(netns_ipv4_read_rx); -+ u8 sysctl_ip_early_demux; -+ u8 sysctl_tcp_early_demux; -+ int sysctl_tcp_reordering; -+ int sysctl_tcp_rmem[3]; -+ __cacheline_group_end(netns_ipv4_read_rx); -+ - struct inet_timewait_death_row tcp_death_row; - struct udp_table *udp_table; - -@@ -96,17 +128,14 @@ struct netns_ipv4 { - - u8 sysctl_ip_default_ttl; - u8 sysctl_ip_no_pmtu_disc; -- u8 sysctl_ip_fwd_use_pmtu; - u8 sysctl_ip_fwd_update_priority; - u8 sysctl_ip_nonlocal_bind; - u8 sysctl_ip_autobind_reuse; - /* Shall we try to damage output packets if routing dev changes? */ - u8 sysctl_ip_dynaddr; -- u8 sysctl_ip_early_demux; - #ifdef CONFIG_NET_L3_MASTER_DEV - u8 sysctl_raw_l3mdev_accept; - #endif -- u8 sysctl_tcp_early_demux; - u8 sysctl_udp_early_demux; - - u8 sysctl_nexthop_compat_mode; -@@ -119,7 +148,6 @@ struct netns_ipv4 { - u8 sysctl_tcp_mtu_probing; - int sysctl_tcp_mtu_probe_floor; - int sysctl_tcp_base_mss; -- int sysctl_tcp_min_snd_mss; - int sysctl_tcp_probe_threshold; - u32 sysctl_tcp_probe_interval; - -@@ -132,17 +160,14 @@ struct netns_ipv4 { - u8 sysctl_tcp_syncookies; - u8 sysctl_tcp_migrate_req; - u8 sysctl_tcp_comp_sack_nr; -- int sysctl_tcp_reordering; - u8 sysctl_tcp_retries1; - u8 sysctl_tcp_retries2; - u8 sysctl_tcp_orphan_retries; - u8 sysctl_tcp_tw_reuse; - int sysctl_tcp_fin_timeout; -- unsigned int sysctl_tcp_notsent_lowat; - u8 sysctl_tcp_sack; - u8 sysctl_tcp_window_scaling; - u8 sysctl_tcp_timestamps; -- u8 sysctl_tcp_early_retrans; - u8 sysctl_tcp_recovery; - u8 sysctl_tcp_thin_linear_timeouts; - u8 sysctl_tcp_slow_start_after_idle; -@@ -158,21 +183,13 @@ struct netns_ipv4 { - u8 sysctl_tcp_frto; - u8 sysctl_tcp_nometrics_save; - u8 sysctl_tcp_no_ssthresh_metrics_save; -- u8 sysctl_tcp_moderate_rcvbuf; -- u8 sysctl_tcp_tso_win_divisor; - u8 sysctl_tcp_workaround_signed_windows; -- int sysctl_tcp_limit_output_bytes; - int sysctl_tcp_challenge_ack_limit; -- int sysctl_tcp_min_rtt_wlen; - u8 sysctl_tcp_min_tso_segs; -- u8 sysctl_tcp_tso_rtt_log; -- u8 sysctl_tcp_autocorking; - u8 sysctl_tcp_reflect_tos; - int sysctl_tcp_invalid_ratelimit; - int sysctl_tcp_pacing_ss_ratio; - int sysctl_tcp_pacing_ca_ratio; -- int sysctl_tcp_wmem[3]; -- int sysctl_tcp_rmem[3]; - unsigned int sysctl_tcp_child_ehash_entries; - unsigned long sysctl_tcp_comp_sack_delay_ns; - unsigned long sysctl_tcp_comp_sack_slack_ns; ---- a/net/core/net_namespace.c -+++ b/net/core/net_namespace.c -@@ -1107,11 +1107,56 @@ out: - rtnl_set_sk_err(net, RTNLGRP_NSID, err); - } - -+#ifdef CONFIG_NET_NS -+static void __init netns_ipv4_struct_check(void) -+{ -+ /* TX readonly hotpath cache lines */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx, -+ sysctl_tcp_early_retrans); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx, -+ sysctl_tcp_tso_win_divisor); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx, -+ sysctl_tcp_tso_rtt_log); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx, -+ sysctl_tcp_autocorking); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx, -+ sysctl_tcp_min_snd_mss); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx, -+ sysctl_tcp_notsent_lowat); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx, -+ sysctl_tcp_limit_output_bytes); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx, -+ sysctl_tcp_min_rtt_wlen); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx, -+ sysctl_tcp_wmem); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx, -+ sysctl_ip_fwd_use_pmtu); -+ CACHELINE_ASSERT_GROUP_SIZE(struct netns_ipv4, netns_ipv4_read_tx, 33); -+ -+ /* TXRX readonly hotpath cache lines */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_txrx, -+ sysctl_tcp_moderate_rcvbuf); -+ CACHELINE_ASSERT_GROUP_SIZE(struct netns_ipv4, netns_ipv4_read_txrx, 1); -+ -+ /* RX readonly hotpath cache line */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_rx, -+ sysctl_ip_early_demux); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_rx, -+ sysctl_tcp_early_demux); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_rx, -+ sysctl_tcp_reordering); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_rx, -+ sysctl_tcp_rmem); -+ CACHELINE_ASSERT_GROUP_SIZE(struct netns_ipv4, netns_ipv4_read_rx, 18); -+} -+#endif -+ - void __init net_ns_init(void) - { - struct net_generic *ng; - - #ifdef CONFIG_NET_NS -+ netns_ipv4_struct_check(); - net_cachep = kmem_cache_create("net_namespace", sizeof(struct net), - SMP_CACHE_BYTES, - SLAB_PANIC|SLAB_ACCOUNT, NULL); diff --git a/openwrt/patch/kernel-6.6/backport/903-v6.8-net-device-reorganize-net_device-fast-path-variables.patch b/openwrt/patch/kernel-6.6/backport/903-v6.8-net-device-reorganize-net_device-fast-path-variables.patch deleted file mode 100644 index 82534acc4..000000000 --- a/openwrt/patch/kernel-6.6/backport/903-v6.8-net-device-reorganize-net_device-fast-path-variables.patch +++ /dev/null @@ -1,309 +0,0 @@ -From 0a6d7cbf8e290251bc8f41f02dd4244ee66f4677 Mon Sep 17 00:00:00 2001 -From: Coco Li -Date: Mon, 4 Dec 2023 20:12:30 +0000 -Subject: [PATCH 3/4] net-device: reorganize net_device fast path variables - -Reorganize fast path variables on tx-txrx-rx order -Fastpath variables end after npinfo. - -Below data generated with pahole on x86 architecture. - -Fast path variables span cache lines before change: 12 -Fast path variables span cache lines after change: 4 - -Suggested-by: Eric Dumazet -Signed-off-by: Coco Li -Reviewed-by: Eric Dumazet -Reviewed-by: David Ahern -Link: https://lore.kernel.org/r/20231204201232.520025-2-lixiaoyan@google.com -Signed-off-by: Jakub Kicinski ---- - include/linux/netdevice.h | 116 +++++++++++++++++++++----------------- - net/core/dev.c | 56 ++++++++++++++++++ - 2 files changed, 120 insertions(+), 52 deletions(-) - ---- a/include/linux/netdevice.h -+++ b/include/linux/netdevice.h -@@ -2089,6 +2089,70 @@ enum netdev_stat_type { - */ - - struct net_device { -+ /* Cacheline organization can be found documented in -+ * Documentation/networking/net_cachelines/net_device.rst. -+ * Please update the document when adding new fields. -+ */ -+ -+ /* TX read-mostly hotpath */ -+ __cacheline_group_begin(net_device_read_tx); -+ unsigned long long priv_flags; -+ const struct net_device_ops *netdev_ops; -+ const struct header_ops *header_ops; -+ struct netdev_queue *_tx; -+ unsigned int real_num_tx_queues; -+ unsigned int gso_max_size; -+ unsigned int gso_ipv4_max_size; -+ u16 gso_max_segs; -+ s16 num_tc; -+ /* Note : dev->mtu is often read without holding a lock. -+ * Writers usually hold RTNL. -+ * It is recommended to use READ_ONCE() to annotate the reads, -+ * and to use WRITE_ONCE() to annotate the writes. -+ */ -+ unsigned int mtu; -+ unsigned short needed_headroom; -+ struct netdev_tc_txq tc_to_txq[TC_MAX_QUEUE]; -+#ifdef CONFIG_XPS -+ struct xps_dev_maps __rcu *xps_maps[XPS_MAPS_MAX]; -+#endif -+#ifdef CONFIG_NETFILTER_EGRESS -+ struct nf_hook_entries __rcu *nf_hooks_egress; -+#endif -+#ifdef CONFIG_NET_XGRESS -+ struct bpf_mprog_entry __rcu *tcx_egress; -+#endif -+ __cacheline_group_end(net_device_read_tx); -+ -+ /* TXRX read-mostly hotpath */ -+ __cacheline_group_begin(net_device_read_txrx); -+ unsigned int flags; -+ unsigned short hard_header_len; -+ netdev_features_t features; -+ struct inet6_dev __rcu *ip6_ptr; -+ __cacheline_group_end(net_device_read_txrx); -+ -+ /* RX read-mostly hotpath */ -+ __cacheline_group_begin(net_device_read_rx); -+ struct list_head ptype_specific; -+ int ifindex; -+ unsigned int real_num_rx_queues; -+ struct netdev_rx_queue *_rx; -+ unsigned long gro_flush_timeout; -+ int napi_defer_hard_irqs; -+ unsigned int gro_max_size; -+ unsigned int gro_ipv4_max_size; -+ rx_handler_func_t __rcu *rx_handler; -+ void __rcu *rx_handler_data; -+ possible_net_t nd_net; -+#ifdef CONFIG_NETPOLL -+ struct netpoll_info __rcu *npinfo; -+#endif -+#ifdef CONFIG_NET_XGRESS -+ struct bpf_mprog_entry __rcu *tcx_ingress; -+#endif -+ __cacheline_group_end(net_device_read_rx); -+ - char name[IFNAMSIZ]; - struct netdev_name_node *name_node; - struct dev_ifalias __rcu *ifalias; -@@ -2113,7 +2177,6 @@ struct net_device { - struct list_head unreg_list; - struct list_head close_list; - struct list_head ptype_all; -- struct list_head ptype_specific; - - struct { - struct list_head upper; -@@ -2121,25 +2184,12 @@ struct net_device { - } adj_list; - - /* Read-mostly cache-line for fast-path access */ -- unsigned int flags; - xdp_features_t xdp_features; -- unsigned long long priv_flags; -- const struct net_device_ops *netdev_ops; - const struct xdp_metadata_ops *xdp_metadata_ops; -- int ifindex; - unsigned short gflags; -- unsigned short hard_header_len; - -- /* Note : dev->mtu is often read without holding a lock. -- * Writers usually hold RTNL. -- * It is recommended to use READ_ONCE() to annotate the reads, -- * and to use WRITE_ONCE() to annotate the writes. -- */ -- unsigned int mtu; -- unsigned short needed_headroom; - unsigned short needed_tailroom; - -- netdev_features_t features; - netdev_features_t hw_features; - netdev_features_t wanted_features; - netdev_features_t vlan_features; -@@ -2183,8 +2233,6 @@ struct net_device { - const struct tlsdev_ops *tlsdev_ops; - #endif - -- const struct header_ops *header_ops; -- - unsigned char operstate; - unsigned char link_mode; - -@@ -2225,9 +2273,7 @@ struct net_device { - - - /* Protocol-specific pointers */ -- - struct in_device __rcu *ip_ptr; -- struct inet6_dev __rcu *ip6_ptr; - #if IS_ENABLED(CONFIG_VLAN_8021Q) - struct vlan_info __rcu *vlan_info; - #endif -@@ -2262,26 +2308,15 @@ struct net_device { - /* Interface address info used in eth_type_trans() */ - const unsigned char *dev_addr; - -- struct netdev_rx_queue *_rx; - unsigned int num_rx_queues; -- unsigned int real_num_rx_queues; - - struct bpf_prog __rcu *xdp_prog; -- unsigned long gro_flush_timeout; -- int napi_defer_hard_irqs; - #define GRO_LEGACY_MAX_SIZE 65536u - /* TCP minimal MSS is 8 (TCP_MIN_GSO_SIZE), - * and shinfo->gso_segs is a 16bit field. - */ - #define GRO_MAX_SIZE (8 * 65535u) -- unsigned int gro_max_size; -- unsigned int gro_ipv4_max_size; - unsigned int xdp_zc_max_segs; -- rx_handler_func_t __rcu *rx_handler; -- void __rcu *rx_handler_data; --#ifdef CONFIG_NET_XGRESS -- struct bpf_mprog_entry __rcu *tcx_ingress; --#endif - struct netdev_queue __rcu *ingress_queue; - #ifdef CONFIG_NETFILTER_INGRESS - struct nf_hook_entries __rcu *nf_hooks_ingress; -@@ -2296,25 +2331,13 @@ struct net_device { - /* - * Cache lines mostly used on transmit path - */ -- struct netdev_queue *_tx ____cacheline_aligned_in_smp; - unsigned int num_tx_queues; -- unsigned int real_num_tx_queues; - struct Qdisc __rcu *qdisc; - unsigned int tx_queue_len; - spinlock_t tx_global_lock; - - struct xdp_dev_bulk_queue __percpu *xdp_bulkq; - --#ifdef CONFIG_XPS -- struct xps_dev_maps __rcu *xps_maps[XPS_MAPS_MAX]; --#endif --#ifdef CONFIG_NET_XGRESS -- struct bpf_mprog_entry __rcu *tcx_egress; --#endif --#ifdef CONFIG_NETFILTER_EGRESS -- struct nf_hook_entries __rcu *nf_hooks_egress; --#endif -- - #ifdef CONFIG_NET_SCHED - DECLARE_HASHTABLE (qdisc_hash, 4); - #endif -@@ -2353,12 +2376,6 @@ struct net_device { - bool needs_free_netdev; - void (*priv_destructor)(struct net_device *dev); - --#ifdef CONFIG_NETPOLL -- struct netpoll_info __rcu *npinfo; --#endif -- -- possible_net_t nd_net; -- - /* mid-layer private */ - void *ml_priv; - enum netdev_ml_priv_type ml_priv_type; -@@ -2393,20 +2410,15 @@ struct net_device { - */ - #define GSO_MAX_SIZE (8 * GSO_MAX_SEGS) - -- unsigned int gso_max_size; - #define TSO_LEGACY_MAX_SIZE 65536 - #define TSO_MAX_SIZE UINT_MAX - unsigned int tso_max_size; -- u16 gso_max_segs; - #define TSO_MAX_SEGS U16_MAX - u16 tso_max_segs; -- unsigned int gso_ipv4_max_size; - - #ifdef CONFIG_DCB - const struct dcbnl_rtnl_ops *dcbnl_ops; - #endif -- s16 num_tc; -- struct netdev_tc_txq tc_to_txq[TC_MAX_QUEUE]; - u8 prio_tc_map[TC_BITMASK + 1]; - - #if IS_ENABLED(CONFIG_FCOE) ---- a/net/core/dev.c -+++ b/net/core/dev.c -@@ -11626,6 +11626,60 @@ static struct pernet_operations __net_in - .exit_batch = default_device_exit_batch, - }; - -+static void __init net_dev_struct_check(void) -+{ -+ /* TX read-mostly hotpath */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, priv_flags); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, netdev_ops); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, header_ops); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, _tx); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, real_num_tx_queues); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, gso_max_size); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, gso_ipv4_max_size); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, gso_max_segs); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, num_tc); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, mtu); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, needed_headroom); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, tc_to_txq); -+#ifdef CONFIG_XPS -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, xps_maps); -+#endif -+#ifdef CONFIG_NETFILTER_EGRESS -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, nf_hooks_egress); -+#endif -+#ifdef CONFIG_NET_XGRESS -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_tx, tcx_egress); -+#endif -+ CACHELINE_ASSERT_GROUP_SIZE(struct net_device, net_device_read_tx, 152); -+ -+ /* TXRX read-mostly hotpath */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_txrx, flags); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_txrx, hard_header_len); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_txrx, features); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_txrx, ip6_ptr); -+ CACHELINE_ASSERT_GROUP_SIZE(struct net_device, net_device_read_txrx, 30); -+ -+ /* RX read-mostly hotpath */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, ptype_specific); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, ifindex); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, real_num_rx_queues); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, _rx); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, gro_flush_timeout); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, napi_defer_hard_irqs); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, gro_max_size); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, gro_ipv4_max_size); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, rx_handler); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, rx_handler_data); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, nd_net); -+#ifdef CONFIG_NETPOLL -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, npinfo); -+#endif -+#ifdef CONFIG_NET_XGRESS -+ CACHELINE_ASSERT_GROUP_MEMBER(struct net_device, net_device_read_rx, tcx_ingress); -+#endif -+ CACHELINE_ASSERT_GROUP_SIZE(struct net_device, net_device_read_rx, 96); -+} -+ - /* - * Initialize the DEV module. At boot time this walks the device list and - * unhooks any devices that fail to initialise (normally hardware not -@@ -11675,6 +11729,8 @@ static int __init net_dev_init(void) - - BUG_ON(!dev_boot_phase); - -+ net_dev_struct_check(); -+ - if (dev_proc_init()) - goto out; - diff --git a/openwrt/patch/kernel-6.6/backport/904-v6.8-tcp-reorganize-tcp_sock-fast-path-variables.patch b/openwrt/patch/kernel-6.6/backport/904-v6.8-tcp-reorganize-tcp_sock-fast-path-variables.patch deleted file mode 100644 index e37ffdd57..000000000 --- a/openwrt/patch/kernel-6.6/backport/904-v6.8-tcp-reorganize-tcp_sock-fast-path-variables.patch +++ /dev/null @@ -1,495 +0,0 @@ -From 700b417042d13b4920b4193682f8b209b6221bb5 Mon Sep 17 00:00:00 2001 -From: Coco Li -Date: Mon, 4 Dec 2023 20:12:31 +0000 -Subject: [PATCH 4/4] tcp: reorganize tcp_sock fast path variables - -The variables are organized according in the following way: - -- TX read-mostly hotpath cache lines -- TXRX read-mostly hotpath cache lines -- RX read-mostly hotpath cache lines -- TX read-write hotpath cache line -- TXRX read-write hotpath cache line -- RX read-write hotpath cache line - -Fastpath cachelines end after rcvq_space. - -Cache line boundaries are enforced only between read-mostly and -read-write. That is, if read-mostly tx cachelines bleed into -read-mostly txrx cachelines, we do not care. We care about the -boundaries between read and write cachelines because we want -to prevent false sharing. - -Fast path variables span cache lines before change: 12 -Fast path variables span cache lines after change: 8 - -Suggested-by: Eric Dumazet -Reviewed-by: Wei Wang -Signed-off-by: Coco Li -Reviewed-by: Eric Dumazet -Reviewed-by: David Ahern -Link: https://lore.kernel.org/r/20231204201232.520025-3-lixiaoyan@google.com -Signed-off-by: Jakub Kicinski ---- - include/linux/tcp.h | 252 ++++++++++++++++++++++++-------------------- - net/ipv4/tcp.c | 93 ++++++++++++++++ - 2 files changed, 229 insertions(+), 116 deletions(-) - ---- a/include/linux/tcp.h -+++ b/include/linux/tcp.h -@@ -175,23 +175,121 @@ static inline struct tcp_request_sock *t - #define TCP_RMEM_TO_WIN_SCALE 8 - - struct tcp_sock { -+ /* Cacheline organization can be found documented in -+ * Documentation/networking/net_cachelines/tcp_sock.rst. -+ * Please update the document when adding new fields. -+ */ -+ - /* inet_connection_sock has to be the first member of tcp_sock */ - struct inet_connection_sock inet_conn; -- u16 tcp_header_len; /* Bytes of tcp header to send */ -+ -+ /* TX read-mostly hotpath cache lines */ -+ __cacheline_group_begin(tcp_sock_read_tx); -+ /* timestamp of last sent data packet (for restart window) */ -+ u32 max_window; /* Maximal window ever seen from peer */ -+ u32 rcv_ssthresh; /* Current window clamp */ -+ u32 reordering; /* Packet reordering metric. */ -+ u32 notsent_lowat; /* TCP_NOTSENT_LOWAT */ - u16 gso_segs; /* Max number of segs per GSO packet */ -+ /* from STCP, retrans queue hinting */ -+ struct sk_buff *lost_skb_hint; -+ struct sk_buff *retransmit_skb_hint; -+ __cacheline_group_end(tcp_sock_read_tx); -+ -+ /* TXRX read-mostly hotpath cache lines */ -+ __cacheline_group_begin(tcp_sock_read_txrx); -+ u32 tsoffset; /* timestamp offset */ -+ u32 snd_wnd; /* The window we expect to receive */ -+ u32 mss_cache; /* Cached effective mss, not including SACKS */ -+ u32 snd_cwnd; /* Sending congestion window */ -+ u32 prr_out; /* Total number of pkts sent during Recovery. */ -+ u32 lost_out; /* Lost packets */ -+ u32 sacked_out; /* SACK'd packets */ -+ u16 tcp_header_len; /* Bytes of tcp header to send */ -+ u8 chrono_type : 2, /* current chronograph type */ -+ repair : 1, -+ is_sack_reneg:1, /* in recovery from loss with SACK reneg? */ -+ is_cwnd_limited:1;/* forward progress limited by snd_cwnd? */ -+ __cacheline_group_end(tcp_sock_read_txrx); -+ -+ /* RX read-mostly hotpath cache lines */ -+ __cacheline_group_begin(tcp_sock_read_rx); -+ u32 copied_seq; /* Head of yet unread data */ -+ u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */ -+ u32 snd_wl1; /* Sequence for window update */ -+ u32 tlp_high_seq; /* snd_nxt at the time of TLP */ -+ u32 rttvar_us; /* smoothed mdev_max */ -+ u32 retrans_out; /* Retransmitted packets out */ -+ u16 advmss; /* Advertised MSS */ -+ u16 urg_data; /* Saved octet of OOB data and control flags */ -+ u32 lost; /* Total data packets lost incl. rexmits */ -+ struct minmax rtt_min; -+ /* OOO segments go in this rbtree. Socket lock must be held. */ -+ struct rb_root out_of_order_queue; -+ u32 snd_ssthresh; /* Slow start size threshold */ -+ __cacheline_group_end(tcp_sock_read_rx); -+ -+ /* TX read-write hotpath cache lines */ -+ __cacheline_group_begin(tcp_sock_write_tx) ____cacheline_aligned; -+ u32 segs_out; /* RFC4898 tcpEStatsPerfSegsOut -+ * The total number of segments sent. -+ */ -+ u32 data_segs_out; /* RFC4898 tcpEStatsPerfDataSegsOut -+ * total number of data segments sent. -+ */ -+ u64 bytes_sent; /* RFC4898 tcpEStatsPerfHCDataOctetsOut -+ * total number of data bytes sent. -+ */ -+ u32 snd_sml; /* Last byte of the most recently transmitted small packet */ -+ u32 chrono_start; /* Start time in jiffies of a TCP chrono */ -+ u32 chrono_stat[3]; /* Time in jiffies for chrono_stat stats */ -+ u32 write_seq; /* Tail(+1) of data held in tcp send buffer */ -+ u32 pushed_seq; /* Last pushed seq, required to talk to windows */ -+ u32 lsndtime; -+ u32 mdev_us; /* medium deviation */ -+ u64 tcp_wstamp_ns; /* departure time for next sent data packet */ -+ u64 tcp_clock_cache; /* cache last tcp_clock_ns() (see tcp_mstamp_refresh()) */ -+ u64 tcp_mstamp; /* most recent packet received/sent */ -+ u32 rtt_seq; /* sequence number to update rttvar */ -+ struct list_head tsorted_sent_queue; /* time-sorted sent but un-SACKed skbs */ -+ struct sk_buff *highest_sack; /* skb just after the highest -+ * skb with SACKed bit set -+ * (validity guaranteed only if -+ * sacked_out > 0) -+ */ -+ u8 ecn_flags; /* ECN status bits. */ -+ __cacheline_group_end(tcp_sock_write_tx); - -+ /* TXRX read-write hotpath cache lines */ -+ __cacheline_group_begin(tcp_sock_write_txrx); - /* - * Header prediction flags - * 0x5?10 << 16 + snd_wnd in net byte order - */ - __be32 pred_flags; -- -+ u32 rcv_nxt; /* What we want to receive next */ -+ u32 snd_nxt; /* Next sequence we send */ -+ u32 snd_una; /* First byte we want an ack for */ -+ u32 window_clamp; /* Maximal window to advertise */ -+ u32 srtt_us; /* smoothed round trip time << 3 in usecs */ -+ u32 packets_out; /* Packets which are "in flight" */ -+ u32 snd_up; /* Urgent pointer */ -+ u32 delivered; /* Total data packets delivered incl. rexmits */ -+ u32 delivered_ce; /* Like the above but only ECE marked packets */ -+ u32 app_limited; /* limited until "delivered" reaches this val */ -+ u32 rcv_wnd; /* Current receiver window */ - /* -- * RFC793 variables by their proper names. This means you can -- * read the code and the spec side by side (and laugh ...) -- * See RFC793 and RFC1122. The RFC writes these in capitals. -- */ -- u64 bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived -+ * Options received (usually on last packet, some only on SYN packets). -+ */ -+ struct tcp_options_received rx_opt; -+ u8 nonagle : 4,/* Disable Nagle algorithm? */ -+ rate_app_limited:1; /* rate_{delivered,interval_us} limited? */ -+ __cacheline_group_end(tcp_sock_write_txrx); -+ -+ /* RX read-write hotpath cache lines */ -+ __cacheline_group_begin(tcp_sock_write_rx); -+ u64 bytes_received; -+ /* RFC4898 tcpEStatsAppHCThruOctetsReceived - * sum(delta(rcv_nxt)), or how many bytes - * were acked. - */ -@@ -201,45 +299,44 @@ struct tcp_sock { - u32 data_segs_in; /* RFC4898 tcpEStatsPerfDataSegsIn - * total number of data segments in. - */ -- u32 rcv_nxt; /* What we want to receive next */ -- u32 copied_seq; /* Head of yet unread data */ - u32 rcv_wup; /* rcv_nxt on last window update sent */ -- u32 snd_nxt; /* Next sequence we send */ -- u32 segs_out; /* RFC4898 tcpEStatsPerfSegsOut -- * The total number of segments sent. -- */ -- u32 data_segs_out; /* RFC4898 tcpEStatsPerfDataSegsOut -- * total number of data segments sent. -- */ -- u64 bytes_sent; /* RFC4898 tcpEStatsPerfHCDataOctetsOut -- * total number of data bytes sent. -- */ -+ u32 max_packets_out; /* max packets_out in last window */ -+ u32 cwnd_usage_seq; /* right edge of cwnd usage tracking flight */ -+ u32 rate_delivered; /* saved rate sample: packets delivered */ -+ u32 rate_interval_us; /* saved rate sample: time elapsed */ -+ u32 rcv_rtt_last_tsecr; -+ u64 first_tx_mstamp; /* start of window send phase */ -+ u64 delivered_mstamp; /* time we reached "delivered" */ - u64 bytes_acked; /* RFC4898 tcpEStatsAppHCThruOctetsAcked - * sum(delta(snd_una)), or how many bytes - * were acked. - */ -+ struct { -+ u32 rtt_us; -+ u32 seq; -+ u64 time; -+ } rcv_rtt_est; -+/* Receiver queue space */ -+ struct { -+ u32 space; -+ u32 seq; -+ u64 time; -+ } rcvq_space; -+ __cacheline_group_end(tcp_sock_write_rx); -+ /* End of Hot Path */ -+ -+/* -+ * RFC793 variables by their proper names. This means you can -+ * read the code and the spec side by side (and laugh ...) -+ * See RFC793 and RFC1122. The RFC writes these in capitals. -+ */ - u32 dsack_dups; /* RFC4898 tcpEStatsStackDSACKDups - * total number of DSACK blocks received - */ -- u32 snd_una; /* First byte we want an ack for */ -- u32 snd_sml; /* Last byte of the most recently transmitted small packet */ -- u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */ -- u32 lsndtime; /* timestamp of last sent data packet (for restart window) */ - u32 last_oow_ack_time; /* timestamp of last out-of-window ACK */ - u32 compressed_ack_rcv_nxt; - -- u32 tsoffset; /* timestamp offset */ -- - struct list_head tsq_node; /* anchor in tsq_tasklet.head list */ -- struct list_head tsorted_sent_queue; /* time-sorted sent but un-SACKed skbs */ -- -- u32 snd_wl1; /* Sequence for window update */ -- u32 snd_wnd; /* The window we expect to receive */ -- u32 max_window; /* Maximal window ever seen from peer */ -- u32 mss_cache; /* Cached effective mss, not including SACKS */ -- -- u32 window_clamp; /* Maximal window to advertise */ -- u32 rcv_ssthresh; /* Current window clamp */ - u8 scaling_ratio; /* see tcp_win_from_space() */ - /* Information of the most recently (s)acked skb */ - struct tcp_rack { -@@ -253,25 +350,17 @@ struct tcp_sock { - dsack_seen:1, /* Whether DSACK seen after last adj */ - advanced:1; /* mstamp advanced since last lost marking */ - } rack; -- u16 advmss; /* Advertised MSS */ - u8 compressed_ack; - u8 dup_ack_counter:2, - tlp_retrans:1, /* TLP is a retransmission */ - fast_ack_mode:2, /* which fast ack mode ? */ - tlp_orig_data_app_limited:1, /* app-limited before TLP rtx? */ - unused:2; -- u32 chrono_start; /* Start time in jiffies of a TCP chrono */ -- u32 chrono_stat[3]; /* Time in jiffies for chrono_stat stats */ -- u8 chrono_type:2, /* current chronograph type */ -- rate_app_limited:1, /* rate_{delivered,interval_us} limited? */ -+ u8 thin_lto : 1,/* Use linear timeouts for thin streams */ -+ recvmsg_inq : 1,/* Indicate # of bytes in queue upon recvmsg */ - fastopen_connect:1, /* FASTOPEN_CONNECT sockopt */ - fastopen_no_cookie:1, /* Allow send/recv SYN+data without a cookie */ -- is_sack_reneg:1, /* in recovery from loss with SACK reneg? */ -- fastopen_client_fail:2; /* reason why fastopen failed */ -- u8 nonagle : 4,/* Disable Nagle algorithm? */ -- thin_lto : 1,/* Use linear timeouts for thin streams */ -- recvmsg_inq : 1,/* Indicate # of bytes in queue upon recvmsg */ -- repair : 1, -+ fastopen_client_fail:2, /* reason why fastopen failed */ - frto : 1;/* F-RTO (RFC5682) activated in CA_Loss */ - u8 repair_queue; - u8 save_syn:2, /* Save headers of SYN packet */ -@@ -279,45 +368,19 @@ struct tcp_sock { - syn_fastopen:1, /* SYN includes Fast Open option */ - syn_fastopen_exp:1,/* SYN includes Fast Open exp. option */ - syn_fastopen_ch:1, /* Active TFO re-enabling probe */ -- syn_data_acked:1,/* data in SYN is acked by SYN-ACK */ -- is_cwnd_limited:1;/* forward progress limited by snd_cwnd? */ -- u32 tlp_high_seq; /* snd_nxt at the time of TLP */ -+ syn_data_acked:1;/* data in SYN is acked by SYN-ACK */ - - u32 tcp_tx_delay; /* delay (in usec) added to TX packets */ -- u64 tcp_wstamp_ns; /* departure time for next sent data packet */ -- u64 tcp_clock_cache; /* cache last tcp_clock_ns() (see tcp_mstamp_refresh()) */ - - /* RTT measurement */ -- u64 tcp_mstamp; /* most recent packet received/sent */ -- u32 srtt_us; /* smoothed round trip time << 3 in usecs */ -- u32 mdev_us; /* medium deviation */ - u32 mdev_max_us; /* maximal mdev for the last rtt period */ -- u32 rttvar_us; /* smoothed mdev_max */ -- u32 rtt_seq; /* sequence number to update rttvar */ -- struct minmax rtt_min; - -- u32 packets_out; /* Packets which are "in flight" */ -- u32 retrans_out; /* Retransmitted packets out */ -- u32 max_packets_out; /* max packets_out in last window */ -- u32 cwnd_usage_seq; /* right edge of cwnd usage tracking flight */ -- -- u16 urg_data; /* Saved octet of OOB data and control flags */ -- u8 ecn_flags; /* ECN status bits. */ - u8 keepalive_probes; /* num of allowed keep alive probes */ -- u32 reordering; /* Packet reordering metric. */ - u32 reord_seen; /* number of data packet reordering events */ -- u32 snd_up; /* Urgent pointer */ -- --/* -- * Options received (usually on last packet, some only on SYN packets). -- */ -- struct tcp_options_received rx_opt; - - /* - * Slow start and congestion control (see also Nagle, and Karn & Partridge) - */ -- u32 snd_ssthresh; /* Slow start size threshold */ -- u32 snd_cwnd; /* Sending congestion window */ - u32 snd_cwnd_cnt; /* Linear increase counter */ - u32 snd_cwnd_clamp; /* Do not allow snd_cwnd to grow above this */ - u32 snd_cwnd_used; -@@ -325,33 +388,11 @@ struct tcp_sock { - u32 prior_cwnd; /* cwnd right before starting loss recovery */ - u32 prr_delivered; /* Number of newly delivered packets to - * receiver in Recovery. */ -- u32 prr_out; /* Total number of pkts sent during Recovery. */ -- u32 delivered; /* Total data packets delivered incl. rexmits */ -- u32 delivered_ce; /* Like the above but only ECE marked packets */ -- u32 lost; /* Total data packets lost incl. rexmits */ -- u32 app_limited; /* limited until "delivered" reaches this val */ -- u64 first_tx_mstamp; /* start of window send phase */ -- u64 delivered_mstamp; /* time we reached "delivered" */ -- u32 rate_delivered; /* saved rate sample: packets delivered */ -- u32 rate_interval_us; /* saved rate sample: time elapsed */ -- -- u32 rcv_wnd; /* Current receiver window */ -- u32 write_seq; /* Tail(+1) of data held in tcp send buffer */ -- u32 notsent_lowat; /* TCP_NOTSENT_LOWAT */ -- u32 pushed_seq; /* Last pushed seq, required to talk to windows */ -- u32 lost_out; /* Lost packets */ -- u32 sacked_out; /* SACK'd packets */ - - struct hrtimer pacing_timer; - struct hrtimer compressed_ack_timer; - -- /* from STCP, retrans queue hinting */ -- struct sk_buff* lost_skb_hint; -- struct sk_buff *retransmit_skb_hint; -- -- /* OOO segments go in this rbtree. Socket lock must be held. */ -- struct rb_root out_of_order_queue; -- struct sk_buff *ooo_last_skb; /* cache rb_last(out_of_order_queue) */ -+ struct sk_buff *ooo_last_skb; /* cache rb_last(out_of_order_queue) */ - - /* SACKs data, these 2 need to be together (see tcp_options_write) */ - struct tcp_sack_block duplicate_sack[1]; /* D-SACK block */ -@@ -359,12 +400,6 @@ struct tcp_sock { - - struct tcp_sack_block recv_sack_cache[4]; - -- struct sk_buff *highest_sack; /* skb just after the highest -- * skb with SACKed bit set -- * (validity guaranteed only if -- * sacked_out > 0) -- */ -- - int lost_cnt_hint; - - u32 prior_ssthresh; /* ssthresh saved at recovery start */ -@@ -407,21 +442,6 @@ struct tcp_sock { - - u32 rcv_ooopack; /* Received out-of-order packets, for tcpinfo */ - --/* Receiver side RTT estimation */ -- u32 rcv_rtt_last_tsecr; -- struct { -- u32 rtt_us; -- u32 seq; -- u64 time; -- } rcv_rtt_est; -- --/* Receiver queue space */ -- struct { -- u32 space; -- u32 seq; -- u64 time; -- } rcvq_space; -- - /* TCP-specific MTU probe information. */ - struct { - u32 probe_seq_start; ---- a/net/ipv4/tcp.c -+++ b/net/ipv4/tcp.c -@@ -4651,6 +4651,97 @@ static void __init tcp_init_mem(void) - sysctl_tcp_mem[2] = sysctl_tcp_mem[0] * 2; /* 9.37 % */ - } - -+static void __init tcp_struct_check(void) -+{ -+ /* TX read-mostly hotpath cache lines */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_tx, max_window); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_tx, rcv_ssthresh); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_tx, reordering); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_tx, notsent_lowat); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_tx, gso_segs); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_tx, lost_skb_hint); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_tx, retransmit_skb_hint); -+ CACHELINE_ASSERT_GROUP_SIZE(struct tcp_sock, tcp_sock_read_tx, 40); -+ -+ /* TXRX read-mostly hotpath cache lines */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_txrx, tsoffset); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_txrx, snd_wnd); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_txrx, mss_cache); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_txrx, snd_cwnd); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_txrx, prr_out); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_txrx, lost_out); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_txrx, sacked_out); -+ CACHELINE_ASSERT_GROUP_SIZE(struct tcp_sock, tcp_sock_read_txrx, 31); -+ -+ /* RX read-mostly hotpath cache lines */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, copied_seq); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, rcv_tstamp); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, snd_wl1); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, tlp_high_seq); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, rttvar_us); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, retrans_out); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, advmss); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, urg_data); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, lost); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, rtt_min); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, out_of_order_queue); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, snd_ssthresh); -+ CACHELINE_ASSERT_GROUP_SIZE(struct tcp_sock, tcp_sock_read_rx, 69); -+ -+ /* TX read-write hotpath cache lines */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, segs_out); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, data_segs_out); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, bytes_sent); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, snd_sml); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, chrono_start); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, chrono_stat); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, write_seq); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, pushed_seq); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, lsndtime); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, mdev_us); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, tcp_wstamp_ns); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, tcp_clock_cache); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, tcp_mstamp); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, rtt_seq); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, tsorted_sent_queue); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, highest_sack); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, ecn_flags); -+ CACHELINE_ASSERT_GROUP_SIZE(struct tcp_sock, tcp_sock_write_tx, 113); -+ -+ /* TXRX read-write hotpath cache lines */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, pred_flags); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, rcv_nxt); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, snd_nxt); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, snd_una); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, window_clamp); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, srtt_us); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, packets_out); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, snd_up); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, delivered); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, delivered_ce); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, app_limited); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, rcv_wnd); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, rx_opt); -+ CACHELINE_ASSERT_GROUP_SIZE(struct tcp_sock, tcp_sock_write_txrx, 76); -+ -+ /* RX read-write hotpath cache lines */ -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, bytes_received); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, segs_in); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, data_segs_in); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, rcv_wup); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, max_packets_out); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, cwnd_usage_seq); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, rate_delivered); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, rate_interval_us); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, rcv_rtt_last_tsecr); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, first_tx_mstamp); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, delivered_mstamp); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, bytes_acked); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, rcv_rtt_est); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_rx, rcvq_space); -+ CACHELINE_ASSERT_GROUP_SIZE(struct tcp_sock, tcp_sock_write_rx, 99); -+} -+ - void __init tcp_init(void) - { - int max_rshare, max_wshare, cnt; -@@ -4661,6 +4752,8 @@ void __init tcp_init(void) - BUILD_BUG_ON(sizeof(struct tcp_skb_cb) > - sizeof_field(struct sk_buff, cb)); - -+ tcp_struct_check(); -+ - percpu_counter_init(&tcp_sockets_allocated, 0, GFP_KERNEL); - - timer_setup(&tcp_orphan_timer, tcp_orphan_update, TIMER_DEFERRABLE); diff --git a/openwrt/patch/kernel-6.6/backport/905-v6.8-tcp-move-tp-scaling_ratio-to-tcp_sock_read_txrx-grou.patch b/openwrt/patch/kernel-6.6/backport/905-v6.8-tcp-move-tp-scaling_ratio-to-tcp_sock_read_txrx-grou.patch deleted file mode 100644 index 507fed2ca..000000000 --- a/openwrt/patch/kernel-6.6/backport/905-v6.8-tcp-move-tp-scaling_ratio-to-tcp_sock_read_txrx-grou.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 119ff04864a24470b1e531bb53e5c141aa8fefb0 Mon Sep 17 00:00:00 2001 -From: Eric Dumazet -Date: Thu, 8 Feb 2024 14:43:21 +0000 -Subject: [PATCH] tcp: move tp->scaling_ratio to tcp_sock_read_txrx group - -tp->scaling_ratio is a read mostly field, used in rx and tx fast paths. - -Fixes: d5fed5addb2b ("tcp: reorganize tcp_sock fast path variables") -Signed-off-by: Eric Dumazet -Cc: Coco Li -Cc: Wei Wang -Reviewed-by: Simon Horman -Signed-off-by: David S. Miller ---- - include/linux/tcp.h | 2 +- - net/ipv4/tcp.c | 3 ++- - 2 files changed, 3 insertions(+), 2 deletions(-) - ---- a/include/linux/tcp.h -+++ b/include/linux/tcp.h -@@ -206,6 +206,7 @@ struct tcp_sock { - u32 lost_out; /* Lost packets */ - u32 sacked_out; /* SACK'd packets */ - u16 tcp_header_len; /* Bytes of tcp header to send */ -+ u8 scaling_ratio; /* see tcp_win_from_space() */ - u8 chrono_type : 2, /* current chronograph type */ - repair : 1, - is_sack_reneg:1, /* in recovery from loss with SACK reneg? */ -@@ -337,7 +338,6 @@ struct tcp_sock { - u32 compressed_ack_rcv_nxt; - - struct list_head tsq_node; /* anchor in tsq_tasklet.head list */ -- u8 scaling_ratio; /* see tcp_win_from_space() */ - /* Information of the most recently (s)acked skb */ - struct tcp_rack { - u64 mstamp; /* (Re)sent time of the skb */ ---- a/net/ipv4/tcp.c -+++ b/net/ipv4/tcp.c -@@ -4671,7 +4671,8 @@ static void __init tcp_struct_check(void - CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_txrx, prr_out); - CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_txrx, lost_out); - CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_txrx, sacked_out); -- CACHELINE_ASSERT_GROUP_SIZE(struct tcp_sock, tcp_sock_read_txrx, 31); -+ CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_txrx, scaling_ratio); -+ CACHELINE_ASSERT_GROUP_SIZE(struct tcp_sock, tcp_sock_read_txrx, 32); - - /* RX read-mostly hotpath cache lines */ - CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_read_rx, copied_seq); diff --git a/openwrt/patch/key.tar.gz b/openwrt/patch/key.tar.gz deleted file mode 100644 index 141a9ce5e..000000000 Binary files a/openwrt/patch/key.tar.gz and /dev/null differ diff --git a/openwrt/patch/key2.tar.gz b/openwrt/patch/key2.tar.gz new file mode 100644 index 000000000..ee01fccb8 Binary files /dev/null and b/openwrt/patch/key2.tar.gz differ diff --git a/openwrt/patch/luci/0001-luci-mod-system-add-modal-overlay-dialog-to-reboot.patch b/openwrt/patch/luci/0001-luci-mod-system-add-modal-overlay-dialog-to-reboot.patch new file mode 100644 index 000000000..44f6cd2c4 --- /dev/null +++ b/openwrt/patch/luci/0001-luci-mod-system-add-modal-overlay-dialog-to-reboot.patch @@ -0,0 +1,45 @@ +From b5ae515838777322a9b6c76d1397b71403802514 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Fri, 13 Sep 2024 19:36:44 +0800 +Subject: [PATCH 1/7] luci-mod-system: add modal overlay dialog to reboot + +Signed-off-by: sbwml +--- + .../resources/view/system/reboot.js | 21 ++++++++++++++++++- + 1 file changed, 20 insertions(+), 1 deletion(-) + +diff --git a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js +index 92e1dd4920..c106f781aa 100644 +--- a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js ++++ b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js +@@ -30,7 +30,26 @@ return view.extend({ + body.appendChild(E('hr')); + body.appendChild(E('button', { + 'class': 'cbi-button cbi-button-action important', +- 'click': ui.createHandlerFn(this, 'handleReboot') ++ 'click': function () { ++ ui.showModal(_('Confirm Reboot'), [ ++ E('p', {}, _('Are you sure you want to reboot the system?')), ++ E('button', { ++ 'class': 'cbi-button cbi-button-action important', ++ 'style': 'margin-left: 0px; background: red!important; border-color: red!important', ++ 'click': function () { ++ ui.hideModal(); ++ this.handleReboot(); ++ }.bind(this) ++ }, _('Confirm')), ++ E('button', { ++ 'class': 'btn cbi-button cbi-button-apply', ++ 'style': 'margin-left: 20px', ++ 'click': function () { ++ ui.hideModal(); ++ } ++ }, _('Cancel')) ++ ]); ++ }.bind(this) + }, _('Perform reboot'))); + + return body; +-- +2.43.5 + diff --git a/openwrt/patch/luci/20_memory.js.patch b/openwrt/patch/luci/0002-luci-mod-status-displays-actual-process-memory-usage.patch similarity index 65% rename from openwrt/patch/luci/20_memory.js.patch rename to openwrt/patch/luci/0002-luci-mod-status-displays-actual-process-memory-usage.patch index ce161da8e..496b7cf14 100644 --- a/openwrt/patch/luci/20_memory.js.patch +++ b/openwrt/patch/luci/0002-luci-mod-status-displays-actual-process-memory-usage.patch @@ -1,5 +1,15 @@ +From 6e22a4543779366d6c4c6fd5be92ba668d25870c Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Fri, 13 Sep 2024 19:43:19 +0800 +Subject: [PATCH 2/7] luci-mod-status: displays actual process memory usage + +Signed-off-by: sbwml +--- + .../luci-static/resources/view/status/include/20_memory.js | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + diff --git a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js -index 0a885c0..d3302ff 100644 +index 0a885c01c9..56ac7c4ac0 100644 --- a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js +++ b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js @@ -32,8 +32,8 @@ return baseclass.extend({ @@ -8,8 +18,11 @@ index 0a885c0..d3302ff 100644 var fields = [ - _('Total Available'), (mem.available) ? mem.available : (mem.total && mem.free && mem.buffered) ? mem.free + mem.buffered : null, mem.total, - _('Used'), (mem.total && mem.free) ? (mem.total - mem.free) : null, mem.total, -+ _('Processes'), (mem.total && mem.free && mem.cached) ? (mem.total - mem.free - mem.cached) : null, mem.total, ++ _('Used'), (mem.total && mem.free && mem.cached) ? (mem.total - mem.free - mem.cached) : null, mem.total, + _('Total Available'), (mem.total && mem.free && mem.cached) ? (mem.free + mem.cached) : null, mem.total, ]; if (mem.buffered) +-- +2.43.5 + diff --git a/openwrt/patch/luci/luci-mod-status-storage-index-applicable-only-to-val.patch b/openwrt/patch/luci/0003-luci-mod-status-storage-index-applicable-only-to-val.patch similarity index 72% rename from openwrt/patch/luci/luci-mod-status-storage-index-applicable-only-to-val.patch rename to openwrt/patch/luci/0003-luci-mod-status-storage-index-applicable-only-to-val.patch index 25f29413f..5e789213d 100644 --- a/openwrt/patch/luci/luci-mod-status-storage-index-applicable-only-to-val.patch +++ b/openwrt/patch/luci/0003-luci-mod-status-storage-index-applicable-only-to-val.patch @@ -1,7 +1,7 @@ -From 8a052b2e2ffd2e6a46fe361a946b1acd42998402 Mon Sep 17 00:00:00 2001 +From 6c7f86e77b7f0659d19bea26bede8a05f1575197 Mon Sep 17 00:00:00 2001 From: sbwml Date: Sun, 24 Mar 2024 00:12:45 +0800 -Subject: [PATCH] luci-mod-status: storage index applicable only to valid +Subject: [PATCH 3/7] luci-mod-status: storage index applicable only to valid devices Signed-off-by: sbwml @@ -9,6 +9,8 @@ Signed-off-by: sbwml .../luci-static/resources/view/status/include/25_storage.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) +diff --git a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/25_storage.js b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/25_storage.js +index 60661f63e5..aac6711ed3 100644 --- a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/25_storage.js +++ b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/25_storage.js @@ -13,12 +13,14 @@ var callMountPoints = rpc.declare({ @@ -36,4 +38,6 @@ Signed-off-by: sbwml continue; var name = entry.device + ' (' + entry.mount +')', +-- +2.43.5 diff --git a/openwrt/patch/luci/luci-nftables.patch b/openwrt/patch/luci/0004-luci-mod-status-firewall-disable-legacy-firewall-rul.patch similarity index 71% rename from openwrt/patch/luci/luci-nftables.patch rename to openwrt/patch/luci/0004-luci-mod-status-firewall-disable-legacy-firewall-rul.patch index 694151a8f..d12537083 100644 --- a/openwrt/patch/luci/luci-nftables.patch +++ b/openwrt/patch/luci/0004-luci-mod-status-firewall-disable-legacy-firewall-rul.patch @@ -1,12 +1,24 @@ +From b0b925497f0e583e765992d18992b7dae3826b30 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Fri, 13 Sep 2024 19:44:52 +0800 +Subject: [PATCH 4/7] luci-mod-status: firewall: disable legacy firewall rule + warning + +Signed-off-by: sbwml +--- + .../resources/view/status/nftables.js | 14 ------------ + .../share/luci/menu.d/luci-mod-status.json | 22 ++++++++++++++++--- + 2 files changed, 19 insertions(+), 17 deletions(-) + diff --git a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/nftables.js b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/nftables.js -index d891526..04fd5af 100644 +index 682c29f872..1ebc17bfbd 100644 --- a/modules/luci-mod-status/htdocs/luci-static/resources/view/status/nftables.js +++ b/modules/luci-mod-status/htdocs/luci-static/resources/view/status/nftables.js -@@ -672,26 +672,12 @@ return view.extend({ +@@ -773,23 +773,9 @@ return view.extend({ return node; }, -- checkLegacyRules: function(ipt4save, ipt6save) { +- checkLegacyRules(ipt4save, ipt6save) { - if (ipt4save.match(/\n-A /) || ipt6save.match(/\n-A /)) { - ui.addNotification(_('Legacy rules detected'), [ - E('p', _('There are legacy iptables rules present on the system. Mixing iptables and nftables rules is discouraged and may lead to incomplete traffic filtering.')), @@ -18,11 +30,8 @@ index d891526..04fd5af 100644 - } - }, - - render: function(data) { - var view = E('div'), - nft = data[0], - ipt = data[1], - ipt6 = data[2]; + render([nft, ipt, ipt6]) { + const view = E('div'); - this.checkLegacyRules(ipt, ipt6); - @@ -30,10 +39,10 @@ index d891526..04fd5af 100644 return E('em', _('No nftables ruleset loaded.')); diff --git a/modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json b/modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json -index 190eef0..e9cf485 100644 +index 23e8bdb61d..5ba794e8fd 100644 --- a/modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json +++ b/modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json -@@ -39,20 +39,33 @@ +@@ -60,23 +60,39 @@ } }, @@ -70,3 +79,12 @@ index 190eef0..e9cf485 100644 "action": { "type": "view", "path": "status/iptables" ++ }, ++ "depends": { ++ "fs": { "/usr/sbin/iptables": "executable" } + } + }, + +-- +2.43.5 + diff --git a/openwrt/patch/luci/luci-refresh-interval.patch b/openwrt/patch/luci/0005-luci-mod-system-add-refresh-interval-setting.patch similarity index 56% rename from openwrt/patch/luci/luci-refresh-interval.patch rename to openwrt/patch/luci/0005-luci-mod-system-add-refresh-interval-setting.patch index 32ef96cf8..299067fa7 100644 --- a/openwrt/patch/luci/luci-refresh-interval.patch +++ b/openwrt/patch/luci/0005-luci-mod-system-add-refresh-interval-setting.patch @@ -1,10 +1,20 @@ +From c061bab058aabf2bc68b0592d7194b7fc128e6e9 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Fri, 13 Sep 2024 19:47:13 +0800 +Subject: [PATCH 5/7] luci-mod-system: add refresh interval setting + +Signed-off-by: sbwml +--- + .../htdocs/luci-static/resources/view/system/system.js | 8 ++++++++ + 1 file changed, 8 insertions(+) + diff --git a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js -index 767bc8c..c8969ac 100644 +index 2b9b8f5f0f..50b4a7dd66 100644 --- a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js +++ b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js -@@ -244,6 +244,14 @@ return view.extend({ - if (k[i].charAt(0) != '.') - o.value(uci.get('luci', 'themes', k[i]), k[i]); +@@ -252,6 +252,14 @@ return view.extend({ + o.ucisection = 'main'; + o.ucioption = 'tablefilters'; + o = s.taboption('language', form.Value, 'pollinterval', _('Refresh interval'), _('Refresh interval in seconds')); + o.uciconfig = 'luci'; @@ -17,3 +27,6 @@ index 767bc8c..c8969ac 100644 /* * NTP */ +-- +2.43.5 + diff --git a/openwrt/patch/luci/0006-luci-mod-system-mounts-add-docker-directory-mount-po.patch b/openwrt/patch/luci/0006-luci-mod-system-mounts-add-docker-directory-mount-po.patch new file mode 100644 index 000000000..cafae8c1e --- /dev/null +++ b/openwrt/patch/luci/0006-luci-mod-system-mounts-add-docker-directory-mount-po.patch @@ -0,0 +1,25 @@ +From a7bffd1634cfbc2f4fb5306f1329f57d7194cd7d Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Sat, 2 Nov 2024 19:13:53 +0800 +Subject: [PATCH 6/7] luci-mod-system: mounts: add docker directory mount point + +Signed-off-by: sbwml +--- + .../htdocs/luci-static/resources/view/system/mounts.js | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js +index d496faa8c3..1f94d5ebdd 100644 +--- a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js ++++ b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js +@@ -272,6 +272,7 @@ return view.extend({ + o = s.taboption('general', form.Value, 'target', _('Mount point'), _('Specifies the directory the device is attached to')); + o.value('/', _('Use as root filesystem (/)')); + o.value('/overlay', _('Use as external overlay (/overlay)')); ++ o.value('/opt', _('Use as docker root directory (/opt)')); + o.rmempty = false; + + o = s.taboption('general', form.DummyValue, '__notice', _('Root preparation')); +-- +2.43.5 + diff --git a/openwrt/patch/luci/0007-luci-mod-system-add-ucitrack-luci-mod-system-zram.js.patch b/openwrt/patch/luci/0007-luci-mod-system-add-ucitrack-luci-mod-system-zram.js.patch new file mode 100644 index 000000000..472a9e232 --- /dev/null +++ b/openwrt/patch/luci/0007-luci-mod-system-add-ucitrack-luci-mod-system-zram.js.patch @@ -0,0 +1,24 @@ +From 77a578cdc2c3eb430a890c6a286e37fcc6b21575 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Mon, 5 May 2025 22:24:52 +0800 +Subject: [PATCH 7/7] luci-mod-system: add ucitrack luci-mod-system-zram.json + +Signed-off-by: sbwml +--- + .../root/usr/share/ucitrack/luci-mod-system-zram.json | 4 ++++ + 1 file changed, 4 insertions(+) + create mode 100644 modules/luci-mod-system/root/usr/share/ucitrack/luci-mod-system-zram.json + +diff --git a/modules/luci-mod-system/root/usr/share/ucitrack/luci-mod-system-zram.json b/modules/luci-mod-system/root/usr/share/ucitrack/luci-mod-system-zram.json +new file mode 100644 +index 0000000000..56da09efc8 +--- /dev/null ++++ b/modules/luci-mod-system/root/usr/share/ucitrack/luci-mod-system-zram.json +@@ -0,0 +1,4 @@ ++{ ++ "config": "system", ++ "init": "zram" ++} +-- +2.43.5 + diff --git a/openwrt/patch/luci/applications/001-luci-app-frpc-hide-token.patch b/openwrt/patch/luci/applications/luci-app-frpc/001-luci-app-frpc-hide-token.patch similarity index 95% rename from openwrt/patch/luci/applications/001-luci-app-frpc-hide-token.patch rename to openwrt/patch/luci/applications/luci-app-frpc/001-luci-app-frpc-hide-token.patch index 2344cafe5..0ea70d299 100644 --- a/openwrt/patch/luci/applications/001-luci-app-frpc-hide-token.patch +++ b/openwrt/patch/luci/applications/luci-app-frpc/001-luci-app-frpc-hide-token.patch @@ -1,11 +1,11 @@ --- a/feeds/luci/applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js +++ b/feeds/luci/applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js -@@ -24,7 +24,7 @@ var commonConf = [ +@@ -24,7 +24,7 @@ const commonConf = [ [form.ListValue, 'log_level', _('Log level'), _('LogLevel specifies the minimum log level. Valid values are "trace", "debug", "info", "warn", and "error".
By default, this value is "info".'), {values: ['trace', 'debug', 'info', 'warn', 'error']}], [form.Value, 'log_max_days', _('Log max days'), _('LogMaxDays specifies the maximum number of days to store log information before deletion. This is only used if LogWay == "file".
By default, this value is 0.'), {datatype: 'uinteger'}], [form.Flag, 'disable_log_color', _('Disable log color'), _('DisableLogColor disables log colors when LogWay == "console" when set to true.'), {datatype: 'bool', default: 'false'}], - [form.Value, 'token', _('Token'), _('Token specifies the authorization token used to create keys to be sent to the server. The server must have a matching token for authorization to succeed.
By default, this value is "".')], + [form.Value, 'token', _('Token'), _('Token specifies the authorization token used to create keys to be sent to the server. The server must have a matching token for authorization to succeed.
By default, this value is "".'), {password: true}], - [form.Value, 'admin_addr', _('Admin address'), _('AdminAddr specifies the address that the admin server binds to.
By default, this value is "127.0.0.1".'), {datatype: 'ipaddr'}], + [form.Value, 'admin_addr', _('Admin address'), _('AdminAddr specifies the address that the admin server binds to.
By default, this value is "0.0.0.0".'), {datatype: 'ipaddr'}], [form.Value, 'admin_port', _('Admin port'), _('AdminPort specifies the port for the admin server to listen on. If this value is 0, the admin server will not be started.
By default, this value is 0.'), {datatype: 'port'}], [form.Value, 'admin_user', _('Admin user'), _('AdminUser specifies the username that the admin server will use for login.
By default, this value is "admin".')], diff --git a/openwrt/patch/luci/applications/002-luci-app-frpc-add-enable-flag.patch b/openwrt/patch/luci/applications/luci-app-frpc/002-luci-app-frpc-add-enable-flag.patch similarity index 81% rename from openwrt/patch/luci/applications/002-luci-app-frpc-add-enable-flag.patch rename to openwrt/patch/luci/applications/luci-app-frpc/002-luci-app-frpc-add-enable-flag.patch index 189d53666..11e215f80 100644 --- a/openwrt/patch/luci/applications/002-luci-app-frpc-add-enable-flag.patch +++ b/openwrt/patch/luci/applications/luci-app-frpc/002-luci-app-frpc-add-enable-flag.patch @@ -3,7 +3,7 @@ @@ -7,11 +7,10 @@ // [Widget, Option, Title, Description, {Param: 'Value'}], - var startupConf = [ + const startupConf = [ - [form.Flag, 'stdout', _('Log stdout')], - [form.Flag, 'stderr', _('Log stderr')], + [form.Flag, 'enable', _('Enable'), undefined, {datatype: 'bool', default: 'true', rmempty: false}], @@ -11,6 +11,6 @@ [widgets.GroupSelect, 'group', _('Run daemon as group')], - [form.Flag, 'respawn', _('Respawn when crashed')], + [form.Flag, 'respawn', _('Respawn when crashed'), undefined, {datatype: 'bool', default: 'true', rmempty: false}], - [form.DynamicList, 'env', _('Environment variable'), _('OS environments pass to frp for config file template, see frp README'), {placeholder: 'ENV_NAME=value'}], + [form.DynamicList, 'env', _('Environment variable'), _('OS environments pass to frp for config file template, see %s.'.format('frp README')), {placeholder: 'ENV_NAME=value'}], [form.DynamicList, 'conf_inc', _('Additional configs'), _('Config files include in temporary config file'), {placeholder: '/etc/frp/frpc.d/frpc_full.ini'}] ]; diff --git a/openwrt/patch/luci/applications/luci-app-natmap/0001-luci-app-natmap-add-default-STUN-server-lists.patch b/openwrt/patch/luci/applications/luci-app-natmap/0001-luci-app-natmap-add-default-STUN-server-lists.patch new file mode 100644 index 000000000..3355bd53f --- /dev/null +++ b/openwrt/patch/luci/applications/luci-app-natmap/0001-luci-app-natmap-add-default-STUN-server-lists.patch @@ -0,0 +1,44 @@ +From 9c27ce31bb6e561af47e2b6c1f47f1cbd96bdabd Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Sun, 27 Oct 2024 06:14:22 +0800 +Subject: [PATCH] luci-app-natmap: add default STUN server lists + +Signed-off-by: sbwml +--- + .../htdocs/luci-static/resources/view/natmap.js | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js b/applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js +index 6c01d88..f64e4ed 100644 +--- a/applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js ++++ b/applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js +@@ -85,12 +85,26 @@ return view.extend({ + o.depends('udp_mode', '1'); + + o = s.option(form.Value, 'stun_server', _('STUN server')); ++ o.value('stun.voipia.net'); ++ o.value('stun.m-online.net'); ++ o.value('stun.siptrunk.com'); ++ o.value('stun.hot-chilli.net'); ++ o.value('stun.fitauto.ru'); ++ o.value('stun.cooluc.com'); ++ o.default = 'stun.voipia.net'; + o.datatype = 'string'; + o.modalonly = true; + o.optional = false; + o.rmempty = false; + + o = s.option(form.Value, 'http_server', _('HTTP server'), _('For TCP mode')); ++ o.value('stun.voipia.net'); ++ o.value('stun.m-online.net'); ++ o.value('stun.siptrunk.com'); ++ o.value('stun.hot-chilli.net'); ++ o.value('stun.fitauto.ru'); ++ o.value('stun.cooluc.com'); ++ o.default = 'stun.voipia.net'; + o.datatype = 'string'; + o.modalonly = true; + o.rmempty = false; +-- +2.43.5 + diff --git a/openwrt/patch/luci/applications/luci-app-package-manager/0001-luci-app-package-manager-support-installing-uploaded.patch b/openwrt/patch/luci/applications/luci-app-package-manager/0001-luci-app-package-manager-support-installing-uploaded.patch new file mode 100644 index 000000000..0b8ff3cf9 --- /dev/null +++ b/openwrt/patch/luci/applications/luci-app-package-manager/0001-luci-app-package-manager-support-installing-uploaded.patch @@ -0,0 +1,65 @@ +From 17678ba3c7b04b39a9aef9751ad645f3671b4ecd Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Wed, 11 Feb 2026 01:11:00 +0800 +Subject: [PATCH] luci-app-package-manager: support installing uploaded APK + without signature + +Signed-off-by: sbwml +--- + .../htdocs/luci-static/resources/view/package-manager.js | 2 +- + .../root/usr/libexec/package-manager-call | 5 ++++- + .../root/usr/share/rpcd/acl.d/luci-app-package-manager.json | 2 ++ + 3 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/applications/luci-app-package-manager/htdocs/luci-static/resources/view/package-manager.js b/applications/luci-app-package-manager/htdocs/luci-static/resources/view/package-manager.js +index e6b1a45..4d62fcc 100644 +--- a/applications/luci-app-package-manager/htdocs/luci-static/resources/view/package-manager.js ++++ b/applications/luci-app-package-manager/htdocs/luci-static/resources/view/package-manager.js +@@ -1122,7 +1122,7 @@ function handleUpload(ev) + }, _('Cancel')), ' ', + E('div', { + 'class': 'btn cbi-button-action', +- 'data-command': 'install', ++ 'data-command': 'install-upload', + 'data-package': path, + 'click': function(ev) { + handlePkg(ev).finally(function() { +diff --git a/applications/luci-app-package-manager/root/usr/libexec/package-manager-call b/applications/luci-app-package-manager/root/usr/libexec/package-manager-call +index b641483..82fa58c 100755 +--- a/applications/luci-app-package-manager/root/usr/libexec/package-manager-call ++++ b/applications/luci-app-package-manager/root/usr/libexec/package-manager-call +@@ -27,7 +27,7 @@ case "$action" in + find "${lists_dir:-/usr/lib/opkg/lists}" -type f '!' -name '*.sig' | xargs -r gzip -cd + fi + ;; +- install|update|upgrade|remove) ++ install|install-upload|update|upgrade|remove) + ( + cmd="$ipkg_bin" + +@@ -37,6 +37,9 @@ case "$action" in + install) + action="add" + ;; ++ install-upload) ++ action="add --allow-untrusted" ++ ;; + remove) + action="del" + ;; +diff --git a/applications/luci-app-package-manager/root/usr/share/rpcd/acl.d/luci-app-package-manager.json b/applications/luci-app-package-manager/root/usr/share/rpcd/acl.d/luci-app-package-manager.json +index 8d55186..6ec7947 100644 +--- a/applications/luci-app-package-manager/root/usr/share/rpcd/acl.d/luci-app-package-manager.json ++++ b/applications/luci-app-package-manager/root/usr/share/rpcd/acl.d/luci-app-package-manager.json +@@ -20,6 +20,8 @@ + "file": { + "/usr/libexec/package-manager-call install": [ "exec" ], + "/usr/libexec/package-manager-call install *": [ "exec" ], ++ "/usr/libexec/package-manager-call install-upload": [ "exec" ], ++ "/usr/libexec/package-manager-call install-upload *": [ "exec" ], + "/usr/libexec/package-manager-call remove *": [ "exec" ], + "/usr/libexec/package-manager-call update": [ "exec" ], + "/usr/libexec/package-manager-call upgrade": [ "exec" ], +-- +2.43.5 + diff --git a/openwrt/patch/luci/dhcp/README.md b/openwrt/patch/luci/dhcp/README.md deleted file mode 100644 index 107de0f44..000000000 --- a/openwrt/patch/luci/dhcp/README.md +++ /dev/null @@ -1 +0,0 @@ -### LuCI DHCP COMMIT: https://github.com/openwrt/luci/commit/1f36628bc60f6e1f33667b025917eebec19d3162 diff --git a/openwrt/patch/luci/dhcp/dhcp.js b/openwrt/patch/luci/dhcp/dhcp.js deleted file mode 100644 index 1074beb66..000000000 --- a/openwrt/patch/luci/dhcp/dhcp.js +++ /dev/null @@ -1,1110 +0,0 @@ -'use strict'; -'require view'; -'require dom'; -'require poll'; -'require rpc'; -'require uci'; -'require form'; -'require network'; -'require validation'; -'require tools.widgets as widgets'; - -var callHostHints, callDUIDHints, callDHCPLeases, CBILeaseStatus, CBILease6Status; - -callHostHints = rpc.declare({ - object: 'luci-rpc', - method: 'getHostHints', - expect: { '': {} } -}); - -callDUIDHints = rpc.declare({ - object: 'luci-rpc', - method: 'getDUIDHints', - expect: { '': {} } -}); - -callDHCPLeases = rpc.declare({ - object: 'luci-rpc', - method: 'getDHCPLeases', - expect: { '': {} } -}); - -CBILeaseStatus = form.DummyValue.extend({ - renderWidget: function(section_id, option_id, cfgvalue) { - return E([ - E('h4', _('Active DHCP Leases')), - E('table', { 'id': 'lease_status_table', 'class': 'table' }, [ - E('tr', { 'class': 'tr table-titles' }, [ - E('th', { 'class': 'th' }, _('Hostname')), - E('th', { 'class': 'th' }, _('IPv4 address')), - E('th', { 'class': 'th' }, _('MAC address')), - E('th', { 'class': 'th' }, _('Lease time remaining')) - ]), - E('tr', { 'class': 'tr placeholder' }, [ - E('td', { 'class': 'td' }, E('em', _('Collecting data...'))) - ]) - ]) - ]); - } -}); - -CBILease6Status = form.DummyValue.extend({ - renderWidget: function(section_id, option_id, cfgvalue) { - return E([ - E('h4', _('Active DHCPv6 Leases')), - E('table', { 'id': 'lease6_status_table', 'class': 'table' }, [ - E('tr', { 'class': 'tr table-titles' }, [ - E('th', { 'class': 'th' }, _('Host')), - E('th', { 'class': 'th' }, _('IPv6 address')), - E('th', { 'class': 'th' }, _('DUID')), - E('th', { 'class': 'th' }, _('Lease time remaining')) - ]), - E('tr', { 'class': 'tr placeholder' }, [ - E('td', { 'class': 'td' }, E('em', _('Collecting data...'))) - ]) - ]) - ]); - } -}); - -function calculateNetwork(addr, mask) { - addr = validation.parseIPv4(String(addr)); - - if (!isNaN(mask)) - mask = validation.parseIPv4(network.prefixToMask(+mask)); - else - mask = validation.parseIPv4(String(mask)); - - if (addr == null || mask == null) - return null; - - return [ - [ - addr[0] & (mask[0] >>> 0 & 255), - addr[1] & (mask[1] >>> 0 & 255), - addr[2] & (mask[2] >>> 0 & 255), - addr[3] & (mask[3] >>> 0 & 255) - ].join('.'), - mask.join('.') - ]; -} - -function generateDnsmasqInstanceEntry(data) { - const nameValueMap = new Map(Object.entries(data)); - let formatString = nameValueMap.get('.index') + ' (' + _('Name') + (nameValueMap.get('.anonymous') ? ': dnsmasq[' + nameValueMap.get('.index') + ']': ': ' + nameValueMap.get('.name')); - - if (data.domain) { - formatString += ', ' + _('Domain') + ': ' + data.domain; - } - if (data.local) { - formatString += ', ' + _('Local') + ': ' + data.local; - } - formatString += ')'; - - return [nameValueMap.get('.name'), formatString]; -} - -function getDHCPPools() { - return uci.load('dhcp').then(function() { - let sections = uci.sections('dhcp', 'dhcp'), - tasks = [], pools = []; - - for (var i = 0; i < sections.length; i++) { - if (sections[i].ignore == '1' || !sections[i].interface) - continue; - - tasks.push(network.getNetwork(sections[i].interface).then(L.bind(function(section_id, net) { - var cidr = net ? (net.getIPAddrs()[0] || '').split('/') : null; - - if (cidr && cidr.length == 2) { - var net_mask = calculateNetwork(cidr[0], cidr[1]); - - pools.push({ - section_id: section_id, - network: net_mask[0], - netmask: net_mask[1] - }); - } - }, null, sections[i]['.name']))); - } - - return Promise.all(tasks).then(function() { - return pools; - }); - }); -} - -function validateHostname(sid, s) { - if (s == null || s == '') - return true; - - if (s.length > 256) - return _('Expecting: %s').format(_('valid hostname')); - - var labels = s.replace(/^\*?\.?|\.$/g, '').split(/\./); - - for (var i = 0; i < labels.length; i++) - if (!labels[i].match(/^[a-z0-9_](?:[a-z0-9-]{0,61}[a-z0-9])?$/i)) - return _('Expecting: %s').format(_('valid hostname')); - - return true; -} - -function validateAddressList(sid, s) { - if (s == null || s == '') - return true; - - var m = s.match(/^\/(.+)\/$/), - names = m ? m[1].split(/\//) : [ s ]; - - for (var i = 0; i < names.length; i++) { - var res = validateHostname(sid, names[i]); - - if (res !== true) - return res; - } - - return true; -} - -function validateServerSpec(sid, s) { - if (s == null || s == '') - return true; - - var m = s.match(/^(\/.*\/)?(.*)$/); - if (!m) - return _('Expecting: %s').format(_('valid hostname')); - - if (m[1] != '//' && m[1] != '/#/') { - var res = validateAddressList(sid, m[1]); - if (res !== true) - return res; - } - - if (m[2] == '' || m[2] == '#') - return true; - - // ipaddr%scopeid#srvport@source@interface#srcport - - m = m[2].match(/^([0-9a-f:.]+)(?:%[^#@]+)?(?:#(\d+))?(?:@([0-9a-f:.]+)(?:@[^#]+)?(?:#(\d+))?)?$/); - - if (!m) - return _('Expecting: %s').format(_('valid IP address')); - - if (validation.parseIPv4(m[1])) { - if (m[3] != null && !validation.parseIPv4(m[3])) - return _('Expecting: %s').format(_('valid IPv4 address')); - } - else if (validation.parseIPv6(m[1])) { - if (m[3] != null && !validation.parseIPv6(m[3])) - return _('Expecting: %s').format(_('valid IPv6 address')); - } - else { - return _('Expecting: %s').format(_('valid IP address')); - } - - if ((m[2] != null && +m[2] > 65535) || (m[4] != null && +m[4] > 65535)) - return _('Expecting: %s').format(_('valid port value')); - - return true; -} - -function expandAndFormatMAC(macs) { - let result = []; - - macs.forEach(mac => { - if (isValidMAC(mac)) { - const expandedMac = mac.split(':').map(part => { - return (part.length === 1 && part !== '*') ? '0' + part : part; - }).join(':').toUpperCase(); - result.push(expandedMac); - } - }); - - return result.length ? result : null; -} - -function isValidMAC(sid, s) { - if (!s) - return true; - - let macaddrs = L.toArray(s); - - for (var i = 0; i < macaddrs.length; i++) - if (!macaddrs[i].match(/^(([0-9a-f]{1,2}|\*)[:-]){5}([0-9a-f]{1,2}|\*)$/i)) - return _('Expecting a valid MAC address, optionally including wildcards') + _('; invalid MAC: ') + macaddrs[i]; - - return true; -} - -function validateMACAddr(pools, sid, s) { - if (s == null || s == '') - return true; - - var leases = uci.sections('dhcp', 'host'), - this_macs = L.toArray(s).map(function(m) { return m.toUpperCase() }); - - for (var i = 0; i < pools.length; i++) { - var this_net_mask = calculateNetwork(this.section.formvalue(sid, 'ip'), pools[i].netmask); - - if (!this_net_mask) - continue; - - for (var j = 0; j < leases.length; j++) { - if (leases[j]['.name'] == sid || !leases[j].ip) - continue; - - var lease_net_mask = calculateNetwork(leases[j].ip, pools[i].netmask); - - if (!lease_net_mask || this_net_mask[0] != lease_net_mask[0]) - continue; - - var lease_macs = L.toArray(leases[j].mac).map(function(m) { return m.toUpperCase() }); - - for (var k = 0; k < lease_macs.length; k++) - for (var l = 0; l < this_macs.length; l++) - if (lease_macs[k] == this_macs[l]) - return _('The MAC address %h is already used by another static lease in the same DHCP pool').format(this_macs[l]); - } - } - - return isValidMAC(sid, s); -} - -return view.extend({ - load: function() { - return Promise.all([ - callHostHints(), - callDUIDHints(), - getDHCPPools(), - network.getNetworks() - ]); - }, - - render: function(hosts_duids_pools) { - var has_dhcpv6 = L.hasSystemFeature('dnsmasq', 'dhcpv6') || L.hasSystemFeature('odhcpd'), - hosts = hosts_duids_pools[0], - duids = hosts_duids_pools[1], - pools = hosts_duids_pools[2], - networks = hosts_duids_pools[3], - m, s, o, ss, so; - - let noi18nstrings = { - etc_hosts: '/etc/hosts', - etc_ethers: '/etc/ethers', - localhost_v6: '::1', - loopback_slash_8_v4: '127.0.0.0/8', - not_found: 'Not found', - nxdomain: 'NXDOMAIN', - rfc_1918_link: 'RFC1918', - rfc_4193_link: 'RFC4193', - rfc_4291_link: 'RFC4291', - rfc_6303_link: 'RFC6303', - reverse_arpa: '*.IN-ADDR.ARPA,*.IP6.ARPA', - servers_file_entry01: 'server=1.2.3.4', - servers_file_entry02: 'server=/domain/1.2.3.4', - - }; - - function customi18n(template, values) { - if (!values) - values = noi18nstrings; - return template.replace(/\{(\w+)\}/g, (match, key) => values[key] || match); - }; - - m = new form.Map('dhcp', _('DHCP and DNS'), - _('Dnsmasq is a lightweight DHCP server and DNS forwarder.')); - - s = m.section(form.TypedSection, 'dnsmasq'); - s.anonymous = true; - s.addremove = false; - - s.tab('general', _('General Settings')); - s.tab('advanced', _('Advanced Settings')); - s.tab('leases', _('Static Leases')); - s.tab('files', _('Resolv and Hosts Files')); - s.tab('hosts', _('Hostnames')); - s.tab('ipsets', _('IP Sets')); - s.tab('relay', _('Relay')); - s.tab('srvhosts', _('SRV')); - s.tab('mxhosts', _('MX')); - s.tab('cnamehosts', _('CNAME')); - s.tab('pxe_tftp', _('PXE/TFTP Settings')); - - s.taboption('general', form.Flag, 'domainneeded', - _('Domain required'), - _('Never forward DNS queries which lack dots or domain parts.') + '
' + - customi18n(_('Names not in {etc_hosts} are answered {not_found}.') ) - ); - s.taboption('general', form.Flag, 'authoritative', - _('Authoritative'), - _('This is the only DHCP server in the local network.')); - - o = s.taboption('general', form.Value, 'local', - _('Resolve these locally'), - _('Never forward these matching domains or subdomains; resolve from DHCP or hosts files only.')); - o.placeholder = '/internal.example.com/private.example.com/example.org'; - - s.taboption('general', form.Value, 'domain', - _('Local domain'), - _('Local domain suffix appended to DHCP names and hosts file entries.')); - - o = s.taboption('general', form.Flag, 'logqueries', - _('Log queries'), - _('Write received DNS queries to syslog.') + ' ' + _('Dump cache on SIGUSR1, include requesting IP.')); - o.optional = true; - - o = s.taboption('general', form.DynamicList, 'server', - _('DNS forwardings'), - _('Forward specific domain queries to specific upstream servers.')); - o.optional = true; - o.placeholder = '/*.example.org/10.1.2.3'; - o.validate = validateServerSpec; - - o = s.taboption('general', form.DynamicList, 'address', - _('Addresses'), - _('Resolve specified FQDNs to an IP.') + '
' + - customi18n(_('Syntax: {code_syntax}.'), - {code_syntax: '/fqdn[/fqdn…]/[ipaddr]'}) + '
' + - customi18n(_('{example_nx} returns {nxdomain}.', - 'hint: /example.com/ returns NXDOMAIN.'), - {example_nx: '/example.com/', nxdomain: 'NXDOMAIN'}) + '
' + - customi18n(_('{any_domain} matches any domain (and returns {nxdomain}).', - 'hint: /#/ matches any domain (and returns NXDOMAIN).'), - {any_domain:'/#/', nxdomain: 'NXDOMAIN'}) + '
' + - customi18n( - _('{example_null} returns {null_addr} addresses ({null_ipv4}, {null_ipv6}) for {example_com} and its subdomains.', - 'hint: /example.com/# returns NULL addresses (0.0.0.0, ::) for example.com and its subdomains.'), - { example_null: '/example.com/#', - null_addr: 'NULL', - null_ipv4: '0.0.0.0', - null_ipv6: '::', - example_com: 'example.com', - } - ) - ); - o.optional = true; - o.placeholder = '/router.local/router.lan/192.168.0.1'; - - o = s.taboption('general', form.DynamicList, 'ipset', - _('IP sets'), - _('List of IP sets to populate with the IPs of DNS lookup results of the FQDNs also specified here.')); - o.optional = true; - o.placeholder = '/example.org/ipset,ipset6'; - - o = s.taboption('general', form.Flag, 'rebind_protection', - _('Rebind protection'), - customi18n(_('Discard upstream responses containing {rfc_1918_link} addresses.') ) + '
' + - customi18n(_('Discard also upstream responses containing {rfc_4193_link}, Link-Local and private IPv4-Mapped {rfc_4291_link} IPv6 Addresses.') ) - ); - o.rmempty = false; - - o = s.taboption('general', form.Flag, 'rebind_localhost', - _('Allow localhost'), - customi18n( - _('Exempt {loopback_slash_8_v4} and {localhost_v6} from rebinding checks, e.g. for RBL services.') - ) - ); - o.depends('rebind_protection', '1'); - - o = s.taboption('general', form.DynamicList, 'rebind_domain', - _('Domain whitelist'), - customi18n(_('List of domains to allow {rfc_1918_link} responses for.') ) - ); - o.depends('rebind_protection', '1'); - o.optional = true; - o.placeholder = 'ihost.netflix.com'; - o.validate = validateAddressList; - - o = s.taboption('general', form.Flag, 'localservice', - _('Local service only'), - _('Accept DNS queries only from hosts whose address is on a local subnet.')); - o.optional = false; - o.rmempty = false; - - o = s.taboption('general', form.Flag, 'nonwildcard', - _('Non-wildcard'), - _('Bind only to configured interface addresses, instead of the wildcard address.')); - o.default = o.enabled; - o.optional = false; - o.rmempty = true; - - o = s.taboption('general', widgets.NetworkSelect, 'interface', - _('Listen interfaces'), - _('Listen only on the specified interfaces, and loopback if not excluded explicitly.')); - o.multiple = true; - o.nocreate = true; - - o = s.taboption('general', widgets.NetworkSelect, 'notinterface', - _('Exclude interfaces'), - _('Do not listen on the specified interfaces.')); - o.loopback = true; - o.multiple = true; - o.nocreate = true; - - o = s.taboption('relay', form.SectionValue, '__relays__', form.TableSection, 'relay', null, - _('Relay DHCP requests elsewhere. OK: v4↔v4, v6↔v6. Not OK: v4↔v6, v6↔v4.') - + '
' + _('Note: you may also need a DHCP Proxy (currently unavailable) when specifying a non-standard Relay To port(addr#port).') - + '
' + _('You may add multiple unique Relay To on the same Listen addr.')); - - ss = o.subsection; - - ss.addremove = true; - ss.anonymous = true; - ss.sortable = true; - ss.rowcolors = true; - ss.nodescriptions = true; - - so = ss.option(form.Value, 'local_addr', _('Relay from')); - so.rmempty = false; - so.datatype = 'ipaddr'; - - for (var family = 4; family <= 6; family += 2) { - for (var i = 0; i < networks.length; i++) { - if (networks[i].getName() != 'loopback') { - var addrs = (family == 6) ? networks[i].getIP6Addrs() : networks[i].getIPAddrs(); - for (var j = 0; j < addrs.length; j++) { - var addr = addrs[j].split('/')[0]; - so.value(addr, E([], [ - addr, ' (', - widgets.NetworkSelect.prototype.renderIfaceBadge(networks[i]), - ')' - ])); - } - } - } - } - - so = ss.option(form.Value, 'server_addr', _('Relay to address')); - so.rmempty = false; - so.optional = false; - so.placeholder = '192.168.10.1#535'; - - so.validate = function(section, value) { - var m = this.section.formvalue(section, 'local_addr'), - n = this.section.formvalue(section, 'server_addr'), - p; - - if (!m || !n) { - return _('Both "Relay from" and "Relay to address" must be specified.'); - } - else { - p = n.split('#'); - if (p.length > 1 && !/^[0-9]+$/.test(p[1])) - return _('Expected port number.'); - else - n = p[0]; - - if ((validation.parseIPv6(m) && validation.parseIPv6(n)) || - validation.parseIPv4(m) && validation.parseIPv4(n)) - return true; - else - return _('Address families of "Relay from" and "Relay to address" must match.') - } - return true; - }; - - - so = ss.option(widgets.NetworkSelect, 'interface', _('Only accept replies via')); - so.optional = true; - so.rmempty = false; - so.placeholder = 'lan'; - - s.taboption('files', form.Flag, 'readethers', - customi18n(_('Use {etc_ethers}') ), - customi18n(_('Read {etc_ethers} to configure the DHCP server.') ) - ); - - s.taboption('files', form.Value, 'leasefile', - _('Lease file'), - _('File to store DHCP lease information.')); - - o = s.taboption('files', form.Flag, 'noresolv', - _('Ignore resolv file')); - o.optional = true; - - o = s.taboption('files', form.Value, 'resolvfile', - _('Resolv file'), - _('File with upstream resolvers.')); - o.depends('noresolv', '0'); - o.placeholder = '/tmp/resolv.conf.d/resolv.conf.auto'; - o.optional = true; - - o = s.taboption('files', form.Flag, 'nohosts', - customi18n(_('Ignore {etc_hosts}') ) - ); - o.optional = true; - - o = s.taboption('files', form.DynamicList, 'addnhosts', - _('Additional hosts files')); - o.optional = true; - o.placeholder = '/etc/dnsmasq.hosts'; - - o = s.taboption('advanced', form.Flag, 'quietdhcp', - _('Suppress logging'), - _('Suppress logging of the routine operation for the DHCP protocol.')); - o.optional = true; - - o = s.taboption('advanced', form.Flag, 'sequential_ip', - _('Allocate IPs sequentially'), - _('Allocate IP addresses sequentially, starting from the lowest available address.')); - o.optional = true; - - o = s.taboption('advanced', form.Flag, 'boguspriv', - _('Filter private'), - customi18n( - _('Reject reverse lookups to {rfc_6303_link} IP ranges ({reverse_arpa}) not in {etc_hosts}.') ) - ); - o.default = o.enabled; - - s.taboption('advanced', form.Flag, 'filterwin2k', - _('Filter SRV/SOA service discovery'), - _('Filters SRV/SOA service discovery, to avoid triggering dial-on-demand links.') + '
' + - _('May prevent VoIP or other services from working.')); - - o = s.taboption('advanced', form.Flag, 'filter_aaaa', - _('Filter IPv6 AAAA records'), - _('Remove IPv6 addresses from the results and only return IPv4 addresses.') + '
' + - _('Can be useful if ISP has IPv6 nameservers but does not provide IPv6 routing.')); - o.optional = true; - - o = s.taboption('advanced', form.Flag, 'filter_a', - _('Filter IPv4 A records'), - _('Remove IPv4 addresses from the results and only return IPv6 addresses.')); - o.optional = true; - - s.taboption('advanced', form.Flag, 'localise_queries', - _('Localise queries'), - customi18n(_('Limit response records (from {etc_hosts}) to those that fall within the subnet of the querying interface.') ) + '
' + - _('This prevents unreachable IPs in subnets not accessible to you.') + '
' + - _('Note: IPv4 only.')); - - if (L.hasSystemFeature('dnsmasq', 'dnssec')) { - o = s.taboption('advanced', form.Flag, 'dnssec', - _('DNSSEC'), - _('Validate DNS replies and cache DNSSEC data, requires upstream to support DNSSEC.')); - o.optional = true; - - o = s.taboption('advanced', form.Flag, 'dnsseccheckunsigned', - _('DNSSEC check unsigned'), - _('Verify unsigned domain responses really come from unsigned domains.')); - o.default = o.enabled; - o.optional = true; - } - - s.taboption('advanced', form.Flag, 'expandhosts', - _('Expand hosts'), - _('Add local domain suffix to names served from hosts files.')); - - s.taboption('advanced', form.Flag, 'nonegcache', - _('No negative cache'), - _('Do not cache negative replies, e.g. for non-existent domains.')); - - o = s.taboption('advanced', form.Value, 'serversfile', - _('Additional servers file'), - customi18n(_('File listing upstream resolvers, optionally domain-specific, e.g. {servers_file_entry01}, {servers_file_entry02}.') ) - ); - o.placeholder = '/etc/dnsmasq.servers'; - - o = s.taboption('advanced', form.Flag, 'strictorder', - _('Strict order'), - _('Upstream resolvers will be queried in the order of the resolv file.')); - o.optional = true; - - o = s.taboption('advanced', form.Flag, 'allservers', - _('All servers'), - _('Query all available upstream resolvers.')); - o.optional = true; - - o = s.taboption('advanced', form.DynamicList, 'bogusnxdomain', - customi18n(_('IPs to override with {nxdomain}') ), - customi18n(_('Transform replies which contain the specified addresses or subnets into {nxdomain} responses.') ) - ); - o.optional = true; - o.placeholder = '64.94.110.11'; - - o = s.taboption('advanced', form.Value, 'port', - _('DNS server port'), - _('Listening port for inbound DNS queries.')); - o.optional = true; - o.datatype = 'port'; - o.placeholder = 53; - - o = s.taboption('advanced', form.Value, 'queryport', - _('DNS query port'), - _('Fixed source port for outbound DNS queries.')); - o.optional = true; - o.datatype = 'port'; - o.placeholder = _('any'); - - o = s.taboption('advanced', form.Value, 'dhcpleasemax', - _('Max. DHCP leases'), - _('Maximum allowed number of active DHCP leases.')); - o.optional = true; - o.datatype = 'uinteger'; - o.placeholder = _('unlimited'); - - o = s.taboption('advanced', form.Value, 'ednspacket_max', - _('Max. EDNS0 packet size'), - _('Maximum allowed size of EDNS0 UDP packets.')); - o.optional = true; - o.datatype = 'uinteger'; - o.placeholder = 1280; - - o = s.taboption('advanced', form.Value, 'dnsforwardmax', - _('Max. concurrent queries'), - _('Maximum allowed number of concurrent DNS queries.')); - o.optional = true; - o.datatype = 'uinteger'; - o.placeholder = 150; - - o = s.taboption('advanced', form.Value, 'cachesize', - _('Size of DNS query cache'), - _('Number of cached DNS entries, 10000 is maximum, 0 is no caching.')); - o.optional = true; - o.datatype = 'range(0,10000)'; - o.placeholder = 1000; - - o = s.taboption('pxe_tftp', form.Flag, 'enable_tftp', - _('Enable TFTP server'), - _('Enable the built-in single-instance TFTP server.')); - o.optional = true; - - o = s.taboption('pxe_tftp', form.Value, 'tftp_root', - _('TFTP server root'), - _('Root directory for files served via TFTP. Enable TFTP server and TFTP server root turn on the TFTP server and serve files from TFTP server root.')); - o.depends('enable_tftp', '1'); - o.optional = true; - o.placeholder = '/'; - - o = s.taboption('pxe_tftp', form.Value, 'dhcp_boot', - _('Network boot image'), - _('Filename of the boot image advertised to clients.')); - o.depends('enable_tftp', '1'); - o.optional = true; - o.placeholder = 'pxelinux.0'; - - /* PXE - https://openwrt.org/docs/guide-user/base-system/dhcp#booting_options */ - o = s.taboption('pxe_tftp', form.SectionValue, '__pxe__', form.GridSection, 'boot', null, - _('Special PXE boot options for Dnsmasq.')); - ss = o.subsection; - ss.addremove = true; - ss.anonymous = true; - ss.nodescriptions = true; - - so = ss.option(form.Value, 'filename', - _('Filename'), - _('Host requests this filename from the boot server.')); - so.optional = false; - so.placeholder = 'pxelinux.0'; - - so = ss.option(form.Value, 'servername', - _('Server name'), - _('The hostname of the boot server')); - so.optional = false; - so.placeholder = 'myNAS'; - - so = ss.option(form.Value, 'serveraddress', - _('Server address'), - _('The IP address of the boot server')); - so.optional = false; - so.placeholder = '192.168.1.2'; - - so = ss.option(form.DynamicList, 'dhcp_option', - _('DHCP Options'), - _('Options for the Network-ID. (Note: needs also Network-ID.) E.g. "42,192.168.1.4" for NTP server, "3,192.168.4.4" for default route. 0.0.0.0 means "the address of the system running dnsmasq".')); - so.optional = true; - so.placeholder = '42,192.168.1.4'; - - so = ss.option(widgets.DeviceSelect, 'networkid', - _('Network-ID'), - _('Apply DHCP Options to this net. (Empty = all clients).')); - so.optional = true; - so.noaliases = true; - - so = ss.option(form.Flag, 'force', - _('Force'), - _('Always send DHCP Options. Sometimes needed, with e.g. PXELinux.')); - so.optional = true; - - so = ss.option(form.Value, 'instance', - _('Instance'), - _('Dnsmasq instance to which this boot section is bound. If unspecified, the section is valid for all dnsmasq instances.')); - so.optional = true; - - Object.values(L.uci.sections('dhcp', 'dnsmasq')).forEach(function(val, index) { - var [name, display_str] = generateDnsmasqInstanceEntry(val); - so.value(name, display_str); - }); - - o = s.taboption('srvhosts', form.SectionValue, '__srvhosts__', form.TableSection, 'srvhost', null, - _('Bind service records to a domain name: specify the location of services. See RFC2782.').format('https://datatracker.ietf.org/doc/html/rfc2782') - + '
' + _('_service: _sip, _ldap, _imap, _stun, _xmpp-client, … . (Note: while _http is possible, no browsers support SRV records.)') - + '
' + _('_proto: _tcp, _udp, _sctp, _quic, … .') - + '
' + _('You may add multiple records for the same Target.') - + '
' + _('Larger weights (of the same prio) are given a proportionately higher probability of being selected.')); - - ss = o.subsection; - - ss.addremove = true; - ss.anonymous = true; - ss.sortable = true; - ss.rowcolors = true; - - so = ss.option(form.Value, 'srv', _('SRV'), _('Syntax:') + ' ' + '_service._proto.example.com.'); - so.rmempty = false; - so.datatype = 'hostname'; - so.placeholder = '_sip._tcp.example.com.'; - - so = ss.option(form.Value, 'target', _('Target'), _('CNAME or fqdn')); - so.rmempty = false; - so.datatype = 'hostname'; - so.placeholder = 'sip.example.com.'; - - so = ss.option(form.Value, 'port', _('Port')); - so.rmempty = false; - so.datatype = 'port'; - so.placeholder = '5060'; - - so = ss.option(form.Value, 'class', _('Priority'), _('Ordinal: lower comes first.')); - so.rmempty = true; - so.datatype = 'range(0,65535)'; - so.placeholder = '10'; - - so = ss.option(form.Value, 'weight', _('Weight')); - so.rmempty = true; - so.datatype = 'range(0,65535)'; - so.placeholder = '50'; - - o = s.taboption('mxhosts', form.SectionValue, '__mxhosts__', form.TableSection, 'mxhost', null, - _('Bind service records to a domain name: specify the location of services.') - + '
' + _('You may add multiple records for the same domain.')); - - ss = o.subsection; - - ss.addremove = true; - ss.anonymous = true; - ss.sortable = true; - ss.rowcolors = true; - ss.nodescriptions = true; - - so = ss.option(form.Value, 'domain', _('Domain')); - so.rmempty = false; - so.datatype = 'hostname'; - so.placeholder = 'example.com.'; - - so = ss.option(form.Value, 'relay', _('Relay')); - so.rmempty = false; - so.datatype = 'hostname'; - so.placeholder = 'relay.example.com.'; - - so = ss.option(form.Value, 'pref', _('Priority'), _('Ordinal: lower comes first.')); - so.rmempty = true; - so.datatype = 'range(0,65535)'; - so.placeholder = '0'; - - o = s.taboption('cnamehosts', form.SectionValue, '__cname__', form.TableSection, 'cname', null, - _('Set an alias for a hostname.')); - - ss = o.subsection; - - ss.addremove = true; - ss.anonymous = true; - ss.sortable = true; - ss.rowcolors = true; - ss.nodescriptions = true; - - so = ss.option(form.Value, 'cname', _('Domain')); - so.rmempty = false; - so.validate = validateHostname; - so.placeholder = 'www.example.com.'; - - so = ss.option(form.Value, 'target', _('Target')); - so.rmempty = false; - so.datatype = 'hostname'; - so.placeholder = 'example.com.'; - - o = s.taboption('hosts', form.SectionValue, '__hosts__', form.GridSection, 'domain', null, - _('Hostnames are used to bind a domain name to an IP address. This setting is redundant for hostnames already configured with static leases, but it can be useful to rebind an FQDN.')); - - ss = o.subsection; - - ss.addremove = true; - ss.anonymous = true; - ss.sortable = true; - - so = ss.option(form.Value, 'name', _('Hostname')); - so.rmempty = false; - so.datatype = 'hostname'; - - so = ss.option(form.Value, 'ip', _('IP address')); - so.rmempty = false; - so.datatype = 'ipaddr'; - - var ipaddrs = {}; - - Object.keys(hosts).forEach(function(mac) { - var addrs = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4); - - for (var i = 0; i < addrs.length; i++) - ipaddrs[addrs[i]] = hosts[mac].name || mac; - }); - - L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) { - so.value(ipv4, '%s (%s)'.format(ipv4, ipaddrs[ipv4])); - }); - - o = s.taboption('ipsets', form.SectionValue, '__ipsets__', form.GridSection, 'ipset', null, - _('List of IP sets to populate with the IPs of DNS lookup results of the FQDNs also specified here.') + '
' + - _('The netfilter components below are only regarded when running fw4.')); - - ss = o.subsection; - - ss.addremove = true; - ss.anonymous = true; - ss.sortable = true; - ss.rowcolors = true; - ss.nodescriptions = true; - ss.modaltitle = _('Edit IP set'); - - so = ss.option(form.DynamicList, 'name', _('Name of the set')); - so.rmempty = false; - so.editable = true; - so.datatype = 'string'; - - so = ss.option(form.DynamicList, 'domain', _('FQDN')); - so.rmempty = false; - so.editable = true; - so.datatype = 'hostname'; - - so = ss.option(form.Value, 'table', _('Netfilter table name'), _('Defaults to fw4.')); - so.editable = true; - so.placeholder = 'fw4'; - so.rmempty = true; - - so = ss.option(form.ListValue, 'table_family', _('Table IP family'), _('Defaults to IPv4+6.') + ' ' + _('Can be hinted by adding 4 or 6 to the name.') + '
' + - _('Adding an IPv6 to an IPv4 set and vice-versa silently fails.')); - so.editable = true; - so.rmempty = true; - so.value('inet', _('IPv4+6')); - so.value('ip', _('IPv4')); - so.value('ip6', _('IPv6')); - - o = s.taboption('leases', form.SectionValue, '__leases__', form.GridSection, 'host', null, - _('Static leases are used to assign fixed IP addresses and symbolic hostnames to DHCP clients. They are also required for non-dynamic interface configurations where only hosts with a corresponding lease are served.') + '

' + - _('Use the Add Button to add a new lease entry. The MAC address identifies the host, the IPv4 address specifies the fixed address to use, and the Hostname is assigned as a symbolic name to the requesting host. The optional Lease time can be used to set non-standard host-specific lease time, e.g. 12h, 3d or infinite.') + '

' + - _('The tag construct filters which host directives are used; more than one tag can be provided, in this case the request must match all of them. Tagged directives are used in preference to untagged ones. Note that one of mac, duid or hostname still needs to be specified (can be a wildcard).')); - - ss = o.subsection; - - ss.addremove = true; - ss.anonymous = true; - ss.sortable = true; - ss.nodescriptions = true; - ss.max_cols = 8; - ss.modaltitle = _('Edit static lease'); - - so = ss.option(form.Value, 'name', - _('Hostname'), - _('Optional hostname to assign')); - so.validate = validateHostname; - so.rmempty = true; - so.write = function(section, value) { - uci.set('dhcp', section, 'name', value); - uci.set('dhcp', section, 'dns', '1'); - }; - so.remove = function(section) { - uci.unset('dhcp', section, 'name'); - uci.unset('dhcp', section, 'dns'); - }; - - //this can be a .DynamicList or a .Value with a widget and dnsmasq handles multimac OK. - so = ss.option(form.DynamicList, 'mac', - _('MAC address(es)'), - _('The hardware address(es) of this entry/host.') + '

' + - _('In DHCPv4, it is possible to include more than one mac address. This allows an IP address to be associated with multiple macaddrs, and dnsmasq abandons a DHCP lease to one of the macaddrs when another asks for a lease. It only works reliably if only one of the macaddrs is active at any time.')); - //As a special case, in DHCPv4, it is possible to include more than one hardware address. eg: --dhcp-host=11:22:33:44:55:66,12:34:56:78:90:12,192.168.0.2 This allows an IP address to be associated with multiple hardware addresses, and gives dnsmasq permission to abandon a DHCP lease to one of the hardware addresses when another one asks for a lease - so.rmempty = true; - so.cfgvalue = function(section) { - var macs = uci.get('dhcp', section, 'mac'); - if(!Array.isArray(macs)){ - return expandAndFormatMAC(L.toArray(macs)); - } else { - return expandAndFormatMAC(macs); - } - }; - //removed jows renderwidget function which hindered multi-mac entry - so.validate = validateMACAddr.bind(so, pools); - Object.keys(hosts).forEach(function(mac) { - var hint = hosts[mac].name || L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4)[0]; - so.value(mac, hint ? '%s (%s)'.format(mac, hint) : mac); - }); - - so = ss.option(form.Value, 'ip', _('IPv4 address'), _('The IP address to be used for this host, or ignore to ignore any DHCP request from this host.')); - so.value('ignore', _('Ignore')); - so.datatype = 'or(ip4addr,"ignore")'; - so.validate = function(section, value) { - var m = this.section.formvalue(section, 'mac'), - n = this.section.formvalue(section, 'name'); - - if ((m && !m.length > 0) && !n) - return _('One of hostname or MAC address must be specified!'); - - if (!value || value == 'ignore') - return true; - - var leases = uci.sections('dhcp', 'host'); - - for (var i = 0; i < leases.length; i++) - if (leases[i]['.name'] != section && leases[i].ip == value) - return _('The IP address %h is already used by another static lease').format(value); - - for (var i = 0; i < pools.length; i++) { - var net_mask = calculateNetwork(value, pools[i].netmask); - - if (net_mask && net_mask[0] == pools[i].network) - return true; - } - - return _('The IP address is outside of any DHCP pool address range'); - }; - - L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) { - so.value(ipv4, ipaddrs[ipv4] ? '%s (%s)'.format(ipv4, ipaddrs[ipv4]) : ipv4); - }); - - so = ss.option(form.Value, 'leasetime', - _('Lease time'), - _('Host-specific lease time, e.g. 5m, 3h, 7d.')); - so.rmempty = true; - so.value('5m', _('5m (5 minutes)')); - so.value('3h', _('3h (3 hours)')); - so.value('12h', _('12h (12 hours - default)')); - so.value('7d', _('7d (7 days)')); - so.value('infinite', _('infinite (lease does not expire)')); - - so = ss.option(form.Value, 'duid', - _('DUID'), - _('The DHCPv6-DUID (DHCP unique identifier) of this host.')); - so.datatype = 'and(rangelength(20,36),hexstring)'; - Object.keys(duids).forEach(function(duid) { - so.value(duid, '%s (%s)'.format(duid, duids[duid].hostname || duids[duid].macaddr || duids[duid].ip6addr || '?')); - }); - - so = ss.option(form.Value, 'hostid', - _('IPv6-Suffix (hex)'), - _('The IPv6 interface identifier (address suffix) as hexadecimal number (max. 16 chars).')); - so.datatype = 'and(rangelength(0,16),hexstring)'; - - so = ss.option(form.DynamicList, 'tag', - _('Tag'), - _('Assign new, freeform tags to this entry.')); - - so = ss.option(form.DynamicList, 'match_tag', - _('Match Tag'), - _('When a host matches an entry then the special tag %s is set. Use %s to match all known hosts.').format('known', 'known') + '

' + - _('Ignore requests from unknown machines using %s.').format('!known') + '

' + - _('If a host matches an entry which cannot be used because it specifies an address on a different subnet, the tag %s is set.').format('known-othernet')); - so.value('known', _('known')); - so.value('!known', _('!known (not known)')); - so.value('known-othernet', _('known-othernet (on different subnet)')); - so.optional = true; - - so = ss.option(form.Value, 'instance', - _('Instance'), - _('Dnsmasq instance to which this DHCP host section is bound. If unspecified, the section is valid for all dnsmasq instances.')); - so.optional = true; - - Object.values(L.uci.sections('dhcp', 'dnsmasq')).forEach(function(val, index) { - var [name, display_str] = generateDnsmasqInstanceEntry(val); - so.value(name, display_str); - }); - - - so = ss.option(form.Flag, 'broadcast', - _('Broadcast'), - _('Force broadcast DHCP response.')); - - so = ss.option(form.Flag, 'dns', - _('Forward/reverse DNS'), - _('Add static forward and reverse DNS entries for this host.')); - - o = s.taboption('leases', CBILeaseStatus, '__status__'); - - if (has_dhcpv6) - o = s.taboption('leases', CBILease6Status, '__status6__'); - - return m.render().then(function(mapEl) { - poll.add(function() { - return callDHCPLeases().then(function(leaseinfo) { - var leases = Array.isArray(leaseinfo.dhcp_leases) ? leaseinfo.dhcp_leases : [], - leases6 = Array.isArray(leaseinfo.dhcp6_leases) ? leaseinfo.dhcp6_leases : []; - - cbi_update_table(mapEl.querySelector('#lease_status_table'), - leases.map(function(lease) { - var exp; - - if (lease.expires === false) - exp = E('em', _('unlimited')); - else if (lease.expires <= 0) - exp = E('em', _('expired')); - else - exp = '%t'.format(lease.expires); - - var hint = lease.macaddr ? hosts[lease.macaddr] : null, - name = hint ? hint.name : null, - host = null; - - if (name && lease.hostname && lease.hostname != name) - host = '%s (%s)'.format(lease.hostname, name); - else if (lease.hostname) - host = lease.hostname; - - return [ - host || '-', - lease.ipaddr, - lease.macaddr, - exp - ]; - }), - E('em', _('There are no active leases'))); - - if (has_dhcpv6) { - cbi_update_table(mapEl.querySelector('#lease6_status_table'), - leases6.map(function(lease) { - var exp; - - if (lease.expires === false) - exp = E('em', _('unlimited')); - else if (lease.expires <= 0) - exp = E('em', _('expired')); - else - exp = '%t'.format(lease.expires); - - var hint = lease.macaddr ? hosts[lease.macaddr] : null, - name = hint ? (hint.name || L.toArray(hint.ipaddrs || hint.ipv4)[0] || L.toArray(hint.ip6addrs || hint.ipv6)[0]) : null, - host = null; - - if (name && lease.hostname && lease.hostname != name && lease.ip6addr != name) - host = '%s (%s)'.format(lease.hostname, name); - else if (lease.hostname) - host = lease.hostname; - else if (name) - host = name; - - return [ - host || '-', - lease.ip6addrs ? lease.ip6addrs.join('
') : lease.ip6addr, - lease.duid, - exp - ]; - }), - E('em', _('There are no active leases'))); - } - }); - }); - - return mapEl; - }); - } -}); diff --git a/openwrt/patch/mbedtls-23.05/200-Implements-AES-and-GCM-with-ARMv8-Crypto-Extensions.patch b/openwrt/patch/mbedtls-23.05/200-Implements-AES-and-GCM-with-ARMv8-Crypto-Extensions.patch deleted file mode 100644 index 4b0106d15..000000000 --- a/openwrt/patch/mbedtls-23.05/200-Implements-AES-and-GCM-with-ARMv8-Crypto-Extensions.patch +++ /dev/null @@ -1,390 +0,0 @@ -From dfb6015ca79a9fee28f7fcb0af7e350a83574b83 Mon Sep 17 00:00:00 2001 -From: "Markku-Juhani O. Saarinen" -Date: Mon, 20 Nov 2017 14:58:41 +0000 -Subject: Implements AES and GCM with ARMv8 Crypto Extensions - -A compact patch that provides AES and GCM implementations that utilize the -ARMv8 Crypto Extensions. The config flag is MBEDTLS_ARMV8CE_AES_C, which -is disabled by default as we don't do runtime checking for the feature. -The new implementation lives in armv8ce_aes.c. - -Provides similar functionality to https://github.com/ARMmbed/mbedtls/pull/432 -Thanks to Barry O'Rourke and others for that contribtion. - -Tested on a Cortex A53 device and QEMU. On a midrange phone the real AES-GCM -throughput increases about 4x, while raw AES speed is up to 10x faster. - -When cross-compiling, you want to set something like: - - export CC='aarch64-linux-gnu-gcc' - export CFLAGS='-Ofast -march=armv8-a+crypto' - scripts/config.pl set MBEDTLS_ARMV8CE_AES_C - -QEMU seems to also need - - export LDFLAGS='-static' - -Then run normal make or cmake etc. ---- - ---- /dev/null -+++ b/ChangeLog.d/armv8_crypto_extensions.txt -@@ -0,0 +1,2 @@ -+Features -+ * Support ARMv8 Cryptography Extensions for AES and GCM. ---- /dev/null -+++ b/include/mbedtls/armv8ce_aes.h -@@ -0,0 +1,63 @@ -+/** -+ * \file armv8ce_aes.h -+ * -+ * \brief ARMv8 Cryptography Extensions -- Optimized code for AES and GCM -+ */ -+ -+/* -+ * -+ * Copyright (C) 2006-2017, ARM Limited, All Rights Reserved -+ * SPDX-License-Identifier: Apache-2.0 -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); you may -+ * not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ * -+ * This file is part of mbed TLS (https://tls.mbed.org) -+ */ -+ -+#ifndef MBEDTLS_ARMV8CE_AES_H -+#define MBEDTLS_ARMV8CE_AES_H -+ -+#include "aes.h" -+ -+/** -+ * \brief [ARMv8 Crypto Extensions] AES-ECB block en(de)cryption -+ * -+ * \param ctx AES context -+ * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT -+ * \param input 16-byte input block -+ * \param output 16-byte output block -+ * -+ * \return 0 on success (cannot fail) -+ */ -+ -+int mbedtls_armv8ce_aes_crypt_ecb( mbedtls_aes_context *ctx, -+ int mode, -+ const unsigned char input[16], -+ unsigned char output[16] ); -+ -+/** -+ * \brief [ARMv8 Crypto Extensions] Multiply in GF(2^128) for GCM -+ * -+ * \param c Result -+ * \param a First operand -+ * \param b Second operand -+ * -+ * \note Both operands and result are bit strings interpreted as -+ * elements of GF(2^128) as per the GCM spec. -+ */ -+ -+void mbedtls_armv8ce_gcm_mult( unsigned char c[16], -+ const unsigned char a[16], -+ const unsigned char b[16] ); -+ -+#endif /* MBEDTLS_ARMV8CE_AES_H */ ---- a/include/mbedtls/check_config.h -+++ b/include/mbedtls/check_config.h -@@ -69,6 +69,10 @@ - #error "MBEDTLS_HAVE_TIME_DATE without MBEDTLS_HAVE_TIME does not make sense" - #endif - -+#if defined(MBEDTLS_ARMV8CE_AES_C) && !defined(MBEDTLS_HAVE_ASM) -+#error "MBEDTLS_ARMV8CE_AES_C defined, but not all prerequisites" -+#endif -+ - #if defined(MBEDTLS_CTR_DRBG_C) && !defined(MBEDTLS_AES_C) - #error "MBEDTLS_CTR_DRBG_C defined, but not all prerequisites" - #endif -@@ -959,3 +963,4 @@ typedef int mbedtls_iso_c_forbids_empty_ - - /* *INDENT-ON* */ - #endif /* MBEDTLS_CHECK_CONFIG_H */ -+ ---- a/include/mbedtls/config.h -+++ b/include/mbedtls/config.h -@@ -46,6 +46,7 @@ - * Requires support for asm() in compiler. - * - * Used in: -+ * library/armv8ce_aes.c - * library/aria.c - * library/timing.c - * include/mbedtls/bn_mul.h -@@ -2471,6 +2472,21 @@ - #define MBEDTLS_AESNI_C - - /** -+ * \def MBEDTLS_ARMV8CE_AES_C -+ * -+ * Enable ARMv8 Crypto Extensions for AES and GCM -+ * -+ * Module: library/armv8ce_aes.c -+ * Caller: library/aes.c -+ * library/gcm.c -+ * -+ * Requires: MBEDTLS_HAVE_ASM -+ * -+ * This module adds support for Armv8 Cryptography Extensions for AES and GCM. -+ */ -+//#define MBEDTLS_ARMV8CE_AES_C -+ -+/** - * \def MBEDTLS_AES_C - * - * Enable the AES block cipher. ---- a/library/aes.c -+++ b/library/aes.c -@@ -39,7 +39,9 @@ - #if defined(MBEDTLS_AESNI_C) - #include "mbedtls/aesni.h" - #endif -- -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+#include "mbedtls/armv8ce_aes.h" -+#endif - #include "mbedtls/platform.h" - - #if !defined(MBEDTLS_AES_ALT) -@@ -1076,6 +1078,11 @@ int mbedtls_aes_crypt_ecb(mbedtls_aes_co - } - #endif - -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+ // We don't do runtime checking for ARMv8 Crypto Extensions -+ return mbedtls_armv8ce_aes_crypt_ecb( ctx, mode, input, output ); -+#endif -+ - #if defined(MBEDTLS_VIA_PADLOCK_HAVE_CODE) - if (aes_padlock_ace) { - return mbedtls_padlock_xcryptecb(ctx, mode, input, output); ---- /dev/null -+++ b/library/armv8ce_aes.c -@@ -0,0 +1,142 @@ -+/* -+ * ARMv8 Cryptography Extensions -- Optimized code for AES and GCM -+ * -+ * Copyright (C) 2006-2017, ARM Limited, All Rights Reserved -+ * SPDX-License-Identifier: Apache-2.0 -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); you may -+ * not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ * -+ * This file is part of mbed TLS (https://tls.mbed.org) -+ */ -+ -+#if !defined(MBEDTLS_CONFIG_FILE) -+#include "mbedtls/config.h" -+#else -+#include MBEDTLS_CONFIG_FILE -+#endif -+ -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+ -+#include -+#include "mbedtls/armv8ce_aes.h" -+ -+#ifndef asm -+#define asm __asm -+#endif -+ -+/* -+ * [Armv8 Cryptography Extensions] AES-ECB block en(de)cryption -+ */ -+ -+#if defined(MBEDTLS_AES_C) -+ -+int mbedtls_armv8ce_aes_crypt_ecb( mbedtls_aes_context *ctx, -+ int mode, -+ const unsigned char input[16], -+ unsigned char output[16] ) -+{ -+ unsigned int i; -+ const uint8_t *rk; -+ uint8x16_t x, k; -+ -+ x = vld1q_u8( input ); /* input block */ -+ rk = (const uint8_t *) ctx->rk; /* round keys */ -+ -+ if( mode == MBEDTLS_AES_ENCRYPT ) -+ { -+ for( i = ctx->nr - 1; i != 0; i-- ) /* encryption loop */ -+ { -+ k = vld1q_u8( rk ); -+ rk += 16; -+ x = vaeseq_u8( x, k ); -+ x = vaesmcq_u8( x ); -+ } -+ k = vld1q_u8( rk ); -+ rk += 16; -+ x = vaeseq_u8( x, k ); -+ } -+ else -+ { -+ for( i = ctx->nr - 1; i != 0 ; i-- ) /* decryption loop */ -+ { -+ k = vld1q_u8( rk ); -+ rk += 16; -+ x = vaesdq_u8( x, k ); -+ x = vaesimcq_u8( x ); -+ } -+ k = vld1q_u8( rk ); -+ rk += 16; -+ x = vaesdq_u8( x, k ); -+ } -+ -+ k = vld1q_u8( rk ); /* final key just XORed */ -+ x = veorq_u8( x, k ); -+ vst1q_u8( output, x ); /* write out */ -+ -+ return ( 0 ); -+} -+ -+#endif /* MBEDTLS_AES_C */ -+ -+ -+/* -+ * [Armv8 Cryptography Extensions] Multiply in GF(2^128) for GCM -+ */ -+ -+#if defined(MBEDTLS_GCM_C) -+ -+void mbedtls_armv8ce_gcm_mult( unsigned char c[16], -+ const unsigned char a[16], -+ const unsigned char b[16] ) -+{ -+ /* GCM's GF(2^128) polynomial basis is x^128 + x^7 + x^2 + x + 1 */ -+ const uint64x2_t base = { 0, 0x86 }; /* note missing LS bit */ -+ -+ register uint8x16_t vc asm( "v0" ); /* named registers */ -+ register uint8x16_t va asm( "v1" ); /* (to avoid conflict) */ -+ register uint8x16_t vb asm( "v2" ); -+ register uint64x2_t vp asm( "v3" ); -+ -+ va = vld1q_u8( a ); /* load inputs */ -+ vb = vld1q_u8( b ); -+ vp = base; -+ -+ asm ( -+ "rbit %1.16b, %1.16b \n\t" /* reverse bit order */ -+ "rbit %2.16b, %2.16b \n\t" -+ "pmull2 %0.1q, %1.2d, %2.2d \n\t" /* v0 = a.hi * b.hi */ -+ "pmull2 v4.1q, %0.2d, %3.2d \n\t" /* mul v0 by x^64, reduce */ -+ "ext %0.16b, %0.16b, %0.16b, #8 \n\t" -+ "eor %0.16b, %0.16b, v4.16b \n\t" -+ "ext v5.16b, %2.16b, %2.16b, #8 \n\t" /* (swap hi and lo in b) */ -+ "pmull v4.1q, %1.1d, v5.1d \n\t" /* v0 ^= a.lo * b.hi */ -+ "eor %0.16b, %0.16b, v4.16b \n\t" -+ "pmull2 v4.1q, %1.2d, v5.2d \n\t" /* v0 ^= a.hi * b.lo */ -+ "eor %0.16b, %0.16b, v4.16b \n\t" -+ "pmull2 v4.1q, %0.2d, %3.2d \n\t" /* mul v0 by x^64, reduce */ -+ "ext %0.16b, %0.16b, %0.16b, #8 \n\t" -+ "eor %0.16b, %0.16b, v4.16b \n\t" -+ "pmull v4.1q, %1.1d, %2.1d \n\t" /* v0 ^= a.lo * b.lo */ -+ "eor %0.16b, %0.16b, v4.16b \n\t" -+ "rbit %0.16b, %0.16b \n\t" /* reverse bits for output */ -+ : "=w" (vc) /* q0: output */ -+ : "w" (va), "w" (vb), "w" (vp) /* q1, q2: input */ -+ : "v4", "v5" /* q4, q5: clobbered */ -+ ); -+ -+ vst1q_u8( c, vc ); /* write out */ -+} -+ -+#endif /* MBEDTLS_GCM_C */ -+ -+#endif /* MBEDTLS_ARMV8CE_AES_C */ ---- a/library/CMakeLists.txt -+++ b/library/CMakeLists.txt -@@ -15,6 +15,7 @@ set(src_crypto - aesni.c - arc4.c - aria.c -+ armv8ce_aes.c - asn1parse.c - asn1write.c - base64.c ---- a/library/gcm.c -+++ b/library/gcm.c -@@ -43,6 +43,10 @@ - #include "mbedtls/aesni.h" - #endif - -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+#include "mbedtls/armv8ce_aes.h" -+#endif -+ - #if !defined(MBEDTLS_GCM_ALT) - - /* Parameter validation macros */ -@@ -81,6 +85,12 @@ static int gcm_gen_table(mbedtls_gcm_con - return ret; - } - -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+ // we don't do feature testing with ARMv8 cryptography extensions -+ memcpy( ctx ->HL, h, 16 ); // put H at the beginning of buffer -+ return( 0 ); // that's all we need -+#endif -+ - /* pack h as two 64-bits ints, big-endian */ - hi = MBEDTLS_GET_UINT32_BE(h, 0); - lo = MBEDTLS_GET_UINT32_BE(h, 4); -@@ -191,6 +201,11 @@ static void gcm_mult(mbedtls_gcm_context - unsigned char lo, hi, rem; - uint64_t zh, zl; - -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+ mbedtls_armv8ce_gcm_mult( output, x, (const unsigned char *) ctx->HL ); -+ return; -+#endif -+ - #if defined(MBEDTLS_AESNI_HAVE_CODE) - if (mbedtls_aesni_has_support(MBEDTLS_AESNI_CLMUL)) { - unsigned char h[16]; ---- a/library/Makefile -+++ b/library/Makefile -@@ -74,6 +74,7 @@ OBJS_CRYPTO= \ - aria.o \ - asn1parse.o \ - asn1write.o \ -+ armv8ce_aes.o \ - base64.o \ - bignum.o \ - blowfish.o \ ---- a/library/version_features.c -+++ b/library/version_features.c -@@ -636,6 +636,9 @@ static const char * const features[] = { - #if defined(MBEDTLS_AESNI_C) - "MBEDTLS_AESNI_C", - #endif /* MBEDTLS_AESNI_C */ -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+ "MBEDTLS_ARMV8CE_AES_C", -+#endif /* MBEDTLS_ARMV8CE_AES_C */ - #if defined(MBEDTLS_AES_C) - "MBEDTLS_AES_C", - #endif /* MBEDTLS_AES_C */ diff --git a/openwrt/patch/mbedtls-23.05/mbedtls.patch b/openwrt/patch/mbedtls-23.05/mbedtls.patch deleted file mode 100644 index ee9029040..000000000 --- a/openwrt/patch/mbedtls-23.05/mbedtls.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/package/libs/mbedtls/Config.in -+++ b/package/libs/mbedtls/Config.in -@@ -140,6 +140,11 @@ config MBEDTLS_ECP_DP_CURVE448_ENABLED - - comment "Build Options - unselect features to reduce binary size" - -+config MBEDTLS_ARMV8CE_AES_C -+ bool "MBEDTLS_ARMV8CE_AES_C" -+ default y -+ depends on aarch64 && !TARGET_bcm27xx -+ - config MBEDTLS_CERTS_C - bool "MBEDTLS_CERTS_C" - default n ---- a/package/libs/mbedtls/Makefile -+++ b/package/libs/mbedtls/Makefile -@@ -60,6 +60,7 @@ MBEDTLS_BUILD_OPTS_CIPHERS= \ - MBEDTLS_BUILD_OPTS= \ - $(MBEDTLS_BUILD_OPTS_CURVES) \ - $(MBEDTLS_BUILD_OPTS_CIPHERS) \ -+ CONFIG_MBEDTLS_ARMV8CE_AES_C \ - CONFIG_MBEDTLS_CERTS_C \ - CONFIG_MBEDTLS_CIPHER_MODE_OFB \ - CONFIG_MBEDTLS_CIPHER_MODE_XTS \ -@@ -122,6 +123,9 @@ CSR generation (gen_key, cert_req) - endef - - TARGET_CFLAGS := $(filter-out -O%,$(TARGET_CFLAGS)) -+ifneq ($(CONFIG_MBEDTLS_ARMV8CE_AES_C),) -+ TARGET_CFLAGS := $(filter-out -march=%,$(TARGET_CFLAGS)) -+endif - - CMAKE_OPTIONS += \ - -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ diff --git a/openwrt/patch/miniupnpd/01-set-presentation_url.patch b/openwrt/patch/miniupnpd/01-set-presentation_url.patch deleted file mode 100644 index c7111295a..000000000 --- a/openwrt/patch/miniupnpd/01-set-presentation_url.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/net/miniupnpd/files/miniupnpd.init b/net/miniupnpd/files/miniupnpd.init -index de3504529..e89e4e55a 100644 ---- a/net/miniupnpd/files/miniupnpd.init -+++ b/net/miniupnpd/files/miniupnpd.init -@@ -217,6 +217,8 @@ stop_service() { - } - - start_service() { -+ uci set upnpd.config.presentation_url="http://$(uci -q get network.lan.ipaddr)/" -+ uci commit upnpd - config_load "upnpd" - config_foreach upnpd "upnpd" - } diff --git a/openwrt/patch/miniupnpd/02-force_forwarding.patch b/openwrt/patch/miniupnpd/02-force_forwarding.patch deleted file mode 100644 index bb414b2cd..000000000 --- a/openwrt/patch/miniupnpd/02-force_forwarding.patch +++ /dev/null @@ -1,260 +0,0 @@ -From 360235fcc0f5c821ad9d99ccbe5b0b465d9c85fa Mon Sep 17 00:00:00 2001 -From: Chen Minqiang -Date: Fri, 2 Jul 2021 17:59:05 +0800 -Subject: [PATCH] miniupnpd: add force_forwarding option support - -This option replace the 'ext_ip_reserved_ignore', and replace the -patch with new one - -as addr_is_reserved() behavior should not be changed, so drop the -ext_ip_reserved_ignore - -use a force_forwarding option to make the port forwarding force to -work when the router is behind NAT - -by default force_forwarding is set to 0(disabled), where change -nothing with the original behavior, and users can turn it on -according to their wishes - -Signed-off-by: Chen Minqiang ---- - net/miniupnpd/files/miniupnpd.init | 3 + - net/miniupnpd/files/upnpd.config | 1 + - ...301-options-force_forwarding-support.patch | 209 ++++++++++++++++++ - 3 files changed, 213 insertions(+) - create mode 100644 net/miniupnpd/patches/301-options-force_forwarding-support.patch - -diff --git a/net/miniupnpd/files/miniupnpd.init b/net/miniupnpd/files/miniupnpd.init -index c5a14ab..5a0696f 100644 ---- a/net/miniupnpd/files/miniupnpd.init -+++ b/net/miniupnpd/files/miniupnpd.init -@@ -63,6 +63,7 @@ upnpd() { - local use_stun stun_host stun_port uuid notify_interval presentation_url - local upnp_lease_file clean_ruleset_threshold clean_ruleset_interval - local ipv6_disable -+ local force_forwarding - - local enabled - config_get_bool enabled config enabled 1 -@@ -90,6 +91,7 @@ upnpd() { - config_get clean_ruleset_threshold config clean_ruleset_threshold - config_get clean_ruleset_interval config clean_ruleset_interval - config_get ipv6_disable config ipv6_disable 0 -+ config_get force_forwarding config force_forwarding 0 - - local conf ifname ifname6 - -@@ -142,6 +144,7 @@ upnpd() { - upnpd_write_bool igdv1 0 force_igd_desc_v1 - upnpd_write_bool use_stun 0 ext_perform_stun - upnpd_write_bool ipv6_disable $ipv6_disable -+ upnpd_write_bool force_forwarding $force_forwarding - - [ "$use_stun" -eq 0 ] || { - [ -n "$stun_host" ] && echo "ext_stun_host=$stun_host" -diff --git a/net/miniupnpd/files/upnpd.config b/net/miniupnpd/files/upnpd.config -index bd7c3ec..b03d60a 100644 ---- a/net/miniupnpd/files/upnpd.config -+++ b/net/miniupnpd/files/upnpd.config -@@ -2,6 +2,7 @@ config upnpd config - option enabled 0 - option enable_natpmp 1 - option enable_upnp 1 -+ option force_forwarding 0 - option secure_mode 1 - option log_output 0 - option download 1024 -diff --git a/net/miniupnpd/patches/301-options-force_forwarding-support.patch b/net/miniupnpd/patches/301-options-force_forwarding-support.patch -new file mode 100644 -index 000000000..ecd4b34c4 ---- /dev/null -+++ b/net/miniupnpd/patches/301-options-force_forwarding-support.patch -@@ -0,0 +1,185 @@ -+From 09690d550a1ad3cc3a8cba79aa2e970c3b2b8fbe Mon Sep 17 00:00:00 2001 -+From: Chen Minqiang -+Date: Sun, 5 Jul 2020 10:42:52 +0800 -+Subject: [PATCH] options: force_forwarding support -+ -+This make the port forwarding force to work even -+when the router is behind NAT -+ -+Signed-off-by: Chen Minqiang -+--- -+ miniupnpd.c | 12 ++++++++---- -+ miniupnpd.conf | 2 ++ -+ natpmp.c | 2 +- -+ options.c | 1 + -+ options.h | 1 + -+ testgetifaddr.c | 2 ++ -+ testportinuse.c | 2 ++ -+ upnpdescgen.c | 2 +- -+ upnpglobalvars.h | 2 ++ -+ upnpredirect.c | 2 +- -+ upnpsoap.c | 6 +++++- -+ 11 files changed, 26 insertions(+), 8 deletions(-) -+ -+--- a/miniupnpd.c -++++ b/miniupnpd.c -+@@ -1010,7 +1010,7 @@ parselanaddr(struct lan_addr_s * lan_add -+ INIT_PRINT_ERR("Error parsing address : %s\n", lan_addr->ext_ip_str); -+ return -1; -+ } -+- if(addr_is_reserved(&lan_addr->ext_ip_addr)) { -++ if(addr_is_reserved(&lan_addr->ext_ip_addr) && !GETFLAG(FORCEFORWARDINGMASK)) { -+ /* error */ -+ INIT_PRINT_ERR("Error: option ext_ip address contains reserved / private address : %s\n", lan_addr->ext_ip_str); -+ return -1; -+@@ -1252,6 +1252,10 @@ init(int argc, char * * argv, struct run -+ case UPNPEXT_IP: -+ use_ext_ip_addr = ary_options[i].value; -+ break; -++ case UPNP_FORCE_FORWARDING: -++ if(strcmp(ary_options[i].value, "yes") == 0) -++ SETFLAG(FORCEFORWARDINGMASK); -++ break; -+ case UPNPEXT_PERFORM_STUN: -+ if(strcmp(ary_options[i].value, "yes") == 0) -+ SETFLAG(PERFORMSTUNMASK); -+@@ -1859,7 +1863,7 @@ init(int argc, char * * argv, struct run -+ INIT_PRINT_ERR("Error: option ext_ip contains invalid address %s\n", use_ext_ip_addr); -+ return 1; -+ } -+- if (addr_is_reserved(&addr)) { -++ if (addr_is_reserved(&addr) && !GETFLAG(FORCEFORWARDINGMASK)) { -+ INIT_PRINT_ERR("Error: option ext_ip contains reserved / private address %s, not public routable\n", use_ext_ip_addr); -+ return 1; -+ } -+@@ -2305,7 +2309,7 @@ main(int argc, char * * argv) -+ if (getifaddr(ext_if_name, if_addr, INET_ADDRSTRLEN, &addr, NULL) < 0) { -+ syslog(LOG_WARNING, "Cannot get IP address for ext interface %s. Network is down", ext_if_name); -+ disable_port_forwarding = 1; -+- } else if (addr_is_reserved(&addr)) { -++ } else if (addr_is_reserved(&addr) && !GETFLAG(FORCEFORWARDINGMASK)) { -+ syslog(LOG_INFO, "Reserved / private IP address %s on ext interface %s: Port forwarding is impossible", if_addr, ext_if_name); -+ syslog(LOG_INFO, "You are probably behind NAT, enable option ext_perform_stun=yes to detect public IP address"); -+ syslog(LOG_INFO, "Or use ext_ip= / -o option to declare public IP address"); -+@@ -2596,7 +2600,7 @@ main(int argc, char * * argv) -+ syslog(LOG_WARNING, "Cannot get IP address for ext interface %s. Network is down", ext_if_name); -+ disable_port_forwarding = 1; -+ } else { -+- int reserved = addr_is_reserved(&addr); -++ int reserved = addr_is_reserved(&addr) && !GETFLAG(FORCEFORWARDINGMASK); -+ if (!disable_port_forwarding && reserved) { -+ syslog(LOG_INFO, "Reserved / private IP address %s on ext interface %s: Port forwarding is impossible", if_addr, ext_if_name); -+ syslog(LOG_INFO, "You are probably behind NAT, enable option ext_perform_stun=yes to detect public IP address"); -+--- a/miniupnpd.conf -++++ b/miniupnpd.conf -+@@ -12,6 +12,9 @@ -+ # the public IP address. -+ #ext_ip= -+ -++# force forwarding enable for upnp: default is no -++#force_forwarding=yes -++ -+ # WAN interface must have public IP address. Otherwise it is behind NAT -+ # and port forwarding is impossible. In some cases WAN interface can be -+ # behind unrestricted full-cone NAT 1:1 when all incoming traffic is NAT-ed and -+--- a/natpmp.c -++++ b/natpmp.c -+@@ -109,7 +109,7 @@ static void FillPublicAddressResponse(un -+ syslog(LOG_ERR, "Failed to get IP for interface %s", ext_if_name); -+ resp[3] = 3; /* Network Failure (e.g. NAT box itself -+ * has not obtained a DHCP lease) */ -+- } else if (addr_is_reserved(&addr)) { -++ } else if (addr_is_reserved(&addr) && !GETFLAG(FORCEFORWARDINGMASK)) { -+ resp[3] = 3; /* Network Failure, box has not obtained -+ public IP address */ -+ } else { -+--- a/options.c -++++ b/options.c -+@@ -35,6 +35,7 @@ static const struct { -+ { UPNPEXT_IFNAME6, "ext_ifname6" }, -+ #endif -+ { UPNPEXT_IP, "ext_ip" }, -++ { UPNP_FORCE_FORWARDING, "force_forwarding" }, -+ { UPNPEXT_PERFORM_STUN, "ext_perform_stun" }, -+ { UPNPEXT_STUN_HOST, "ext_stun_host" }, -+ { UPNPEXT_STUN_PORT, "ext_stun_port" }, -+--- a/options.h -++++ b/options.h -+@@ -21,6 +21,7 @@ enum upnpconfigoptions { -+ UPNPEXT_IFNAME6, /* ext_ifname6 */ -+ #endif -+ UPNPEXT_IP, /* ext_ip */ -++ UPNP_FORCE_FORWARDING, /* force forwarding enable for upnp */ -+ UPNPEXT_PERFORM_STUN, /* ext_perform_stun */ -+ UPNPEXT_STUN_HOST, /* ext_stun_host */ -+ UPNPEXT_STUN_PORT, /* ext_stun_port */ -+--- a/testgetifaddr.c -++++ b/testgetifaddr.c -+@@ -13,6 +13,8 @@ -+ #include "config.h" -+ #include "getifaddr.h" -+ -++int runtime_flags = 0; -++ -+ #if defined(__sun) -+ /* solaris 10 does not define LOG_PERROR */ -+ #define LOG_PERROR 0 -+--- a/testportinuse.c -++++ b/testportinuse.c -+@@ -14,6 +14,8 @@ -+ #include "config.h" -+ #include "portinuse.h" -+ -++int runtime_flags = 0; -++ -+ int main(int argc, char * * argv) -+ { -+ #ifndef CHECK_PORTINUSE -+--- a/upnpdescgen.c -++++ b/upnpdescgen.c -+@@ -1316,7 +1316,7 @@ genEventVars(int * len, const struct ser -+ else { -+ struct in_addr addr; -+ char ext_ip_addr[INET_ADDRSTRLEN]; -+- if(getifaddr(ext_if_name, ext_ip_addr, INET_ADDRSTRLEN, &addr, NULL) < 0 || addr_is_reserved(&addr)) { -++ if(getifaddr(ext_if_name, ext_ip_addr, INET_ADDRSTRLEN, &addr, NULL) < 0 || (addr_is_reserved(&addr) && !GETFLAG(FORCEFORWARDINGMASK))) { -+ str = strcat_str(str, len, &tmplen, "0.0.0.0"); -+ } else { -+ str = strcat_str(str, len, &tmplen, ext_ip_addr); -+--- a/upnpglobalvars.h -++++ b/upnpglobalvars.h -+@@ -87,6 +87,8 @@ extern int runtime_flags; -+ -+ #define PERFORMSTUNMASK 0x1000 -+ -++#define FORCEFORWARDINGMASK 0x2000 -++ -+ #define SETFLAG(mask) runtime_flags |= mask -+ #define GETFLAG(mask) (runtime_flags & mask) -+ #define CLEARFLAG(mask) runtime_flags &= ~mask -+--- a/upnpredirect.c -++++ b/upnpredirect.c -+@@ -444,7 +444,7 @@ upnp_redirect_internal(const char * rhos -+ { -+ /*syslog(LOG_INFO, "redirecting port %hu to %s:%hu protocol %s for: %s", -+ eport, iaddr, iport, protocol, desc); */ -+- if(disable_port_forwarding) -++ if(disable_port_forwarding && !GETFLAG(FORCEFORWARDINGMASK)) -+ return -1; -+ if(add_redirect_rule2(ext_if_name, rhost, eport, iaddr, iport, proto, -+ desc, timestamp) < 0) { -+--- a/upnpsoap.c -++++ b/upnpsoap.c -+@@ -348,7 +348,11 @@ GetExternalIPAddress(struct upnphttp * h -+ ext_ip_addr[0] = '\0'; -+ } else if (addr_is_reserved(&addr)) { -+ syslog(LOG_NOTICE, "private/reserved address %s is not suitable for external IP", ext_ip_addr); -+- ext_ip_addr[0] = '\0'; -++ if (!GETFLAG(FORCEFORWARDINGMASK)) { -++ ext_ip_addr[0] = '\0'; -++ } else { -++ syslog(LOG_NOTICE, "force_forwarding enable, private/reserved address %s used as external IP", ext_ip_addr); -++ } -+ } -+ } -+ #else --- -2.39.3 - diff --git a/openwrt/patch/miniupnpd/04-enable-force_forwarding-by-default.patch b/openwrt/patch/miniupnpd/04-enable-force_forwarding-by-default.patch deleted file mode 100644 index 61c88897b..000000000 --- a/openwrt/patch/miniupnpd/04-enable-force_forwarding-by-default.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/net/miniupnpd/files/upnpd.config b/net/miniupnpd/files/upnpd.config -index b03d60a..9070c27 100644 ---- a/net/miniupnpd/files/upnpd.config -+++ b/net/miniupnpd/files/upnpd.config -@@ -2,7 +2,7 @@ config upnpd config - option enabled 0 - option enable_natpmp 1 - option enable_upnp 1 -- option force_forwarding 0 -+ option force_forwarding 1 - option secure_mode 1 - option log_output 0 - option download 1024 diff --git a/openwrt/patch/mt76/Makefile b/openwrt/patch/mt76/Makefile index a07175d4d..20ef9113d 100644 --- a/openwrt/patch/mt76/Makefile +++ b/openwrt/patch/mt76/Makefile @@ -3,14 +3,14 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mt76 PKG_RELEASE=1 -PKG_LICENSE:=GPLv2 +PKG_LICENSE:=BSD-3-Clause-Clear PKG_LICENSE_FILES:= PKG_SOURCE_URL:=https://github.com/openwrt/mt76 PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2024-08-25 -PKG_SOURCE_VERSION:=904ef52a8d04f6808284011579fdd45418f643d9 -PKG_MIRROR_HASH:=4e285ac767336aab56006fc9f8ca1c35d639926b03de1d6d1667ffc939d81c87 +PKG_SOURCE_DATE:=2026-03-21 +PKG_SOURCE_VERSION:=018f60316d4dd6b4e741874eda40e2dfaa29df3b +PKG_MIRROR_HASH:=54a8125453a6fe04c89cf5335bdf0ea16c409361e1e5a79fb339d67cee26df0e PKG_MAINTAINER:=Felix Fietkau PKG_USE_NINJA:=0 @@ -41,7 +41,8 @@ define KernelPackage/mt76-default DEPENDS:= \ +kmod-mac80211 \ +@DRIVER_11AC_SUPPORT \ - +@KERNEL_PAGE_POOL + +@KERNEL_PAGE_POOL \ + @!TARGET_uml endef define KernelPackage/mt76 @@ -318,15 +319,46 @@ endef define KernelPackage/mt7996e $(KernelPackage/mt76-default) TITLE:=MediaTek MT7996E wireless driver - DEPENDS+=@PCI_SUPPORT +kmod-mt76-connac +kmod-hwmon-core +@DRIVER_11AX_SUPPORT +@KERNEL_RELAY + DEPENDS+=@PCI_SUPPORT +kmod-mt76-connac +kmod-hwmon-core +@DRIVER_11AX_SUPPORT \ + +@KERNEL_RELAY +@DRIVER_11BE_SUPPORT FILES:= $(PKG_BUILD_DIR)/mt7996/mt7996e.ko AUTOLOAD:=$(call AutoProbe,mt7996e) endef +define KernelPackage/mt7990-firmware + $(KernelPackage/mt76-default) + TITLE:=MediaTek MT7990 firmware + DEPENDS+=+kmod-mt7996e +endef + +define KernelPackage/mt7992-firmware + $(KernelPackage/mt76-default) + TITLE:=MediaTek MT7992 firmware + DEPENDS+=+kmod-mt7996e +endef + +define KernelPackage/mt7992-23-firmware + $(KernelPackage/mt76-default) + TITLE:=MediaTek MT7996 firmware (2+3 antenna variant) + DEPENDS+=+kmod-mt7996e +endef + +define KernelPackage/mt7996-firmware-common + $(KernelPackage/mt76-default) + TITLE:=MediaTek MT7996 firmware (common files) + HIDDEN:=1 +endef + define KernelPackage/mt7996-firmware $(KernelPackage/mt76-default) TITLE:=MediaTek MT7996 firmware - DEPENDS+=+kmod-mt7996e + DEPENDS+=+kmod-mt7996e +kmod-mt7996-firmware-common +endef + +define KernelPackage/mt7996-233-firmware + $(KernelPackage/mt76-default) + TITLE:=MediaTek MT7996 firmware (2+3+3 antenna variant) + DEPENDS+=+kmod-mt7996e +kmod-mt7996-firmware-common endef define KernelPackage/mt7925-firmware @@ -335,11 +367,17 @@ define KernelPackage/mt7925-firmware DEPENDS+=+kmod-mt7925e endef +define KernelPackage/mt7927-firmware + $(KernelPackage/mt76-default) + TITLE:=MediaTek MT7927 firmware + DEPENDS+=+kmod-mt7925e +endef + define KernelPackage/mt7925-common $(KernelPackage/mt76-default) TITLE:=MediaTek MT7925 wireless driver common code HIDDEN:=1 - DEPENDS+=+kmod-mt792x-common +@DRIVER_11AX_SUPPORT +kmod-hwmon-core + DEPENDS+=+kmod-mt792x-common +@DRIVER_11AX_SUPPORT +kmod-hwmon-core +@DRIVER_11BE_SUPPORT FILES:= $(PKG_BUILD_DIR)/mt7925/mt7925-common.ko endef @@ -469,6 +507,12 @@ ifdef CONFIG_PACKAGE_kmod-mt7921e endif ifdef CONFIG_PACKAGE_kmod-mt7996e PKG_MAKE_FLAGS += CONFIG_MT7996E=m + ifdef CONFIG_TARGET_airoha_an7581 + PKG_MAKE_FLAGS += CONFIG_MT76_NPU=y + PKG_MAKE_FLAGS += CONFIG_MT7996_NPU=y + NOSTDINC_FLAGS += -DCONFIG_MT76_NPU + NOSTDINC_FLAGS += -DCONFIG_MT7996_NPU + endif endif ifdef CONFIG_PACKAGE_kmod-mt7925-common PKG_MAKE_FLAGS += CONFIG_MT7925_COMMON=m @@ -630,17 +674,78 @@ define KernelPackage/mt7925-firmware/install $(1)/lib/firmware/mediatek/mt7925 endef -define KernelPackage/mt7996-firmware/install +define KernelPackage/mt7927-firmware/install + $(INSTALL_DIR) $(1)/lib/firmware/mediatek/mt7927 + cp \ + $(PKG_BUILD_DIR)/firmware/mt7927/WIFI_MT6639_PATCH_MCU_2_1_hdr.bin \ + $(PKG_BUILD_DIR)/firmware/mt7927/WIFI_RAM_CODE_MT6639_2_1.bin \ + $(1)/lib/firmware/mediatek/mt7927 +endef + +define KernelPackage/mt7990-firmware/install + $(INSTALL_DIR) $(1)/lib/firmware/mediatek/mt7996 + cp \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7990_eeprom.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7990_eeprom_2i5i.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7990_rom_patch.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7990_wm.bin \ + $(1)/lib/firmware/mediatek/mt7996 +endef + +define KernelPackage/mt7992-firmware/install + $(INSTALL_DIR) $(1)/lib/firmware/mediatek/mt7996 + cp \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_dsp.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_eeprom.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_eeprom_2i5i.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_eeprom_2i5e.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_rom_patch.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_wa.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_wm.bin \ + $(1)/lib/firmware/mediatek/mt7996 +endef + +define KernelPackage/mt7992-23-firmware/install + $(INSTALL_DIR) $(1)/lib/firmware/mediatek/mt7996 + cp \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_dsp_23.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_eeprom_23.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_eeprom_23_2i5i.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_rom_patch_23.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_wa_23.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7992_wm_23.bin \ + $(1)/lib/firmware/mediatek/mt7996 +endef + +define KernelPackage/mt7996-firmware-common/install $(INSTALL_DIR) $(1)/lib/firmware/mediatek/mt7996 cp \ $(PKG_BUILD_DIR)/firmware/mt7996/mt7996_dsp.bin \ + $(1)/lib/firmware/mediatek/mt7996 +endef + +define KernelPackage/mt7996-firmware/install + $(INSTALL_DIR) $(1)/lib/firmware/mediatek/mt7996 + cp \ $(PKG_BUILD_DIR)/firmware/mt7996/mt7996_eeprom.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7996_eeprom_2i5i6i.bin \ $(PKG_BUILD_DIR)/firmware/mt7996/mt7996_rom_patch.bin \ $(PKG_BUILD_DIR)/firmware/mt7996/mt7996_wa.bin \ $(PKG_BUILD_DIR)/firmware/mt7996/mt7996_wm.bin \ $(1)/lib/firmware/mediatek/mt7996 endef +define KernelPackage/mt7996-233-firmware/install + $(INSTALL_DIR) $(1)/lib/firmware/mediatek/mt7996 + cp \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7996_eeprom_233.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7996_eeprom_233_2i5i6i.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7996_rom_patch_233.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7996_wa_233.bin \ + $(PKG_BUILD_DIR)/firmware/mt7996/mt7996_wm_233.bin \ + $(1)/lib/firmware/mediatek/mt7996 +endef + define Package/mt76-test/install mkdir -p $(1)/usr/sbin $(INSTALL_BIN) $(PKG_BUILD_DIR)/tools/mt76-test $(1)/usr/sbin @@ -681,6 +786,7 @@ $(eval $(call KernelPackage,mt7986-firmware)) $(eval $(call KernelPackage,mt7921-firmware)) $(eval $(call KernelPackage,mt7922-firmware)) $(eval $(call KernelPackage,mt7925-firmware)) +$(eval $(call KernelPackage,mt7927-firmware)) $(eval $(call KernelPackage,mt792x-common)) $(eval $(call KernelPackage,mt792x-usb)) $(eval $(call KernelPackage,mt7921-common)) @@ -691,6 +797,11 @@ $(eval $(call KernelPackage,mt7921e)) $(eval $(call KernelPackage,mt7925u)) $(eval $(call KernelPackage,mt7925e)) $(eval $(call KernelPackage,mt7996e)) +$(eval $(call KernelPackage,mt7990-firmware)) +$(eval $(call KernelPackage,mt7992-firmware)) +$(eval $(call KernelPackage,mt7992-23-firmware)) +$(eval $(call KernelPackage,mt7996-firmware-common)) $(eval $(call KernelPackage,mt7996-firmware)) +$(eval $(call KernelPackage,mt7996-233-firmware)) $(eval $(call KernelPackage,mt76)) $(eval $(call BuildPackage,mt76-test)) diff --git a/openwrt/patch/mt76/README.md b/openwrt/patch/mt76/README.md new file mode 100644 index 000000000..1285f63e1 --- /dev/null +++ b/openwrt/patch/mt76/README.md @@ -0,0 +1 @@ +# mt76 - fix build for linux-6.18 diff --git a/openwrt/patch/mt76/patches/003-pass-LED-define-via-ccflags-y.patch b/openwrt/patch/mt76/patches/003-pass-LED-define-via-ccflags-y.patch new file mode 100644 index 000000000..243d4efee --- /dev/null +++ b/openwrt/patch/mt76/patches/003-pass-LED-define-via-ccflags-y.patch @@ -0,0 +1,26 @@ +From: Mieczyslaw Nalewaj +Date: Thu, 2 Apr 2026 19:01:10 +0200 +Subject: Subject: [PATCH] mt76: pass LED define via ccflags-y + +Replace the deprecated EXTRA_CFLAGS with ccflags-y so that +the -DCONFIG_MT76_LEDS define is applied correctly by the kernel +build system. EXTRA_CFLAGS is no longer honored by recent +kbuilds[1]; ccflags-y is the supported variable and works +on kernels 6.12 and 6.18. + +1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.18.20&id=f77bf01425b11947eeb3b5b54685212c302741b8 + +Signed-off-by: Mieczyslaw Nalewaj +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/Makefile ++++ b/Makefile +@@ -1,5 +1,5 @@ + # SPDX-License-Identifier: BSD-3-Clause-Clear +-EXTRA_CFLAGS += -Werror -DCONFIG_MT76_LEDS ++ccflags-y += -Werror -DCONFIG_MT76_LEDS + obj-m := mt76.o + obj-$(CONFIG_MT76_USB) += mt76-usb.o + obj-$(CONFIG_MT76_SDIO) += mt76-sdio.o diff --git a/openwrt/patch/mt76/patches/100-fix-build-with-linux-6.12rc2.patch b/openwrt/patch/mt76/patches/100-fix-build-with-linux-6.12rc2.patch new file mode 100644 index 000000000..7cc31573c --- /dev/null +++ b/openwrt/patch/mt76/patches/100-fix-build-with-linux-6.12rc2.patch @@ -0,0 +1,42 @@ +--- a/mt76x0/eeprom.c ++++ b/mt76x0/eeprom.c +@@ -10,7 +10,11 @@ + #include + #include + #include ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0) ++#include ++#else + #include ++#endif + #include "mt76x0.h" + #include "eeprom.h" + #include "../mt76x02_phy.h" +--- a/mt76x02_eeprom.c ++++ b/mt76x02_eeprom.c +@@ -4,7 +4,11 @@ + * Copyright (C) 2018 Lorenzo Bianconi + */ + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0) ++#include ++#else + #include ++#endif + + #include "mt76x02_eeprom.h" + +--- a/mt76x2/eeprom.c ++++ b/mt76x2/eeprom.c +@@ -5,7 +5,11 @@ + + #include + #include ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0) ++#include ++#else + #include ++#endif + #include "mt76x2.h" + #include "eeprom.h" + diff --git a/openwrt/patch/mt76/patches/102-use-hrtimer_setup-in-mt76x02u-beacon-init.patch b/openwrt/patch/mt76/patches/102-use-hrtimer_setup-in-mt76x02u-beacon-init.patch new file mode 100644 index 000000000..91c648778 --- /dev/null +++ b/openwrt/patch/mt76/patches/102-use-hrtimer_setup-in-mt76x02u-beacon-init.patch @@ -0,0 +1,31 @@ +From a95e567eb0e06d460dee234f9c845fbfb215ab11 Mon Sep 17 00:00:00 2001 +From: Mieczyslaw Nalewaj +Date: Thu, 29 Jan 2026 16:36:25 +0100 +Subject: [PATCH] wifi: mt76: use hrtimer_setup() in mt76x02u beacon init + +Replace the two-step hrtimer initialization pattern with a single +consolidated call to hrtimer_setup(). +The legacy approach of calling hrtimer_init() followed by manual +assignment to timer.function is deprecated. The new hrtimer_setup() +helper atomically initializes the timer and assigns the callback +function in one operation, eliminating the race-prone intermediate +state where the timer is initialized but lacks a handler. + +Signed-off-by: Mieczyslaw Nalewaj +--- + mt76x02_usb_core.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/mt76x02_usb_core.c ++++ b/mt76x02_usb_core.c +@@ -264,8 +264,8 @@ void mt76x02u_init_beacon_config(struct + }; + dev->beacon_ops = &beacon_ops; + +- hrtimer_init(&dev->pre_tbtt_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); +- dev->pre_tbtt_timer.function = mt76x02u_pre_tbtt_interrupt; ++ hrtimer_setup(&dev->pre_tbtt_timer, mt76x02u_pre_tbtt_interrupt, CLOCK_MONOTONIC, ++ HRTIMER_MODE_REL); + INIT_WORK(&dev->pre_tbtt_work, mt76x02u_pre_tbtt_work); + + mt76x02_init_beacon_config(dev); diff --git a/openwrt/patch/mt76/patches/201-mt76-mt7925-fix-stale-pointer-comparisons-in-change_.patch b/openwrt/patch/mt76/patches/201-mt76-mt7925-fix-stale-pointer-comparisons-in-change_.patch new file mode 100644 index 000000000..5b99ce3ea --- /dev/null +++ b/openwrt/patch/mt76/patches/201-mt76-mt7925-fix-stale-pointer-comparisons-in-change_.patch @@ -0,0 +1,46 @@ +From d0a6af22fb3ef8acd391bda3ea024738a0aca2f2 Mon Sep 17 00:00:00 2001 +From: Javier Tia +Date: Thu, 26 Mar 2026 15:12:25 -0600 +Subject: [PATCH 1/9] mt76: mt7925: fix stale pointer comparisons in + change_vif_links +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +In the error path of mt7925_change_vif_links(), the free: label iterates +over link_ids to clean up, but compares against `mconf` and `mlink` +which hold stale values from the last loop iteration rather than the +current link_id being freed. + +Use array-indexed access (mconfs[link_id] / mlinks[link_id]) to compare +against the correct per-link pointers. + +Fixes: 69acd6d910b0 ("mt76: mt7925: add mt7925_change_vif_links") +Tested-by: Marcin FM +Tested-by: Cristian-Florin Radoi +Tested-by: George Salukvadze +Tested-by: Evgeny Kapusta <3193631@gmail.com> +Tested-by: Samu Toljamo +Tested-by: Ariel Rosenfeld +Tested-by: Chapuis Dario +Tested-by: Thibaut François +Tested-by: 张旭涵 +Signed-off-by: Javier Tia +--- + mt7925/main.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/mt7925/main.c ++++ b/mt7925/main.c +@@ -2179,9 +2179,9 @@ free: + rcu_assign_pointer(mvif->link_conf[link_id], NULL); + rcu_assign_pointer(mvif->sta.link[link_id], NULL); + +- if (mconf != &mvif->bss_conf) ++ if (mconfs[link_id] != &mvif->bss_conf) + devm_kfree(dev->mt76.dev, mconfs[link_id]); +- if (mlink != &mvif->sta.deflink) ++ if (mlinks[link_id] != &mvif->sta.deflink) + devm_kfree(dev->mt76.dev, mlinks[link_id]); + } + diff --git a/openwrt/patch/mt76/patches/202-mt76-mt7925-add-320MHz-bandwidth-to-bss_rlm_tlv.patch b/openwrt/patch/mt76/patches/202-mt76-mt7925-add-320MHz-bandwidth-to-bss_rlm_tlv.patch new file mode 100644 index 000000000..def349557 --- /dev/null +++ b/openwrt/patch/mt76/patches/202-mt76-mt7925-add-320MHz-bandwidth-to-bss_rlm_tlv.patch @@ -0,0 +1,50 @@ +From 22045d299b64d853fcbaea5c201325f9b1fa6261 Mon Sep 17 00:00:00 2001 +From: Javier Tia +Date: Thu, 26 Mar 2026 15:12:26 -0600 +Subject: [PATCH 2/9] mt76: mt7925: add 320MHz bandwidth to bss_rlm_tlv +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +bss_rlm_tlv() in mt7925_mcu_bss_rlm_tlv() has no case for +NL80211_CHAN_WIDTH_320. When associated to a 320MHz BSS, the switch +falls through to default and sends bw=0 (CMD_CBW_20MHZ) to firmware +via BSS_RLM TLV. Firmware then configures the RX radio for 20MHz +and cannot decode the AP's 320MHz frames, resulting in complete data +path failure at 320MHz. + +Add the missing NL80211_CHAN_WIDTH_320 case with CMD_CBW_320MHZ and +center_chan2. + +Tested on ASUS RT-BE92U: 320MHz throughput goes from 0 Mbps to +841 Mbps (iperf3 -t30 -P8), PHY 4803 Mbps EHT-MCS11. + +Reported-by: 张旭涵 +Closes: https://github.com/openwrt/mt76/issues/927 +Tested-by: 张旭涵 +Tested-by: Marcin FM +Tested-by: Cristian-Florin Radoi +Tested-by: George Salukvadze +Tested-by: Evgeny Kapusta <3193631@gmail.com> +Tested-by: Samu Toljamo +Tested-by: Ariel Rosenfeld +Tested-by: Chapuis Dario +Tested-by: Thibaut François +Signed-off-by: Javier Tia +--- + mt7925/mcu.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/mt7925/mcu.c ++++ b/mt7925/mcu.c +@@ -2334,6 +2334,10 @@ void mt7925_mcu_bss_rlm_tlv(struct sk_bu + case NL80211_CHAN_WIDTH_160: + req->bw = CMD_CBW_160MHZ; + break; ++ case NL80211_CHAN_WIDTH_320: ++ req->bw = CMD_CBW_320MHZ; ++ req->center_chan2 = ieee80211_frequency_to_channel(freq2); ++ break; + case NL80211_CHAN_WIDTH_5: + req->bw = CMD_CBW_5MHZ; + break; diff --git a/openwrt/patch/mt76/patches/203-mt76-mt7925-handle-320MHz-bandwidth-in-RXV-and-TXS.patch b/openwrt/patch/mt76/patches/203-mt76-mt7925-handle-320MHz-bandwidth-in-RXV-and-TXS.patch new file mode 100644 index 000000000..f4b66438f --- /dev/null +++ b/openwrt/patch/mt76/patches/203-mt76-mt7925-handle-320MHz-bandwidth-in-RXV-and-TXS.patch @@ -0,0 +1,56 @@ +From fba3bc87e92a96faab126a0840bde11eab384f54 Mon Sep 17 00:00:00 2001 +From: Javier Tia +Date: Thu, 26 Mar 2026 15:12:27 -0600 +Subject: [PATCH 3/9] mt76: mt7925: handle 320MHz bandwidth in RXV and TXS +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The RX vector (RXV) and TX status (TXS) parsing in mac.c lack handling +for 320MHz channel width. When the hardware reports 320MHz in the +bandwidth field, mt7925_mac_fill_rx_rate() returns -EINVAL and +mt7925_mac_add_txs_skb() records no bandwidth stats. + +Add IEEE80211_STA_RX_BW_320 cases to both functions. The RXV parser +also handles BW_320+1 since the hardware can report 320MHz in two +adjacent encoding positions. + +Tested-by: Marcin FM +Tested-by: Cristian-Florin Radoi +Tested-by: George Salukvadze +Tested-by: Evgeny Kapusta <3193631@gmail.com> +Tested-by: Samu Toljamo +Tested-by: Ariel Rosenfeld +Tested-by: Chapuis Dario +Tested-by: Thibaut François +Tested-by: 张旭涵 +Signed-off-by: Javier Tia +--- + mt7925/mac.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/mt7925/mac.c ++++ b/mt7925/mac.c +@@ -339,6 +339,11 @@ mt7925_mac_fill_rx_rate(struct mt792x_de + case IEEE80211_STA_RX_BW_160: + status->bw = RATE_INFO_BW_160; + break; ++ /* RXV can report 320 in two positions */ ++ case IEEE80211_STA_RX_BW_320: ++ case IEEE80211_STA_RX_BW_320 + 1: ++ status->bw = RATE_INFO_BW_320; ++ break; + default: + return -EINVAL; + } +@@ -997,6 +1002,10 @@ mt7925_mac_add_txs_skb(struct mt792x_dev + stats->tx_mode[mode]++; + + switch (FIELD_GET(MT_TXS0_BW, txs)) { ++ case IEEE80211_STA_RX_BW_320: ++ rate.bw = RATE_INFO_BW_320; ++ stats->tx_bw[4]++; ++ break; + case IEEE80211_STA_RX_BW_160: + rate.bw = RATE_INFO_BW_160; + stats->tx_bw[3]++; diff --git a/openwrt/patch/mt76/patches/204-mt76-mt7925-populate-EHT-320MHz-MCS-map-in-sta_rec.patch b/openwrt/patch/mt76/patches/204-mt76-mt7925-populate-EHT-320MHz-MCS-map-in-sta_rec.patch new file mode 100644 index 000000000..915ec6697 --- /dev/null +++ b/openwrt/patch/mt76/patches/204-mt76-mt7925-populate-EHT-320MHz-MCS-map-in-sta_rec.patch @@ -0,0 +1,41 @@ +From 9c8af5c5d5c2dd6ad0d8529be1c65682c6afd6ec Mon Sep 17 00:00:00 2001 +From: Javier Tia +Date: Thu, 26 Mar 2026 15:12:28 -0600 +Subject: [PATCH 4/9] mt76: mt7925: populate EHT 320MHz MCS map in sta_rec +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The sta_rec_eht structure has a mcs_map_bw320 field, and the channel +width mapping includes NL80211_CHAN_WIDTH_320, but the 320MHz MCS/NSS +map was never copied from the station's EHT capabilities to the MCU TLV. +This prevents negotiation of 320MHz channel width even when both the +hardware and firmware advertise support for it. + +Add the missing memcpy for the 320MHz MCS map, matching the existing +pattern for BW20, BW80, and BW160. + +Tested-by: Marcin FM +Tested-by: Cristian-Florin Radoi +Tested-by: George Salukvadze +Tested-by: Evgeny Kapusta <3193631@gmail.com> +Tested-by: Samu Toljamo +Tested-by: Ariel Rosenfeld +Tested-by: Chapuis Dario +Tested-by: Thibaut François +Tested-by: 张旭涵 +Signed-off-by: Javier Tia +--- + mt7925/mcu.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/mt7925/mcu.c ++++ b/mt7925/mcu.c +@@ -1667,6 +1667,7 @@ mt7925_mcu_sta_eht_tlv(struct sk_buff *s + memcpy(eht->mcs_map_bw20, &mcs_map->only_20mhz, sizeof(eht->mcs_map_bw20)); + memcpy(eht->mcs_map_bw80, &mcs_map->bw._80, sizeof(eht->mcs_map_bw80)); + memcpy(eht->mcs_map_bw160, &mcs_map->bw._160, sizeof(eht->mcs_map_bw160)); ++ memcpy(eht->mcs_map_bw320, &mcs_map->bw._320, sizeof(eht->mcs_map_bw320)); + } + + static void diff --git a/openwrt/patch/mt76/patches/205-mt76-mt7925-advertise-EHT-320MHz-capabilities-for-6G.patch b/openwrt/patch/mt76/patches/205-mt76-mt7925-advertise-EHT-320MHz-capabilities-for-6G.patch new file mode 100644 index 000000000..43e04dfc9 --- /dev/null +++ b/openwrt/patch/mt76/patches/205-mt76-mt7925-advertise-EHT-320MHz-capabilities-for-6G.patch @@ -0,0 +1,109 @@ +From c1c5fed5ea3c6c42236b125ea4129578c15ea247 Mon Sep 17 00:00:00 2001 +From: Javier Tia +Date: Thu, 26 Mar 2026 15:12:29 -0600 +Subject: [PATCH 5/9] mt76: mt7925: advertise EHT 320MHz capabilities for 6GHz + band +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +mt7925_init_eht_caps() only populates EHT MCS/NSS maps for BW <= 80 +and BW = 160, but never sets BW = 320. This means iw phy shows no +320MHz MCS map entries even though the hardware supports 320MHz +operation in the 6GHz band. + +Add the missing 320MHz capability bits for 6GHz: + - PHY_CAP0: IEEE80211_EHT_PHY_CAP0_320MHZ_IN_6GHZ + - PHY_CAP1: beamformee SS for 320MHz + - PHY_CAP2: sounding dimensions for 320MHz + - PHY_CAP6: MCS15 support for 320MHz width + - MCS/NSS: populate bw._320 maps for 6GHz band + +Introduce is_320mhz_supported() to gate 320MHz on MT7927 only, since +MT7925 does not support 320MHz operation. + +Tested-by: Marcin FM +Tested-by: Cristian-Florin Radoi +Tested-by: George Salukvadze +Tested-by: Evgeny Kapusta <3193631@gmail.com> +Tested-by: Samu Toljamo +Tested-by: Ariel Rosenfeld +Tested-by: Chapuis Dario +Tested-by: Thibaut François +Tested-by: 张旭涵 +Signed-off-by: Javier Tia +--- + mt76_connac.h | 5 +++++ + mt7925/main.c | 22 +++++++++++++++++++++- + 2 files changed, 26 insertions(+), 1 deletion(-) + +--- a/mt76_connac.h ++++ b/mt76_connac.h +@@ -177,6 +177,11 @@ static inline bool is_mt7925(struct mt76 + return mt76_chip(dev) == 0x7925; + } + ++static inline bool is_320mhz_supported(struct mt76_dev *dev) ++{ ++ return mt76_chip(dev) == 0x7927; ++} ++ + static inline bool is_mt7920(struct mt76_dev *dev) + { + return mt76_chip(dev) == 0x7920; +--- a/mt7925/main.c ++++ b/mt7925/main.c +@@ -183,6 +183,10 @@ mt7925_init_eht_caps(struct mt792x_phy * + IEEE80211_EHT_PHY_CAP0_SU_BEAMFORMER | + IEEE80211_EHT_PHY_CAP0_SU_BEAMFORMEE; + ++ if (band == NL80211_BAND_6GHZ && is_320mhz_supported(&phy->dev->mt76)) ++ eht_cap_elem->phy_cap_info[0] |= ++ IEEE80211_EHT_PHY_CAP0_320MHZ_IN_6GHZ; ++ + eht_cap_elem->phy_cap_info[0] |= + u8_encode_bits(u8_get_bits(sts - 1, BIT(0)), + IEEE80211_EHT_PHY_CAP0_BEAMFORMEE_SS_80MHZ_MASK); +@@ -193,10 +197,20 @@ mt7925_init_eht_caps(struct mt792x_phy * + u8_encode_bits(sts - 1, + IEEE80211_EHT_PHY_CAP1_BEAMFORMEE_SS_160MHZ_MASK); + ++ if (band == NL80211_BAND_6GHZ && is_320mhz_supported(&phy->dev->mt76)) ++ eht_cap_elem->phy_cap_info[1] |= ++ u8_encode_bits(sts - 1, ++ IEEE80211_EHT_PHY_CAP1_BEAMFORMEE_SS_320MHZ_MASK); ++ + eht_cap_elem->phy_cap_info[2] = + u8_encode_bits(sts - 1, IEEE80211_EHT_PHY_CAP2_SOUNDING_DIM_80MHZ_MASK) | + u8_encode_bits(sts - 1, IEEE80211_EHT_PHY_CAP2_SOUNDING_DIM_160MHZ_MASK); + ++ if (band == NL80211_BAND_6GHZ && is_320mhz_supported(&phy->dev->mt76)) ++ eht_cap_elem->phy_cap_info[2] |= ++ u8_encode_bits(sts - 1, ++ IEEE80211_EHT_PHY_CAP2_SOUNDING_DIM_320MHZ_MASK); ++ + eht_cap_elem->phy_cap_info[3] = + IEEE80211_EHT_PHY_CAP3_NG_16_SU_FEEDBACK | + IEEE80211_EHT_PHY_CAP3_NG_16_MU_FEEDBACK | +@@ -217,7 +231,8 @@ mt7925_init_eht_caps(struct mt792x_phy * + u8_encode_bits(u8_get_bits(0x11, GENMASK(1, 0)), + IEEE80211_EHT_PHY_CAP5_MAX_NUM_SUPP_EHT_LTF_MASK); + +- val = width == NL80211_CHAN_WIDTH_160 ? 0x7 : ++ val = width == NL80211_CHAN_WIDTH_320 ? 0xf : ++ width == NL80211_CHAN_WIDTH_160 ? 0x7 : + width == NL80211_CHAN_WIDTH_80 ? 0x3 : 0x1; + eht_cap_elem->phy_cap_info[6] = + u8_encode_bits(u8_get_bits(0x11, GENMASK(4, 2)), +@@ -239,6 +254,11 @@ mt7925_init_eht_caps(struct mt792x_phy * + eht_nss->bw._160.rx_tx_mcs9_max_nss = val; + eht_nss->bw._160.rx_tx_mcs11_max_nss = val; + eht_nss->bw._160.rx_tx_mcs13_max_nss = val; ++ if (band == NL80211_BAND_6GHZ && is_320mhz_supported(&phy->dev->mt76)) { ++ eht_nss->bw._320.rx_tx_mcs9_max_nss = val; ++ eht_nss->bw._320.rx_tx_mcs11_max_nss = val; ++ eht_nss->bw._320.rx_tx_mcs13_max_nss = val; ++ } + } + + int mt7925_init_mlo_caps(struct mt792x_phy *phy) diff --git a/openwrt/patch/mt76/patches/206-mt76-mt7925-add-MT7927-chip-ID-helpers.patch b/openwrt/patch/mt76/patches/206-mt76-mt7925-add-MT7927-chip-ID-helpers.patch new file mode 100644 index 000000000..6724a2b85 --- /dev/null +++ b/openwrt/patch/mt76/patches/206-mt76-mt7925-add-MT7927-chip-ID-helpers.patch @@ -0,0 +1,55 @@ +From 56209dc45e762dafef428908877d634eeb0c4bcd Mon Sep 17 00:00:00 2001 +From: Javier Tia +Date: Thu, 26 Mar 2026 15:12:30 -0600 +Subject: [PATCH 6/9] mt76: mt7925: add MT7927 chip ID helpers +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The MediaTek MT7927 (Filogic 380) combo chip uses MT7927 WiFi silicon +that is architecturally compatible with MT7925. Extend is_mt7925() to +match chip ID 0x7927, and add is_mt7927() for code paths that need +MT7927-specific handling. + +Also add 0x7927 to is_mt76_fw_txp() to match MT7925's TXP format. + +Tested-by: Marcin FM +Tested-by: Cristian-Florin Radoi +Tested-by: George Salukvadze +Tested-by: Evgeny Kapusta <3193631@gmail.com> +Tested-by: Samu Toljamo +Tested-by: Ariel Rosenfeld +Tested-by: Chapuis Dario +Tested-by: Thibaut François +Tested-by: 张旭涵 +Signed-off-by: Javier Tia +--- + mt76_connac.h | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +--- a/mt76_connac.h ++++ b/mt76_connac.h +@@ -174,9 +174,14 @@ extern const struct wiphy_wowlan_support + + static inline bool is_mt7925(struct mt76_dev *dev) + { +- return mt76_chip(dev) == 0x7925; ++ return mt76_chip(dev) == 0x7925 || mt76_chip(dev) == 0x7927; + } + ++static inline bool is_mt7927(struct mt76_dev *dev) ++{ ++ return mt76_chip(dev) == 0x7927; ++ } ++ + static inline bool is_320mhz_supported(struct mt76_dev *dev) + { + return mt76_chip(dev) == 0x7927; +@@ -284,6 +289,7 @@ static inline bool is_mt76_fw_txp(struct + case 0x7922: + case 0x7902: + case 0x7925: ++ case 0x7927: + case 0x7663: + case 0x7622: + return false; diff --git a/openwrt/patch/mt76/patches/207-mt76-mt7925-add-MT7927-firmware-paths.patch b/openwrt/patch/mt76/patches/207-mt76-mt7925-add-MT7927-firmware-paths.patch new file mode 100644 index 000000000..c1a27f566 --- /dev/null +++ b/openwrt/patch/mt76/patches/207-mt76-mt7925-add-MT7927-firmware-paths.patch @@ -0,0 +1,77 @@ +From 4dde052ea50e332d7db57efb959a89899fc9bb9a Mon Sep 17 00:00:00 2001 +From: Javier Tia +Date: Thu, 26 Mar 2026 15:12:31 -0600 +Subject: [PATCH 7/9] mt76: mt7925: add MT7927 firmware paths +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add firmware path definitions for MT7927 WiFi firmware (WIFI_RAM_CODE +and PATCH_MCU) and the corresponding MODULE_FIRMWARE declarations. Add +MT7927 cases to mt792x_ram_name() and mt792x_patch_name() so the driver +loads the correct firmware for the 0x7927 chip ID. + +PCI device table entries are deferred to a later patch to allow +infrastructure setup before device enablement. + +Tested-by: Marcin FM +Tested-by: Cristian-Florin Radoi +Tested-by: George Salukvadze +Tested-by: Evgeny Kapusta <3193631@gmail.com> +Tested-by: Samu Toljamo +Tested-by: Ariel Rosenfeld +Tested-by: Chapuis Dario +Tested-by: Thibaut François +Tested-by: 张旭涵 +Signed-off-by: Javier Tia +--- + mt7925/pci.c | 2 ++ + mt792x.h | 6 ++++++ + 2 files changed, 8 insertions(+) + +--- a/mt7925/pci.c ++++ b/mt7925/pci.c +@@ -633,6 +633,8 @@ module_pci_driver(mt7925_pci_driver); + MODULE_DEVICE_TABLE(pci, mt7925_pci_device_table); + MODULE_FIRMWARE(MT7925_FIRMWARE_WM); + MODULE_FIRMWARE(MT7925_ROM_PATCH); ++MODULE_FIRMWARE(MT7927_FIRMWARE_WM); ++MODULE_FIRMWARE(MT7927_ROM_PATCH); + MODULE_AUTHOR("Deren Wu "); + MODULE_AUTHOR("Lorenzo Bianconi "); + MODULE_DESCRIPTION("MediaTek MT7925E (PCIe) wireless driver"); +--- a/mt792x.h ++++ b/mt792x.h +@@ -46,12 +46,14 @@ + #define MT7921_FIRMWARE_WM "mediatek/WIFI_RAM_CODE_MT7961_1.bin" + #define MT7922_FIRMWARE_WM "mediatek/WIFI_RAM_CODE_MT7922_1.bin" + #define MT7925_FIRMWARE_WM "mediatek/mt7925/WIFI_RAM_CODE_MT7925_1_1.bin" ++#define MT7927_FIRMWARE_WM "mediatek/mt7927/WIFI_RAM_CODE_MT6639_2_1.bin" + + #define MT7902_ROM_PATCH "mediatek/WIFI_MT7902_patch_mcu_1_1_hdr.bin" + #define MT7920_ROM_PATCH "mediatek/WIFI_MT7961_patch_mcu_1a_2_hdr.bin" + #define MT7921_ROM_PATCH "mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin" + #define MT7922_ROM_PATCH "mediatek/WIFI_MT7922_patch_mcu_1_1_hdr.bin" + #define MT7925_ROM_PATCH "mediatek/mt7925/WIFI_MT7925_PATCH_MCU_1_1_hdr.bin" ++#define MT7927_ROM_PATCH "mediatek/mt7927/WIFI_MT6639_PATCH_MCU_2_1_hdr.bin" + + #define MT792x_SDIO_HDR_TX_BYTES GENMASK(15, 0) + #define MT792x_SDIO_HDR_PKT_TYPE GENMASK(17, 16) +@@ -459,6 +461,8 @@ static inline char *mt792x_ram_name(stru + return MT7922_FIRMWARE_WM; + case 0x7925: + return MT7925_FIRMWARE_WM; ++ case 0x7927: ++ return MT7927_FIRMWARE_WM; + default: + return MT7921_FIRMWARE_WM; + } +@@ -475,6 +479,8 @@ static inline char *mt792x_patch_name(st + return MT7922_ROM_PATCH; + case 0x7925: + return MT7925_ROM_PATCH; ++ case 0x7927: ++ return MT7927_ROM_PATCH; + default: + return MT7921_ROM_PATCH; + } diff --git a/openwrt/patch/mt76/patches/208-mt76-mt7925-use-irq_map-for-chip-specific-interrupt-.patch b/openwrt/patch/mt76/patches/208-mt76-mt7925-use-irq_map-for-chip-specific-interrupt-.patch new file mode 100644 index 000000000..953d2bb28 --- /dev/null +++ b/openwrt/patch/mt76/patches/208-mt76-mt7925-use-irq_map-for-chip-specific-interrupt-.patch @@ -0,0 +1,116 @@ +From f25ff46ec53ee1a1f55bc457c77c184d48570a2f Mon Sep 17 00:00:00 2001 +From: Javier Tia +Date: Thu, 26 Mar 2026 15:12:32 -0600 +Subject: [PATCH 8/9] mt76: mt7925: use irq_map for chip-specific interrupt + handling +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The mac_reset and resume paths use the hardcoded MT_INT_RX_DONE_ALL +constant (bits 0-2) to re-enable RX interrupts. This is correct for +MT7925 (RX rings 0, 1, 2) but wrong for chips using different ring +indices. + +Define a per-chip irq_map with the correct RX interrupt enable bits and +replace hardcoded MT_INT_RX_DONE_ALL with irq_map field reads in the +resume and mac_reset paths. Add the MT7927 irq_map with interrupt bits +matching its RX ring layout (rings 4, 6, 7), selected at probe time +based on PCI device ID. + +This ensures the correct interrupt bits are enabled regardless of the +chip variant. + +Tested-by: Marcin FM +Tested-by: Cristian-Florin Radoi +Tested-by: George Salukvadze +Tested-by: Evgeny Kapusta <3193631@gmail.com> +Tested-by: Samu Toljamo +Tested-by: Ariel Rosenfeld +Tested-by: Chapuis Dario +Tested-by: Thibaut François +Tested-by: 张旭涵 +Signed-off-by: Javier Tia +--- + mt7925/pci.c | 21 +++++++++++++++++++-- + mt7925/pci_mac.c | 5 ++++- + mt792x_regs.h | 3 +++ + 3 files changed, 26 insertions(+), 3 deletions(-) + +--- a/mt7925/pci.c ++++ b/mt7925/pci.c +@@ -266,6 +266,18 @@ static int mt7925_dma_init(struct mt792x + return mt792x_dma_enable(dev); + } + ++static const struct mt792x_irq_map mt7927_irq_map = { ++ .host_irq_enable = MT_WFDMA0_HOST_INT_ENA, ++ .tx = { ++ .all_complete_mask = MT_INT_TX_DONE_ALL, ++ .mcu_complete_mask = MT_INT_TX_DONE_MCU, ++ }, ++ .rx = { ++ .data_complete_mask = MT7927_RX_DONE_INT_ENA4, ++ .wm_complete_mask = MT7927_RX_DONE_INT_ENA6, ++ .wm2_complete_mask = MT7927_RX_DONE_INT_ENA7, ++ }, ++}; + static int mt7925_pci_probe(struct pci_dev *pdev, + const struct pci_device_id *id) + { +@@ -310,6 +322,7 @@ static int mt7925_pci_probe(struct pci_d + struct mt76_bus_ops *bus_ops; + struct mt792x_dev *dev; + struct mt76_dev *mdev; ++ bool is_mt7927_hw; + u8 features; + int ret; + u16 cmd; +@@ -358,7 +371,8 @@ static int mt7925_pci_probe(struct pci_d + dev = container_of(mdev, struct mt792x_dev, mt76); + dev->fw_features = features; + dev->hif_ops = &mt7925_pcie_ops; +- dev->irq_map = &irq_map; ++ is_mt7927_hw = (pdev->device == 0x6639 || pdev->device == 0x7927); ++ dev->irq_map = is_mt7927_hw ? &mt7927_irq_map : &irq_map; + mt76_mmio_init(&dev->mt76, pcim_iomap_table(pdev)[0]); + tasklet_init(&mdev->irq_tasklet, mt792x_irq_tasklet, (unsigned long)dev); + +@@ -549,7 +563,10 @@ static int _mt7925_pci_resume(struct dev + mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff); + mt76_connac_irq_enable(&dev->mt76, + dev->irq_map->tx.all_complete_mask | +- MT_INT_RX_DONE_ALL | MT_INT_MCU_CMD); ++ dev->irq_map->rx.data_complete_mask | ++ dev->irq_map->rx.wm_complete_mask | ++ dev->irq_map->rx.wm2_complete_mask | ++ MT_INT_MCU_CMD); + mt76_set(dev, MT_MCU2HOST_SW_INT_ENA, MT_MCU_CMD_WAKE_RX_PCIE); + + /* put dma enabled */ +--- a/mt7925/pci_mac.c ++++ b/mt7925/pci_mac.c +@@ -118,7 +118,10 @@ int mt7925e_mac_reset(struct mt792x_dev + + mt76_wr(dev, dev->irq_map->host_irq_enable, + dev->irq_map->tx.all_complete_mask | +- MT_INT_RX_DONE_ALL | MT_INT_MCU_CMD); ++ dev->irq_map->rx.data_complete_mask | ++ dev->irq_map->rx.wm_complete_mask | ++ dev->irq_map->rx.wm2_complete_mask | ++ MT_INT_MCU_CMD); + mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff); + + err = mt792xe_mcu_fw_pmctrl(dev); +--- a/mt792x_regs.h ++++ b/mt792x_regs.h +@@ -310,6 +310,9 @@ + #define HOST_RX_DONE_INT_ENA1 BIT(1) + #define HOST_RX_DONE_INT_ENA2 BIT(2) + #define HOST_RX_DONE_INT_ENA3 BIT(3) ++#define MT7927_RX_DONE_INT_ENA4 BIT(12) ++#define MT7927_RX_DONE_INT_ENA6 BIT(14) ++#define MT7927_RX_DONE_INT_ENA7 BIT(15) + #define HOST_TX_DONE_INT_ENA0 BIT(4) + #define HOST_TX_DONE_INT_ENA1 BIT(5) + #define HOST_TX_DONE_INT_ENA2 BIT(6) diff --git a/openwrt/patch/mt76/patches/209-mt76-mt7925-disable-ASPM-and-runtime-PM-for-MT7927.patch b/openwrt/patch/mt76/patches/209-mt76-mt7925-disable-ASPM-and-runtime-PM-for-MT7927.patch new file mode 100644 index 000000000..925d9fe6b --- /dev/null +++ b/openwrt/patch/mt76/patches/209-mt76-mt7925-disable-ASPM-and-runtime-PM-for-MT7927.patch @@ -0,0 +1,56 @@ +From c2e9c5bde7646f97bb8a2298872bf8a34b693d6b Mon Sep 17 00:00:00 2001 +From: Javier Tia +Date: Thu, 26 Mar 2026 15:12:33 -0600 +Subject: [PATCH 9/9] mt76: mt7925: disable ASPM and runtime PM for MT7927 + +Disable PCIe ASPM unconditionally for MT7927. The CONNINFRA power +domain and WFDMA register access are unreliable with PCIe L1 active, +causing throughput to drop from 1+ Gbps to ~200 Mbps. + +Disable runtime PM and deep sleep for MT7927. The combo chip shares +a CONNINFRA power domain between WiFi (PCIe) and BT (USB). +SET_OWN/CLR_OWN transitions on the LPCTL register crash the BT +firmware, requiring a full power cycle to recover. PM enablement will +be addressed in a follow-up once safe power state transitions are +determined. + +Signed-off-by: Javier Tia +--- + mt7925/init.c | 3 ++- + mt7925/pci.c | 6 ++++-- + 2 files changed, 6 insertions(+), 3 deletions(-) + +--- a/mt7925/init.c ++++ b/mt7925/init.c +@@ -232,7 +232,8 @@ int mt7925_register_device(struct mt792x + dev->pm.idle_timeout = MT792x_PM_TIMEOUT; + dev->pm.stats.last_wake_event = jiffies; + dev->pm.stats.last_doze_event = jiffies; +- if (!mt76_is_usb(&dev->mt76)) { ++ /* MT7927: runtime PM crashes BT firmware on the shared CONNINFRA domain */ ++ if (!mt76_is_usb(&dev->mt76) && !is_mt7927(&dev->mt76)) { + dev->pm.enable_user = true; + dev->pm.enable = true; + dev->pm.ds_enable_user = true; +--- a/mt7925/pci.c ++++ b/mt7925/pci.c +@@ -350,7 +350,10 @@ static int mt7925_pci_probe(struct pci_d + if (ret) + goto err_free_pci_vec; + +- if (mt7925_disable_aspm) ++ is_mt7927_hw = (pdev->device == 0x6639 || pdev->device == 0x7927); ++ ++ /* MT7927: ASPM L1 causes unreliable WFDMA register access */ ++ if (mt7925_disable_aspm || is_mt7927_hw) + mt76_pci_disable_aspm(pdev); + + ops = mt792x_get_mac80211_ops(&pdev->dev, &mt7925_ops, +@@ -371,7 +374,6 @@ static int mt7925_pci_probe(struct pci_d + dev = container_of(mdev, struct mt792x_dev, mt76); + dev->fw_features = features; + dev->hif_ops = &mt7925_pcie_ops; +- is_mt7927_hw = (pdev->device == 0x6639 || pdev->device == 0x7927); + dev->irq_map = is_mt7927_hw ? &mt7927_irq_map : &irq_map; + mt76_mmio_init(&dev->mt76, pcim_iomap_table(pdev)[0]); + tasklet_init(&mdev->irq_tasklet, mt792x_irq_tasklet, (unsigned long)dev); diff --git a/openwrt/patch/mt76/src/firmware/mt7927/WIFI_MT6639_PATCH_MCU_2_1_hdr.bin b/openwrt/patch/mt76/src/firmware/mt7927/WIFI_MT6639_PATCH_MCU_2_1_hdr.bin new file mode 100644 index 000000000..1840d90d8 Binary files /dev/null and b/openwrt/patch/mt76/src/firmware/mt7927/WIFI_MT6639_PATCH_MCU_2_1_hdr.bin differ diff --git a/openwrt/patch/mt76/src/firmware/mt7927/WIFI_RAM_CODE_MT6639_2_1.bin b/openwrt/patch/mt76/src/firmware/mt7927/WIFI_RAM_CODE_MT6639_2_1.bin new file mode 100644 index 000000000..986944c6f Binary files /dev/null and b/openwrt/patch/mt76/src/firmware/mt7927/WIFI_RAM_CODE_MT6639_2_1.bin differ diff --git a/openwrt/patch/netifd/001-hack-packet_steering-for-nanopi-r76s.patch b/openwrt/patch/netifd/001-hack-packet_steering-for-nanopi-r76s.patch new file mode 100644 index 000000000..cfc352535 --- /dev/null +++ b/openwrt/patch/netifd/001-hack-packet_steering-for-nanopi-r76s.patch @@ -0,0 +1,46 @@ +diff --git a/package/network/config/netifd/files/etc/init.d/packet_steering b/package/network/config/netifd/files/etc/init.d/packet_steering +index 5266a931ae..cec2002683 100755 +--- a/package/network/config/netifd/files/etc/init.d/packet_steering ++++ b/package/network/config/netifd/files/etc/init.d/packet_steering +@@ -1,5 +1,7 @@ + #!/bin/sh /etc/rc.common + ++. /lib/functions/uci-defaults.sh ++ + START=25 + USE_PROCD=1 + +@@ -16,10 +18,29 @@ service_triggers() { + reload_service() { + packet_steering="$(uci -q get "network.@globals[0].packet_steering")" + steering_flows="$(uci -q get "network.@globals[0].steering_flows")" +- [ "${steering_flows:-0}" -gt 0 ] && opts="-l $steering_flows" +- if [ -e "/usr/libexec/platform/packet-steering.sh" ]; then +- /usr/libexec/platform/packet-steering.sh "$packet_steering" ++ if [ "$packet_steering" = "0" ] && [ "$(board_name)" = "friendlyarm,nanopi-r76s" ]; then ++ for iface in eth0 eth1; do ++ [ -d "/sys/class/net/$iface" ] || continue ++ ++ case "$iface" in ++ eth0) mask="30" ;; # CPU4-5 ++ eth1) mask="c0" ;; # CPU6-7 ++ esac ++ ++ for q in /sys/class/net/$iface/queues/rx-*; do ++ [ -e "$q/rps_cpus" ] && echo "$mask" > "$q/rps_cpus" ++ done ++ ++ for q in /sys/class/net/$iface/queues/tx-*; do ++ [ -e "$q/xps_cpus" ] && echo "$mask" > "$q/xps_cpus" ++ done ++ done + else +- /usr/libexec/network/packet-steering.uc $opts "$packet_steering" ++ [ "${steering_flows:-0}" -gt 0 ] && opts="-l $steering_flows" ++ if [ -e "/usr/libexec/platform/packet-steering.sh" ]; then ++ /usr/libexec/platform/packet-steering.sh "$packet_steering" ++ else ++ /usr/libexec/network/packet-steering.uc $opts "$packet_steering" ++ fi + fi + } diff --git a/openwrt/patch/odhcpd/001-odhcpd-RFC-9096-compliance.patch b/openwrt/patch/odhcpd/001-odhcpd-RFC-9096-compliance.patch deleted file mode 100644 index e3df56b57..000000000 --- a/openwrt/patch/odhcpd/001-odhcpd-RFC-9096-compliance.patch +++ /dev/null @@ -1,320 +0,0 @@ -From 726ca5340823e2d5f3b5e7b6ad83e52ba3be14a9 Mon Sep 17 00:00:00 2001 -From: Aviana Cruz -Date: Sat, 16 Sep 2023 15:04:12 +0000 -Subject: [PATCH] odhcpd: improve RFC 9096 compliance - -and allow configuring upper limit for preferred and valid lifetime. - -Signed-off-by: Aviana Cruz ---- - README | 12 ++++++------ - src/config.c | 35 +++++++++++++++++++++------------- - src/dhcpv6-ia.c | 50 ++++++++++++++++++++++++++++++------------------- - src/odhcpd.h | 8 ++++++-- - src/router.c | 17 ++++++++--------- - 5 files changed, 73 insertions(+), 49 deletions(-) - ---- a/README -+++ b/README -@@ -116,7 +116,9 @@ domain list Sear - leasetime string 12h DHCPv4 address leasetime - start integer 100 DHCPv4 pool start - limit integer 150 DHCPv4 pool size --preferred_lifetime string 12h Value for the preferred lifetime -+max_preferred_lifetime string 45m Upper limit for the preferred lifetime -+ for a prefix -+max_valid_lifetime string 90m Upper limit for the valid lifetime - for a prefix - ra_default integer 0 Override default route - 0: default, 1: ignore no public address, 2: ignore all -@@ -131,11 +133,9 @@ ra_maxinterval integer 600 Maximum ti - sending unsolicited RA - ra_mininterval integer 200 Minimum time allowed between - sending unsolicited RA --ra_lifetime integer 1800 Value to be placed in Router -- Lifetime field of RA --ra_useleasetime bool 0 Use configured leasetime as -- limit for the preferred and -- valid lifetime of a prefix -+ra_lifetime integer 2700 Value to be placed in Router -+ Lifetime field of RA. Not recommended to be -+ more than 2700 (RFC9096). - ra_reachabletime integer 0 Reachable Time in milliseconds to be - advertised in RA messages - ra_retranstime integer 0 Retransmit Time in milliseconds to be ---- a/src/config.c -+++ b/src/config.c -@@ -79,7 +79,6 @@ enum { - IFACE_ATTR_RA_MININTERVAL, - IFACE_ATTR_RA_MAXINTERVAL, - IFACE_ATTR_RA_LIFETIME, -- IFACE_ATTR_RA_USELEASETIME, - IFACE_ATTR_RA_REACHABLETIME, - IFACE_ATTR_RA_RETRANSTIME, - IFACE_ATTR_RA_HOPLIMIT, -@@ -91,7 +90,8 @@ enum { - IFACE_ATTR_NDPROXY_ROUTING, - IFACE_ATTR_NDPROXY_SLAVE, - IFACE_ATTR_PREFIX_FILTER, -- IFACE_ATTR_PREFERRED_LIFETIME, -+ IFACE_ATTR_MAX_PREFERRED_LIFETIME, -+ IFACE_ATTR_MAX_VALID_LIFETIME, - IFACE_ATTR_NTP, - IFACE_ATTR_MAX - }; -@@ -134,7 +134,6 @@ static const struct blobmsg_policy iface - [IFACE_ATTR_RA_MININTERVAL] = { .name = "ra_mininterval", .type = BLOBMSG_TYPE_INT32 }, - [IFACE_ATTR_RA_MAXINTERVAL] = { .name = "ra_maxinterval", .type = BLOBMSG_TYPE_INT32 }, - [IFACE_ATTR_RA_LIFETIME] = { .name = "ra_lifetime", .type = BLOBMSG_TYPE_INT32 }, -- [IFACE_ATTR_RA_USELEASETIME] = { .name = "ra_useleasetime", .type = BLOBMSG_TYPE_BOOL }, - [IFACE_ATTR_RA_REACHABLETIME] = { .name = "ra_reachabletime", .type = BLOBMSG_TYPE_INT32 }, - [IFACE_ATTR_RA_RETRANSTIME] = { .name = "ra_retranstime", .type = BLOBMSG_TYPE_INT32 }, - [IFACE_ATTR_RA_HOPLIMIT] = { .name = "ra_hoplimit", .type = BLOBMSG_TYPE_INT32 }, -@@ -144,7 +143,8 @@ static const struct blobmsg_policy iface - [IFACE_ATTR_NDPROXY_ROUTING] = { .name = "ndproxy_routing", .type = BLOBMSG_TYPE_BOOL }, - [IFACE_ATTR_NDPROXY_SLAVE] = { .name = "ndproxy_slave", .type = BLOBMSG_TYPE_BOOL }, - [IFACE_ATTR_PREFIX_FILTER] = { .name = "prefix_filter", .type = BLOBMSG_TYPE_STRING }, -- [IFACE_ATTR_PREFERRED_LIFETIME] = { .name = "preferred_lifetime", .type = BLOBMSG_TYPE_STRING }, -+ [IFACE_ATTR_MAX_PREFERRED_LIFETIME] = { .name = "max_preferred_lifetime", .type = BLOBMSG_TYPE_STRING }, -+ [IFACE_ATTR_MAX_VALID_LIFETIME] = { .name = "max_valid_lifetime", .type = BLOBMSG_TYPE_STRING }, - [IFACE_ATTR_NTP] = { .name = "ntp", .type = BLOBMSG_TYPE_ARRAY }, - }; - -@@ -215,7 +215,8 @@ static void set_interface_defaults(struc - iface->ndp = MODE_DISABLED; - iface->learn_routes = 1; - iface->dhcp_leasetime = 43200; -- iface->preferred_lifetime = 43200; -+ iface->max_preferred_lifetime = ND_PREFERRED_LIMIT; -+ iface->max_valid_lifetime = ND_VALID_LIMIT; - iface->dhcpv4_start.s_addr = htonl(START_DEFAULT); - iface->dhcpv4_end.s_addr = htonl(START_DEFAULT + LIMIT_DEFAULT - 1); - iface->dhcpv6_assignall = true; -@@ -647,15 +648,26 @@ int config_parse_interface(void *data, s - - } - -- if ((c = tb[IFACE_ATTR_PREFERRED_LIFETIME])) { -+ if ((c = tb[IFACE_ATTR_MAX_PREFERRED_LIFETIME])) { - double time = parse_leasetime(c); - -- if (time >= 0) -- iface->preferred_lifetime = time; -- else -+ if (time >= 0) { -+ iface->max_preferred_lifetime = time; -+ } else { - syslog(LOG_ERR, "Invalid %s value configured for interface '%s'", -- iface_attrs[IFACE_ATTR_PREFERRED_LIFETIME].name, iface->name); -+ iface_attrs[IFACE_ATTR_MAX_PREFERRED_LIFETIME].name, iface->name); -+ } -+ } - -+ if ((c = tb[IFACE_ATTR_MAX_VALID_LIFETIME])) { -+ double time = parse_leasetime(c); -+ -+ if (time >= 0) { -+ iface->max_valid_lifetime = time; -+ } else { -+ syslog(LOG_ERR, "Invalid %s value configured for interface '%s'", -+ iface_attrs[IFACE_ATTR_MAX_VALID_LIFETIME].name, iface->name); -+ } - } - - if ((c = tb[IFACE_ATTR_START])) { -@@ -978,9 +990,6 @@ int config_parse_interface(void *data, s - if ((c = tb[IFACE_ATTR_RA_LIFETIME])) - iface->ra_lifetime = blobmsg_get_u32(c); - -- if ((c = tb[IFACE_ATTR_RA_USELEASETIME])) -- iface->ra_useleasetime = blobmsg_get_bool(c); -- - if ((c = tb[IFACE_ATTR_RA_DNS])) - iface->ra_dns = blobmsg_get_bool(c); - ---- a/src/dhcpv6-ia.c -+++ b/src/dhcpv6-ia.c -@@ -120,7 +120,7 @@ static inline bool valid_prefix_length(c - - static inline bool valid_addr(const struct odhcpd_ipaddr *addr, time_t now) - { -- return (addr->prefix <= 96 && addr->preferred > (uint32_t)now); -+ return (addr->prefix <= 96 && addr->valid > (uint32_t)now && addr->preferred > (uint32_t)now); - } - - static size_t get_preferred_addr(const struct odhcpd_ipaddr *addrs, const size_t addrlen) -@@ -1037,17 +1037,27 @@ static size_t build_ia(uint8_t *buf, siz - } - - if (a) { -- uint32_t leasetime, pref; -+ uint32_t leasetime; - - if (a->leasetime) { - leasetime = a->leasetime; -- pref = a->leasetime; - } else { - leasetime = iface->dhcp_leasetime; -- pref = iface->preferred_lifetime; - } - -- uint32_t valid = leasetime; -+ uint32_t floor_preferred_lifetime, floor_valid_lifetime; /* For calculating T1 / T2 */ -+ -+ if (iface->max_preferred_lifetime && iface->max_preferred_lifetime < leasetime) { -+ floor_preferred_lifetime = iface->max_preferred_lifetime; -+ } else { -+ floor_preferred_lifetime = leasetime; -+ } -+ -+ if (iface->max_valid_lifetime && iface->max_valid_lifetime < leasetime) { -+ floor_valid_lifetime = iface->max_valid_lifetime; -+ } else { -+ floor_valid_lifetime = leasetime; -+ } - - struct odhcpd_ipaddr *addrs = (a->managed) ? a->managed : iface->addr6; - size_t addrlen = (a->managed) ? (size_t)a->managed_size : iface->addr6_len; -@@ -1071,17 +1081,19 @@ static size_t build_ia(uint8_t *buf, siz - prefix_pref = addrs[i].preferred; - prefix_valid = addrs[i].valid; - -- if (prefix_pref != UINT32_MAX) -+ if (prefix_pref != UINT32_MAX) { - prefix_pref -= now; - -- if (prefix_pref > pref) -- prefix_pref = pref; -+ if (iface->max_preferred_lifetime && prefix_pref > iface->max_preferred_lifetime) -+ prefix_pref = iface->max_preferred_lifetime; -+ } - -- if (prefix_valid != UINT32_MAX) -+ if (prefix_valid != UINT32_MAX) { - prefix_valid -= now; - -- if (prefix_valid > leasetime) -- prefix_valid = leasetime; -+ if (iface->max_valid_lifetime && prefix_valid > iface->max_valid_lifetime) -+ prefix_valid = iface->max_valid_lifetime; -+ } - - if (prefix_pref > prefix_valid) - prefix_pref = prefix_valid; -@@ -1133,24 +1145,24 @@ static size_t build_ia(uint8_t *buf, siz - - /* Calculate T1 / T2 based on non-deprecated addresses */ - if (prefix_pref > 0) { -- if (prefix_pref < pref) -- pref = prefix_pref; -+ if (floor_preferred_lifetime > prefix_pref) -+ floor_preferred_lifetime = prefix_pref; - -- if (prefix_valid < valid) -- valid = prefix_valid; -+ if (floor_valid_lifetime > prefix_valid) -+ floor_valid_lifetime = prefix_valid; - } - } - - if (!INFINITE_VALID(a->valid_until)) - /* UINT32_MAX is considered as infinite leasetime */ -- a->valid_until = (valid == UINT32_MAX) ? 0 : valid + now; -+ a->valid_until = (floor_valid_lifetime == UINT32_MAX) ? 0 : floor_valid_lifetime + now; - - if (!INFINITE_VALID(a->preferred_until)) - /* UINT32_MAX is considered as infinite leasetime */ -- a->preferred_until = (pref == UINT32_MAX) ? 0 : pref + now; -+ a->preferred_until = (floor_preferred_lifetime == UINT32_MAX) ? 0 : floor_preferred_lifetime + now; - -- o_ia.t1 = htonl((pref == UINT32_MAX) ? pref : pref * 5 / 10); -- o_ia.t2 = htonl((pref == UINT32_MAX) ? pref : pref * 8 / 10); -+ o_ia.t1 = htonl((floor_preferred_lifetime == UINT32_MAX) ? floor_preferred_lifetime : floor_preferred_lifetime * 5 / 10); -+ o_ia.t2 = htonl((floor_preferred_lifetime == UINT32_MAX) ? floor_preferred_lifetime : floor_preferred_lifetime * 8 / 10); - - if (!o_ia.t1) - o_ia.t1 = htonl(1); ---- a/src/odhcpd.h -+++ b/src/odhcpd.h -@@ -37,6 +37,10 @@ - // RFC 8781 defines PREF64 option - #define ND_OPT_PREF64 38 - -+// RFC9096 defines recommended option lifetimes configuration values -+#define ND_PREFERRED_LIMIT 2700 -+#define ND_VALID_LIMIT 5400 -+ - #define INFINITE_VALID(x) ((x) == 0) - - #define _unused __attribute__((unused)) -@@ -302,7 +306,6 @@ struct interface { - bool ra_slaac; - bool ra_not_onlink; - bool ra_advrouter; -- bool ra_useleasetime; - bool ra_dns; - uint8_t pref64_length; - struct in6_addr pref64_addr; -@@ -319,7 +322,8 @@ struct interface { - uint32_t ra_retranstime; - uint32_t ra_hoplimit; - int ra_mtu; -- uint32_t preferred_lifetime; -+ uint32_t max_preferred_lifetime; -+ uint32_t max_valid_lifetime; - - // DHCP - uint32_t dhcp_leasetime; ---- a/src/router.c -+++ b/src/router.c -@@ -371,7 +371,7 @@ static int calc_adv_interval(struct inte - - static uint32_t calc_ra_lifetime(struct interface *iface, uint32_t maxival) - { -- uint32_t lifetime = 3*maxival; -+ uint32_t lifetime = maxival * 3; - - if (iface->ra_lifetime >= 0) { - lifetime = iface->ra_lifetime; -@@ -590,16 +590,15 @@ static int send_router_advert(struct int - if (addr->preferred > (uint32_t)now) { - preferred = TIME_LEFT(addr->preferred, now); - -- if (iface->ra_useleasetime && -- preferred > iface->preferred_lifetime) -- preferred = iface->preferred_lifetime; -+ if (iface->max_preferred_lifetime && preferred > iface->max_preferred_lifetime) -+ preferred = iface->max_preferred_lifetime; - } - - if (addr->valid > (uint32_t)now) { - valid = TIME_LEFT(addr->valid, now); - -- if (iface->ra_useleasetime && valid > iface->dhcp_leasetime) -- valid = iface->dhcp_leasetime; -+ if (iface->max_valid_lifetime && valid > iface->max_valid_lifetime) -+ valid = iface->max_valid_lifetime; - } - - if (minvalid > valid) -@@ -643,9 +642,9 @@ static int send_router_advert(struct int - - if (default_route) { - syslog(LOG_WARNING, "A default route is present but there is no public prefix " -- "on %s thus we don't announce a default route by overriding ra_lifetime!", iface->name); -+ "on %s thus we don't announce a default route by setting ra_lifetime to zero!", iface->name); - } else { -- syslog(LOG_WARNING, "No default route present, overriding ra_lifetime!"); -+ syslog(LOG_WARNING, "No default route present, setting ra_lifetime to zero!"); - } - } - -@@ -710,7 +709,7 @@ static int send_router_advert(struct int - - if (iface->pref64_length) { - /* RFC 8781 § 4.1 rounding up lifetime to multiply of 8 */ -- uint16_t pref64_lifetime = lifetime < (UINT16_MAX - 7) ? lifetime + 7 : UINT16_MAX; -+ uint16_t pref64_lifetime = lifetime < (UINT16_MAX - 7) ? lifetime + 7 : (UINT16_MAX - 7); - uint8_t prefix_length_code; - uint32_t mask_a1, mask_a2; - diff --git a/openwrt/patch/odhcpd/luci-mod-network-add-option-for-ipv6-max-plt-vlt.patch b/openwrt/patch/odhcpd/luci-mod-network-add-option-for-ipv6-max-plt-vlt.patch deleted file mode 100644 index f62f283b7..000000000 --- a/openwrt/patch/odhcpd/luci-mod-network-add-option-for-ipv6-max-plt-vlt.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- a/modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js -+++ b/modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js -@@ -889,6 +889,20 @@ return view.extend({ - so.depends('ra', 'server'); - so.depends({ ra: 'hybrid', master: '0' }); - -+ so = ss.taboption('ipv6-ra', form.Value, 'max_preferred_lifetime', _('Max preferred lifetime')); -+ so.optional = true; -+ so.datatype = 'range(0, 2700)'; -+ so.placeholder = '2700'; -+ so.depends('ra', 'server'); -+ so.depends({ ra: 'hybrid', master: '0' }); -+ -+ so = ss.taboption('ipv6-ra', form.Value, 'max_valid_lifetime', _('Max valid lifetime')); -+ so.optional = true; -+ so.datatype = 'range(0, 5400)'; -+ so.placeholder = '5400'; -+ so.depends('ra', 'server'); -+ so.depends({ ra: 'hybrid', master: '0' }); -+ - so = ss.taboption('ipv6-ra', form.Value, 'ra_maxinterval', _('Max RA interval'), _('Maximum time allowed between sending unsolicited RA. Default is 600 seconds.')); - so.optional = true; - so.datatype = 'uinteger'; diff --git a/openwrt/patch/openssl/quic/0001-QUIC-Add-support-for-BoringSSL-QUIC-APIs.patch b/openwrt/patch/openssl/quic/0001-QUIC-Add-support-for-BoringSSL-QUIC-APIs.patch deleted file mode 100644 index 8d54fabc7..000000000 --- a/openwrt/patch/openssl/quic/0001-QUIC-Add-support-for-BoringSSL-QUIC-APIs.patch +++ /dev/null @@ -1,1746 +0,0 @@ -From 1838d91ae3f953de3c44d5076e0373dc7197993f Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Fri, 12 Apr 2019 11:13:25 -0400 -Subject: [PATCH 01/43] QUIC: Add support for BoringSSL QUIC APIs - -This adds a compatible API for BoringSSL's QUIC support, based -on the current |draft-ietf-quic-tls|. - -Based on BoringSSL commit 3c034b2cf386b3131f75520705491871a2e0cafe -Based on BoringSSL commit c8e0f90f83b9ec38ea833deb86b5a41360b62b6a -Based on BoringSSL commit 3cbb0299a28a8bd0136257251a78b91a96c5eec8 -Based on BoringSSL commit cc9d935256539af2d3b7f831abf57c0d685ffd81 -Based on BoringSSL commit e6eef1ca16a022e476bbaedffef044597cfc8f4b -Based on BoringSSL commit 6f733791148cf8a076bf0e95498235aadbe5926d -Based on BoringSSL commit 384d0eaf1930af1ebc47eda751f0c78dfcba1c03 -Based on BoringSSL commit a0373182eb5cc7b81d49f434596b473c7801c942 -Based on BoringSSL commit b1b76aee3cb43ce11889403c5334283d951ebd37 ---- - Configure | 2 + - INSTALL.md | 4 + - crypto/err/openssl.txt | 2 + - doc/man3/SSL_CIPHER_get_name.pod | 13 ++ - doc/man3/SSL_CTX_set_quic_method.pod | 232 +++++++++++++++++++++++++ - include/openssl/evp.h | 5 + - include/openssl/ssl.h.in | 45 +++++ - include/openssl/sslerr.h | 2 + - include/openssl/tls1.h | 3 + - include/openssl/types.h | 2 + - ssl/build.info | 2 + - ssl/s3_msg.c | 10 ++ - ssl/ssl_ciph.c | 32 ++++ - ssl/ssl_err.c | 3 + - ssl/ssl_lib.c | 41 ++++- - ssl/ssl_local.h | 37 ++++ - ssl/ssl_quic.c | 248 +++++++++++++++++++++++++++ - ssl/statem/extensions.c | 29 ++++ - ssl/statem/extensions_clnt.c | 48 ++++++ - ssl/statem/extensions_srvr.c | 51 ++++++ - ssl/statem/statem.c | 20 ++- - ssl/statem/statem_lib.c | 19 +- - ssl/statem/statem_local.h | 19 ++ - ssl/statem/statem_quic.c | 106 ++++++++++++ - ssl/tls13_enc.c | 59 +++++++ - test/helpers/ssltestlib.c | 5 + - test/sslapitest.c | 132 ++++++++++++++ - test/tls13secretstest.c | 7 + - util/libssl.num | 11 ++ - util/other.syms | 2 + - 30 files changed, 1185 insertions(+), 6 deletions(-) - create mode 100644 doc/man3/SSL_CTX_set_quic_method.pod - create mode 100644 ssl/ssl_quic.c - create mode 100644 ssl/statem/statem_quic.c - ---- a/Configure -+++ b/Configure -@@ -468,6 +468,7 @@ my @disablables = ( - "poly1305", - "posix-io", - "psk", -+ "quic", - "rc2", - "rc4", - "rc5", -@@ -636,6 +637,7 @@ my @disable_cascades = ( - "legacy" => [ "md2" ], - - "cmp" => [ "crmf" ], -+ "tls1_3" => [ "quic" ], - - "fips" => [ "fips-securitychecks", "acvp-tests" ], - ---- a/INSTALL.md -+++ b/INSTALL.md -@@ -829,6 +829,10 @@ Don't use POSIX IO capabilities. - - Don't build support for Pre-Shared Key based ciphersuites. - -+### no-quic -+ -+Don't build support for QUIC API from BoringSSL. -+ - ### no-rdrand - - Don't use hardware RDRAND capabilities. ---- a/crypto/err/openssl.txt -+++ b/crypto/err/openssl.txt -@@ -1251,6 +1251,7 @@ SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_ - SSL_R_BAD_CHANGE_CIPHER_SPEC:103:bad change cipher spec - SSL_R_BAD_CIPHER:186:bad cipher - SSL_R_BAD_DATA:390:bad data -+SSL_R_BAD_DATA_LENGTH:802:bad data length - SSL_R_BAD_DATA_RETURNED_BY_CALLBACK:106:bad data returned by callback - SSL_R_BAD_DECOMPRESSION:107:bad decompression - SSL_R_BAD_DH_VALUE:102:bad dh value -@@ -1538,6 +1539,7 @@ SSL_R_VERSION_TOO_LOW:396:version too lo - SSL_R_WRONG_CERTIFICATE_TYPE:383:wrong certificate type - SSL_R_WRONG_CIPHER_RETURNED:261:wrong cipher returned - SSL_R_WRONG_CURVE:378:wrong curve -+SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED:800:wrong encryption level received - SSL_R_WRONG_SIGNATURE_LENGTH:264:wrong signature length - SSL_R_WRONG_SIGNATURE_SIZE:265:wrong signature size - SSL_R_WRONG_SIGNATURE_TYPE:370:wrong signature type ---- a/doc/man3/SSL_CIPHER_get_name.pod -+++ b/doc/man3/SSL_CIPHER_get_name.pod -@@ -13,6 +13,7 @@ SSL_CIPHER_get_digest_nid, - SSL_CIPHER_get_handshake_digest, - SSL_CIPHER_get_kx_nid, - SSL_CIPHER_get_auth_nid, -+SSL_CIPHER_get_prf_nid, - SSL_CIPHER_is_aead, - SSL_CIPHER_find, - SSL_CIPHER_get_id, -@@ -34,6 +35,7 @@ SSL_CIPHER_get_protocol_id - const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c); - int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); - int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); -+ int SSL_CIPHER_get_prf_nid(const SSL_CIPHER *c); - int SSL_CIPHER_is_aead(const SSL_CIPHER *c); - const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); - uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); -@@ -91,6 +93,15 @@ TLS 1.3 cipher suites) B i - NID_auth_ecdsa - NID_auth_psk - -+SSL_CIPHER_get_prf_nid() retuns the pseudo-random function NID for B. If B is -+a pre-TLS-1.2 cipher, it returns B but note these ciphers use -+SHA-256 in TLS 1.2. Other return values may be treated uniformly in all -+applicable versions. Examples (not comprehensive): -+ -+ NID_md5_sha1 -+ NID_sha256 -+ NID_sha384 -+ - SSL_CIPHER_is_aead() returns 1 if the cipher B is AEAD (e.g. GCM or - ChaCha20/Poly1305), and 0 if it is not AEAD. - -@@ -201,6 +212,8 @@ required to enable this function. - - The OPENSSL_cipher_name() function was added in OpenSSL 1.1.1. - -+The SSL_CIPHER_get_prf_nid() function was added in OpenSSL 3.0.0. -+ - =head1 COPYRIGHT - - Copyright 2000-2024 The OpenSSL Project Authors. All Rights Reserved. ---- /dev/null -+++ b/doc/man3/SSL_CTX_set_quic_method.pod -@@ -0,0 +1,232 @@ -+=pod -+ -+=head1 NAME -+ -+SSL_QUIC_METHOD, -+OSSL_ENCRYPTION_LEVEL, -+SSL_CTX_set_quic_method, -+SSL_set_quic_method, -+SSL_set_quic_transport_params, -+SSL_get_peer_quic_transport_params, -+SSL_quic_max_handshake_flight_len, -+SSL_quic_read_level, -+SSL_quic_write_level, -+SSL_provide_quic_data, -+SSL_process_quic_post_handshake, -+SSL_is_quic -+- QUIC support -+ -+=head1 SYNOPSIS -+ -+ #include -+ -+ typedef struct ssl_quic_method_st SSL_QUIC_METHOD; -+ typedef enum ssl_encryption_level_t OSSL_ENCRYPTION_LEVEL; -+ -+ int SSL_CTX_set_quic_method(SSL_CTX *ctx, const SSL_QUIC_METHOD *quic_method); -+ int SSL_set_quic_method(SSL *ssl, const SSL_QUIC_METHOD *quic_method); -+ int SSL_set_quic_transport_params(SSL *ssl, -+ const uint8_t *params, -+ size_t params_len); -+ void SSL_get_peer_quic_transport_params(const SSL *ssl, -+ const uint8_t **out_params, -+ size_t *out_params_len); -+ size_t SSL_quic_max_handshake_flight_len(const SSL *ssl, OSSL_ENCRYPTION_LEVEL level); -+ OSSL_ENCRYPTION_LEVEL SSL_quic_read_level(const SSL *ssl); -+ OSSL_ENCRYPTION_LEVEL SSL_quic_write_level(const SSL *ssl); -+ int SSL_provide_quic_data(SSL *ssl, OSSL_ENCRYPTION_LEVEL level, -+ const uint8_t *data, size_t len); -+ int SSL_process_quic_post_handshake(SSL *ssl); -+ int SSL_is_quic(SSL *ssl); -+ -+=head1 DESCRIPTION -+ -+SSL_CTX_set_quic_method() and SSL_set_quic_method() configures the QUIC methods. -+This should only be configured with a minimum version of TLS 1.3. B -+must remain valid for the lifetime of B or B. Calling this disables -+the SSL_OP_ENABLE_MIDDLEBOX_COMPAT option, which is not required for QUIC. -+ -+SSL_set_quic_transport_params() configures B to send B (of length -+B) in the quic_transport_parameters extension in either the -+ClientHello or EncryptedExtensions handshake message. This extension will -+only be sent if the TLS version is at least 1.3, and for a server, only if -+the client sent the extension. The buffer pointed to by B only need be -+valid for the duration of the call to this function. -+ -+SSL_get_peer_quic_transport_params() provides the caller with the value of the -+quic_transport_parameters extension sent by the peer. A pointer to the buffer -+containing the TransportParameters will be put in B<*out_params>, and its -+length in B<*out_params_len>. This buffer will be valid for the lifetime of the -+B. If no params were received from the peer, B<*out_params_len> will be 0. -+ -+SSL_quic_max_handshake_flight_len() returns returns the maximum number of bytes -+that may be received at the given encryption level. This function should be -+used to limit buffering in the QUIC implementation. -+ -+See https://tools.ietf.org/html/draft-ietf-quic-transport-16#section-4.4. -+ -+SSL_quic_read_level() returns the current read encryption level. -+ -+SSL_quic_write_level() returns the current write encryption level. -+ -+SSL_provide_quic_data() provides data from QUIC at a particular encryption -+level B. It is an error to call this function outside of the handshake -+or with an encryption level other than the current read level. It returns one -+on success and zero on error. -+ -+SSL_process_quic_post_handshake() processes any data that QUIC has provided -+after the handshake has completed. This includes NewSessionTicket messages -+sent by the server. -+ -+SSL_is_quic() indicates whether a connection uses QUIC. -+ -+=head1 NOTES -+ -+These APIs are implementations of BoringSSL's QUIC APIs. -+ -+QUIC acts as an underlying transport for the TLS 1.3 handshake. The following -+functions allow a QUIC implementation to serve as the underlying transport as -+described in draft-ietf-quic-tls. -+ -+When configured for QUIC, SSL_do_handshake() will drive the handshake as -+before, but it will not use the configured B. It will call functions on -+B to configure secrets and send data. If data is needed from -+the peer, it will return B. When received, the caller -+should call SSL_provide_quic_data() and then SSL_do_handshake() to continue -+the handshake. After the handshake is complete, the caller should call -+SSL_provide_quic_data() for any post-handshake data, followed by -+SSL_process_quic_post_handshake() to process it. It is an error to call -+SSL_read()/SSL_read_ex() and SSL_write()/SSL_write_ex() in QUIC. -+ -+Note that secrets for an encryption level may be available to QUIC before the -+level is active in TLS. Callers should use SSL_quic_read_level() to determine -+the active read level for SSL_provide_quic_data(). SSL_do_handshake() will -+pass the active write level to add_handshake_data() when writing data. Callers -+can use SSL_quic_write_level() to query the active write level when -+generating their own errors. -+ -+See https://tools.ietf.org/html/draft-ietf-quic-tls-15#section-4.1 for more -+details. -+ -+To avoid DoS attacks, the QUIC implementation must limit the amount of data -+being queued up. The implementation can call -+SSL_quic_max_handshake_flight_len() to get the maximum buffer length at each -+encryption level. -+ -+draft-ietf-quic-tls defines a new TLS extension quic_transport_parameters -+used by QUIC for each endpoint to unilaterally declare its supported -+transport parameters. draft-ietf-quic-transport (section 7.4) defines the -+contents of that extension (a TransportParameters struct) and describes how -+to handle it and its semantic meaning. -+ -+OpenSSL handles this extension as an opaque byte string. The caller is -+responsible for serializing and parsing it. -+ -+=head2 OSSL_ENCRYPTION_LEVEL -+ -+B (B) represents the -+encryption levels: -+ -+=over 4 -+ -+=item ssl_encryption_initial -+ -+The initial encryption level that is used for client and server hellos. -+ -+=item ssl_encryption_early_data -+ -+The encryption level for early data. This is a write-level for the client -+and a read-level for the server. -+ -+=item ssl_encryption_handshake -+ -+The encryption level for the remainder of the handshake. -+ -+=item ssl_encryption_application -+ -+The encryption level for the application data. -+ -+=back -+ -+=head2 SSL_QUIC_METHOD -+ -+The B (B) describes the -+QUIC methods. -+ -+ struct ssl_quic_method_st { -+ int (*set_encryption_secrets)(SSL *ssl, OSSL_ENCRYPTION_LEVEL level, -+ const uint8_t *read_secret, -+ const uint8_t *write_secret, size_t secret_len); -+ int (*add_handshake_data)(SSL *ssl, OSSL_ENCRYPTION_LEVEL level, -+ const uint8_t *data, size_t len); -+ int (*flush_flight)(SSL *ssl); -+ int (*send_alert)(SSL *ssl, enum ssl_encryption_level_t level, uint8_t alert); -+ }; -+ typedef struct ssl_quic_method_st SSL_QUIC_METHOD; -+ -+set_encryption_secrets() configures the read and write secrets for the given -+encryption level. This function will always be called before an encryption -+level other than B is used. Note, however, that -+secrets for a level may be configured before TLS is ready to send or accept -+data at that level. -+ -+When reading packets at a given level, the QUIC implementation must send -+ACKs at the same level, so this function provides read and write secrets -+together. The exception is B, where secrets are -+only available in the client to server direction. The other secret will be -+NULL. The server acknowledges such data at B, -+which will be configured in the same SSL_do_handshake() call. -+ -+This function should use SSL_get_current_cipher() to determine the TLS -+cipher suite. -+ -+add_handshake_data() adds handshake data to the current flight at the given -+encryption level. It returns one on success and zero on error. -+ -+OpenSSL will pack data from a single encryption level together, but a -+single handshake flight may include multiple encryption levels. Callers -+should defer writing data to the network until flush_flight() to better -+pack QUIC packets into transport datagrams. -+ -+flush_flight() is called when the current flight is complete and should be -+written to the transport. Note a flight may contain data at several -+encryption levels. -+ -+send_alert() sends a fatal alert at the specified encryption level. -+ -+All QUIC methods return 1 on success and 0 on error. -+ -+=head1 RETURN VALUES -+ -+SSL_CTX_set_quic_method(), -+SSL_set_quic_method(), -+SSL_set_quic_transport_params(), and -+SSL_process_quic_post_handshake() -+return 1 on success, and 0 on error. -+ -+SSL_quic_read_level() and SSL_quic_write_level() return the current -+encryption level as B (B). -+ -+SSL_quic_max_handshake_flight_len() returns the maximum length of a flight -+for a given encryption level. -+ -+SSL_is_quic() returns 1 if QUIC is being used, 0 if not. -+ -+=head1 SEE ALSO -+ -+L, L, L -+ -+=head1 HISTORY -+ -+These functions were added in OpenSSL 3.0.0. -+ -+=head1 COPYRIGHT -+ -+Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. -+ -+Licensed under the Apache License 2.0 (the "License"). You may not use -+this file except in compliance with the License. You can obtain a copy -+in the file LICENSE in the source distribution or at -+L. -+ -+=cut ---- a/include/openssl/evp.h -+++ b/include/openssl/evp.h -@@ -1741,6 +1741,11 @@ int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CT - * Method handles all operations: don't assume any digest related defaults. - */ - # define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 -+ -+/* Used by Chromium/QUIC */ -+# define X25519_PRIVATE_KEY_LEN 32 -+# define X25519_PUBLIC_VALUE_LEN 32 -+ - # ifndef OPENSSL_NO_DEPRECATED_3_0 - OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); - OSSL_DEPRECATEDIN_3_0 EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); ---- a/include/openssl/ssl.h.in -+++ b/include/openssl/ssl.h.in -@@ -2521,6 +2521,51 @@ void SSL_set_allow_early_data_cb(SSL *s, - const char *OSSL_default_cipher_list(void); - const char *OSSL_default_ciphersuites(void); - -+# ifndef OPENSSL_NO_QUIC -+/* -+ * QUIC integration - The QUIC interface matches BoringSSL -+ * -+ * ssl_encryption_level_t represents a specific QUIC encryption level used to -+ * transmit handshake messages. BoringSSL has this as an 'enum'. -+ */ -+typedef enum ssl_encryption_level_t { -+ ssl_encryption_initial = 0, -+ ssl_encryption_early_data, -+ ssl_encryption_handshake, -+ ssl_encryption_application -+} OSSL_ENCRYPTION_LEVEL; -+ -+struct ssl_quic_method_st { -+ int (*set_encryption_secrets)(SSL *ssl, OSSL_ENCRYPTION_LEVEL level, -+ const uint8_t *read_secret, -+ const uint8_t *write_secret, size_t secret_len); -+ int (*add_handshake_data)(SSL *ssl, OSSL_ENCRYPTION_LEVEL level, -+ const uint8_t *data, size_t len); -+ int (*flush_flight)(SSL *ssl); -+ int (*send_alert)(SSL *ssl, enum ssl_encryption_level_t level, uint8_t alert); -+}; -+ -+__owur int SSL_CTX_set_quic_method(SSL_CTX *ctx, const SSL_QUIC_METHOD *quic_method); -+__owur int SSL_set_quic_method(SSL *ssl, const SSL_QUIC_METHOD *quic_method); -+__owur int SSL_set_quic_transport_params(SSL *ssl, -+ const uint8_t *params, -+ size_t params_len); -+void SSL_get_peer_quic_transport_params(const SSL *ssl, -+ const uint8_t **out_params, -+ size_t *out_params_len); -+__owur size_t SSL_quic_max_handshake_flight_len(const SSL *ssl, OSSL_ENCRYPTION_LEVEL level); -+__owur OSSL_ENCRYPTION_LEVEL SSL_quic_read_level(const SSL *ssl); -+__owur OSSL_ENCRYPTION_LEVEL SSL_quic_write_level(const SSL *ssl); -+__owur int SSL_provide_quic_data(SSL *ssl, OSSL_ENCRYPTION_LEVEL level, -+ const uint8_t *data, size_t len); -+__owur int SSL_process_quic_post_handshake(SSL *ssl); -+ -+__owur int SSL_is_quic(SSL *ssl); -+ -+# endif -+ -+int SSL_CIPHER_get_prf_nid(const SSL_CIPHER *c); -+ - # ifdef __cplusplus - } - # endif ---- a/include/openssl/sslerr.h -+++ b/include/openssl/sslerr.h -@@ -28,6 +28,7 @@ - # define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 - # define SSL_R_BAD_CIPHER 186 - # define SSL_R_BAD_DATA 390 -+# define SSL_R_BAD_DATA_LENGTH 802 - # define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 - # define SSL_R_BAD_DECOMPRESSION 107 - # define SSL_R_BAD_DH_VALUE 102 -@@ -335,6 +336,7 @@ - # define SSL_R_WRONG_CERTIFICATE_TYPE 383 - # define SSL_R_WRONG_CIPHER_RETURNED 261 - # define SSL_R_WRONG_CURVE 378 -+# define SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED 800 - # define SSL_R_WRONG_SIGNATURE_LENGTH 264 - # define SSL_R_WRONG_SIGNATURE_SIZE 265 - # define SSL_R_WRONG_SIGNATURE_TYPE 370 ---- a/include/openssl/tls1.h -+++ b/include/openssl/tls1.h -@@ -151,6 +151,9 @@ extern "C" { - /* Temporary extension type */ - # define TLSEXT_TYPE_renegotiate 0xff01 - -+/* ExtensionType value from draft-ietf-quic-tls-13 */ -+# define TLSEXT_TYPE_quic_transport_parameters 0xffa5 -+ - # ifndef OPENSSL_NO_NEXTPROTONEG - /* This is not an IANA defined extension number */ - # define TLSEXT_TYPE_next_proto_neg 13172 ---- a/include/openssl/types.h -+++ b/include/openssl/types.h -@@ -229,6 +229,8 @@ typedef struct ossl_decoder_ctx_st OSSL_ - - typedef struct ossl_self_test_st OSSL_SELF_TEST; - -+typedef struct ssl_quic_method_st SSL_QUIC_METHOD; -+ - #ifdef __cplusplus - } - #endif ---- a/ssl/build.info -+++ b/ssl/build.info -@@ -38,6 +38,8 @@ IF[{- !$disabled{'deprecated-3.0'} -}] - SOURCE[../libssl]=ssl_rsa_legacy.c - ENDIF - -+SOURCE[../libssl]=ssl_quic.c statem/statem_quic.c -+ - DEFINE[../libssl]=$AESDEF - - SOURCE[../providers/libcommon.a]=record/tls_pad.c ---- a/ssl/s3_msg.c -+++ b/ssl/s3_msg.c -@@ -81,6 +81,16 @@ int ssl3_dispatch_alert(SSL *s) - - s->s3.alert_dispatch = 0; - alertlen = 2; -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ if (!s->quic_method->send_alert(s, s->quic_write_level, -+ s->s3.send_alert[1])) { -+ SSLerr(SSL_F_SSL3_DISPATCH_ALERT, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+ i = 1; -+ } else -+#endif - i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3.send_alert[0], &alertlen, 1, 0, - &written); - if (i <= 0) { ---- a/ssl/ssl_ciph.c -+++ b/ssl/ssl_ciph.c -@@ -2240,3 +2240,35 @@ const char *OSSL_default_ciphersuites(vo - "TLS_CHACHA20_POLY1305_SHA256:" - "TLS_AES_128_GCM_SHA256"; - } -+ -+int SSL_CIPHER_get_prf_nid(const SSL_CIPHER *c) -+{ -+ switch (c->algorithm2 & (0xFF << TLS1_PRF_DGST_SHIFT)) { -+ default: -+ break; -+ case TLS1_PRF_SHA1_MD5: /* TLS1_PRF */ -+ return NID_md5_sha1; -+ case TLS1_PRF_SHA256: -+ return NID_sha256; -+ case TLS1_PRF_SHA384: -+ return NID_sha384; -+ case TLS1_PRF_GOST94: -+ return NID_id_GostR3411_94_prf; -+ case TLS1_PRF_GOST12_256: -+ return NID_id_GostR3411_2012_256; -+ case TLS1_PRF_GOST12_512: -+ return NID_id_GostR3411_2012_512; -+ } -+ /* TLSv1.3 ciphers don't specify separate PRF */ -+ switch (c->algorithm2 & SSL_HANDSHAKE_MAC_MASK) { -+ default: -+ break; -+ case SSL_HANDSHAKE_MAC_MD5_SHA1: /* SSL_HANDSHAKE_MAC_DEFAULT */ -+ return NID_md5_sha1; -+ case SSL_HANDSHAKE_MAC_SHA256: -+ return NID_sha256; -+ case SSL_HANDSHAKE_MAC_SHA384: -+ return NID_sha384; -+ } -+ return NID_undef; -+} ---- a/ssl/ssl_err.c -+++ b/ssl/ssl_err.c -@@ -27,6 +27,7 @@ static const ERR_STRING_DATA SSL_str_rea - "bad change cipher spec"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_CIPHER), "bad cipher"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DATA), "bad data"}, -+ {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DATA_LENGTH), "bad data length"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK), - "bad data returned by callback"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DECOMPRESSION), "bad decompression"}, -@@ -548,6 +549,8 @@ static const ERR_STRING_DATA SSL_str_rea - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_CIPHER_RETURNED), - "wrong cipher returned"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_CURVE), "wrong curve"}, -+ {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED), -+ "wrong encryption level received"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_SIGNATURE_LENGTH), - "wrong signature length"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_SIGNATURE_SIZE), ---- a/ssl/ssl_lib.c -+++ b/ssl/ssl_lib.c -@@ -856,6 +856,10 @@ SSL *SSL_new(SSL_CTX *ctx) - - s->job = NULL; - -+#ifndef OPENSSL_NO_QUIC -+ s->quic_method = ctx->quic_method; -+#endif -+ - #ifndef OPENSSL_NO_CT - if (!SSL_set_ct_validation_callback(s, ctx->ct_validation_callback, - ctx->ct_validation_callback_arg)) -@@ -1253,6 +1257,18 @@ void SSL_free(SSL *s) - OPENSSL_free(s->pha_context); - EVP_MD_CTX_free(s->pha_dgst); - -+#ifndef OPENSSL_NO_QUIC -+ OPENSSL_free(s->ext.quic_transport_params); -+ OPENSSL_free(s->ext.peer_quic_transport_params); -+ while (s->quic_input_data_head != NULL) { -+ QUIC_DATA *qd; -+ -+ qd = s->quic_input_data_head; -+ s->quic_input_data_head = qd->next; -+ OPENSSL_free(qd); -+ } -+#endif -+ - sk_X509_NAME_pop_free(s->ca_names, X509_NAME_free); - sk_X509_NAME_pop_free(s->client_ca_names, X509_NAME_free); - -@@ -1852,6 +1868,12 @@ static int ssl_io_intern(void *vargs) - - int ssl_read_internal(SSL *s, void *buf, size_t num, size_t *readbytes) - { -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ SSLerr(SSL_F_SSL_READ_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -+ return -1; -+ } -+#endif - if (s->handshake_func == NULL) { - ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED); - return -1; -@@ -1983,6 +2005,12 @@ int SSL_get_early_data_status(const SSL - - static int ssl_peek_internal(SSL *s, void *buf, size_t num, size_t *readbytes) - { -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ SSLerr(SSL_F_SSL_PEEK_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -+ return -1; -+ } -+#endif - if (s->handshake_func == NULL) { - ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED); - return -1; -@@ -2043,6 +2071,12 @@ int SSL_peek_ex(SSL *s, void *buf, size_ - - int ssl_write_internal(SSL *s, const void *buf, size_t num, size_t *written) - { -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ SSLerr(SSL_F_SSL_WRITE_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -+ return -1; -+ } -+#endif - if (s->handshake_func == NULL) { - ERR_raise(ERR_LIB_SSL, SSL_R_UNINITIALIZED); - return -1; -@@ -3858,6 +3892,11 @@ int SSL_get_error(const SSL *s, int i) - } - - if (SSL_want_read(s)) { -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ return SSL_ERROR_WANT_READ; -+ } -+#endif - bio = SSL_get_rbio(s); - if (BIO_should_read(bio)) - return SSL_ERROR_WANT_READ; -@@ -4225,7 +4264,7 @@ EVP_PKEY *SSL_CTX_get0_privatekey(const - - const SSL_CIPHER *SSL_get_current_cipher(const SSL *s) - { -- if ((s->session != NULL) && (s->session->cipher != NULL)) -+ if (s->session != NULL) - return s->session->cipher; - return NULL; - } ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -337,6 +337,13 @@ - /* Flag used on OpenSSL ciphersuite ids to indicate they are for SSLv3+ */ - # define SSL3_CK_CIPHERSUITE_FLAG 0x03000000 - -+/* Check if an SSL structure is using QUIC (which uses TLSv1.3) */ -+# ifndef OPENSSL_NO_QUIC -+# define SSL_IS_QUIC(s) (s->quic_method != NULL) -+# else -+# define SSL_IS_QUIC(s) 0 -+# endif -+ - /* Check if an SSL structure is using DTLS */ - # define SSL_IS_DTLS(s) (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS) - -@@ -766,6 +773,7 @@ typedef enum tlsext_index_en { - TLSEXT_IDX_cryptopro_bug, - TLSEXT_IDX_early_data, - TLSEXT_IDX_certificate_authorities, -+ TLSEXT_IDX_quic_transport_params, - TLSEXT_IDX_padding, - TLSEXT_IDX_psk, - /* Dummy index - must always be the last entry */ -@@ -1205,10 +1213,24 @@ struct ssl_ctx_st { - uint32_t disabled_mac_mask; - uint32_t disabled_mkey_mask; - uint32_t disabled_auth_mask; -+ -+#ifndef OPENSSL_NO_QUIC -+ const SSL_QUIC_METHOD *quic_method; -+#endif - }; - - typedef struct cert_pkey_st CERT_PKEY; - -+#ifndef OPENSSL_NO_QUIC -+struct quic_data_st { -+ struct quic_data_st *next; -+ OSSL_ENCRYPTION_LEVEL level; -+ size_t length; -+}; -+typedef struct quic_data_st QUIC_DATA; -+int quic_set_encryption_secrets(SSL *ssl, OSSL_ENCRYPTION_LEVEL level); -+#endif -+ - struct ssl_st { - /* - * protocol version (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, -@@ -1680,8 +1702,23 @@ struct ssl_st { - * selected. - */ - int tick_identity; -+ -+#ifndef OPENSSL_NO_QUIC -+ uint8_t *quic_transport_params; -+ size_t quic_transport_params_len; -+ uint8_t *peer_quic_transport_params; -+ size_t peer_quic_transport_params_len; -+#endif - } ext; - -+#ifndef OPENSSL_NO_QUIC -+ OSSL_ENCRYPTION_LEVEL quic_read_level; -+ OSSL_ENCRYPTION_LEVEL quic_write_level; -+ QUIC_DATA *quic_input_data_head; -+ QUIC_DATA *quic_input_data_tail; -+ const SSL_QUIC_METHOD *quic_method; -+ size_t quic_len; -+#endif - /* - * Parsed form of the ClientHello, kept around across client_hello_cb - * calls. ---- /dev/null -+++ b/ssl/ssl_quic.c -@@ -0,0 +1,248 @@ -+/* -+ * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. -+ * -+ * Licensed under the Apache License 2.0 (the "License"). You may not use -+ * this file except in compliance with the License. You can obtain a copy -+ * in the file LICENSE in the source distribution or at -+ * https://www.openssl.org/source/license.html -+ */ -+ -+#include "ssl_local.h" -+#include "internal/cryptlib.h" -+#include "internal/refcount.h" -+ -+#ifdef OPENSSL_NO_QUIC -+NON_EMPTY_TRANSLATION_UNIT -+#else -+ -+int SSL_set_quic_transport_params(SSL *ssl, const uint8_t *params, -+ size_t params_len) -+{ -+ uint8_t *tmp; -+ -+ if (params == NULL || params_len == 0) { -+ tmp = NULL; -+ params_len = 0; -+ } else { -+ tmp = OPENSSL_memdup(params, params_len); -+ if (tmp == NULL) -+ return 0; -+ } -+ -+ OPENSSL_free(ssl->ext.quic_transport_params); -+ ssl->ext.quic_transport_params = tmp; -+ ssl->ext.quic_transport_params_len = params_len; -+ return 1; -+} -+ -+void SSL_get_peer_quic_transport_params(const SSL *ssl, -+ const uint8_t **out_params, -+ size_t *out_params_len) -+{ -+ *out_params = ssl->ext.peer_quic_transport_params; -+ *out_params_len = ssl->ext.peer_quic_transport_params_len; -+} -+ -+size_t SSL_quic_max_handshake_flight_len(const SSL *ssl, OSSL_ENCRYPTION_LEVEL level) -+{ -+ /* -+ * Limits flights to 16K by default when there are no large -+ * (certificate-carrying) messages. -+ */ -+ static const size_t DEFAULT_FLIGHT_LIMIT = 16384; -+ -+ switch (level) { -+ case ssl_encryption_initial: -+ return DEFAULT_FLIGHT_LIMIT; -+ case ssl_encryption_early_data: -+ /* QUIC does not send EndOfEarlyData. */ -+ return 0; -+ case ssl_encryption_handshake: -+ if (ssl->server) { -+ /* -+ * Servers may receive Certificate message if configured to request -+ * client certificates. -+ */ -+ if ((ssl->verify_mode & SSL_VERIFY_PEER) -+ && ssl->max_cert_list > DEFAULT_FLIGHT_LIMIT) -+ return ssl->max_cert_list; -+ } else { -+ /* -+ * Clients may receive both Certificate message and a CertificateRequest -+ * message. -+ */ -+ if (2*ssl->max_cert_list > DEFAULT_FLIGHT_LIMIT) -+ return 2 * ssl->max_cert_list; -+ } -+ return DEFAULT_FLIGHT_LIMIT; -+ case ssl_encryption_application: -+ return DEFAULT_FLIGHT_LIMIT; -+ } -+ -+ return 0; -+} -+ -+OSSL_ENCRYPTION_LEVEL SSL_quic_read_level(const SSL *ssl) -+{ -+ return ssl->quic_read_level; -+} -+ -+OSSL_ENCRYPTION_LEVEL SSL_quic_write_level(const SSL *ssl) -+{ -+ return ssl->quic_write_level; -+} -+ -+int SSL_provide_quic_data(SSL *ssl, OSSL_ENCRYPTION_LEVEL level, -+ const uint8_t *data, size_t len) -+{ -+ size_t l; -+ -+ if (!SSL_IS_QUIC(ssl)) { -+ SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -+ return 0; -+ } -+ -+ /* Level can be different than the current read, but not less */ -+ if (level < ssl->quic_read_level -+ || (ssl->quic_input_data_tail != NULL && level < ssl->quic_input_data_tail->level)) { -+ SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED); -+ return 0; -+ } -+ -+ /* Split the QUIC messages up, if necessary */ -+ while (len > 0) { -+ QUIC_DATA *qd; -+ const uint8_t *p = data + 1; -+ -+ n2l3(p, l); -+ l += SSL3_HM_HEADER_LENGTH; -+ -+ if (l > len) { -+ SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, SSL_R_BAD_DATA_LENGTH); -+ return 0; -+ } -+ -+ qd = OPENSSL_malloc(sizeof(QUIC_DATA) + l); -+ if (qd == NULL) { -+ SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+ -+ qd->next = NULL; -+ qd->length = l; -+ qd->level = level; -+ memcpy((void*)(qd + 1), data, l); -+ if (ssl->quic_input_data_tail != NULL) -+ ssl->quic_input_data_tail->next = qd; -+ else -+ ssl->quic_input_data_head = qd; -+ ssl->quic_input_data_tail = qd; -+ -+ data += l; -+ len -= l; -+ } -+ -+ return 1; -+} -+ -+int SSL_CTX_set_quic_method(SSL_CTX *ctx, const SSL_QUIC_METHOD *quic_method) -+{ -+ switch (ctx->method->version) { -+ case DTLS1_VERSION: -+ case DTLS1_2_VERSION: -+ case DTLS_ANY_VERSION: -+ case DTLS1_BAD_VER: -+ return 0; -+ default: -+ break; -+ } -+ ctx->quic_method = quic_method; -+ ctx->options &= SSL_OP_ENABLE_MIDDLEBOX_COMPAT; -+ return 1; -+} -+ -+int SSL_set_quic_method(SSL *ssl, const SSL_QUIC_METHOD *quic_method) -+{ -+ switch (ssl->method->version) { -+ case DTLS1_VERSION: -+ case DTLS1_2_VERSION: -+ case DTLS_ANY_VERSION: -+ case DTLS1_BAD_VER: -+ return 0; -+ default: -+ break; -+ } -+ ssl->quic_method = quic_method; -+ ssl->options &= SSL_OP_ENABLE_MIDDLEBOX_COMPAT; -+ return 1; -+} -+ -+int quic_set_encryption_secrets(SSL *ssl, OSSL_ENCRYPTION_LEVEL level) -+{ -+ uint8_t *read_secret = NULL; -+ uint8_t *write_secret = NULL; -+ static const unsigned char zeros[EVP_MAX_MD_SIZE]; -+ -+ if (!SSL_IS_QUIC(ssl)) -+ return 1; -+ -+ /* secrets from the POV of the client */ -+ switch (level) { -+ case ssl_encryption_early_data: -+ write_secret = ssl->early_secret; -+ break; -+ case ssl_encryption_handshake: -+ read_secret = ssl->client_finished_secret; -+ write_secret = ssl->server_finished_secret; -+ break; -+ case ssl_encryption_application: -+ read_secret = ssl->client_app_traffic_secret; -+ write_secret = ssl->server_app_traffic_secret; -+ break; -+ default: -+ return 1; -+ } -+ /* In some cases, we want to set the secret only when BOTH are non-zero */ -+ if (read_secret != NULL && write_secret != NULL -+ && !memcmp(read_secret, zeros, ssl->quic_len) -+ && !memcmp(write_secret, zeros, ssl->quic_len)) -+ return 1; -+ -+ if (ssl->server) { -+ if (!ssl->quic_method->set_encryption_secrets(ssl, level, read_secret, -+ write_secret, ssl->quic_len)) { -+ SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+ } else { -+ if (!ssl->quic_method->set_encryption_secrets(ssl, level, write_secret, -+ read_secret, ssl->quic_len)) { -+ SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+ } -+ -+ return 1; -+} -+ -+int SSL_process_quic_post_handshake(SSL *ssl) -+{ -+ if (SSL_in_init(ssl) || !SSL_IS_QUIC(ssl)) { -+ SSLerr(SSL_F_SSL_PROCESS_QUIC_POST_HANDSHAKE, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -+ return 0; -+ } -+ -+ ossl_statem_set_in_init(ssl, 1); -+ -+ if (ssl->handshake_func(ssl) <= 0) -+ return 0; -+ -+ return 1; -+} -+ -+int SSL_is_quic(SSL* ssl) -+{ -+ return SSL_IS_QUIC(ssl); -+} -+ -+#endif ---- a/ssl/statem/extensions.c -+++ b/ssl/statem/extensions.c -@@ -59,6 +59,10 @@ static int final_early_data(SSL *s, unsi - static int final_maxfragmentlen(SSL *s, unsigned int context, int sent); - static int init_post_handshake_auth(SSL *s, unsigned int context); - static int final_psk(SSL *s, unsigned int context, int sent); -+#ifndef OPENSSL_NO_QUIC -+static int init_quic_transport_params(SSL *s, unsigned int context); -+static int final_quic_transport_params(SSL *s, unsigned int context, int sent); -+#endif - - /* Structure to define a built-in extension */ - typedef struct extensions_definition_st { -@@ -370,6 +374,19 @@ static const EXTENSION_DEFINITION ext_de - tls_construct_certificate_authorities, - tls_construct_certificate_authorities, NULL, - }, -+#ifndef OPENSSL_NO_QUIC -+ { -+ TLSEXT_TYPE_quic_transport_parameters, -+ SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_SERVER_HELLO -+ | SSL_EXT_TLS_IMPLEMENTATION_ONLY | SSL_EXT_TLS1_3_ONLY, -+ init_quic_transport_params, -+ tls_parse_ctos_quic_transport_params, tls_parse_stoc_quic_transport_params, -+ tls_construct_stoc_quic_transport_params, tls_construct_ctos_quic_transport_params, -+ final_quic_transport_params, -+ }, -+#else -+ INVALID_EXTENSION, -+#endif - { - /* Must be immediately before pre_shared_key */ - TLSEXT_TYPE_padding, -@@ -1728,3 +1745,15 @@ static int final_psk(SSL *s, unsigned in - - return 1; - } -+ -+#ifndef OPENSSL_NO_QUIC -+static int init_quic_transport_params(SSL *s, unsigned int context) -+{ -+ return 1; -+} -+ -+static int final_quic_transport_params(SSL *s, unsigned int context, int sent) -+{ -+ return 1; -+} -+#endif ---- a/ssl/statem/extensions_clnt.c -+++ b/ssl/statem/extensions_clnt.c -@@ -1196,7 +1196,29 @@ EXT_RETURN tls_construct_ctos_post_hands - #endif - } - -+#ifndef OPENSSL_NO_QUIC -+/* SAME AS tls_construct_stoc_quic_transport_params() */ -+EXT_RETURN tls_construct_ctos_quic_transport_params(SSL *s, WPACKET *pkt, -+ unsigned int context, X509 *x, -+ size_t chainidx) -+{ -+ if (s->ext.quic_transport_params == NULL -+ || s->ext.quic_transport_params_len == 0) { -+ return EXT_RETURN_NOT_SENT; -+ } -+ -+ if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_quic_transport_parameters) -+ || !WPACKET_start_sub_packet_u16(pkt) -+ || !WPACKET_sub_memcpy_u16(pkt, s->ext.quic_transport_params, -+ s->ext.quic_transport_params_len) -+ || !WPACKET_close(pkt)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return EXT_RETURN_FAIL; -+ } - -+ return EXT_RETURN_SENT; -+} -+#endif - /* - * Parse the server's renegotiation binding and abort if it's not right - */ -@@ -1981,3 +2003,29 @@ int tls_parse_stoc_psk(SSL *s, PACKET *p - - return 1; - } -+#ifndef OPENSSL_NO_QUIC -+/* SAME AS tls_parse_ctos_quic_transport_params() */ -+int tls_parse_stoc_quic_transport_params(SSL *s, PACKET *pkt, unsigned int context, -+ X509 *x, size_t chainidx) -+{ -+ PACKET trans_param; -+ -+ if (!PACKET_as_length_prefixed_2(pkt, &trans_param) -+ || PACKET_remaining(&trans_param) == 0) { -+ SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); -+ return 0; -+ } -+ -+ OPENSSL_free(s->ext.peer_quic_transport_params); -+ s->ext.peer_quic_transport_params = NULL; -+ s->ext.peer_quic_transport_params_len = 0; -+ -+ if (!PACKET_memdup(&trans_param, -+ &s->ext.peer_quic_transport_params, -+ &s->ext.peer_quic_transport_params_len)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+ return 1; -+} -+#endif ---- a/ssl/statem/extensions_srvr.c -+++ b/ssl/statem/extensions_srvr.c -@@ -1232,6 +1232,33 @@ int tls_parse_ctos_post_handshake_auth(S - return 1; - } - -+#ifndef OPENSSL_NO_QUIC -+/* SAME AS tls_parse_stoc_quic_transport_params() */ -+int tls_parse_ctos_quic_transport_params(SSL *s, PACKET *pkt, unsigned int context, -+ X509 *x, size_t chainidx) -+{ -+ PACKET trans_param; -+ -+ if (!PACKET_as_length_prefixed_2(pkt, &trans_param) -+ || PACKET_remaining(&trans_param) == 0) { -+ SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); -+ return 0; -+ } -+ -+ OPENSSL_free(s->ext.peer_quic_transport_params); -+ s->ext.peer_quic_transport_params = NULL; -+ s->ext.peer_quic_transport_params_len = 0; -+ -+ if (!PACKET_memdup(&trans_param, -+ &s->ext.peer_quic_transport_params, -+ &s->ext.peer_quic_transport_params_len)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+ return 1; -+} -+#endif -+ - /* - * Add the server's renegotiation binding - */ -@@ -1914,3 +1941,27 @@ EXT_RETURN tls_construct_stoc_psk(SSL *s - - return EXT_RETURN_SENT; - } -+ -+#ifndef OPENSSL_NO_QUIC -+/* SAME AS tls_construct_ctos_quic_transport_params() */ -+EXT_RETURN tls_construct_stoc_quic_transport_params(SSL *s, WPACKET *pkt, -+ unsigned int context, X509 *x, -+ size_t chainidx) -+{ -+ if (s->ext.quic_transport_params == NULL -+ || s->ext.quic_transport_params_len == 0) { -+ return EXT_RETURN_NOT_SENT; -+ } -+ -+ if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_quic_transport_parameters) -+ || !WPACKET_start_sub_packet_u16(pkt) -+ || !WPACKET_sub_memcpy_u16(pkt, s->ext.quic_transport_params, -+ s->ext.quic_transport_params_len) -+ || !WPACKET_close(pkt)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return EXT_RETURN_FAIL; -+ } -+ -+ return EXT_RETURN_SENT; -+} -+#endif ---- a/ssl/statem/statem.c -+++ b/ssl/statem/statem.c -@@ -583,6 +583,10 @@ static SUB_STATE_RETURN read_state_machi - * In DTLS we get the whole message in one go - header and body - */ - ret = dtls_get_message(s, &mt); -+#ifndef OPENSSL_NO_QUIC -+ } else if (SSL_IS_QUIC(s)) { -+ ret = quic_get_message(s, &mt, &len); -+#endif - } else { - ret = tls_get_message_header(s, &mt); - } -@@ -612,8 +616,8 @@ static SUB_STATE_RETURN read_state_machi - return SUB_STATE_ERROR; - } - -- /* dtls_get_message already did this */ -- if (!SSL_IS_DTLS(s) -+ /* dtls_get_message/quic_get_message already did this */ -+ if (!SSL_IS_DTLS(s) && !SSL_IS_QUIC(s) - && s->s3.tmp.message_size > 0 - && !grow_init_buf(s, s->s3.tmp.message_size - + SSL3_HM_HEADER_LENGTH)) { -@@ -631,7 +635,8 @@ static SUB_STATE_RETURN read_state_machi - * opportunity to do any further processing. - */ - ret = dtls_get_message_body(s, &len); -- } else { -+ } else if (!SSL_IS_QUIC(s)) { -+ /* We already got this above for QUIC */ - ret = tls_get_message_body(s, &len); - } - if (ret == 0) { -@@ -921,6 +926,15 @@ static SUB_STATE_RETURN write_state_mach - int statem_flush(SSL *s) - { - s->rwstate = SSL_WRITING; -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ if (!s->quic_method->flush_flight(s)) { -+ /* NOTE: BIO_flush() does not generate an error */ -+ SSLerr(SSL_F_STATEM_FLUSH, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+ } else -+#endif - if (BIO_flush(s->wbio) <= 0) { - return 0; - } ---- a/ssl/statem/statem_lib.c -+++ b/ssl/statem/statem_lib.c -@@ -44,9 +44,23 @@ int ssl3_do_write(SSL *s, int type) - { - int ret; - size_t written = 0; -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s) && type == SSL3_RT_HANDSHAKE) { -+ ret = s->quic_method->add_handshake_data(s, s->quic_write_level, -+ (const uint8_t*)&s->init_buf->data[s->init_off], -+ s->init_num); -+ if (!ret) { -+ ret = -1; -+ /* QUIC can't sent anything out sice the above failed */ -+ SSLerr(SSL_F_SSL3_DO_WRITE, ERR_R_INTERNAL_ERROR); -+ } else { -+ written = s->init_num; -+ } -+ } else -+#endif -+ ret = ssl3_write_bytes(s, type, &s->init_buf->data[s->init_off], -+ s->init_num, &written); - -- ret = ssl3_write_bytes(s, type, &s->init_buf->data[s->init_off], -- s->init_num, &written); - if (ret <= 0) - return -1; - if (type == SSL3_RT_HANDSHAKE) -@@ -1169,6 +1183,7 @@ int tls_get_message_header(SSL *s, int * - - do { - while (s->init_num < SSL3_HM_HEADER_LENGTH) { -+ /* QUIC: either create a special ssl_read_bytes... or if/else this */ - i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, &recvd_type, - &p[s->init_num], - SSL3_HM_HEADER_LENGTH - s->init_num, ---- a/ssl/statem/statem_local.h -+++ b/ssl/statem/statem_local.h -@@ -104,6 +104,7 @@ __owur int tls_get_message_header(SSL *s - __owur int tls_get_message_body(SSL *s, size_t *len); - __owur int dtls_get_message(SSL *s, int *mt); - __owur int dtls_get_message_body(SSL *s, size_t *len); -+__owur int quic_get_message(SSL *s, int *mt, size_t *len); - - /* Message construction and processing functions */ - __owur int tls_process_initial_server_flight(SSL *s); -@@ -251,6 +252,10 @@ int tls_parse_ctos_psk(SSL *s, PACKET *p - size_t chainidx); - int tls_parse_ctos_post_handshake_auth(SSL *, PACKET *pkt, unsigned int context, - X509 *x, size_t chainidx); -+#ifndef OPENSSL_NO_QUIC -+int tls_parse_ctos_quic_transport_params(SSL *s, PACKET *pkt, unsigned int context, -+ X509 *x, size_t chainidx); -+#endif - - EXT_RETURN tls_construct_stoc_renegotiate(SSL *s, WPACKET *pkt, - unsigned int context, X509 *x, -@@ -311,6 +316,11 @@ EXT_RETURN tls_construct_stoc_cryptopro_ - size_t chainidx); - EXT_RETURN tls_construct_stoc_psk(SSL *s, WPACKET *pkt, unsigned int context, - X509 *x, size_t chainidx); -+#ifndef OPENSSL_NO_QUIC -+EXT_RETURN tls_construct_stoc_quic_transport_params(SSL *s, WPACKET *pkt, -+ unsigned int context, X509 *x, -+ size_t chainidx); -+#endif - - /* Client Extension processing */ - EXT_RETURN tls_construct_ctos_renegotiate(SSL *s, WPACKET *pkt, unsigned int context, -@@ -380,6 +390,11 @@ EXT_RETURN tls_construct_ctos_psk(SSL *s - X509 *x, size_t chainidx); - EXT_RETURN tls_construct_ctos_post_handshake_auth(SSL *s, WPACKET *pkt, unsigned int context, - X509 *x, size_t chainidx); -+#ifndef OPENSSL_NO_QUIC -+EXT_RETURN tls_construct_ctos_quic_transport_params(SSL *s, WPACKET *pkt, -+ unsigned int context, X509 *x, -+ size_t chainidx); -+#endif - - int tls_parse_stoc_renegotiate(SSL *s, PACKET *pkt, unsigned int context, - X509 *x, size_t chainidx); -@@ -423,6 +438,10 @@ int tls_parse_stoc_cookie(SSL *s, PACKET - size_t chainidx); - int tls_parse_stoc_psk(SSL *s, PACKET *pkt, unsigned int context, X509 *x, - size_t chainidx); -+#ifndef OPENSSL_NO_QUIC -+int tls_parse_stoc_quic_transport_params(SSL *s, PACKET *pkt, unsigned int context, -+ X509 *x, size_t chainidx); -+#endif - - int tls_handle_alpn(SSL *s); - ---- /dev/null -+++ b/ssl/statem/statem_quic.c -@@ -0,0 +1,106 @@ -+/* -+ * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. -+ * -+ * Licensed under the Apache License 2.0 (the "License"). You may not use -+ * this file except in compliance with the License. You can obtain a copy -+ * in the file LICENSE in the source distribution or at -+ * https://www.openssl.org/source/license.html -+ */ -+ -+#include "../ssl_local.h" -+#include "statem_local.h" -+#include "internal/cryptlib.h" -+ -+#ifdef OPENSSL_NO_QUIC -+NON_EMPTY_TRANSLATION_UNIT -+#else -+ -+int quic_get_message(SSL *s, int *mt, size_t *len) -+{ -+ size_t l; -+ QUIC_DATA *qd; -+ uint8_t *p; -+ -+ if (s->quic_input_data_head == NULL) { -+ s->rwstate = SSL_READING; -+ *len = 0; -+ return 0; -+ } -+ -+ /* This is where we check for the proper level, not when data is given */ -+ if (s->quic_input_data_head->level != s->quic_read_level) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED); -+ *len = 0; -+ return 0; -+ } -+ -+ if (!BUF_MEM_grow_clean(s->init_buf, (int)s->quic_input_data_head->length)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_BUF_LIB); -+ *len = 0; -+ return 0; -+ } -+ -+ /* Copy buffered data */ -+ qd = s->quic_input_data_head; -+ memcpy(s->init_buf->data, (void*)(qd + 1), qd->length); -+ s->init_buf->length = qd->length; -+ s->quic_input_data_head = qd->next; -+ if (s->quic_input_data_head == NULL) -+ s->quic_input_data_tail = NULL; -+ OPENSSL_free(qd); -+ -+ s->s3.tmp.message_type = *mt = *(s->init_buf->data); -+ p = (uint8_t*)s->init_buf->data + 1; -+ n2l3(p, l); -+ s->init_num = s->s3.tmp.message_size = *len = l; -+ s->init_msg = s->init_buf->data + SSL3_HM_HEADER_LENGTH; -+ -+ /* No CCS in QUIC/TLSv1.3? */ -+ if (*mt == SSL3_MT_CHANGE_CIPHER_SPEC) { -+ SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_CCS_RECEIVED_EARLY); -+ *len = 0; -+ return 0; -+ } -+ -+ /* -+ * If receiving Finished, record MAC of prior handshake messages for -+ * Finished verification. -+ */ -+ if (*mt == SSL3_MT_FINISHED && !ssl3_take_mac(s)) { -+ /* SSLfatal() already called */ -+ *len = 0; -+ return 0; -+ } -+ -+ /* -+ * We defer feeding in the HRR until later. We'll do it as part of -+ * processing the message -+ * The TLsv1.3 handshake transcript stops at the ClientFinished -+ * message. -+ */ -+#define SERVER_HELLO_RANDOM_OFFSET (SSL3_HM_HEADER_LENGTH + 2) -+ /* KeyUpdate and NewSessionTicket do not need to be added */ -+ if (!SSL_IS_TLS13(s) || (s->s3.tmp.message_type != SSL3_MT_NEWSESSION_TICKET -+ && s->s3.tmp.message_type != SSL3_MT_KEY_UPDATE)) { -+ if (s->s3.tmp.message_type != SSL3_MT_SERVER_HELLO -+ || s->init_num < SERVER_HELLO_RANDOM_OFFSET + SSL3_RANDOM_SIZE -+ || memcmp(hrrrandom, -+ s->init_buf->data + SERVER_HELLO_RANDOM_OFFSET, -+ SSL3_RANDOM_SIZE) != 0) { -+ if (!ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, -+ s->init_num + SSL3_HM_HEADER_LENGTH)) { -+ /* SSLfatal() already called */ -+ *len = 0; -+ return 0; -+ } -+ } -+ } -+ if (s->msg_callback) -+ s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data, -+ (size_t)s->init_num + SSL3_HM_HEADER_LENGTH, s, -+ s->msg_callback_arg); -+ -+ return 1; -+} -+ -+#endif ---- a/ssl/tls13_enc.c -+++ b/ssl/tls13_enc.c -@@ -440,6 +440,9 @@ int tls13_change_cipher_state(SSL *s, in - ktls_crypto_info_t crypto_info; - BIO *bio; - #endif -+#ifndef OPENSSL_NO_QUIC -+ OSSL_ENCRYPTION_LEVEL level = ssl_encryption_initial; -+#endif - - if (which & SSL3_CC_READ) { - if (s->enc_read_ctx != NULL) { -@@ -485,6 +488,9 @@ int tls13_change_cipher_state(SSL *s, in - label = client_early_traffic; - labellen = sizeof(client_early_traffic) - 1; - log_label = CLIENT_EARLY_LABEL; -+#ifndef OPENSSL_NO_QUIC -+ level = ssl_encryption_early_data; -+#endif - - handlen = BIO_get_mem_data(s->s3.handshake_buffer, &hdata); - if (handlen <= 0) { -@@ -544,6 +550,9 @@ int tls13_change_cipher_state(SSL *s, in - goto err; - } - hashlen = hashlenui; -+#ifndef OPENSSL_NO_QUIC -+ s->quic_len = hashlen; -+#endif - EVP_MD_CTX_free(mdctx); - - if (!tls13_hkdf_expand(s, md, insecret, -@@ -561,6 +570,14 @@ int tls13_change_cipher_state(SSL *s, in - /* SSLfatal() already called */ - goto err; - } -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ if (s->server) -+ s->quic_read_level = ssl_encryption_early_data; -+ else -+ s->quic_write_level = ssl_encryption_early_data; -+ } -+#endif - } else if (which & SSL3_CC_HANDSHAKE) { - insecret = s->handshake_secret; - finsecret = s->client_finished_secret; -@@ -568,6 +585,15 @@ int tls13_change_cipher_state(SSL *s, in - label = client_handshake_traffic; - labellen = sizeof(client_handshake_traffic) - 1; - log_label = CLIENT_HANDSHAKE_LABEL; -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ level = ssl_encryption_handshake; -+ if (s->server) -+ s->quic_read_level = ssl_encryption_handshake; -+ else -+ s->quic_write_level = ssl_encryption_handshake; -+ } -+#endif - /* - * The handshake hash used for the server read/client write handshake - * traffic secret is the same as the hash for the server -@@ -590,6 +616,15 @@ int tls13_change_cipher_state(SSL *s, in - * previously saved value. - */ - hash = s->server_finished_hash; -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ level = ssl_encryption_application; /* ??? */ -+ if (s->server) -+ s->quic_read_level = ssl_encryption_application; -+ else -+ s->quic_write_level = ssl_encryption_application; -+ } -+#endif - } - } else { - /* Early data never applies to client-read/server-write */ -@@ -600,11 +635,29 @@ int tls13_change_cipher_state(SSL *s, in - label = server_handshake_traffic; - labellen = sizeof(server_handshake_traffic) - 1; - log_label = SERVER_HANDSHAKE_LABEL; -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ level = ssl_encryption_handshake; -+ if (s->server) -+ s->quic_write_level = ssl_encryption_handshake; -+ else -+ s->quic_read_level = ssl_encryption_handshake; -+ } -+#endif - } else { - insecret = s->master_secret; - label = server_application_traffic; - labellen = sizeof(server_application_traffic) - 1; - log_label = SERVER_APPLICATION_LABEL; -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ level = ssl_encryption_application; -+ if (s->server) -+ s->quic_write_level = ssl_encryption_application; -+ else -+ s->quic_read_level = ssl_encryption_application; -+ } -+#endif - } - } - -@@ -732,6 +785,12 @@ int tls13_change_cipher_state(SSL *s, in - skip_ktls: - # endif - #endif -+ -+#ifndef OPENSSL_NO_QUIC -+ if (!quic_set_encryption_secrets(s, level)) -+ goto err; -+#endif -+ - ret = 1; - err: - if ((which & SSL3_CC_EARLY) != 0) { ---- a/test/helpers/ssltestlib.c -+++ b/test/helpers/ssltestlib.c -@@ -1166,6 +1166,11 @@ int create_ssl_connection(SSL *serverssl - if (!create_bare_ssl_connection(serverssl, clientssl, want, 1)) - return 0; - -+#ifndef OPENSSL_NO_QUIC -+ /* QUIC does not support SSL_read_ex */ -+ if (SSL_is_quic(clientssl)) -+ return 1; -+#endif - /* - * We attempt to read some data on the client side which we expect to fail. - * This will ensure we have received the NewSessionTicket in TLSv1.3 where ---- a/test/sslapitest.c -+++ b/test/sslapitest.c -@@ -10765,6 +10765,135 @@ static int test_multi_resume(int idx) - return testresult; - } - -+#ifndef OPENSSL_NO_QUIC -+static int test_quic_set_encryption_secrets(SSL *ssl, OSSL_ENCRYPTION_LEVEL level, -+ const uint8_t *read_secret, -+ const uint8_t *write_secret, size_t secret_len) -+{ -+ test_printf_stderr("quic_set_encryption_secrets() %s, lvl=%d, len=%zd\n", -+ ssl->server ? "server" : "client", level, secret_len); -+ return 1; -+} -+ -+static int test_quic_add_handshake_data(SSL *ssl, OSSL_ENCRYPTION_LEVEL level, -+ const uint8_t *data, size_t len) -+{ -+ SSL *peer = (SSL*)SSL_get_app_data(ssl); -+ -+ test_printf_stderr("quic_add_handshake_data() %s, lvl=%d, *data=0x%02X, len=%zd\n", -+ ssl->server ? "server" : "client", level, (int)*data, len); -+ if (!TEST_ptr(peer)) -+ return 0; -+ -+ if (!TEST_true(SSL_provide_quic_data(peer, level, data, len))) { -+ ERR_print_errors_fp(stderr); -+ return 0; -+ } -+ -+ return 1; -+} -+ -+static int test_quic_flush_flight(SSL *ssl) -+{ -+ test_printf_stderr("quic_flush_flight() %s\n", ssl->server ? "server" : "client"); -+ return 1; -+} -+ -+static int test_quic_send_alert(SSL *ssl, enum ssl_encryption_level_t level, uint8_t alert) -+{ -+ test_printf_stderr("quic_send_alert() %s, lvl=%d, alert=%d\n", -+ ssl->server ? "server" : "client", level, alert); -+ return 1; -+} -+ -+static SSL_QUIC_METHOD quic_method = { -+ test_quic_set_encryption_secrets, -+ test_quic_add_handshake_data, -+ test_quic_flush_flight, -+ test_quic_send_alert, -+}; -+ -+static int test_quic_api(void) -+{ -+ SSL_CTX *cctx = NULL, *sctx = NULL; -+ SSL *clientssl = NULL, *serverssl = NULL; -+ int testresult = 0; -+ -+ static const char *server_str = "SERVER"; -+ static const char *client_str = "CLIENT"; -+ const uint8_t *peer_str; -+ size_t peer_str_len; -+ -+ /* Clean up logging space */ -+ memset(client_log_buffer, 0, sizeof(client_log_buffer)); -+ memset(server_log_buffer, 0, sizeof(server_log_buffer)); -+ client_log_buffer_index = 0; -+ server_log_buffer_index = 0; -+ error_writing_log = 0; -+ -+ -+ if (!TEST_ptr(sctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method())) -+ || !TEST_true(SSL_CTX_set_quic_method(sctx, &quic_method)) -+ || !TEST_ptr(sctx->quic_method) -+ || !TEST_ptr(serverssl = SSL_new(sctx)) -+ || !TEST_true(SSL_IS_QUIC(serverssl)) -+ || !TEST_true(SSL_set_quic_method(serverssl, NULL)) -+ || !TEST_false(SSL_IS_QUIC(serverssl)) -+ || !TEST_true(SSL_set_quic_method(serverssl, &quic_method)) -+ || !TEST_true(SSL_IS_QUIC(serverssl))) -+ goto end; -+ -+ SSL_CTX_free(sctx); -+ sctx = NULL; -+ SSL_free(serverssl); -+ serverssl = NULL; -+ -+ if (!TEST_true(create_ssl_ctx_pair(libctx, -+ TLS_server_method(), -+ TLS_client_method(), -+ TLS1_3_VERSION, 0, -+ &sctx, &cctx, cert, privkey)) -+ || !TEST_true(SSL_CTX_set_quic_method(sctx, &quic_method)) -+ || !TEST_true(SSL_CTX_set_quic_method(cctx, &quic_method)) -+ || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, -+ &clientssl, NULL, NULL)) -+ || !TEST_true(SSL_set_quic_transport_params(serverssl, -+ (unsigned char*)server_str, -+ sizeof(server_str))) -+ || !TEST_true(SSL_set_quic_transport_params(clientssl, -+ (unsigned char*)client_str, -+ sizeof(client_str))) -+ || !TEST_true(SSL_set_app_data(serverssl, clientssl)) -+ || !TEST_true(SSL_set_app_data(clientssl, serverssl)) -+ || !TEST_true(create_ssl_connection(serverssl, clientssl, -+ SSL_ERROR_NONE)) -+ || !TEST_true(SSL_version(serverssl) == TLS1_3_VERSION) -+ || !TEST_true(SSL_version(clientssl) == TLS1_3_VERSION) -+ || !(TEST_int_eq(SSL_quic_read_level(clientssl), ssl_encryption_application)) -+ || !(TEST_int_eq(SSL_quic_read_level(serverssl), ssl_encryption_application)) -+ || !(TEST_int_eq(SSL_quic_write_level(clientssl), ssl_encryption_application)) -+ || !(TEST_int_eq(SSL_quic_write_level(serverssl), ssl_encryption_application))) -+ goto end; -+ -+ SSL_get_peer_quic_transport_params(serverssl, &peer_str, &peer_str_len); -+ if (!TEST_mem_eq(peer_str, peer_str_len, client_str, sizeof(client_str))) -+ goto end; -+ SSL_get_peer_quic_transport_params(clientssl, &peer_str, &peer_str_len); -+ if (!TEST_mem_eq(peer_str, peer_str_len, server_str, sizeof(server_str))) -+ goto end; -+ -+ /* Deal with two NewSessionTickets */ -+ if (!TEST_true(SSL_process_quic_post_handshake(clientssl)) -+ || !TEST_true(SSL_process_quic_post_handshake(clientssl))) -+ goto end; -+ -+ testresult = 1; -+ -+ end: -+ return testresult; -+} -+#endif /* OPENSSL_NO_QUIC */ -+ - OPT_TEST_DECLARE_USAGE("certfile privkeyfile srpvfile tmpfile provider config dhfile\n") - - int setup_tests(void) -@@ -11041,6 +11170,9 @@ int setup_tests(void) - #endif - ADD_ALL_TESTS(test_handshake_retry, 16); - ADD_ALL_TESTS(test_multi_resume, 5); -+#ifndef OPENSSL_NO_QUIC -+ ADD_TEST(test_quic_api); -+#endif - return 1; - - err: ---- a/test/tls13secretstest.c -+++ b/test/tls13secretstest.c -@@ -224,6 +224,13 @@ void ssl_evp_md_free(const EVP_MD *md) - { - } - -+#ifndef OPENSSL_NO_QUIC -+int quic_set_encryption_secrets(SSL *ssl, OSSL_ENCRYPTION_LEVEL level) -+{ -+ return 1; -+} -+#endif -+ - /* End of mocked out code */ - - static int test_secret(SSL *s, unsigned char *prk, ---- a/util/libssl.num -+++ b/util/libssl.num -@@ -520,3 +520,14 @@ SSL_load_client_CA_file_ex - SSL_set0_tmp_dh_pkey 521 3_0_0 EXIST::FUNCTION: - SSL_CTX_set0_tmp_dh_pkey 522 3_0_0 EXIST::FUNCTION: - SSL_group_to_name 523 3_0_0 EXIST::FUNCTION: -+SSL_quic_read_level 20000 3_0_0 EXIST::FUNCTION:QUIC -+SSL_set_quic_transport_params 20001 3_0_0 EXIST::FUNCTION:QUIC -+SSL_CIPHER_get_prf_nid 20002 3_0_0 EXIST::FUNCTION: -+SSL_is_quic 20003 3_0_0 EXIST::FUNCTION:QUIC -+SSL_get_peer_quic_transport_params 20004 3_0_0 EXIST::FUNCTION:QUIC -+SSL_quic_write_level 20005 3_0_0 EXIST::FUNCTION:QUIC -+SSL_CTX_set_quic_method 20006 3_0_0 EXIST::FUNCTION:QUIC -+SSL_set_quic_method 20007 3_0_0 EXIST::FUNCTION:QUIC -+SSL_quic_max_handshake_flight_len 20008 3_0_0 EXIST::FUNCTION:QUIC -+SSL_process_quic_post_handshake 20009 3_0_0 EXIST::FUNCTION:QUIC -+SSL_provide_quic_data 20010 3_0_0 EXIST::FUNCTION:QUIC ---- a/util/other.syms -+++ b/util/other.syms -@@ -143,6 +143,8 @@ custom_ext_free_cb - custom_ext_parse_cb datatype - pem_password_cb datatype - ssl_ct_validation_cb datatype -+OSSL_ENCRYPTION_LEVEL datatype -+SSL_QUIC_METHOD datatype - # - ASN1_BIT_STRING_digest define - BIO_append_filename define diff --git a/openwrt/patch/openssl/quic/0002-QUIC-New-method-to-get-QUIC-secret-length.patch b/openwrt/patch/openssl/quic/0002-QUIC-New-method-to-get-QUIC-secret-length.patch deleted file mode 100644 index 595c8b720..000000000 --- a/openwrt/patch/openssl/quic/0002-QUIC-New-method-to-get-QUIC-secret-length.patch +++ /dev/null @@ -1,90 +0,0 @@ -From faa77f36f0e0be37bf9733a14d79a8e9f5863c45 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Fri, 14 Jun 2019 12:04:14 -0400 -Subject: [PATCH 02/43] QUIC: New method to get QUIC secret length - ---- - ssl/ssl_local.h | 1 - - ssl/ssl_quic.c | 30 ++++++++++++++++++++++++++---- - ssl/tls13_enc.c | 3 --- - 3 files changed, 26 insertions(+), 8 deletions(-) - ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -1717,7 +1717,6 @@ struct ssl_st { - QUIC_DATA *quic_input_data_head; - QUIC_DATA *quic_input_data_tail; - const SSL_QUIC_METHOD *quic_method; -- size_t quic_len; - #endif - /* - * Parsed form of the ClientHello, kept around across client_hello_cb ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -181,6 +181,8 @@ int quic_set_encryption_secrets(SSL *ssl - { - uint8_t *read_secret = NULL; - uint8_t *write_secret = NULL; -+ size_t len; -+ const EVP_MD *md; - static const unsigned char zeros[EVP_MAX_MD_SIZE]; - - if (!SSL_IS_QUIC(ssl)) -@@ -202,21 +204,41 @@ int quic_set_encryption_secrets(SSL *ssl - default: - return 1; - } -+ -+ md = ssl_handshake_md(ssl); -+ if (md == NULL) { -+ /* May not have selected cipher, yet */ -+ const SSL_CIPHER *c = NULL; -+ -+ if (ssl->session != NULL) -+ c = SSL_SESSION_get0_cipher(ssl->session); -+ else if (ssl->psksession != NULL) -+ c = SSL_SESSION_get0_cipher(ssl->psksession); -+ -+ if (c != NULL) -+ md = SSL_CIPHER_get_handshake_digest(c); -+ } -+ -+ if ((len = EVP_MD_size(md)) <= 0) { -+ SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+ - /* In some cases, we want to set the secret only when BOTH are non-zero */ - if (read_secret != NULL && write_secret != NULL -- && !memcmp(read_secret, zeros, ssl->quic_len) -- && !memcmp(write_secret, zeros, ssl->quic_len)) -+ && !memcmp(read_secret, zeros, len) -+ && !memcmp(write_secret, zeros, len)) - return 1; - - if (ssl->server) { - if (!ssl->quic_method->set_encryption_secrets(ssl, level, read_secret, -- write_secret, ssl->quic_len)) { -+ write_secret, len)) { - SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); - return 0; - } - } else { - if (!ssl->quic_method->set_encryption_secrets(ssl, level, write_secret, -- read_secret, ssl->quic_len)) { -+ read_secret, len)) { - SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); - return 0; - } ---- a/ssl/tls13_enc.c -+++ b/ssl/tls13_enc.c -@@ -550,9 +550,6 @@ int tls13_change_cipher_state(SSL *s, in - goto err; - } - hashlen = hashlenui; --#ifndef OPENSSL_NO_QUIC -- s->quic_len = hashlen; --#endif - EVP_MD_CTX_free(mdctx); - - if (!tls13_hkdf_expand(s, md, insecret, diff --git a/openwrt/patch/openssl/quic/0003-QUIC-Make-temp-secret-names-less-confusing.patch b/openwrt/patch/openssl/quic/0003-QUIC-Make-temp-secret-names-less-confusing.patch deleted file mode 100644 index 652578bac..000000000 --- a/openwrt/patch/openssl/quic/0003-QUIC-Make-temp-secret-names-less-confusing.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 0e937646383bf2dddf8cc6eb63ad0a56bdd7a9ad Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Thu, 15 Aug 2019 11:13:15 -0400 -Subject: [PATCH 03/43] QUIC: Make temp secret names less confusing - ---- - ssl/ssl_quic.c | 28 ++++++++++++++-------------- - 1 file changed, 14 insertions(+), 14 deletions(-) - ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -179,8 +179,8 @@ int SSL_set_quic_method(SSL *ssl, const - - int quic_set_encryption_secrets(SSL *ssl, OSSL_ENCRYPTION_LEVEL level) - { -- uint8_t *read_secret = NULL; -- uint8_t *write_secret = NULL; -+ uint8_t *c2s_secret = NULL; -+ uint8_t *s2c_secret = NULL; - size_t len; - const EVP_MD *md; - static const unsigned char zeros[EVP_MAX_MD_SIZE]; -@@ -191,15 +191,15 @@ int quic_set_encryption_secrets(SSL *ssl - /* secrets from the POV of the client */ - switch (level) { - case ssl_encryption_early_data: -- write_secret = ssl->early_secret; -+ s2c_secret = ssl->early_secret; - break; - case ssl_encryption_handshake: -- read_secret = ssl->client_finished_secret; -- write_secret = ssl->server_finished_secret; -+ c2s_secret = ssl->client_finished_secret; -+ s2c_secret = ssl->server_finished_secret; - break; - case ssl_encryption_application: -- read_secret = ssl->client_app_traffic_secret; -- write_secret = ssl->server_app_traffic_secret; -+ c2s_secret = ssl->client_app_traffic_secret; -+ s2c_secret = ssl->server_app_traffic_secret; - break; - default: - return 1; -@@ -225,20 +225,20 @@ int quic_set_encryption_secrets(SSL *ssl - } - - /* In some cases, we want to set the secret only when BOTH are non-zero */ -- if (read_secret != NULL && write_secret != NULL -- && !memcmp(read_secret, zeros, len) -- && !memcmp(write_secret, zeros, len)) -+ if (c2s_secret != NULL && s2c_secret != NULL -+ && !memcmp(c2s_secret, zeros, len) -+ && !memcmp(s2c_secret, zeros, len)) - return 1; - - if (ssl->server) { -- if (!ssl->quic_method->set_encryption_secrets(ssl, level, read_secret, -- write_secret, len)) { -+ if (!ssl->quic_method->set_encryption_secrets(ssl, level, c2s_secret, -+ s2c_secret, len)) { - SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); - return 0; - } - } else { -- if (!ssl->quic_method->set_encryption_secrets(ssl, level, write_secret, -- read_secret, len)) { -+ if (!ssl->quic_method->set_encryption_secrets(ssl, level, s2c_secret, -+ c2s_secret, len)) { - SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); - return 0; - } diff --git a/openwrt/patch/openssl/quic/0004-QUIC-Move-QUIC-transport-params-to-encrypted-extensi.patch b/openwrt/patch/openssl/quic/0004-QUIC-Move-QUIC-transport-params-to-encrypted-extensi.patch deleted file mode 100644 index d718b6f3b..000000000 --- a/openwrt/patch/openssl/quic/0004-QUIC-Move-QUIC-transport-params-to-encrypted-extensi.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 53f22b3eaa410edb8f1b26ce2a61b76d2485090d Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Thu, 15 Aug 2019 11:35:10 -0400 -Subject: [PATCH 04/43] QUIC: Move QUIC transport params to encrypted - extensions - ---- - ssl/statem/extensions.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/ssl/statem/extensions.c -+++ b/ssl/statem/extensions.c -@@ -377,7 +377,7 @@ static const EXTENSION_DEFINITION ext_de - #ifndef OPENSSL_NO_QUIC - { - TLSEXT_TYPE_quic_transport_parameters, -- SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_SERVER_HELLO -+ SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS - | SSL_EXT_TLS_IMPLEMENTATION_ONLY | SSL_EXT_TLS1_3_ONLY, - init_quic_transport_params, - tls_parse_ctos_quic_transport_params, tls_parse_stoc_quic_transport_params, diff --git a/openwrt/patch/openssl/quic/0005-QUIC-Use-proper-secrets-for-handshake.patch b/openwrt/patch/openssl/quic/0005-QUIC-Use-proper-secrets-for-handshake.patch deleted file mode 100644 index 6a5b08fa1..000000000 --- a/openwrt/patch/openssl/quic/0005-QUIC-Use-proper-secrets-for-handshake.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 73ef78a611eb40a0a74c60aa9fe9850ae69d08b6 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Thu, 15 Aug 2019 12:37:03 -0400 -Subject: [PATCH 05/43] QUIC: Use proper secrets for handshake - ---- - ssl/ssl_local.h | 2 ++ - ssl/ssl_quic.c | 4 ++-- - ssl/tls13_enc.c | 6 ++++++ - 3 files changed, 10 insertions(+), 2 deletions(-) - ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -1490,6 +1490,8 @@ struct ssl_st { - unsigned char handshake_traffic_hash[EVP_MAX_MD_SIZE]; - unsigned char client_app_traffic_secret[EVP_MAX_MD_SIZE]; - unsigned char server_app_traffic_secret[EVP_MAX_MD_SIZE]; -+ unsigned char client_hand_traffic_secret[EVP_MAX_MD_SIZE]; -+ unsigned char server_hand_traffic_secret[EVP_MAX_MD_SIZE]; - unsigned char exporter_master_secret[EVP_MAX_MD_SIZE]; - unsigned char early_exporter_master_secret[EVP_MAX_MD_SIZE]; - EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */ ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -194,8 +194,8 @@ int quic_set_encryption_secrets(SSL *ssl - s2c_secret = ssl->early_secret; - break; - case ssl_encryption_handshake: -- c2s_secret = ssl->client_finished_secret; -- s2c_secret = ssl->server_finished_secret; -+ c2s_secret = ssl->client_hand_traffic_secret; -+ s2c_secret = ssl->server_hand_traffic_secret; - break; - case ssl_encryption_application: - c2s_secret = ssl->client_app_traffic_secret; ---- a/ssl/tls13_enc.c -+++ b/ssl/tls13_enc.c -@@ -723,6 +723,12 @@ int tls13_change_cipher_state(SSL *s, in - } - } else if (label == client_application_traffic) - memcpy(s->client_app_traffic_secret, secret, hashlen); -+#ifndef OPENSSL_NO_QUIC -+ else if (label == client_handshake_traffic) -+ memcpy(s->client_hand_traffic_secret, secret, hashlen); -+ else if (label == server_handshake_traffic) -+ memcpy(s->server_hand_traffic_secret, secret, hashlen); -+#endif - - if (!ssl_log_secret(s, log_label, secret, hashlen)) { - /* SSLfatal() already called */ diff --git a/openwrt/patch/openssl/quic/0006-QUIC-Handle-partial-handshake-messages.patch b/openwrt/patch/openssl/quic/0006-QUIC-Handle-partial-handshake-messages.patch deleted file mode 100644 index 9a6186590..000000000 --- a/openwrt/patch/openssl/quic/0006-QUIC-Handle-partial-handshake-messages.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 0c9c5b370c5d5d7d0adf8defacd68aa0455f2cbf Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Thu, 15 Aug 2019 13:26:32 -0400 -Subject: [PATCH 06/43] QUIC: Handle partial handshake messages - ---- - ssl/ssl_local.h | 1 + - ssl/ssl_quic.c | 28 ++++++++++++++++++++++------ - 2 files changed, 23 insertions(+), 6 deletions(-) - ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -1225,6 +1225,7 @@ typedef struct cert_pkey_st CERT_PKEY; - struct quic_data_st { - struct quic_data_st *next; - OSSL_ENCRYPTION_LEVEL level; -+ size_t offset; - size_t length; - }; - typedef struct quic_data_st QUIC_DATA; ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -114,15 +114,26 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - QUIC_DATA *qd; - const uint8_t *p = data + 1; - -+ /* Check for an incomplete block */ -+ qd = ssl->quic_input_data_tail; -+ if (qd != NULL) { -+ l = qd->length - qd->offset; -+ if (l != 0) { -+ /* we still need to copy `l` bytes into the last data block */ -+ if (l > len) -+ l = len; -+ memcpy((char*)(qd+1) + qd->offset, data, l); -+ qd->offset += l; -+ len -= l; -+ data += l; -+ continue; -+ } -+ } -+ - n2l3(p, l); - l += SSL3_HM_HEADER_LENGTH; - -- if (l > len) { -- SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, SSL_R_BAD_DATA_LENGTH); -- return 0; -- } -- -- qd = OPENSSL_malloc(sizeof(QUIC_DATA) + l); -+ qd = OPENSSL_zalloc(sizeof(QUIC_DATA) + l); - if (qd == NULL) { - SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_INTERNAL_ERROR); - return 0; -@@ -131,6 +142,11 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - qd->next = NULL; - qd->length = l; - qd->level = level; -+ /* partial data received? */ -+ if (l > len) -+ l = len; -+ qd->offset = l; -+ - memcpy((void*)(qd + 1), data, l); - if (ssl->quic_input_data_tail != NULL) - ssl->quic_input_data_tail->next = qd; diff --git a/openwrt/patch/openssl/quic/0007-QUIC-Fix-quic_transport-constructors-parsers.patch b/openwrt/patch/openssl/quic/0007-QUIC-Fix-quic_transport-constructors-parsers.patch deleted file mode 100644 index 667ff9c81..000000000 --- a/openwrt/patch/openssl/quic/0007-QUIC-Fix-quic_transport-constructors-parsers.patch +++ /dev/null @@ -1,82 +0,0 @@ -From bfde078b732672f8668793722b6ba1209f78c6b3 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Mon, 26 Aug 2019 13:29:17 -0400 -Subject: [PATCH 07/43] QUIC: Fix quic_transport constructors/parsers - ---- - ssl/statem/extensions_clnt.c | 16 +++------------- - ssl/statem/extensions_srvr.c | 16 +++------------- - 2 files changed, 6 insertions(+), 26 deletions(-) - ---- a/ssl/statem/extensions_clnt.c -+++ b/ssl/statem/extensions_clnt.c -@@ -1208,10 +1208,8 @@ EXT_RETURN tls_construct_ctos_quic_trans - } - - if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_quic_transport_parameters) -- || !WPACKET_start_sub_packet_u16(pkt) -- || !WPACKET_sub_memcpy_u16(pkt, s->ext.quic_transport_params, -- s->ext.quic_transport_params_len) -- || !WPACKET_close(pkt)) { -+ || !WPACKET_sub_memcpy_u16(pkt, s->ext.quic_transport_params, -+ s->ext.quic_transport_params_len)) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); - return EXT_RETURN_FAIL; - } -@@ -2008,19 +2006,11 @@ int tls_parse_stoc_psk(SSL *s, PACKET *p - int tls_parse_stoc_quic_transport_params(SSL *s, PACKET *pkt, unsigned int context, - X509 *x, size_t chainidx) - { -- PACKET trans_param; -- -- if (!PACKET_as_length_prefixed_2(pkt, &trans_param) -- || PACKET_remaining(&trans_param) == 0) { -- SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); -- return 0; -- } -- - OPENSSL_free(s->ext.peer_quic_transport_params); - s->ext.peer_quic_transport_params = NULL; - s->ext.peer_quic_transport_params_len = 0; - -- if (!PACKET_memdup(&trans_param, -+ if (!PACKET_memdup(pkt, - &s->ext.peer_quic_transport_params, - &s->ext.peer_quic_transport_params_len)) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); ---- a/ssl/statem/extensions_srvr.c -+++ b/ssl/statem/extensions_srvr.c -@@ -1237,19 +1237,11 @@ int tls_parse_ctos_post_handshake_auth(S - int tls_parse_ctos_quic_transport_params(SSL *s, PACKET *pkt, unsigned int context, - X509 *x, size_t chainidx) - { -- PACKET trans_param; -- -- if (!PACKET_as_length_prefixed_2(pkt, &trans_param) -- || PACKET_remaining(&trans_param) == 0) { -- SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION); -- return 0; -- } -- - OPENSSL_free(s->ext.peer_quic_transport_params); - s->ext.peer_quic_transport_params = NULL; - s->ext.peer_quic_transport_params_len = 0; - -- if (!PACKET_memdup(&trans_param, -+ if (!PACKET_memdup(pkt, - &s->ext.peer_quic_transport_params, - &s->ext.peer_quic_transport_params_len)) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -@@ -1954,10 +1946,8 @@ EXT_RETURN tls_construct_stoc_quic_trans - } - - if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_quic_transport_parameters) -- || !WPACKET_start_sub_packet_u16(pkt) -- || !WPACKET_sub_memcpy_u16(pkt, s->ext.quic_transport_params, -- s->ext.quic_transport_params_len) -- || !WPACKET_close(pkt)) { -+ || !WPACKET_sub_memcpy_u16(pkt, s->ext.quic_transport_params, -+ s->ext.quic_transport_params_len)) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); - return EXT_RETURN_FAIL; - } diff --git a/openwrt/patch/openssl/quic/0008-QUIC-Reset-init-state-in-SSL_process_quic_post_hands.patch b/openwrt/patch/openssl/quic/0008-QUIC-Reset-init-state-in-SSL_process_quic_post_hands.patch deleted file mode 100644 index 4d3fabf58..000000000 --- a/openwrt/patch/openssl/quic/0008-QUIC-Reset-init-state-in-SSL_process_quic_post_hands.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 2e492e056b68540c5ff222bd53ee4ebe2f4a0181 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Thu, 29 Aug 2019 11:53:41 -0400 -Subject: [PATCH 08/43] QUIC: Reset init state in - SSL_process_quic_post_handshake() - ---- - ssl/ssl_quic.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -265,16 +265,19 @@ int quic_set_encryption_secrets(SSL *ssl - - int SSL_process_quic_post_handshake(SSL *ssl) - { -+ int ret; -+ - if (SSL_in_init(ssl) || !SSL_IS_QUIC(ssl)) { - SSLerr(SSL_F_SSL_PROCESS_QUIC_POST_HANDSHAKE, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; - } - - ossl_statem_set_in_init(ssl, 1); -+ ret = ssl->handshake_func(ssl); -+ ossl_statem_set_in_init(ssl, 0); - -- if (ssl->handshake_func(ssl) <= 0) -+ if (ret <= 0) - return 0; -- - return 1; - } - diff --git a/openwrt/patch/openssl/quic/0009-QUIC-Don-t-process-an-incomplete-message.patch b/openwrt/patch/openssl/quic/0009-QUIC-Don-t-process-an-incomplete-message.patch deleted file mode 100644 index 37bec9656..000000000 --- a/openwrt/patch/openssl/quic/0009-QUIC-Don-t-process-an-incomplete-message.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 059e2a654d4226a8419407cfeb8a8e15d48733c6 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Thu, 29 Aug 2019 12:03:48 -0400 -Subject: [PATCH 09/43] QUIC: Don't process an incomplete message - ---- - ssl/statem/statem_quic.c | 9 ++++----- - 1 file changed, 4 insertions(+), 5 deletions(-) - ---- a/ssl/statem/statem_quic.c -+++ b/ssl/statem/statem_quic.c -@@ -18,30 +18,29 @@ NON_EMPTY_TRANSLATION_UNIT - int quic_get_message(SSL *s, int *mt, size_t *len) - { - size_t l; -- QUIC_DATA *qd; -+ QUIC_DATA *qd = s->quic_input_data_head; - uint8_t *p; - -- if (s->quic_input_data_head == NULL) { -+ if (qd == NULL || (qd->length - qd->offset) != 0) { - s->rwstate = SSL_READING; - *len = 0; - return 0; - } - - /* This is where we check for the proper level, not when data is given */ -- if (s->quic_input_data_head->level != s->quic_read_level) { -+ if (qd->level != s->quic_read_level) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED); - *len = 0; - return 0; - } - -- if (!BUF_MEM_grow_clean(s->init_buf, (int)s->quic_input_data_head->length)) { -+ if (!BUF_MEM_grow_clean(s->init_buf, (int)qd->length)) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_BUF_LIB); - *len = 0; - return 0; - } - - /* Copy buffered data */ -- qd = s->quic_input_data_head; - memcpy(s->init_buf->data, (void*)(qd + 1), qd->length); - s->init_buf->length = qd->length; - s->quic_input_data_head = qd->next; diff --git a/openwrt/patch/openssl/quic/0010-QUIC-Quick-fix-s2c-to-c2s-for-early-secret.patch b/openwrt/patch/openssl/quic/0010-QUIC-Quick-fix-s2c-to-c2s-for-early-secret.patch deleted file mode 100644 index dc7d53c97..000000000 --- a/openwrt/patch/openssl/quic/0010-QUIC-Quick-fix-s2c-to-c2s-for-early-secret.patch +++ /dev/null @@ -1,20 +0,0 @@ -From 8ff2c79869c1ab3aa3f9c565197111809a482599 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Thu, 29 Aug 2019 20:21:58 -0400 -Subject: [PATCH 10/43] QUIC: Quick fix: s2c to c2s for early secret - ---- - ssl/ssl_quic.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -207,7 +207,7 @@ int quic_set_encryption_secrets(SSL *ssl - /* secrets from the POV of the client */ - switch (level) { - case ssl_encryption_early_data: -- s2c_secret = ssl->early_secret; -+ c2s_secret = ssl->early_secret; - break; - case ssl_encryption_handshake: - c2s_secret = ssl->client_hand_traffic_secret; diff --git a/openwrt/patch/openssl/quic/0011-QUIC-Add-client-early-traffic-secret-storage.patch b/openwrt/patch/openssl/quic/0011-QUIC-Add-client-early-traffic-secret-storage.patch deleted file mode 100644 index 6fefff0d3..000000000 --- a/openwrt/patch/openssl/quic/0011-QUIC-Add-client-early-traffic-secret-storage.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 9796392fbe8d7cb0540176de2ad602610f066b61 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Fri, 30 Aug 2019 09:09:42 -0400 -Subject: [PATCH 11/43] QUIC: Add client early traffic secret storage - ---- - ssl/ssl_local.h | 1 + - ssl/ssl_quic.c | 2 +- - ssl/tls13_enc.c | 2 ++ - 3 files changed, 4 insertions(+), 1 deletion(-) - ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -1493,6 +1493,7 @@ struct ssl_st { - unsigned char server_app_traffic_secret[EVP_MAX_MD_SIZE]; - unsigned char client_hand_traffic_secret[EVP_MAX_MD_SIZE]; - unsigned char server_hand_traffic_secret[EVP_MAX_MD_SIZE]; -+ unsigned char client_early_traffic_secret[EVP_MAX_MD_SIZE]; - unsigned char exporter_master_secret[EVP_MAX_MD_SIZE]; - unsigned char early_exporter_master_secret[EVP_MAX_MD_SIZE]; - EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */ ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -207,7 +207,7 @@ int quic_set_encryption_secrets(SSL *ssl - /* secrets from the POV of the client */ - switch (level) { - case ssl_encryption_early_data: -- c2s_secret = ssl->early_secret; -+ c2s_secret = ssl->client_early_traffic_secret; - break; - case ssl_encryption_handshake: - c2s_secret = ssl->client_hand_traffic_secret; ---- a/ssl/tls13_enc.c -+++ b/ssl/tls13_enc.c -@@ -728,6 +728,8 @@ int tls13_change_cipher_state(SSL *s, in - memcpy(s->client_hand_traffic_secret, secret, hashlen); - else if (label == server_handshake_traffic) - memcpy(s->server_hand_traffic_secret, secret, hashlen); -+ else if (label == client_early_traffic) -+ memcpy(s->client_early_traffic_secret, secret, hashlen); - #endif - - if (!ssl_log_secret(s, log_label, secret, hashlen)) { diff --git a/openwrt/patch/openssl/quic/0012-QUIC-Add-OPENSSL_NO_QUIC-wrapper.patch b/openwrt/patch/openssl/quic/0012-QUIC-Add-OPENSSL_NO_QUIC-wrapper.patch deleted file mode 100644 index 271893b35..000000000 --- a/openwrt/patch/openssl/quic/0012-QUIC-Add-OPENSSL_NO_QUIC-wrapper.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 41e5fc307ef92a747a5b81758185cca47307faf6 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Fri, 30 Aug 2019 09:15:31 -0400 -Subject: [PATCH 12/43] QUIC: Add OPENSSL_NO_QUIC wrapper - ---- - ssl/ssl_local.h | 2 ++ - 1 file changed, 2 insertions(+) - ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -1491,9 +1491,11 @@ struct ssl_st { - unsigned char handshake_traffic_hash[EVP_MAX_MD_SIZE]; - unsigned char client_app_traffic_secret[EVP_MAX_MD_SIZE]; - unsigned char server_app_traffic_secret[EVP_MAX_MD_SIZE]; -+# ifndef OPENSSL_NO_QUIC - unsigned char client_hand_traffic_secret[EVP_MAX_MD_SIZE]; - unsigned char server_hand_traffic_secret[EVP_MAX_MD_SIZE]; - unsigned char client_early_traffic_secret[EVP_MAX_MD_SIZE]; -+# endif - unsigned char exporter_master_secret[EVP_MAX_MD_SIZE]; - unsigned char early_exporter_master_secret[EVP_MAX_MD_SIZE]; - EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */ diff --git a/openwrt/patch/openssl/quic/0013-QUIC-Correctly-disable-middlebox-compat.patch b/openwrt/patch/openssl/quic/0013-QUIC-Correctly-disable-middlebox-compat.patch deleted file mode 100644 index be5aa0aca..000000000 --- a/openwrt/patch/openssl/quic/0013-QUIC-Correctly-disable-middlebox-compat.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 9103ae64bb8f2abc4d4f146293bd104b641209cc Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Fri, 30 Aug 2019 09:47:48 -0400 -Subject: [PATCH 13/43] QUIC: Correctly disable middlebox compat - ---- - ssl/ssl_quic.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -173,7 +173,7 @@ int SSL_CTX_set_quic_method(SSL_CTX *ctx - break; - } - ctx->quic_method = quic_method; -- ctx->options &= SSL_OP_ENABLE_MIDDLEBOX_COMPAT; -+ ctx->options &= ~SSL_OP_ENABLE_MIDDLEBOX_COMPAT; - return 1; - } - -@@ -189,7 +189,7 @@ int SSL_set_quic_method(SSL *ssl, const - break; - } - ssl->quic_method = quic_method; -- ssl->options &= SSL_OP_ENABLE_MIDDLEBOX_COMPAT; -+ ssl->options &= ~SSL_OP_ENABLE_MIDDLEBOX_COMPAT; - return 1; - } - diff --git a/openwrt/patch/openssl/quic/0014-QUIC-Move-QUIC-code-out-of-tls13_change_cipher_state.patch b/openwrt/patch/openssl/quic/0014-QUIC-Move-QUIC-code-out-of-tls13_change_cipher_state.patch deleted file mode 100644 index 6d57731a9..000000000 --- a/openwrt/patch/openssl/quic/0014-QUIC-Move-QUIC-code-out-of-tls13_change_cipher_state.patch +++ /dev/null @@ -1,327 +0,0 @@ -From ad33923b6596437c1e63954decd6cf261bfa5dc7 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Fri, 30 Aug 2019 11:17:58 -0400 -Subject: [PATCH 14/43] QUIC: Move QUIC code out of tls13_change_cipher_state() - -Create quic_change_cipher_state() that does the minimal required -to generate the QUIC secrets. (e.g. encryption contexts are not -initialized). ---- - ssl/ssl_quic.c | 7 -- - ssl/tls13_enc.c | 217 ++++++++++++++++++++++++++++++------------------ - 2 files changed, 138 insertions(+), 86 deletions(-) - ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -199,7 +199,6 @@ int quic_set_encryption_secrets(SSL *ssl - uint8_t *s2c_secret = NULL; - size_t len; - const EVP_MD *md; -- static const unsigned char zeros[EVP_MAX_MD_SIZE]; - - if (!SSL_IS_QUIC(ssl)) - return 1; -@@ -240,12 +239,6 @@ int quic_set_encryption_secrets(SSL *ssl - return 0; - } - -- /* In some cases, we want to set the secret only when BOTH are non-zero */ -- if (c2s_secret != NULL && s2c_secret != NULL -- && !memcmp(c2s_secret, zeros, len) -- && !memcmp(s2c_secret, zeros, len)) -- return 1; -- - if (ssl->server) { - if (!ssl->quic_method->set_encryption_secrets(ssl, level, c2s_secret, - s2c_secret, len)) { ---- a/ssl/tls13_enc.c -+++ b/ssl/tls13_enc.c -@@ -400,27 +400,144 @@ static int derive_secret_key_and_iv(SSL - return 1; - } - --int tls13_change_cipher_state(SSL *s, int which) --{ - #ifdef CHARSET_EBCDIC -- static const unsigned char client_early_traffic[] = {0x63, 0x20, 0x65, 0x20, /*traffic*/0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x00}; -- static const unsigned char client_handshake_traffic[] = {0x63, 0x20, 0x68, 0x73, 0x20, /*traffic*/0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x00}; -- static const unsigned char client_application_traffic[] = {0x63, 0x20, 0x61, 0x70, 0x20, /*traffic*/0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x00}; -- static const unsigned char server_handshake_traffic[] = {0x73, 0x20, 0x68, 0x73, 0x20, /*traffic*/0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x00}; -- static const unsigned char server_application_traffic[] = {0x73, 0x20, 0x61, 0x70, 0x20, /*traffic*/0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x00}; -- static const unsigned char exporter_master_secret[] = {0x65, 0x78, 0x70, 0x20, /* master*/ 0x6D, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00}; -- static const unsigned char resumption_master_secret[] = {0x72, 0x65, 0x73, 0x20, /* master*/ 0x6D, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00}; -- static const unsigned char early_exporter_master_secret[] = {0x65, 0x20, 0x65, 0x78, 0x70, 0x20, /* master*/ 0x6D, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00}; -+static const unsigned char client_early_traffic[] = {0x63, 0x20, 0x65, 0x20, /*traffic*/0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x00}; -+static const unsigned char client_handshake_traffic[] = {0x63, 0x20, 0x68, 0x73, 0x20, /*traffic*/0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x00}; -+static const unsigned char client_application_traffic[] = {0x63, 0x20, 0x61, 0x70, 0x20, /*traffic*/0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x00}; -+static const unsigned char server_handshake_traffic[] = {0x73, 0x20, 0x68, 0x73, 0x20, /*traffic*/0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x00}; -+static const unsigned char server_application_traffic[] = {0x73, 0x20, 0x61, 0x70, 0x20, /*traffic*/0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x00}; -+static const unsigned char exporter_master_secret[] = {0x65, 0x78, 0x70, 0x20, /* master*/ 0x6D, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00}; -+static const unsigned char resumption_master_secret[] = {0x72, 0x65, 0x73, 0x20, /* master*/ 0x6D, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00}; -+static const unsigned char early_exporter_master_secret[] = {0x65, 0x20, 0x65, 0x78, 0x70, 0x20, /* master*/ 0x6D, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00}; - #else -- static const unsigned char client_early_traffic[] = "c e traffic"; -- static const unsigned char client_handshake_traffic[] = "c hs traffic"; -- static const unsigned char client_application_traffic[] = "c ap traffic"; -- static const unsigned char server_handshake_traffic[] = "s hs traffic"; -- static const unsigned char server_application_traffic[] = "s ap traffic"; -- static const unsigned char exporter_master_secret[] = "exp master"; -- static const unsigned char resumption_master_secret[] = "res master"; -- static const unsigned char early_exporter_master_secret[] = "e exp master"; -+static const unsigned char client_early_traffic[] = "c e traffic"; -+static const unsigned char client_handshake_traffic[] = "c hs traffic"; -+static const unsigned char client_application_traffic[] = "c ap traffic"; -+static const unsigned char server_handshake_traffic[] = "s hs traffic"; -+static const unsigned char server_application_traffic[] = "s ap traffic"; -+static const unsigned char exporter_master_secret[] = "exp master"; -+static const unsigned char resumption_master_secret[] = "res master"; -+static const unsigned char early_exporter_master_secret[] = "e exp master"; - #endif -+#ifndef OPENSSL_NO_QUIC -+static int quic_change_cipher_state(SSL *s, int which) -+{ -+ unsigned char hash[EVP_MAX_MD_SIZE]; -+ size_t hashlen = 0; -+ int hashleni; -+ int ret = 0; -+ const EVP_MD *md = NULL; -+ OSSL_ENCRYPTION_LEVEL level = ssl_encryption_initial; -+ int is_handshake = ((which & SSL3_CC_HANDSHAKE) == SSL3_CC_HANDSHAKE); -+ int is_client_read = ((which & SSL3_CHANGE_CIPHER_CLIENT_READ) == SSL3_CHANGE_CIPHER_CLIENT_READ); -+ int is_server_write = ((which & SSL3_CHANGE_CIPHER_SERVER_WRITE) == SSL3_CHANGE_CIPHER_SERVER_WRITE); -+ int is_early = (which & SSL3_CC_EARLY); -+ -+ md = ssl_handshake_md(s); -+ if (!ssl3_digest_cached_records(s, 1) -+ || !ssl_handshake_hash(s, hash, sizeof(hash), &hashlen)) { -+ /* SSLfatal() already called */; -+ goto err; -+ } -+ -+ /* Ensure cast to size_t is safe */ -+ hashleni = EVP_MD_size(md); -+ if (!ossl_assert(hashleni >= 0)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB); -+ goto err; -+ } -+ hashlen = (size_t)hashleni; -+ -+ if (is_handshake) -+ level = ssl_encryption_handshake; -+ else -+ level = ssl_encryption_application; -+ -+ if (is_client_read || is_server_write) { -+ if (is_handshake) { -+ level = ssl_encryption_handshake; -+ -+ if (!tls13_hkdf_expand(s, md, s->handshake_secret, client_handshake_traffic, -+ sizeof(client_handshake_traffic)-1, hash, hashlen, -+ s->client_hand_traffic_secret, hashlen, 1)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } -+ if (!ssl_log_secret(s, CLIENT_HANDSHAKE_LABEL, s->client_hand_traffic_secret, hashlen)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } -+ -+ if (!tls13_hkdf_expand(s, md, s->handshake_secret, server_handshake_traffic, -+ sizeof(server_handshake_traffic)-1, hash, hashlen, -+ s->server_hand_traffic_secret, hashlen, 1)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } -+ if (!ssl_log_secret(s, SERVER_HANDSHAKE_LABEL, s->server_hand_traffic_secret, hashlen)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } -+ } else { -+ level = ssl_encryption_application; -+ -+ if (!tls13_hkdf_expand(s, md, s->master_secret, client_application_traffic, -+ sizeof(client_application_traffic)-1, hash, hashlen, -+ s->client_app_traffic_secret, hashlen, 1)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } -+ if (!ssl_log_secret(s, CLIENT_APPLICATION_LABEL, s->client_app_traffic_secret, hashlen)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } -+ -+ if (!tls13_hkdf_expand(s, md, s->master_secret, server_application_traffic, -+ sizeof(server_application_traffic)-1, hash, hashlen, -+ s->server_app_traffic_secret, hashlen, 1)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } -+ if (!ssl_log_secret(s, SERVER_APPLICATION_LABEL, s->server_app_traffic_secret, hashlen)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } -+ } -+ if (s->server) -+ s->quic_write_level = level; -+ else -+ s->quic_read_level = level; -+ } else { -+ if (is_early) { -+ level = ssl_encryption_early_data; -+ -+ if (!tls13_hkdf_expand(s, md, s->early_secret, client_early_traffic, -+ sizeof(client_early_traffic)-1, hash, hashlen, -+ s->client_early_traffic_secret, hashlen, 1)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } -+ if (!ssl_log_secret(s, CLIENT_EARLY_LABEL, s->client_early_traffic_secret, hashlen)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } -+ } -+ if (s->server) -+ s->quic_read_level = level; -+ else -+ s->quic_write_level = level; -+ } -+ -+ if (level != ssl_encryption_initial && !quic_set_encryption_secrets(s, level)) -+ goto err; -+ -+ ret = 1; -+ err: -+ return ret; -+} -+#endif /* OPENSSL_NO_QUIC */ -+int tls13_change_cipher_state(SSL *s, int which) -+{ - unsigned char *iv; - unsigned char key[EVP_MAX_KEY_LENGTH]; - unsigned char secret[EVP_MAX_MD_SIZE]; -@@ -440,8 +557,10 @@ int tls13_change_cipher_state(SSL *s, in - ktls_crypto_info_t crypto_info; - BIO *bio; - #endif -+ - #ifndef OPENSSL_NO_QUIC -- OSSL_ENCRYPTION_LEVEL level = ssl_encryption_initial; -+ if (SSL_IS_QUIC(s)) -+ return quic_change_cipher_state(s, which); - #endif - - if (which & SSL3_CC_READ) { -@@ -488,9 +607,6 @@ int tls13_change_cipher_state(SSL *s, in - label = client_early_traffic; - labellen = sizeof(client_early_traffic) - 1; - log_label = CLIENT_EARLY_LABEL; --#ifndef OPENSSL_NO_QUIC -- level = ssl_encryption_early_data; --#endif - - handlen = BIO_get_mem_data(s->s3.handshake_buffer, &hdata); - if (handlen <= 0) { -@@ -567,14 +683,6 @@ int tls13_change_cipher_state(SSL *s, in - /* SSLfatal() already called */ - goto err; - } --#ifndef OPENSSL_NO_QUIC -- if (SSL_IS_QUIC(s)) { -- if (s->server) -- s->quic_read_level = ssl_encryption_early_data; -- else -- s->quic_write_level = ssl_encryption_early_data; -- } --#endif - } else if (which & SSL3_CC_HANDSHAKE) { - insecret = s->handshake_secret; - finsecret = s->client_finished_secret; -@@ -582,15 +690,6 @@ int tls13_change_cipher_state(SSL *s, in - label = client_handshake_traffic; - labellen = sizeof(client_handshake_traffic) - 1; - log_label = CLIENT_HANDSHAKE_LABEL; --#ifndef OPENSSL_NO_QUIC -- if (SSL_IS_QUIC(s)) { -- level = ssl_encryption_handshake; -- if (s->server) -- s->quic_read_level = ssl_encryption_handshake; -- else -- s->quic_write_level = ssl_encryption_handshake; -- } --#endif - /* - * The handshake hash used for the server read/client write handshake - * traffic secret is the same as the hash for the server -@@ -613,15 +712,6 @@ int tls13_change_cipher_state(SSL *s, in - * previously saved value. - */ - hash = s->server_finished_hash; --#ifndef OPENSSL_NO_QUIC -- if (SSL_IS_QUIC(s)) { -- level = ssl_encryption_application; /* ??? */ -- if (s->server) -- s->quic_read_level = ssl_encryption_application; -- else -- s->quic_write_level = ssl_encryption_application; -- } --#endif - } - } else { - /* Early data never applies to client-read/server-write */ -@@ -632,29 +722,11 @@ int tls13_change_cipher_state(SSL *s, in - label = server_handshake_traffic; - labellen = sizeof(server_handshake_traffic) - 1; - log_label = SERVER_HANDSHAKE_LABEL; --#ifndef OPENSSL_NO_QUIC -- if (SSL_IS_QUIC(s)) { -- level = ssl_encryption_handshake; -- if (s->server) -- s->quic_write_level = ssl_encryption_handshake; -- else -- s->quic_read_level = ssl_encryption_handshake; -- } --#endif - } else { - insecret = s->master_secret; - label = server_application_traffic; - labellen = sizeof(server_application_traffic) - 1; - log_label = SERVER_APPLICATION_LABEL; --#ifndef OPENSSL_NO_QUIC -- if (SSL_IS_QUIC(s)) { -- level = ssl_encryption_application; -- if (s->server) -- s->quic_write_level = ssl_encryption_application; -- else -- s->quic_read_level = ssl_encryption_application; -- } --#endif - } - } - -@@ -723,14 +795,6 @@ int tls13_change_cipher_state(SSL *s, in - } - } else if (label == client_application_traffic) - memcpy(s->client_app_traffic_secret, secret, hashlen); --#ifndef OPENSSL_NO_QUIC -- else if (label == client_handshake_traffic) -- memcpy(s->client_hand_traffic_secret, secret, hashlen); -- else if (label == server_handshake_traffic) -- memcpy(s->server_hand_traffic_secret, secret, hashlen); -- else if (label == client_early_traffic) -- memcpy(s->client_early_traffic_secret, secret, hashlen); --#endif - - if (!ssl_log_secret(s, log_label, secret, hashlen)) { - /* SSLfatal() already called */ -@@ -791,11 +855,6 @@ skip_ktls: - # endif - #endif - --#ifndef OPENSSL_NO_QUIC -- if (!quic_set_encryption_secrets(s, level)) -- goto err; --#endif -- - ret = 1; - err: - if ((which & SSL3_CC_EARLY) != 0) { diff --git a/openwrt/patch/openssl/quic/0015-QUIC-Tweeks-to-quic_change_cipher_state.patch b/openwrt/patch/openssl/quic/0015-QUIC-Tweeks-to-quic_change_cipher_state.patch deleted file mode 100644 index f18795f52..000000000 --- a/openwrt/patch/openssl/quic/0015-QUIC-Tweeks-to-quic_change_cipher_state.patch +++ /dev/null @@ -1,121 +0,0 @@ -From f1f40a948479350a0d38a6bd5e932cf7b523f13e Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Fri, 30 Aug 2019 11:38:56 -0400 -Subject: [PATCH 15/43] QUIC: Tweeks to quic_change_cipher_state() - ---- - ssl/tls13_enc.c | 69 +++++++++++++++++-------------------------------- - 1 file changed, 24 insertions(+), 45 deletions(-) - ---- a/ssl/tls13_enc.c -+++ b/ssl/tls13_enc.c -@@ -448,33 +448,18 @@ static int quic_change_cipher_state(SSL - } - hashlen = (size_t)hashleni; - -- if (is_handshake) -- level = ssl_encryption_handshake; -- else -- level = ssl_encryption_application; -- - if (is_client_read || is_server_write) { - if (is_handshake) { - level = ssl_encryption_handshake; - - if (!tls13_hkdf_expand(s, md, s->handshake_secret, client_handshake_traffic, - sizeof(client_handshake_traffic)-1, hash, hashlen, -- s->client_hand_traffic_secret, hashlen, 1)) { -- /* SSLfatal() already called */ -- goto err; -- } -- if (!ssl_log_secret(s, CLIENT_HANDSHAKE_LABEL, s->client_hand_traffic_secret, hashlen)) { -- /* SSLfatal() already called */ -- goto err; -- } -- -- if (!tls13_hkdf_expand(s, md, s->handshake_secret, server_handshake_traffic, -- sizeof(server_handshake_traffic)-1, hash, hashlen, -- s->server_hand_traffic_secret, hashlen, 1)) { -- /* SSLfatal() already called */ -- goto err; -- } -- if (!ssl_log_secret(s, SERVER_HANDSHAKE_LABEL, s->server_hand_traffic_secret, hashlen)) { -+ s->client_hand_traffic_secret, hashlen, 1) -+ || !ssl_log_secret(s, CLIENT_HANDSHAKE_LABEL, s->client_hand_traffic_secret, hashlen) -+ || !tls13_hkdf_expand(s, md, s->handshake_secret, server_handshake_traffic, -+ sizeof(server_handshake_traffic)-1, hash, hashlen, -+ s->server_hand_traffic_secret, hashlen, 1) -+ || !ssl_log_secret(s, SERVER_HANDSHAKE_LABEL, s->server_hand_traffic_secret, hashlen)) { - /* SSLfatal() already called */ - goto err; - } -@@ -483,26 +468,20 @@ static int quic_change_cipher_state(SSL - - if (!tls13_hkdf_expand(s, md, s->master_secret, client_application_traffic, - sizeof(client_application_traffic)-1, hash, hashlen, -- s->client_app_traffic_secret, hashlen, 1)) { -- /* SSLfatal() already called */ -- goto err; -- } -- if (!ssl_log_secret(s, CLIENT_APPLICATION_LABEL, s->client_app_traffic_secret, hashlen)) { -- /* SSLfatal() already called */ -- goto err; -- } -- -- if (!tls13_hkdf_expand(s, md, s->master_secret, server_application_traffic, -- sizeof(server_application_traffic)-1, hash, hashlen, -- s->server_app_traffic_secret, hashlen, 1)) { -- /* SSLfatal() already called */ -- goto err; -- } -- if (!ssl_log_secret(s, SERVER_APPLICATION_LABEL, s->server_app_traffic_secret, hashlen)) { -+ s->client_app_traffic_secret, hashlen, 1) -+ || !ssl_log_secret(s, CLIENT_APPLICATION_LABEL, s->client_app_traffic_secret, hashlen) -+ || !tls13_hkdf_expand(s, md, s->master_secret, server_application_traffic, -+ sizeof(server_application_traffic)-1, hash, hashlen, -+ s->server_app_traffic_secret, hashlen, 1) -+ || !ssl_log_secret(s, SERVER_APPLICATION_LABEL, s->server_app_traffic_secret, hashlen)) { - /* SSLfatal() already called */ - goto err; - } - } -+ if (!quic_set_encryption_secrets(s, level)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } - if (s->server) - s->quic_write_level = level; - else -@@ -513,24 +492,24 @@ static int quic_change_cipher_state(SSL - - if (!tls13_hkdf_expand(s, md, s->early_secret, client_early_traffic, - sizeof(client_early_traffic)-1, hash, hashlen, -- s->client_early_traffic_secret, hashlen, 1)) { -- /* SSLfatal() already called */ -- goto err; -- } -- if (!ssl_log_secret(s, CLIENT_EARLY_LABEL, s->client_early_traffic_secret, hashlen)) { -+ s->client_early_traffic_secret, hashlen, 1) -+ || !ssl_log_secret(s, CLIENT_EARLY_LABEL, s->client_early_traffic_secret, hashlen) -+ || !quic_set_encryption_secrets(s, level)) { - /* SSLfatal() already called */ - goto err; - } -+ } else if (is_handshake) { -+ level = ssl_encryption_handshake; -+ } else { -+ level = ssl_encryption_application; - } -+ - if (s->server) - s->quic_read_level = level; - else - s->quic_write_level = level; - } - -- if (level != ssl_encryption_initial && !quic_set_encryption_secrets(s, level)) -- goto err; -- - ret = 1; - err: - return ret; diff --git a/openwrt/patch/openssl/quic/0016-QUIC-Add-support-for-more-secrets.patch b/openwrt/patch/openssl/quic/0016-QUIC-Add-support-for-more-secrets.patch deleted file mode 100644 index fa5ad9c1c..000000000 --- a/openwrt/patch/openssl/quic/0016-QUIC-Add-support-for-more-secrets.patch +++ /dev/null @@ -1,39 +0,0 @@ -From fadf42665c7a7c3f57477391d121ad2ca8698164 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Tue, 24 Sep 2019 10:26:42 -0400 -Subject: [PATCH 16/43] QUIC: Add support for more secrets - ---- - ssl/tls13_enc.c | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - ---- a/ssl/tls13_enc.c -+++ b/ssl/tls13_enc.c -@@ -456,10 +456,14 @@ static int quic_change_cipher_state(SSL - sizeof(client_handshake_traffic)-1, hash, hashlen, - s->client_hand_traffic_secret, hashlen, 1) - || !ssl_log_secret(s, CLIENT_HANDSHAKE_LABEL, s->client_hand_traffic_secret, hashlen) -+ || !tls13_derive_finishedkey(s, md, s->client_hand_traffic_secret, -+ s->client_finished_secret, hashlen) - || !tls13_hkdf_expand(s, md, s->handshake_secret, server_handshake_traffic, - sizeof(server_handshake_traffic)-1, hash, hashlen, - s->server_hand_traffic_secret, hashlen, 1) -- || !ssl_log_secret(s, SERVER_HANDSHAKE_LABEL, s->server_hand_traffic_secret, hashlen)) { -+ || !ssl_log_secret(s, SERVER_HANDSHAKE_LABEL, s->server_hand_traffic_secret, hashlen) -+ || !tls13_derive_finishedkey(s, md, s->server_hand_traffic_secret, -+ s->server_finished_secret, hashlen)) { - /* SSLfatal() already called */ - goto err; - } -@@ -473,7 +477,10 @@ static int quic_change_cipher_state(SSL - || !tls13_hkdf_expand(s, md, s->master_secret, server_application_traffic, - sizeof(server_application_traffic)-1, hash, hashlen, - s->server_app_traffic_secret, hashlen, 1) -- || !ssl_log_secret(s, SERVER_APPLICATION_LABEL, s->server_app_traffic_secret, hashlen)) { -+ || !ssl_log_secret(s, SERVER_APPLICATION_LABEL, s->server_app_traffic_secret, hashlen) -+ || !tls13_hkdf_expand(s, md, s->master_secret, resumption_master_secret, -+ sizeof(resumption_master_secret)-1, hash, hashlen, -+ s->resumption_master_secret, hashlen, 1)) { - /* SSLfatal() already called */ - goto err; - } diff --git a/openwrt/patch/openssl/quic/0017-QUIC-Fix-resumption-secret.patch b/openwrt/patch/openssl/quic/0017-QUIC-Fix-resumption-secret.patch deleted file mode 100644 index f493bcdb6..000000000 --- a/openwrt/patch/openssl/quic/0017-QUIC-Fix-resumption-secret.patch +++ /dev/null @@ -1,49 +0,0 @@ -From a86dc6757fdd4129d08a46fc3604cdbad3c0be41 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Tue, 12 Nov 2019 13:52:35 -0500 -Subject: [PATCH 17/43] QUIC: Fix resumption secret - ---- - ssl/tls13_enc.c | 17 +++++++++++++---- - 1 file changed, 13 insertions(+), 4 deletions(-) - ---- a/ssl/tls13_enc.c -+++ b/ssl/tls13_enc.c -@@ -477,10 +477,7 @@ static int quic_change_cipher_state(SSL - || !tls13_hkdf_expand(s, md, s->master_secret, server_application_traffic, - sizeof(server_application_traffic)-1, hash, hashlen, - s->server_app_traffic_secret, hashlen, 1) -- || !ssl_log_secret(s, SERVER_APPLICATION_LABEL, s->server_app_traffic_secret, hashlen) -- || !tls13_hkdf_expand(s, md, s->master_secret, resumption_master_secret, -- sizeof(resumption_master_secret)-1, hash, hashlen, -- s->resumption_master_secret, hashlen, 1)) { -+ || !ssl_log_secret(s, SERVER_APPLICATION_LABEL, s->server_app_traffic_secret, hashlen)) { - /* SSLfatal() already called */ - goto err; - } -@@ -494,6 +491,8 @@ static int quic_change_cipher_state(SSL - else - s->quic_read_level = level; - } else { -+ /* is_client_write || is_server_read */ -+ - if (is_early) { - level = ssl_encryption_early_data; - -@@ -509,6 +508,16 @@ static int quic_change_cipher_state(SSL - level = ssl_encryption_handshake; - } else { - level = ssl_encryption_application; -+ /* -+ * We also create the resumption master secret, but this time use the -+ * hash for the whole handshake including the Client Finished -+ */ -+ if (!tls13_hkdf_expand(s, md, s->master_secret, resumption_master_secret, -+ sizeof(resumption_master_secret)-1, hash, hashlen, -+ s->resumption_master_secret, hashlen, 1)) { -+ /* SSLfatal() already called */ -+ goto err; -+ } - } - - if (s->server) diff --git a/openwrt/patch/openssl/quic/0018-QUIC-Handle-EndOfEarlyData-and-MaxEarlyData.patch b/openwrt/patch/openssl/quic/0018-QUIC-Handle-EndOfEarlyData-and-MaxEarlyData.patch deleted file mode 100644 index 9943ad8d1..000000000 --- a/openwrt/patch/openssl/quic/0018-QUIC-Handle-EndOfEarlyData-and-MaxEarlyData.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 70a17b75867850760ebf90b899e53f31b3b7c256 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Wed, 13 Nov 2019 12:11:00 -0500 -Subject: [PATCH 18/43] QUIC: Handle EndOfEarlyData and MaxEarlyData - ---- - ssl/statem/extensions_clnt.c | 11 +++++++++++ - ssl/statem/extensions_srvr.c | 12 ++++++++++-- - ssl/statem/statem_clnt.c | 8 ++++++++ - ssl/statem/statem_srvr.c | 4 ++++ - 4 files changed, 33 insertions(+), 2 deletions(-) - ---- a/ssl/statem/extensions_clnt.c -+++ b/ssl/statem/extensions_clnt.c -@@ -1919,6 +1919,17 @@ int tls_parse_stoc_early_data(SSL *s, PA - return 0; - } - -+#ifndef OPENSSL_NO_QUIC -+ /* -+ * QUIC server must send 0xFFFFFFFF or it's a PROTOCOL_VIOLATION -+ * per draft-ietf-quic-tls-24 S4.5 -+ */ -+ if (s->quic_method != NULL && max_early_data != 0xFFFFFFFF) { -+ SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_INVALID_MAX_EARLY_DATA); -+ return 0; -+ } -+#endif -+ - s->session->ext.max_early_data = max_early_data; - - return 1; ---- a/ssl/statem/extensions_srvr.c -+++ b/ssl/statem/extensions_srvr.c -@@ -1890,12 +1890,20 @@ EXT_RETURN tls_construct_stoc_early_data - size_t chainidx) - { - if (context == SSL_EXT_TLS1_3_NEW_SESSION_TICKET) { -- if (s->max_early_data == 0) -+ uint32_t max_early_data = s->max_early_data; -+ -+ if (max_early_data == 0) - return EXT_RETURN_NOT_SENT; - -+#ifndef OPENSSL_NO_QUIC -+ /* QUIC server must always send 0xFFFFFFFF, per draft-ietf-quic-tls-24 S4.5 */ -+ if (s->quic_method != NULL) -+ max_early_data = 0xFFFFFFFF; -+#endif -+ - if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_early_data) - || !WPACKET_start_sub_packet_u16(pkt) -- || !WPACKET_put_bytes_u32(pkt, s->max_early_data) -+ || !WPACKET_put_bytes_u32(pkt, max_early_data) - || !WPACKET_close(pkt)) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); - return EXT_RETURN_FAIL; ---- a/ssl/statem/statem_clnt.c -+++ b/ssl/statem/statem_clnt.c -@@ -904,6 +904,14 @@ int ossl_statem_client_construct_message - break; - - case TLS_ST_CW_END_OF_EARLY_DATA: -+#ifndef OPENSSL_NO_QUIC -+ /* QUIC does not send EndOfEarlyData, draft-ietf-quic-tls-24 S8.3 */ -+ if (s->quic_method != NULL) { -+ *confunc = NULL; -+ *mt = SSL3_MT_DUMMY; -+ break; -+ } -+#endif - *confunc = tls_construct_end_of_early_data; - *mt = SSL3_MT_END_OF_EARLY_DATA; - break; ---- a/ssl/statem/statem_srvr.c -+++ b/ssl/statem/statem_srvr.c -@@ -76,6 +76,10 @@ static int ossl_statem_server13_read_tra - break; - } else if (s->ext.early_data == SSL_EARLY_DATA_ACCEPTED) { - if (mt == SSL3_MT_END_OF_EARLY_DATA) { -+#ifndef OPENSSL_NO_QUIC -+ if (s->quic_method != NULL) -+ return 0; -+#endif - st->hand_state = TLS_ST_SR_END_OF_EARLY_DATA; - return 1; - } diff --git a/openwrt/patch/openssl/quic/0019-QUIC-Fall-through-for-0RTT.patch b/openwrt/patch/openssl/quic/0019-QUIC-Fall-through-for-0RTT.patch deleted file mode 100644 index bbe6a325d..000000000 --- a/openwrt/patch/openssl/quic/0019-QUIC-Fall-through-for-0RTT.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 40a5be75bb65d1fc4e40052e19ff54f0974397d9 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Tue, 7 Jan 2020 10:59:08 -0500 -Subject: [PATCH 19/43] QUIC: Fall-through for 0RTT - ---- - ssl/statem/statem_srvr.c | 7 ++----- - 1 file changed, 2 insertions(+), 5 deletions(-) - ---- a/ssl/statem/statem_srvr.c -+++ b/ssl/statem/statem_srvr.c -@@ -74,12 +74,9 @@ static int ossl_statem_server13_read_tra - return 1; - } - break; -- } else if (s->ext.early_data == SSL_EARLY_DATA_ACCEPTED) { -+ } else if (s->ext.early_data == SSL_EARLY_DATA_ACCEPTED -+ && !SSL_IS_QUIC(s)) { - if (mt == SSL3_MT_END_OF_EARLY_DATA) { --#ifndef OPENSSL_NO_QUIC -- if (s->quic_method != NULL) -- return 0; --#endif - st->hand_state = TLS_ST_SR_END_OF_EARLY_DATA; - return 1; - } diff --git a/openwrt/patch/openssl/quic/0020-QUIC-Some-cleanup-for-the-main-QUIC-changes.patch b/openwrt/patch/openssl/quic/0020-QUIC-Some-cleanup-for-the-main-QUIC-changes.patch deleted file mode 100644 index fe82fd5cf..000000000 --- a/openwrt/patch/openssl/quic/0020-QUIC-Some-cleanup-for-the-main-QUIC-changes.patch +++ /dev/null @@ -1,640 +0,0 @@ -From aa803e9855f49779e4226f358f085dc0fb1eb93e Mon Sep 17 00:00:00 2001 -From: Benjamin Kaduk -Date: Wed, 22 Apr 2020 09:12:36 -0700 -Subject: [PATCH 20/43] QUIC: Some cleanup for the main QUIC changes - -Try to reduce unneeded whitespace changes and wrap new code to 80 columns. -Reword documentation to attempt to improve clarity. -Add some more sanity checks and clarifying comments to the code. -Update referenced I-D versions. ---- - doc/man3/SSL_CTX_set_quic_method.pod | 43 +++++++------- - include/openssl/ssl.h.in | 4 +- - include/openssl/tls1.h | 2 +- - ssl/build.info | 7 ++- - ssl/ssl_ciph.c | 2 + - ssl/ssl_lib.c | 2 +- - ssl/ssl_local.h | 1 + - ssl/ssl_quic.c | 45 +++++++-------- - ssl/statem/extensions_clnt.c | 2 +- - ssl/statem/extensions_srvr.c | 2 +- - ssl/statem/statem.c | 2 +- - ssl/statem/statem_lib.c | 26 +++++---- - ssl/statem/statem_local.h | 2 + - ssl/statem/statem_quic.c | 22 ++++---- - ssl/tls13_enc.c | 84 +++++++++++++++++++--------- - test/sslapitest.c | 11 ++-- - util/libssl.num | 2 +- - 17 files changed, 155 insertions(+), 104 deletions(-) - ---- a/doc/man3/SSL_CTX_set_quic_method.pod -+++ b/doc/man3/SSL_CTX_set_quic_method.pod -@@ -63,22 +63,25 @@ SSL_quic_max_handshake_flight_len() retu - that may be received at the given encryption level. This function should be - used to limit buffering in the QUIC implementation. - --See https://tools.ietf.org/html/draft-ietf-quic-transport-16#section-4.4. -+See https://tools.ietf.org/html/draft-ietf-quic-transport-27#section-4. - - SSL_quic_read_level() returns the current read encryption level. - - SSL_quic_write_level() returns the current write encryption level. - --SSL_provide_quic_data() provides data from QUIC at a particular encryption --level B. It is an error to call this function outside of the handshake --or with an encryption level other than the current read level. It returns one --on success and zero on error. -+SSL_provide_quic_data() is used to provide data from QUIC CRYPTO frames to the -+state machine, at a particular encryption level B. It is an error to -+call this function outside of the handshake or with an encryption level other -+than the current read level. The application must buffer and consolidate any -+frames with less than four bytes of content. It returns one on success and -+zero on error. - - SSL_process_quic_post_handshake() processes any data that QUIC has provided - after the handshake has completed. This includes NewSessionTicket messages - sent by the server. - --SSL_is_quic() indicates whether a connection uses QUIC. -+SSL_is_quic() indicates whether a connection uses QUIC. A given B -+or B can only be used with QUIC or TLS, but not both. - - =head1 NOTES - -@@ -89,11 +92,11 @@ functions allow a QUIC implementation to - described in draft-ietf-quic-tls. - - When configured for QUIC, SSL_do_handshake() will drive the handshake as --before, but it will not use the configured B. It will call functions on --B to configure secrets and send data. If data is needed from --the peer, it will return B. When received, the caller --should call SSL_provide_quic_data() and then SSL_do_handshake() to continue --the handshake. After the handshake is complete, the caller should call -+before, but it will not use the configured B. It will call functions from -+the configured B to configure secrets and send data. If data -+is needed from the peer, it will return B. When received, -+the caller should call SSL_provide_quic_data() and then SSL_do_handshake() to -+continue the handshake. After the handshake is complete, the caller should call - SSL_provide_quic_data() for any post-handshake data, followed by - SSL_process_quic_post_handshake() to process it. It is an error to call - SSL_read()/SSL_read_ex() and SSL_write()/SSL_write_ex() in QUIC. -@@ -105,7 +108,7 @@ pass the active write level to add_hands - can use SSL_quic_write_level() to query the active write level when - generating their own errors. - --See https://tools.ietf.org/html/draft-ietf-quic-tls-15#section-4.1 for more -+See https://tools.ietf.org/html/draft-ietf-quic-tls-27#section-4.1 for more - details. - - To avoid DoS attacks, the QUIC implementation must limit the amount of data -@@ -113,11 +116,12 @@ being queued up. The implementation can - SSL_quic_max_handshake_flight_len() to get the maximum buffer length at each - encryption level. - --draft-ietf-quic-tls defines a new TLS extension quic_transport_parameters -+draft-ietf-quic-tls defines a new TLS extension "quic_transport_parameters" - used by QUIC for each endpoint to unilaterally declare its supported --transport parameters. draft-ietf-quic-transport (section 7.4) defines the --contents of that extension (a TransportParameters struct) and describes how --to handle it and its semantic meaning. -+transport parameters. The contents of the extension are specified in -+https://tools.ietf.org/html/draft-ietf-quic-transport-27#section-18 (as -+a sequence of tag/length/value parameters) along with the interpretation of the -+various parameters and the rules for their processing. - - OpenSSL handles this extension as an opaque byte string. The caller is - responsible for serializing and parsing it. -@@ -205,10 +209,11 @@ SSL_process_quic_post_handshake() - return 1 on success, and 0 on error. - - SSL_quic_read_level() and SSL_quic_write_level() return the current --encryption level as B (B). -+encryption level as an B -+(B). - --SSL_quic_max_handshake_flight_len() returns the maximum length of a flight --for a given encryption level. -+SSL_quic_max_handshake_flight_len() returns the maximum length in bytes of a -+flight for a given encryption level. - - SSL_is_quic() returns 1 if QUIC is being used, 0 if not. - ---- a/include/openssl/ssl.h.in -+++ b/include/openssl/ssl.h.in -@@ -2562,10 +2562,10 @@ __owur int SSL_process_quic_post_handsha - - __owur int SSL_is_quic(SSL *ssl); - --# endif -- - int SSL_CIPHER_get_prf_nid(const SSL_CIPHER *c); - -+# endif -+ - # ifdef __cplusplus - } - # endif ---- a/include/openssl/tls1.h -+++ b/include/openssl/tls1.h -@@ -151,7 +151,7 @@ extern "C" { - /* Temporary extension type */ - # define TLSEXT_TYPE_renegotiate 0xff01 - --/* ExtensionType value from draft-ietf-quic-tls-13 */ -+/* ExtensionType value from draft-ietf-quic-tls-27 */ - # define TLSEXT_TYPE_quic_transport_parameters 0xffa5 - - # ifndef OPENSSL_NO_NEXTPROTONEG ---- a/ssl/build.info -+++ b/ssl/build.info -@@ -37,10 +37,11 @@ IF[{- !$disabled{'deprecated-3.0'} -}] - SHARED_SOURCE[../libssl]=s3_cbc.c - SOURCE[../libssl]=ssl_rsa_legacy.c - ENDIF -- --SOURCE[../libssl]=ssl_quic.c statem/statem_quic.c -- - DEFINE[../libssl]=$AESDEF - -+IF[{- !$disabled{quic} -}] -+ SOURCE[../libssl]=ssl_quic.c statem/statem_quic.c -+ENDIF -+ - SOURCE[../providers/libcommon.a]=record/tls_pad.c - SOURCE[../providers/libdefault.a ../providers/libfips.a]=s3_cbc.c ---- a/ssl/ssl_ciph.c -+++ b/ssl/ssl_ciph.c -@@ -2241,6 +2241,7 @@ const char *OSSL_default_ciphersuites(vo - "TLS_AES_128_GCM_SHA256"; - } - -+#ifndef OPENSSL_NO_QUIC - int SSL_CIPHER_get_prf_nid(const SSL_CIPHER *c) - { - switch (c->algorithm2 & (0xFF << TLS1_PRF_DGST_SHIFT)) { -@@ -2272,3 +2273,4 @@ int SSL_CIPHER_get_prf_nid(const SSL_CIP - } - return NID_undef; - } -+#endif ---- a/ssl/ssl_lib.c -+++ b/ssl/ssl_lib.c -@@ -4264,7 +4264,7 @@ EVP_PKEY *SSL_CTX_get0_privatekey(const - - const SSL_CIPHER *SSL_get_current_cipher(const SSL *s) - { -- if (s->session != NULL) -+ if ((s->session != NULL) && (s->session->cipher != NULL)) - return s->session->cipher; - return NULL; - } ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -1227,6 +1227,7 @@ struct quic_data_st { - OSSL_ENCRYPTION_LEVEL level; - size_t offset; - size_t length; -+ /* char data[]; should be here but C90 VLAs not allowed here */ - }; - typedef struct quic_data_st QUIC_DATA; - int quic_set_encryption_secrets(SSL *ssl, OSSL_ENCRYPTION_LEVEL level); ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -11,10 +11,6 @@ - #include "internal/cryptlib.h" - #include "internal/refcount.h" - --#ifdef OPENSSL_NO_QUIC --NON_EMPTY_TRANSLATION_UNIT --#else -- - int SSL_set_quic_transport_params(SSL *ssl, const uint8_t *params, - size_t params_len) - { -@@ -109,10 +105,10 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - return 0; - } - -- /* Split the QUIC messages up, if necessary */ -+ /* Split on handshake message boundaries, if necessary */ - while (len > 0) { - QUIC_DATA *qd; -- const uint8_t *p = data + 1; -+ const uint8_t *p; - - /* Check for an incomplete block */ - qd = ssl->quic_input_data_tail; -@@ -130,6 +126,12 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - } - } - -+ if (len < SSL3_HM_HEADER_LENGTH) { -+ SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, SSL_R_BAD_LENGTH); -+ return 0; -+ } -+ /* TLS Handshake message header has 1-byte type and 3-byte length */ -+ p = data + 1; - n2l3(p, l); - l += SSL3_HM_HEADER_LENGTH; - -@@ -163,15 +165,8 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - - int SSL_CTX_set_quic_method(SSL_CTX *ctx, const SSL_QUIC_METHOD *quic_method) - { -- switch (ctx->method->version) { -- case DTLS1_VERSION: -- case DTLS1_2_VERSION: -- case DTLS_ANY_VERSION: -- case DTLS1_BAD_VER: -+ if (ctx->method->version != TLS_ANY_VERSION) - return 0; -- default: -- break; -- } - ctx->quic_method = quic_method; - ctx->options &= ~SSL_OP_ENABLE_MIDDLEBOX_COMPAT; - return 1; -@@ -179,15 +174,8 @@ int SSL_CTX_set_quic_method(SSL_CTX *ctx - - int SSL_set_quic_method(SSL *ssl, const SSL_QUIC_METHOD *quic_method) - { -- switch (ssl->method->version) { -- case DTLS1_VERSION: -- case DTLS1_2_VERSION: -- case DTLS_ANY_VERSION: -- case DTLS1_BAD_VER: -+ if (ssl->method->version != TLS_ANY_VERSION) - return 0; -- default: -- break; -- } - ssl->quic_method = quic_method; - ssl->options &= ~SSL_OP_ENABLE_MIDDLEBOX_COMPAT; - return 1; -@@ -225,6 +213,12 @@ int quic_set_encryption_secrets(SSL *ssl - /* May not have selected cipher, yet */ - const SSL_CIPHER *c = NULL; - -+ /* -+ * It probably doesn't make sense to use an (external) PSK session, -+ * but in theory some kinds of external session caches could be -+ * implemented using it, so allow psksession to be used as well as -+ * the regular session. -+ */ - if (ssl->session != NULL) - c = SSL_SESSION_get0_cipher(ssl->session); - else if (ssl->psksession != NULL) -@@ -265,6 +259,11 @@ int SSL_process_quic_post_handshake(SSL - return 0; - } - -+ /* -+ * This is always safe (we are sure to be at a record boundary) because -+ * SSL_read()/SSL_write() are never used for QUIC connections -- the -+ * application data is handled at the QUIC layer instead. -+ */ - ossl_statem_set_in_init(ssl, 1); - ret = ssl->handshake_func(ssl); - ossl_statem_set_in_init(ssl, 0); -@@ -278,5 +277,3 @@ int SSL_is_quic(SSL* ssl) - { - return SSL_IS_QUIC(ssl); - } -- --#endif ---- a/ssl/statem/extensions_clnt.c -+++ b/ssl/statem/extensions_clnt.c -@@ -1922,7 +1922,7 @@ int tls_parse_stoc_early_data(SSL *s, PA - #ifndef OPENSSL_NO_QUIC - /* - * QUIC server must send 0xFFFFFFFF or it's a PROTOCOL_VIOLATION -- * per draft-ietf-quic-tls-24 S4.5 -+ * per draft-ietf-quic-tls-27 S4.5 - */ - if (s->quic_method != NULL && max_early_data != 0xFFFFFFFF) { - SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_INVALID_MAX_EARLY_DATA); ---- a/ssl/statem/extensions_srvr.c -+++ b/ssl/statem/extensions_srvr.c -@@ -1896,7 +1896,7 @@ EXT_RETURN tls_construct_stoc_early_data - return EXT_RETURN_NOT_SENT; - - #ifndef OPENSSL_NO_QUIC -- /* QUIC server must always send 0xFFFFFFFF, per draft-ietf-quic-tls-24 S4.5 */ -+ /* QUIC server must always send 0xFFFFFFFF, per draft-ietf-quic-tls-27 S4.5 */ - if (s->quic_method != NULL) - max_early_data = 0xFFFFFFFF; - #endif ---- a/ssl/statem/statem.c -+++ b/ssl/statem/statem.c -@@ -585,6 +585,7 @@ static SUB_STATE_RETURN read_state_machi - ret = dtls_get_message(s, &mt); - #ifndef OPENSSL_NO_QUIC - } else if (SSL_IS_QUIC(s)) { -+ /* QUIC behaves like DTLS -- all in one go. */ - ret = quic_get_message(s, &mt, &len); - #endif - } else { -@@ -929,7 +930,6 @@ int statem_flush(SSL *s) - #ifndef OPENSSL_NO_QUIC - if (SSL_IS_QUIC(s)) { - if (!s->quic_method->flush_flight(s)) { -- /* NOTE: BIO_flush() does not generate an error */ - SSLerr(SSL_F_STATEM_FLUSH, ERR_R_INTERNAL_ERROR); - return 0; - } ---- a/ssl/statem/statem_lib.c -+++ b/ssl/statem/statem_lib.c -@@ -44,17 +44,24 @@ int ssl3_do_write(SSL *s, int type) - { - int ret; - size_t written = 0; -+ - #ifndef OPENSSL_NO_QUIC -- if (SSL_IS_QUIC(s) && type == SSL3_RT_HANDSHAKE) { -- ret = s->quic_method->add_handshake_data(s, s->quic_write_level, -- (const uint8_t*)&s->init_buf->data[s->init_off], -- s->init_num); -- if (!ret) { -- ret = -1; -- /* QUIC can't sent anything out sice the above failed */ -- SSLerr(SSL_F_SSL3_DO_WRITE, ERR_R_INTERNAL_ERROR); -+ if (SSL_IS_QUIC(s)) { -+ if (type == SSL3_RT_HANDSHAKE) { -+ ret = s->quic_method->add_handshake_data(s, s->quic_write_level, -+ (const uint8_t*)&s->init_buf->data[s->init_off], -+ s->init_num); -+ if (!ret) { -+ ret = -1; -+ /* QUIC can't sent anything out sice the above failed */ -+ SSLerr(SSL_F_SSL3_DO_WRITE, ERR_R_INTERNAL_ERROR); -+ } else { -+ written = s->init_num; -+ } - } else { -- written = s->init_num; -+ /* QUIC doesn't use ChangeCipherSpec */ -+ ret = -1; -+ SSLerr(SSL_F_SSL3_DO_WRITE, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - } - } else - #endif -@@ -1183,7 +1190,6 @@ int tls_get_message_header(SSL *s, int * - - do { - while (s->init_num < SSL3_HM_HEADER_LENGTH) { -- /* QUIC: either create a special ssl_read_bytes... or if/else this */ - i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, &recvd_type, - &p[s->init_num], - SSL3_HM_HEADER_LENGTH - s->init_num, ---- a/ssl/statem/statem_local.h -+++ b/ssl/statem/statem_local.h -@@ -104,7 +104,9 @@ __owur int tls_get_message_header(SSL *s - __owur int tls_get_message_body(SSL *s, size_t *len); - __owur int dtls_get_message(SSL *s, int *mt); - __owur int dtls_get_message_body(SSL *s, size_t *len); -+#ifndef OPENSSL_NO_QUIC - __owur int quic_get_message(SSL *s, int *mt, size_t *len); -+#endif - - /* Message construction and processing functions */ - __owur int tls_process_initial_server_flight(SSL *s); ---- a/ssl/statem/statem_quic.c -+++ b/ssl/statem/statem_quic.c -@@ -11,10 +11,6 @@ - #include "statem_local.h" - #include "internal/cryptlib.h" - --#ifdef OPENSSL_NO_QUIC --NON_EMPTY_TRANSLATION_UNIT --#else -- - int quic_get_message(SSL *s, int *mt, size_t *len) - { - size_t l; -@@ -23,20 +19,26 @@ int quic_get_message(SSL *s, int *mt, si - - if (qd == NULL || (qd->length - qd->offset) != 0) { - s->rwstate = SSL_READING; -- *len = 0; -+ *mt = *len = 0; -+ return 0; -+ } -+ -+ if (!ossl_assert(qd->length >= SSL3_HM_HEADER_LENGTH)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_LENGTH); -+ *mt = *len = 0; - return 0; - } - - /* This is where we check for the proper level, not when data is given */ - if (qd->level != s->quic_read_level) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED); -- *len = 0; -+ *mt = *len = 0; - return 0; - } - - if (!BUF_MEM_grow_clean(s->init_buf, (int)qd->length)) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_BUF_LIB); -- *len = 0; -+ *mt = *len = 0; - return 0; - } - -@@ -79,8 +81,8 @@ int quic_get_message(SSL *s, int *mt, si - */ - #define SERVER_HELLO_RANDOM_OFFSET (SSL3_HM_HEADER_LENGTH + 2) - /* KeyUpdate and NewSessionTicket do not need to be added */ -- if (!SSL_IS_TLS13(s) || (s->s3.tmp.message_type != SSL3_MT_NEWSESSION_TICKET -- && s->s3.tmp.message_type != SSL3_MT_KEY_UPDATE)) { -+ if (s->s3.tmp.message_type != SSL3_MT_NEWSESSION_TICKET -+ && s->s3.tmp.message_type != SSL3_MT_KEY_UPDATE) { - if (s->s3.tmp.message_type != SSL3_MT_SERVER_HELLO - || s->init_num < SERVER_HELLO_RANDOM_OFFSET + SSL3_RANDOM_SIZE - || memcmp(hrrrandom, -@@ -101,5 +103,3 @@ int quic_get_message(SSL *s, int *mt, si - - return 1; - } -- --#endif ---- a/ssl/tls13_enc.c -+++ b/ssl/tls13_enc.c -@@ -419,6 +419,7 @@ static const unsigned char exporter_mast - static const unsigned char resumption_master_secret[] = "res master"; - static const unsigned char early_exporter_master_secret[] = "e exp master"; - #endif -+ - #ifndef OPENSSL_NO_QUIC - static int quic_change_cipher_state(SSL *s, int which) - { -@@ -427,7 +428,7 @@ static int quic_change_cipher_state(SSL - int hashleni; - int ret = 0; - const EVP_MD *md = NULL; -- OSSL_ENCRYPTION_LEVEL level = ssl_encryption_initial; -+ OSSL_ENCRYPTION_LEVEL level; - int is_handshake = ((which & SSL3_CC_HANDSHAKE) == SSL3_CC_HANDSHAKE); - int is_client_read = ((which & SSL3_CHANGE_CIPHER_CLIENT_READ) == SSL3_CHANGE_CIPHER_CLIENT_READ); - int is_server_write = ((which & SSL3_CHANGE_CIPHER_SERVER_WRITE) == SSL3_CHANGE_CIPHER_SERVER_WRITE); -@@ -450,34 +451,62 @@ static int quic_change_cipher_state(SSL - - if (is_client_read || is_server_write) { - if (is_handshake) { -+ /* -+ * This looks a bit weird, since the condition is basically "the -+ * server is writing" but we set both the server *and* client -+ * handshake traffic keys here. That's because there's only a fixed -+ * number of change-cipher-state events in the TLS 1.3 handshake, -+ * and in particular there's not an event in between when the server -+ * writes encrypted handshake messages and when the client writes -+ * encrypted handshake messages, so we generate both here. -+ */ - level = ssl_encryption_handshake; - -- if (!tls13_hkdf_expand(s, md, s->handshake_secret, client_handshake_traffic, -- sizeof(client_handshake_traffic)-1, hash, hashlen, -- s->client_hand_traffic_secret, hashlen, 1) -- || !ssl_log_secret(s, CLIENT_HANDSHAKE_LABEL, s->client_hand_traffic_secret, hashlen) -- || !tls13_derive_finishedkey(s, md, s->client_hand_traffic_secret, -+ if (!tls13_hkdf_expand(s, md, s->handshake_secret, -+ client_handshake_traffic, -+ sizeof(client_handshake_traffic)-1, hash, -+ hashlen, s->client_hand_traffic_secret, -+ hashlen, 1) -+ || !ssl_log_secret(s, CLIENT_HANDSHAKE_LABEL, -+ s->client_hand_traffic_secret, hashlen) -+ || !tls13_derive_finishedkey(s, md, -+ s->client_hand_traffic_secret, - s->client_finished_secret, hashlen) -- || !tls13_hkdf_expand(s, md, s->handshake_secret, server_handshake_traffic, -- sizeof(server_handshake_traffic)-1, hash, hashlen, -- s->server_hand_traffic_secret, hashlen, 1) -- || !ssl_log_secret(s, SERVER_HANDSHAKE_LABEL, s->server_hand_traffic_secret, hashlen) -- || !tls13_derive_finishedkey(s, md, s->server_hand_traffic_secret, -- s->server_finished_secret, hashlen)) { -+ || !tls13_hkdf_expand(s, md, s->handshake_secret, -+ server_handshake_traffic, -+ sizeof(server_handshake_traffic)-1, hash, -+ hashlen, s->server_hand_traffic_secret, -+ hashlen, 1) -+ || !ssl_log_secret(s, SERVER_HANDSHAKE_LABEL, -+ s->server_hand_traffic_secret, hashlen) -+ || !tls13_derive_finishedkey(s, md, -+ s->server_hand_traffic_secret, -+ s->server_finished_secret, -+ hashlen)) { - /* SSLfatal() already called */ - goto err; - } - } else { -+ /* -+ * As above, we generate both sets of application traffic keys at -+ * the same time. -+ */ - level = ssl_encryption_application; - -- if (!tls13_hkdf_expand(s, md, s->master_secret, client_application_traffic, -- sizeof(client_application_traffic)-1, hash, hashlen, -- s->client_app_traffic_secret, hashlen, 1) -- || !ssl_log_secret(s, CLIENT_APPLICATION_LABEL, s->client_app_traffic_secret, hashlen) -- || !tls13_hkdf_expand(s, md, s->master_secret, server_application_traffic, -- sizeof(server_application_traffic)-1, hash, hashlen, -+ if (!tls13_hkdf_expand(s, md, s->master_secret, -+ client_application_traffic, -+ sizeof(client_application_traffic)-1, hash, -+ hashlen, s->client_app_traffic_secret, -+ hashlen, 1) -+ || !ssl_log_secret(s, CLIENT_APPLICATION_LABEL, -+ s->client_app_traffic_secret, hashlen) -+ || !tls13_hkdf_expand(s, md, s->master_secret, -+ server_application_traffic, -+ sizeof(server_application_traffic)-1, -+ hash, hashlen, - s->server_app_traffic_secret, hashlen, 1) -- || !ssl_log_secret(s, SERVER_APPLICATION_LABEL, s->server_app_traffic_secret, hashlen)) { -+ || !ssl_log_secret(s, SERVER_APPLICATION_LABEL, -+ s->server_app_traffic_secret, hashlen)) { - /* SSLfatal() already called */ - goto err; - } -@@ -497,9 +526,11 @@ static int quic_change_cipher_state(SSL - level = ssl_encryption_early_data; - - if (!tls13_hkdf_expand(s, md, s->early_secret, client_early_traffic, -- sizeof(client_early_traffic)-1, hash, hashlen, -- s->client_early_traffic_secret, hashlen, 1) -- || !ssl_log_secret(s, CLIENT_EARLY_LABEL, s->client_early_traffic_secret, hashlen) -+ sizeof(client_early_traffic)-1, hash, -+ hashlen, s->client_early_traffic_secret, -+ hashlen, 1) -+ || !ssl_log_secret(s, CLIENT_EARLY_LABEL, -+ s->client_early_traffic_secret, hashlen) - || !quic_set_encryption_secrets(s, level)) { - /* SSLfatal() already called */ - goto err; -@@ -512,9 +543,11 @@ static int quic_change_cipher_state(SSL - * We also create the resumption master secret, but this time use the - * hash for the whole handshake including the Client Finished - */ -- if (!tls13_hkdf_expand(s, md, s->master_secret, resumption_master_secret, -- sizeof(resumption_master_secret)-1, hash, hashlen, -- s->resumption_master_secret, hashlen, 1)) { -+ if (!tls13_hkdf_expand(s, md, s->master_secret, -+ resumption_master_secret, -+ sizeof(resumption_master_secret)-1, hash, -+ hashlen, s->resumption_master_secret, -+ hashlen, 1)) { - /* SSLfatal() already called */ - goto err; - } -@@ -531,6 +564,7 @@ static int quic_change_cipher_state(SSL - return ret; - } - #endif /* OPENSSL_NO_QUIC */ -+ - int tls13_change_cipher_state(SSL *s, int which) - { - unsigned char *iv; ---- a/test/sslapitest.c -+++ b/test/sslapitest.c -@@ -10766,9 +10766,11 @@ static int test_multi_resume(int idx) - } - - #ifndef OPENSSL_NO_QUIC --static int test_quic_set_encryption_secrets(SSL *ssl, OSSL_ENCRYPTION_LEVEL level, -+static int test_quic_set_encryption_secrets(SSL *ssl, -+ OSSL_ENCRYPTION_LEVEL level, - const uint8_t *read_secret, -- const uint8_t *write_secret, size_t secret_len) -+ const uint8_t *write_secret, -+ size_t secret_len) - { - test_printf_stderr("quic_set_encryption_secrets() %s, lvl=%d, len=%zd\n", - ssl->server ? "server" : "client", level, secret_len); -@@ -10780,11 +10782,12 @@ static int test_quic_add_handshake_data( - { - SSL *peer = (SSL*)SSL_get_app_data(ssl); - -- test_printf_stderr("quic_add_handshake_data() %s, lvl=%d, *data=0x%02X, len=%zd\n", -- ssl->server ? "server" : "client", level, (int)*data, len); -+ TEST_info("quic_add_handshake_data() %s, lvl=%d, *data=0x%02X, len=%zd\n", -+ ssl->server ? "server" : "client", level, (int)*data, len); - if (!TEST_ptr(peer)) - return 0; - -+ /* We're called with what is locally written; this gives it to the peer */ - if (!TEST_true(SSL_provide_quic_data(peer, level, data, len))) { - ERR_print_errors_fp(stderr); - return 0; ---- a/util/libssl.num -+++ b/util/libssl.num -@@ -522,7 +522,7 @@ SSL_CTX_set0_tmp_dh_pkey - SSL_group_to_name 523 3_0_0 EXIST::FUNCTION: - SSL_quic_read_level 20000 3_0_0 EXIST::FUNCTION:QUIC - SSL_set_quic_transport_params 20001 3_0_0 EXIST::FUNCTION:QUIC --SSL_CIPHER_get_prf_nid 20002 3_0_0 EXIST::FUNCTION: -+SSL_CIPHER_get_prf_nid 20002 3_0_0 EXIST::FUNCTION:QUIC - SSL_is_quic 20003 3_0_0 EXIST::FUNCTION:QUIC - SSL_get_peer_quic_transport_params 20004 3_0_0 EXIST::FUNCTION:QUIC - SSL_quic_write_level 20005 3_0_0 EXIST::FUNCTION:QUIC diff --git a/openwrt/patch/openssl/quic/0021-QUIC-Prevent-KeyUpdate-for-QUIC.patch b/openwrt/patch/openssl/quic/0021-QUIC-Prevent-KeyUpdate-for-QUIC.patch deleted file mode 100644 index 37bfbbe0c..000000000 --- a/openwrt/patch/openssl/quic/0021-QUIC-Prevent-KeyUpdate-for-QUIC.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 0749642cb0df330f91388a2fe72dc9b2824b7da7 Mon Sep 17 00:00:00 2001 -From: Benjamin Kaduk -Date: Mon, 11 May 2020 13:13:01 -0700 -Subject: [PATCH 21/43] QUIC: Prevent KeyUpdate for QUIC - -QUIC does not use the TLS KeyUpdate message/mechanism, and indeed -it is an error to generate or receive such a message. Add the -necessary checks (noting that the check for receipt should be -redundant since SSL_provide_quic_data() is the only way to provide -input to the TLS layer for a QUIC connection). ---- - ssl/ssl_quic.c | 6 ++++++ - ssl/statem/statem_lib.c | 14 ++++++++++++++ - 2 files changed, 20 insertions(+) - ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -92,6 +92,7 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - const uint8_t *data, size_t len) - { - size_t l; -+ uint8_t mt; - - if (!SSL_IS_QUIC(ssl)) { - SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -@@ -131,9 +132,14 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - return 0; - } - /* TLS Handshake message header has 1-byte type and 3-byte length */ -+ mt = *data; - p = data + 1; - n2l3(p, l); - l += SSL3_HM_HEADER_LENGTH; -+ if (mt == SSL3_MT_KEY_UPDATE) { -+ SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, SSL_R_UNEXPECTED_MESSAGE); -+ return 0; -+ } - - qd = OPENSSL_zalloc(sizeof(QUIC_DATA) + l); - if (qd == NULL) { ---- a/ssl/statem/statem_lib.c -+++ b/ssl/statem/statem_lib.c -@@ -662,6 +662,13 @@ int tls_construct_finished(SSL *s, WPACK - - int tls_construct_key_update(SSL *s, WPACKET *pkt) - { -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_is_quic(s)) { -+ /* TLS KeyUpdate is not used for QUIC, so this is an error. */ -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+#endif - if (!WPACKET_put_bytes_u8(pkt, s->key_update)) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); - return 0; -@@ -684,6 +691,13 @@ MSG_PROCESS_RETURN tls_process_key_updat - return MSG_PROCESS_ERROR; - } - -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_is_quic(s)) { -+ SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); -+ return MSG_PROCESS_ERROR; -+ } -+#endif -+ - if (!PACKET_get_1(pkt, &updatetype) - || PACKET_remaining(pkt) != 0) { - SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_KEY_UPDATE); diff --git a/openwrt/patch/openssl/quic/0022-QUIC-Test-KeyUpdate-rejection.patch b/openwrt/patch/openssl/quic/0022-QUIC-Test-KeyUpdate-rejection.patch deleted file mode 100644 index 8d252fca0..000000000 --- a/openwrt/patch/openssl/quic/0022-QUIC-Test-KeyUpdate-rejection.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 0d6350e28e3b684ce10693dc6921f46441a0da21 Mon Sep 17 00:00:00 2001 -From: Benjamin Kaduk -Date: Mon, 11 May 2020 13:26:07 -0700 -Subject: [PATCH 22/43] QUIC: Test KeyUpdate rejection - -For now, just test that we don't generate any, since we don't really -expose the mechanics for encrypting one and the QUIC API is not -integrated into the TLSProxy setup. ---- - test/sslapitest.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - ---- a/test/sslapitest.c -+++ b/test/sslapitest.c -@@ -10890,6 +10890,17 @@ static int test_quic_api(void) - || !TEST_true(SSL_process_quic_post_handshake(clientssl))) - goto end; - -+ /* Dummy handshake call should succeed */ -+ if (!TEST_true(SSL_do_handshake(clientssl))) -+ goto end; -+ /* Test that we (correctly) fail to send KeyUpdate */ -+ if (!TEST_true(SSL_key_update(clientssl, SSL_KEY_UPDATE_NOT_REQUESTED)) -+ || !TEST_int_le(SSL_do_handshake(clientssl), 0)) -+ goto end; -+ if (!TEST_true(SSL_key_update(serverssl, SSL_KEY_UPDATE_NOT_REQUESTED)) -+ || !TEST_int_le(SSL_do_handshake(serverssl), 0)) -+ goto end; -+ - testresult = 1; - - end: diff --git a/openwrt/patch/openssl/quic/0023-QUIC-Buffer-all-provided-quic-data.patch b/openwrt/patch/openssl/quic/0023-QUIC-Buffer-all-provided-quic-data.patch deleted file mode 100644 index e1d061e3f..000000000 --- a/openwrt/patch/openssl/quic/0023-QUIC-Buffer-all-provided-quic-data.patch +++ /dev/null @@ -1,208 +0,0 @@ -From 7b72427c6d4694085c8b140eaa741126e04466a4 Mon Sep 17 00:00:00 2001 -From: Benjamin Kaduk -Date: Mon, 31 Aug 2020 12:27:33 -0700 -Subject: [PATCH 23/43] QUIC: Buffer all provided quic data - -Make all data supplied via SSL_provide_quic_data() pass through an -internal buffer, so that we can handle data supplied with arbitrary -framing and only parse complete TLS records onto the list of QUIC_DATA -managed by quic_input_data_head/quic_input_data_tail. - -This lets us remove the concept of "incomplete" QUIC_DATA structures, -and the 'offset' field needed to support them. - -However, we've already moved the provided data onto the buffer by -the time we can check for KeyUpdate messages, so defer that check -to quic_get_message() (where it is adjacent to the preexisting -ChangeCipherSpec check). - -To avoid extra memory copies, we also make the QUIC_DATA structures -just store offsets into the consolidated buffer instead of having copies -of the TLS handshake messages themselves. ---- - ssl/ssl_lib.c | 1 + - ssl/ssl_local.h | 5 +-- - ssl/ssl_quic.c | 75 +++++++++++++++++++--------------------- - ssl/statem/statem_quic.c | 11 ++++-- - 4 files changed, 49 insertions(+), 43 deletions(-) - ---- a/ssl/ssl_lib.c -+++ b/ssl/ssl_lib.c -@@ -1260,6 +1260,7 @@ void SSL_free(SSL *s) - #ifndef OPENSSL_NO_QUIC - OPENSSL_free(s->ext.quic_transport_params); - OPENSSL_free(s->ext.peer_quic_transport_params); -+ BUF_MEM_free(s->quic_buf); - while (s->quic_input_data_head != NULL) { - QUIC_DATA *qd; - ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -1225,9 +1225,8 @@ typedef struct cert_pkey_st CERT_PKEY; - struct quic_data_st { - struct quic_data_st *next; - OSSL_ENCRYPTION_LEVEL level; -- size_t offset; -+ size_t start; /* offset into quic_buf->data */ - size_t length; -- /* char data[]; should be here but C90 VLAs not allowed here */ - }; - typedef struct quic_data_st QUIC_DATA; - int quic_set_encryption_secrets(SSL *ssl, OSSL_ENCRYPTION_LEVEL level); -@@ -1721,8 +1720,10 @@ struct ssl_st { - #ifndef OPENSSL_NO_QUIC - OSSL_ENCRYPTION_LEVEL quic_read_level; - OSSL_ENCRYPTION_LEVEL quic_write_level; -+ BUF_MEM *quic_buf; /* buffer incoming handshake messages */ - QUIC_DATA *quic_input_data_head; - QUIC_DATA *quic_input_data_tail; -+ size_t quic_next_record_start; - const SSL_QUIC_METHOD *quic_method; - #endif - /* ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -91,8 +91,7 @@ OSSL_ENCRYPTION_LEVEL SSL_quic_write_lev - int SSL_provide_quic_data(SSL *ssl, OSSL_ENCRYPTION_LEVEL level, - const uint8_t *data, size_t len) - { -- size_t l; -- uint8_t mt; -+ size_t l, offset; - - if (!SSL_IS_QUIC(ssl)) { - SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -@@ -106,42 +105,46 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - return 0; - } - -- /* Split on handshake message boundaries, if necessary */ -- while (len > 0) { -- QUIC_DATA *qd; -- const uint8_t *p; -- -- /* Check for an incomplete block */ -- qd = ssl->quic_input_data_tail; -- if (qd != NULL) { -- l = qd->length - qd->offset; -- if (l != 0) { -- /* we still need to copy `l` bytes into the last data block */ -- if (l > len) -- l = len; -- memcpy((char*)(qd+1) + qd->offset, data, l); -- qd->offset += l; -- len -= l; -- data += l; -- continue; -- } -+ if (ssl->quic_buf == NULL) { -+ BUF_MEM *buf; -+ if ((buf = BUF_MEM_new()) == NULL) { -+ SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_INTERNAL_ERROR); -+ return 0; - } -- -- if (len < SSL3_HM_HEADER_LENGTH) { -- SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, SSL_R_BAD_LENGTH); -+ if (!BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) { -+ SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_INTERNAL_ERROR); -+ BUF_MEM_free(buf); - return 0; - } -+ ssl->quic_buf = buf; -+ /* We preallocated storage, but there's still no *data*. */ -+ ssl->quic_buf->length = 0; -+ buf = NULL; -+ } -+ -+ offset = ssl->quic_buf->length; -+ if (!BUF_MEM_grow(ssl->quic_buf, offset + len)) { -+ SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+ memcpy(ssl->quic_buf->data + offset, data, len); -+ -+ /* Split on handshake message boundaries */ -+ while (ssl->quic_buf->length > ssl->quic_next_record_start -+ + SSL3_HM_HEADER_LENGTH) { -+ QUIC_DATA *qd; -+ const uint8_t *p; -+ - /* TLS Handshake message header has 1-byte type and 3-byte length */ -- mt = *data; -- p = data + 1; -+ p = (const uint8_t *)ssl->quic_buf->data -+ + ssl->quic_next_record_start + 1; - n2l3(p, l); - l += SSL3_HM_HEADER_LENGTH; -- if (mt == SSL3_MT_KEY_UPDATE) { -- SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, SSL_R_UNEXPECTED_MESSAGE); -- return 0; -- } -+ /* Don't allocate a QUIC_DATA if we don't have a full record */ -+ if (l > ssl->quic_buf->length - ssl->quic_next_record_start) -+ break; - -- qd = OPENSSL_zalloc(sizeof(QUIC_DATA) + l); -+ qd = OPENSSL_zalloc(sizeof(*qd)); - if (qd == NULL) { - SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_INTERNAL_ERROR); - return 0; -@@ -149,21 +152,15 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - - qd->next = NULL; - qd->length = l; -+ qd->start = ssl->quic_next_record_start; - qd->level = level; -- /* partial data received? */ -- if (l > len) -- l = len; -- qd->offset = l; - -- memcpy((void*)(qd + 1), data, l); - if (ssl->quic_input_data_tail != NULL) - ssl->quic_input_data_tail->next = qd; - else - ssl->quic_input_data_head = qd; - ssl->quic_input_data_tail = qd; -- -- data += l; -- len -= l; -+ ssl->quic_next_record_start += l; - } - - return 1; ---- a/ssl/statem/statem_quic.c -+++ b/ssl/statem/statem_quic.c -@@ -17,7 +17,7 @@ int quic_get_message(SSL *s, int *mt, si - QUIC_DATA *qd = s->quic_input_data_head; - uint8_t *p; - -- if (qd == NULL || (qd->length - qd->offset) != 0) { -+ if (qd == NULL) { - s->rwstate = SSL_READING; - *mt = *len = 0; - return 0; -@@ -43,7 +43,7 @@ int quic_get_message(SSL *s, int *mt, si - } - - /* Copy buffered data */ -- memcpy(s->init_buf->data, (void*)(qd + 1), qd->length); -+ memcpy(s->init_buf->data, s->quic_buf->data + qd->start, qd->length); - s->init_buf->length = qd->length; - s->quic_input_data_head = qd->next; - if (s->quic_input_data_head == NULL) -@@ -62,6 +62,13 @@ int quic_get_message(SSL *s, int *mt, si - *len = 0; - return 0; - } -+ /* No KeyUpdate in QUIC */ -+ if (*mt == SSL3_MT_KEY_UPDATE) { -+ SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); -+ *len = 0; -+ return 0; -+ } -+ - - /* - * If receiving Finished, record MAC of prior handshake messages for diff --git a/openwrt/patch/openssl/quic/0024-QUIC-Enforce-consistent-encryption-level-for-handsha.patch b/openwrt/patch/openssl/quic/0024-QUIC-Enforce-consistent-encryption-level-for-handsha.patch deleted file mode 100644 index 77bd445d9..000000000 --- a/openwrt/patch/openssl/quic/0024-QUIC-Enforce-consistent-encryption-level-for-handsha.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 6e4c15e6bd52743d79956d3d149c70e021f47d11 Mon Sep 17 00:00:00 2001 -From: Benjamin Kaduk -Date: Tue, 1 Sep 2020 15:10:41 -0700 -Subject: [PATCH 24/43] QUIC: Enforce consistent encryption level for handshake - messages - -The QUIC-TLS spec requires that TLS handshake messages do not cross -encryption level boundaries, but we were not previously enforcing this. ---- - ssl/ssl_local.h | 1 + - ssl/ssl_quic.c | 12 +++++++++++- - 2 files changed, 12 insertions(+), 1 deletion(-) - ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -1720,6 +1720,7 @@ struct ssl_st { - #ifndef OPENSSL_NO_QUIC - OSSL_ENCRYPTION_LEVEL quic_read_level; - OSSL_ENCRYPTION_LEVEL quic_write_level; -+ OSSL_ENCRYPTION_LEVEL quic_latest_level_received; - BUF_MEM *quic_buf; /* buffer incoming handshake messages */ - QUIC_DATA *quic_input_data_head; - QUIC_DATA *quic_input_data_tail; ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -100,7 +100,8 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - - /* Level can be different than the current read, but not less */ - if (level < ssl->quic_read_level -- || (ssl->quic_input_data_tail != NULL && level < ssl->quic_input_data_tail->level)) { -+ || (ssl->quic_input_data_tail != NULL && level < ssl->quic_input_data_tail->level) -+ || level < ssl->quic_latest_level_received) { - SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED); - return 0; - } -@@ -122,6 +123,15 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - buf = NULL; - } - -+ /* A TLS message must not cross an encryption level boundary */ -+ if (ssl->quic_buf->length != ssl->quic_next_record_start -+ && level != ssl->quic_latest_level_received) { -+ SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, -+ SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED); -+ return 0; -+ } -+ ssl->quic_latest_level_received = level; -+ - offset = ssl->quic_buf->length; - if (!BUF_MEM_grow(ssl->quic_buf, offset + len)) { - SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_INTERNAL_ERROR); diff --git a/openwrt/patch/openssl/quic/0025-QUIC-add-v1-quic_transport_parameters.patch b/openwrt/patch/openssl/quic/0025-QUIC-add-v1-quic_transport_parameters.patch deleted file mode 100644 index fbfa77603..000000000 --- a/openwrt/patch/openssl/quic/0025-QUIC-add-v1-quic_transport_parameters.patch +++ /dev/null @@ -1,634 +0,0 @@ -From 7fdd78ad2b87cfa7d8cbbff7a4b673824c5bc6cd Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Sat, 12 Dec 2020 17:27:46 +0900 -Subject: [PATCH 25/43] QUIC: add v1 quic_transport_parameters - ---- - crypto/err/openssl.txt | 2 + - doc/man3/SSL_CTX_set_quic_method.pod | 25 +++++- - include/openssl/ssl.h.in | 13 ++++ - include/openssl/sslerr.h | 1 + - include/openssl/tls1.h | 3 +- - ssl/ssl_err.c | 2 + - ssl/ssl_lib.c | 1 + - ssl/ssl_local.h | 11 +++ - ssl/ssl_quic.c | 41 +++++++++- - ssl/statem/extensions.c | 39 ++++++++++ - ssl/statem/extensions_clnt.c | 44 ++++++++++- - ssl/statem/extensions_srvr.c | 46 ++++++++++- - ssl/statem/statem_local.h | 17 +++++ - test/sslapitest.c | 110 +++++++++++++++++++++------ - util/libssl.num | 4 + - 15 files changed, 322 insertions(+), 37 deletions(-) - ---- a/crypto/err/openssl.txt -+++ b/crypto/err/openssl.txt -@@ -1389,6 +1389,8 @@ SSL_R_MISSING_ECDSA_SIGNING_CERT:381:mis - SSL_R_MISSING_FATAL:256:missing fatal - SSL_R_MISSING_PARAMETERS:290:missing parameters - SSL_R_MISSING_PSK_KEX_MODES_EXTENSION:310:missing psk kex modes extension -+SSL_R_MISSING_QUIC_TRANSPORT_PARAMETERS_EXTENSION:801:\ -+ missing quic transport parameters extension - SSL_R_MISSING_RSA_CERTIFICATE:168:missing rsa certificate - SSL_R_MISSING_RSA_ENCRYPTING_CERT:169:missing rsa encrypting cert - SSL_R_MISSING_RSA_SIGNING_CERT:170:missing rsa signing cert ---- a/doc/man3/SSL_CTX_set_quic_method.pod -+++ b/doc/man3/SSL_CTX_set_quic_method.pod -@@ -13,7 +13,11 @@ SSL_quic_read_level, - SSL_quic_write_level, - SSL_provide_quic_data, - SSL_process_quic_post_handshake, --SSL_is_quic -+SSL_is_quic, -+SSL_get_peer_quic_transport_version, -+SSL_get_quic_transport_version, -+SSL_set_quic_transport_version, -+SSL_set_quic_use_legacy_codepoint - - QUIC support - - =head1 SYNOPSIS -@@ -39,6 +43,11 @@ SSL_is_quic - int SSL_process_quic_post_handshake(SSL *ssl); - int SSL_is_quic(SSL *ssl); - -+ void SSL_set_quic_use_legacy_codepoint(SSL *ssl, int use_legacy); -+ void SSL_set_quic_transport_version(SSL *ssl, int version); -+ int SSL_get_quic_transport_version(const SSL *ssl); -+ int SSL_get_peer_quic_transport_version(const SSL *ssl); -+ - =head1 DESCRIPTION - - SSL_CTX_set_quic_method() and SSL_set_quic_method() configures the QUIC methods. -@@ -83,6 +92,20 @@ sent by the server. - SSL_is_quic() indicates whether a connection uses QUIC. A given B - or B can only be used with QUIC or TLS, but not both. - -+SSL_set_quic_use_legacy_codepoint() specifies the legacy extension codepoint -+in manner compatible with some versions of BoringSSL. -+ -+SSL_set_quic_transport_version() specifies the quic transport version that -+allows for backwards and forwards compatibility. If set to 0 (default) the -+server will use the highest version the client sent. If set to 0 (default) -+the client will send both extensions. -+ -+SSL_get_quic_transport_version() returns the value set by -+SSL_set_quic_transport_version(). -+ -+SSL_get_peer_quic_transport_version() returns the version the that was -+negotiated. -+ - =head1 NOTES - - These APIs are implementations of BoringSSL's QUIC APIs. ---- a/include/openssl/ssl.h.in -+++ b/include/openssl/ssl.h.in -@@ -2562,6 +2562,19 @@ __owur int SSL_process_quic_post_handsha - - __owur int SSL_is_quic(SSL *ssl); - -+/* BoringSSL API */ -+__owur void SSL_set_quic_use_legacy_codepoint(SSL *ssl, int use_legacy); -+ -+/* -+ * Set an explicit value that you want to use -+ * If 0 (default) the server will use the highest extenstion the client sent -+ * If 0 (default) the client will send both extensions -+ */ -+void SSL_set_quic_transport_version(SSL *ssl, int version); -+__owur int SSL_get_quic_transport_version(const SSL *ssl); -+/* Returns the negotiated version, or -1 on error */ -+__owur int SSL_get_peer_quic_transport_version(const SSL *ssl); -+ - int SSL_CIPHER_get_prf_nid(const SSL_CIPHER *c); - - # endif ---- a/include/openssl/sslerr.h -+++ b/include/openssl/sslerr.h -@@ -162,6 +162,7 @@ - # define SSL_R_MISSING_FATAL 256 - # define SSL_R_MISSING_PARAMETERS 290 - # define SSL_R_MISSING_PSK_KEX_MODES_EXTENSION 310 -+# define SSL_R_MISSING_QUIC_TRANSPORT_PARAMETERS_EXTENSION 801 - # define SSL_R_MISSING_RSA_CERTIFICATE 168 - # define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 - # define SSL_R_MISSING_RSA_SIGNING_CERT 170 ---- a/include/openssl/tls1.h -+++ b/include/openssl/tls1.h -@@ -152,7 +152,8 @@ extern "C" { - # define TLSEXT_TYPE_renegotiate 0xff01 - - /* ExtensionType value from draft-ietf-quic-tls-27 */ --# define TLSEXT_TYPE_quic_transport_parameters 0xffa5 -+# define TLSEXT_TYPE_quic_transport_parameters_draft 0xffa5 -+# define TLSEXT_TYPE_quic_transport_parameters 0x0039 - - # ifndef OPENSSL_NO_NEXTPROTONEG - /* This is not an IANA defined extension number */ ---- a/ssl/ssl_err.c -+++ b/ssl/ssl_err.c -@@ -242,6 +242,8 @@ static const ERR_STRING_DATA SSL_str_rea - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_PARAMETERS), "missing parameters"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_PSK_KEX_MODES_EXTENSION), - "missing psk kex modes extension"}, -+ {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_QUIC_TRANSPORT_PARAMETERS_EXTENSION), -+ "missing quic transport parameters extension"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_CERTIFICATE), - "missing rsa certificate"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_ENCRYPTING_CERT), ---- a/ssl/ssl_lib.c -+++ b/ssl/ssl_lib.c -@@ -1259,6 +1259,7 @@ void SSL_free(SSL *s) - - #ifndef OPENSSL_NO_QUIC - OPENSSL_free(s->ext.quic_transport_params); -+ OPENSSL_free(s->ext.peer_quic_transport_params_draft); - OPENSSL_free(s->ext.peer_quic_transport_params); - BUF_MEM_free(s->quic_buf); - while (s->quic_input_data_head != NULL) { ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -773,6 +773,7 @@ typedef enum tlsext_index_en { - TLSEXT_IDX_cryptopro_bug, - TLSEXT_IDX_early_data, - TLSEXT_IDX_certificate_authorities, -+ TLSEXT_IDX_quic_transport_params_draft, - TLSEXT_IDX_quic_transport_params, - TLSEXT_IDX_padding, - TLSEXT_IDX_psk, -@@ -1712,6 +1713,8 @@ struct ssl_st { - #ifndef OPENSSL_NO_QUIC - uint8_t *quic_transport_params; - size_t quic_transport_params_len; -+ uint8_t *peer_quic_transport_params_draft; -+ size_t peer_quic_transport_params_draft_len; - uint8_t *peer_quic_transport_params; - size_t peer_quic_transport_params_len; - #endif -@@ -1722,6 +1725,14 @@ struct ssl_st { - OSSL_ENCRYPTION_LEVEL quic_write_level; - OSSL_ENCRYPTION_LEVEL quic_latest_level_received; - BUF_MEM *quic_buf; /* buffer incoming handshake messages */ -+ /* -+ * defaults to 0, but can be set to: -+ * - TLSEXT_TYPE_quic_transport_parameters_draft -+ * - TLSEXT_TYPE_quic_transport_parameters -+ * Client: if 0, send both -+ * Server: if 0, use same version as client sent -+ */ -+ int quic_transport_version; - QUIC_DATA *quic_input_data_head; - QUIC_DATA *quic_input_data_tail; - size_t quic_next_record_start; ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -35,8 +35,45 @@ void SSL_get_peer_quic_transport_params( - const uint8_t **out_params, - size_t *out_params_len) - { -- *out_params = ssl->ext.peer_quic_transport_params; -- *out_params_len = ssl->ext.peer_quic_transport_params_len; -+ if (ssl->ext.peer_quic_transport_params_len) { -+ *out_params = ssl->ext.peer_quic_transport_params; -+ *out_params_len = ssl->ext.peer_quic_transport_params_len; -+ } else { -+ *out_params = ssl->ext.peer_quic_transport_params_draft; -+ *out_params_len = ssl->ext.peer_quic_transport_params_draft_len; -+ } -+} -+ -+/* Returns the negotiated version, or -1 on error */ -+int SSL_get_peer_quic_transport_version(const SSL *ssl) -+{ -+ if (ssl->ext.peer_quic_transport_params_len != 0 -+ && ssl->ext.peer_quic_transport_params_draft_len != 0) -+ return -1; -+ if (ssl->ext.peer_quic_transport_params_len != 0) -+ return TLSEXT_TYPE_quic_transport_parameters; -+ if (ssl->ext.peer_quic_transport_params_draft_len != 0) -+ return TLSEXT_TYPE_quic_transport_parameters_draft; -+ -+ return -1; -+} -+ -+void SSL_set_quic_use_legacy_codepoint(SSL *ssl, int use_legacy) -+{ -+ if (use_legacy) -+ ssl->quic_transport_version = TLSEXT_TYPE_quic_transport_parameters_draft; -+ else -+ ssl->quic_transport_version = TLSEXT_TYPE_quic_transport_parameters; -+} -+ -+void SSL_set_quic_transport_version(SSL *ssl, int version) -+{ -+ ssl->quic_transport_version = version; -+} -+ -+int SSL_get_quic_transport_version(const SSL *ssl) -+{ -+ return ssl->quic_transport_version; - } - - size_t SSL_quic_max_handshake_flight_len(const SSL *ssl, OSSL_ENCRYPTION_LEVEL level) ---- a/ssl/statem/extensions.c -+++ b/ssl/statem/extensions.c -@@ -61,6 +61,7 @@ static int init_post_handshake_auth(SSL - static int final_psk(SSL *s, unsigned int context, int sent); - #ifndef OPENSSL_NO_QUIC - static int init_quic_transport_params(SSL *s, unsigned int context); -+static int final_quic_transport_params_draft(SSL *s, unsigned int context, int sent); - static int final_quic_transport_params(SSL *s, unsigned int context, int sent); - #endif - -@@ -376,6 +377,15 @@ static const EXTENSION_DEFINITION ext_de - }, - #ifndef OPENSSL_NO_QUIC - { -+ TLSEXT_TYPE_quic_transport_parameters_draft, -+ SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS -+ | SSL_EXT_TLS_IMPLEMENTATION_ONLY | SSL_EXT_TLS1_3_ONLY, -+ init_quic_transport_params, -+ tls_parse_ctos_quic_transport_params_draft, tls_parse_stoc_quic_transport_params_draft, -+ tls_construct_stoc_quic_transport_params_draft, tls_construct_ctos_quic_transport_params_draft, -+ final_quic_transport_params_draft, -+ }, -+ { - TLSEXT_TYPE_quic_transport_parameters, - SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS - | SSL_EXT_TLS_IMPLEMENTATION_ONLY | SSL_EXT_TLS1_3_ONLY, -@@ -1752,8 +1762,37 @@ static int init_quic_transport_params(SS - return 1; - } - -+static int final_quic_transport_params_draft(SSL *s, unsigned int context, -+ int sent) -+{ -+ return 1; -+} -+ - static int final_quic_transport_params(SSL *s, unsigned int context, int sent) - { -+ /* called after final_quic_transport_params_draft */ -+ if (SSL_IS_QUIC(s)) { -+ if (s->ext.peer_quic_transport_params_len == 0 -+ && s->ext.peer_quic_transport_params_draft_len == 0) { -+ SSLfatal(s, SSL_AD_MISSING_EXTENSION, -+ SSL_R_MISSING_QUIC_TRANSPORT_PARAMETERS_EXTENSION); -+ return 0; -+ } -+ /* if we got both, discard the one we can't use */ -+ if (s->ext.peer_quic_transport_params_len != 0 -+ && s->ext.peer_quic_transport_params_draft_len != 0) { -+ if (s->quic_transport_version == TLSEXT_TYPE_quic_transport_parameters_draft) { -+ OPENSSL_free(s->ext.peer_quic_transport_params); -+ s->ext.peer_quic_transport_params = NULL; -+ s->ext.peer_quic_transport_params_len = 0; -+ } else { -+ OPENSSL_free(s->ext.peer_quic_transport_params_draft); -+ s->ext.peer_quic_transport_params_draft = NULL; -+ s->ext.peer_quic_transport_params_draft_len = 0; -+ } -+ } -+ } -+ - return 1; - } - #endif ---- a/ssl/statem/extensions_clnt.c -+++ b/ssl/statem/extensions_clnt.c -@@ -1197,13 +1197,33 @@ EXT_RETURN tls_construct_ctos_post_hands - } - - #ifndef OPENSSL_NO_QUIC --/* SAME AS tls_construct_stoc_quic_transport_params() */ -+EXT_RETURN tls_construct_ctos_quic_transport_params_draft(SSL *s, WPACKET *pkt, -+ unsigned int context, X509 *x, -+ size_t chainidx) -+{ -+ if (s->quic_transport_version == TLSEXT_TYPE_quic_transport_parameters -+ || s->ext.quic_transport_params == NULL -+ || s->ext.quic_transport_params_len == 0) { -+ return EXT_RETURN_NOT_SENT; -+ } -+ -+ if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_quic_transport_parameters_draft) -+ || !WPACKET_sub_memcpy_u16(pkt, s->ext.quic_transport_params, -+ s->ext.quic_transport_params_len)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return EXT_RETURN_FAIL; -+ } -+ -+ return EXT_RETURN_SENT; -+} -+ - EXT_RETURN tls_construct_ctos_quic_transport_params(SSL *s, WPACKET *pkt, - unsigned int context, X509 *x, - size_t chainidx) - { -- if (s->ext.quic_transport_params == NULL -- || s->ext.quic_transport_params_len == 0) { -+ if (s->quic_transport_version == TLSEXT_TYPE_quic_transport_parameters_draft -+ || s->ext.quic_transport_params == NULL -+ || s->ext.quic_transport_params_len == 0) { - return EXT_RETURN_NOT_SENT; - } - -@@ -2013,7 +2033,23 @@ int tls_parse_stoc_psk(SSL *s, PACKET *p - return 1; - } - #ifndef OPENSSL_NO_QUIC --/* SAME AS tls_parse_ctos_quic_transport_params() */ -+int tls_parse_stoc_quic_transport_params_draft(SSL *s, PACKET *pkt, -+ unsigned int context, X509 *x, -+ size_t chainidx) -+{ -+ OPENSSL_free(s->ext.peer_quic_transport_params_draft); -+ s->ext.peer_quic_transport_params_draft = NULL; -+ s->ext.peer_quic_transport_params_draft_len = 0; -+ -+ if (!PACKET_memdup(pkt, -+ &s->ext.peer_quic_transport_params_draft, -+ &s->ext.peer_quic_transport_params_draft_len)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+ return 1; -+} -+ - int tls_parse_stoc_quic_transport_params(SSL *s, PACKET *pkt, unsigned int context, - X509 *x, size_t chainidx) - { ---- a/ssl/statem/extensions_srvr.c -+++ b/ssl/statem/extensions_srvr.c -@@ -1233,7 +1233,22 @@ int tls_parse_ctos_post_handshake_auth(S - } - - #ifndef OPENSSL_NO_QUIC --/* SAME AS tls_parse_stoc_quic_transport_params() */ -+int tls_parse_ctos_quic_transport_params_draft(SSL *s, PACKET *pkt, unsigned int context, -+ X509 *x, size_t chainidx) -+{ -+ OPENSSL_free(s->ext.peer_quic_transport_params_draft); -+ s->ext.peer_quic_transport_params_draft = NULL; -+ s->ext.peer_quic_transport_params_draft_len = 0; -+ -+ if (!PACKET_memdup(pkt, -+ &s->ext.peer_quic_transport_params_draft, -+ &s->ext.peer_quic_transport_params_draft_len)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } -+ return 1; -+} -+ - int tls_parse_ctos_quic_transport_params(SSL *s, PACKET *pkt, unsigned int context, - X509 *x, size_t chainidx) - { -@@ -1943,13 +1958,36 @@ EXT_RETURN tls_construct_stoc_psk(SSL *s - } - - #ifndef OPENSSL_NO_QUIC --/* SAME AS tls_construct_ctos_quic_transport_params() */ -+EXT_RETURN tls_construct_stoc_quic_transport_params_draft(SSL *s, WPACKET *pkt, -+ unsigned int context, -+ X509 *x, -+ size_t chainidx) -+{ -+ if (s->quic_transport_version == TLSEXT_TYPE_quic_transport_parameters -+ || s->ext.peer_quic_transport_params_draft_len == 0 -+ || s->ext.quic_transport_params == NULL -+ || s->ext.quic_transport_params_len == 0) { -+ return EXT_RETURN_NOT_SENT; -+ } -+ -+ if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_quic_transport_parameters_draft) -+ || !WPACKET_sub_memcpy_u16(pkt, s->ext.quic_transport_params, -+ s->ext.quic_transport_params_len)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return EXT_RETURN_FAIL; -+ } -+ -+ return EXT_RETURN_SENT; -+} -+ - EXT_RETURN tls_construct_stoc_quic_transport_params(SSL *s, WPACKET *pkt, - unsigned int context, X509 *x, - size_t chainidx) - { -- if (s->ext.quic_transport_params == NULL -- || s->ext.quic_transport_params_len == 0) { -+ if (s->quic_transport_version == TLSEXT_TYPE_quic_transport_parameters_draft -+ || s->ext.peer_quic_transport_params_len == 0 -+ || s->ext.quic_transport_params == NULL -+ || s->ext.quic_transport_params_len == 0) { - return EXT_RETURN_NOT_SENT; - } - ---- a/ssl/statem/statem_local.h -+++ b/ssl/statem/statem_local.h -@@ -255,6 +255,10 @@ int tls_parse_ctos_psk(SSL *s, PACKET *p - int tls_parse_ctos_post_handshake_auth(SSL *, PACKET *pkt, unsigned int context, - X509 *x, size_t chainidx); - #ifndef OPENSSL_NO_QUIC -+int tls_parse_ctos_quic_transport_params_draft(SSL *s, PACKET *pkt, -+ unsigned int context, X509 *x, -+ size_t chainidx); -+ - int tls_parse_ctos_quic_transport_params(SSL *s, PACKET *pkt, unsigned int context, - X509 *x, size_t chainidx); - #endif -@@ -319,6 +323,11 @@ EXT_RETURN tls_construct_stoc_cryptopro_ - EXT_RETURN tls_construct_stoc_psk(SSL *s, WPACKET *pkt, unsigned int context, - X509 *x, size_t chainidx); - #ifndef OPENSSL_NO_QUIC -+EXT_RETURN tls_construct_stoc_quic_transport_params_draft(SSL *s, WPACKET *pkt, -+ unsigned int context, -+ X509 *x, -+ size_t chainidx); -+ - EXT_RETURN tls_construct_stoc_quic_transport_params(SSL *s, WPACKET *pkt, - unsigned int context, X509 *x, - size_t chainidx); -@@ -393,6 +402,10 @@ EXT_RETURN tls_construct_ctos_psk(SSL *s - EXT_RETURN tls_construct_ctos_post_handshake_auth(SSL *s, WPACKET *pkt, unsigned int context, - X509 *x, size_t chainidx); - #ifndef OPENSSL_NO_QUIC -+EXT_RETURN tls_construct_ctos_quic_transport_params_draft(SSL *s, WPACKET *pkt, -+ unsigned int context, X509 *x, -+ size_t chainidx); -+ - EXT_RETURN tls_construct_ctos_quic_transport_params(SSL *s, WPACKET *pkt, - unsigned int context, X509 *x, - size_t chainidx); -@@ -441,6 +454,10 @@ int tls_parse_stoc_cookie(SSL *s, PACKET - int tls_parse_stoc_psk(SSL *s, PACKET *pkt, unsigned int context, X509 *x, - size_t chainidx); - #ifndef OPENSSL_NO_QUIC -+int tls_parse_stoc_quic_transport_params_draft(SSL *s, PACKET *pkt, -+ unsigned int context, X509 *x, -+ size_t chainidx); -+ - int tls_parse_stoc_quic_transport_params(SSL *s, PACKET *pkt, unsigned int context, - X509 *x, size_t chainidx); - #endif ---- a/test/sslapitest.c -+++ b/test/sslapitest.c -@@ -10816,7 +10816,13 @@ static SSL_QUIC_METHOD quic_method = { - test_quic_send_alert, - }; - --static int test_quic_api(void) -+static int test_quic_api_set_versions(SSL *ssl, int ver) -+{ -+ SSL_set_quic_transport_version(ssl, ver); -+ return 1; -+} -+ -+static int test_quic_api_version(int clnt, int srvr) - { - SSL_CTX *cctx = NULL, *sctx = NULL; - SSL *clientssl = NULL, *serverssl = NULL; -@@ -10827,29 +10833,7 @@ static int test_quic_api(void) - const uint8_t *peer_str; - size_t peer_str_len; - -- /* Clean up logging space */ -- memset(client_log_buffer, 0, sizeof(client_log_buffer)); -- memset(server_log_buffer, 0, sizeof(server_log_buffer)); -- client_log_buffer_index = 0; -- server_log_buffer_index = 0; -- error_writing_log = 0; -- -- -- if (!TEST_ptr(sctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method())) -- || !TEST_true(SSL_CTX_set_quic_method(sctx, &quic_method)) -- || !TEST_ptr(sctx->quic_method) -- || !TEST_ptr(serverssl = SSL_new(sctx)) -- || !TEST_true(SSL_IS_QUIC(serverssl)) -- || !TEST_true(SSL_set_quic_method(serverssl, NULL)) -- || !TEST_false(SSL_IS_QUIC(serverssl)) -- || !TEST_true(SSL_set_quic_method(serverssl, &quic_method)) -- || !TEST_true(SSL_IS_QUIC(serverssl))) -- goto end; -- -- SSL_CTX_free(sctx); -- sctx = NULL; -- SSL_free(serverssl); -- serverssl = NULL; -+ TEST_info("original clnt=0x%X, srvr=0x%X\n", clnt, srvr); - - if (!TEST_true(create_ssl_ctx_pair(libctx, - TLS_server_method(), -@@ -10868,6 +10852,8 @@ static int test_quic_api(void) - sizeof(client_str))) - || !TEST_true(SSL_set_app_data(serverssl, clientssl)) - || !TEST_true(SSL_set_app_data(clientssl, serverssl)) -+ || !TEST_true(test_quic_api_set_versions(clientssl, clnt)) -+ || !TEST_true(test_quic_api_set_versions(serverssl, srvr)) - || !TEST_true(create_ssl_connection(serverssl, clientssl, - SSL_ERROR_NONE)) - || !TEST_true(SSL_version(serverssl) == TLS1_3_VERSION) -@@ -10901,11 +10887,85 @@ static int test_quic_api(void) - || !TEST_int_le(SSL_do_handshake(serverssl), 0)) - goto end; - -+ TEST_info("original clnt=0x%X, srvr=0x%X\n", clnt, srvr); -+ if (srvr == 0 && clnt == 0) -+ srvr = clnt = TLSEXT_TYPE_quic_transport_parameters; -+ else if (srvr == 0) -+ srvr = clnt; -+ else if (clnt == 0) -+ clnt = srvr; -+ TEST_info("expected clnt=0x%X, srvr=0x%X\n", clnt, srvr); -+ if (!TEST_int_eq(SSL_get_peer_quic_transport_version(serverssl), clnt)) -+ goto end; -+ if (!TEST_int_eq(SSL_get_peer_quic_transport_version(clientssl), srvr)) -+ goto end; -+ - testresult = 1; - - end: - return testresult; - } -+ -+static int test_quic_api(int tst) -+{ -+ SSL_CTX *sctx = NULL; -+ SSL *serverssl = NULL; -+ int testresult = 0; -+ static int clnt_params[] = { 0, -+ TLSEXT_TYPE_quic_transport_parameters_draft, -+ TLSEXT_TYPE_quic_transport_parameters, -+ 0, -+ TLSEXT_TYPE_quic_transport_parameters_draft, -+ TLSEXT_TYPE_quic_transport_parameters, -+ 0, -+ TLSEXT_TYPE_quic_transport_parameters_draft, -+ TLSEXT_TYPE_quic_transport_parameters }; -+ static int srvr_params[] = { 0, -+ 0, -+ 0, -+ TLSEXT_TYPE_quic_transport_parameters_draft, -+ TLSEXT_TYPE_quic_transport_parameters_draft, -+ TLSEXT_TYPE_quic_transport_parameters_draft, -+ TLSEXT_TYPE_quic_transport_parameters, -+ TLSEXT_TYPE_quic_transport_parameters, -+ TLSEXT_TYPE_quic_transport_parameters }; -+ static int results[] = { 1, 1, 1, 1, 1, 0, 1, 0, 1 }; -+ -+ /* Failure cases: -+ * test 6/[5] clnt = parameters, srvr = draft -+ * test 8/[7] clnt = draft, srvr = parameters -+ */ -+ -+ /* Clean up logging space */ -+ memset(client_log_buffer, 0, sizeof(client_log_buffer)); -+ memset(server_log_buffer, 0, sizeof(server_log_buffer)); -+ client_log_buffer_index = 0; -+ server_log_buffer_index = 0; -+ error_writing_log = 0; -+ -+ if (!TEST_ptr(sctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method())) -+ || !TEST_true(SSL_CTX_set_quic_method(sctx, &quic_method)) -+ || !TEST_ptr(sctx->quic_method) -+ || !TEST_ptr(serverssl = SSL_new(sctx)) -+ || !TEST_true(SSL_IS_QUIC(serverssl)) -+ || !TEST_true(SSL_set_quic_method(serverssl, NULL)) -+ || !TEST_false(SSL_IS_QUIC(serverssl)) -+ || !TEST_true(SSL_set_quic_method(serverssl, &quic_method)) -+ || !TEST_true(SSL_IS_QUIC(serverssl))) -+ goto end; -+ -+ if (!TEST_int_eq(test_quic_api_version(clnt_params[tst], srvr_params[tst]), results[tst])) -+ goto end; -+ -+ testresult = 1; -+ -+end: -+ SSL_CTX_free(sctx); -+ sctx = NULL; -+ SSL_free(serverssl); -+ serverssl = NULL; -+ return testresult; -+} - #endif /* OPENSSL_NO_QUIC */ - - OPT_TEST_DECLARE_USAGE("certfile privkeyfile srpvfile tmpfile provider config dhfile\n") -@@ -11185,7 +11245,7 @@ int setup_tests(void) - ADD_ALL_TESTS(test_handshake_retry, 16); - ADD_ALL_TESTS(test_multi_resume, 5); - #ifndef OPENSSL_NO_QUIC -- ADD_TEST(test_quic_api); -+ ADD_ALL_TESTS(test_quic_api, 9); - #endif - return 1; - ---- a/util/libssl.num -+++ b/util/libssl.num -@@ -531,3 +531,7 @@ SSL_set_quic_method - SSL_quic_max_handshake_flight_len 20008 3_0_0 EXIST::FUNCTION:QUIC - SSL_process_quic_post_handshake 20009 3_0_0 EXIST::FUNCTION:QUIC - SSL_provide_quic_data 20010 3_0_0 EXIST::FUNCTION:QUIC -+SSL_set_quic_use_legacy_codepoint 20011 3_0_0 EXIST::FUNCTION:QUIC -+SSL_set_quic_transport_version 20012 3_0_0 EXIST::FUNCTION:QUIC -+SSL_get_peer_quic_transport_version 20013 3_0_0 EXIST::FUNCTION:QUIC -+SSL_get_quic_transport_version 20014 3_0_0 EXIST::FUNCTION:QUIC diff --git a/openwrt/patch/openssl/quic/0026-QUIC-return-success-when-no-post-handshake-data.patch b/openwrt/patch/openssl/quic/0026-QUIC-return-success-when-no-post-handshake-data.patch deleted file mode 100644 index 93a703fd0..000000000 --- a/openwrt/patch/openssl/quic/0026-QUIC-return-success-when-no-post-handshake-data.patch +++ /dev/null @@ -1,22 +0,0 @@ -From a68e084550b8863d3f6b809ddfb26cb4c3e2307e Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Tue, 5 Jan 2021 13:50:21 -0500 -Subject: [PATCH 26/43] QUIC: return success when no post-handshake data - ---- - ssl/ssl_quic.c | 4 ++++ - 1 file changed, 4 insertions(+) - ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -309,6 +309,10 @@ int SSL_process_quic_post_handshake(SSL - return 0; - } - -+ /* if there is no data, return success as BoringSSL */ -+ if (ssl->quic_input_data_head == NULL) -+ return 1; -+ - /* - * This is always safe (we are sure to be at a record boundary) because - * SSL_read()/SSL_write() are never used for QUIC connections -- the diff --git a/openwrt/patch/openssl/quic/0027-QUIC-__owur-makes-no-sense-for-void-return-values.patch b/openwrt/patch/openssl/quic/0027-QUIC-__owur-makes-no-sense-for-void-return-values.patch deleted file mode 100644 index 026188497..000000000 --- a/openwrt/patch/openssl/quic/0027-QUIC-__owur-makes-no-sense-for-void-return-values.patch +++ /dev/null @@ -1,20 +0,0 @@ -From 244d4b0ebd3ab4102f3e1892623bb96adcdef150 Mon Sep 17 00:00:00 2001 -From: Benjamin Kaduk -Date: Fri, 15 Jan 2021 15:04:00 -0800 -Subject: [PATCH 27/43] QUIC: __owur makes no sense for void return values - ---- - include/openssl/ssl.h.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/include/openssl/ssl.h.in -+++ b/include/openssl/ssl.h.in -@@ -2563,7 +2563,7 @@ __owur int SSL_process_quic_post_handsha - __owur int SSL_is_quic(SSL *ssl); - - /* BoringSSL API */ --__owur void SSL_set_quic_use_legacy_codepoint(SSL *ssl, int use_legacy); -+void SSL_set_quic_use_legacy_codepoint(SSL *ssl, int use_legacy); - - /* - * Set an explicit value that you want to use diff --git a/openwrt/patch/openssl/quic/0028-QUIC-remove-SSL_R_BAD_DATA_LENGTH-unused.patch b/openwrt/patch/openssl/quic/0028-QUIC-remove-SSL_R_BAD_DATA_LENGTH-unused.patch deleted file mode 100644 index dda5f9ac6..000000000 --- a/openwrt/patch/openssl/quic/0028-QUIC-remove-SSL_R_BAD_DATA_LENGTH-unused.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 86793f1d5a316687aea683127d7d5a3a09b0c692 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Fri, 19 Feb 2021 10:12:15 -0500 -Subject: [PATCH 28/43] QUIC: remove SSL_R_BAD_DATA_LENGTH (unused) - ---- - crypto/err/openssl.txt | 1 - - include/openssl/sslerr.h | 1 - - ssl/ssl_err.c | 1 - - 3 files changed, 3 deletions(-) - ---- a/crypto/err/openssl.txt -+++ b/crypto/err/openssl.txt -@@ -1251,7 +1251,6 @@ SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_ - SSL_R_BAD_CHANGE_CIPHER_SPEC:103:bad change cipher spec - SSL_R_BAD_CIPHER:186:bad cipher - SSL_R_BAD_DATA:390:bad data --SSL_R_BAD_DATA_LENGTH:802:bad data length - SSL_R_BAD_DATA_RETURNED_BY_CALLBACK:106:bad data returned by callback - SSL_R_BAD_DECOMPRESSION:107:bad decompression - SSL_R_BAD_DH_VALUE:102:bad dh value ---- a/include/openssl/sslerr.h -+++ b/include/openssl/sslerr.h -@@ -28,7 +28,6 @@ - # define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 - # define SSL_R_BAD_CIPHER 186 - # define SSL_R_BAD_DATA 390 --# define SSL_R_BAD_DATA_LENGTH 802 - # define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 - # define SSL_R_BAD_DECOMPRESSION 107 - # define SSL_R_BAD_DH_VALUE 102 ---- a/ssl/ssl_err.c -+++ b/ssl/ssl_err.c -@@ -27,7 +27,6 @@ static const ERR_STRING_DATA SSL_str_rea - "bad change cipher spec"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_CIPHER), "bad cipher"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DATA), "bad data"}, -- {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DATA_LENGTH), "bad data length"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK), - "bad data returned by callback"}, - {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DECOMPRESSION), "bad decompression"}, diff --git a/openwrt/patch/openssl/quic/0029-QUIC-SSLerr-ERR_raise-ERR_LIB_SSL.patch b/openwrt/patch/openssl/quic/0029-QUIC-SSLerr-ERR_raise-ERR_LIB_SSL.patch deleted file mode 100644 index 00bd8f850..000000000 --- a/openwrt/patch/openssl/quic/0029-QUIC-SSLerr-ERR_raise-ERR_LIB_SSL.patch +++ /dev/null @@ -1,152 +0,0 @@ -From e662060166f881e94d14702c1fda2b4fbdeeb041 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Wed, 3 Mar 2021 17:43:46 -0500 -Subject: [PATCH 29/43] QUIC: SSLerr() -> ERR_raise(ERR_LIB_SSL) - ---- - ssl/s3_msg.c | 2 +- - ssl/ssl_lib.c | 6 +++--- - ssl/ssl_quic.c | 17 ++++++++--------- - ssl/statem/statem.c | 2 +- - ssl/statem/statem_lib.c | 4 ++-- - 5 files changed, 15 insertions(+), 16 deletions(-) - ---- a/ssl/s3_msg.c -+++ b/ssl/s3_msg.c -@@ -85,7 +85,7 @@ int ssl3_dispatch_alert(SSL *s) - if (SSL_IS_QUIC(s)) { - if (!s->quic_method->send_alert(s, s->quic_write_level, - s->s3.send_alert[1])) { -- SSLerr(SSL_F_SSL3_DISPATCH_ALERT, ERR_R_INTERNAL_ERROR); -+ ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); - return 0; - } - i = 1; ---- a/ssl/ssl_lib.c -+++ b/ssl/ssl_lib.c -@@ -1872,7 +1872,7 @@ int ssl_read_internal(SSL *s, void *buf, - { - #ifndef OPENSSL_NO_QUIC - if (SSL_IS_QUIC(s)) { -- SSLerr(SSL_F_SSL_READ_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -+ ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return -1; - } - #endif -@@ -2009,7 +2009,7 @@ static int ssl_peek_internal(SSL *s, voi - { - #ifndef OPENSSL_NO_QUIC - if (SSL_IS_QUIC(s)) { -- SSLerr(SSL_F_SSL_PEEK_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -+ ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return -1; - } - #endif -@@ -2075,7 +2075,7 @@ int ssl_write_internal(SSL *s, const voi - { - #ifndef OPENSSL_NO_QUIC - if (SSL_IS_QUIC(s)) { -- SSLerr(SSL_F_SSL_WRITE_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -+ ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return -1; - } - #endif ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -131,7 +131,7 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - size_t l, offset; - - if (!SSL_IS_QUIC(ssl)) { -- SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -+ ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; - } - -@@ -139,18 +139,18 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - if (level < ssl->quic_read_level - || (ssl->quic_input_data_tail != NULL && level < ssl->quic_input_data_tail->level) - || level < ssl->quic_latest_level_received) { -- SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED); -+ ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED); - return 0; - } - - if (ssl->quic_buf == NULL) { - BUF_MEM *buf; - if ((buf = BUF_MEM_new()) == NULL) { -- SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_INTERNAL_ERROR); -+ ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); - return 0; - } - if (!BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) { -- SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_INTERNAL_ERROR); -+ ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); - BUF_MEM_free(buf); - return 0; - } -@@ -163,15 +163,14 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - /* A TLS message must not cross an encryption level boundary */ - if (ssl->quic_buf->length != ssl->quic_next_record_start - && level != ssl->quic_latest_level_received) { -- SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, -- SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED); -+ ERR_raise(ERR_LIB_SSL, SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED); - return 0; - } - ssl->quic_latest_level_received = level; - - offset = ssl->quic_buf->length; - if (!BUF_MEM_grow(ssl->quic_buf, offset + len)) { -- SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_INTERNAL_ERROR); -+ ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); - return 0; - } - memcpy(ssl->quic_buf->data + offset, data, len); -@@ -193,7 +192,7 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - - qd = OPENSSL_zalloc(sizeof(*qd)); - if (qd == NULL) { -- SSLerr(SSL_F_SSL_PROVIDE_QUIC_DATA, ERR_R_INTERNAL_ERROR); -+ ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); - return 0; - } - -@@ -305,7 +304,7 @@ int SSL_process_quic_post_handshake(SSL - int ret; - - if (SSL_in_init(ssl) || !SSL_IS_QUIC(ssl)) { -- SSLerr(SSL_F_SSL_PROCESS_QUIC_POST_HANDSHAKE, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -+ ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; - } - ---- a/ssl/statem/statem.c -+++ b/ssl/statem/statem.c -@@ -930,7 +930,7 @@ int statem_flush(SSL *s) - #ifndef OPENSSL_NO_QUIC - if (SSL_IS_QUIC(s)) { - if (!s->quic_method->flush_flight(s)) { -- SSLerr(SSL_F_STATEM_FLUSH, ERR_R_INTERNAL_ERROR); -+ ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); - return 0; - } - } else ---- a/ssl/statem/statem_lib.c -+++ b/ssl/statem/statem_lib.c -@@ -54,14 +54,14 @@ int ssl3_do_write(SSL *s, int type) - if (!ret) { - ret = -1; - /* QUIC can't sent anything out sice the above failed */ -- SSLerr(SSL_F_SSL3_DO_WRITE, ERR_R_INTERNAL_ERROR); -+ ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); - } else { - written = s->init_num; - } - } else { - /* QUIC doesn't use ChangeCipherSpec */ - ret = -1; -- SSLerr(SSL_F_SSL3_DO_WRITE, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); -+ ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - } - } else - #endif diff --git a/openwrt/patch/openssl/quic/0030-QUIC-Add-compile-run-time-checking-for-QUIC.patch b/openwrt/patch/openssl/quic/0030-QUIC-Add-compile-run-time-checking-for-QUIC.patch deleted file mode 100644 index f74974266..000000000 --- a/openwrt/patch/openssl/quic/0030-QUIC-Add-compile-run-time-checking-for-QUIC.patch +++ /dev/null @@ -1,90 +0,0 @@ -From ee45542f244a1cb2eb6dd19b09b44662a04059d9 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Fri, 5 Mar 2021 15:22:18 -0500 -Subject: [PATCH 30/43] QUIC: Add compile/run-time checking for QUIC - ---- - apps/info.c | 12 ++++++++++++ - crypto/info.c | 4 ++++ - doc/man3/OpenSSL_version.pod | 8 ++++++++ - include/openssl/crypto.h.in | 4 ++++ - 4 files changed, 28 insertions(+) - ---- a/apps/info.c -+++ b/apps/info.c -@@ -15,6 +15,9 @@ typedef enum OPTION_choice { - OPT_COMMON, - OPT_CONFIGDIR, OPT_ENGINESDIR, OPT_MODULESDIR, OPT_DSOEXT, OPT_DIRNAMESEP, - OPT_LISTSEP, OPT_SEEDS, OPT_CPUSETTINGS -+#ifndef OPENSSL_NO_QUIC -+ , OPT_QUIC -+#endif - } OPTION_CHOICE; - - const OPTIONS info_options[] = { -@@ -32,6 +35,9 @@ const OPTIONS info_options[] = { - {"listsep", OPT_LISTSEP, '-', "List separator character"}, - {"seeds", OPT_SEEDS, '-', "Seed sources"}, - {"cpusettings", OPT_CPUSETTINGS, '-', "CPU settings info"}, -+#ifndef OPENSSL_NO_QUIC -+ {"quic", OPT_QUIC, '-', "QUIC info"}, -+#endif - {NULL} - }; - -@@ -84,6 +90,12 @@ opthelp: - type = OPENSSL_INFO_CPU_SETTINGS; - dirty++; - break; -+#ifndef OPENSSL_NO_QUIC -+ case OPT_QUIC: -+ type = OPENSSL_INFO_QUIC; -+ dirty++; -+ break; -+#endif - } - } - if (opt_num_rest() != 0) ---- a/crypto/info.c -+++ b/crypto/info.c -@@ -199,6 +199,10 @@ const char *OPENSSL_info(int t) - if (ossl_cpu_info_str[0] != '\0') - return ossl_cpu_info_str + strlen(CPUINFO_PREFIX); - break; -+#ifndef OPENSSL_NO_QUIC -+ case OPENSSL_INFO_QUIC: -+ return "QUIC"; -+#endif - default: - break; - } ---- a/doc/man3/OpenSSL_version.pod -+++ b/doc/man3/OpenSSL_version.pod -@@ -211,6 +211,14 @@ automatically configured but may be set - The value has the same syntax as the environment variable. - For x86 the string looks like C. - -+=item OPENSSL_INFO_QUIC -+ -+This is only defined when compiling with a QUIC-enabled version of -+OpenSSL. At run time, this will return "QUIC" if QUIC is supported. -+ -+This can be used as a build time flag to determine if OpenSSL has -+QUIC enabled. -+ - =back - - For an unknown I, NULL is returned. ---- a/include/openssl/crypto.h.in -+++ b/include/openssl/crypto.h.in -@@ -176,6 +176,10 @@ const char *OPENSSL_info(int type); - # define OPENSSL_INFO_SEED_SOURCE 1007 - # define OPENSSL_INFO_CPU_SETTINGS 1008 - -+# ifndef OPENSSL_NO_QUIC -+# define OPENSSL_INFO_QUIC 2000 -+# endif -+ - int OPENSSL_issetugid(void); - - struct crypto_ex_data_st { diff --git a/openwrt/patch/openssl/quic/0031-QUIC-Add-early-data-support.patch b/openwrt/patch/openssl/quic/0031-QUIC-Add-early-data-support.patch deleted file mode 100644 index 9681c281e..000000000 --- a/openwrt/patch/openssl/quic/0031-QUIC-Add-early-data-support.patch +++ /dev/null @@ -1,485 +0,0 @@ -From ccd7adf0401d1c7e0cb3c7f874777d7d7246679b Mon Sep 17 00:00:00 2001 -From: Tatsuhiro Tsujikawa <404610+tatsuhiro-t@users.noreply.github.com> -Date: Thu, 11 Mar 2021 23:07:55 +0900 -Subject: [PATCH 31/43] QUIC: Add early data support - -* QUIC: Add early data support - -This commit adds SSL_set_quic_early_data_enabled to add early data -support to QUIC. ---- - doc/man3/SSL_CTX_set_quic_method.pod | 10 +- - include/openssl/ssl.h.in | 2 + - ssl/ssl_lib.c | 15 +++ - ssl/ssl_quic.c | 76 ++++++++++--- - ssl/statem/statem_srvr.c | 10 ++ - ssl/tls13_enc.c | 90 +++++++++++++--- - test/sslapitest.c | 156 +++++++++++++++++++++++++++ - util/libssl.num | 1 + - 8 files changed, 327 insertions(+), 33 deletions(-) - ---- a/doc/man3/SSL_CTX_set_quic_method.pod -+++ b/doc/man3/SSL_CTX_set_quic_method.pod -@@ -17,7 +17,8 @@ SSL_is_quic, - SSL_get_peer_quic_transport_version, - SSL_get_quic_transport_version, - SSL_set_quic_transport_version, --SSL_set_quic_use_legacy_codepoint -+SSL_set_quic_use_legacy_codepoint, -+SSL_set_quic_early_data_enabled - - QUIC support - - =head1 SYNOPSIS -@@ -47,6 +48,7 @@ SSL_set_quic_use_legacy_codepoint - void SSL_set_quic_transport_version(SSL *ssl, int version); - int SSL_get_quic_transport_version(const SSL *ssl); - int SSL_get_peer_quic_transport_version(const SSL *ssl); -+ void SSL_set_quic_early_data_enabled(SSL *ssl, int enabled); - - =head1 DESCRIPTION - -@@ -106,6 +108,12 @@ SSL_set_quic_transport_version(). - SSL_get_peer_quic_transport_version() returns the version the that was - negotiated. - -+SSL_set_quic_early_data_enabled() enables QUIC early data if a nonzero -+value is passed. Client must set a resumed session before calling -+this function. Server must set 0xffffffffu to -+SSL_CTX_set_max_early_data() or SSL_set_max_early_data() so that a -+session ticket indicates that server is able to accept early data. -+ - =head1 NOTES - - These APIs are implementations of BoringSSL's QUIC APIs. ---- a/include/openssl/ssl.h.in -+++ b/include/openssl/ssl.h.in -@@ -2577,6 +2577,8 @@ __owur int SSL_get_peer_quic_transport_v - - int SSL_CIPHER_get_prf_nid(const SSL_CIPHER *c); - -+void SSL_set_quic_early_data_enabled(SSL *ssl, int enabled); -+ - # endif - - # ifdef __cplusplus ---- a/ssl/ssl_lib.c -+++ b/ssl/ssl_lib.c -@@ -3998,6 +3998,21 @@ int SSL_do_handshake(SSL *s) - ret = s->handshake_func(s); - } - } -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s) && ret == 1) { -+ if (s->server) { -+ if (s->early_data_state == SSL_EARLY_DATA_ACCEPTING) { -+ s->early_data_state = SSL_EARLY_DATA_FINISHED_READING; -+ s->rwstate = SSL_READING; -+ ret = 0; -+ } -+ } else if (s->early_data_state == SSL_EARLY_DATA_CONNECTING) { -+ s->early_data_state = SSL_EARLY_DATA_WRITE_RETRY; -+ s->rwstate = SSL_READING; -+ ret = 0; -+ } -+ } -+#endif - return ret; - } - ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -257,24 +257,46 @@ int quic_set_encryption_secrets(SSL *ssl - return 1; - } - -- md = ssl_handshake_md(ssl); -- if (md == NULL) { -- /* May not have selected cipher, yet */ -- const SSL_CIPHER *c = NULL; -- -- /* -- * It probably doesn't make sense to use an (external) PSK session, -- * but in theory some kinds of external session caches could be -- * implemented using it, so allow psksession to be used as well as -- * the regular session. -- */ -- if (ssl->session != NULL) -- c = SSL_SESSION_get0_cipher(ssl->session); -- else if (ssl->psksession != NULL) -+ if (level == ssl_encryption_early_data) { -+ const SSL_CIPHER *c = SSL_SESSION_get0_cipher(ssl->session); -+ if (ssl->early_data_state == SSL_EARLY_DATA_CONNECTING -+ && ssl->max_early_data > 0 -+ && ssl->session->ext.max_early_data == 0) { -+ if (!ossl_assert(ssl->psksession != NULL -+ && ssl->max_early_data == -+ ssl->psksession->ext.max_early_data)) { -+ SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } - c = SSL_SESSION_get0_cipher(ssl->psksession); -+ } -+ -+ if (c == NULL) { -+ SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ return 0; -+ } - -- if (c != NULL) -- md = SSL_CIPHER_get_handshake_digest(c); -+ md = ssl_md(ssl->ctx, c->algorithm2); -+ } else { -+ md = ssl_handshake_md(ssl); -+ if (md == NULL) { -+ /* May not have selected cipher, yet */ -+ const SSL_CIPHER *c = NULL; -+ -+ /* -+ * It probably doesn't make sense to use an (external) PSK session, -+ * but in theory some kinds of external session caches could be -+ * implemented using it, so allow psksession to be used as well as -+ * the regular session. -+ */ -+ if (ssl->session != NULL) -+ c = SSL_SESSION_get0_cipher(ssl->session); -+ else if (ssl->psksession != NULL) -+ c = SSL_SESSION_get0_cipher(ssl->psksession); -+ -+ if (c != NULL) -+ md = SSL_CIPHER_get_handshake_digest(c); -+ } - } - - if ((len = EVP_MD_size(md)) <= 0) { -@@ -330,3 +352,25 @@ int SSL_is_quic(SSL* ssl) - { - return SSL_IS_QUIC(ssl); - } -+ -+void SSL_set_quic_early_data_enabled(SSL *ssl, int enabled) -+{ -+ if (!SSL_is_quic(ssl) || !SSL_in_before(ssl)) -+ return; -+ -+ if (!enabled) { -+ ssl->early_data_state = SSL_EARLY_DATA_NONE; -+ return; -+ } -+ -+ if (ssl->server) { -+ ssl->early_data_state = SSL_EARLY_DATA_ACCEPTING; -+ return; -+ } -+ -+ if ((ssl->session == NULL || ssl->session->ext.max_early_data == 0) -+ && ssl->psk_use_session_cb == NULL) -+ return; -+ -+ ssl->early_data_state = SSL_EARLY_DATA_CONNECTING; -+} ---- a/ssl/statem/statem_srvr.c -+++ b/ssl/statem/statem_srvr.c -@@ -964,6 +964,16 @@ WORK_STATE ossl_statem_server_post_work( - SSL3_CC_APPLICATION | SSL3_CHANGE_CIPHER_SERVER_WRITE)) - /* SSLfatal() already called */ - return WORK_ERROR; -+ -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s) && s->ext.early_data == SSL_EARLY_DATA_ACCEPTED) { -+ s->early_data_state = SSL_EARLY_DATA_FINISHED_READING; -+ if (!s->method->ssl3_enc->change_cipher_state( -+ s, SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_SERVER_READ)) -+ /* SSLfatal() already called */ -+ return WORK_ERROR; -+ } -+#endif - } - break; - ---- a/ssl/tls13_enc.c -+++ b/ssl/tls13_enc.c -@@ -434,20 +434,76 @@ static int quic_change_cipher_state(SSL - int is_server_write = ((which & SSL3_CHANGE_CIPHER_SERVER_WRITE) == SSL3_CHANGE_CIPHER_SERVER_WRITE); - int is_early = (which & SSL3_CC_EARLY); - -- md = ssl_handshake_md(s); -- if (!ssl3_digest_cached_records(s, 1) -- || !ssl_handshake_hash(s, hash, sizeof(hash), &hashlen)) { -- /* SSLfatal() already called */; -- goto err; -- } -+ if (is_early) { -+ EVP_MD_CTX *mdctx = NULL; -+ long handlen; -+ void *hdata; -+ unsigned int hashlenui; -+ const SSL_CIPHER *sslcipher = SSL_SESSION_get0_cipher(s->session); -+ -+ handlen = BIO_get_mem_data(s->s3.handshake_buffer, &hdata); -+ if (handlen <= 0) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_HANDSHAKE_LENGTH); -+ goto err; -+ } -+ -+ if (s->early_data_state == SSL_EARLY_DATA_CONNECTING -+ && s->max_early_data > 0 -+ && s->session->ext.max_early_data == 0) { -+ /* -+ * If we are attempting to send early data, and we've decided to -+ * actually do it but max_early_data in s->session is 0 then we -+ * must be using an external PSK. -+ */ -+ if (!ossl_assert(s->psksession != NULL -+ && s->max_early_data == -+ s->psksession->ext.max_early_data)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ goto err; -+ } -+ sslcipher = SSL_SESSION_get0_cipher(s->psksession); -+ } -+ if (sslcipher == NULL) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_PSK); -+ goto err; -+ } -+ -+ /* -+ * We need to calculate the handshake digest using the digest from -+ * the session. We haven't yet selected our ciphersuite so we can't -+ * use ssl_handshake_md(). -+ */ -+ mdctx = EVP_MD_CTX_new(); -+ if (mdctx == NULL) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE); -+ goto err; -+ } -+ md = ssl_md(s->ctx, sslcipher->algorithm2); -+ if (md == NULL || !EVP_DigestInit_ex(mdctx, md, NULL) -+ || !EVP_DigestUpdate(mdctx, hdata, handlen) -+ || !EVP_DigestFinal_ex(mdctx, hash, &hashlenui)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR); -+ EVP_MD_CTX_free(mdctx); -+ goto err; -+ } -+ hashlen = hashlenui; -+ EVP_MD_CTX_free(mdctx); -+ } else { -+ md = ssl_handshake_md(s); -+ if (!ssl3_digest_cached_records(s, 1) -+ || !ssl_handshake_hash(s, hash, sizeof(hash), &hashlen)) { -+ /* SSLfatal() already called */; -+ goto err; -+ } - -- /* Ensure cast to size_t is safe */ -- hashleni = EVP_MD_size(md); -- if (!ossl_assert(hashleni >= 0)) { -- SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB); -- goto err; -+ /* Ensure cast to size_t is safe */ -+ hashleni = EVP_MD_size(md); -+ if (!ossl_assert(hashleni >= 0)) { -+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB); -+ goto err; -+ } -+ hashlen = (size_t)hashleni; - } -- hashlen = (size_t)hashleni; - - if (is_client_read || is_server_write) { - if (is_handshake) { -@@ -553,10 +609,12 @@ static int quic_change_cipher_state(SSL - } - } - -- if (s->server) -- s->quic_read_level = level; -- else -- s->quic_write_level = level; -+ if (level != ssl_encryption_early_data) { -+ if (s->server) -+ s->quic_read_level = level; -+ else -+ s->quic_write_level = level; -+ } - } - - ret = 1; ---- a/test/sslapitest.c -+++ b/test/sslapitest.c -@@ -10966,6 +10966,159 @@ end: - serverssl = NULL; - return testresult; - } -+ -+# ifndef OSSL_NO_USABLE_TLS1_3 -+/* -+ * Helper method to setup objects for QUIC early data test. Caller -+ * frees objects on error. -+ */ -+static int quic_setupearly_data_test(SSL_CTX **cctx, SSL_CTX **sctx, -+ SSL **clientssl, SSL **serverssl, -+ SSL_SESSION **sess, int idx) -+{ -+ static const char *server_str = "SERVER"; -+ static const char *client_str = "CLIENT"; -+ -+ if (*sctx == NULL -+ && (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), -+ TLS_client_method(), -+ TLS1_3_VERSION, 0, -+ sctx, cctx, cert, privkey)) -+ || !TEST_true(SSL_CTX_set_quic_method(*sctx, &quic_method)) -+ || !TEST_true(SSL_CTX_set_quic_method(*cctx, &quic_method)) -+ || !TEST_true(SSL_CTX_set_max_early_data(*sctx, 0xffffffffu)))) -+ return 0; -+ -+ if (idx == 1) { -+ /* When idx == 1 we repeat the tests with read_ahead set */ -+ SSL_CTX_set_read_ahead(*cctx, 1); -+ SSL_CTX_set_read_ahead(*sctx, 1); -+ } else if (idx == 2) { -+ /* When idx == 2 we are doing early_data with a PSK. Set up callbacks */ -+ SSL_CTX_set_psk_use_session_callback(*cctx, use_session_cb); -+ SSL_CTX_set_psk_find_session_callback(*sctx, find_session_cb); -+ use_session_cb_cnt = 0; -+ find_session_cb_cnt = 0; -+ srvid = pskid; -+ } -+ -+ if (!TEST_true(create_ssl_objects(*sctx, *cctx, serverssl, clientssl, -+ NULL, NULL)) -+ || !TEST_true(SSL_set_quic_transport_params(*serverssl, -+ (unsigned char*)server_str, -+ strlen(server_str)+1)) -+ || !TEST_true(SSL_set_quic_transport_params(*clientssl, -+ (unsigned char*)client_str, -+ strlen(client_str)+1)) -+ || !TEST_true(SSL_set_app_data(*serverssl, *clientssl)) -+ || !TEST_true(SSL_set_app_data(*clientssl, *serverssl))) -+ return 0; -+ -+ /* -+ * For one of the run throughs (doesn't matter which one), we'll try sending -+ * some SNI data in the initial ClientHello. This will be ignored (because -+ * there is no SNI cb set up by the server), so it should not impact -+ * early_data. -+ */ -+ if (idx == 1 -+ && !TEST_true(SSL_set_tlsext_host_name(*clientssl, "localhost"))) -+ return 0; -+ -+ if (idx == 2) { -+ clientpsk = create_a_psk(*clientssl, SHA256_DIGEST_LENGTH); -+ if (!TEST_ptr(clientpsk) -+ || !TEST_true(SSL_SESSION_set_max_early_data(clientpsk, -+ 0xffffffffu)) -+ || !TEST_true(SSL_SESSION_up_ref(clientpsk))) { -+ SSL_SESSION_free(clientpsk); -+ clientpsk = NULL; -+ return 0; -+ } -+ serverpsk = clientpsk; -+ -+ if (sess != NULL) { -+ if (!TEST_true(SSL_SESSION_up_ref(clientpsk))) { -+ SSL_SESSION_free(clientpsk); -+ SSL_SESSION_free(serverpsk); -+ clientpsk = serverpsk = NULL; -+ return 0; -+ } -+ *sess = clientpsk; -+ } -+ -+ SSL_set_quic_early_data_enabled(*serverssl, 1); -+ SSL_set_quic_early_data_enabled(*clientssl, 1); -+ -+ return 1; -+ } -+ -+ if (sess == NULL) -+ return 1; -+ -+ if (!TEST_true(create_ssl_connection(*serverssl, *clientssl, -+ SSL_ERROR_NONE))) -+ return 0; -+ -+ /* Deal with two NewSessionTickets */ -+ if (!TEST_true(SSL_process_quic_post_handshake(*clientssl)) -+ || !TEST_true(SSL_process_quic_post_handshake(*clientssl))) -+ return 0; -+ -+ *sess = SSL_get1_session(*clientssl); -+ SSL_shutdown(*clientssl); -+ SSL_shutdown(*serverssl); -+ SSL_free(*serverssl); -+ SSL_free(*clientssl); -+ *serverssl = *clientssl = NULL; -+ -+ if (!TEST_true(create_ssl_objects(*sctx, *cctx, serverssl, -+ clientssl, NULL, NULL)) -+ || !TEST_true(SSL_set_session(*clientssl, *sess)) -+ || !TEST_true(SSL_set_quic_transport_params(*serverssl, -+ (unsigned char*)server_str, -+ strlen(server_str)+1)) -+ || !TEST_true(SSL_set_quic_transport_params(*clientssl, -+ (unsigned char*)client_str, -+ strlen(client_str)+1)) -+ || !TEST_true(SSL_set_app_data(*serverssl, *clientssl)) -+ || !TEST_true(SSL_set_app_data(*clientssl, *serverssl))) -+ return 0; -+ -+ SSL_set_quic_early_data_enabled(*serverssl, 1); -+ SSL_set_quic_early_data_enabled(*clientssl, 1); -+ -+ return 1; -+} -+ -+static int test_quic_early_data(int tst) -+{ -+ SSL_CTX *cctx = NULL, *sctx = NULL; -+ SSL *clientssl = NULL, *serverssl = NULL; -+ int testresult = 0; -+ SSL_SESSION *sess = NULL; -+ -+ if (!TEST_true(quic_setupearly_data_test(&cctx, &sctx, &clientssl, -+ &serverssl, &sess, tst))) -+ goto end; -+ -+ if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)) -+ || !TEST_true(SSL_get_early_data_status(serverssl))) -+ goto end; -+ -+ testresult = 1; -+ -+ end: -+ SSL_SESSION_free(sess); -+ SSL_SESSION_free(clientpsk); -+ SSL_SESSION_free(serverpsk); -+ clientpsk = serverpsk = NULL; -+ SSL_free(serverssl); -+ SSL_free(clientssl); -+ SSL_CTX_free(sctx); -+ SSL_CTX_free(cctx); -+ return testresult; -+} -+# endif /* OSSL_NO_USABLE_TLS1_3 */ - #endif /* OPENSSL_NO_QUIC */ - - OPT_TEST_DECLARE_USAGE("certfile privkeyfile srpvfile tmpfile provider config dhfile\n") -@@ -11246,6 +11399,9 @@ int setup_tests(void) - ADD_ALL_TESTS(test_multi_resume, 5); - #ifndef OPENSSL_NO_QUIC - ADD_ALL_TESTS(test_quic_api, 9); -+# ifndef OSSL_NO_USABLE_TLS1_3 -+ ADD_ALL_TESTS(test_quic_early_data, 3); -+# endif - #endif - return 1; - ---- a/util/libssl.num -+++ b/util/libssl.num -@@ -535,3 +535,4 @@ SSL_set_quic_use_legacy_codepoint - SSL_set_quic_transport_version 20012 3_0_0 EXIST::FUNCTION:QUIC - SSL_get_peer_quic_transport_version 20013 3_0_0 EXIST::FUNCTION:QUIC - SSL_get_quic_transport_version 20014 3_0_0 EXIST::FUNCTION:QUIC -+SSL_set_quic_early_data_enabled 20015 3_0_0 EXIST::FUNCTION:QUIC diff --git a/openwrt/patch/openssl/quic/0032-QUIC-Make-SSL_provide_quic_data-accept-0-length-data.patch b/openwrt/patch/openssl/quic/0032-QUIC-Make-SSL_provide_quic_data-accept-0-length-data.patch deleted file mode 100644 index 37435342c..000000000 --- a/openwrt/patch/openssl/quic/0032-QUIC-Make-SSL_provide_quic_data-accept-0-length-data.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 01bc5c3a5aa160c2e9bba9c0c45a94eb5702772d Mon Sep 17 00:00:00 2001 -From: Tatsuhiro Tsujikawa <404610+tatsuhiro-t@users.noreply.github.com> -Date: Fri, 12 Mar 2021 00:39:20 +0900 -Subject: [PATCH 32/43] QUIC: Make SSL_provide_quic_data accept 0 length data - -This commit makes SSL_provide_quic_data accept 0 length data, which -matches BoringSSL behavior. ---- - ssl/ssl_quic.c | 3 +++ - 1 file changed, 3 insertions(+) - ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -143,6 +143,9 @@ int SSL_provide_quic_data(SSL *ssl, OSSL - return 0; - } - -+ if (len == 0) -+ return 1; -+ - if (ssl->quic_buf == NULL) { - BUF_MEM *buf; - if ((buf = BUF_MEM_new()) == NULL) { diff --git a/openwrt/patch/openssl/quic/0033-QUIC-Process-multiple-post-handshake-messages-in-a-s.patch b/openwrt/patch/openssl/quic/0033-QUIC-Process-multiple-post-handshake-messages-in-a-s.patch deleted file mode 100644 index 10654746c..000000000 --- a/openwrt/patch/openssl/quic/0033-QUIC-Process-multiple-post-handshake-messages-in-a-s.patch +++ /dev/null @@ -1,68 +0,0 @@ -From d286825de6b6243fab9b5ad6c7d522067c4d0e3a Mon Sep 17 00:00:00 2001 -From: Tatsuhiro Tsujikawa <404610+tatsuhiro-t@users.noreply.github.com> -Date: Sat, 13 Mar 2021 05:37:34 +0900 -Subject: [PATCH 33/43] QUIC: Process multiple post-handshake messages in a - single call - ---- - ssl/ssl_quic.c | 27 +++++++++++++-------------- - test/sslapitest.c | 6 ++---- - 2 files changed, 15 insertions(+), 18 deletions(-) - ---- a/ssl/ssl_quic.c -+++ b/ssl/ssl_quic.c -@@ -334,20 +334,19 @@ int SSL_process_quic_post_handshake(SSL - } - - /* if there is no data, return success as BoringSSL */ -- if (ssl->quic_input_data_head == NULL) -- return 1; -- -- /* -- * This is always safe (we are sure to be at a record boundary) because -- * SSL_read()/SSL_write() are never used for QUIC connections -- the -- * application data is handled at the QUIC layer instead. -- */ -- ossl_statem_set_in_init(ssl, 1); -- ret = ssl->handshake_func(ssl); -- ossl_statem_set_in_init(ssl, 0); -+ while (ssl->quic_input_data_head != NULL) { -+ /* -+ * This is always safe (we are sure to be at a record boundary) because -+ * SSL_read()/SSL_write() are never used for QUIC connections -- the -+ * application data is handled at the QUIC layer instead. -+ */ -+ ossl_statem_set_in_init(ssl, 1); -+ ret = ssl->handshake_func(ssl); -+ ossl_statem_set_in_init(ssl, 0); - -- if (ret <= 0) -- return 0; -+ if (ret <= 0) -+ return 0; -+ } - return 1; - } - ---- a/test/sslapitest.c -+++ b/test/sslapitest.c -@@ -10872,8 +10872,7 @@ static int test_quic_api_version(int cln - goto end; - - /* Deal with two NewSessionTickets */ -- if (!TEST_true(SSL_process_quic_post_handshake(clientssl)) -- || !TEST_true(SSL_process_quic_post_handshake(clientssl))) -+ if (!TEST_true(SSL_process_quic_post_handshake(clientssl))) - goto end; - - /* Dummy handshake call should succeed */ -@@ -11060,8 +11059,7 @@ static int quic_setupearly_data_test(SSL - return 0; - - /* Deal with two NewSessionTickets */ -- if (!TEST_true(SSL_process_quic_post_handshake(*clientssl)) -- || !TEST_true(SSL_process_quic_post_handshake(*clientssl))) -+ if (!TEST_true(SSL_process_quic_post_handshake(*clientssl))) - return 0; - - *sess = SSL_get1_session(*clientssl); diff --git a/openwrt/patch/openssl/quic/0034-QUIC-Fix-CI.patch b/openwrt/patch/openssl/quic/0034-QUIC-Fix-CI.patch deleted file mode 100644 index a5a6893ab..000000000 --- a/openwrt/patch/openssl/quic/0034-QUIC-Fix-CI.patch +++ /dev/null @@ -1,84 +0,0 @@ -From db0ea38b914f434c1faa0a140a3ce5f9dfa8d248 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Thu, 18 Mar 2021 12:42:01 -0400 -Subject: [PATCH 34/43] QUIC: Fix CI - -Updates `Configure` script to disable QUIC with `no-bulk` and `no-ec` -Updates build.info doc docs -Fixes an issue with extension defintions and `no-quic` ---- - Configure | 3 ++- - doc/build.info | 6 ++++++ - ssl/statem/extensions.c | 1 + - ssl/statem/extensions_srvr.c | 2 +- - 4 files changed, 10 insertions(+), 2 deletions(-) - ---- a/Configure -+++ b/Configure -@@ -579,6 +579,7 @@ my @disable_cascades = ( - "sm3", "sm4", "srp", - "srtp", "ssl3-method", "ssl-trace", - "ts", "ui-console", "whirlpool", -+ "quic", - "fips-securitychecks" ], - sub { $config{processor} eq "386" } - => [ "sse2" ], -@@ -586,7 +587,7 @@ my @disable_cascades = ( - "ssl3-method" => [ "ssl3" ], - "zlib" => [ "zlib-dynamic" ], - "des" => [ "mdc2" ], -- "ec" => [ "ec2m", "ecdsa", "ecdh", "sm2", "gost" ], -+ "ec" => [ "ec2m", "ecdsa", "ecdh", "sm2", "gost", "quic" ], - "dgram" => [ "dtls", "sctp" ], - "sock" => [ "dgram" ], - "dtls" => [ @dtls ], ---- a/doc/build.info -+++ b/doc/build.info -@@ -2271,6 +2271,10 @@ DEPEND[html/man3/SSL_CTX_set_psk_client_ - GENERATE[html/man3/SSL_CTX_set_psk_client_callback.html]=man3/SSL_CTX_set_psk_client_callback.pod - DEPEND[man/man3/SSL_CTX_set_psk_client_callback.3]=man3/SSL_CTX_set_psk_client_callback.pod - GENERATE[man/man3/SSL_CTX_set_psk_client_callback.3]=man3/SSL_CTX_set_psk_client_callback.pod -+DEPEND[html/man3/SSL_CTX_set_quic_method.html]=man3/SSL_CTX_set_quic_method.pod -+GENERATE[html/man3/SSL_CTX_set_quic_method.html]=man3/SSL_CTX_set_quic_method.pod -+DEPEND[man/man3/SSL_CTX_set_quic_method.3]=man3/SSL_CTX_set_quic_method.pod -+GENERATE[man/man3/SSL_CTX_set_quic_method.3]=man3/SSL_CTX_set_quic_method.pod - DEPEND[html/man3/SSL_CTX_set_quiet_shutdown.html]=man3/SSL_CTX_set_quiet_shutdown.pod - GENERATE[html/man3/SSL_CTX_set_quiet_shutdown.html]=man3/SSL_CTX_set_quiet_shutdown.pod - DEPEND[man/man3/SSL_CTX_set_quiet_shutdown.3]=man3/SSL_CTX_set_quiet_shutdown.pod -@@ -3351,6 +3355,7 @@ html/man3/SSL_CTX_set_msg_callback.html - html/man3/SSL_CTX_set_num_tickets.html \ - html/man3/SSL_CTX_set_options.html \ - html/man3/SSL_CTX_set_psk_client_callback.html \ -+html/man3/SSL_CTX_set_quic_method.html \ - html/man3/SSL_CTX_set_quiet_shutdown.html \ - html/man3/SSL_CTX_set_read_ahead.html \ - html/man3/SSL_CTX_set_record_padding_callback.html \ -@@ -3959,6 +3964,7 @@ man/man3/SSL_CTX_set_msg_callback.3 \ - man/man3/SSL_CTX_set_num_tickets.3 \ - man/man3/SSL_CTX_set_options.3 \ - man/man3/SSL_CTX_set_psk_client_callback.3 \ -+man/man3/SSL_CTX_set_quic_method.3 \ - man/man3/SSL_CTX_set_quiet_shutdown.3 \ - man/man3/SSL_CTX_set_read_ahead.3 \ - man/man3/SSL_CTX_set_record_padding_callback.3 \ ---- a/ssl/statem/extensions.c -+++ b/ssl/statem/extensions.c -@@ -396,6 +396,7 @@ static const EXTENSION_DEFINITION ext_de - }, - #else - INVALID_EXTENSION, -+ INVALID_EXTENSION, - #endif - { - /* Must be immediately before pre_shared_key */ ---- a/ssl/statem/extensions_srvr.c -+++ b/ssl/statem/extensions_srvr.c -@@ -1912,7 +1912,7 @@ EXT_RETURN tls_construct_stoc_early_data - - #ifndef OPENSSL_NO_QUIC - /* QUIC server must always send 0xFFFFFFFF, per draft-ietf-quic-tls-27 S4.5 */ -- if (s->quic_method != NULL) -+ if (SSL_IS_QUIC(s)) - max_early_data = 0xFFFFFFFF; - #endif - diff --git a/openwrt/patch/openssl/quic/0035-QUIC-Break-up-header-body-processing.patch b/openwrt/patch/openssl/quic/0035-QUIC-Break-up-header-body-processing.patch deleted file mode 100644 index cf8aebcaa..000000000 --- a/openwrt/patch/openssl/quic/0035-QUIC-Break-up-header-body-processing.patch +++ /dev/null @@ -1,136 +0,0 @@ -From 8771ca8598c700037896929db7deeef3687bd897 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Thu, 6 May 2021 16:24:03 -0400 -Subject: [PATCH 35/43] QUIC: Break up header/body processing - -As DTLS has changed, so too must QUIC. ---- - ssl/statem/statem.c | 9 ++++++--- - ssl/statem/statem_local.h | 3 ++- - ssl/statem/statem_quic.c | 25 +++++++++++++++---------- - 3 files changed, 23 insertions(+), 14 deletions(-) - ---- a/ssl/statem/statem.c -+++ b/ssl/statem/statem.c -@@ -586,7 +586,7 @@ static SUB_STATE_RETURN read_state_machi - #ifndef OPENSSL_NO_QUIC - } else if (SSL_IS_QUIC(s)) { - /* QUIC behaves like DTLS -- all in one go. */ -- ret = quic_get_message(s, &mt, &len); -+ ret = quic_get_message(s, &mt); - #endif - } else { - ret = tls_get_message_header(s, &mt); -@@ -636,8 +636,11 @@ static SUB_STATE_RETURN read_state_machi - * opportunity to do any further processing. - */ - ret = dtls_get_message_body(s, &len); -- } else if (!SSL_IS_QUIC(s)) { -- /* We already got this above for QUIC */ -+#ifndef OPENSSL_NO_QUIC -+ } else if (SSL_IS_QUIC(s)) { -+ ret = quic_get_message_body(s, &len); -+#endif -+ } else { - ret = tls_get_message_body(s, &len); - } - if (ret == 0) { ---- a/ssl/statem/statem_local.h -+++ b/ssl/statem/statem_local.h -@@ -105,7 +105,8 @@ __owur int tls_get_message_body(SSL *s, - __owur int dtls_get_message(SSL *s, int *mt); - __owur int dtls_get_message_body(SSL *s, size_t *len); - #ifndef OPENSSL_NO_QUIC --__owur int quic_get_message(SSL *s, int *mt, size_t *len); -+__owur int quic_get_message(SSL *s, int *mt); -+__owur int quic_get_message_body(SSL *s, size_t *len); - #endif - - /* Message construction and processing functions */ ---- a/ssl/statem/statem_quic.c -+++ b/ssl/statem/statem_quic.c -@@ -11,7 +11,7 @@ - #include "statem_local.h" - #include "internal/cryptlib.h" - --int quic_get_message(SSL *s, int *mt, size_t *len) -+int quic_get_message(SSL *s, int *mt) - { - size_t l; - QUIC_DATA *qd = s->quic_input_data_head; -@@ -19,26 +19,26 @@ int quic_get_message(SSL *s, int *mt, si - - if (qd == NULL) { - s->rwstate = SSL_READING; -- *mt = *len = 0; -+ *mt = 0; - return 0; - } - - if (!ossl_assert(qd->length >= SSL3_HM_HEADER_LENGTH)) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_LENGTH); -- *mt = *len = 0; -+ *mt = 0; - return 0; - } - - /* This is where we check for the proper level, not when data is given */ - if (qd->level != s->quic_read_level) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED); -- *mt = *len = 0; -+ *mt = 0; - return 0; - } - - if (!BUF_MEM_grow_clean(s->init_buf, (int)qd->length)) { - SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_BUF_LIB); -- *mt = *len = 0; -+ *mt = 0; - return 0; - } - -@@ -53,28 +53,32 @@ int quic_get_message(SSL *s, int *mt, si - s->s3.tmp.message_type = *mt = *(s->init_buf->data); - p = (uint8_t*)s->init_buf->data + 1; - n2l3(p, l); -- s->init_num = s->s3.tmp.message_size = *len = l; -+ s->init_num = s->s3.tmp.message_size = l; - s->init_msg = s->init_buf->data + SSL3_HM_HEADER_LENGTH; - -+ return 1; -+} -+ -+int quic_get_message_body(SSL *s, size_t *len) -+{ - /* No CCS in QUIC/TLSv1.3? */ -- if (*mt == SSL3_MT_CHANGE_CIPHER_SPEC) { -+ if (s->s3.tmp.message_type == SSL3_MT_CHANGE_CIPHER_SPEC) { - SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_CCS_RECEIVED_EARLY); - *len = 0; - return 0; - } - /* No KeyUpdate in QUIC */ -- if (*mt == SSL3_MT_KEY_UPDATE) { -+ if (s->s3.tmp.message_type == SSL3_MT_KEY_UPDATE) { - SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); - *len = 0; - return 0; - } - -- - /* - * If receiving Finished, record MAC of prior handshake messages for - * Finished verification. - */ -- if (*mt == SSL3_MT_FINISHED && !ssl3_take_mac(s)) { -+ if (s->s3.tmp.message_type == SSL3_MT_FINISHED && !ssl3_take_mac(s)) { - /* SSLfatal() already called */ - *len = 0; - return 0; -@@ -108,5 +112,6 @@ int quic_get_message(SSL *s, int *mt, si - (size_t)s->init_num + SSL3_HM_HEADER_LENGTH, s, - s->msg_callback_arg); - -+ *len = s->init_num; - return 1; - } diff --git a/openwrt/patch/openssl/quic/0036-QUIC-Don-t-muck-with-FIPS-checksums.patch b/openwrt/patch/openssl/quic/0036-QUIC-Don-t-muck-with-FIPS-checksums.patch deleted file mode 100644 index 31c1a136b..000000000 --- a/openwrt/patch/openssl/quic/0036-QUIC-Don-t-muck-with-FIPS-checksums.patch +++ /dev/null @@ -1,113 +0,0 @@ -From e5b708383649146cbba45373bdf15a2e3c39240a Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Fri, 9 Jul 2021 13:29:03 -0400 -Subject: [PATCH 36/43] QUIC: Don't muck with FIPS checksums - ---- - apps/info.c | 1 + - crypto/info.c | 1 + - include/openssl/crypto.h.in | 4 ---- - include/openssl/evp.h | 4 ---- - include/openssl/quic.h | 19 +++++++++++++++++++ - include/openssl/ssl.h.in | 9 +++++++++ - include/openssl/types.h | 2 -- - 7 files changed, 30 insertions(+), 10 deletions(-) - create mode 100644 include/openssl/quic.h - ---- a/apps/info.c -+++ b/apps/info.c -@@ -10,6 +10,7 @@ - #include - #include "apps.h" - #include "progs.h" -+#include - - typedef enum OPTION_choice { - OPT_COMMON, ---- a/crypto/info.c -+++ b/crypto/info.c -@@ -14,6 +14,7 @@ - #include "internal/cryptlib.h" - #include "e_os.h" - #include "buildinf.h" -+#include - - #if defined(__arm__) || defined(__arm) || defined(__aarch64__) - # include "arm_arch.h" ---- a/include/openssl/crypto.h.in -+++ b/include/openssl/crypto.h.in -@@ -176,10 +176,6 @@ const char *OPENSSL_info(int type); - # define OPENSSL_INFO_SEED_SOURCE 1007 - # define OPENSSL_INFO_CPU_SETTINGS 1008 - --# ifndef OPENSSL_NO_QUIC --# define OPENSSL_INFO_QUIC 2000 --# endif -- - int OPENSSL_issetugid(void); - - struct crypto_ex_data_st { ---- a/include/openssl/evp.h -+++ b/include/openssl/evp.h -@@ -1742,10 +1742,6 @@ int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CT - */ - # define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 - --/* Used by Chromium/QUIC */ --# define X25519_PRIVATE_KEY_LEN 32 --# define X25519_PUBLIC_VALUE_LEN 32 -- - # ifndef OPENSSL_NO_DEPRECATED_3_0 - OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); - OSSL_DEPRECATEDIN_3_0 EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); ---- /dev/null -+++ b/include/openssl/quic.h -@@ -0,0 +1,19 @@ -+/* -+ * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. -+ * -+ * Licensed under the Apache License 2.0 (the "License"). You may not use -+ * this file except in compliance with the License. You can obtain a copy -+ * in the file LICENSE in the source distribution or at -+ * https://www.openssl.org/source/license.html -+ */ -+ -+#ifndef OPENSSL_QUIC_H -+# define OPENSSL_QUIC_H -+# pragma once -+# ifndef OPENSSL_NO_QUIC -+ -+/* moved from crypto.h.in to avoid breaking FIPS checksums */ -+# define OPENSSL_INFO_QUIC 2000 -+ -+# endif /* OPENSSL_NO_QUIC */ -+#endif /* OPENSSL_QUIC_H */ ---- a/include/openssl/ssl.h.in -+++ b/include/openssl/ssl.h.in -@@ -2528,6 +2528,15 @@ const char *OSSL_default_ciphersuites(vo - * ssl_encryption_level_t represents a specific QUIC encryption level used to - * transmit handshake messages. BoringSSL has this as an 'enum'. - */ -+#include -+ -+/* Used by Chromium/QUIC - moved from evp.h to avoid breaking FIPS checksums */ -+# define X25519_PRIVATE_KEY_LEN 32 -+# define X25519_PUBLIC_VALUE_LEN 32 -+ -+/* moved from types.h to avoid breaking FIPS checksums */ -+typedef struct ssl_quic_method_st SSL_QUIC_METHOD; -+ - typedef enum ssl_encryption_level_t { - ssl_encryption_initial = 0, - ssl_encryption_early_data, ---- a/include/openssl/types.h -+++ b/include/openssl/types.h -@@ -229,8 +229,6 @@ typedef struct ossl_decoder_ctx_st OSSL_ - - typedef struct ossl_self_test_st OSSL_SELF_TEST; - --typedef struct ssl_quic_method_st SSL_QUIC_METHOD; -- - #ifdef __cplusplus - } - #endif diff --git a/openwrt/patch/openssl/quic/0037-QUIC-Update-RFC-references.patch b/openwrt/patch/openssl/quic/0037-QUIC-Update-RFC-references.patch deleted file mode 100644 index f5d109555..000000000 --- a/openwrt/patch/openssl/quic/0037-QUIC-Update-RFC-references.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 00ba735b875be08adbf1bb388cbce8155a1ed978 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Tue, 7 Sep 2021 12:26:10 -0400 -Subject: [PATCH 37/43] QUIC: Update RFC references - ---- - doc/man3/SSL_CTX_set_quic_method.pod | 11 +++++------ - include/openssl/tls1.h | 2 +- - ssl/statem/extensions_clnt.c | 2 +- - ssl/statem/extensions_srvr.c | 2 +- - ssl/statem/statem_clnt.c | 2 +- - 5 files changed, 9 insertions(+), 10 deletions(-) - ---- a/doc/man3/SSL_CTX_set_quic_method.pod -+++ b/doc/man3/SSL_CTX_set_quic_method.pod -@@ -74,7 +74,7 @@ SSL_quic_max_handshake_flight_len() retu - that may be received at the given encryption level. This function should be - used to limit buffering in the QUIC implementation. - --See https://tools.ietf.org/html/draft-ietf-quic-transport-27#section-4. -+See L. - - SSL_quic_read_level() returns the current read encryption level. - -@@ -120,7 +120,7 @@ These APIs are implementations of Boring - - QUIC acts as an underlying transport for the TLS 1.3 handshake. The following - functions allow a QUIC implementation to serve as the underlying transport as --described in draft-ietf-quic-tls. -+described in RFC9001. - - When configured for QUIC, SSL_do_handshake() will drive the handshake as - before, but it will not use the configured B. It will call functions from -@@ -139,18 +139,17 @@ pass the active write level to add_hands - can use SSL_quic_write_level() to query the active write level when - generating their own errors. - --See https://tools.ietf.org/html/draft-ietf-quic-tls-27#section-4.1 for more --details. -+See L for more details. - - To avoid DoS attacks, the QUIC implementation must limit the amount of data - being queued up. The implementation can call - SSL_quic_max_handshake_flight_len() to get the maximum buffer length at each - encryption level. - --draft-ietf-quic-tls defines a new TLS extension "quic_transport_parameters" -+RFC9001 defines a new TLS extension "quic_transport_parameters" - used by QUIC for each endpoint to unilaterally declare its supported - transport parameters. The contents of the extension are specified in --https://tools.ietf.org/html/draft-ietf-quic-transport-27#section-18 (as -+L (as - a sequence of tag/length/value parameters) along with the interpretation of the - various parameters and the rules for their processing. - ---- a/include/openssl/tls1.h -+++ b/include/openssl/tls1.h -@@ -151,7 +151,7 @@ extern "C" { - /* Temporary extension type */ - # define TLSEXT_TYPE_renegotiate 0xff01 - --/* ExtensionType value from draft-ietf-quic-tls-27 */ -+ /* ExtensionType value from RFC9001 */ - # define TLSEXT_TYPE_quic_transport_parameters_draft 0xffa5 - # define TLSEXT_TYPE_quic_transport_parameters 0x0039 - ---- a/ssl/statem/extensions_clnt.c -+++ b/ssl/statem/extensions_clnt.c -@@ -1942,7 +1942,7 @@ int tls_parse_stoc_early_data(SSL *s, PA - #ifndef OPENSSL_NO_QUIC - /* - * QUIC server must send 0xFFFFFFFF or it's a PROTOCOL_VIOLATION -- * per draft-ietf-quic-tls-27 S4.5 -+ * per RFC9001 S4.6.1 - */ - if (s->quic_method != NULL && max_early_data != 0xFFFFFFFF) { - SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_INVALID_MAX_EARLY_DATA); ---- a/ssl/statem/extensions_srvr.c -+++ b/ssl/statem/extensions_srvr.c -@@ -1911,7 +1911,7 @@ EXT_RETURN tls_construct_stoc_early_data - return EXT_RETURN_NOT_SENT; - - #ifndef OPENSSL_NO_QUIC -- /* QUIC server must always send 0xFFFFFFFF, per draft-ietf-quic-tls-27 S4.5 */ -+ /* QUIC server must always send 0xFFFFFFFF, per RFC9001 S4.6.1 */ - if (SSL_IS_QUIC(s)) - max_early_data = 0xFFFFFFFF; - #endif ---- a/ssl/statem/statem_clnt.c -+++ b/ssl/statem/statem_clnt.c -@@ -905,7 +905,7 @@ int ossl_statem_client_construct_message - - case TLS_ST_CW_END_OF_EARLY_DATA: - #ifndef OPENSSL_NO_QUIC -- /* QUIC does not send EndOfEarlyData, draft-ietf-quic-tls-24 S8.3 */ -+ /* QUIC does not send EndOfEarlyData, RFC9001 S8.3 */ - if (s->quic_method != NULL) { - *confunc = NULL; - *mt = SSL3_MT_DUMMY; diff --git a/openwrt/patch/openssl/quic/0038-QUIC-revert-white-space-change.patch b/openwrt/patch/openssl/quic/0038-QUIC-revert-white-space-change.patch deleted file mode 100644 index 99001b957..000000000 --- a/openwrt/patch/openssl/quic/0038-QUIC-revert-white-space-change.patch +++ /dev/null @@ -1,19 +0,0 @@ -From d25cdd9dfed870991d6eeca1f76ed805eecbf184 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Tue, 7 Sep 2021 12:29:37 -0400 -Subject: [PATCH 38/43] QUIC: revert white-space change - ---- - include/openssl/evp.h | 1 - - 1 file changed, 1 deletion(-) - ---- a/include/openssl/evp.h -+++ b/include/openssl/evp.h -@@ -1741,7 +1741,6 @@ int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CT - * Method handles all operations: don't assume any digest related defaults. - */ - # define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 -- - # ifndef OPENSSL_NO_DEPRECATED_3_0 - OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); - OSSL_DEPRECATEDIN_3_0 EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); diff --git a/openwrt/patch/openssl/quic/0039-QUIC-use-SSL_IS_QUIC-in-more-places.patch b/openwrt/patch/openssl/quic/0039-QUIC-use-SSL_IS_QUIC-in-more-places.patch deleted file mode 100644 index 73312bd6c..000000000 --- a/openwrt/patch/openssl/quic/0039-QUIC-use-SSL_IS_QUIC-in-more-places.patch +++ /dev/null @@ -1,44 +0,0 @@ -From b240c965d1c7c1d2095c2af798c4853d3379480a Mon Sep 17 00:00:00 2001 -From: Benjamin Kaduk -Date: Tue, 7 Sep 2021 14:21:22 -0700 -Subject: [PATCH 39/43] QUIC: use SSL_IS_QUIC() in more places - ---- - doc/man3/SSL_CTX_set_quic_method.pod | 2 +- - ssl/statem/extensions_clnt.c | 2 +- - ssl/statem/statem_clnt.c | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - ---- a/doc/man3/SSL_CTX_set_quic_method.pod -+++ b/doc/man3/SSL_CTX_set_quic_method.pod -@@ -105,7 +105,7 @@ the client will send both extensions. - SSL_get_quic_transport_version() returns the value set by - SSL_set_quic_transport_version(). - --SSL_get_peer_quic_transport_version() returns the version the that was -+SSL_get_peer_quic_transport_version() returns the version the that was - negotiated. - - SSL_set_quic_early_data_enabled() enables QUIC early data if a nonzero ---- a/ssl/statem/extensions_clnt.c -+++ b/ssl/statem/extensions_clnt.c -@@ -1944,7 +1944,7 @@ int tls_parse_stoc_early_data(SSL *s, PA - * QUIC server must send 0xFFFFFFFF or it's a PROTOCOL_VIOLATION - * per RFC9001 S4.6.1 - */ -- if (s->quic_method != NULL && max_early_data != 0xFFFFFFFF) { -+ if (SSL_IS_QUIC(s) && max_early_data != 0xFFFFFFFF) { - SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_INVALID_MAX_EARLY_DATA); - return 0; - } ---- a/ssl/statem/statem_clnt.c -+++ b/ssl/statem/statem_clnt.c -@@ -906,7 +906,7 @@ int ossl_statem_client_construct_message - case TLS_ST_CW_END_OF_EARLY_DATA: - #ifndef OPENSSL_NO_QUIC - /* QUIC does not send EndOfEarlyData, RFC9001 S8.3 */ -- if (s->quic_method != NULL) { -+ if (SSL_IS_QUIC(s)) { - *confunc = NULL; - *mt = SSL3_MT_DUMMY; - break; diff --git a/openwrt/patch/openssl/quic/0040-QUIC-Error-when-non-empty-session_id-in-CH.patch b/openwrt/patch/openssl/quic/0040-QUIC-Error-when-non-empty-session_id-in-CH.patch deleted file mode 100644 index 03580aba6..000000000 --- a/openwrt/patch/openssl/quic/0040-QUIC-Error-when-non-empty-session_id-in-CH.patch +++ /dev/null @@ -1,27 +0,0 @@ -From ed45a1c6b04d0a2f8b4cd3a43cc9f14de8f3c374 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Mon, 18 Oct 2021 16:54:31 -0400 -Subject: [PATCH 40/43] QUIC: Error when non-empty session_id in CH - ---- - ssl/statem/statem_srvr.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - ---- a/ssl/statem/statem_srvr.c -+++ b/ssl/statem/statem_srvr.c -@@ -1566,6 +1566,15 @@ MSG_PROCESS_RETURN tls_process_client_he - goto err; - } - } -+#ifndef OPENSSL_NO_QUIC -+ if (SSL_IS_QUIC(s)) { -+ /* Any other QUIC checks on ClientHello here */ -+ if (clienthello->session_id_len > 0) { -+ SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_LENGTH_MISMATCH); -+ goto err; -+ } -+ } -+#endif - } - - if (!PACKET_copy_all(&compression, clienthello->compressions, diff --git a/openwrt/patch/openssl/quic/0041-QUIC-Update-SSL_clear-to-clear-quic-data.patch b/openwrt/patch/openssl/quic/0041-QUIC-Update-SSL_clear-to-clear-quic-data.patch deleted file mode 100644 index 8d764eae5..000000000 --- a/openwrt/patch/openssl/quic/0041-QUIC-Update-SSL_clear-to-clear-quic-data.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 53877ac198689b21a9fbdf71f0eeec5c15d550e4 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Tue, 19 Oct 2021 12:13:31 -0400 -Subject: [PATCH 41/43] QUIC: Update SSL_clear() to clear quic data - -Had to fixup tests because SSL_accept() eventually calls SSL_clear() and -it was removing the inital ClientHello sent via SSL_provide_quic_data() -from the server SSL. ---- - ssl/ssl_lib.c | 32 ++++++++++++++++++++++++++++++++ - test/helpers/ssltestlib.c | 5 ----- - test/sslapitest.c | 19 ++++++++++++++----- - 3 files changed, 46 insertions(+), 10 deletions(-) - ---- a/ssl/ssl_lib.c -+++ b/ssl/ssl_lib.c -@@ -640,6 +640,38 @@ int SSL_clear(SSL *s) - s->shared_sigalgs = NULL; - s->shared_sigalgslen = 0; - -+#if !defined(OPENSSL_NO_QUIC) -+ OPENSSL_free(s->ext.peer_quic_transport_params_draft); -+ s->ext.peer_quic_transport_params_draft = NULL; -+ s->ext.peer_quic_transport_params_draft_len = 0; -+ OPENSSL_free(s->ext.peer_quic_transport_params); -+ s->ext.peer_quic_transport_params = NULL; -+ s->ext.peer_quic_transport_params_len = 0; -+ s->quic_read_level = ssl_encryption_initial; -+ s->quic_write_level = ssl_encryption_initial; -+ s->quic_latest_level_received = ssl_encryption_initial; -+ while (s->quic_input_data_head != NULL) { -+ QUIC_DATA *qd; -+ -+ qd = s->quic_input_data_head; -+ s->quic_input_data_head = qd->next; -+ OPENSSL_free(qd); -+ } -+ s->quic_input_data_tail = NULL; -+ BUF_MEM_free(s->quic_buf); -+ s->quic_buf = NULL; -+ s->quic_next_record_start = 0; -+ memset(s->client_hand_traffic_secret, 0, EVP_MAX_MD_SIZE); -+ memset(s->server_hand_traffic_secret, 0, EVP_MAX_MD_SIZE); -+ memset(s->client_early_traffic_secret, 0, EVP_MAX_MD_SIZE); -+ /* -+ * CONFIG - DON'T CLEAR -+ * s->ext.quic_transport_params -+ * s->ext.quic_transport_params_len -+ * s->quic_transport_version -+ * s->quic_method = NULL; -+ */ -+#endif - /* - * Check to see if we were changed into a different method, if so, revert - * back. ---- a/test/helpers/ssltestlib.c -+++ b/test/helpers/ssltestlib.c -@@ -1166,11 +1166,6 @@ int create_ssl_connection(SSL *serverssl - if (!create_bare_ssl_connection(serverssl, clientssl, want, 1)) - return 0; - --#ifndef OPENSSL_NO_QUIC -- /* QUIC does not support SSL_read_ex */ -- if (SSL_is_quic(clientssl)) -- return 1; --#endif - /* - * We attempt to read some data on the client side which we expect to fail. - * This will ensure we have received the NewSessionTicket in TLSv1.3 where ---- a/test/sslapitest.c -+++ b/test/sslapitest.c -@@ -10832,6 +10832,7 @@ static int test_quic_api_version(int cln - static const char *client_str = "CLIENT"; - const uint8_t *peer_str; - size_t peer_str_len; -+ int err; - - TEST_info("original clnt=0x%X, srvr=0x%X\n", clnt, srvr); - -@@ -10854,8 +10855,10 @@ static int test_quic_api_version(int cln - || !TEST_true(SSL_set_app_data(clientssl, serverssl)) - || !TEST_true(test_quic_api_set_versions(clientssl, clnt)) - || !TEST_true(test_quic_api_set_versions(serverssl, srvr)) -- || !TEST_true(create_ssl_connection(serverssl, clientssl, -- SSL_ERROR_NONE)) -+ || !TEST_int_eq(err = SSL_accept(serverssl), -1) -+ || !TEST_int_eq(SSL_get_error(serverssl, err), SSL_ERROR_WANT_READ) -+ || !TEST_true(create_bare_ssl_connection(serverssl, clientssl, -+ SSL_ERROR_NONE, 0)) - || !TEST_true(SSL_version(serverssl) == TLS1_3_VERSION) - || !TEST_true(SSL_version(clientssl) == TLS1_3_VERSION) - || !(TEST_int_eq(SSL_quic_read_level(clientssl), ssl_encryption_application)) -@@ -10977,6 +10980,7 @@ static int quic_setupearly_data_test(SSL - { - static const char *server_str = "SERVER"; - static const char *client_str = "CLIENT"; -+ int err; - - if (*sctx == NULL - && (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), -@@ -11054,8 +11058,10 @@ static int quic_setupearly_data_test(SSL - if (sess == NULL) - return 1; - -- if (!TEST_true(create_ssl_connection(*serverssl, *clientssl, -- SSL_ERROR_NONE))) -+ if (!TEST_int_eq(err = SSL_accept(*serverssl), -1) -+ || !TEST_int_eq(SSL_get_error(*serverssl, err), SSL_ERROR_WANT_READ) -+ || !TEST_true(create_bare_ssl_connection(*serverssl, *clientssl, -+ SSL_ERROR_NONE, 0))) - return 0; - - /* Deal with two NewSessionTickets */ -@@ -11094,12 +11100,15 @@ static int test_quic_early_data(int tst) - SSL *clientssl = NULL, *serverssl = NULL; - int testresult = 0; - SSL_SESSION *sess = NULL; -+ int err; - - if (!TEST_true(quic_setupearly_data_test(&cctx, &sctx, &clientssl, - &serverssl, &sess, tst))) - goto end; - -- if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)) -+ if (!TEST_int_eq(err = SSL_accept(serverssl), -1) -+ || !TEST_int_eq(SSL_get_error(serverssl, err), SSL_ERROR_WANT_READ) -+ || !TEST_true(create_bare_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE, 0)) - || !TEST_true(SSL_get_early_data_status(serverssl))) - goto end; - diff --git a/openwrt/patch/openssl/quic/0042-QUIC-Better-SSL_clear.patch b/openwrt/patch/openssl/quic/0042-QUIC-Better-SSL_clear.patch deleted file mode 100644 index 885ec470e..000000000 --- a/openwrt/patch/openssl/quic/0042-QUIC-Better-SSL_clear.patch +++ /dev/null @@ -1,206 +0,0 @@ -From 87ce5b9478fbed0576abe1809a3eece9a5f28680 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Fri, 29 Oct 2021 14:15:06 -0400 -Subject: [PATCH 42/43] QUIC: Better SSL_clear() - -Undo SSL_clear() changes in test -Break apart SSL_clear() into SSL_clear_quic() and SSL_clear_not_quic() -In SSL_clear(), call both functions -In SSL_accept(), call SSL_clear_not_quic() -Don't make the new functions public. ---- - ssl/ssl_lib.c | 81 +++++++++++++++++++++++++++------------------ - ssl/ssl_local.h | 5 +++ - ssl/statem/statem.c | 5 +++ - test/sslapitest.c | 17 +++------- - 4 files changed, 63 insertions(+), 45 deletions(-) - ---- a/ssl/ssl_lib.c -+++ b/ssl/ssl_lib.c -@@ -581,8 +581,57 @@ static void clear_ciphers(SSL *s) - ssl_clear_hash_ctx(&s->write_hash); - } - -+#ifndef OPENSSL_NO_QUIC - int SSL_clear(SSL *s) - { -+ if (!SSL_clear_not_quic(s)) -+ return 0; -+ return SSL_clear_quic(s); -+} -+ -+int SSL_clear_quic(SSL *s) -+{ -+ OPENSSL_free(s->ext.peer_quic_transport_params_draft); -+ s->ext.peer_quic_transport_params_draft = NULL; -+ s->ext.peer_quic_transport_params_draft_len = 0; -+ OPENSSL_free(s->ext.peer_quic_transport_params); -+ s->ext.peer_quic_transport_params = NULL; -+ s->ext.peer_quic_transport_params_len = 0; -+ s->quic_read_level = ssl_encryption_initial; -+ s->quic_write_level = ssl_encryption_initial; -+ s->quic_latest_level_received = ssl_encryption_initial; -+ while (s->quic_input_data_head != NULL) { -+ QUIC_DATA *qd; -+ -+ qd = s->quic_input_data_head; -+ s->quic_input_data_head = qd->next; -+ OPENSSL_free(qd); -+ } -+ s->quic_input_data_tail = NULL; -+ BUF_MEM_free(s->quic_buf); -+ s->quic_buf = NULL; -+ s->quic_next_record_start = 0; -+ memset(s->client_hand_traffic_secret, 0, EVP_MAX_MD_SIZE); -+ memset(s->server_hand_traffic_secret, 0, EVP_MAX_MD_SIZE); -+ memset(s->client_early_traffic_secret, 0, EVP_MAX_MD_SIZE); -+ /* -+ * CONFIG - DON'T CLEAR -+ * s->ext.quic_transport_params -+ * s->ext.quic_transport_params_len -+ * s->quic_transport_version -+ * s->quic_method = NULL; -+ */ -+ return 1; -+} -+#endif -+ -+/* Keep this conditional very local */ -+#ifndef OPENSSL_NO_QUIC -+int SSL_clear_not_quic(SSL *s) -+#else -+int SSL_clear(SSL *s) -+#endif -+{ - if (s->method == NULL) { - ERR_raise(ERR_LIB_SSL, SSL_R_NO_METHOD_SPECIFIED); - return 0; -@@ -640,38 +689,6 @@ int SSL_clear(SSL *s) - s->shared_sigalgs = NULL; - s->shared_sigalgslen = 0; - --#if !defined(OPENSSL_NO_QUIC) -- OPENSSL_free(s->ext.peer_quic_transport_params_draft); -- s->ext.peer_quic_transport_params_draft = NULL; -- s->ext.peer_quic_transport_params_draft_len = 0; -- OPENSSL_free(s->ext.peer_quic_transport_params); -- s->ext.peer_quic_transport_params = NULL; -- s->ext.peer_quic_transport_params_len = 0; -- s->quic_read_level = ssl_encryption_initial; -- s->quic_write_level = ssl_encryption_initial; -- s->quic_latest_level_received = ssl_encryption_initial; -- while (s->quic_input_data_head != NULL) { -- QUIC_DATA *qd; -- -- qd = s->quic_input_data_head; -- s->quic_input_data_head = qd->next; -- OPENSSL_free(qd); -- } -- s->quic_input_data_tail = NULL; -- BUF_MEM_free(s->quic_buf); -- s->quic_buf = NULL; -- s->quic_next_record_start = 0; -- memset(s->client_hand_traffic_secret, 0, EVP_MAX_MD_SIZE); -- memset(s->server_hand_traffic_secret, 0, EVP_MAX_MD_SIZE); -- memset(s->client_early_traffic_secret, 0, EVP_MAX_MD_SIZE); -- /* -- * CONFIG - DON'T CLEAR -- * s->ext.quic_transport_params -- * s->ext.quic_transport_params_len -- * s->quic_transport_version -- * s->quic_method = NULL; -- */ --#endif - /* - * Check to see if we were changed into a different method, if so, revert - * back. ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -2867,6 +2867,11 @@ void custom_exts_free(custom_ext_methods - - void ssl_comp_free_compression_methods_int(void); - -+#ifndef OPENSSL_NO_QUIC -+__owur int SSL_clear_not_quic(SSL *s); -+__owur int SSL_clear_quic(SSL *s); -+#endif -+ - /* ssl_mcnf.c */ - void ssl_ctx_system_config(SSL_CTX *ctx); - ---- a/ssl/statem/statem.c -+++ b/ssl/statem/statem.c -@@ -334,8 +334,13 @@ static int state_machine(SSL *s, int ser - * If we are stateless then we already called SSL_clear() - don't do - * it again and clear the STATELESS flag itself. - */ -+#ifndef OPENSSL_NO_QUIC -+ if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0 && !SSL_clear_not_quic(s)) -+ return -1; -+#else - if ((s->s3.flags & TLS1_FLAGS_STATELESS) == 0 && !SSL_clear(s)) - return -1; -+#endif - } - #ifndef OPENSSL_NO_SCTP - if (SSL_IS_DTLS(s) && BIO_dgram_is_sctp(SSL_get_wbio(s))) { ---- a/test/sslapitest.c -+++ b/test/sslapitest.c -@@ -10832,7 +10832,6 @@ static int test_quic_api_version(int cln - static const char *client_str = "CLIENT"; - const uint8_t *peer_str; - size_t peer_str_len; -- int err; - - TEST_info("original clnt=0x%X, srvr=0x%X\n", clnt, srvr); - -@@ -10855,10 +10854,8 @@ static int test_quic_api_version(int cln - || !TEST_true(SSL_set_app_data(clientssl, serverssl)) - || !TEST_true(test_quic_api_set_versions(clientssl, clnt)) - || !TEST_true(test_quic_api_set_versions(serverssl, srvr)) -- || !TEST_int_eq(err = SSL_accept(serverssl), -1) -- || !TEST_int_eq(SSL_get_error(serverssl, err), SSL_ERROR_WANT_READ) - || !TEST_true(create_bare_ssl_connection(serverssl, clientssl, -- SSL_ERROR_NONE, 0)) -+ SSL_ERROR_NONE, 0)) - || !TEST_true(SSL_version(serverssl) == TLS1_3_VERSION) - || !TEST_true(SSL_version(clientssl) == TLS1_3_VERSION) - || !(TEST_int_eq(SSL_quic_read_level(clientssl), ssl_encryption_application)) -@@ -10980,7 +10977,6 @@ static int quic_setupearly_data_test(SSL - { - static const char *server_str = "SERVER"; - static const char *client_str = "CLIENT"; -- int err; - - if (*sctx == NULL - && (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), -@@ -11058,10 +11054,8 @@ static int quic_setupearly_data_test(SSL - if (sess == NULL) - return 1; - -- if (!TEST_int_eq(err = SSL_accept(*serverssl), -1) -- || !TEST_int_eq(SSL_get_error(*serverssl, err), SSL_ERROR_WANT_READ) -- || !TEST_true(create_bare_ssl_connection(*serverssl, *clientssl, -- SSL_ERROR_NONE, 0))) -+ if (!TEST_true(create_bare_ssl_connection(*serverssl, *clientssl, -+ SSL_ERROR_NONE, 0))) - return 0; - - /* Deal with two NewSessionTickets */ -@@ -11100,15 +11094,12 @@ static int test_quic_early_data(int tst) - SSL *clientssl = NULL, *serverssl = NULL; - int testresult = 0; - SSL_SESSION *sess = NULL; -- int err; - - if (!TEST_true(quic_setupearly_data_test(&cctx, &sctx, &clientssl, - &serverssl, &sess, tst))) - goto end; - -- if (!TEST_int_eq(err = SSL_accept(serverssl), -1) -- || !TEST_int_eq(SSL_get_error(serverssl, err), SSL_ERROR_WANT_READ) -- || !TEST_true(create_bare_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE, 0)) -+ if (!TEST_true(create_bare_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE, 0)) - || !TEST_true(SSL_get_early_data_status(serverssl))) - goto end; - diff --git a/openwrt/patch/openssl/quic/0043-QUIC-Fix-extension-test.patch b/openwrt/patch/openssl/quic/0043-QUIC-Fix-extension-test.patch deleted file mode 100644 index 26f6dcf8a..000000000 --- a/openwrt/patch/openssl/quic/0043-QUIC-Fix-extension-test.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 83da964dc2da67fe779feddfc3a8d3baa9e446c5 Mon Sep 17 00:00:00 2001 -From: Todd Short -Date: Tue, 1 Nov 2022 12:55:46 -0400 -Subject: [PATCH 43/43] QUIC: Fix extension test - ---- - ssl/ssl_local.h | 4 ++-- - test/ext_internal_test.c | 7 +++++++ - 2 files changed, 9 insertions(+), 2 deletions(-) - ---- a/ssl/ssl_local.h -+++ b/ssl/ssl_local.h -@@ -773,8 +773,8 @@ typedef enum tlsext_index_en { - TLSEXT_IDX_cryptopro_bug, - TLSEXT_IDX_early_data, - TLSEXT_IDX_certificate_authorities, -- TLSEXT_IDX_quic_transport_params_draft, -- TLSEXT_IDX_quic_transport_params, -+ TLSEXT_IDX_quic_transport_parameters_draft, -+ TLSEXT_IDX_quic_transport_parameters, - TLSEXT_IDX_padding, - TLSEXT_IDX_psk, - /* Dummy index - must always be the last entry */ ---- a/test/ext_internal_test.c -+++ b/test/ext_internal_test.c -@@ -69,6 +69,13 @@ static EXT_LIST ext_list[] = { - EXT_ENTRY(cryptopro_bug), - EXT_ENTRY(early_data), - EXT_ENTRY(certificate_authorities), -+#ifndef OPENSSL_NO_QUIC -+ EXT_ENTRY(quic_transport_parameters_draft), -+ EXT_ENTRY(quic_transport_parameters), -+#else -+ EXT_EXCEPTION(quic_transport_parameters_draft), -+ EXT_EXCEPTION(quic_transport_parameters), -+#endif - EXT_ENTRY(padding), - EXT_ENTRY(psk), - EXT_END(num_builtins) diff --git a/openwrt/patch/openssl/quic/0044-QUIC-Update-metadata-version.patch b/openwrt/patch/openssl/quic/0044-QUIC-Update-metadata-version.patch deleted file mode 100644 index c2528104d..000000000 --- a/openwrt/patch/openssl/quic/0044-QUIC-Update-metadata-version.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/VERSION.dat -+++ b/VERSION.dat -@@ -2,6 +2,6 @@ MAJOR=3 - MINOR=0 - PATCH=14 - PRE_RELEASE_TAG= --BUILD_METADATA= -+BUILD_METADATA=quic - RELEASE_DATE="4 Jun 2024" - SHLIB_VERSION=3 diff --git a/openwrt/patch/openwrt-6.x/dwarves/100-btf_encoder-Fix-a-dwarf-type-DW_ATE_unsigned_1024-to-btf-encoding-issue.patch b/openwrt/patch/openwrt-6.x/dwarves/100-btf_encoder-Fix-a-dwarf-type-DW_ATE_unsigned_1024-to-btf-encoding-issue.patch deleted file mode 100644 index 002f10fa3..000000000 --- a/openwrt/patch/openwrt-6.x/dwarves/100-btf_encoder-Fix-a-dwarf-type-DW_ATE_unsigned_1024-to-btf-encoding-issue.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/btf_encoder.c -+++ b/btf_encoder.c -@@ -394,7 +394,7 @@ static int32_t btf_encoder__add_base_typ - * these non-regular int types to avoid libbpf/kernel complaints. - */ - byte_sz = BITS_ROUNDUP_BYTES(bt->bit_size); -- if (!byte_sz || (byte_sz & (byte_sz - 1))) { -+ if (!byte_sz || (byte_sz & (byte_sz - 1)) || byte_sz > 16) { - name = "__SANITIZED_FAKE_INT__"; - byte_sz = 4; - } diff --git a/openwrt/patch/openwrt-6.x/gcc-14/README.md b/openwrt/patch/openwrt-6.x/gcc-14/README.md deleted file mode 100644 index fa77ba492..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-14/README.md +++ /dev/null @@ -1 +0,0 @@ -### Fix build with Gcc 14 \ No newline at end of file diff --git a/openwrt/patch/openwrt-6.x/gcc-14/grub2/900-fix-incompatible-pointer-type.patch b/openwrt/patch/openwrt-6.x/gcc-14/grub2/900-fix-incompatible-pointer-type.patch deleted file mode 100644 index 2588b30ce..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-14/grub2/900-fix-incompatible-pointer-type.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- a/grub-core/disk/luks2.c -+++ b/grub-core/disk/luks2.c -@@ -394,9 +394,9 @@ luks2_verify_key (grub_luks2_digest_t *d - gcry_err_code_t gcry_ret; - - /* Decode both digest and salt */ -- if (!base64_decode (d->digest, grub_strlen (d->digest), (char *)digest, &digestlen)) -+ if (!base64_decode (d->digest, grub_strlen (d->digest), (char *)digest, (size_t *)&digestlen)) - return grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid digest"); -- if (!base64_decode (d->salt, grub_strlen (d->salt), (char *)salt, &saltlen)) -+ if (!base64_decode (d->salt, grub_strlen (d->salt), (char *)salt, (size_t *)&saltlen)) - return grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid digest salt"); - - /* Configure the hash used for the digest. */ -@@ -435,7 +435,7 @@ luks2_decrypt_key (grub_uint8_t *out_key - grub_err_t ret; - - if (!base64_decode (k->kdf.salt, grub_strlen (k->kdf.salt), -- (char *)salt, &saltlen)) -+ (char *)salt, (size_t *)&saltlen)) - { - ret = grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid keyslot salt"); - goto err; diff --git a/openwrt/patch/openwrt-6.x/gcc-14/lrzsz/900-lrzsz-fix-gcc14.patch b/openwrt/patch/openwrt-6.x/gcc-14/lrzsz/900-lrzsz-fix-gcc14.patch deleted file mode 100644 index b8a1646ca..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-14/lrzsz/900-lrzsz-fix-gcc14.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/configure -+++ b/configure -@@ -1026,7 +1026,7 @@ fi - rm -fr conftest* - - echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 --if test $ac_cv_prog_cc_works = no; then -+if test $ac_cv_prog_cc_works = null; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } - fi - echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 diff --git a/openwrt/patch/openwrt-6.x/gcc-14/mbedtls/900-tests-fix-calloc-argument-list-gcc-14-fix.patch b/openwrt/patch/openwrt-6.x/gcc-14/mbedtls/900-tests-fix-calloc-argument-list-gcc-14-fix.patch deleted file mode 100644 index 061e7c477..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-14/mbedtls/900-tests-fix-calloc-argument-list-gcc-14-fix.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- a/tests/include/test/macros.h -+++ b/tests/include/test/macros.h -@@ -135,8 +135,8 @@ - do { \ - TEST_ASSERT((pointer) == NULL); \ - if ((item_count) != 0) { \ -- (pointer) = mbedtls_calloc(sizeof(*(pointer)), \ -- (item_count)); \ -+ (pointer) = mbedtls_calloc((item_count), \ -+ sizeof(*(pointer))); \ - TEST_ASSERT((pointer) != NULL); \ - } \ - } while (0) -@@ -153,8 +153,8 @@ - do { \ - TEST_ASSERT((pointer) == NULL); \ - if ((item_count) != 0) { \ -- (pointer) = mbedtls_calloc(sizeof(*(pointer)), \ -- (item_count)); \ -+ (pointer) = mbedtls_calloc((item_count), \ -+ sizeof(*(pointer))); \ - TEST_ASSUME((pointer) != NULL); \ - } \ - } while (0) diff --git a/openwrt/patch/openwrt-6.x/gcc-14/openvswitch/0008-ovs-atomic-Fix-inclusion-of-Clang-header-by-GCC-14.patch b/openwrt/patch/openwrt-6.x/gcc-14/openvswitch/0008-ovs-atomic-Fix-inclusion-of-Clang-header-by-GCC-14.patch deleted file mode 100644 index e61211a20..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-14/openvswitch/0008-ovs-atomic-Fix-inclusion-of-Clang-header-by-GCC-14.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 1c31a87ef6e16f2bcf6b81f5e1bf369c97db0537 Mon Sep 17 00:00:00 2001 -From: Ilya Maximets -Date: Thu, 18 Jan 2024 15:59:05 +0100 -Subject: [PATCH] ovs-atomic: Fix inclusion of Clang header by GCC 14. - -GCC 14 started to advertise c_atomic extension, older versions didn't -do that. Add check for __clang__, so GCC doesn't include headers -designed for Clang. - -Another option would be to prefer stdatomic implementation instead, -but some older versions of Clang are not able to use stdatomic.h -supplied by GCC as described in commit: - 07ece367fb5f ("ovs-atomic: Prefer Clang intrinsics over .") - -This change fixes OVS build with GCC on Fedora Rawhide (40). - -Reported-by: Jakob Meng -Acked-by: Jakob Meng -Acked-by: Eelco Chaudron -Acked-by: Simon Horman -Signed-off-by: Ilya Maximets ---- - lib/ovs-atomic.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/lib/ovs-atomic.h -+++ b/lib/ovs-atomic.h -@@ -329,7 +329,7 @@ - #if __CHECKER__ - /* sparse doesn't understand some GCC extensions we use. */ - #include "ovs-atomic-pthreads.h" -- #elif __has_extension(c_atomic) -+ #elif __clang__ && __has_extension(c_atomic) - #include "ovs-atomic-clang.h" - #elif HAVE_ATOMIC && __cplusplus >= 201103L - #include "ovs-atomic-c++.h" diff --git a/openwrt/patch/openwrt-6.x/gcc-14/perl/1000-fix-implicit-declaration-error.patch b/openwrt/patch/openwrt-6.x/gcc-14/perl/1000-fix-implicit-declaration-error.patch deleted file mode 100644 index 76de471c8..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-14/perl/1000-fix-implicit-declaration-error.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- a/ext/POSIX/POSIX.xs -+++ b/ext/POSIX/POSIX.xs -@@ -36,11 +36,6 @@ static int not_here(const char *s); - #include - #endif - #include --#ifdef I_FENV --#if !(defined(__vax__) && defined(__NetBSD__)) --#include --#endif --#endif - #include - #include - #include -@@ -51,6 +46,7 @@ static int not_here(const char *s); - #include - #include - #include -+#include - - #ifdef I_UNISTD - #include diff --git a/openwrt/patch/openwrt-6.x/gcc-14/screen/900-fix-implicit-function-declaration.patch b/openwrt/patch/openwrt-6.x/gcc-14/screen/900-fix-implicit-function-declaration.patch deleted file mode 100644 index 16040e3f9..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-14/screen/900-fix-implicit-function-declaration.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/pty.c -+++ b/pty.c -@@ -51,11 +51,7 @@ - # include - #endif - --#ifdef ISC --# include --# include --# include --#endif -+#include - - #ifdef sgi - # include diff --git a/openwrt/patch/openwrt-6.x/gcc-14/wsdd2/100-wsdd2-cast-from-pointer-to-integer-of-different-size.patch b/openwrt/patch/openwrt-6.x/gcc-14/wsdd2/100-wsdd2-cast-from-pointer-to-integer-of-different-size.patch deleted file mode 100644 index 8c1e06178..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-14/wsdd2/100-wsdd2-cast-from-pointer-to-integer-of-different-size.patch +++ /dev/null @@ -1,23 +0,0 @@ -From bf77439f043c5df7102dc266b55e86ec524d17ee Mon Sep 17 00:00:00 2001 -From: sbwml -Date: Wed, 13 Mar 2024 08:33:57 +0800 -Subject: [PATCH] wsdd2: cast from pointer to integer of different size - -* fix build with gcc 14 - -Signed-off-by: sbwml ---- - wsdd2.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/wsdd2.c -+++ b/wsdd2.c -@@ -543,7 +543,7 @@ static int netlink_recv(struct endpoint - char buf[PAGE_SIZE]; - struct sockaddr_nl sa; - struct iovec iov = { buf, sizeof buf }; -- struct msghdr msg = { &sa, sizeof sa, &iov, 1, NULL, 0, 0 }; -+ struct msghdr msg = { &sa, sizeof sa, &iov, 1, (intptr_t)NULL, 0, 0 }; - ssize_t msglen = recvmsg(ep->sock, &msg, 0); - - DEBUG(2, W, "%s: %zd bytes", __func__, msglen); diff --git a/openwrt/patch/openwrt-6.x/gcc-14/xdp-tools/900-Fix-transposed-calloc-arguments.patch b/openwrt/patch/openwrt-6.x/gcc-14/xdp-tools/900-Fix-transposed-calloc-arguments.patch deleted file mode 100644 index 144f3c813..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-14/xdp-tools/900-Fix-transposed-calloc-arguments.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- a/lib/util/xpcapng.c -+++ b/lib/util/xpcapng.c -@@ -226,7 +226,7 @@ static bool pcapng_write_shb(struct xpca - shb_length += sizeof(uint32_t); - - /* Allocate the SHB and fill it. */ -- shb = calloc(shb_length, 1); -+ shb = calloc(1, shb_length); - if (shb == NULL) { - errno = ENOMEM; - return false; -@@ -318,7 +318,7 @@ static bool pcapng_write_idb(struct xpca - idb_length += sizeof(uint32_t); - - /* Allocate the IDB and fill it. */ -- idb = calloc(idb_length, 1); -+ idb = calloc(1, idb_length); - if (idb == NULL) { - errno = ENOMEM; - return false; -@@ -549,7 +549,7 @@ struct xpcapng_dumper *xpcapng_dump_open - goto error_exit; - } - -- pd = calloc(sizeof(*pd), 1); -+ pd = calloc(1, sizeof(*pd)); - if (pd == NULL) { - errno = ENOMEM; - goto error_exit; diff --git a/openwrt/patch/openwrt-6.x/gcc-15/README.md b/openwrt/patch/openwrt-6.x/gcc-15/README.md deleted file mode 100644 index e494d2d39..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-15/README.md +++ /dev/null @@ -1 +0,0 @@ -### Fix build for GCC15 Snapshot diff --git a/openwrt/patch/openwrt-6.x/gcc-15/elfutils/901-backends-fix-string-initialization-error-on-gcc15.patch b/openwrt/patch/openwrt-6.x/gcc-15/elfutils/901-backends-fix-string-initialization-error-on-gcc15.patch deleted file mode 100644 index 8b73aed8a..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-15/elfutils/901-backends-fix-string-initialization-error-on-gcc15.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 40676fd44153c3d153db0fef3075daf665990764 Mon Sep 17 00:00:00 2001 -From: sbwml -Date: Wed, 17 Jul 2024 17:46:42 +0800 -Subject: [PATCH] backends: fix string initialization error on gcc15 - -Signed-off-by: sbwml ---- - backends/i386_regs.c | 2 +- - backends/x86_64_regs.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/backends/i386_regs.c b/backends/i386_regs.c -index 7ec93bb..4bca1b1 100644 ---- a/backends/i386_regs.c -+++ b/backends/i386_regs.c -@@ -83,7 +83,7 @@ i386_register_info (Ebl *ebl __attribute__ ((unused)), - - switch (regno) - { -- static const char baseregs[][2] = -+ static const char baseregs[][3] = - { - "ax", "cx", "dx", "bx", "sp", "bp", "si", "di", "ip" - }; -diff --git a/backends/x86_64_regs.c b/backends/x86_64_regs.c -index ef987da..c92c862 100644 ---- a/backends/x86_64_regs.c -+++ b/backends/x86_64_regs.c -@@ -80,7 +80,7 @@ x86_64_register_info (Ebl *ebl __attribute__ ((unused)), - - switch (regno) - { -- static const char baseregs[][2] = -+ static const char baseregs[][3] = - { - "ax", "dx", "cx", "bx", "si", "di", "bp", "sp" - }; --- -2.43.5 - diff --git a/openwrt/patch/openwrt-6.x/gcc-15/libwebsockets/901-fix-string-initialization-error-on-gcc15.patch b/openwrt/patch/openwrt-6.x/gcc-15/libwebsockets/901-fix-string-initialization-error-on-gcc15.patch deleted file mode 100644 index 088930831..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-15/libwebsockets/901-fix-string-initialization-error-on-gcc15.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/plugins/ssh-base/crypto/chacha.c b/plugins/ssh-base/crypto/chacha.c -index 182280d..cb4c5bf 100644 ---- a/plugins/ssh-base/crypto/chacha.c -+++ b/plugins/ssh-base/crypto/chacha.c -@@ -59,8 +59,8 @@ typedef struct chacha_ctx chacha_ctx; - a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \ - c = PLUS(c,d); b = ROTATE(XOR(b,c), 7); - --static const char sigma[16] = "expand 32-byte k"; --static const char tau[16] = "expand 16-byte k"; -+static const char sigma[18] = "expand 32-byte k"; -+static const char tau[18] = "expand 16-byte k"; - - void - chacha_keysetup(chacha_ctx *x,const u8 *k,u32 kbits) diff --git a/openwrt/patch/openwrt-6.x/gcc-15/libxcrypt/901-fix-string-initialization-error-on-gcc15.patch b/openwrt/patch/openwrt-6.x/gcc-15/libxcrypt/901-fix-string-initialization-error-on-gcc15.patch deleted file mode 100644 index 9724f4703..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-15/libxcrypt/901-fix-string-initialization-error-on-gcc15.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/lib/crypt-port.h b/lib/crypt-port.h -index a707939..928a854 100644 ---- a/lib/crypt-port.h -+++ b/lib/crypt-port.h -@@ -473,7 +473,7 @@ make_failure_token (const char *setting, char *output, int size); - /* The base-64 encoding table used by most hashing methods. - (bcrypt uses a slightly different encoding.) Size 65 - because it's used as a C string in a few places. */ --extern const unsigned char ascii64[65]; -+extern const unsigned char ascii64[68]; - - /* Same table gets used with other names in various places. */ - #define b64t ((const char *) ascii64) -diff --git a/lib/util-base64.c b/lib/util-base64.c -index d55461f..fdd545d 100644 ---- a/lib/util-base64.c -+++ b/lib/util-base64.c -@@ -20,7 +20,7 @@ - - #include "crypt-port.h" - --const unsigned char ascii64[65] = -+const unsigned char ascii64[68] = - "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - /* 0000000000111111111122222222223333333333444444444455555555556666 */ - /* 0123456789012345678901234567890123456789012345678901234567890123 */ diff --git a/openwrt/patch/openwrt-6.x/gcc-15/mbedtls/901-tests-fix-string-initialization-error-on-gcc15.patch b/openwrt/patch/openwrt-6.x/gcc-15/mbedtls/901-tests-fix-string-initialization-error-on-gcc15.patch deleted file mode 100644 index a9baa9757..000000000 --- a/openwrt/patch/openwrt-6.x/gcc-15/mbedtls/901-tests-fix-string-initialization-error-on-gcc15.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 174eb9e201f84530d22c98c21e0c6a9d8d86dfac Mon Sep 17 00:00:00 2001 -From: sbwml -Date: Wed, 17 Jul 2024 17:18:48 +0800 -Subject: [PATCH] tests fix string initialization error on gcc15 - -Increase the size of the unsigned char ciphertext array from 32 to 34 to accommodate the full string and the null terminator, thereby fixing the initializer-string for array error in psa_exercise_key.c. - -Signed-off-by: sbwml ---- - tests/src/psa_exercise_key.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tests/src/psa_exercise_key.c b/tests/src/psa_exercise_key.c -index 7105324..c1751d7 100644 ---- a/tests/src/psa_exercise_key.c -+++ b/tests/src/psa_exercise_key.c -@@ -150,7 +150,7 @@ static int exercise_cipher_key(mbedtls_svc_key_id_t key, - psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; - psa_key_type_t key_type; - const unsigned char plaintext[16] = "Hello, world..."; -- unsigned char ciphertext[32] = "(wabblewebblewibblewobblewubble)"; -+ unsigned char ciphertext[34] = "(wabblewebblewibblewobblewubble)"; - size_t ciphertext_length = sizeof(ciphertext); - unsigned char decrypted[sizeof(ciphertext)]; - size_t part_length; --- -2.43.5 - diff --git a/openwrt/patch/openwrt-6.x/iwinfo/0001-devices-add-MediaTek-MT7922-device-id.patch b/openwrt/patch/openwrt-6.x/iwinfo/0001-devices-add-MediaTek-MT7922-device-id.patch deleted file mode 100644 index 56cfedfef..000000000 --- a/openwrt/patch/openwrt-6.x/iwinfo/0001-devices-add-MediaTek-MT7922-device-id.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0a38971e811573c65ab586aff19a5129b0d74479 Mon Sep 17 00:00:00 2001 -From: Marty Jones -Date: Fri, 18 Nov 2022 14:50:16 -0500 -Subject: [PATCH 46/52] iwinfo: add hardware id for MT7922 devices - -Signed-off-by: Marty Jones ---- - devices.txt | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/devices.txt b/devices.txt -index 82d8421..04b21e7 100644 ---- a/devices.txt -+++ b/devices.txt -@@ -189,6 +189,7 @@ - 0x14c3 0x7650 0x14c3 0x7650 0 0 "MediaTek" "MT7610E" - 0x14c3 0x7662 0x14c3 0x7662 0 0 "MediaTek" "MT76x2E" - 0x14c3 0x7915 0x14c3 0x7915 0 0 "MediaTek" "MT7915E" -+0x14c3 0x7922 0x1A3B 0x5300 0 0 "MediaTek" "MT7922" - 0x14e4 0xaa52 0x14e4 0xaa52 0 0 "Broadcom" "BCM43602" - 0x02d0 0xa9a6 0x0000 0x0000 0 0 "Cypress" "CYW43455" - 0x1ae9 0x0310 0x1ae9 0x0000 0 0 "Wilocity" "Wil6210" --- -2.38.1 - diff --git a/openwrt/patch/openwrt-6.x/iwinfo/0004-add-rtl8812au-devices.patch b/openwrt/patch/openwrt-6.x/iwinfo/0004-add-rtl8812au-devices.patch deleted file mode 100644 index 43feb6412..000000000 --- a/openwrt/patch/openwrt-6.x/iwinfo/0004-add-rtl8812au-devices.patch +++ /dev/null @@ -1,86 +0,0 @@ -diff --git a/devices.txt b/devices.txt -index 82d8421..f4408c2 100644 ---- a/devices.txt -+++ b/devices.txt -@@ -192,6 +192,7 @@ - 0x14e4 0xaa52 0x14e4 0xaa52 0 0 "Broadcom" "BCM43602" - 0x02d0 0xa9a6 0x0000 0x0000 0 0 "Cypress" "CYW43455" - 0x1ae9 0x0310 0x1ae9 0x0000 0 0 "Wilocity" "Wil6210" -+0x02d0 0xa9bf 0x0000 0x0000 0 0 "Broadcom" "BCM43456" - - # USB devices - # 0x0000 | 0x0000 | vendor id | product id | ... -@@ -236,7 +237,72 @@ - # mt7615/usb.c - 0x0000 0x0000 0x0e8d 0x7663 0 0 "MediaTek" "MT7663U" - 0x0000 0x0000 0x043e 0x310c 0 0 "LG" "LGSBWAC02" -- -+# RTL8812A -+0x0000 0x0000 0x0409 0x0408 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x0411 0x025D 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x04BB 0x0952 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x050D 0x1106 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x050D 0x1109 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x0586 0x3426 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x0789 0x016E 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x07B8 0x8812 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x0846 0x9051 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x0B05 0x17D2 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x0DF6 0x0074 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x0E66 0x0022 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x1058 0x0632 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x13B1 0x003F 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x148F 0x9097 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x1740 0x0100 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2001 0x330E 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2001 0x3313 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2001 0x3315 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2001 0x3316 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2019 0xAB30 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x20F4 0x805B 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2357 0x0101 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2357 0x0103 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2357 0x010D 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2357 0x010E 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2357 0x010F 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2357 0x0122 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x2604 0x0012 0 0 "Realtek" "RTL8812" -+0x0000 0x0000 0x7392 0xA822 0 0 "Realtek" "RTL8812" -+# RTL8814A -+0x0000 0x0000 0x0B05 0x1817 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x0B05 0x1852 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x0B05 0x1853 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x056E 0x400B 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x056E 0x400D 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x0846 0x9054 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x0E66 0x0026 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x2001 0x331A 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x20F4 0x809A 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x20F4 0x809B 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x2357 0x0106 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x7392 0xA834 0 0 "Realtek" "RTL8814A" -+0x0000 0x0000 0x7392 0xA833 0 0 "Realtek" "RTL8814A" -+# RTL8821A -+0x0000 0x0000 0x0bda 0x0811 0 0 "Realtek" "RTL8821" /* Alfa AWUS036ACS */ -+0x0000 0x0000 0x0411 0x0242 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x0411 0x029B 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x04BB 0x0953 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x056E 0x4007 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x056E 0x400E 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x056E 0x400F 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x0846 0x9052 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x0E66 0x0023 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x2001 0x3314 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x2001 0x3318 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x2019 0xAB32 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x2357 0x011E 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x2357 0x011F 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x2357 0x0120 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x3823 0x6249 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x7392 0xA811 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x7392 0xA812 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x7392 0xA813 0 0 "Realtek" "RTL8821" -+0x0000 0x0000 0x7392 0xB611 0 0 "Realtek" "RTL8821" - # FDT compatible strings - # "compatible" | txpower offset | frequency offset | ... - "qca,ar9130-wmac" 0 0 "Atheros" "AR9130" diff --git a/openwrt/patch/openwrt-6.x/modules/block.mk b/openwrt/patch/openwrt-6.x/modules/block.mk index 3dbeca9f9..50e4c2483 100644 --- a/openwrt/patch/openwrt-6.x/modules/block.mk +++ b/openwrt/patch/openwrt-6.x/modules/block.mk @@ -380,7 +380,7 @@ $(eval $(call KernelPackage,md-raid10)) define KernelPackage/md-raid456 -$(call KernelPackage/md/Depends,+kmod-lib-raid6 +kmod-lib-xor +kmod-lib-crc32c) +$(call KernelPackage/md/Depends,+kmod-lib-raid6 +kmod-lib-xor) TITLE:=RAID Level 456 Driver KCONFIG:= \ CONFIG_ASYNC_CORE \ diff --git a/openwrt/patch/openwrt-6.x/modules/bluetooth.mk b/openwrt/patch/openwrt-6.x/modules/bluetooth.mk new file mode 100644 index 000000000..21c53ae03 --- /dev/null +++ b/openwrt/patch/openwrt-6.x/modules/bluetooth.mk @@ -0,0 +1,178 @@ +# +# Copyright (C) 2006-2025 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +BLUETOOTH_MENU:=Bluetooth Support + +define KernelPackage/bluetooth + SUBMENU:=$(BLUETOOTH_MENU) + TITLE:=Bluetooth support + DEPENDS:=+kmod-crypto-hash +kmod-crypto-ecb +kmod-lib-crc16 +kmod-hid +kmod-crypto-cmac +kmod-regmap-core +kmod-crypto-ecdh + KCONFIG:= \ + CONFIG_BT \ + CONFIG_BT_BREDR=y \ + CONFIG_BT_DEBUGFS=n \ + CONFIG_BT_LE=y \ + CONFIG_BT_RFCOMM \ + CONFIG_BT_BNEP \ + CONFIG_BT_HIDP + $(call AddDepends/rfkill) + FILES:= \ + $(LINUX_DIR)/net/bluetooth/bluetooth.ko \ + $(LINUX_DIR)/net/bluetooth/rfcomm/rfcomm.ko \ + $(LINUX_DIR)/net/bluetooth/bnep/bnep.ko \ + $(LINUX_DIR)/net/bluetooth/hidp/hidp.ko + AUTOLOAD:=$(call AutoProbe,bluetooth rfcomm bnep hidp) +endef + +define KernelPackage/bluetooth/description + Kernel support for Bluetooth devices +endef + +$(eval $(call KernelPackage,bluetooth)) + + +define KernelPackage/hci-uart + SUBMENU:=$(BLUETOOTH_MENU) + TITLE:=Bluetooth HCI UART support + DEPENDS:=+kmod-bluetooth +kmod-btrtl + KCONFIG:= \ + CONFIG_BT_HCIUART \ + CONFIG_BT_HCIUART_3WIRE=y \ + CONFIG_BT_HCIUART_BCM=n \ + CONFIG_BT_HCIUART_H4=y \ + CONFIG_BT_HCIUART_INTEL=n \ + CONFIG_BT_HCIUART_NOKIA=n \ + CONFIG_BT_HCIUART_RTL=y + FILES:= \ + $(LINUX_DIR)/drivers/bluetooth/hci_uart.ko + AUTOLOAD:=$(call AutoProbe,hci_uart) +endef + +define KernelPackage/hci-uart/description + Kernel support for Bluetooth HCI UART devices +endef + +$(eval $(call KernelPackage,hci-uart)) + + +define KernelPackage/btusb + SUBMENU:=$(BLUETOOTH_MENU) + TITLE:=Bluetooth HCI USB support + DEPENDS:=@USB_SUPPORT +kmod-usb-core +kmod-bluetooth +kmod-btmtk +kmod-btrtl + KCONFIG:= \ + CONFIG_BT_HCIBTUSB \ + CONFIG_BT_HCIBTUSB_BCM=n \ + CONFIG_BT_HCIBTUSB_MTK=y \ + CONFIG_BT_HCIBTUSB_RTL=y + FILES:= \ + $(LINUX_DIR)/drivers/bluetooth/btusb.ko \ + $(LINUX_DIR)/drivers/bluetooth/btintel.ko + AUTOLOAD:=$(call AutoProbe,btusb) +endef + +define KernelPackage/btusb/description + Kernel support for USB Bluetooth HCI USB devices +endef + +$(eval $(call KernelPackage,btusb)) + + +define KernelPackage/btmtk + SUBMENU:=$(BLUETOOTH_MENU) + TITLE:=MTK Bluetooth support + HIDDEN:=1 + DEPENDS:=+kmod-bluetooth +USB_SUPPORT:kmod-usb-core + KCONFIG:=CONFIG_BT_MTK + FILES:=$(LINUX_DIR)/drivers/bluetooth/btmtk.ko +endef + +$(eval $(call KernelPackage,btmtk)) + + +define KernelPackage/btrtl + SUBMENU:=$(BLUETOOTH_MENU) + TITLE:=Realtek Bluetooth support + HIDDEN:=1 + DEPENDS:=+kmod-bluetooth + KCONFIG:=CONFIG_BT_RTL + FILES:=$(LINUX_DIR)/drivers/bluetooth/btrtl.ko +endef + +$(eval $(call KernelPackage,btrtl)) + + +define KernelPackage/ath3k + SUBMENU:=$(BLUETOOTH_MENU) + TITLE:=ATH3K Kernel Module support + DEPENDS:=+kmod-hci-uart +kmod-btusb +ar3k-firmware + KCONFIG:= \ + CONFIG_BT_ATH3K \ + CONFIG_BT_HCIUART_ATH3K=y + FILES:= \ + $(LINUX_DIR)/drivers/bluetooth/ath3k.ko + AUTOLOAD:=$(call AutoProbe,ath3k) +endef + +define KernelPackage/ath3k/description + Kernel support for ATH3K Module +endef + +$(eval $(call KernelPackage,ath3k)) + + +define KernelPackage/bluetooth-6lowpan + SUBMENU:=$(BLUETOOTH_MENU) + TITLE:=Bluetooth 6LoWPAN support + DEPENDS:=+kmod-6lowpan +kmod-bluetooth + KCONFIG:=CONFIG_BT_6LOWPAN + FILES:=$(LINUX_DIR)/net/bluetooth/bluetooth_6lowpan.ko + AUTOLOAD:=$(call AutoProbe,bluetooth_6lowpan) +endef + +define KernelPackage/bluetooth-6lowpan/description + Kernel support for 6LoWPAN over Bluetooth Low Energy devices +endef + +$(eval $(call KernelPackage,bluetooth-6lowpan)) + + +define KernelPackage/btmrvl + SUBMENU:=$(BLUETOOTH_MENU) + TITLE:=Marvell Bluetooth Kernel Module support + DEPENDS:=+kmod-mmc +kmod-bluetooth +mwifiex-sdio-firmware + KCONFIG:= \ + CONFIG_BT_MRVL \ + CONFIG_BT_MRVL_SDIO + FILES:= \ + $(LINUX_DIR)/drivers/bluetooth/btmrvl.ko \ + $(LINUX_DIR)/drivers/bluetooth/btmrvl_sdio.ko + AUTOLOAD:=$(call AutoProbe,btmrvl btmrvl_sdio) +endef + +define KernelPackage/btmrvl/description + Kernel support for Marvell SDIO Bluetooth Module +endef + +$(eval $(call KernelPackage,btmrvl)) + + +define KernelPackage/btsdio + SUBMENU:=$(BLUETOOTH_MENU) + TITLE:=Bluetooth HCI SDIO driver + DEPENDS:=+kmod-bluetooth +kmod-mmc + KCONFIG:= \ + CONFIG_BT_HCIBTSDIO + FILES:= \ + $(LINUX_DIR)/drivers/bluetooth/btsdio.ko + AUTOLOAD:=$(call AutoProbe,btsdio) +endef + +define KernelPackage/btsdio/description + Kernel support for Bluetooth device with SDIO interface +endef + +$(eval $(call KernelPackage,btsdio)) diff --git a/openwrt/patch/openwrt-6.x/modules/can.mk b/openwrt/patch/openwrt-6.x/modules/can.mk index 603976ef5..1a4c81cc3 100644 --- a/openwrt/patch/openwrt-6.x/modules/can.mk +++ b/openwrt/patch/openwrt-6.x/modules/can.mk @@ -120,9 +120,7 @@ $(eval $(call KernelPackage,can-c-can-platform)) define KernelPackage/can-flexcan TITLE:=Support for Freescale FLEXCAN based chips KCONFIG:=CONFIG_CAN_FLEXCAN - FILES:= \ - $(LINUX_DIR)/drivers/net/can/flexcan.ko@lt5.17 \ - $(LINUX_DIR)/drivers/net/can/flexcan/flexcan.ko@ge5.17 + FILES:=$(LINUX_DIR)/drivers/net/can/flexcan/flexcan.ko AUTOLOAD:=$(call AutoProbe,flexcan) $(call AddDepends/can,@TARGET_imx) endef @@ -185,9 +183,7 @@ $(eval $(call KernelPackage,can-raw)) define KernelPackage/can-slcan TITLE:=Serial / USB serial CAN Adaptors (slcan) KCONFIG:=CONFIG_CAN_SLCAN - FILES:= \ - $(LINUX_DIR)/drivers/net/can/slcan.ko@lt6.0 \ - $(LINUX_DIR)/drivers/net/can/slcan/slcan.ko@ge6.0 + FILES:=$(LINUX_DIR)/drivers/net/can/slcan/slcan.ko AUTOLOAD:=$(call AutoProbe,slcan) $(call AddDepends/can) endef @@ -235,12 +231,8 @@ $(eval $(call KernelPackage,can-usb-ems)) define KernelPackage/can-usb-esd TITLE:=ESD USB/2 CAN/USB interface - KCONFIG:= \ - CONFIG_CAN_ESD_USB2@lt6.0 \ - CONFIG_CAN_ESD_USB@ge6.0 - FILES:= \ - $(LINUX_DIR)/drivers/net/can/usb/esd_usb2.ko@lt6.0 \ - $(LINUX_DIR)/drivers/net/can/usb/esd_usb.ko@ge6.0 + KCONFIG:=CONFIG_CAN_ESD_USB + FILES:=$(LINUX_DIR)/drivers/net/can/usb/esd_usb.ko AUTOLOAD:=$(call AutoProbe,esd_usb2 esd_usb) $(call AddDepends/can,+kmod-usb-core) endef @@ -253,6 +245,25 @@ endef $(eval $(call KernelPackage,can-usb-esd)) +define KernelPackage/can-usb-gs + TITLE:=Geschwister Schneider UG interfaces + KCONFIG:=CONFIG_CAN_GS_USB + FILES:= \ + $(LINUX_DIR)/drivers/net/can/usb/gs_usb.ko + AUTOLOAD:=$(call AutoProbe,gs_usb) + $(call AddDepends/can,+kmod-usb-core) +endef + +define KernelPackage/can-usb-gsr/description + This driver supports the Geschwister Schneider and + bytewerk.org candleLight compatible + (https://github.com/candle-usb/candleLight_fw) USB/CAN + interfaces. +endef + +$(eval $(call KernelPackage,can-usb-gs)) + + define KernelPackage/can-usb-kvaser TITLE:=Kvaser CAN/USB interface KCONFIG:=CONFIG_CAN_KVASER_USB diff --git a/openwrt/patch/openwrt-6.x/modules/crypto.mk b/openwrt/patch/openwrt-6.x/modules/crypto.mk index 43330bf06..da5e5eeca 100644 --- a/openwrt/patch/openwrt-6.x/modules/crypto.mk +++ b/openwrt/patch/openwrt-6.x/modules/crypto.mk @@ -39,11 +39,8 @@ define KernelPackage/crypto-aead TITLE:=CryptoAPI AEAD support KCONFIG:= \ CONFIG_CRYPTO_AEAD \ - CONFIG_CRYPTO_AEAD2 \ - CONFIG_CRYPTO_GENIV@lt6.6 - FILES:= \ - $(LINUX_DIR)/crypto/aead.ko \ - $(LINUX_DIR)/crypto/geniv.ko@lt6.6 + CONFIG_CRYPTO_AEAD2 + FILES:=$(LINUX_DIR)/crypto/aead.ko AUTOLOAD:=$(call AutoLoad,09,aead,1) $(call AddDepends/crypto, +kmod-crypto-null) endef @@ -119,7 +116,7 @@ $(eval $(call KernelPackage,crypto-ccm)) define KernelPackage/crypto-chacha20poly1305 TITLE:=ChaCha20-Poly1305 AEAD support, RFC7539 (used by strongSwan IPsec VPN) - DEPENDS:=+kmod-crypto-aead +kmod-crypto-manager + DEPENDS:=+kmod-crypto-aead +kmod-crypto-manager +kmod-crypto-lib-poly1305 KCONFIG:=CONFIG_CRYPTO_CHACHA20POLY1305 FILES:=$(LINUX_DIR)/crypto/chacha20poly1305.ko AUTOLOAD:=$(call AutoLoad,09,chacha20poly1305) @@ -146,8 +143,8 @@ define KernelPackage/crypto-crc32 DEPENDS:=+kmod-crypto-hash KCONFIG:=CONFIG_CRYPTO_CRC32 HIDDEN:=1 - FILES:=$(LINUX_DIR)/crypto/crc32_generic.ko - AUTOLOAD:=$(call AutoLoad,04,crc32_generic,1) + FILES:=$(LINUX_DIR)/crypto/crc32-cryptoapi.ko + AUTOLOAD:=$(call AutoLoad,04,crc32-cryptoapi,1) $(call AddDepends/crypto) endef @@ -158,8 +155,8 @@ define KernelPackage/crypto-crc32c TITLE:=CRC32c CRC module DEPENDS:=+kmod-crypto-hash KCONFIG:=CONFIG_CRYPTO_CRC32C - FILES:=$(LINUX_DIR)/crypto/crc32c_generic.ko - AUTOLOAD:=$(call AutoLoad,04,crc32c_generic,1) + FILES:=$(LINUX_DIR)/crypto/crc32c-cryptoapi.ko + AUTOLOAD:=$(call AutoLoad,04,crc32c-cryptoapi,1) $(call AddDepends/crypto) endef @@ -243,7 +240,7 @@ $(eval $(call KernelPackage,crypto-ecdh)) define KernelPackage/crypto-echainiv TITLE:=Encrypted Chain IV Generator - DEPENDS:=+kmod-crypto-aead +LINUX_6_6:kmod-crypto-geniv + DEPENDS:=+kmod-crypto-aead +kmod-crypto-geniv KCONFIG:=CONFIG_CRYPTO_ECHAINIV FILES:=$(LINUX_DIR)/crypto/echainiv.ko AUTOLOAD:=$(call AutoLoad,09,echainiv) @@ -252,6 +249,16 @@ endef $(eval $(call KernelPackage,crypto-echainiv)) +define KernelPackage/crypto-engine + TITLE:=Crypto engine + HIDDEN:=1 + KCONFIG:=CONFIG_CRYPTO_ENGINE + FILES:=$(LINUX_DIR)/crypto/crypto_engine.ko + AUTOLOAD:=$(call AutoLoad,09,crypto_engine) + $(call AddDepends/crypto, +kmod-crypto-rsa +kmod-crypto-kpp) +endef + +$(eval $(call KernelPackage,crypto-engine)) define KernelPackage/crypto-essiv TITLE:=ESSIV support for block encryption @@ -305,9 +312,7 @@ define KernelPackage/crypto-gf128 KCONFIG:= \ CONFIG_CRYPTO_GF128MUL \ CONFIG_CRYPTO_LIB_GF128MUL - FILES:= \ - $(LINUX_DIR)/crypto/gf128mul.ko@lt6.2 \ - $(LINUX_DIR)/lib/crypto/gf128mul.ko@ge6.2 + FILES:=$(LINUX_DIR)/lib/crypto/gf128mul.ko AUTOLOAD:=$(call AutoLoad,09,gf128mul) $(call AddDepends/crypto) endef @@ -362,6 +367,26 @@ endef $(eval $(call KernelPackage,crypto-hmac)) +define KernelPackage/crypto-hw-atmel + TITLE:=Microchip / Atmel ECC/SHA/RNG hw accelerator + DEPENDS:=+kmod-i2c-core +kmod-crypto-ecdh +kmod-crypto-sha1 \ + +kmod-crypto-sha256 +kmod-lib-crc16 +kmod-random-core + KCONFIG:= \ + CONFIG_CRYPTO_HW=y \ + CONFIG_CRYPTO_DEV_ATMEL_I2C \ + CONFIG_CRYPTO_DEV_ATMEL_ECC \ + CONFIG_CRYPTO_DEV_ATMEL_SHA204A + FILES:= \ + $(LINUX_DIR)/drivers/crypto/atmel-i2c.ko \ + $(LINUX_DIR)/drivers/crypto/atmel-ecc.ko \ + $(LINUX_DIR)/drivers/crypto/atmel-sha204a.ko + AUTOLOAD:=$(call AutoLoad,09,atmel-i2c atmel-ecc atmel-sha204a) + $(call AddDepends/crypto) +endef + +$(eval $(call KernelPackage,crypto-hw-atmel)) + + define KernelPackage/crypto-hw-ccp TITLE:=AMD Cryptographic Coprocessor DEPENDS:= \ @@ -496,7 +521,7 @@ $(eval $(call KernelPackage,crypto-hw-talitos)) define KernelPackage/crypto-hw-eip93 TITLE:=MTK EIP93 crypto module - DEPENDS:=@TARGET_ramips_mt7621 \ + DEPENDS:=@(TARGET_ramips_mt7621||TARGET_airoha) \ +kmod-crypto-authenc \ +kmod-crypto-des \ +kmod-crypto-md5 \ @@ -505,12 +530,9 @@ define KernelPackage/crypto-hw-eip93 KCONFIG:= \ CONFIG_CRYPTO_HW=y \ CONFIG_CRYPTO_DEV_EIP93 \ - CONFIG_CRYPTO_DEV_EIP93_AES=y \ - CONFIG_CRYPTO_DEV_EIP93_DES=y \ - CONFIG_CRYPTO_DEV_EIP93_AEAD=y \ CONFIG_CRYPTO_DEV_EIP93_GENERIC_SW_MAX_LEN=256 \ CONFIG_CRYPTO_DEV_EIP93_AES_128_SW_MAX_LEN=512 - FILES:=$(LINUX_DIR)/drivers/crypto/mtk-eip93/crypto-hw-eip93.ko + FILES:=$(LINUX_DIR)/drivers/crypto/inside-secure/eip93/crypto-hw-eip93.ko AUTOLOAD:=$(call AutoLoad,09,crypto-hw-eip93) $(call AddDepends/crypto) endef @@ -542,10 +564,13 @@ define KernelPackage/crypto-lib-chacha20 $(call AddDepends/crypto) endef +ifeq ($(KERNEL_PATCHVER),6.12) +ifndef CONFIG_TARGET_uml define KernelPackage/crypto-lib-chacha20/x86_64 KCONFIG+=CONFIG_CRYPTO_CHACHA20_X86_64 FILES+=$(LINUX_DIR)/arch/x86/crypto/chacha-x86_64.ko endef +endif # Note that a non-neon fallback implementation is available on arm32 when # NEON is not supported, hence all arm targets can utilize lib-chacha20/arm @@ -575,6 +600,7 @@ ifdef KernelPackage/crypto-lib-chacha20/$(ARCH) KernelPackage/crypto-lib-chacha20/$(CRYPTO_TARGET)=\ $(KernelPackage/crypto-lib-chacha20/$(ARCH)) endif +endif $(eval $(call KernelPackage,crypto-lib-chacha20)) @@ -595,35 +621,10 @@ define KernelPackage/crypto-lib-curve25519 KCONFIG:=CONFIG_CRYPTO_LIB_CURVE25519 HIDDEN:=1 FILES:= \ - $(LINUX_DIR)/lib/crypto/libcurve25519.ko \ - $(LINUX_DIR)/lib/crypto/libcurve25519-generic.ko - $(call AddDepends/crypto,+PACKAGE_kmod-crypto-kpp:kmod-crypto-kpp) -endef - -define KernelPackage/crypto-lib-curve25519/config - imply PACKAGE_kmod-crypto-kpp + $(LINUX_DIR)/lib/crypto/libcurve25519.ko + $(call AddDepends/crypto,+kmod-crypto-kpp) endef -define KernelPackage/crypto-lib-curve25519/x86_64 - KCONFIG+=CONFIG_CRYPTO_CURVE25519_X86 - FILES+=$(LINUX_DIR)/arch/x86/crypto/curve25519-x86_64.ko -endef - -define KernelPackage/crypto-lib-curve25519/arm-neon - KCONFIG+=CONFIG_CRYPTO_CURVE25519_NEON - FILES+=$(LINUX_DIR)/arch/arm/crypto/curve25519-neon.ko -endef - -ifeq ($(ARCH)-$(CONFIG_KERNEL_MODE_NEON),arm-y) - KernelPackage/crypto-lib-curve25519/$(CRYPTO_TARGET)=\ - $(KernelPackage/crypto-lib-curve25519/arm-neon) -endif - -ifdef KernelPackage/crypto-lib-curve25519/$(ARCH) - KernelPackage/crypto-lib-curve25519/$(CRYPTO_TARGET)=\ - $(KernelPackage/crypto-lib-curve25519/$(ARCH)) -endif - $(eval $(call KernelPackage,crypto-lib-curve25519)) @@ -632,44 +633,9 @@ define KernelPackage/crypto-lib-poly1305 KCONFIG:=CONFIG_CRYPTO_LIB_POLY1305 HIDDEN:=1 FILES:=$(LINUX_DIR)/lib/crypto/libpoly1305.ko - $(call AddDepends/crypto,+PACKAGE_kmod-crypto-hash:kmod-crypto-hash) -endef - -define KernelPackage/crypto-lib-poly1305/config - imply PACKAGE_kmod-crypto-hash -endef - -define KernelPackage/crypto-lib-poly1305/x86_64 - KCONFIG+=CONFIG_CRYPTO_POLY1305_X86_64 - FILES+=$(LINUX_DIR)/arch/x86/crypto/poly1305-x86_64.ko -endef - -define KernelPackage/crypto-lib-poly1305/arm - KCONFIG+=CONFIG_CRYPTO_POLY1305_ARM - FILES:=$(LINUX_DIR)/arch/arm/crypto/poly1305-arm.ko -endef - -KernelPackage/crypto-lib-poly1305/armeb=$(KernelPackage/crypto-lib-poly1305/arm) - -define KernelPackage/crypto-lib-poly1305/aarch64 - KCONFIG+=CONFIG_CRYPTO_POLY1305_NEON - FILES:=$(LINUX_DIR)/arch/arm64/crypto/poly1305-neon.ko + $(call AddDepends/crypto,+kmod-crypto-hash) endef -define KernelPackage/crypto-lib-poly1305/mips - KCONFIG+=CONFIG_CRYPTO_POLY1305_MIPS - FILES:=$(LINUX_DIR)/arch/mips/crypto/poly1305-mips.ko -endef - -KernelPackage/crypto-lib-poly1305/mipsel=$(KernelPackage/crypto-lib-poly1305/mips) -KernelPackage/crypto-lib-poly1305/mips64=$(KernelPackage/crypto-lib-poly1305/mips) -KernelPackage/crypto-lib-poly1305/mips64el=$(KernelPackage/crypto-lib-poly1305/mips) - -ifdef KernelPackage/crypto-lib-poly1305/$(ARCH) - KernelPackage/crypto-lib-poly1305/$(CRYPTO_TARGET)=\ - $(KernelPackage/crypto-lib-poly1305/$(ARCH)) -endif - $(eval $(call KernelPackage,crypto-lib-poly1305)) @@ -706,8 +672,9 @@ define KernelPackage/crypto-md5 CONFIG_CRYPTO_MD5 \ CONFIG_CRYPTO_MD5_OCTEON \ CONFIG_CRYPTO_MD5_PPC - FILES:=$(LINUX_DIR)/crypto/md5.ko - AUTOLOAD:=$(call AutoLoad,09,md5) + FILES:=$(LINUX_DIR)/crypto/md5.ko \ + $(LINUX_DIR)/lib/crypto/libmd5.ko + AUTOLOAD:=$(call AutoLoad,09,md5 libmd5) $(call AddDepends/crypto) endef @@ -806,6 +773,7 @@ ifndef CONFIG_TARGET_x86_64 endef endif +ifndef CONFIG_TARGET_uml define KernelPackage/crypto-misc/x86_64 FILES+= \ $(LINUX_DIR)/arch/x86/crypto/camellia-x86_64.ko \ @@ -825,6 +793,7 @@ define KernelPackage/crypto-misc/x86_64 cast6-avx-x86_64 twofish-x86_64 twofish-x86_64-3way \ twofish-avx-x86_64 blowfish-x86_64 serpent-avx-x86_64 serpent-avx2) endef +endif ifdef KernelPackage/crypto-misc/$(ARCH) KernelPackage/crypto-misc/$(CRYPTO_TARGET)=\ @@ -863,8 +832,7 @@ define KernelPackage/crypto-rsa KCONFIG:= CONFIG_CRYPTO_RSA HIDDEN:=1 FILES:= \ - $(LINUX_DIR)/lib/mpi/mpi.ko@lt6.5 \ - $(LINUX_DIR)/lib/crypto/mpi/mpi.ko@ge6.5 \ + $(LINUX_DIR)/lib/crypto/mpi/mpi.ko \ $(LINUX_DIR)/crypto/akcipher.ko \ $(LINUX_DIR)/crypto/rsa_generic.ko AUTOLOAD:=$(call AutoLoad,10,rsa_generic) @@ -888,7 +856,7 @@ $(eval $(call KernelPackage,crypto-rmd160)) define KernelPackage/crypto-rng TITLE:=CryptoAPI random number generation - DEPENDS:=+kmod-crypto-hash +kmod-crypto-hmac +kmod-crypto-sha512 +LINUX_6_6:kmod-crypto-sha3 + DEPENDS:=+kmod-crypto-hash +kmod-crypto-hmac +kmod-crypto-sha512 +kmod-crypto-sha3 KCONFIG:= \ CONFIG_CRYPTO_DRBG \ CONFIG_CRYPTO_DRBG_HMAC=y \ @@ -910,7 +878,7 @@ $(eval $(call KernelPackage,crypto-rng)) define KernelPackage/crypto-geniv TITLE:=CryptoAPI Shared IV generator HIDDEN:=1 - DEPENDS:=+kmod-crypto-rng +kmod-crypto-aead @LINUX_6_6 + DEPENDS:=+kmod-crypto-rng +kmod-crypto-aead KCONFIG:=CONFIG_CRYPTO_GENIV FILES:=$(LINUX_DIR)/crypto/geniv.ko AUTOLOAD:=$(call AutoLoad,09,geniv) @@ -922,7 +890,7 @@ $(eval $(call KernelPackage,crypto-geniv)) define KernelPackage/crypto-seqiv TITLE:=CryptoAPI Sequence Number IV Generator - DEPENDS:=+kmod-crypto-aead +kmod-crypto-rng +LINUX_6_6:kmod-crypto-geniv + DEPENDS:=+kmod-crypto-aead +kmod-crypto-rng +kmod-crypto-geniv KCONFIG:=CONFIG_CRYPTO_SEQIV FILES:=$(LINUX_DIR)/crypto/seqiv.ko AUTOLOAD:=$(call AutoLoad,09,seqiv) @@ -935,70 +903,12 @@ $(eval $(call KernelPackage,crypto-seqiv)) define KernelPackage/crypto-sha1 TITLE:=SHA1 digest CryptoAPI module DEPENDS:=+kmod-crypto-hash - KCONFIG:= \ - CONFIG_CRYPTO_SHA1 \ - CONFIG_CRYPTO_SHA1_ARM \ - CONFIG_CRYPTO_SHA1_ARM_NEON \ - CONFIG_CRYPTO_SHA1_ARM64_CE \ - CONFIG_CRYPTO_SHA1_OCTEON \ - CONFIG_CRYPTO_SHA1_PPC_SPE \ - CONFIG_CRYPTO_SHA1_SSSE3 - FILES:=$(LINUX_DIR)/crypto/sha1_generic.ko - AUTOLOAD:=$(call AutoLoad,09,sha1_generic) + KCONFIG:= CONFIG_CRYPTO_SHA1 + FILES:=$(LINUX_DIR)/crypto/sha1.ko + AUTOLOAD:=$(call AutoLoad,09,sha1) $(call AddDepends/crypto) endef -define KernelPackage/crypto-sha1/arm - FILES+=$(LINUX_DIR)/arch/arm/crypto/sha1-arm.ko - AUTOLOAD+=$(call AutoLoad,09,sha1-arm) -endef - -define KernelPackage/crypto-sha1/arm-neon - $(call KernelPackage/crypto-sha1/arm) - FILES+=$(LINUX_DIR)/arch/arm/crypto/sha1-arm-neon.ko - AUTOLOAD+=$(call AutoLoad,09,sha1-arm-neon) -endef - -define KernelPackage/crypto-sha1/aarch64-ce - FILES+=$(LINUX_DIR)/arch/arm64/crypto/sha1-ce.ko - AUTOLOAD+=$(call AutoLoad,09,sha1-ce) -endef - -KernelPackage/crypto-sha1/imx/cortexa7=$(KernelPackage/crypto-sha1/arm-neon) -KernelPackage/crypto-sha1/imx/cortexa9=$(KernelPackage/crypto-sha1/arm-neon) -KernelPackage/crypto-sha1/ipq40xx=$(KernelPackage/crypto-sha1/arm-neon) -KernelPackage/crypto-sha1/mediatek/filogic=$(KernelPackage/crypto-sha1/aarch64-ce) -KernelPackage/crypto-sha1/mediatek/mt7622=$(KernelPackage/crypto-sha1/aarch64-ce) -KernelPackage/crypto-sha1/mvebu/cortexa9=$(KernelPackage/crypto-sha1/arm-neon) -KernelPackage/crypto-sha1/mvebu/cortexa53=$(KernelPackage/crypto-sha1/aarch64-ce) -KernelPackage/crypto-sha1/mvebu/cortexa72=$(KernelPackage/crypto-sha1/aarch64-ce) -KernelPackage/crypto-sha1/qualcommax=$(KernelPackage/crypto-sha1/aarch64-ce) -KernelPackage/crypto-sha1/rockchip/armv8=$(KernelPackage/crypto-sha1/aarch64-ce) - -define KernelPackage/crypto-sha1/octeon - FILES+=$(LINUX_DIR)/arch/mips/cavium-octeon/crypto/octeon-sha1.ko - AUTOLOAD+=$(call AutoLoad,09,octeon-sha1) -endef - -KernelPackage/crypto-sha1/tegra=$(KernelPackage/crypto-sha1/arm) - -define KernelPackage/crypto-sha1/mpc85xx - FILES+=$(LINUX_DIR)/arch/powerpc/crypto/sha1-ppc-spe.ko - AUTOLOAD+=$(call AutoLoad,09,sha1-ppc-spe) -endef - -ifndef CONFIG_TARGET_uml -define KernelPackage/crypto-sha1/x86_64 - FILES+=$(LINUX_DIR)/arch/x86/crypto/sha1-ssse3.ko - AUTOLOAD+=$(call AutoLoad,09,sha1-ssse3) -endef -endif - -ifdef KernelPackage/crypto-sha1/$(ARCH) - KernelPackage/crypto-sha1/$(CRYPTO_TARGET)=\ - $(KernelPackage/crypto-sha1/$(ARCH)) -endif - $(eval $(call KernelPackage,crypto-sha1)) @@ -1017,111 +927,27 @@ $(eval $(call KernelPackage,crypto-sha3)) define KernelPackage/crypto-sha256 TITLE:=SHA224 SHA256 digest CryptoAPI module DEPENDS:=+kmod-crypto-hash - KCONFIG:= \ - CONFIG_CRYPTO_SHA256 \ - CONFIG_CRYPTO_SHA256_OCTEON \ - CONFIG_CRYPTO_SHA256_PPC_SPE \ - CONFIG_CRYPTO_SHA256_ARM64 \ - CONFIG_CRYPTO_SHA2_ARM64_CE \ - CONFIG_CRYPTO_SHA256_SSSE3 + KCONFIG:=CONFIG_CRYPTO_SHA256 FILES:= \ - $(LINUX_DIR)/crypto/sha256_generic.ko \ + $(LINUX_DIR)/crypto/sha256.ko \ $(LINUX_DIR)/lib/crypto/libsha256.ko - AUTOLOAD:=$(call AutoLoad,09,sha256_generic) + AUTOLOAD:=$(call AutoLoad,09,sha256) $(call AddDepends/crypto) endef -define KernelPackage/crypto-sha256/aarch64 - FILES+=$(LINUX_DIR)/arch/arm64/crypto/sha256-arm64.ko - AUTOLOAD+=$(call AutoLoad,09,sha256-arm64) -endef - -define KernelPackage/crypto-sha256/aarch64-ce - $(call KernelPackage/crypto-sha256/aarch64) - FILES+=$(LINUX_DIR)/arch/arm64/crypto/sha2-ce.ko - AUTOLOAD+=$(call AutoLoad,09,sha2-ce) -endef - -define KernelPackage/crypto-sha256/octeon - FILES+=$(LINUX_DIR)/arch/mips/cavium-octeon/crypto/octeon-sha256.ko - AUTOLOAD+=$(call AutoLoad,09,octeon-sha256) -endef - -define KernelPackage/crypto-sha256/mpc85xx - FILES+=$(LINUX_DIR)/arch/powerpc/crypto/sha256-ppc-spe.ko - AUTOLOAD+=$(call AutoLoad,09,sha256-ppc-spe) -endef - -ifndef CONFIG_TARGET_uml -define KernelPackage/crypto-sha256/x86_64 - FILES+=$(LINUX_DIR)/arch/x86/crypto/sha256-ssse3.ko - AUTOLOAD+=$(call AutoLoad,09,sha256-ssse3) -endef -endif - -KernelPackage/crypto-sha256/mediatek/filogic=$(KernelPackage/crypto-sha256/aarch64-ce) -KernelPackage/crypto-sha256/mediatek/mt7622=$(KernelPackage/crypto-sha256/aarch64-ce) -KernelPackage/crypto-sha256/mvebu/cortexa53=$(KernelPackage/crypto-sha256/aarch64-ce) -KernelPackage/crypto-sha256/mvebu/cortexa72=$(KernelPackage/crypto-sha256/aarch64-ce) -KernelPackage/crypto-sha256/qualcommax=$(KernelPackage/crypto-sha256/aarch64-ce) -KernelPackage/crypto-sha256/rockchip/armv8=$(KernelPackage/crypto-sha256/aarch64-ce) - -ifdef KernelPackage/crypto-sha256/$(ARCH) - KernelPackage/crypto-sha256/$(CRYPTO_TARGET)=\ - $(KernelPackage/crypto-sha256/$(ARCH)) -endif - $(eval $(call KernelPackage,crypto-sha256)) define KernelPackage/crypto-sha512 TITLE:=SHA512 digest CryptoAPI module DEPENDS:=+kmod-crypto-hash - KCONFIG:= \ - CONFIG_CRYPTO_SHA512 \ - CONFIG_CRYPTO_SHA512_ARM \ - CONFIG_CRYPTO_SHA512_ARM64 \ - CONFIG_CRYPTO_SHA512_OCTEON \ - CONFIG_CRYPTO_SHA512_SSSE3 - FILES:=$(LINUX_DIR)/crypto/sha512_generic.ko - AUTOLOAD:=$(call AutoLoad,09,sha512_generic) + KCONFIG:=CONFIG_CRYPTO_SHA512 + FILES:=$(LINUX_DIR)/crypto/sha512.ko \ + $(LINUX_DIR)/lib/crypto/libsha512.ko + AUTOLOAD:=$(call AutoLoad,09,sha512) $(call AddDepends/crypto) endef -define KernelPackage/crypto-sha512/arm - FILES+=$(LINUX_DIR)/arch/arm/crypto/sha512-arm.ko - AUTOLOAD+=$(call AutoLoad,09,sha512-arm) -endef - -define KernelPackage/crypto-sha512/aarch64 - FILES+=$(LINUX_DIR)/arch/arm64/crypto/sha512-arm64.ko - AUTOLOAD+=$(call AutoLoad,09,sha512-arm64) -endef - -KernelPackage/crypto-sha512/imx/cortexa7=$(KernelPackage/crypto-sha512/arm) -KernelPackage/crypto-sha512/imx/cortexa9=$(KernelPackage/crypto-sha512/arm) -KernelPackage/crypto-sha512/ipq40xx=$(KernelPackage/crypto-sha512/arm) -KernelPackage/crypto-sha512/mvebu/cortexa9=$(KernelPackage/crypto-sha512/arm) - -define KernelPackage/crypto-sha512/octeon - FILES+=$(LINUX_DIR)/arch/mips/cavium-octeon/crypto/octeon-sha512.ko - AUTOLOAD+=$(call AutoLoad,09,octeon-sha512) -endef - -KernelPackage/crypto-sha512/tegra=$(KernelPackage/crypto-sha512/arm) - -ifndef CONFIG_TARGET_uml -define KernelPackage/crypto-sha512/x86_64 - FILES+=$(LINUX_DIR)/arch/x86/crypto/sha512-ssse3.ko - AUTOLOAD+=$(call AutoLoad,09,sha512-ssse3) -endef -endif - -ifdef KernelPackage/crypto-sha512/$(ARCH) - KernelPackage/crypto-sha512/$(CRYPTO_TARGET)=\ - $(KernelPackage/crypto-sha512/$(ARCH)) -endif - $(eval $(call KernelPackage,crypto-sha512)) @@ -1137,7 +963,7 @@ $(eval $(call KernelPackage,crypto-test)) define KernelPackage/crypto-user TITLE:=CryptoAPI userspace interface - DEPENDS:=+kmod-crypto-hash +kmod-crypto-manager +LINUX_6_6:kmod-crypto-rng + DEPENDS:=+kmod-crypto-hash +kmod-crypto-manager +kmod-crypto-rng KCONFIG:= \ CONFIG_CRYPTO_USER \ CONFIG_CRYPTO_USER_API \ diff --git a/openwrt/patch/openwrt-6.x/modules/fs.mk b/openwrt/patch/openwrt-6.x/modules/fs.mk index 02fd06eaa..3ed3dd149 100644 --- a/openwrt/patch/openwrt-6.x/modules/fs.mk +++ b/openwrt/patch/openwrt-6.x/modules/fs.mk @@ -10,7 +10,7 @@ FS_MENU:=Filesystems define KernelPackage/fs-9p SUBMENU:=$(FS_MENU) TITLE:=Plan 9 Resource Sharing Support - DEPENDS:=+kmod-9pnet +LINUX_6_6:kmod-fs-netfs + DEPENDS:=+kmod-9pnet +kmod-fs-netfs KCONFIG:=\ CONFIG_9P_FS \ CONFIG_9P_FS_POSIX_ACL=n \ @@ -31,7 +31,7 @@ define KernelPackage/fs-afs SUBMENU:=$(FS_MENU) TITLE:=Andrew FileSystem client DEFAULT:=n - DEPENDS:=+kmod-rxrpc +kmod-dnsresolver +kmod-fs-fscache + DEPENDS:=+kmod-rxrpc +kmod-dnsresolver +kmod-fs-netfs KCONFIG:=\ CONFIG_AFS_FS=m \ CONFIG_AFS_DEBUG=n \ @@ -67,7 +67,7 @@ $(eval $(call KernelPackage,fs-autofs4)) define KernelPackage/fs-btrfs SUBMENU:=$(FS_MENU) TITLE:=BTRFS filesystem support - DEPENDS:=+kmod-lib-crc32c +kmod-lib-lzo +kmod-lib-zlib-inflate +kmod-lib-zlib-deflate +kmod-lib-raid6 +kmod-lib-xor +kmod-lib-zstd +kmod-crypto-blake2b +kmod-crypto-xxhash + DEPENDS:=+kmod-lib-lzo +kmod-lib-zlib-inflate +kmod-lib-zlib-deflate +kmod-lib-raid6 +kmod-lib-xor +kmod-lib-zstd +kmod-crypto-blake2b +kmod-crypto-xxhash KCONFIG:=\ CONFIG_BTRFS_FS \ CONFIG_BTRFS_FS_CHECK_INTEGRITY=n @@ -83,19 +83,31 @@ endef $(eval $(call KernelPackage,fs-btrfs)) +define KernelPackage/fs-cachefiles + SUBMENU:=$(FS_MENU) + TITLE:=Filesystem caching on files + DEPENDS:=kmod-fs-netfs + KCONFIG:=\ + CONFIG_CACHEFILES \ + CONFIG_CACHEFILES_DEBUG=n \ + CONFIG_CACHEFILES_ERROR_INJECTION=n \ + CONFIG_CACHEFILES_ONDEMAND=n + FILES:= $(LINUX_DIR)/fs/cachefiles/cachefiles.ko + AUTOLOAD:=$(call AutoLoad,30,cachefiles) +endef + +$(eval $(call KernelPackage,fs-cachefiles)) + + define KernelPackage/fs-smbfs-common SUBMENU:=$(FS_MENU) TITLE:=SMBFS common dependencies support HIDDEN:=1 - DEPENDS:=+LINUX_6_6:kmod-fs-netfs +LINUX_6_6:kmod-nls-ucs2-utils + DEPENDS:=+kmod-fs-netfs +kmod-nls-ucs2-utils KCONFIG:=\ - CONFIG_SMBFS_COMMON@lt6.1 \ - CONFIG_SMBFS@ge6.1 + CONFIG_SMBFS FILES:= \ - $(LINUX_DIR)/fs/smbfs_common/cifs_arc4.ko@lt6.1 \ - $(LINUX_DIR)/fs/smbfs_common/cifs_md4.ko@lt6.1 \ - $(LINUX_DIR)/fs/smb/common/cifs_arc4.ko@ge6.1 \ - $(LINUX_DIR)/fs/smb/common/cifs_md4.ko@ge6.1 + $(LINUX_DIR)/fs/smb/common/cifs_md4.ko endef define KernelPackage/fs-smbfs-common/description @@ -113,8 +125,7 @@ define KernelPackage/fs-cifs CONFIG_CIFS_DFS_UPCALL=n \ CONFIG_CIFS_UPCALL=n FILES:= \ - $(LINUX_DIR)/fs/cifs/cifs.ko@lt6.1 \ - $(LINUX_DIR)/fs/smb/client/cifs.ko@ge6.1 + $(LINUX_DIR)/fs/smb/client/cifs.ko AUTOLOAD:=$(call AutoLoad,30,cifs) $(call AddDepends/nls) DEPENDS+= \ @@ -263,30 +274,6 @@ endef $(eval $(call KernelPackage,fs-f2fs)) -define KernelPackage/fs-fscache - SUBMENU:=$(FS_MENU) - TITLE:=General filesystem local cache manager - DEPENDS:=+kmod-fs-netfs - KCONFIG:=\ - CONFIG_FSCACHE \ - CONFIG_FSCACHE_STATS=y \ - CONFIG_FSCACHE_HISTOGRAM=n \ - CONFIG_FSCACHE_DEBUG=n \ - CONFIG_FSCACHE_OBJECT_LIST=n \ - CONFIG_CACHEFILES \ - CONFIG_CACHEFILES_DEBUG=n \ - CONFIG_CACHEFILES_HISTOGRAM=n \ - CONFIG_CACHEFILES_ERROR_INJECTION=n@ge5.17 \ - CONFIG_CACHEFILES_ONDEMAND=n@ge5.19 - FILES:= \ - $(LINUX_DIR)/fs/fscache/fscache.ko \ - $(LINUX_DIR)/fs/cachefiles/cachefiles.ko - AUTOLOAD:=$(call AutoLoad,29,fscache cachefiles) -endef - -$(eval $(call KernelPackage,fs-fscache)) - - define KernelPackage/fs-hfs SUBMENU:=$(FS_MENU) TITLE:=HFS filesystem support @@ -344,7 +331,7 @@ define KernelPackage/fs-jfs KCONFIG:=CONFIG_JFS_FS FILES:=$(LINUX_DIR)/fs/jfs/jfs.ko AUTOLOAD:=$(call AutoLoad,30,jfs,1) - DEPENDS:=+LINUX_6_6:kmod-nls-ucs2-utils + DEPENDS:=+kmod-nls-ucs2-utils $(call AddDepends/nls) endef @@ -380,8 +367,7 @@ define KernelPackage/fs-ksmbd CONFIG_SMB_SERVER_CHECK_CAP_NET_ADMIN=n \ CONFIG_SMB_SERVER_KERBEROS5=n FILES:= \ - $(LINUX_DIR)/fs/ksmbd/ksmbd.ko@lt6.1 \ - $(LINUX_DIR)/fs/smb/server/ksmbd.ko@ge6.1 + $(LINUX_DIR)/fs/smb/server/ksmbd.ko AUTOLOAD:=$(call AutoLoad,41,ksmbd) endef @@ -427,7 +413,10 @@ $(eval $(call KernelPackage,fs-msdos)) define KernelPackage/fs-netfs SUBMENU:=$(FS_MENU) TITLE:=Network Filesystems support - KCONFIG:= CONFIG_NETFS_SUPPORT + KCONFIG:= \ + CONFIG_NETFS_SUPPORT \ + CONFIG_FSCACHE=y \ + CONFIG_FSCACHE_STATS=y FILES:=$(LINUX_DIR)/fs/netfs/netfs.ko AUTOLOAD:=$(call AutoLoad,28,netfs) endef @@ -435,6 +424,22 @@ endef $(eval $(call KernelPackage,fs-netfs)) +define KernelPackage/fs-nilfs2 + SUBMENU:=$(FS_MENU) + TITLE:=NILFS2 filesystem support + KCONFIG:=CONFIG_NILFS2_FS + FILES:=$(LINUX_DIR)/fs/nilfs2/nilfs2.ko + AUTOLOAD:=$(call AutoLoad,30,nilfs2) + $(call AddDepends/nls) +endef + +define KernelPackage/fs-nilfs2/description + Kernel module for NILFS2 filesystem support +endef + +$(eval $(call KernelPackage,fs-nilfs2)) + + define KernelPackage/fs-nfs SUBMENU:=$(FS_MENU) TITLE:=NFS filesystem client support @@ -468,6 +473,7 @@ define KernelPackage/fs-nfs-common CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" \ CONFIG_NFS_V4_1_MIGRATION=n \ CONFIG_NFS_V4_2=y \ + CONFIG_NFSD_V4_DELEG_TIMESTAMPS=n \ CONFIG_NFS_V4_2_READ_PLUS=n FILES:= \ $(LINUX_DIR)/fs/lockd/lockd.ko \ @@ -531,7 +537,9 @@ define KernelPackage/fs-nfs-v4 KCONFIG:= \ CONFIG_NFS_V4=y FILES:= \ - $(LINUX_DIR)/fs/nfs/nfsv4.ko + $(LINUX_DIR)/fs/nfs/nfsv4.ko \ + $(LINUX_DIR)/fs/nfs/flexfilelayout/nfs_layout_flexfiles.ko \ + $(LINUX_DIR)/fs/nfs/filelayout/nfs_layout_nfsv41_files.ko AUTOLOAD:=$(call AutoLoad,41,nfsv4) endef @@ -566,23 +574,6 @@ endef $(eval $(call KernelPackage,fs-nfsd)) -define KernelPackage/fs-ntfs - SUBMENU:=$(FS_MENU) - TITLE:=NTFS filesystem read-only (old driver) support - KCONFIG:=CONFIG_NTFS_FS - FILES:=$(LINUX_DIR)/fs/ntfs/ntfs.ko - AUTOLOAD:=$(call AutoLoad,30,ntfs) - $(call AddDepends/nls) -endef - -define KernelPackage/fs-ntfs/description - Kernel module for limited NTFS filesystem support. Support for writing - is extremely limited and disabled as a result. -endef - -$(eval $(call KernelPackage,fs-ntfs)) - - define KernelPackage/fs-ntfs3 SUBMENU:=$(FS_MENU) TITLE:=NTFS3 Read-Write file system support @@ -678,7 +669,7 @@ define KernelPackage/fs-xfs SUBMENU:=$(FS_MENU) TITLE:=XFS filesystem support KCONFIG:=CONFIG_XFS_FS - DEPENDS:= +kmod-fs-exportfs +kmod-lib-crc32c + DEPENDS:= +kmod-fs-exportfs FILES:=$(LINUX_DIR)/fs/xfs/xfs.ko AUTOLOAD:=$(call AutoLoad,30,xfs,1) endef @@ -711,13 +702,10 @@ define KernelPackage/pstore DEFAULT:=m if ALL_KMODS KCONFIG:= \ CONFIG_PSTORE \ - CONFIG_PSTORE_COMPRESS=y \ - CONFIG_PSTORE_COMPRESS_DEFAULT="deflate" \ - CONFIG_PSTORE_DEFLATE_COMPRESS=y \ - CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT=y + CONFIG_PSTORE_COMPRESS=y FILES:= $(LINUX_DIR)/fs/pstore/pstore.ko AUTOLOAD:=$(call AutoLoad,30,pstore,1) - DEPENDS:=+LINUX_6_6:kmod-lib-zlib-deflate +LINUX_6_6:kmod-lib-zlib-inflate + DEPENDS:=+kmod-lib-zlib-deflate +kmod-lib-zlib-inflate endef define KernelPackage/pstore/description diff --git a/openwrt/patch/openwrt-6.x/modules/gpio-cascade.mk b/openwrt/patch/openwrt-6.x/modules/gpio-cascade.mk deleted file mode 100644 index 3a559f19e..000000000 --- a/openwrt/patch/openwrt-6.x/modules/gpio-cascade.mk +++ /dev/null @@ -1,20 +0,0 @@ -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -MENU_TITLE:=GPIO support - -define KernelPackage/gpio-cascade - SUBMENU:=$(MENU_TITLE) - TITLE:=Generic GPIO cascade - KCONFIG:=CONFIG_GPIO_CASCADE - DEPENDS:=@GPIO_SUPPORT +kmod-mux-core - FILES:=$(LINUX_DIR)/drivers/gpio/gpio-cascade.ko - AUTOLOAD:=$(call AutoLoad,29,gpio-cascade,1) -endef - -define KernelPackage/gpio-cascade/description - Kernel module for Generic GPIO cascade -endef - -$(eval $(call KernelPackage,gpio-cascade)) diff --git a/openwrt/patch/openwrt-6.x/modules/gpio.mk b/openwrt/patch/openwrt-6.x/modules/gpio.mk new file mode 100644 index 000000000..11a92192f --- /dev/null +++ b/openwrt/patch/openwrt-6.x/modules/gpio.mk @@ -0,0 +1,156 @@ +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +GPIO_MENU:=GPIO support + +define KernelPackage/gpio-amd-fch + SUBMENU:=$(GPIO_MENU) + DEPENDS:=@GPIO_SUPPORT @TARGET_x86 + TITLE:=GPIO support for AMD Fusion Controller Hub (G-series SOCs) + KCONFIG:=CONFIG_GPIO_AMD_FCH + FILES:=$(LINUX_DIR)/drivers/gpio/gpio-amd-fch.ko + AUTOLOAD:=$(call AutoLoad,25,gpio-amd-fch,1) +endef + +define KernelPackage/gpio-amd-fch/description + This option enables driver for GPIO on AMDs Fusion Controller Hub, + as found on G-series SOCs (eg. GX-412TC) +endef + +$(eval $(call KernelPackage,gpio-amd-fch)) + + +define KernelPackage/gpio-beeper + SUBMENU:=$(GPIO_MENU) + TITLE:=GPIO beeper support + DEPENDS:=+kmod-input-core + KCONFIG:= \ + CONFIG_INPUT_MISC=y \ + CONFIG_INPUT_GPIO_BEEPER + FILES:= \ + $(LINUX_DIR)/drivers/input/misc/gpio-beeper.ko + AUTOLOAD:=$(call AutoLoad,50,gpio-beeper) +endef + +define KernelPackage/gpio-beeper/description + This enables playing beeps through an GPIO-connected buzzer +endef + +$(eval $(call KernelPackage,gpio-beeper)) + + +define KernelPackage/gpio-cascade + SUBMENU:=$(GPIO_MENU) + TITLE:=Generic GPIO cascade + KCONFIG:=CONFIG_GPIO_CASCADE + DEPENDS:=@GPIO_SUPPORT +kmod-mux-core + FILES:=$(LINUX_DIR)/drivers/gpio/gpio-cascade.ko + AUTOLOAD:=$(call AutoLoad,29,gpio-cascade,1) +endef + +define KernelPackage/gpio-cascade/description + Kernel module for Generic GPIO cascade +endef + +$(eval $(call KernelPackage,gpio-cascade)) + + +define KernelPackage/gpio-f7188x + SUBMENU:=$(GPIO_MENU) + TITLE:=Fintek F718xx/F818xx GPIO Support + DEPENDS:=@GPIO_SUPPORT @TARGET_x86 + KCONFIG:=CONFIG_GPIO_F7188X + FILES:=$(LINUX_DIR)/drivers/gpio/gpio-f7188x.ko + AUTOLOAD:=$(call AutoProbe,gpio-f7188x) +endef + +define KernelPackage/gpio-f7188x/description + Kernel module for the GPIOs found on many Fintek Super-IO chips. +endef + +$(eval $(call KernelPackage,gpio-f7188x)) + + +define KernelPackage/gpio-it87 + SUBMENU:=$(GPIO_MENU) + DEPENDS:=@GPIO_SUPPORT @TARGET_x86 + TITLE:=GPIO support for IT87xx Super I/O chips + KCONFIG:=CONFIG_GPIO_IT87 + FILES:=$(LINUX_DIR)/drivers/gpio/gpio-it87.ko + AUTOLOAD:=$(call AutoLoad,25,gpio-it87,1) +endef + +define KernelPackage/gpio-it87/description + This driver is tested with ITE IT8728 and IT8732 Super I/O chips, and + supports the IT8761E, IT8613, IT8620E, and IT8628E Super I/O chips as + well. +endef + +$(eval $(call KernelPackage,gpio-it87)) + + +define KernelPackage/gpio-nxp-74hc164 + SUBMENU:=$(GPIO_MENU) + TITLE:=NXP 74HC164 GPIO expander support + KCONFIG:=CONFIG_GPIO_74X164 + FILES:=$(LINUX_DIR)/drivers/gpio/gpio-74x164.ko + AUTOLOAD:=$(call AutoProbe,gpio-74x164) +endef + +define KernelPackage/gpio-nxp-74hc164/description + Kernel module for NXP 74HC164 GPIO expander +endef + +$(eval $(call KernelPackage,gpio-nxp-74hc164)) + + +define KernelPackage/gpio-pca953x + SUBMENU:=$(GPIO_MENU) + DEPENDS:=@GPIO_SUPPORT +kmod-i2c-core +kmod-regmap-i2c + TITLE:=PCA95xx, TCA64xx, and MAX7310 I/O ports + KCONFIG:=CONFIG_GPIO_PCA953X \ + CONFIG_GPIO_PCA953X_IRQ=y + FILES:=$(LINUX_DIR)/drivers/gpio/gpio-pca953x.ko + AUTOLOAD:=$(call AutoLoad,55,gpio-pca953x) +endef + +define KernelPackage/gpio-pca953x/description + Kernel module for MAX731{0,2,3,5}, PCA6107, PCA953{4-9}, PCA955{4-7}, + PCA957{4,5} and TCA64{08,16} I2C GPIO expanders +endef + +$(eval $(call KernelPackage,gpio-pca953x)) + + +define KernelPackage/gpio-pcf857x + SUBMENU:=$(GPIO_MENU) + DEPENDS:=@GPIO_SUPPORT +kmod-i2c-core + TITLE:=PCX857x, PCA967x and MAX732X I2C GPIO expanders + KCONFIG:=CONFIG_GPIO_PCF857X + FILES:=$(LINUX_DIR)/drivers/gpio/gpio-pcf857x.ko + AUTOLOAD:=$(call AutoLoad,55,gpio-pcf857x) +endef + +define KernelPackage/gpio-pcf857x/description + Kernel module for PCF857x, PCA{85,96}7x, and MAX732[89] I2C GPIO expanders +endef + +$(eval $(call KernelPackage,gpio-pcf857x)) + + +define KernelPackage/gpio-pwm + SUBMENU:=$(GPIO_MENU) + DEPENDS:=@GPIO_SUPPORT @PWM_SUPPORT + TITLE:=PWM GPIO support + KCONFIG:=CONFIG_PWM_GPIO + FILES:=$(LINUX_DIR)/drivers/pwm/pwm-gpio.ko + AUTOLOAD:=$(call AutoProbe,pwm-gpio) +endef + +define KernelPackage/gpio-pwm/description + Generic PWM framework driver for software PWM toggling a GPIO pin from + kernel high-resolution timers. +endef + +$(eval $(call KernelPackage,gpio-pwm)) diff --git a/openwrt/patch/openwrt-6.x/modules/hwmon.mk b/openwrt/patch/openwrt-6.x/modules/hwmon.mk index 6fdbf5d94..a0b425275 100644 --- a/openwrt/patch/openwrt-6.x/modules/hwmon.mk +++ b/openwrt/patch/openwrt-6.x/modules/hwmon.mk @@ -9,6 +9,7 @@ HWMON_MENU:=Hardware Monitoring Support define KernelPackage/hwmon-core SUBMENU:=$(HWMON_MENU) + DEPENDS:=+kmod-i2c-core TITLE:=Hardware monitoring support KCONFIG:= \ CONFIG_HWMON \ @@ -34,7 +35,7 @@ define KernelPackage/hwmon-ad7418 KCONFIG:=CONFIG_SENSORS_AD7418 FILES:=$(LINUX_DIR)/drivers/hwmon/ad7418.ko AUTOLOAD:=$(call AutoLoad,60,ad7418 ad7418) - $(call AddDepends/hwmon,+kmod-i2c-core +LINUX_6_6:kmod-regmap-core) + $(call AddDepends/hwmon,+kmod-i2c-core +kmod-regmap-core) endef define KernelPackage/hwmon-ad7418/description @@ -52,7 +53,7 @@ define KernelPackage/hwmon-adt7410 $(LINUX_DIR)/drivers/hwmon/adt7x10.ko \ $(LINUX_DIR)/drivers/hwmon/adt7410.ko AUTOLOAD:=$(call AutoLoad,60,adt7x10 adt7410) - $(call AddDepends/hwmon,+kmod-i2c-core +!LINUX_5_15:kmod-regmap-core) + $(call AddDepends/hwmon,+kmod-i2c-core +kmod-regmap-core) endef define KernelPackage/hwmon-adt7410/description @@ -62,6 +63,21 @@ endef $(eval $(call KernelPackage,hwmon-adt7410)) +define KernelPackage/hwmon-adt7470 + TITLE:=ADT7470 monitoring support + KCONFIG:=CONFIG_SENSORS_ADT7470 + FILES:=$(LINUX_DIR)/drivers/hwmon/adt7470.ko + AUTOLOAD:=$(call AutoProbe,adt7470) + $(call AddDepends/hwmon,+kmod-i2c-core +kmod-regmap-i2c) +endef + +define KernelPackage/hwmon-adt7470/description + Kernel module for ADT7470 thermal monitor chip +endef + +$(eval $(call KernelPackage,hwmon-adt7470)) + + define KernelPackage/hwmon-adt7475 TITLE:=ADT7473/7475/7476/7490 monitoring support KCONFIG:=CONFIG_SENSORS_ADT7475 @@ -130,7 +146,7 @@ define KernelPackage/hwmon-emc2305 KCONFIG:=CONFIG_SENSORS_EMC2305 FILES:=$(LINUX_DIR)/drivers/hwmon/emc2305.ko AUTOLOAD:=$(call AutoProbe,emc2305) - $(call AddDepends/hwmon,+kmod-i2c-core +PACKAGE_kmod-thermal:kmod-thermal +kmod-regmap-i2c @LINUX_6_1||LINUX_6_6) + $(call AddDepends/hwmon,+kmod-i2c-core +PACKAGE_kmod-thermal:kmod-thermal +kmod-regmap-i2c) endef define KernelPackage/hwmon-emc2305/description @@ -361,7 +377,7 @@ define KernelPackage/hwmon-lm92 KCONFIG:=CONFIG_SENSORS_LM92 FILES:=$(LINUX_DIR)/drivers/hwmon/lm92.ko AUTOLOAD:=$(call AutoProbe,lm92) - $(call AddDepends/hwmon,+kmod-i2c-core) + $(call AddDepends/hwmon,+kmod-i2c-core +kmod-regmap-core) endef define KernelPackage/hwmon-lm92/description @@ -401,27 +417,12 @@ endef $(eval $(call KernelPackage,hwmon-ltc4151)) -define KernelPackage/hwmon-max6642 - TITLE:=MAX6642 monitoring support - KCONFIG:=CONFIG_SENSORS_MAX6642 - FILES:=$(LINUX_DIR)/drivers/hwmon/max6642.ko - AUTOLOAD:=$(call AutoLoad,60,max6642 max6642) - $(call AddDepends/hwmon,+kmod-i2c-core) -endef - -define KernelPackage/hwmon-max6642/description - Kernel module for Maxim MAX6642 temperature monitor -endef - -$(eval $(call KernelPackage,hwmon-max6642)) - - define KernelPackage/hwmon-max6697 TITLE:=MAX6697 monitoring support KCONFIG:=CONFIG_SENSORS_MAX6697 FILES:=$(LINUX_DIR)/drivers/hwmon/max6697.ko AUTOLOAD:=$(call AutoProbe,max6697) - $(call AddDepends/hwmon,+kmod-i2c-core) + $(call AddDepends/hwmon,+kmod-i2c-core +kmod-regmap-i2c) endef define KernelPackage/hwmon-max6697/description @@ -507,6 +508,25 @@ endef $(eval $(call KernelPackage,pmbus-core)) +define KernelPackage/pmbus-sensors + TITLE:=Generic PMBus devices monitoring support + KCONFIG:=CONFIG_SENSORS_PMBUS + FILES:=$(LINUX_DIR)/drivers/hwmon/pmbus/pmbus.ko + AUTOLOAD:=$(call AutoProbe,pmbus) + $(call AddDepends/hwmon,+kmod-pmbus-core) +endef + +define KernelPackage/pmbus-sensors/description + Kernel modules for generic PMBus devices, +including but not limited to ADP4000, BMR310, BMR453, +BMR454, BMR456, BMR457, BMR458, BMR480, BMR490, BMR491, BMR492, +MAX20796, MDT040, NCP4200, NCP4208, PDT003, PDT006, PDT012, +TPS40400, TPS544B20, TPS544B25, TPS544C20, TPS544C25, and UDT020. +endef + +$(eval $(call KernelPackage,pmbus-sensors)) + + define KernelPackage/pmbus-zl6100 TITLE:=Intersil / Zilker Labs ZL6100 hardware monitoring KCONFIG:=CONFIG_SENSORS_ZL6100 @@ -547,7 +567,7 @@ define KernelPackage/hwmon-sch5627 $(LINUX_DIR)/drivers/hwmon/sch5627.ko \ $(LINUX_DIR)/drivers/hwmon/sch56xx-common.ko AUTOLOAD:=$(call AutoProbe,sch5627) - $(call AddDepends/hwmon,+kmod-i2c-core) + $(call AddDepends/hwmon,+kmod-i2c-core +kmod-regmap-core) endef define KernelPackage/hwmon-sch5627/description @@ -745,3 +765,12 @@ endef $(eval $(call KernelPackage,hwmon-adcxx)) +define KernelPackage/polynomial + TITLE:=polynomial support + KCONFIG:=CONFIG_POLYNOMIAL + HIDDEN:=1 + FILES:=$(LINUX_DIR)/lib/polynomial.ko + AUTOLOAD:=$(call AutoProbe, polynomial) +endef + +$(eval $(call KernelPackage,polynomial)) diff --git a/openwrt/patch/openwrt-6.x/modules/i2c.mk b/openwrt/patch/openwrt-6.x/modules/i2c.mk index 3aaf560ea..e9e4e3965 100644 --- a/openwrt/patch/openwrt-6.x/modules/i2c.mk +++ b/openwrt/patch/openwrt-6.x/modules/i2c.mk @@ -116,17 +116,35 @@ I2C_DWPCI_MODULES:= \ define KernelPackage/i2c-designware-pci $(call i2c_defaults,$(I2C_DWPCI_MODULES),59) - TITLE:=Synopsys DesignWare PCI + TITLE:=Synopsys DesignWare I2C PCI DEPENDS:=@PCI_SUPPORT +kmod-i2c-designware-core +kmod-i2c-ccgs-ucsi endef define KernelPackage/i2c-designware-pci/description - Support for Synopsys DesignWare I2C controller. Only master mode is supported. + Support for Synopsys DesignWare I2C PCI controller. Only master mode is + supported. endef $(eval $(call KernelPackage,i2c-designware-pci)) +I2C_DWPLAT_MODULES:= \ + CONFIG_I2C_DESIGNWARE_PLATFORM:drivers/i2c/busses/i2c-designware-platform + +define KernelPackage/i2c-designware-platform + $(call i2c_defaults,$(I2C_DWPLAT_MODULES),59) + TITLE:=Synopsys DesignWare I2C Platform + DEPENDS:=+kmod-i2c-designware-core +endef + +define KernelPackage/i2c-designware-platform/description + Support for Synopsys DesignWare I2C Platform controller. Only master mode + is supported. +endef + +$(eval $(call KernelPackage,i2c-designware-platform)) + + I2C_GPIO_MODULES:= \ CONFIG_I2C_GPIO:drivers/i2c/busses/i2c-gpio @@ -144,13 +162,47 @@ endef $(eval $(call KernelPackage,i2c-gpio)) +I2C_HID_MODULES:= \ + CONFIG_I2C_HID_CORE:drivers/hid/i2c-hid/i2c-hid + +define KernelPackage/i2c-hid + $(call i2c_defaults,$(I2C_HID_MODULES),60) + TITLE:=I2C HID support + KCONFIG+= CONFIG_I2C_HID + DEPENDS:=+kmod-drm +kmod-hid + HIDDEN:=1 +endef + +$(eval $(call KernelPackage,i2c-hid)) + + +I2C_HID_ACPI_MODULES:= \ + CONFIG_I2C_HID_ACPI:drivers/hid/i2c-hid/i2c-hid-acpi + +define KernelPackage/i2c-hid-acpi + $(call i2c_defaults,$(I2C_HID_ACPI_MODULES),61) + TITLE:=HID over I2C transport layer ACPI driver + DEPENDS:=@TARGET_armsr_armv8||TARGET_loongarch64||TARGET_x86 +kmod-i2c-hid +endef + +define KernelPackage/i2c-hid-acpi/description + Support for keyboard, touchpad, touchscreen, or any + other HID based devices which is connected to your computer via I2C. + This driver supports ACPI-based systems. +endef + +$(eval $(call KernelPackage,i2c-hid-acpi)) + + I2C_I801_MODULES:= \ CONFIG_I2C_I801:drivers/i2c/busses/i2c-i801 define KernelPackage/i2c-i801 $(call i2c_defaults,$(I2C_I801_MODULES),59) TITLE:=Intel I801 and compatible I2C interfaces - DEPENDS:=@PCI_SUPPORT @TARGET_x86 +kmod-i2c-core +kmod-i2c-smbus + DEPENDS:= \ + @PCI_SUPPORT @TARGET_x86 +kmod-i2c-core +kmod-i2c-smbus \ + PACKAGE_kmod-i2c-mux-gpio:kmod-i2c-mux-gpio endef define KernelPackage/i2c-i801/description @@ -236,6 +288,22 @@ endef $(eval $(call KernelPackage,i2c-mux-mlxcpld)) +I2C_MUX_PINCTRL_MODULES:= \ + CONFIG_I2C_MUX_PINCTRL:drivers/i2c/muxes/i2c-mux-pinctrl + +define KernelPackage/i2c-mux-pinctrl + $(call i2c_defaults,$(I2C_MUX_PINCTRL_MODULES),51) + TITLE:=Pinctrl-based I2C mux/switches + DEPENDS:=@PINCTRL_SUPPORT @USES_DEVICETREE +kmod-i2c-mux +endef + +define KernelPackage/i2c-mux-pinctrl/description + Kernel modules for Pinctrl-based I2C bus mux/switching devices +endef + +$(eval $(call KernelPackage,i2c-mux-pinctrl)) + + I2C_MUX_REG_MODULES:= \ CONFIG_I2C_MUX_REG:drivers/i2c/muxes/i2c-mux-reg @@ -289,7 +357,7 @@ I2C_PIIX4_MODULES:= \ define KernelPackage/i2c-piix4 $(call i2c_defaults,$(I2C_PIIX4_MODULES),59) TITLE:=Intel PIIX4 and compatible I2C interfaces - DEPENDS:=@PCI_SUPPORT @TARGET_x86 +kmod-i2c-core + DEPENDS:=@PCI_SUPPORT @TARGET_x86 +kmod-i2c-core +kmod-i2c-smbus endef define KernelPackage/i2c-piix4/description diff --git a/openwrt/patch/openwrt-6.x/modules/iio.mk b/openwrt/patch/openwrt-6.x/modules/iio.mk index 7cf0952db..0bdcf5a8c 100644 --- a/openwrt/patch/openwrt-6.x/modules/iio.mk +++ b/openwrt/patch/openwrt-6.x/modules/iio.mk @@ -9,6 +9,7 @@ IIO_MENU:=Industrial I/O Modules define KernelPackage/iio-core SUBMENU:=$(IIO_MENU) TITLE:=Industrial IO core + DEPENDS:=+kmod-dma-buf KCONFIG:= \ CONFIG_IIO \ CONFIG_IIO_BUFFER=y \ @@ -46,6 +47,58 @@ endef $(eval $(call KernelPackage,iio-kfifo-buf)) +define KernelPackage/industrialio-backend + TITLE:=IIO Backend support + HIDDEN:=1 + KCONFIG=CONFIG_IIO_BACKEND + FILES:=$(LINUX_DIR)/drivers/iio/industrialio-backend.ko + AUTOLOAD:=$(call AutoProbe,industrialio-backend) + $(call AddDepends/iio) +endef + +define KernelPackage/industrialio-backend/description + Framework to handle complex IIO aggregate devices. The typical + architecture that can make use of this framework is to have one + device as the frontend device which can be "linked" against one or + multiple backend devices. The framework then makes it easy to get + and control such backend devices. +endef + +$(eval $(call KernelPackage,industrialio-backend)) + + +define KernelPackage/industrialio-hw-consumer + TITLE:=Provides a bonding way to an other device in hardware + KCONFIG:=CONFIG_IIO_BUFFER_HW_CONSUMER + FILES:=$(LINUX_DIR)/drivers/iio/buffer/industrialio-hw-consumer.ko + AUTOLOAD:=$(call AutoLoad,55,industrialio-hw-consumer) + $(call AddDepends/iio,+kmod-iio-kfifo-buf) +endef + +define KernelPackage/industrialio-hw-consumer/description + Provides a way to bonding when an IIO device has a direct connection + to another device in hardware. In this case buffers for data transfers + are handled by hardware. +endef + +$(eval $(call KernelPackage,industrialio-hw-consumer)) + + +define KernelPackage/industrialio-buffer-cb + TITLE:=Provides callback buffer used for push in-kernel interfaces + KCONFIG:=CONFIG_IIO_BUFFER_CB + FILES:=$(LINUX_DIR)/drivers/iio/buffer/industrialio-buffer-cb.ko + AUTOLOAD:=$(call AutoLoad,55,industrialio-triggered-buffer-cb) + $(call AddDepends/iio) +endef + +define KernelPackage/industrialio-buffer-cb/description + Should be selected by any drivers that do in-kernel push usage. +endef + +$(eval $(call KernelPackage,industrialio-buffer-cb)) + + define KernelPackage/industrialio-triggered-buffer TITLE:=Provides helper functions for setting up triggered buffers. DEPENDS:=+kmod-iio-kfifo-buf @@ -96,6 +149,20 @@ endef $(eval $(call KernelPackage,iio-ads1015)) +define KernelPackage/iio-mcp3422 + TITLE:=Microchip MCP342x ADC driver + KCONFIG:=CONFIG_MCP3422 + FILES:=$(LINUX_DIR)/drivers/iio/adc/mcp3422.ko + AUTOLOAD:=$(call AutoProbe,mcp3422) + $(call AddDepends/iio, +kmod-i2c-core) +endef + +define KernelPackage/iio-mcp3422/description + Kernel module for the Microchip MCP342x I2C ADCs. +endef + +$(eval $(call KernelPackage,iio-mcp3422)) + define KernelPackage/iio-hmc5843 DEPENDS:=+kmod-i2c-core +kmod-regmap-i2c +kmod-industrialio-triggered-buffer TITLE:=Honeywell HMC58x3 Magnetometer @@ -176,7 +243,7 @@ $(eval $(call KernelPackage,iio-dht11)) define KernelPackage/iio-bme680 TITLE:=BME680 gas/humidity/pressure/temperature sensor - DEPENDS:=+kmod-regmap-core + DEPENDS:=+kmod-regmap-core +kmod-industrialio-triggered-buffer KCONFIG:=CONFIG_BME680 FILES:=$(LINUX_DIR)/drivers/iio/chemical/bme680_core.ko $(call AddDepends/iio) @@ -220,7 +287,7 @@ $(eval $(call KernelPackage,iio-bme680-spi)) define KernelPackage/iio-bmp280 TITLE:=BMP180/BMP280/BME280 pressure/temperatur sensor - DEPENDS:=+kmod-regmap-core + DEPENDS:=+kmod-regmap-core +kmod-industrialio-triggered-buffer KCONFIG:=CONFIG_BMP280 FILES:=$(LINUX_DIR)/drivers/iio/pressure/bmp280.ko $(call AddDepends/iio) @@ -266,6 +333,23 @@ endef $(eval $(call KernelPackage,iio-bmp280-spi)) + +define KernelPackage/iio-dps310 + TITLE:=DPS310/DPS368/DPS422 pressure temperatur sensor + DEPENDS:=+kmod-regmap-i2c + KCONFIG:=CONFIG_DPS310 + FILES:=$(LINUX_DIR)/drivers/iio/pressure/dps310.ko + AUTOLOAD:=$(call AutoProbe,dps310) + $(call AddDepends/iio) +endef +define KernelPackage/iio-dps310/description + Kernel module for Infineon DPS310/DPS368/DPS422 pressure and + temperature I2C sensor. +endef + +$(eval $(call KernelPackage,iio-dps310)) + + define KernelPackage/iio-htu21 DEPENDS:=+kmod-i2c-core TITLE:=HTU21 humidity & temperature sensor @@ -383,7 +467,7 @@ $(eval $(call KernelPackage,iio-st_accel-spi)) define KernelPackage/iio-lsm6dsx - DEPENDS:=+kmod-iio-kfifo-buf +kmod-regmap-core +LINUX_6_6:kmod-industrialio-triggered-buffer + DEPENDS:=+kmod-iio-kfifo-buf +kmod-regmap-core +kmod-industrialio-triggered-buffer TITLE:=ST LSM6DSx driver for IMU MEMS sensors KCONFIG:=CONFIG_IIO_ST_LSM6DSX FILES:=$(LINUX_DIR)/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.ko @@ -401,7 +485,8 @@ $(eval $(call KernelPackage,iio-lsm6dsx)) define KernelPackage/iio-lsm6dsx-i2c DEPENDS:=+kmod-iio-lsm6dsx +kmod-i2c-core +kmod-regmap-i2c TITLE:=ST LSM6DSx driver for IMU MEMS sensors (I2C) - KCONFIG:=CONFIG_IIO_ST_LSM6DSX + KCONFIG:=CONFIG_IIO_ST_LSM6DSX \ + CONFIG_IIO_ST_LSM6DSX_I2C FILES:=$(LINUX_DIR)/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.ko AUTOLOAD:=$(call AutoProbe,st_lsm6dsx-i2c) $(call AddDepends/iio) @@ -417,7 +502,8 @@ $(eval $(call KernelPackage,iio-lsm6dsx-i2c)) define KernelPackage/iio-lsm6dsx-spi DEPENDS:=+kmod-iio-lsm6dsx +kmod-regmap-spi TITLE:=ST LSM6DSx driver for IMU MEMS sensors (SPI) - KCONFIG:=CONFIG_IIO_ST_LSM6DSX + KCONFIG:=CONFIG_IIO_ST_LSM6DSX \ + CONFIG_IIO_ST_LSM6DSX_SPI FILES:=$(LINUX_DIR)/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_spi.ko AUTOLOAD:=$(call AutoProbe,st_lsm6dsx-spi) $(call AddDepends/iio) diff --git a/openwrt/patch/openwrt-6.x/modules/input.mk b/openwrt/patch/openwrt-6.x/modules/input.mk index 89fba2900..3b3df6962 100644 --- a/openwrt/patch/openwrt-6.x/modules/input.mk +++ b/openwrt/patch/openwrt-6.x/modules/input.mk @@ -37,6 +37,41 @@ endef $(eval $(call KernelPackage,hid-generic)) + +define KernelPackage/hid-alps + SUBMENU:=$(INPUT_MODULES_MENU) + TITLE:=Alps HID device support + DEPENDS:=+kmod-hid + KCONFIG:=CONFIG_HID_ALPS + FILES:=$(LINUX_DIR)/drivers/hid/hid-alps.ko + AUTOLOAD:=$(call AutoProbe,hid-alps) +endef + +define KernelPackage/hid-alps/description + Support for Alps I2C HID touchpads and StickPointer. +endef + +$(eval $(call KernelPackage,hid-alps)) + + +define KernelPackage/input-adc-keys + SUBMENU:=$(INPUT_MODULES_MENU) + TITLE:=ADC Ladder Buttons support + DEPENDS:=+kmod-input-core +kmod-iio-core + KCONFIG:= \ + CONFIG_KEYBOARD_ADC \ + CONFIG_INPUT_KEYBOARD=y + FILES:=$(LINUX_DIR)/drivers/input/keyboard/adc-keys.ko + AUTOLOAD:=$(call AutoProbe,adc-keys,1) +endef + +define KernelPackage/input-adc-keys/description + Buttons/keys input driver for resistor ladder connected on ADC +endef + +$(eval $(call KernelPackage,input-adc-keys)) + + define KernelPackage/input-core SUBMENU:=$(INPUT_MODULES_MENU) TITLE:=Input device core @@ -126,6 +161,23 @@ endef $(eval $(call KernelPackage,input-gpio-encoder)) +define KernelPackage/input-matrix-keypad + SUBMENU:=$(INPUT_MODULES_MENU) + TITLE:=GPIO matrix keypad support + DEPENDS:= @GPIO_SUPPORT +kmod-input-core +kmod-input-matrixkmap + KCONFIG:= \ + CONFIG_KEYBOARD_MATRIX \ + CONFIG_INPUT_KEYBOARD=y + FILES:=$(LINUX_DIR)/drivers/input/keyboard/matrix_keypad.ko + AUTOLOAD:=$(call AutoProbe,matrix_keypad,1) +endef + +define KernelPackage/input-matrix-keypad/description + Enable support for GPIO driven matrix keypad. +endef + +$(eval $(call KernelPackage,input-matrix-keypad)) + define KernelPackage/input-joydev SUBMENU:=$(INPUT_MODULES_MENU) TITLE:=Joystick device support @@ -179,7 +231,7 @@ $(eval $(call KernelPackage,input-touchscreen-ads7846)) define KernelPackage/input-touchscreen-edt-ft5x06 SUBMENU:=$(INPUT_MODULES_MENU) TITLE:=EDT FT5x06 and Focaltech FT6236 based touchscreens - DEPENDS:=+kmod-i2c-core +kmod-input-core +LINUX_6_6:kmod-regmap-i2c + DEPENDS:=+kmod-i2c-core +kmod-input-core +kmod-regmap-i2c KCONFIG:= \ CONFIG_INPUT_TOUCHSCREEN=y \ CONFIG_TOUCHSCREEN_EDT_FT5X06 @@ -229,3 +281,71 @@ define KernelPackage/input-uinput/description endef $(eval $(call KernelPackage,input-uinput)) + + +define KernelPackage/input-mouse-ps2 + SUBMENU:=$(INPUT_MODULES_MENU) + TITLE:=PS/2 mouse support + DEPENDS:=+kmod-i2c-core +kmod-input-core +kmod-input-serio-libps2 + KCONFIG:= \ + CONFIG_INPUT_MOUSE=y \ + CONFIG_MOUSE_PS2 \ + CONFIG_MOUSE_PS2_ALPS=y \ + CONFIG_MOUSE_PS2_BYD=y \ + CONFIG_MOUSE_PS2_LOGIPS2PP=y \ + CONFIG_MOUSE_PS2_SYNAPTICS=y \ + CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y \ + CONFIG_MOUSE_PS2_CYPRESS=y \ + CONFIG_MOUSE_PS2_LIFEBOOK=y \ + CONFIG_MOUSE_PS2_TRACKPOINT=y \ + CONFIG_MOUSE_PS2_ELANTECH=y \ + CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y \ + CONFIG_MOUSE_PS2_SENTELIC=y \ + CONFIG_MOUSE_PS2_TOUCHKIT=y \ + CONFIG_MOUSE_PS2_OLPC=y \ + CONFIG_MOUSE_PS2_FOCALTECH=y \ + CONFIG_MOUSE_PS2_VMMOUSE=y + FILES:=$(LINUX_DIR)/drivers/input/mouse/psmouse.ko + AUTOLOAD:=$(call AutoProbe,psmouse) +endef + +define KernelPackage/input-mouse-ps2/description + Support for standard 2 or 3-button PS/2 mouse, as well as PS/2 + mice with wheels and extra buttons, Microsoft, Logitech or Genius + compatible, and many touchpads as well. +endef + +$(eval $(call KernelPackage,input-mouse-ps2)) + + +define KernelPackage/input-serio + SUBMENU:=$(INPUT_MODULES_MENU) + TITLE:=Serial I/O support + KCONFIG:= CONFIG_SERIO + FILES:=$(LINUX_DIR)/drivers/input/serio/serio.ko + AUTOLOAD:=$(call AutoProbe,serio,1) +endef + +define KernelPackage/input-serio/description + Kernel module to support input device that uses serial I/O to + communicate with the system +endef + +$(eval $(call KernelPackage,input-serio)) + + +define KernelPackage/input-serio-libps2 + SUBMENU:=$(INPUT_MODULES_MENU) + TITLE:=PS/2 Serial I/O support + DEPENDS:=+kmod-input-serio + KCONFIG:= CONFIG_SERIO_LIBPS2 + FILES:=$(LINUX_DIR)/drivers/input/serio/libps2.ko + AUTOLOAD:=$(call AutoProbe,libps2,1) +endef + +define KernelPackage/input-serio-libps2/description + Kernel module to support devices connected to a PS/2 port, such + as PS/2 mouse or standard AT keyboard. +endef + +$(eval $(call KernelPackage,input-serio-libps2)) diff --git a/openwrt/patch/openwrt-6.x/modules/leds.mk b/openwrt/patch/openwrt-6.x/modules/leds.mk index 60465a8ad..da1c0e461 100644 --- a/openwrt/patch/openwrt-6.x/modules/leds.mk +++ b/openwrt/patch/openwrt-6.x/modules/leds.mk @@ -24,6 +24,23 @@ $(eval $(call KernelPackage,leds-gpio)) LED_TRIGGER_DIR=$(LINUX_DIR)/drivers/leds/trigger +define KernelPackage/leds-group-multicolor + SUBMENU:=$(LEDS_MENU) + TITLE:=LEDs group multicolor support + KCONFIG:=CONFIG_LEDS_GROUP_MULTICOLOR + FILES:=$(LINUX_DIR)/drivers/leds/rgb/leds-group-multicolor.ko + AUTOLOAD:=$(call AutoProbe,leds-group-multicolor) +endef + +define KernelPackage/leds-group-multicolor/description + This option enables support for monochrome LEDs that are grouped + into multicolor LEDs which is useful in the case where LEDs of + different colors are physically grouped in a single multi-color LED + and driven by a controller that does not have multi-color support. +endef + +$(eval $(call KernelPackage,leds-group-multicolor)) + define KernelPackage/ledtrig-activity SUBMENU:=$(LEDS_MENU) TITLE:=LED Activity Trigger @@ -147,11 +164,30 @@ endef $(eval $(call KernelPackage,leds-apu)) +define KernelPackage/leds-ktd202x + SUBMENU:=LED modules + TITLE:=LED support for KTD202x Chips + DEPENDS:=+kmod-i2c-core +kmod-regmap-i2c + KCONFIG:=CONFIG_LEDS_KTD202X + FILES:= $(LINUX_DIR)/drivers/leds/rgb/leds-ktd202x.ko + AUTOLOAD:=$(call AutoProbe,leds-ktd202x,1) +endef + +define KernelPackage/leds-ktd202x/description + This option enables support for the Kinetic KTD2026/KTD2027 + RGB/White LED driver found in different BQ mobile phones. + It is a 3 or 4 channel LED driver programmed via an I2C interface. +endef + +$(eval $(call KernelPackage,leds-ktd202x)) + + define KernelPackage/leds-mlxcpld SUBMENU:=$(LEDS_MENU) TITLE:=LED support for the Mellanox boards - FILES:=$(LINUX_DIR)/drivers/leds/leds-mlxcpld.ko + DEPENDS:=@TARGET_x86 KCONFIG:=CONFIG_LEDS_MLXCPLD + FILES:=$(LINUX_DIR)/drivers/leds/leds-mlxcpld.ko AUTOLOAD:=$(call AutoProbe,leds-mlxcpld) endef @@ -214,6 +250,23 @@ endef $(eval $(call KernelPackage,leds-pwm)) +define KernelPackage/leds-st1202 + SUBMENU:=LED modules + TITLE:=LED support for ST LED1202 I2C chips + DEPENDS:=+kmod-i2c-core +kmod-ledtrig-pattern + KCONFIG:=CONFIG_LEDS_ST1202 + FILES:= $(LINUX_DIR)/drivers/leds/leds-st1202.ko + AUTOLOAD:=$(call AutoProbe,leds-st1202) +endef + +define KernelPackage/leds-st1202/description + This option enables support for LEDs connected to LED1202 + LED driver chips accessed via the I2C bus. +endef + +$(eval $(call KernelPackage,leds-st1202)) + + define KernelPackage/leds-tlc591xx SUBMENU:=$(LEDS_MENU) TITLE:=LED driver for TLC59108 and TLC59116 controllers @@ -280,6 +333,23 @@ endef $(eval $(call KernelPackage,leds-lp55xx-common)) +define KernelPackage/leds-lp5523 + SUBMENU:=$(LEDS_MENU) + TITLE:=LED driver for LP5523/LP55231 controllers + DEPENDS:=+kmod-i2c-core +kmod-leds-lp55xx-common + KCONFIG:=CONFIG_LEDS_LP5523 + FILES:=$(LINUX_DIR)/drivers/leds/leds-lp5523.ko + AUTOLOAD:=$(call AutoLoad,60,leds-lp5523,1) +endef + +define KernelPackage/leds-lp5523/description + This option enables support for Texas Instruments LP5523/LP55231 + LED controllers. +endef + +$(eval $(call KernelPackage,leds-lp5523)) + + define KernelPackage/leds-lp5562 SUBMENU:=$(LEDS_MENU) TITLE:=LED driver for LP5562 controllers diff --git a/openwrt/patch/openwrt-6.x/modules/lib.mk b/openwrt/patch/openwrt-6.x/modules/lib.mk index 11f02fd21..e8559a02a 100644 --- a/openwrt/patch/openwrt-6.x/modules/lib.mk +++ b/openwrt/patch/openwrt-6.x/modules/lib.mk @@ -11,7 +11,7 @@ define KernelPackage/lib-crc-ccitt SUBMENU:=$(LIB_MENU) TITLE:=CRC-CCITT support KCONFIG:=CONFIG_CRC_CCITT - FILES:=$(LINUX_DIR)/lib/crc-ccitt.ko + FILES:=$(LINUX_DIR)/lib/crc/crc-ccitt.ko AUTOLOAD:=$(call AutoProbe,crc-ccitt) endef @@ -26,7 +26,7 @@ define KernelPackage/lib-crc-itu-t SUBMENU:=$(LIB_MENU) TITLE:=CRC ITU-T V.41 support KCONFIG:=CONFIG_CRC_ITU_T - FILES:=$(LINUX_DIR)/lib/crc-itu-t.ko + FILES:=$(LINUX_DIR)/lib/crc/crc-itu-t.ko AUTOLOAD:=$(call AutoProbe,crc-itu-t) endef @@ -41,7 +41,7 @@ define KernelPackage/lib-crc7 SUBMENU:=$(LIB_MENU) TITLE:=CRC7 support KCONFIG:=CONFIG_CRC7 - FILES:=$(LINUX_DIR)/lib/crc7.ko + FILES:=$(LINUX_DIR)/lib/crc/crc7.ko AUTOLOAD:=$(call AutoProbe,crc7) endef @@ -56,7 +56,7 @@ define KernelPackage/lib-crc8 SUBMENU:=$(LIB_MENU) TITLE:=CRC8 support KCONFIG:=CONFIG_CRC8 - FILES:=$(LINUX_DIR)/lib/crc8.ko + FILES:=$(LINUX_DIR)/lib/crc/crc8.ko AUTOLOAD:=$(call AutoProbe,crc8) endef @@ -71,7 +71,7 @@ define KernelPackage/lib-crc16 SUBMENU:=$(LIB_MENU) TITLE:=CRC16 support KCONFIG:=CONFIG_CRC16 - FILES:=$(LINUX_DIR)/lib/crc16.ko + FILES:=$(LINUX_DIR)/lib/crc/crc16.ko AUTOLOAD:=$(call AutoLoad,20,crc16,1) endef @@ -87,7 +87,7 @@ define KernelPackage/lib-crc32c TITLE:=CRC32 support KCONFIG:=CONFIG_LIBCRC32C DEPENDS:=+kmod-crypto-crc32c - FILES:=$(LINUX_DIR)/lib/libcrc32c.ko + FILES:=$(LINUX_DIR)/lib/crc/libcrc32c.ko AUTOLOAD:=$(call AutoProbe,libcrc32c) endef @@ -143,7 +143,7 @@ define KernelPackage/lib-zstd CONFIG_ZSTD_DECOMPRESS FILES:= \ $(LINUX_DIR)/crypto/zstd.ko \ - $(LINUX_DIR)/lib/zstd/zstd_common.ko@ge6.1 \ + $(LINUX_DIR)/lib/zstd/zstd_common.ko \ $(LINUX_DIR)/lib/zstd/zstd_compress.ko \ $(LINUX_DIR)/lib/zstd/zstd_decompress.ko AUTOLOAD:=$(call AutoProbe,zstd zstd_compress zstd_decompress) @@ -359,6 +359,7 @@ $(eval $(call KernelPackage,oid-registry)) define KernelPackage/lib-objagg SUBMENU:=$(LIB_MENU) TITLE:=objagg support + HIDDEN:=1 FILES:=$(LINUX_DIR)/lib/objagg.ko KCONFIG:= \ CONFIG_OBJAGG \ @@ -372,6 +373,7 @@ $(eval $(call KernelPackage,lib-objagg)) define KernelPackage/lib-parman SUBMENU:=$(LIB_MENU) TITLE:=parman support + HIDDEN:=1 FILES:=$(LINUX_DIR)/lib/parman.ko KCONFIG:= \ CONFIG_PARMAN \ @@ -385,7 +387,7 @@ $(eval $(call KernelPackage,lib-parman)) define KernelPackage/libwx SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Wangxun(R) Ethernet driver common library - DEPENDS:=@PCI_SUPPORT @LINUX_6_6 + DEPENDS:=@PCI_SUPPORT +kmod-phylink +kmod-ptp KCONFIG:=CONFIG_LIBWX FILES:=$(LINUX_DIR)/drivers/net/ethernet/wangxun/libwx/libwx.ko AUTOLOAD:=$(call AutoProbe,libwx) @@ -397,3 +399,25 @@ endef $(eval $(call KernelPackage,libwx)) + +define KernelPackage/libie-fwlog + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=LIBIE_FWLOG + KCONFIG:=CONFIG_LIBIE_FWLOG + FILES:=$(LINUX_DIR)/drivers/net/ethernet/intel/libie/libie_fwlog.ko + AUTOLOAD:=$(call AutoLoad,15,libie_fwlog,1) +endef + +$(eval $(call KernelPackage,libie-fwlog)) + + +define KernelPackage/libie-adminq + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=LIBIE_ADMINQ + KCONFIG:=CONFIG_LIBIE_ADMINQ + FILES:=$(LINUX_DIR)/drivers/net/ethernet/intel/libie/libie_adminq.ko + AUTOLOAD:=$(call AutoLoad,15,libie_adminq,1) +endef + +$(eval $(call KernelPackage,libie-adminq)) + diff --git a/openwrt/patch/openwrt-6.x/modules/netdevices.mk b/openwrt/patch/openwrt-6.x/modules/netdevices.mk index 579b772d2..af631831c 100644 --- a/openwrt/patch/openwrt-6.x/modules/netdevices.mk +++ b/openwrt/patch/openwrt-6.x/modules/netdevices.mk @@ -33,6 +33,33 @@ endef $(eval $(call KernelPackage,skge)) +define KernelPackage/ag71xx + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Atheros AR7XXX/AR9XXX ethernet mac support + DEPENDS:=@TARGET_ath79 +kmod-phylink +kmod-mdio-devres +kmod-net-selftests + KCONFIG:=CONFIG_AG71XX + FILES:=$(LINUX_DIR)/drivers/net/ethernet/atheros/ag71xx.ko + AUTOLOAD:=$(call AutoLoad,50,ag71xx,1) +endef + +$(eval $(call KernelPackage,ag71xx)) + + +define KernelPackage/ag71xx-legacy + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Downstream Atheros AR7XXX/AR9XXX ethernet mac support + DEPENDS:=@TARGET_ath79 +kmod-libphy +kmod-mdio-devres + KCONFIG:=CONFIG_AG71XX_LEGACY \ + CONFIG_AG71XX_LEGACY_DEBUG=n \ + CONFIG_AG71XX_LEGACY_DEBUG_FS=y + FILES:=$(LINUX_DIR)/drivers/net/ethernet/atheros/ag71xx/ag71xx_legacy.ko \ + $(LINUX_DIR)/drivers/net/ethernet/atheros/ag71xx/ag71xx_legacy_mdio.ko + AUTOLOAD:=$(call AutoLoad,50,ag71xx-legacy ag71xx-legacy-mdio,1) +endef + +$(eval $(call KernelPackage,ag71xx-legacy)) + + define KernelPackage/alx SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Qualcomm Atheros AR816x/AR817x PCI-E Ethernet Network Driver @@ -93,12 +120,46 @@ endef $(eval $(call KernelPackage,atl1e)) +define KernelPackage/libie + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Intel Ethernet library + DEPENDS:=+kmod-libeth + KCONFIG:=CONFIG_LIBIE + HIDDEN:=1 + FILES:=$(LINUX_DIR)/drivers/net/ethernet/intel/libie/libie.ko +endef + +define KernelPackage/libie/description + Intel Ethernet library +endef + +$(eval $(call KernelPackage,libie)) + + +define KernelPackage/libeth + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Common Intel Ethernet library + KCONFIG:=CONFIG_LIBETH + HIDDEN:=1 + FILES:=$(LINUX_DIR)/drivers/net/ethernet/intel/libeth/libeth.ko +endef + +define KernelPackage/libeth/description + Common Intel Ethernet library +endef + +$(eval $(call KernelPackage,libeth)) + + define KernelPackage/libphy SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=PHY library - KCONFIG:=CONFIG_PHYLIB - FILES:=$(LINUX_DIR)/drivers/net/phy/libphy.ko - AUTOLOAD:=$(call AutoLoad,15,libphy,1) + KCONFIG:=CONFIG_PHYLIB \ + CONFIG_PHYLIB_LEDS=y \ + CONFIG_MDIO_BUS + FILES:=$(LINUX_DIR)/drivers/net/phy/libphy.ko \ + $(LINUX_DIR)/drivers/net/phy/mdio-bus.ko@ge6.18 + AUTOLOAD:=$(call AutoLoad,15,libphy mdio-bus,1) endef define KernelPackage/libphy/description @@ -142,7 +203,7 @@ $(eval $(call KernelPackage,mii)) define KernelPackage/mdio-devres SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Supports MDIO device registration - DEPENDS:=+kmod-libphy +(TARGET_armsr||TARGET_bcm27xx_bcm2708||TARGET_malta||TARGET_tegra):kmod-of-mdio + DEPENDS:=+kmod-libphy +(TARGET_armsr||TARGET_bcm27xx_bcm2708||TARGET_loongarch64||TARGET_malta||TARGET_tegra):kmod-of-mdio KCONFIG:=CONFIG_MDIO_DEVRES HIDDEN:=1 FILES:=$(LINUX_DIR)/drivers/net/phy/mdio_devres.ko @@ -159,7 +220,7 @@ $(eval $(call KernelPackage,mdio-devres)) define KernelPackage/mdio-gpio SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:= Supports GPIO lib-based MDIO busses - DEPENDS:=+kmod-libphy @GPIO_SUPPORT +(TARGET_armsr||TARGET_bcm27xx_bcm2708||TARGET_malta||TARGET_tegra):kmod-of-mdio + DEPENDS:=+kmod-libphy @GPIO_SUPPORT +(TARGET_armsr||TARGET_bcm27xx_bcm2708||TARGET_loongarch64||TARGET_malta||TARGET_tegra):kmod-of-mdio KCONFIG:= \ CONFIG_MDIO_BITBANG \ CONFIG_MDIO_GPIO @@ -195,6 +256,33 @@ endef $(eval $(call KernelPackage,et131x)) + +define KernelPackage/phy-package + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=PHY Device support and infrastructure + KCONFIG:=CONFIG_PHY_PACKAGE + FILES:=$(LINUX_DIR)/drivers/net/phy/phy_package.ko + AUTOLOAD:=$(call AutoProbe,phy_package) +endef + +$(eval $(call KernelPackage,phy-package)) + + +define KernelPackage/phy-maxlinear + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Maxlinear Ethernet PHY driver + KCONFIG:=CONFIG_MAXLINEAR_GPHY + DEPENDS:=+kmod-libphy +kmod-hwmon-core +kmod-polynomial + FILES:=$(LINUX_DIR)/drivers/net/phy/mxl-gpy.ko + AUTOLOAD:=$(call AutoLoad,18,mxl-gpy,1) +endef + +define KernelPackage/phy-maxlinear/description + Support Maxlinear Ethernet PHYs. +endef + +$(eval $(call KernelPackage,phy-maxlinear)) + define KernelPackage/phy-microchip SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Microchip Ethernet PHY driver @@ -224,6 +312,19 @@ endef $(eval $(call KernelPackage,phylib-broadcom)) +define KernelPackage/phylib-qcom + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Qualcomm Ethernet PHY library + KCONFIG:=CONFIG_QCOM_NET_PHYLIB + HIDDEN:=1 + DEPENDS:=+kmod-libphy + FILES:=$(LINUX_DIR)/drivers/net/phy/qcom/qcom-phy-lib.ko + AUTOLOAD:=$(call AutoLoad,17,qcom-phy-lib) +endef + +$(eval $(call KernelPackage,phylib-qcom)) + + define KernelPackage/phy-amd SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=AMD PHY driver @@ -240,6 +341,18 @@ endef $(eval $(call KernelPackage,phy-amd)) +define KernelPackage/phy-at803x + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Qualcomm Atheros 8337 internal PHY + KCONFIG:=CONFIG_AT803X_PHY + DEPENDS:=+kmod-phylib-qcom + FILES:=$(LINUX_DIR)/drivers/net/phy/qcom/at803x.ko + AUTOLOAD:=$(call AutoLoad,18,at803x,1) +endef + +$(eval $(call KernelPackage,phy-at803x)) + + define KernelPackage/phy-ax88796b SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Asix PHY driver @@ -274,6 +387,23 @@ endef $(eval $(call KernelPackage,phy-broadcom)) +define KernelPackage/phy-bcm7xxx + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Broadcom 7xxx SOCs internal PHYs + KCONFIG:=CONFIG_BCM7XXX_PHY + DEPENDS:=+kmod-libphy +kmod-phylib-broadcom + FILES:=$(LINUX_DIR)/drivers/net/phy/bcm7xxx.ko + AUTOLOAD:=$(call AutoLoad,18,bcm7xxx,1) +endef + +define KernelPackage/phy-bcm7xxx/description + Currently supports the BCM7366, BCM7439, BCM7445, and + 40nm and 65nm generation of BCM7xxx Set Top Box SoCs. +endef + +$(eval $(call KernelPackage,phy-bcm7xxx)) + + define KernelPackage/phy-bcm84881 SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Broadcom BCM84881 PHY driver @@ -290,6 +420,37 @@ endef $(eval $(call KernelPackage,phy-bcm84881)) +define KernelPackage/phy-intel-xway + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Intel XWAY PHYs + KCONFIG:=CONFIG_INTEL_XWAY_PHY + DEPENDS:=+kmod-libphy + FILES:=$(LINUX_DIR)/drivers/net/phy/intel-xway.ko + AUTOLOAD:=$(call AutoLoad,18,intel-xway,1) +endef + +define KernelPackage/phy-intel-xway/description + Supports the Intel XWAY (former Lantiq) 11G and 22E PHYs. + These PHYs are marked as standalone chips under the names + PEF 7061, PEF 7071 and PEF 7072 or integrated into the Intel + SoCs xRX200, xRX300, xRX330, xRX350 and xRX550. +endef + +$(eval $(call KernelPackage,phy-intel-xway)) + + +define KernelPackage/phy-qca83xx + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Qualcomm Atheros QCA833x PHY driver + KCONFIG:=CONFIG_QCA83XX_PHY + DEPENDS:=+kmod-phylib-qcom + FILES:=$(LINUX_DIR)/drivers/net/phy/qcom/qca83xx.ko + AUTOLOAD:=$(call AutoLoad,18,qca83xx,1) +endef + +$(eval $(call KernelPackage,phy-qca83xx)) + + define KernelPackage/phy-marvell SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Marvell Gigabit Ethernet PHY driver @@ -343,12 +504,30 @@ endef $(eval $(call KernelPackage,phy-marvell-10g)) + +define KernelPackage/phy-micrel + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Micrel PHYs + KCONFIG:=CONFIG_MICREL_PHY + DEPENDS:=+kmod-libphy +kmod-ptp +kmod-phy-package + FILES:=$(LINUX_DIR)/drivers/net/phy/micrel.ko + AUTOLOAD:=$(call AutoLoad,18,micrel,1) +endef + +define KernelPackage/phy-micrel/description + Supports the KSZ9021, VSC8201, KS8001 PHYs. +endef + +$(eval $(call KernelPackage,phy-micrel)) + + define KernelPackage/phy-realtek SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Realtek Ethernet PHY driver - KCONFIG:=CONFIG_REALTEK_PHY - DEPENDS:=+kmod-libphy - FILES:=$(LINUX_DIR)/drivers/net/phy/realtek.ko + KCONFIG:=CONFIG_REALTEK_PHY \ + CONFIG_REALTEK_PHY_HWMON=y + DEPENDS:=+kmod-libphy +kmod-hwmon-core + FILES:=$(LINUX_DIR)/drivers/net/phy/realtek/realtek.ko AUTOLOAD:=$(call AutoLoad,18,realtek,1) endef @@ -359,11 +538,27 @@ endef $(eval $(call KernelPackage,phy-realtek)) +define KernelPackage/phy-rtl8261n + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Realtek RTL8261N NBASE-T PHY driver + KCONFIG:=CONFIG_RTL8261N_PHY + DEPENDS:=+kmod-libphy + FILES:=$(LINUX_DIR)/drivers/net/phy/rtl8261n/rtl8261n.ko + AUTOLOAD:=$(call AutoLoad,18,rtl8261n,1) +endef + +define KernelPackage/phy-rtl8261n/description + Supports the Realtek 8261N NBASE-T PHY. +endef + +$(eval $(call KernelPackage,phy-rtl8261n)) + + define KernelPackage/phy-smsc SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=SMSC PHY driver KCONFIG:=CONFIG_SMSC_PHY - DEPENDS:=+kmod-libphy +LINUX_6_6:kmod-lib-crc16 + DEPENDS:=+kmod-libphy +kmod-lib-crc16 FILES:=$(LINUX_DIR)/drivers/net/phy/smsc.ko AUTOLOAD:=$(call AutoProbe,smsc) endef @@ -375,10 +570,43 @@ endef $(eval $(call KernelPackage,phy-smsc)) +define KernelPackage/phy-vitesse + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Vitesse PHYs + KCONFIG:=CONFIG_VITESSE_PHY + DEPENDS:=+kmod-libphy + FILES:=$(LINUX_DIR)/drivers/net/phy/vitesse.ko + AUTOLOAD:=$(call AutoLoad,18,vitesse,1) +endef + +define KernelPackage/phy-vitesse/description + Currently supports the vsc8244 +endef + +$(eval $(call KernelPackage,phy-vitesse)) + + +define KernelPackage/phy-aeonsemi-as21xxx + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Aeonsemi AS21xxx 10G Ethernet PHY + DEPENDS:=+aeonsemi-as21xxx-firmware +kmod-libphy + KCONFIG:=CONFIG_AS21XXX_PHY + FILES:= \ + $(LINUX_DIR)/drivers/net/phy/as21xxx.ko + AUTOLOAD:=$(call AutoLoad,18,as21xxx) +endef + +define KernelPackage/phy-aeonsemi-as21xxx/description + Kernel modules for Aeonsemi AS21x1x 10G Ethernet PHY +endef + +$(eval $(call KernelPackage,phy-aeonsemi-as21xxx)) + + define KernelPackage/phy-airoha-en8811h SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Airoha EN8811H 2.5G Ethernet PHY - DEPENDS:=+airoha-en8811h-firmware +kmod-libphy @!LINUX_5_15 + DEPENDS:=+airoha-en8811h-firmware +kmod-libphy KCONFIG:=CONFIG_AIR_EN8811H_PHY FILES:= \ $(LINUX_DIR)/drivers/net/phy/air_en8811h.ko @@ -395,7 +623,7 @@ $(eval $(call KernelPackage,phy-airoha-en8811h)) define KernelPackage/phy-aquantia SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Aquantia Ethernet PHYs - DEPENDS:=+kmod-libphy +kmod-hwmon-core +kmod-lib-crc-ccitt + DEPENDS:=+kmod-libphy +kmod-hwmon-core +kmod-lib-crc-ccitt +kmod-lib-crc-itu-t KCONFIG:=CONFIG_AQUANTIA_PHY FILES:=$(LINUX_DIR)/drivers/net/phy/aquantia/aquantia.ko AUTOLOAD:=$(call AutoLoad,18,aquantia,1) @@ -407,31 +635,105 @@ endef $(eval $(call KernelPackage,phy-aquantia)) -define KernelPackage/dsa-tag-dsa +define KernelPackage/dsa SUBMENU:=$(NETWORK_DEVICES_MENU) - TITLE:=Marvell DSA type DSA and EDSA taggers - KCONFIG:= CONFIG_NET_DSA_TAG_DSA_COMMON \ - CONFIG_NET_DSA_TAG_DSA \ - CONFIG_NET_DSA_TAG_EDSA \ - CONFIG_NET_DSA=y - FILES:=$(LINUX_DIR)/net/dsa/tag_dsa.ko - AUTOLOAD:=$(call AutoLoad,40,tag_dsa,1) + TITLE:=Distributed Switch Architecture support + DEPENDS:=+kmod-mdio-devres +kmod-net-selftests +kmod-phylink + KCONFIG:=CONFIG_NET_DSA + FILES:=$(LINUX_DIR)/net/dsa/dsa_core.ko +endef + +define KernelPackage/dsa/description + Kernel module support for Distributed Switch Architecture +endef + +$(eval $(call KernelPackage,dsa)) + + +define KernelPackage/dsa-notag + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=DSA No-op tag driver + DEPENDS:=+kmod-dsa + KCONFIG:=CONFIG_NET_DSA_TAG_NONE + FILES:=$(LINUX_DIR)/net/dsa/tag_none.ko +endef + +define KernelPackage/dsa-notag/description + Kernel module support for switches which don't tag frames over the CPU port. +endef + +$(eval $(call KernelPackage,dsa-notag)) + + +define KernelPackage/dsa-b53 + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Broadcom BCM53xx managed switch DSA support + DEPENDS:=+kmod-dsa +kmod-dsa-notag + KCONFIG:=CONFIG_B53 \ + CONFIG_NET_DSA_TAG_BRCM \ + CONFIG_NET_DSA_TAG_BRCM_LEGACY \ + CONFIG_NET_DSA_TAG_BRCM_LEGACY_FCS \ + CONFIG_NET_DSA_TAG_BRCM_PREPEND + FILES:= \ + $(LINUX_DIR)/drivers/net/dsa/b53/b53_common.ko \ + $(LINUX_DIR)/net/dsa/tag_brcm.ko + AUTOLOAD:=$(call AutoProbe,b53_common) +endef + +define KernelPackage/dsa-b53/description + Broadcom BCM53xx managed switch support +endef + +$(eval $(call KernelPackage,dsa-b53)) + + +define KernelPackage/dsa-b53-mdio + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=B53 MDIO connected switch DSA driver + DEPENDS:=+kmod-dsa-b53 + KCONFIG:=CONFIG_B53_MDIO_DRIVER + FILES:=$(LINUX_DIR)/drivers/net/dsa/b53/b53_mdio.ko + AUTOLOAD:=$(call AutoProbe,b53_mdio) endef -define KernelPackage/dsa-tag-dsa/description - Kernel modules for Marvell DSA and EDSA tagging +define KernelPackage/dsa-b53-mdio/description + B53 MDIO connected switch driver endef -$(eval $(call KernelPackage,dsa-tag-dsa)) +$(eval $(call KernelPackage,dsa-b53-mdio)) + +define KernelPackage/dsa-mv88e6060 + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Marvell MV88E6060 DSA Switch + DEPENDS:=+kmod-dsa +kmod-phy-marvell + KCONFIG:=CONFIG_NET_DSA_TAG_TRAILER \ + CONFIG_NET_DSA_MV88E6060 + FILES:= \ + $(LINUX_DIR)/drivers/net/dsa/mv88e6060.ko \ + $(LINUX_DIR)/net/dsa/tag_trailer.ko + AUTOLOAD:=$(call AutoLoad,41,mv88e6060,1) +endef + +define KernelPackage/dsa-mv88e6060/description + Kernel modules for MV88E6060 DSA switches +endef + +$(eval $(call KernelPackage,dsa-mv88e6060)) define KernelPackage/dsa-mv88e6xxx SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Marvell MV88E6XXX DSA Switch - DEPENDS:=+kmod-ptp +kmod-phy-marvell +kmod-dsa-tag-dsa - KCONFIG:=CONFIG_NET_DSA_MV88E6XXX \ - CONFIG_NET_DSA_MV88E6XXX_PTP=y \ - CONFIG_NET_DSA=y - FILES:=$(LINUX_DIR)/drivers/net/dsa/mv88e6xxx/mv88e6xxx.ko + DEPENDS:=+kmod-dsa +kmod-ptp +kmod-phy-marvell + KCONFIG:= \ + CONFIG_NET_DSA_TAG_DSA_COMMON \ + CONFIG_NET_DSA_TAG_DSA \ + CONFIG_NET_DSA_TAG_EDSA \ + CONFIG_NET_DSA_MV88E6XXX \ + CONFIG_NET_DSA_MV88E6XXX_LEDS=y \ + CONFIG_NET_DSA_MV88E6XXX_PTP=y + FILES:= \ + $(LINUX_DIR)/net/dsa/tag_dsa.ko \ + $(LINUX_DIR)/drivers/net/dsa/mv88e6xxx/mv88e6xxx.ko AUTOLOAD:=$(call AutoLoad,41,mv88e6xxx,1) endef @@ -441,51 +743,170 @@ endef $(eval $(call KernelPackage,dsa-mv88e6xxx)) +define KernelPackage/dsa-qca8k + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Qualcomm Atheros QCA8xxx switch family DSA support + DEPENDS:=+kmod-dsa +kmod-regmap-core + KCONFIG:= \ + CONFIG_NET_DSA_QCA8K \ + CONFIG_NET_DSA_QCA8K_LEDS_SUPPORT=y \ + CONFIG_NET_DSA_TAG_QCA + FILES:= \ + $(LINUX_DIR)/drivers/net/dsa/qca/qca8k.ko \ + $(LINUX_DIR)/net/dsa/tag_qca.ko + AUTOLOAD:=$(call AutoLoad,42,qca8k,1) +endef -define KernelPackage/swconfig +define KernelPackage/dsa-qca8k/description + DSA based kernel modules for the Qualcomm Atheros QCA8xxx switch family +endef + +$(eval $(call KernelPackage,dsa-qca8k)) + + +define KernelPackage/dsa-realtek SUBMENU:=$(NETWORK_DEVICES_MENU) - TITLE:=switch configuration API - DEPENDS:=+kmod-libphy - KCONFIG:=CONFIG_SWCONFIG - FILES:=$(LINUX_DIR)/drivers/net/phy/swconfig.ko - AUTOLOAD:=$(call AutoLoad,41,swconfig) + TITLE:=Realtek common module RTL83xx DSA switch family + DEPENDS:=+kmod-dsa +kmod-phy-realtek +kmod-regmap-core @!TARGET_x86 @!TARGET_bcm47xx @!TARGET_uml + KCONFIG:= \ + CONFIG_NET_DSA_REALTEK \ + CONFIG_NET_DSA_REALTEK_MDIO=y \ + CONFIG_NET_DSA_REALTEK_SMI=y + FILES:= $(LINUX_DIR)/drivers/net/dsa/realtek/realtek_dsa.ko endef -define KernelPackage/swconfig/description - Switch configuration API module +define KernelPackage/dsa-realtek/description + Common kernel module for Realtek RTL83xx DSA switch family endef -$(eval $(call KernelPackage,swconfig)) +$(eval $(call KernelPackage,dsa-realtek)) -define KernelPackage/switch-bcm53xx + +define KernelPackage/dsa-rtl8366rb SUBMENU:=$(NETWORK_DEVICES_MENU) - TITLE:=Broadcom bcm53xx switch support - DEPENDS:=+kmod-swconfig - KCONFIG:=CONFIG_SWCONFIG_B53 - FILES:=$(LINUX_DIR)/drivers/net/phy/b53/b53_common.ko - AUTOLOAD:=$(call AutoLoad,42,b53_common) + TITLE:=Realtek RTL8366RB switch DSA support + DEPENDS:=+kmod-dsa-realtek @!TARGET_x86 @!TARGET_bcm47xx @!TARGET_uml + KCONFIG:= \ + CONFIG_NET_DSA_REALTEK_RTL8366RB \ + CONFIG_NET_DSA_REALTEK_RTL8366RB_LEDS=y \ + CONFIG_NET_DSA_TAG_RTL4_A + FILES:= \ + $(LINUX_DIR)/drivers/net/dsa/realtek/rtl8366.ko \ + $(LINUX_DIR)/net/dsa/tag_rtl4_a.ko + AUTOLOAD:=$(call AutoLoad,42,rtl8366,1) endef -define KernelPackage/switch-bcm53xx/description - Broadcom bcm53xx switch support +define KernelPackage/dsa-rtl8366rb/description + DSA based kernel modules for the Realtek RTL8366RB switch family endef -$(eval $(call KernelPackage,switch-bcm53xx)) +$(eval $(call KernelPackage,dsa-rtl8366rb)) -define KernelPackage/switch-bcm53xx-mdio + +define KernelPackage/dsa-rtl8365mb + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Realtek RTL8365MB switch DSA support + DEPENDS:=+kmod-dsa-realtek @!TARGET_x86 @!TARGET_bcm47xx @!TARGET_uml + KCONFIG:= \ + CONFIG_NET_DSA_REALTEK_RTL8365MB \ + CONFIG_NET_DSA_TAG_RTL8_4 + FILES:= \ + $(LINUX_DIR)/drivers/net/dsa/realtek/rtl8365mb.ko \ + $(LINUX_DIR)/net/dsa/tag_rtl8_4.ko + AUTOLOAD:=$(call AutoLoad,42,rtl8365mb,1) +endef + +define KernelPackage/dsa-rtl8365mb/description + DSA based kernel modules for the Realtek RTL8365MB switch family +endef + +$(eval $(call KernelPackage,dsa-rtl8365mb)) + + +define KernelPackage/dsa-ks8995 + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Micrel/Kendin KS8995 Ethernet DSA Switch + DEPENDS:=+kmod-dsa +kmod-dsa-notag + FILES:= $(LINUX_DIR)/drivers/net/dsa/ks8995.ko + KCONFIG:= CONFIG_NET_DSA_KS8995 \ + CONFIG_SPI=y \ + CONFIG_SPI_MASTER=y + AUTOLOAD:=$(call AutoLoad,42,ks8995) +endef + +define KernelPackage/dsa-ks8995/description + Kernel module for Micrel/Kendin KS8995 DSA switch +endef + +$(eval $(call KernelPackage,dsa-ks8995)) + + +define KernelPackage/dsa-vsc73xx + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Vitesse VSC73XX DSA switch family support + DEPENDS:=+kmod-dsa +kmod-phy-vitesse +kmod-fixed-phy + KCONFIG:= \ + CONFIG_NET_DSA_VITESSE_VSC73XX \ + CONFIG_NET_DSA_TAG_VSC73XX_8021Q + FILES:= \ + $(LINUX_DIR)/drivers/net/dsa/vitesse-vsc73xx-core.ko \ + $(LINUX_DIR)/net/dsa/tag_vsc73xx_8021q.ko +endef + +define KernelPackage/dsa-vsc73xx/description + Kernel modules for Vitesse VSC73XX switches +endef + +$(eval $(call KernelPackage,dsa-vsc73xx)) + + +define KernelPackage/dsa-vsc73xx-spi SUBMENU:=$(NETWORK_DEVICES_MENU) - TITLE:=Broadcom bcm53xx switch MDIO support - DEPENDS:=+kmod-switch-bcm53xx - KCONFIG:=CONFIG_SWCONFIG_B53_PHY_DRIVER - FILES:=$(LINUX_DIR)/drivers/net/phy/b53/b53_mdio.ko - AUTOLOAD:=$(call AutoLoad,42,b53_mdio) + TITLE:=Vitesse VSC73XX SPI support + DEPENDS:=+kmod-dsa-vsc73xx + KCONFIG:= CONFIG_NET_DSA_VITESSE_VSC73XX_SPI + FILES:= $(LINUX_DIR)/drivers/net/dsa/vitesse-vsc73xx-spi.ko + AUTOLOAD:=$(call AutoProbe,vitesse-vsc73xx-spi) endef -define KernelPackage/switch-bcm53xx-mdio/description - Broadcom bcm53xx switch MDIO support +define KernelPackage/dsa-vsc73xx-spi/description + Kernel modules for Vitesse VSC73XX switches using SPI endef -$(eval $(call KernelPackage,switch-bcm53xx-mdio)) +$(eval $(call KernelPackage,dsa-vsc73xx-spi)) + + +define KernelPackage/dsa-vsc73xx-platform + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Vitesse VSC73XX platform support + DEPENDS:=+kmod-dsa-vsc73xx + KCONFIG:= CONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM + FILES:= $(LINUX_DIR)/drivers/net/dsa/vitesse-vsc73xx-platform.ko + AUTOLOAD:=$(call AutoProbe,vitesse-vsc73xx-platform) +endef + +define KernelPackage/dsa-vsc73xx-spi/description + Kernel modules for Vitesse VSC73XX switches using platform integration +endef + +$(eval $(call KernelPackage,dsa-vsc73xx-platform)) + + +define KernelPackage/swconfig + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=switch configuration API + DEPENDS:=+kmod-libphy + KCONFIG:=CONFIG_SWCONFIG \ + CONFIG_SWCONFIG_LEDS=y + FILES:=$(LINUX_DIR)/drivers/net/phy/swconfig.ko + AUTOLOAD:=$(call AutoLoad,41,swconfig) +endef + +define KernelPackage/swconfig/description + Switch configuration API module +endef + +$(eval $(call KernelPackage,swconfig)) define KernelPackage/switch-ip17xx @@ -523,7 +944,7 @@ $(eval $(call KernelPackage,switch-rtl8306)) define KernelPackage/switch-rtl8366-smi SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Realtek RTL8366 SMI switch interface support - DEPENDS:=@GPIO_SUPPORT +kmod-swconfig +(TARGET_armsr||TARGET_bcm27xx_bcm2708||TARGET_malta||TARGET_tegra):kmod-of-mdio + DEPENDS:=@GPIO_SUPPORT +kmod-swconfig +(TARGET_armsr||TARGET_bcm27xx_bcm2708||TARGET_loongarch64||TARGET_malta||TARGET_tegra):kmod-of-mdio KCONFIG:=CONFIG_RTL8366_SMI FILES:=$(LINUX_DIR)/drivers/net/phy/rtl8366_smi.ko AUTOLOAD:=$(call AutoLoad,42,rtl8366_smi,1) @@ -604,7 +1025,8 @@ define KernelPackage/switch-ar8xxx SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Atheros AR8216/8327 switch support DEPENDS:=+kmod-swconfig +kmod-mdio-devres - KCONFIG:=CONFIG_AR8216_PHY + KCONFIG:=CONFIG_AR8216_PHY \ + CONFIG_AR8216_PHY_LEDS=y FILES:=$(LINUX_DIR)/drivers/net/phy/ar8xxx.ko AUTOLOAD:=$(call AutoLoad,43,ar8xxx,1) endef @@ -650,6 +1072,23 @@ endef $(eval $(call KernelPackage,r6040)) +define KernelPackage/rmnet + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=RmNet MAP support + KCONFIG:=CONFIG_RMNET + FILES:=$(LINUX_DIR)/drivers/net/ethernet/qualcomm/rmnet/rmnet.ko + AUTOLOAD:=$(call AutoLoad,30,rmnet) +endef + +define KernelPackage/rmnet/description + Kernel support for RMNET module which is used for handling data in the + multiplexing and aggregation protocol (MAP) format in the embedded data + path. RMNET devices can be attached to any IP mode physical device. +endef + +$(eval $(call KernelPackage,rmnet)) + + define KernelPackage/niu SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Sun Neptune 10Gbit Ethernet support @@ -779,9 +1218,9 @@ define KernelPackage/r8169 DEPENDS:=@PCI_SUPPORT +kmod-mii +r8169-firmware +kmod-phy-realtek +kmod-mdio-devres KCONFIG:= \ CONFIG_R8169 \ - CONFIG_R8169_LEDS=y@ge6.6 + CONFIG_R8169_LEDS=y FILES:=$(LINUX_DIR)/drivers/net/ethernet/realtek/r8169.ko - AUTOLOAD:=$(call AutoProbe,r8169) + AUTOLOAD:=$(call AutoProbe,r8169,1) endef define KernelPackage/r8169/description @@ -849,7 +1288,7 @@ define KernelPackage/e1000e DEPENDS:=@PCIE_SUPPORT +kmod-ptp KCONFIG:=CONFIG_E1000E FILES:=$(LINUX_DIR)/drivers/net/ethernet/intel/e1000e/e1000e.ko - AUTOLOAD:=$(call AutoProbe,e1000e) + AUTOLOAD:=$(call AutoProbe,e1000e,1) MODPARAMS.e1000e:= \ IntMode=1 \ InterruptThrottleRate=4,4,4,4,4,4,4,4 @@ -901,11 +1340,11 @@ $(eval $(call KernelPackage,igbvf)) define KernelPackage/ixgbe SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Intel(R) 82598/82599 PCI-Express 10 Gigabit Ethernet support - DEPENDS:=@PCI_SUPPORT +kmod-mdio +kmod-ptp +kmod-hwmon-core +kmod-libphy +kmod-mdio-devres + DEPENDS:=@PCI_SUPPORT +kmod-mdio +kmod-ptp +kmod-hwmon-core +kmod-libphy +kmod-mdio-devres +kmod-libie-fwlog +kmod-libie-adminq KCONFIG:=CONFIG_IXGBE \ - CONFIG_IXGBE_VXLAN=n \ CONFIG_IXGBE_HWMON=y \ - CONFIG_IXGBE_DCA=n + CONFIG_IXGBE_DCA=n \ + CONFIG_IXGBE_DCB=y FILES:=$(LINUX_DIR)/drivers/net/ethernet/intel/ixgbe/ixgbe.ko AUTOLOAD:=$(call AutoLoad,35,ixgbe) endef @@ -922,7 +1361,6 @@ define KernelPackage/ixgbevf TITLE:=Intel(R) 82599 Virtual Function Ethernet support DEPENDS:=@PCI_SUPPORT +kmod-ixgbe KCONFIG:=CONFIG_IXGBEVF \ - CONFIG_IXGBE_VXLAN=n \ CONFIG_IXGBE_HWMON=y \ CONFIG_IXGBE_DCA=n FILES:=$(LINUX_DIR)/drivers/net/ethernet/intel/ixgbevf/ixgbevf.ko @@ -939,13 +1377,11 @@ $(eval $(call KernelPackage,ixgbevf)) define KernelPackage/i40e SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Intel(R) Ethernet Controller XL710 Family support - DEPENDS:=@PCI_SUPPORT +kmod-mdio +kmod-ptp +kmod-hwmon-core +kmod-libphy + DEPENDS:=@PCI_SUPPORT +kmod-mdio +kmod-ptp +kmod-hwmon-core +kmod-libphy +kmod-libie +kmod-libie-adminq KCONFIG:=CONFIG_I40E \ - CONFIG_I40E_VXLAN=n \ - CONFIG_I40E_HWMON=y \ - CONFIG_I40E_DCA=n + CONFIG_I40E_DCB=y FILES:=$(LINUX_DIR)/drivers/net/ethernet/intel/i40e/i40e.ko - AUTOLOAD:=$(call AutoProbe,i40e) + AUTOLOAD:=$(call AutoLoad,36,i40e,1) endef define KernelPackage/i40e/description @@ -955,16 +1391,34 @@ endef $(eval $(call KernelPackage,i40e)) +define KernelPackage/ice + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Intel(R) Ethernet Controller E810 Series support + DEPENDS:=@PCI_SUPPORT +kmod-ptp +kmod-hwmon-core +kmod-libie +kmod-libie-adminq +kmod-libie-fwlog + KCONFIG:=CONFIG_ICE \ + CONFIG_ICE_HWMON=y \ + CONFIG_ICE_HWTS=n \ + CONFIG_ICE_SWITCHDEV=y + FILES:=$(LINUX_DIR)/drivers/net/ethernet/intel/ice/ice.ko + AUTOLOAD:=$(call AutoProbe,ice) +endef + +define KernelPackage/ice/description + Kernel modules for Intel(R) Ethernet Controller E810 Series +endef + +$(eval $(call KernelPackage,ice)) + + define KernelPackage/iavf SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Intel(R) Ethernet Adaptive Virtual Function support - DEPENDS:=@PCI_SUPPORT + DEPENDS:=@PCI_SUPPORT +kmod-libie +kmod-libeth +kmod-libie-adminq +kmod-ptp KCONFIG:= \ CONFIG_I40EVF \ CONFIG_IAVF FILES:= \ $(LINUX_DIR)/drivers/net/ethernet/intel/iavf/iavf.ko - AUTOLOAD:=$(call AutoProbe,i40evf iavf) AUTOLOAD:=$(call AutoProbe,iavf) endef @@ -1282,23 +1736,6 @@ endef $(eval $(call KernelPackage,vmxnet3)) -define KernelPackage/spi-ks8995 - SUBMENU:=$(NETWORK_DEVICES_MENU) - TITLE:=Micrel/Kendin KS8995 Ethernet switch control - FILES:=$(LINUX_DIR)/drivers/net/phy/spi_ks8995.ko - KCONFIG:=CONFIG_MICREL_KS8995MA \ - CONFIG_SPI=y \ - CONFIG_SPI_MASTER=y - AUTOLOAD:=$(call AutoLoad,50,spi_ks8995) -endef - -define KernelPackage/spi-ks8995/description - Kernel module for Micrel/Kendin KS8995 ethernet switch -endef - -$(eval $(call KernelPackage,spi-ks8995)) - - define KernelPackage/ethoc SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Opencore.org ethoc driver @@ -1348,6 +1785,28 @@ endef $(eval $(call KernelPackage,bnx2x)) +define KernelPackage/bnxt-en + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Broadcom NetXtreme-C/E network driver + DEPENDS:=@PCI_SUPPORT +kmod-hwmon-core +kmod-lib-crc32c +kmod-mdio +kmod-ptp + FILES:=$(LINUX_DIR)/drivers/net/ethernet/broadcom/bnxt/bnxt_en.ko + KCONFIG:= \ + CONFIG_BNXT \ + CONFIG_BNXT_SRIOV=y \ + CONFIG_BNXT_FLOWER_OFFLOAD=y \ + CONFIG_BNXT_DCB=y \ + CONFIG_BNXT_HWMON=y + AUTOLOAD:=$(call AutoProbe,bnxt_en) +endef + +define KernelPackage/bnxt-en/description + Supports Broadcom NetXtreme-C/E based Ethernet NICs including: + * BCM573xx + * BCM574xx +endef + +$(eval $(call KernelPackage,bnxt-en)) + define KernelPackage/be2net SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Broadcom Emulex OneConnect 10Gbps NIC @@ -1377,11 +1836,11 @@ define KernelPackage/mlx4-core $(LINUX_DIR)/drivers/net/ethernet/mellanox/mlx4/mlx4_core.ko \ $(LINUX_DIR)/drivers/net/ethernet/mellanox/mlx4/mlx4_en.ko KCONFIG:= CONFIG_MLX4_EN \ - CONFIG_MLX4_EN_DCB=n \ + CONFIG_MLX4_EN_DCB=y \ CONFIG_MLX4_CORE=y \ CONFIG_MLX4_CORE_GEN2=y \ CONFIG_MLX4_DEBUG=n - AUTOLOAD:=$(call AutoProbe,mlx4_core mlx4_en) + AUTOLOAD:=$(call AutoLoad,45,mlx4_core mlx4_en,1) endef define KernelPackage/mlx4-core/description @@ -1393,11 +1852,11 @@ $(eval $(call KernelPackage,mlx4-core)) define KernelPackage/mlx5-core SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Mellanox ConnectX(R) mlx5 core Network Driver - DEPENDS:=@PCI_SUPPORT +kmod-ptp +kmod-mlxfw +LINUX_6_6:kmod-hwmon-core + DEPENDS:=@PCI_SUPPORT +kmod-ptp +kmod-mlxfw +kmod-hwmon-core FILES:=$(LINUX_DIR)/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko KCONFIG:= CONFIG_MLX5_CORE \ CONFIG_MLX5_CORE_EN=y \ - CONFIG_MLX5_CORE_EN_DCB=n \ + CONFIG_MLX5_CORE_EN_DCB=y \ CONFIG_MLX5_CORE_IPOIB=n \ CONFIG_MLX5_EN_ARFS=n \ CONFIG_MLX5_EN_IPSEC=n \ @@ -1412,7 +1871,7 @@ define KernelPackage/mlx5-core CONFIG_MLX5_TC_CT=n \ CONFIG_MLX5_TLS=n \ CONFIG_MLX5_VFIO_PCI=n - AUTOLOAD:=$(call AutoProbe,mlx5_core) + AUTOLOAD:=$(call AutoLoad,45,mlx5_core,1) endef define KernelPackage/mlx5-core/description @@ -1476,7 +1935,7 @@ $(eval $(call KernelPackage,mlxsw-i2c)) define KernelPackage/mlxsw-minimal SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Mellanox Technologies minimal I2C support - DEPENDS:=+kmod-mlxsw-core +kmod-mlxsw-i2c + DEPENDS:=+kmod-mlxsw-i2c FILES:=$(LINUX_DIR)/drivers/net/ethernet/mellanox/mlxsw/mlxsw_minimal.ko KCONFIG:=CONFIG_MLXSW_MINIMAL AUTOLOAD:=$(call AutoProbe,mlxsw_minimal) @@ -1510,20 +1969,12 @@ define KernelPackage/mlxsw-spectrum SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Mellanox Technologies Spectrum family support DEPENDS:= \ - +kmod-mlxsw-core +kmod-mlxsw-pci +kmod-lib-objagg +kmod-lib-parman \ + +kmod-mlxsw-pci +kmod-lib-objagg +kmod-lib-parman \ +kmod-ip6-tunnel +kmod-ptp +kmod-sched-act-sample +kmod-vxlan FILES:=$(LINUX_DIR)/drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko KCONFIG:= \ CONFIG_MLXSW_SPECTRUM \ - CONFIG_NET_SWITCHDEV=y \ - CONFIG_MLXSW_SPECTRUM_DCB=y \ - CONFIG_DCB=y \ - CONFIG_AMD_XGBE_DCB=n \ - CONFIG_IXGBE_DCB=n \ - CONFIG_I40E_DCB=n \ - CONFIG_QLCNIC_DCB=n \ - CONFIG_FSL_DPAA2_ETH_DCB=n \ - CONFIG_FSL_DPAA2_SWITCH=n + CONFIG_MLXSW_SPECTRUM_DCB=y AUTOLOAD:=$(call AutoProbe,mlxsw_spectrum) endef @@ -1532,6 +1983,13 @@ define KernelPackage/mlxsw-spectrum/description Spectrum/Spectrum-2/Spectrum-3/Spectrum-4 Ethernet Switch ASICs. endef +define KernelPackage/mlxsw-spectrum/install + $(INSTALL_DIR) $(1)/etc/hotplug.d/net + $(INSTALL_DATA) \ + ./files/hotplug-mlxsw-spectrum-port-names.sh \ + $(1)/etc/hotplug.d/net/10-mlxsw-spectrum-port-names +endef + $(eval $(call KernelPackage,mlxsw-spectrum)) @@ -1590,11 +2048,21 @@ endef $(eval $(call KernelPackage,sfp)) +define KernelPackage/pcs-qcom-ipq9574 + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Qualcomm IPQ9574 PCS driver + DEPENDS:=@TARGET_qualcommbe +kmod-phylink + KCONFIG:=CONFIG_PCS_QCOM_IPQ9574 + FILES:=$(LINUX_DIR)/drivers/net/pcs/pcs-qcom-ipq9574.ko + AUTOLOAD:=$(call AutoProbe,pcs-qcom-ipq9574) +endef + +$(eval $(call KernelPackage,pcs-qcom-ipq9574)) define KernelPackage/pcs-xpcs SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Synopsis DesignWare PCS driver - DEPENDS:=+kmod-phylink + DEPENDS:=+kmod-phylink +kmod-mdio-devres KCONFIG:=CONFIG_PCS_XPCS FILES:=$(LINUX_DIR)/drivers/net/pcs/pcs_xpcs.ko AUTOLOAD:=$(call AutoLoad,20,pcs_xpcs) @@ -1606,7 +2074,7 @@ $(eval $(call KernelPackage,pcs-xpcs)) define KernelPackage/stmmac-core SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Synopsis Ethernet Controller core (NXP,STMMicro,others) - DEPENDS:=@TARGET_x86_64||TARGET_armsr_armv8 +kmod-pcs-xpcs +LINUX_6_6:kmod-of-mdio +kmod-ptp + DEPENDS:=@TARGET_x86_64||TARGET_armsr +kmod-pcs-xpcs +kmod-of-mdio +kmod-ptp KCONFIG:=CONFIG_STMMAC_ETH \ CONFIG_STMMAC_SELFTESTS=n \ CONFIG_STMMAC_PLATFORM \ @@ -1627,7 +2095,7 @@ define KernelPackage/igc DEPENDS:=@PCI_SUPPORT +kmod-ptp KCONFIG:=CONFIG_IGC FILES:=$(LINUX_DIR)/drivers/net/ethernet/intel/igc/igc.ko - AUTOLOAD:=$(call AutoProbe,igc) + AUTOLOAD:=$(call AutoLoad,34,igc,1) endef define KernelPackage/igc/description @@ -1675,12 +2143,33 @@ endef $(eval $(call KernelPackage,sfc-falcon)) +define KernelPackage/sfc-siena + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Solarflare SFN5000/6000 'Siena' based card support + DEPENDS:=@PCI_SUPPORT +kmod-mdio +kmod-lib-crc32c +kmod-i2c-algo-bit +kmod-ptp +kmod-hwmon-core + KCONFIG:= \ + CONFIG_SFC_SIENA \ + CONFIG_SFC_SIENA_MTD=y \ + CONFIG_SFC_SIENA_MCDI_MON=y \ + CONFIG_SFC_SIENA_MCDI_LOGGING=y \ + CONFIG_SFC_SIENA_SRIOV=y + FILES:=$(LINUX_DIR)/drivers/net/ethernet/sfc/siena/sfc-siena.ko + AUTOLOAD:=$(call AutoProbe,sfc-siena) +endef + +define KernelPackage/sfc-siena/description + Solarflare SFN5000/6000 'Siena' based card support +endef + +$(eval $(call KernelPackage,sfc-siena)) + + define KernelPackage/wwan SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=WWAN Driver Core KCONFIG:= \ CONFIG_WWAN \ - CONFIG_WWAN_DEBUGFS=y@ge5.17 + CONFIG_WWAN_DEBUGFS=y FILES:=$(LINUX_DIR)/drivers/net/wwan/wwan.ko AUTOLOAD:=$(call AutoProbe,wwan) endef @@ -1743,7 +2232,7 @@ $(eval $(call KernelPackage,mhi-wwan-mbim)) define KernelPackage/mtk-t7xx SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=MediaTek T7xx 5G modem - DEPENDS:=@!LINUX_5_15 @PCI_SUPPORT +kmod-wwan + DEPENDS:=@PCI_SUPPORT +kmod-wwan KCONFIG:=CONFIG_MTK_T7XX FILES:=$(LINUX_DIR)/drivers/net/wwan/t7xx/mtk_t7xx.ko AUTOLOAD:=$(call AutoProbe,mtk_t7xx) @@ -1775,7 +2264,7 @@ $(eval $(call KernelPackage,atlantic)) define KernelPackage/lan743x SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Microchip LAN743x PCI Express Gigabit Ethernet NIC - DEPENDS:=@PCI_SUPPORT +kmod-ptp +kmod-mdio-devres +!LINUX_6_1:kmod-fixed-phy + DEPENDS:=@PCI_SUPPORT +kmod-ptp +kmod-mdio-devres +kmod-fixed-phy +kmod-phylink KCONFIG:=CONFIG_LAN743X FILES:=$(LINUX_DIR)/drivers/net/ethernet/microchip/lan743x.ko AUTOLOAD:=$(call AutoProbe,lan743x) @@ -1790,6 +2279,7 @@ $(eval $(call KernelPackage,lan743x)) define KernelPackage/amazon-ena SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Elastic Network Adapter (for Amazon AWS) + DEPENDS:=+kmod-ptp KCONFIG:=CONFIG_ENA_ETHERNET FILES:=$(LINUX_DIR)/drivers/net/ethernet/amazon/ena/ena.ko AUTOLOAD:=$(call AutoLoad,12,ena) @@ -1806,7 +2296,7 @@ $(eval $(call KernelPackage,amazon-ena)) define KernelPackage/ngbe SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=Wangxun(R) GbE PCI Express adapters support - DEPENDS:=@PCI_SUPPORT +kmod-libwx + DEPENDS:=@PCI_SUPPORT +kmod-libwx kmod-mdio-devres KCONFIG:=CONFIG_NGBE FILES:=$(LINUX_DIR)/drivers/net/ethernet/wangxun/ngbe/ngbe.ko AUTOLOAD:=$(call AutoProbe,ngbe) diff --git a/openwrt/patch/openwrt-6.x/modules/netfilter.mk b/openwrt/patch/openwrt-6.x/modules/netfilter.mk index 8bf2be585..a6cca3b09 100644 --- a/openwrt/patch/openwrt-6.x/modules/netfilter.mk +++ b/openwrt/patch/openwrt-6.x/modules/netfilter.mk @@ -51,10 +51,30 @@ endef $(eval $(call KernelPackage,nf-conncount)) + +define KernelPackage/iptables + SUBMENU:=$(NF_MENU) + TITLE:=Iptables legacy + KCONFIG:= \ + CONFIG_IP_NF_IPTABLES_LEGACY \ + CONFIG_NETFILTER_XTABLES \ + CONFIG_NETFILTER_XTABLES_LEGACY=y \ + CONFIG_IP6_NF_IPTABLES_LEGACY \ + CONFIG_BRIDGE_NF_EBTABLES_LEGACY + FILES:= \ + $(LINUX_DIR)/net/ipv4/netfilter/ip_tables.ko \ + $(LINUX_DIR)/net/netfilter/x_tables.ko + AUTOLOAD:=$(call AutoProbe,$(notdir ip_tables x_tables)) +endef + +$(eval $(call KernelPackage,iptables)) + + define KernelPackage/nf-ipt SUBMENU:=$(NF_MENU) TITLE:=Iptables core KCONFIG:=$(KCONFIG_NF_IPT) + DEPENDS:=+kmod-iptables FILES:=$(foreach mod,$(NF_IPT-m),$(LINUX_DIR)/net/$(mod).ko) AUTOLOAD:=$(call AutoProbe,$(notdir $(NF_IPT-m))) endef @@ -440,7 +460,7 @@ IPVS_MODULES:= \ define KernelPackage/nf-ipvs SUBMENU:=Netfilter Extensions TITLE:=IP Virtual Server modules - DEPENDS:=@IPV6 +kmod-lib-crc32c +kmod-ipt-conntrack +kmod-nf-conntrack + DEPENDS:=@IPV6 +kmod-ipt-conntrack +kmod-nf-conntrack KCONFIG:= \ CONFIG_IP_VS \ CONFIG_IP_VS_IPV6=y \ @@ -818,27 +838,6 @@ endef $(eval $(call KernelPackage,ipt-cluster)) -define KernelPackage/ipt-clusterip - TITLE:=Module for CLUSTERIP - KCONFIG:=$(KCONFIG_IPT_CLUSTERIP) - FILES:=$(foreach mod,$(IPT_CLUSTERIP-m),$(LINUX_DIR)/net/$(mod).ko) - AUTOLOAD:=$(call AutoProbe,$(notdir $(IPT_CLUSTERIP-m))) - $(call AddDepends/ipt,+kmod-nf-conntrack @LINUX_5_15||LINUX_6_1) -endef - -define KernelPackage/ipt-clusterip/description - Netfilter (IPv4-only) module for CLUSTERIP - The CLUSTERIP target allows you to build load-balancing clusters of - network servers without having a dedicated load-balancing - router/server/switch. - - To use it also enable iptables-mod-clusterip - - see `iptables -j CLUSTERIP --help` for more information. -endef - -$(eval $(call KernelPackage,ipt-clusterip)) - define KernelPackage/ipt-extra TITLE:=Extra modules @@ -1069,6 +1068,40 @@ endef $(eval $(call KernelPackage,nfnetlink-queue)) +define KernelPackage/nfnetlink-cthelper + TITLE:=Netfilter User space conntrack helpers + FILES:=$(LINUX_DIR)/net/netfilter/nfnetlink_cthelper.ko + KCONFIG:=CONFIG_NF_CT_NETLINK_HELPER + AUTOLOAD:=$(call AutoProbe,nfnetlink_cthelper) + $(call AddDepends/nfnetlink,+kmod-nfnetlink-queue +kmod-nf-conntrack-netlink) +endef + +define KernelPackage/nfnetlink-cthelper/description + Kernel modules support for a netlink-based connection tracking + userspace helpers interface +endef + +$(eval $(call KernelPackage,nfnetlink-cthelper)) + + +define KernelPackage/nfnetlink-cttimeout + TITLE:=Netfilter conntrack expectation timeout + FILES:=$(LINUX_DIR)/net/netfilter/nfnetlink_cttimeout.ko + KCONFIG:=CONFIG_NF_CT_NETLINK_TIMEOUT + AUTOLOAD:=$(call AutoProbe,nfnetlink_cttimeout) + $(call AddDepends/nfnetlink,+kmod-nf-conntrack @KERNEL_NF_CONNTRACK_TIMEOUT) +endef + +define KernelPackage/nfnetlink-cttimeout/description + Kernel modules support for a netlink-based connection tracking + userspace timeout interface + + Requires CONFIG_NF_CONNTRACK_TIMEOUT (only enabled for non-small flash devices) +endef + +$(eval $(call KernelPackage,nfnetlink-cttimeout)) + + define KernelPackage/nf-conntrack-netlink TITLE:=Connection tracking netlink interface FILES:=$(LINUX_DIR)/net/netfilter/nf_conntrack_netlink.ko @@ -1122,7 +1155,7 @@ $(eval $(call KernelPackage,ipt-rpfilter)) define KernelPackage/nft-core SUBMENU:=$(NF_MENU) TITLE:=Netfilter nf_tables support - DEPENDS:=+kmod-nfnetlink +kmod-nf-reject +IPV6:kmod-nf-reject6 +IPV6:kmod-nf-conntrack6 +kmod-nf-nat +kmod-nf-log +IPV6:kmod-nf-log6 +kmod-lib-crc32c + DEPENDS:=+kmod-nfnetlink +kmod-nf-reject +IPV6:kmod-nf-reject6 +IPV6:kmod-nf-conntrack6 +kmod-nf-nat +kmod-nf-log +IPV6:kmod-nf-log6 FILES:=$(foreach mod,$(NFT_CORE-m),$(LINUX_DIR)/net/$(mod).ko) AUTOLOAD:=$(call AutoProbe,$(notdir $(NFT_CORE-m))) KCONFIG:= \ @@ -1197,15 +1230,11 @@ define KernelPackage/nft-offload DEPENDS:=@IPV6 +kmod-nf-flow +kmod-nft-nat KCONFIG:= \ CONFIG_NF_FLOW_TABLE_INET \ - CONFIG_NF_FLOW_TABLE_IPV4@lt5.17 \ - CONFIG_NF_FLOW_TABLE_IPV6@lt5.17 \ CONFIG_NFT_FLOW_OFFLOAD FILES:= \ $(LINUX_DIR)/net/netfilter/nf_flow_table_inet.ko \ - $(LINUX_DIR)/net/ipv4/netfilter/nf_flow_table_ipv4.ko@lt5.17 \ - $(LINUX_DIR)/net/ipv6/netfilter/nf_flow_table_ipv6.ko@lt5.17 \ $(LINUX_DIR)/net/netfilter/nft_flow_offload.ko - AUTOLOAD:=$(call AutoProbe,nf_flow_table_inet nf_flow_table_ipv4@lt5.17 nf_flow_table_ipv6@lt5.17 nft_flow_offload) + AUTOLOAD:=$(call AutoProbe,nf_flow_table_inet nft_flow_offload) endef $(eval $(call KernelPackage,nft-offload)) @@ -1217,6 +1246,7 @@ define KernelPackage/nft-netdev DEPENDS:=+kmod-nft-core KCONFIG:= \ CONFIG_NETFILTER_INGRESS=y \ + CONFIG_NETFILTER_EGRESS=y \ CONFIG_NF_TABLES_NETDEV \ CONFIG_NF_DUP_NETDEV \ CONFIG_NFT_DUP_NETDEV \ diff --git a/openwrt/patch/openwrt-6.x/modules/netsupport.mk b/openwrt/patch/openwrt-6.x/modules/netsupport.mk index ac455287e..46bb81c1a 100644 --- a/openwrt/patch/openwrt-6.x/modules/netsupport.mk +++ b/openwrt/patch/openwrt-6.x/modules/netsupport.mk @@ -42,6 +42,24 @@ endef $(eval $(call KernelPackage,atmtcp)) +define KernelPackage/appletalk + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=Appletalk protocol support + KCONFIG:= \ + CONFIG_ATALK \ + CONFIG_DEV_APPLETALK \ + CONFIG_IPDDP=n + FILES:=$(LINUX_DIR)/net/appletalk/appletalk.ko + AUTOLOAD:=$(call AutoLoad,40,appletalk) +endef + +define KernelPackage/appletalk/description + Kernel module for AppleTalk protocol. +endef + +$(eval $(call KernelPackage,appletalk)) + + define KernelPackage/bonding SUBMENU:=$(NETWORK_SUPPORT_MENU) TITLE:=Ethernet bonding driver @@ -760,22 +778,6 @@ endef $(eval $(call KernelPackage,sched-act-sample)) -define KernelPackage/sched-act-ipt - SUBMENU:=$(NETWORK_SUPPORT_MENU) - TITLE:=IPtables targets - DEPENDS:=+kmod-ipt-core +kmod-sched-core - KCONFIG:=CONFIG_NET_ACT_IPT - FILES:=$(LINUX_DIR)/net/sched/act_ipt.ko - AUTOLOAD:=$(call AutoProbe, act_ipt) -endef - -define KernelPackage/sched-act-ipt/description - Allows to invoke iptables targets after successful classification. -endef - -$(eval $(call KernelPackage,sched-act-ipt)) - - define KernelPackage/sched-act-vlan SUBMENU:=$(NETWORK_SUPPORT_MENU) TITLE:=Traffic VLAN manipulation @@ -910,7 +912,6 @@ $(eval $(call KernelPackage,sched-ipset)) define KernelPackage/sched-mqprio-common SUBMENU:=$(NETWORK_SUPPORT_MENU) TITLE:=mqprio queue common dependencies support - DEPENDS:=@LINUX_6_6 HIDDEN:=1 KCONFIG:=CONFIG_NET_SCH_MQPRIO_LIB FILES:=$(LINUX_DIR)/net/sched/sch_mqprio_lib.ko @@ -926,7 +927,7 @@ $(eval $(call KernelPackage,sched-mqprio-common)) define KernelPackage/sched-mqprio SUBMENU:=$(NETWORK_SUPPORT_MENU) TITLE:=Multi-queue priority scheduler (MQPRIO) - DEPENDS:=+kmod-sched-core +LINUX_6_6:kmod-sched-mqprio-common + DEPENDS:=+kmod-sched-core +kmod-sched-mqprio-common KCONFIG:=CONFIG_NET_SCH_MQPRIO FILES:=$(LINUX_DIR)/net/sched/sch_mqprio.ko AUTOLOAD:=$(call AutoProbe, sch_mqprio) @@ -1009,13 +1010,13 @@ endef $(eval $(call KernelPackage,bpf-test)) -SCHED_MODULES_EXTRA = sch_codel sch_gred sch_multiq sch_sfq sch_teql sch_fq act_pedit act_simple act_skbmod act_csum em_cmp em_nbyte em_meta em_text +SCHED_MODULES_EXTRA = sch_codel sch_gred sch_multiq sch_sfq sch_teql sch_fq sch_ets act_pedit act_simple act_skbmod act_csum em_cmp em_nbyte em_meta em_text SCHED_FILES_EXTRA = $(foreach mod,$(SCHED_MODULES_EXTRA),$(LINUX_DIR)/net/sched/$(mod).ko) define KernelPackage/sched SUBMENU:=$(NETWORK_SUPPORT_MENU) TITLE:=Extra traffic schedulers - DEPENDS:=+kmod-sched-core +kmod-lib-crc32c +kmod-lib-textsearch + DEPENDS:=+kmod-sched-core +kmod-lib-textsearch KCONFIG:= \ CONFIG_NET_SCH_CODEL \ CONFIG_NET_SCH_GRED \ @@ -1023,6 +1024,7 @@ define KernelPackage/sched CONFIG_NET_SCH_SFQ \ CONFIG_NET_SCH_TEQL \ CONFIG_NET_SCH_FQ \ + CONFIG_NET_SCH_ETS \ CONFIG_NET_ACT_PEDIT \ CONFIG_NET_ACT_SIMP \ CONFIG_NET_ACT_SKBMOD \ @@ -1232,10 +1234,11 @@ define KernelPackage/sctp CONFIG_SCTP_COOKIE_HMAC_MD5=y \ CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE=n \ CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=n \ + CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA256=n \ CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y FILES:= $(LINUX_DIR)/net/sctp/sctp.ko AUTOLOAD:= $(call AutoLoad,32,sctp) - DEPENDS:=+kmod-lib-crc32c +kmod-crypto-md5 +kmod-crypto-hmac \ + DEPENDS:=+kmod-crypto-md5 +kmod-crypto-hmac \ +kmod-udptunnel4 +kmod-udptunnel6 endef @@ -1359,10 +1362,11 @@ $(eval $(call KernelPackage,mpls)) define KernelPackage/9pnet SUBMENU:=$(NETWORK_SUPPORT_MENU) TITLE:=Plan 9 Resource Sharing Support (9P2000) + DEPENDS:=+kmod-fs-netfs KCONFIG:= \ CONFIG_NET_9P \ CONFIG_NET_9P_DEBUG=n \ - CONFIG_NET_9P_FD=n@ge5.17 + CONFIG_NET_9P_FD=n FILES:= \ $(LINUX_DIR)/net/9p/9pnet.ko AUTOLOAD:=$(call AutoLoad,29,9pnet) @@ -1496,6 +1500,23 @@ endef $(eval $(call KernelPackage,inet-diag)) +define KernelPackage/inet-mptcp-diag + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=INET diag support for MultiPath TCP + DEPENDS:=@KERNEL_MPTCP +kmod-inet-diag + KCONFIG:=CONFIG_INET_MPTCP_DIAG + FILES:=$(LINUX_DIR)/net/mptcp/mptcp_diag.ko + AUTOLOAD:=$(call AutoProbe,mptcp_diag) +endef + +define KernelPackage/inet-mptcp-diag/description +Support for INET (MultiPath TCP) socket monitoring interface used by +native Linux tools such as ss. +endef + +$(eval $(call KernelPackage,inet-mptcp-diag)) + + define KernelPackage/xdp-sockets-diag SUBMENU:=$(NETWORK_SUPPORT_MENU) TITLE:=PF_XDP sockets monitoring interface support for ss utility @@ -1615,3 +1636,88 @@ define KernelPackage/qrtr-mhi/description endef $(eval $(call KernelPackage,qrtr-mhi)) + +define KernelPackage/unix-diag + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=UNIX socket monitoring interface + KCONFIG:=CONFIG_UNIX_DIAG + FILES:= $(LINUX_DIR)/net/unix/unix_diag.ko + AUTOLOAD:=$(call AutoProbe,unix_diag) +endef + +$(eval $(call KernelPackage,unix-diag)) + +define KernelPackage/packet-diag + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=Packet sockets monitoring interface + KCONFIG:=CONFIG_PACKET_DIAG + FILES:= $(LINUX_DIR)/net/packet/af_packet_diag.ko + AUTOLOAD:=$(call AutoProbe,af_packet_diag) +endef + +$(eval $(call KernelPackage,packet-diag)) + +define KernelPackage/team + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=Ethernet team driver + KCONFIG:=CONFIG_NET_TEAM + FILES:=$(LINUX_DIR)/drivers/net/team/team.ko + AUTOLOAD:=$(call AutoProbe,team) +endef + +$(eval $(call KernelPackage,team)) + +define KernelPackage/team-mode-broadcast + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=Broadcast mode support + DEPENDS:=kmod-team + KCONFIG:=CONFIG_NET_TEAM_MODE_BROADCAST + FILES:=$(LINUX_DIR)/drivers/net/team/team_mode_broadcast.ko + AUTOLOAD:=$(call AutoProbe,team_mode_broadcast) +endef + +$(eval $(call KernelPackage,team-mode-broadcast)) + +define KernelPackage/team-mode-roundrobin + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=Round-robin mode support + DEPENDS:=kmod-team + KCONFIG:=CONFIG_NET_TEAM_MODE_ROUNDROBIN + FILES:=$(LINUX_DIR)/drivers/net/team/team_mode_roundrobin.ko + AUTOLOAD:=$(call AutoProbe,team_mode_roundrobin) +endef + +$(eval $(call KernelPackage,team-mode-roundrobin)) + +define KernelPackage/team-mode-random + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=Random mode support + DEPENDS:=kmod-team + KCONFIG:=CONFIG_NET_TEAM_MODE_RANDOM + FILES:=$(LINUX_DIR)/drivers/net/team/team_mode_random.ko + AUTOLOAD:=$(call AutoProbe,team_mode_random) +endef + +$(eval $(call KernelPackage,team-mode-random)) + +define KernelPackage/team-mode-activebackup + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=Active-backup mode support + DEPENDS:=kmod-team + KCONFIG:=CONFIG_NET_TEAM_MODE_ACTIVEBACKUP + FILES:=$(LINUX_DIR)/drivers/net/team/team_mode_activebackup.ko + AUTOLOAD:=$(call AutoProbe,team_mode_activebackup) +endef + +$(eval $(call KernelPackage,team-mode-activebackup)) + +define KernelPackage/team-mode-loadbalance + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=Load-balance mode support + DEPENDS:=kmod-team + KCONFIG:=CONFIG_NET_TEAM_MODE_LOADBALANCE + FILES:=$(LINUX_DIR)/drivers/net/team/team_mode_loadbalance.ko + AUTOLOAD:=$(call AutoProbe,team_mode_loadbalance) +endef + +$(eval $(call KernelPackage,team-mode-loadbalance)) diff --git a/openwrt/patch/openwrt-6.x/modules/nls.mk b/openwrt/patch/openwrt-6.x/modules/nls.mk index 893ec9c23..e4817af61 100644 --- a/openwrt/patch/openwrt-6.x/modules/nls.mk +++ b/openwrt/patch/openwrt-6.x/modules/nls.mk @@ -344,7 +344,6 @@ $(eval $(call KernelPackage,nls-utf8)) define KernelPackage/nls-ucs2-utils SUBMENU:=Native Language Support TITLE:=UCS-2 common library - DEPENDS+=@LINUX_6_6 HIDDEN:=1 KCONFIG:=CONFIG_NLS_UCS2_UTILS FILES:=$(LINUX_DIR)/fs/nls/nls_ucs2_utils.ko diff --git a/openwrt/patch/openwrt-6.x/modules/other.mk b/openwrt/patch/openwrt-6.x/modules/other.mk index e27e036e0..bb642bdf8 100644 --- a/openwrt/patch/openwrt-6.x/modules/other.mk +++ b/openwrt/patch/openwrt-6.x/modules/other.mk @@ -27,120 +27,6 @@ endef $(eval $(call KernelPackage,6lowpan)) -define KernelPackage/bluetooth - SUBMENU:=$(OTHER_MENU) - TITLE:=Bluetooth support - DEPENDS:=@USB_SUPPORT +kmod-usb-core +kmod-crypto-hash +kmod-crypto-ecb +kmod-lib-crc16 +kmod-hid +kmod-crypto-cmac +kmod-regmap-core +kmod-crypto-ecdh - KCONFIG:= \ - CONFIG_BT \ - CONFIG_BT_BREDR=y \ - CONFIG_BT_DEBUGFS=n \ - CONFIG_BT_LE=y \ - CONFIG_BT_RFCOMM \ - CONFIG_BT_BNEP \ - CONFIG_BT_HCIBTUSB \ - CONFIG_BT_HCIBTUSB_BCM=n \ - CONFIG_BT_HCIBTUSB_MTK=y \ - CONFIG_BT_HCIBTUSB_RTL=y \ - CONFIG_BT_HCIUART \ - CONFIG_BT_HCIUART_BCM=n \ - CONFIG_BT_HCIUART_INTEL=n \ - CONFIG_BT_HCIUART_H4 \ - CONFIG_BT_HCIUART_NOKIA=n \ - CONFIG_BT_HIDP - $(call AddDepends/rfkill) - FILES:= \ - $(LINUX_DIR)/net/bluetooth/bluetooth.ko \ - $(LINUX_DIR)/net/bluetooth/rfcomm/rfcomm.ko \ - $(LINUX_DIR)/net/bluetooth/bnep/bnep.ko \ - $(LINUX_DIR)/net/bluetooth/hidp/hidp.ko \ - $(LINUX_DIR)/drivers/bluetooth/hci_uart.ko \ - $(LINUX_DIR)/drivers/bluetooth/btusb.ko \ - $(LINUX_DIR)/drivers/bluetooth/btintel.ko \ - $(LINUX_DIR)/drivers/bluetooth/btrtl.ko \ - $(LINUX_DIR)/drivers/bluetooth/btmtk.ko@ge5.17 - AUTOLOAD:=$(call AutoProbe,bluetooth rfcomm bnep hidp hci_uart btusb) -endef - -define KernelPackage/bluetooth/description - Kernel support for Bluetooth devices -endef - -$(eval $(call KernelPackage,bluetooth)) - -define KernelPackage/ath3k - SUBMENU:=$(OTHER_MENU) - TITLE:=ATH3K Kernel Module support - DEPENDS:=+kmod-bluetooth +ar3k-firmware - KCONFIG:= \ - CONFIG_BT_ATH3K \ - CONFIG_BT_HCIUART_ATH3K=y - FILES:= \ - $(LINUX_DIR)/drivers/bluetooth/ath3k.ko - AUTOLOAD:=$(call AutoProbe,ath3k) -endef - -define KernelPackage/ath3k/description - Kernel support for ATH3K Module -endef - -$(eval $(call KernelPackage,ath3k)) - - -define KernelPackage/bluetooth-6lowpan - SUBMENU:=$(OTHER_MENU) - TITLE:=Bluetooth 6LoWPAN support - DEPENDS:=+kmod-6lowpan +kmod-bluetooth - KCONFIG:=CONFIG_BT_6LOWPAN - FILES:=$(LINUX_DIR)/net/bluetooth/bluetooth_6lowpan.ko - AUTOLOAD:=$(call AutoProbe,bluetooth_6lowpan) -endef - -define KernelPackage/bluetooth-6lowpan/description - Kernel support for 6LoWPAN over Bluetooth Low Energy devices -endef - -$(eval $(call KernelPackage,bluetooth-6lowpan)) - - -define KernelPackage/btmrvl - SUBMENU:=$(OTHER_MENU) - TITLE:=Marvell Bluetooth Kernel Module support - DEPENDS:=+kmod-mmc +kmod-bluetooth +mwifiex-sdio-firmware - KCONFIG:= \ - CONFIG_BT_MRVL \ - CONFIG_BT_MRVL_SDIO - FILES:= \ - $(LINUX_DIR)/drivers/bluetooth/btmrvl.ko \ - $(LINUX_DIR)/drivers/bluetooth/btmrvl_sdio.ko - AUTOLOAD:=$(call AutoProbe,btmrvl btmrvl_sdio) -endef - -define KernelPackage/btmrvl/description - Kernel support for Marvell SDIO Bluetooth Module -endef - -$(eval $(call KernelPackage,btmrvl)) - - -define KernelPackage/btsdio - SUBMENU:=$(OTHER_MENU) - TITLE:=Bluetooth HCI SDIO driver - DEPENDS:=+kmod-bluetooth +kmod-mmc - KCONFIG:= \ - CONFIG_BT_HCIBTSDIO - FILES:= \ - $(LINUX_DIR)/drivers/bluetooth/btsdio.ko - AUTOLOAD:=$(call AutoProbe,btsdio) -endef - -define KernelPackage/btsdio/description - Kernel support for Bluetooth device with SDIO interface -endef - -$(eval $(call KernelPackage,btsdio)) - - define KernelPackage/dma-buf SUBMENU:=$(OTHER_MENU) TITLE:=DMA shared buffer support @@ -148,7 +34,7 @@ define KernelPackage/dma-buf KCONFIG:=CONFIG_DMA_SHARED_BUFFER ifeq ($(strip $(CONFIG_EXTERNAL_KERNEL_TREE)),"") ifeq ($(strip $(CONFIG_KERNEL_GIT_CLONE_URI)),"") - FILES:=$(LINUX_DIR)/drivers/dma-buf/dma-shared-buffer.ko + FILES:=$(LINUX_DIR)/drivers/dma-buf/dma-shared-buffer.ko@lt6.18 endif endif AUTOLOAD:=$(call AutoLoad,20,dma-shared-buffer) @@ -228,22 +114,6 @@ endef $(eval $(call KernelPackage,google-firmware)) -define KernelPackage/gpio-f7188x - SUBMENU:=$(OTHER_MENU) - TITLE:=Fintek F718xx/F818xx GPIO Support - DEPENDS:=@GPIO_SUPPORT @TARGET_x86 - KCONFIG:=CONFIG_GPIO_F7188X - FILES:=$(LINUX_DIR)/drivers/gpio/gpio-f7188x.ko - AUTOLOAD:=$(call AutoProbe,gpio-f7188x) -endef - -define KernelPackage/gpio-f7188x/description - Kernel module for the GPIOs found on many Fintek Super-IO chips. -endef - -$(eval $(call KernelPackage,gpio-f7188x)) - - define KernelPackage/lkdtm SUBMENU:=$(OTHER_MENU) TITLE:=Linux Kernel Dump Test Tool Module @@ -260,11 +130,99 @@ endef $(eval $(call KernelPackage,lkdtm)) +define KernelPackage/mlx_wdt + SUBMENU:=$(OTHER_MENU) + TITLE:=Mellanox Watchdog + DEPENDS:=@TARGET_x86 +kmod-regmap-core + KCONFIG:= \ + CONFIG_MELLANOX_PLATFORM=y \ + CONFIG_MLX_WDT + FILES:=$(LINUX_DIR)/drivers/watchdog/mlx_wdt.ko + AUTOLOAD:=$(call AutoProbe,mlx_wdt) +endef + +define KernelPackage/mlx_wdt/description + This is the driver for the hardware watchdog on Mellanox systems. + This driver can be used together with the watchdog daemon. + It can also watch your kernel to make sure it doesn't freeze, + and if it does, it reboots your system after a certain amount of + time. +endef + +$(eval $(call KernelPackage,mlx_wdt)) + + +define KernelPackage/mlxreg + SUBMENU:=$(OTHER_MENU) + TITLE:=Mellanox platform register access + DEPENDS:=@TARGET_x86 \ + +kmod-i2c-mux-mlxcpld \ + +kmod-i2c-mux-reg + KCONFIG:= \ + CONFIG_MELLANOX_PLATFORM=y \ + CONFIG_MLX_PLATFORM \ + CONFIG_MLXREG_HOTPLUG \ + CONFIG_MLXREG_IO \ + CONFIG_SENSORS_MLXREG_FAN \ + CONFIG_LEDS_MLXREG + FILES:= \ + $(LINUX_DIR)/drivers/platform/mellanox/mlxreg-hotplug.ko \ + $(LINUX_DIR)/drivers/platform/mellanox/mlxreg-io.ko \ + $(LINUX_DIR)/drivers/platform/mellanox/mlx-platform.ko \ + $(LINUX_DIR)/drivers/hwmon/mlxreg-fan.ko \ + $(LINUX_DIR)/drivers/leds/leds-mlxreg.ko + AUTOLOAD:=$(call AutoProbe,mlx-platform mlxreg-hotplug mlxreg-io mlxreg-fan leds-mlxreg) +endef + +define KernelPackage/mlxreg/description + Allows access to Mellanox programmable device register + space through sysfs interface. The sets of registers for sysfs access + are defined per system type bases and include the registers related + to system resets operation, system reset causes monitoring and some + kinds of mux selection. +endef + +$(eval $(call KernelPackage,mlxreg)) + + +define KernelPackage/mlxreg-lc + SUBMENU:=$(OTHER_MENU) + TITLE:=Mellanox line card platform support + DEPENDS:=kmod-mlxreg +kmod-regmap-i2c + KCONFIG:=CONFIG_MLXREG_LC + FILES:=$(LINUX_DIR)/drivers/platform/mellanox/mlxreg-lc.ko + AUTOLOAD:=$(call AutoProbe,mlxreg-lc) +endef + +define KernelPackage/mlxreg-lc/description + Provides support for the Mellanox MSN4800-XX line cards, + which are the part of MSN4800 Ethernet modular switch systems. +endef + +$(eval $(call KernelPackage,mlxreg-lc)) + + +define KernelPackage/mlxreg-sn2201 + SUBMENU:=$(OTHER_MENU) + TITLE:=Nvidia SN2201 platform support + DEPENDS:=kmod-mlxreg +kmod-regmap-i2c + KCONFIG:=CONFIG_NVSW_SN2201 + FILES:=$(LINUX_DIR)/drivers/platform/mellanox/nvsw-sn2201.ko + AUTOLOAD:=$(call AutoProbe,nvsw-sn2201) +endef + +define KernelPackage/mlxreg-sn2201/description + Provides support for the Nvidia SN2201 platform. +endef + +$(eval $(call KernelPackage,mlxreg-sn2201)) + + define KernelPackage/pinctrl-mcp23s08 SUBMENU:=$(OTHER_MENU) TITLE:=Microchip MCP23xxx I/O expander HIDDEN:=1 - DEPENDS:=@GPIO_SUPPORT +kmod-regmap-core + DEPENDS:=@GPIO_SUPPORT @PINCTRL_SUPPORT +kmod-regmap-core KCONFIG:=CONFIG_PINCTRL_MCP23S08 FILES:=$(LINUX_DIR)/drivers/pinctrl/pinctrl-mcp23s08.ko AUTOLOAD:=$(call AutoLoad,40,pinctrl-mcp23s08) @@ -312,87 +270,6 @@ endef $(eval $(call KernelPackage,pinctrl-mcp23s08-spi)) -define KernelPackage/gpio-nxp-74hc164 - SUBMENU:=$(OTHER_MENU) - TITLE:=NXP 74HC164 GPIO expander support - KCONFIG:=CONFIG_GPIO_74X164 - FILES:=$(LINUX_DIR)/drivers/gpio/gpio-74x164.ko - AUTOLOAD:=$(call AutoProbe,gpio-74x164) -endef - -define KernelPackage/gpio-nxp-74hc164/description - Kernel module for NXP 74HC164 GPIO expander -endef - -$(eval $(call KernelPackage,gpio-nxp-74hc164)) - -define KernelPackage/gpio-pca953x - SUBMENU:=$(OTHER_MENU) - DEPENDS:=@GPIO_SUPPORT +kmod-i2c-core +kmod-regmap-i2c - TITLE:=PCA95xx, TCA64xx, and MAX7310 I/O ports - KCONFIG:=CONFIG_GPIO_PCA953X - FILES:=$(LINUX_DIR)/drivers/gpio/gpio-pca953x.ko - AUTOLOAD:=$(call AutoLoad,55,gpio-pca953x) -endef - -define KernelPackage/gpio-pca953x/description - Kernel module for MAX731{0,2,3,5}, PCA6107, PCA953{4-9}, PCA955{4-7}, - PCA957{4,5} and TCA64{08,16} I2C GPIO expanders -endef - -$(eval $(call KernelPackage,gpio-pca953x)) - -define KernelPackage/gpio-pcf857x - SUBMENU:=$(OTHER_MENU) - DEPENDS:=@GPIO_SUPPORT +kmod-i2c-core - TITLE:=PCX857x, PCA967x and MAX732X I2C GPIO expanders - KCONFIG:=CONFIG_GPIO_PCF857X - FILES:=$(LINUX_DIR)/drivers/gpio/gpio-pcf857x.ko - AUTOLOAD:=$(call AutoLoad,55,gpio-pcf857x) -endef - -define KernelPackage/gpio-pcf857x/description - Kernel module for PCF857x, PCA{85,96}7x, and MAX732[89] I2C GPIO expanders -endef - -$(eval $(call KernelPackage,gpio-pcf857x)) - - -define KernelPackage/gpio-it87 - SUBMENU:=$(OTHER_MENU) - DEPENDS:=@GPIO_SUPPORT @TARGET_x86 - TITLE:=GPIO support for IT87xx Super I/O chips - KCONFIG:=CONFIG_GPIO_IT87 - FILES:=$(LINUX_DIR)/drivers/gpio/gpio-it87.ko - AUTOLOAD:=$(call AutoLoad,25,gpio-it87,1) -endef - -define KernelPackage/gpio-it87/description - This driver is tested with ITE IT8728 and IT8732 Super I/O chips, and - supports the IT8761E, IT8613, IT8620E, and IT8628E Super I/O chips as - well. -endef - -$(eval $(call KernelPackage,gpio-it87)) - - -define KernelPackage/gpio-amd-fch - SUBMENU:=$(OTHER_MENU) - DEPENDS:=@GPIO_SUPPORT @TARGET_x86 - TITLE:=GPIO support for AMD Fusion Controller Hub (G-series SOCs) - KCONFIG:=CONFIG_GPIO_AMD_FCH - FILES:=$(LINUX_DIR)/drivers/gpio/gpio-amd-fch.ko - AUTOLOAD:=$(call AutoLoad,25,gpio-amd-fch,1) -endef - -define KernelPackage/gpio-amd-fch/description - This option enables driver for GPIO on AMDs Fusion Controller Hub, - as found on G-series SOCs (eg. GX-412TC) -endef - -$(eval $(call KernelPackage,gpio-amd-fch)) - - define KernelPackage/ppdev SUBMENU:=$(OTHER_MENU) TITLE:=Parallel port support @@ -595,253 +472,6 @@ endef $(eval $(call KernelPackage,mfd)) -define KernelPackage/rtc-ds1307 - SUBMENU:=$(OTHER_MENU) - TITLE:=Dallas/Maxim DS1307 (and compatible) RTC support - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-i2c-core +kmod-regmap-i2c +kmod-hwmon-core - KCONFIG:=CONFIG_RTC_DRV_DS1307 \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-ds1307.ko - AUTOLOAD:=$(call AutoProbe,rtc-ds1307) -endef - -define KernelPackage/rtc-ds1307/description - Kernel module for Dallas/Maxim DS1307/DS1337/DS1338/DS1340/DS1388/DS3231, - Epson RX-8025 and various other compatible RTC chips connected via I2C. -endef - -$(eval $(call KernelPackage,rtc-ds1307)) - - -define KernelPackage/rtc-ds1374 - SUBMENU:=$(OTHER_MENU) - TITLE:=Dallas/Maxim DS1374 RTC support - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-i2c-core - KCONFIG:=CONFIG_RTC_DRV_DS1374 \ - CONFIG_RTC_DRV_DS1374_WDT=n \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-ds1374.ko - AUTOLOAD:=$(call AutoProbe,rtc-ds1374) -endef - -define KernelPackage/rtc-ds1374/description - Kernel module for Dallas/Maxim DS1374. -endef - -$(eval $(call KernelPackage,rtc-ds1374)) - - -define KernelPackage/rtc-ds1672 - SUBMENU:=$(OTHER_MENU) - TITLE:=Dallas/Maxim DS1672 RTC support - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-i2c-core - KCONFIG:=CONFIG_RTC_DRV_DS1672 \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-ds1672.ko - AUTOLOAD:=$(call AutoProbe,rtc-ds1672) -endef - -define KernelPackage/rtc-ds1672/description - Kernel module for Dallas/Maxim DS1672 RTC. -endef - -$(eval $(call KernelPackage,rtc-ds1672)) - - -define KernelPackage/rtc-em3027 - SUBMENU:=$(OTHER_MENU) - TITLE:=Microelectronic EM3027 RTC support - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-i2c-core - KCONFIG:=CONFIG_RTC_DRV_EM3027 \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-em3027.ko - AUTOLOAD:=$(call AutoProbe,rtc-em3027) -endef - -define KernelPackage/rtc-em3027/description - Kernel module for Microelectronic EM3027 RTC. -endef - -$(eval $(call KernelPackage,rtc-em3027)) - - -define KernelPackage/rtc-isl1208 - SUBMENU:=$(OTHER_MENU) - TITLE:=Intersil ISL1208 RTC support - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-i2c-core - KCONFIG:=CONFIG_RTC_DRV_ISL1208 \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-isl1208.ko - AUTOLOAD:=$(call AutoProbe,rtc-isl1208) -endef - -define KernelPackage/rtc-isl1208/description - Kernel module for Intersil ISL1208 RTC. -endef - -$(eval $(call KernelPackage,rtc-isl1208)) - - -define KernelPackage/rtc-mv - SUBMENU:=$(OTHER_MENU) - TITLE:=Marvell SoC RTC support - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - KCONFIG:=CONFIG_RTC_DRV_MV \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-mv.ko - AUTOLOAD:=$(call AutoProbe,rtc-mv) -endef - -define KernelPackage/rtc-mv/description - Kernel module for Marvell SoC RTC. -endef - -$(eval $(call KernelPackage,rtc-mv)) - - -define KernelPackage/rtc-pcf8563 - SUBMENU:=$(OTHER_MENU) - TITLE:=Philips PCF8563/Epson RTC8564 RTC support - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-i2c-core - KCONFIG:=CONFIG_RTC_DRV_PCF8563 \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-pcf8563.ko - AUTOLOAD:=$(call AutoProbe,rtc-pcf8563) -endef - -define KernelPackage/rtc-pcf8563/description - Kernel module for Philips PCF8563 RTC chip. - The Epson RTC8564 should work as well. -endef - -$(eval $(call KernelPackage,rtc-pcf8563)) - - -define KernelPackage/rtc-pcf2123 - SUBMENU:=$(OTHER_MENU) - TITLE:=Philips PCF2123 RTC support - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-regmap-spi - KCONFIG:=CONFIG_RTC_DRV_PCF2123 \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-pcf2123.ko - AUTOLOAD:=$(call AutoProbe,rtc-pcf2123) -endef - -define KernelPackage/rtc-pcf2123/description - Kernel module for Philips PCF2123 RTC chip -endef - -$(eval $(call KernelPackage,rtc-pcf2123)) - -define KernelPackage/rtc-pcf2127 - SUBMENU:=$(OTHER_MENU) - TITLE:=NXP PCF2127 and PCF2129 RTC support - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-i2c-core +kmod-regmap-spi - KCONFIG:=CONFIG_RTC_DRV_PCF2127 \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-pcf2127.ko - AUTOLOAD:=$(call AutoProbe,rtc-pcf2127) -endef - -define KernelPackage/rtc-pcf2127/description - Kernel module for NXP PCF2127 and PCF2129 RTC chip -endef - -$(eval $(call KernelPackage,rtc-pcf2127)) - -define KernelPackage/rtc-r7301 - SUBMENU:=$(OTHER_MENU) - TITLE:=Epson RTC7301 support - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-regmap-mmio - KCONFIG:=CONFIG_RTC_DRV_R7301 \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-r7301.ko - AUTOLOAD:=$(call AutoProbe,rtc-r7301) -endef - -define KernelPackage/rtc-r7301/description - Kernel module for Epson RTC7301 RTC chip -endef - -$(eval $(call KernelPackage,rtc-r7301)) - -define KernelPackage/rtc-rs5c372a - SUBMENU:=$(OTHER_MENU) - TITLE:=Ricoh R2025S/D, RS5C372A/B, RV5C386, RV5C387A - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-i2c-core - KCONFIG:=CONFIG_RTC_DRV_RS5C372 \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-rs5c372.ko - AUTOLOAD:=$(call AutoLoad,50,rtc-rs5c372,1) -endef - -define KernelPackage/rtc-rs5c372a/description - Kernel module for Ricoh R2025S/D, RS5C372A/B, RV5C386, RV5C387A RTC on chip module -endef - -$(eval $(call KernelPackage,rtc-rs5c372a)) - -define KernelPackage/rtc-rx8025 - SUBMENU:=$(OTHER_MENU) - TITLE:=Epson RX-8025 / RX-8035 - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-i2c-core - KCONFIG:=CONFIG_RTC_DRV_RX8025 \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-rx8025.ko - AUTOLOAD:=$(call AutoLoad,50,rtc-rx8025,1) -endef - -define KernelPackage/rtc-rx8025/description - Kernel module for Epson RX-8025 and RX-8035 I2C RTC chip -endef - -$(eval $(call KernelPackage,rtc-rx8025)) - -define KernelPackage/rtc-s35390a - SUBMENU:=$(OTHER_MENU) - TITLE:=Seico S-35390A - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-i2c-core - KCONFIG:=CONFIG_RTC_DRV_S35390A \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-s35390a.ko - AUTOLOAD:=$(call AutoLoad,50,rtc-s35390a,1) -endef - -define KernelPackage/rtc-s35390a/description - Kernel module for Seiko Instruments S-35390A I2C RTC chip -endef - -$(eval $(call KernelPackage,rtc-s35390a)) - -define KernelPackage/rtc-x1205 - SUBMENU:=$(OTHER_MENU) - TITLE:=Xicor Intersil X1205 - DEFAULT:=m if ALL_KMODS && RTC_SUPPORT - DEPENDS:=+kmod-i2c-core - KCONFIG:=CONFIG_RTC_DRV_X1205 \ - CONFIG_RTC_CLASS=y - FILES:=$(LINUX_DIR)/drivers/rtc/rtc-x1205.ko - AUTOLOAD:=$(call AutoProbe,rtc-x1205) -endef - -define KernelPackage/rtc-x1205/description - Kernel module for Xicor Intersil X1205 I2C RTC chip -endef - -$(eval $(call KernelPackage,rtc-x1205)) - define KernelPackage/mtdtests SUBMENU:=$(OTHER_MENU) TITLE:=MTD subsystem tests @@ -935,10 +565,9 @@ $(eval $(call KernelPackage,reed-solomon)) define KernelPackage/serial-8250 SUBMENU:=$(OTHER_MENU) TITLE:=8250 UARTs + DEPENDS:=@!TARGET_uml KCONFIG:= CONFIG_SERIAL_8250 \ CONFIG_SERIAL_8250_PCI \ - CONFIG_SERIAL_8250_NR_UARTS=16 \ - CONFIG_SERIAL_8250_RUNTIME_UARTS=16 \ CONFIG_SERIAL_8250_EXTENDED=y \ CONFIG_SERIAL_8250_MANY_PORTS=y \ CONFIG_SERIAL_8250_SHARE_IRQ=y \ @@ -956,6 +585,31 @@ define KernelPackage/serial-8250/description Kernel module for 8250 UART based serial ports endef +define KernelPackage/serial-8250/config +menu "Configuration" + depends on PACKAGE_kmod-serial-8250 + +config KERNEL_SERIAL_8250_NR_UARTS + int "Maximum number of 8250/16550 serial ports" + default "16" + help + Set this to the number of serial ports you want the driver + to support. This includes any ports discovered via ACPI or + PCI enumeration and any ports that may be added at run-time + via hot-plug, or any ISA multi-port serial cards. + +config KERNEL_SERIAL_8250_RUNTIME_UARTS + int "Number of 8250/16550 serial ports to register at runtime" + range 0 KERNEL_SERIAL_8250_NR_UARTS + default "16" + help + Set this to the maximum number of serial ports you want + the kernel to register at boot time. This can be overridden + with the module parameter "nr_uarts", or boot-time parameter + 8250.nr_uarts +endmenu +endef + $(eval $(call KernelPackage,serial-8250)) @@ -965,7 +619,7 @@ define KernelPackage/serial-8250-exar KCONFIG:= CONFIG_SERIAL_8250_EXAR FILES:=$(LINUX_DIR)/drivers/tty/serial/8250/8250_exar.ko AUTOLOAD:=$(call AutoProbe,8250 8250_base 8250_exar) - DEPENDS:=@PCI_SUPPORT +kmod-serial-8250 + DEPENDS:=@PCI_SUPPORT +kmod-serial-8250 +kmod-eeprom-93cx6 endef define KernelPackage/serial-8250-exar/description @@ -995,7 +649,7 @@ $(eval $(call KernelPackage,regmap-core)) define KernelPackage/regmap-spi SUBMENU:=$(OTHER_MENU) TITLE:=SPI register map support - DEPENDS:=+kmod-regmap-core + DEPENDS:=+kmod-regmap-core @!TARGET_uml HIDDEN:=1 KCONFIG:=CONFIG_REGMAP_SPI \ CONFIG_SPI=y @@ -1060,12 +714,18 @@ $(eval $(call KernelPackage,ikconfig)) define KernelPackage/zram SUBMENU:=$(OTHER_MENU) TITLE:=ZRAM + DEPENDS:=+kmod-lib-lzo +kmod-lib-lz4 \ + +kmod-lib-lz4hc +kmod-lib-zstd KCONFIG:= \ CONFIG_ZSMALLOC \ CONFIG_ZRAM \ CONFIG_ZRAM_DEBUG=n \ CONFIG_ZRAM_WRITEBACK=n \ - CONFIG_ZSMALLOC_STAT=n + CONFIG_ZSMALLOC_STAT=n \ + CONFIG_ZRAM_BACKEND_LZ4=y \ + CONFIG_ZRAM_BACKEND_LZ4HC=y \ + CONFIG_ZRAM_BACKEND_LZO=y \ + CONFIG_ZRAM_BACKEND_ZSTD=y FILES:= \ $(LINUX_DIR)/mm/zsmalloc.ko \ $(LINUX_DIR)/drivers/block/zram/zram.ko @@ -1219,6 +879,7 @@ define KernelPackage/thermal CONFIG_THERMAL=y \ CONFIG_THERMAL_OF=y \ CONFIG_CPU_THERMAL=y \ + CONFIG_DEVFREQ_THERMAL=n \ CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y \ CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE=n \ CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE=n \ @@ -1238,25 +899,6 @@ endef $(eval $(call KernelPackage,thermal)) -define KernelPackage/gpio-beeper - SUBMENU:=$(OTHER_MENU) - TITLE:=GPIO beeper support - DEPENDS:=+kmod-input-core - KCONFIG:= \ - CONFIG_INPUT_MISC=y \ - CONFIG_INPUT_GPIO_BEEPER - FILES:= \ - $(LINUX_DIR)/drivers/input/misc/gpio-beeper.ko - AUTOLOAD:=$(call AutoLoad,50,gpio-beeper) -endef - -define KernelPackage/gpio-beeper/description - This enables playing beeps through an GPIO-connected buzzer -endef - -$(eval $(call KernelPackage,gpio-beeper)) - - define KernelPackage/echo SUBMENU:=$(OTHER_MENU) TITLE:=Line Echo Canceller @@ -1333,7 +975,7 @@ $(eval $(call KernelPackage,tpm)) define KernelPackage/tpm-tis SUBMENU:=$(OTHER_MENU) TITLE:=TPM TIS 1.2 Interface / TPM 2.0 FIFO Interface - DEPENDS:= @TARGET_x86 +kmod-tpm + DEPENDS:= @(TARGET_x86||TARGET_armsr||TARGET_imx) +kmod-tpm KCONFIG:= CONFIG_TCG_TIS FILES:= \ $(LINUX_DIR)/drivers/char/tpm/tpm_tis.ko \ @@ -1350,6 +992,27 @@ endef $(eval $(call KernelPackage,tpm-tis)) +define KernelPackage/tpm-tis-spi + SUBMENU:=$(OTHER_MENU) + TITLE:=TPM TIS 1.3 Interface SPI Interface + DEPENDS:= +kmod-tpm-tis +kmod-spi-dev + KCONFIG:= CONFIG_TCG_TIS_SPI \ + CONFIG_TCG_TIS_SPI_CR50=n + FILES:= \ + $(LINUX_DIR)/drivers/char/tpm/tpm_tis_spi.ko + AUTOLOAD:=$(call AutoLoad,20,tpm_tis_spi,1) +endef + +define KernelPackage/tpm-tis-spi/description + If you have a TPM security chip which is connected to a regular, + non-tcg SPI master that is compliant with the + TCG TIS 1.3 TPM specification (TPM1.2) or the TCG PTP FIFO + specification (TPM2.0) say Yes and it will be accessible from + within Linux. +endef + +$(eval $(call KernelPackage,tpm-tis-spi)) + define KernelPackage/tpm-i2c-atmel SUBMENU:=$(OTHER_MENU) TITLE:=TPM I2C Atmel Support @@ -1428,3 +1091,20 @@ define KernelPackage/mhi-pci-generic/description endef $(eval $(call KernelPackage,mhi-pci-generic)) + + +define KernelPackage/regulator-userspace-consumer + SUBMENU:=$(OTHER_MENU) + TITLE:=Userspace regulator consumer support + KCONFIG:=CONFIG_REGULATOR_USERSPACE_CONSUMER + FILES:=$(LINUX_DIR)/drivers/regulator/userspace-consumer.ko + AUTOLOAD:=$(call AutoLoad,10,userspace-consumer,1) +endef + +define KernelPackage/regulator-userspace-consumer/description + There are some classes of devices that are controlled entirely + from user space. Userspace consumer driver provides ability to + control power supplies for such devices. +endef + +$(eval $(call KernelPackage,regulator-userspace-consumer)) diff --git a/openwrt/patch/openwrt-6.x/modules/rtc.mk b/openwrt/patch/openwrt-6.x/modules/rtc.mk new file mode 100644 index 000000000..852290f9d --- /dev/null +++ b/openwrt/patch/openwrt-6.x/modules/rtc.mk @@ -0,0 +1,273 @@ +# +# Copyright (C) 2006-2024 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +RTC_MENU:=RTC Real-Time Clock Support + +define KernelPackage/rtc-bq32k + SUBMENU:=$(RTC_MENU) + TITLE:=Texas Instruments BQ32000 RTC support + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core + KCONFIG:=CONFIG_RTC_DRV_BQ32K \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-bq32k.ko + AUTOLOAD:=$(call AutoProbe,rtc-bq32k) +endef + +define KernelPackage/rtc-bq32k/description + Kernel module for Texas Instruments BQ32000 I2C RTC. +endef + +$(eval $(call KernelPackage,rtc-bq32k)) + + +define KernelPackage/rtc-ds1307 + SUBMENU:=$(RTC_MENU) + TITLE:=Dallas/Maxim DS1307 (and compatible) RTC support + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core +kmod-regmap-i2c +kmod-hwmon-core + KCONFIG:=CONFIG_RTC_DRV_DS1307 \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-ds1307.ko + AUTOLOAD:=$(call AutoProbe,rtc-ds1307) +endef + +define KernelPackage/rtc-ds1307/description + Kernel module for Dallas/Maxim DS1307/DS1337/DS1338/DS1340/DS1388/DS3231, + Epson RX-8025 and various other compatible RTC chips connected via I2C. +endef + +$(eval $(call KernelPackage,rtc-ds1307)) + + +define KernelPackage/rtc-ds1374 + SUBMENU:=$(RTC_MENU) + TITLE:=Dallas/Maxim DS1374 RTC support + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core + KCONFIG:=CONFIG_RTC_DRV_DS1374 \ + CONFIG_RTC_DRV_DS1374_WDT=n \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-ds1374.ko + AUTOLOAD:=$(call AutoProbe,rtc-ds1374) +endef + +define KernelPackage/rtc-ds1374/description + Kernel module for Dallas/Maxim DS1374. +endef + +$(eval $(call KernelPackage,rtc-ds1374)) + + +define KernelPackage/rtc-ds1672 + SUBMENU:=$(RTC_MENU) + TITLE:=Dallas/Maxim DS1672 RTC support + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core + KCONFIG:=CONFIG_RTC_DRV_DS1672 \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-ds1672.ko + AUTOLOAD:=$(call AutoProbe,rtc-ds1672) +endef + +define KernelPackage/rtc-ds1672/description + Kernel module for Dallas/Maxim DS1672 RTC. +endef + +$(eval $(call KernelPackage,rtc-ds1672)) + + +define KernelPackage/rtc-em3027 + SUBMENU:=$(RTC_MENU) + TITLE:=Microelectronic EM3027 RTC support + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core + KCONFIG:=CONFIG_RTC_DRV_EM3027 \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-em3027.ko + AUTOLOAD:=$(call AutoProbe,rtc-em3027) +endef + +define KernelPackage/rtc-em3027/description + Kernel module for Microelectronic EM3027 RTC. +endef + +$(eval $(call KernelPackage,rtc-em3027)) + + +define KernelPackage/rtc-isl1208 + SUBMENU:=$(RTC_MENU) + TITLE:=Intersil ISL1208 RTC support + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core + KCONFIG:=CONFIG_RTC_DRV_ISL1208 \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-isl1208.ko + AUTOLOAD:=$(call AutoProbe,rtc-isl1208) +endef + +define KernelPackage/rtc-isl1208/description + Kernel module for Intersil ISL1208 RTC. +endef + +$(eval $(call KernelPackage,rtc-isl1208)) + + +define KernelPackage/rtc-mv + SUBMENU:=$(RTC_MENU) + TITLE:=Marvell SoC RTC support + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + KCONFIG:=CONFIG_RTC_DRV_MV \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-mv.ko + AUTOLOAD:=$(call AutoProbe,rtc-mv) +endef + +define KernelPackage/rtc-mv/description + Kernel module for Marvell SoC RTC. +endef + +$(eval $(call KernelPackage,rtc-mv)) + + +define KernelPackage/rtc-pcf8563 + SUBMENU:=$(RTC_MENU) + TITLE:=Philips PCF8563/Epson RTC8564 RTC support + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core +kmod-regmap-i2c + KCONFIG:=CONFIG_RTC_DRV_PCF8563 \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-pcf8563.ko + AUTOLOAD:=$(call AutoProbe,rtc-pcf8563) +endef + +define KernelPackage/rtc-pcf8563/description + Kernel module for Philips PCF8563 RTC chip. + The Epson RTC8564 should work as well. +endef + +$(eval $(call KernelPackage,rtc-pcf8563)) + + +define KernelPackage/rtc-pcf2123 + SUBMENU:=$(RTC_MENU) + TITLE:=Philips PCF2123 RTC support + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-regmap-spi + KCONFIG:=CONFIG_RTC_DRV_PCF2123 \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-pcf2123.ko + AUTOLOAD:=$(call AutoProbe,rtc-pcf2123) +endef + +define KernelPackage/rtc-pcf2123/description + Kernel module for Philips PCF2123 RTC chip +endef + +$(eval $(call KernelPackage,rtc-pcf2123)) + +define KernelPackage/rtc-pcf2127 + SUBMENU:=$(RTC_MENU) + TITLE:=NXP PCF2127 and PCF2129 RTC support + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core +kmod-regmap-spi + KCONFIG:=CONFIG_RTC_DRV_PCF2127 \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-pcf2127.ko + AUTOLOAD:=$(call AutoProbe,rtc-pcf2127) +endef + +define KernelPackage/rtc-pcf2127/description + Kernel module for NXP PCF2127 and PCF2129 RTC chip +endef + +$(eval $(call KernelPackage,rtc-pcf2127)) + +define KernelPackage/rtc-r7301 + SUBMENU:=$(RTC_MENU) + TITLE:=Epson RTC7301 support + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-regmap-mmio + KCONFIG:=CONFIG_RTC_DRV_R7301 \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-r7301.ko + AUTOLOAD:=$(call AutoProbe,rtc-r7301) +endef + +define KernelPackage/rtc-r7301/description + Kernel module for Epson RTC7301 RTC chip +endef + +$(eval $(call KernelPackage,rtc-r7301)) + +define KernelPackage/rtc-rs5c372a + SUBMENU:=$(RTC_MENU) + TITLE:=Ricoh R2025S/D, RS5C372A/B, RV5C386, RV5C387A + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core + KCONFIG:=CONFIG_RTC_DRV_RS5C372 \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-rs5c372.ko + AUTOLOAD:=$(call AutoLoad,50,rtc-rs5c372,1) +endef + +define KernelPackage/rtc-rs5c372a/description + Kernel module for Ricoh R2025S/D, RS5C372A/B, RV5C386, RV5C387A RTC on chip module +endef + +$(eval $(call KernelPackage,rtc-rs5c372a)) + +define KernelPackage/rtc-rx8025 + SUBMENU:=$(RTC_MENU) + TITLE:=Epson RX-8025 / RX-8035 + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core + KCONFIG:=CONFIG_RTC_DRV_RX8025 \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-rx8025.ko + AUTOLOAD:=$(call AutoLoad,50,rtc-rx8025,1) +endef + +define KernelPackage/rtc-rx8025/description + Kernel module for Epson RX-8025 and RX-8035 I2C RTC chip +endef + +$(eval $(call KernelPackage,rtc-rx8025)) + +define KernelPackage/rtc-s35390a + SUBMENU:=$(RTC_MENU) + TITLE:=Seico S-35390A + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core + KCONFIG:=CONFIG_RTC_DRV_S35390A \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-s35390a.ko + AUTOLOAD:=$(call AutoLoad,50,rtc-s35390a,1) +endef + +define KernelPackage/rtc-s35390a/description + Kernel module for Seiko Instruments S-35390A I2C RTC chip +endef + +$(eval $(call KernelPackage,rtc-s35390a)) + +define KernelPackage/rtc-x1205 + SUBMENU:=$(RTC_MENU) + TITLE:=Xicor Intersil X1205 + DEFAULT:=m if ALL_KMODS && RTC_SUPPORT + DEPENDS:=+kmod-i2c-core + KCONFIG:=CONFIG_RTC_DRV_X1205 \ + CONFIG_RTC_CLASS=y + FILES:=$(LINUX_DIR)/drivers/rtc/rtc-x1205.ko + AUTOLOAD:=$(call AutoProbe,rtc-x1205) +endef + +define KernelPackage/rtc-x1205/description + Kernel module for Xicor Intersil X1205 I2C RTC chip +endef + +$(eval $(call KernelPackage,rtc-x1205)) diff --git a/openwrt/patch/openwrt-6.x/modules/sound.mk b/openwrt/patch/openwrt-6.x/modules/sound.mk index 623f65ac5..3e043a5a6 100644 --- a/openwrt/patch/openwrt-6.x/modules/sound.mk +++ b/openwrt/patch/openwrt-6.x/modules/sound.mk @@ -314,6 +314,17 @@ endef $(eval $(call KernelPackage,sound-soc-spdif)) +define KernelPackage/sound-soc-dmic + TITLE:=Generic Digital Microphone CODEC + KCONFIG:=CONFIG_SND_SOC_DMIC + FILES:=$(LINUX_DIR)/sound/soc/codecs/snd-soc-dmic.ko + AUTOLOAD:=$(call AutoProbe,snd-soc-dmic) + $(call AddDepends/sound,+kmod-sound-soc-core) +endef + +$(eval $(call KernelPackage,sound-soc-dmic)) + + define KernelPackage/pcspkr DEPENDS:=@TARGET_x86 +kmod-input-core TITLE:=PC speaker support @@ -359,9 +370,9 @@ define KernelPackage/sound-hda-core CONFIG_SND_HDA_PATCH_LOADER=n \ CONFIG_SND_HDA_GENERIC FILES:= \ - $(LINUX_DIR)/sound/hda/snd-hda-core.ko \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec.ko \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-generic.ko + $(LINUX_DIR)/sound/hda/core/snd-hda-core.ko \ + $(LINUX_DIR)/sound/hda/common/snd-hda-codec.ko \ + $(LINUX_DIR)/sound/hda/codecs/snd-hda-codec-generic.ko AUTOLOAD:=$(call AutoProbe,snd-hda-core snd-hda-codec snd-hda-codec-generic) $(call AddDepends/sound,+kmod-regmap-core) endef @@ -376,9 +387,31 @@ define KernelPackage/sound-hda-codec-realtek SUBMENU:=$(SOUND_MENU) TITLE:= HD Audio Realtek Codec KCONFIG:= \ - CONFIG_SND_HDA_CODEC_REALTEK + CONFIG_SND_HDA_CODEC_REALTEK \ + CONFIG_SND_HDA_CODEC_REALTEK_LIB \ + CONFIG_SND_HDA_CODEC_ALC260 \ + CONFIG_SND_HDA_CODEC_ALC262 \ + CONFIG_SND_HDA_CODEC_ALC268 \ + CONFIG_SND_HDA_CODEC_ALC269 \ + CONFIG_SND_HDA_CODEC_ALC662 \ + CONFIG_SND_HDA_CODEC_ALC680 \ + CONFIG_SND_HDA_CODEC_ALC861 \ + CONFIG_SND_HDA_CODEC_ALC861VD \ + CONFIG_SND_HDA_CODEC_ALC880 \ + CONFIG_SND_HDA_CODEC_ALC882 FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-realtek.ko + $(LINUX_DIR)/sound/hda/codecs/realtek/snd-hda-codec-realtek-lib.ko \ + $(LINUX_DIR)/sound/hda/codecs/realtek/snd-hda-codec-alc260.ko \ + $(LINUX_DIR)/sound/hda/codecs/realtek/snd-hda-codec-alc262.ko \ + $(LINUX_DIR)/sound/hda/codecs/realtek/snd-hda-codec-alc268.ko \ + $(LINUX_DIR)/sound/hda/codecs/realtek/snd-hda-codec-alc269.ko \ + $(LINUX_DIR)/sound/hda/codecs/realtek/snd-hda-codec-alc662.ko \ + $(LINUX_DIR)/sound/hda/codecs/realtek/snd-hda-codec-alc680.ko \ + $(LINUX_DIR)/sound/hda/codecs/realtek/snd-hda-codec-alc861.ko \ + $(LINUX_DIR)/sound/hda/codecs/realtek/snd-hda-codec-alc861vd.ko \ + $(LINUX_DIR)/sound/hda/codecs/realtek/snd-hda-codec-alc880.ko \ + $(LINUX_DIR)/sound/hda/codecs/realtek/snd-hda-codec-alc882.ko \ + $(LINUX_DIR)/sound/hda/codecs/side-codecs/snd-hda-scodec-component.ko AUTOLOAD:=$(call AutoProbe,snd-hda-codec-realtek) $(call AddDepends/sound,kmod-sound-hda-core) endef @@ -395,7 +428,7 @@ define KernelPackage/sound-hda-codec-cmedia KCONFIG:= \ CONFIG_SND_HDA_CODEC_CMEDIA FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-cmedia.ko + $(LINUX_DIR)/sound/hda/codecs/snd-hda-codec-cmedia.ko AUTOLOAD:=$(call AutoProbe,snd-hda-codec-cmedia) $(call AddDepends/sound,kmod-sound-hda-core) endef @@ -412,7 +445,7 @@ define KernelPackage/sound-hda-codec-analog KCONFIG:= \ CONFIG_SND_HDA_CODEC_ANALOG FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-analog.ko + $(LINUX_DIR)/sound/hda/codecs/snd-hda-codec-analog.ko AUTOLOAD:=$(call AutoProbe,snd-hda-codec-analog) $(call AddDepends/sound,kmod-sound-hda-core) endef @@ -429,7 +462,7 @@ define KernelPackage/sound-hda-codec-idt KCONFIG:= \ CONFIG_SND_HDA_CODEC_SIGMATEL FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-idt.ko + $(LINUX_DIR)/sound/hda/codecs/snd-hda-codec-idt.ko AUTOLOAD:=$(call AutoProbe,snd-hda-codec-idt) $(call AddDepends/sound,kmod-sound-hda-core) endef @@ -446,7 +479,7 @@ define KernelPackage/sound-hda-codec-si3054 KCONFIG:= \ CONFIG_SND_HDA_CODEC_SI3054 FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-si3054.ko + $(LINUX_DIR)/sound/hda/codecs/snd-hda-codec-si3054.ko AUTOLOAD:=$(call AutoProbe,snd-hda-codec-si3054) $(call AddDepends/sound,kmod-sound-hda-core) endef @@ -461,9 +494,14 @@ define KernelPackage/sound-hda-codec-cirrus SUBMENU:=$(SOUND_MENU) TITLE:=HD Audio Cirrus Logic Codec KCONFIG:= \ - CONFIG_SND_HDA_CODEC_CIRRUS + CONFIG_SND_HDA_CODEC_CIRRUS \ + CONFIG_SND_HDA_CODEC_CS420X \ + CONFIG_SND_HDA_CODEC_CS421X \ + CONFIG_SND_HDA_CODEC_CS8409 FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-cirrus.ko + $(LINUX_DIR)/sound/hda/codecs/cirrus/snd-hda-codec-cs420x.ko \ + $(LINUX_DIR)/sound/hda/codecs/cirrus/snd-hda-codec-cs421x.ko \ + $(LINUX_DIR)/sound/hda/codecs/cirrus/snd-hda-codec-cs8409.ko AUTOLOAD:=$(call AutoProbe,snd-hda-codec-cirrus) $(call AddDepends/sound,kmod-sound-hda-core) endef @@ -480,7 +518,7 @@ define KernelPackage/sound-hda-codec-ca0110 KCONFIG:= \ CONFIG_SND_HDA_CODEC_CA0110 FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-ca0110.ko + $(LINUX_DIR)/sound/hda/codecs/snd-hda-codec-ca0110.ko AUTOLOAD:=$(call AutoProbe,snd-hda-codec-ca0110) $(call AddDepends/sound,kmod-sound-hda-core) endef @@ -498,7 +536,7 @@ define KernelPackage/sound-hda-codec-ca0132 CONFIG_SND_HDA_CODEC_CA0132 \ CONFIG_SND_HDA_CODEC_CA0132_DSP=n FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-ca0132.ko + $(LINUX_DIR)/sound/hda/codecs/snd-hda-codec-ca0132.ko AUTOLOAD:=$(call AutoProbe,snd-hda-codec-ca0132) $(call AddDepends/sound,kmod-sound-hda-core) endef @@ -515,7 +553,7 @@ define KernelPackage/sound-hda-codec-conexant KCONFIG:= \ CONFIG_SND_HDA_CODEC_CONEXANT FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-conexant.ko + $(LINUX_DIR)/sound/hda/codecs/snd-hda-codec-conexant.ko AUTOLOAD:=$(call AutoProbe,snd-hda-codec-conexant) $(call AddDepends/sound,kmod-sound-hda-core) endef @@ -532,7 +570,7 @@ define KernelPackage/sound-hda-codec-via KCONFIG:= \ CONFIG_SND_HDA_CODEC_VIA FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-via.ko + $(LINUX_DIR)/sound/hda/codecs/snd-hda-codec-via.ko AUTOLOAD:=$(call AutoProbe,snd-hda-codec-via) $(call AddDepends/sound,kmod-sound-hda-core) endef @@ -549,7 +587,7 @@ define KernelPackage/sound-hda-codec-hdmi KCONFIG:= \ CONFIG_SND_HDA_CODEC_HDMI FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-codec-hdmi.ko + $(LINUX_DIR)/sound/hda/codecs/hdmi/snd-hda-codec-hdmi.ko AUTOLOAD:=$(call AutoProbe,snd-hda-codec-hdmi) $(call AddDepends/sound,kmod-sound-hda-core) endef @@ -568,8 +606,8 @@ define KernelPackage/sound-hda-intel CONFIG_SOUND_PCI \ CONFIG_SND_HDA_INTEL FILES:= \ - $(LINUX_DIR)/sound/pci/hda/snd-hda-intel.ko \ - $(LINUX_DIR)/sound/hda/snd-intel-dspcfg.ko + $(LINUX_DIR)/sound/hda/controllers/snd-hda-intel.ko \ + $(LINUX_DIR)/sound/hda/core/snd-intel-dspcfg.ko AUTOLOAD:=$(call AutoProbe,snd-hda-intel) $(call AddDepends/sound,kmod-sound-hda-core) endef diff --git a/openwrt/patch/openwrt-6.x/modules/spi.mk b/openwrt/patch/openwrt-6.x/modules/spi.mk index 78a1c8a03..5e8ab03b1 100644 --- a/openwrt/patch/openwrt-6.x/modules/spi.mk +++ b/openwrt/patch/openwrt-6.x/modules/spi.mk @@ -73,3 +73,41 @@ define KernelPackage/spi-dev/description endef $(eval $(call KernelPackage,spi-dev)) + + +define KernelPackage/spi-dw + SUBMENU:=$(SPI_MENU) + TITLE:=DesignWare SPI controller driver (core) + KCONFIG:=\ + CONFIG_SPI=y \ + CONFIG_SPI_DESIGNWARE \ + CONFIG_SPI_DYNAMIC=y \ + CONFIG_SPI_MASTER=y + FILES:=\ + $(LINUX_DIR)/drivers/spi/spi-dw.ko + AUTOLOAD:=$(call AutoProbe,spi-dw) +endef + +define KernelPackage/spi-dw/description + This package contains the DesignWare SPI core driver. +endef + +$(eval $(call KernelPackage,spi-dw)) + + +define KernelPackage/spi-dw-mmio + SUBMENU:=$(SPI_MENU) + TITLE:=DesignWare SPI controller driver (MMIO) + DEPENDS:=+kmod-spi-dw + KCONFIG:=\ + CONFIG_SPI_DW_MMIO + FILES:=\ + $(LINUX_DIR)/drivers/spi/spi-dw-mmio.ko + AUTOLOAD:=$(call AutoProbe,spi-dw-mmio) +endef + +define KernelPackage/spi-dw-mmio/description + This package contains the DesignWare SPI MMIO driver. +endef + +$(eval $(call KernelPackage,spi-dw-mmio)) diff --git a/openwrt/patch/openwrt-6.x/modules/usb.mk b/openwrt/patch/openwrt-6.x/modules/usb.mk index 9bea8093c..11c56c848 100644 --- a/openwrt/patch/openwrt-6.x/modules/usb.mk +++ b/openwrt/patch/openwrt-6.x/modules/usb.mk @@ -11,15 +11,24 @@ USBNET_DIR:=net/usb USBHID_DIR?=hid/usbhid USBINPUT_DIR?=input/misc +define KernelPackage/usb-common + TITLE:=USB common + HIDDEN:=1 + DEPENDS:=@(USB_SUPPORT||USB_GADGET_SUPPORT) + KCONFIG:=CONFIG_USB_COMMON + FILES:=$(LINUX_DIR)/drivers/usb/common/usb-common.ko + AUTOLOAD:=$(call AutoLoad,20,usb-common,1) +endef + +$(eval $(call KernelPackage,usb-common)) + define KernelPackage/usb-core SUBMENU:=$(USB_MENU) TITLE:=Support for USB - DEPENDS:=@USB_SUPPORT + DEPENDS:=@USB_SUPPORT +USB_SUPPORT:kmod-usb-common KCONFIG:=CONFIG_USB CONFIG_XPS_USB_HCD_XILINX=n CONFIG_USB_FHCI_HCD=n - FILES:= \ - $(LINUX_DIR)/drivers/usb/core/usbcore.ko \ - $(LINUX_DIR)/drivers/usb/common/usb-common.ko - AUTOLOAD:=$(call AutoLoad,20,usb-common usbcore,1) + FILES:=$(LINUX_DIR)/drivers/usb/core/usbcore.ko + AUTOLOAD:=$(call AutoLoad,20,usbcore,1) $(call AddDepends/nls) endef @@ -90,14 +99,15 @@ $(eval $(call KernelPackage,phy-ath79-usb)) define KernelPackage/usb-gadget + SUBMENU:=$(USB_MENU) TITLE:=USB Gadget support KCONFIG:=CONFIG_USB_GADGET HIDDEN:=1 FILES:=\ $(LINUX_DIR)/drivers/usb/gadget/udc/udc-core.ko AUTOLOAD:=$(call AutoLoad,21,udc-core,1) - DEPENDS:=@USB_GADGET_SUPPORT - $(call AddDepends/usb) + DEPENDS:=@USB_GADGET_SUPPORT +kmod-usb-common + $(call AddDepends/nls) endef define KernelPackage/usb-gadget/description @@ -106,14 +116,20 @@ endef $(eval $(call KernelPackage,usb-gadget)) + +define AddDepends/usbgadget + SUBMENU:=$(USB_MENU) + DEPENDS+=+kmod-usb-gadget $(1) +endef + + define KernelPackage/usb-lib-composite TITLE:=USB lib composite KCONFIG:=CONFIG_USB_LIBCOMPOSITE - DEPENDS:=+kmod-usb-gadget +kmod-fs-configfs HIDDEN:=1 FILES:=$(LINUX_DIR)/drivers/usb/gadget/libcomposite.ko AUTOLOAD:=$(call AutoLoad,50,libcomposite) - $(call AddDepends/usb) + $(call AddDepends/usbgadget,+kmod-fs-configfs) endef define KernelPackage/usb-lib-composite/description @@ -125,12 +141,11 @@ $(eval $(call KernelPackage,usb-lib-composite)) define KernelPackage/usb-gadget-hid TITLE:=USB HID Gadget Support KCONFIG:=CONFIG_USB_G_HID - DEPENDS:=+kmod-usb-gadget +kmod-usb-lib-composite FILES:= \ $(LINUX_DIR)/drivers/usb/gadget/legacy/g_hid.ko \ $(LINUX_DIR)/drivers/usb/gadget/function/usb_f_hid.ko AUTOLOAD:=$(call AutoLoad,52,usb_f_hid) - $(call AddDepends/usb) + $(call AddDepends/usbgadget,+kmod-usb-lib-composite) endef define KernelPackage/usb-gadget-hid/description @@ -139,15 +154,32 @@ endef $(eval $(call KernelPackage,usb-gadget-hid)) +define KernelPackage/usb-gadget-fs + TITLE:=USB FunctionFS Gadget Support + KCONFIG:=CONFIG_USB_FUNCTIONFS \ + CONFIG_USB_FUNCTIONFS_ETH=n \ + CONFIG_USB_FUNCTIONFS_RNDIS=n + FILES:= \ + $(LINUX_DIR)/drivers/usb/gadget/legacy/g_ffs.ko \ + $(LINUX_DIR)/drivers/usb/gadget/function/usb_f_fs.ko + AUTOLOAD:=$(call AutoLoad,52,usb_f_fs) + $(call AddDepends/usbgadget,+kmod-usb-lib-composite +kmod-dma-buf) +endef + +define KernelPackage/usb-gadget-fs/description + Kernel support for USB FunctionFS Gadget. +endef + +$(eval $(call KernelPackage,usb-gadget-fs)) + define KernelPackage/usb-gadget-ehci-debug TITLE:=USB EHCI debug port Gadget support KCONFIG:=\ CONFIG_USB_G_DBGP \ CONFIG_USB_G_DBGP_SERIAL=y \ CONFIG_USB_G_DBGP_PRINTK=n - DEPENDS:=+kmod-usb-gadget +kmod-usb-lib-composite +kmod-usb-gadget-serial FILES:=$(LINUX_DIR)/drivers/usb/gadget/legacy/g_dbgp.ko - $(call AddDepends/usb) + $(call AddDepends/usbgadget,+kmod-usb-lib-composite +kmod-usb-gadget-serial) endef define KernelPackage/usb-gadget-ehci-debug/description @@ -162,7 +194,6 @@ define KernelPackage/usb-gadget-eth CONFIG_USB_ETH \ CONFIG_USB_ETH_RNDIS=y \ CONFIG_USB_ETH_EEM=n - DEPENDS:=+kmod-usb-gadget +kmod-usb-lib-composite FILES:= \ $(LINUX_DIR)/drivers/usb/gadget/function/u_ether.ko \ $(LINUX_DIR)/drivers/usb/gadget/function/usb_f_ecm.ko \ @@ -170,7 +201,7 @@ define KernelPackage/usb-gadget-eth $(LINUX_DIR)/drivers/usb/gadget/function/usb_f_rndis.ko \ $(LINUX_DIR)/drivers/usb/gadget/legacy/g_ether.ko AUTOLOAD:=$(call AutoLoad,52,usb_f_ecm) - $(call AddDepends/usb) + $(call AddDepends/usbgadget,+kmod-usb-lib-composite) endef define KernelPackage/usb-gadget-eth/description @@ -182,13 +213,11 @@ $(eval $(call KernelPackage,usb-gadget-eth)) define KernelPackage/usb-gadget-ncm TITLE:=USB Network Control Model (NCM) Gadget support KCONFIG:=CONFIG_USB_G_NCM - DEPENDS:=+kmod-usb-gadget +kmod-usb-lib-composite \ - +kmod-usb-gadget-eth FILES:= \ $(LINUX_DIR)/drivers/usb/gadget/function/usb_f_ncm.ko \ $(LINUX_DIR)/drivers/usb/gadget/legacy/g_ncm.ko AUTOLOAD:=$(call AutoLoad,52,usb_f_ncm) - $(call AddDepends/usb) + $(call AddDepends/usbgadget,+kmod-usb-lib-composite +kmod-usb-gadget-eth) endef define KernelPackage/usb-gadget-ncm/description @@ -200,7 +229,6 @@ $(eval $(call KernelPackage,usb-gadget-ncm)) define KernelPackage/usb-gadget-serial TITLE:=USB Serial Gadget support KCONFIG:=CONFIG_USB_G_SERIAL - DEPENDS:=+kmod-usb-gadget +kmod-usb-lib-composite FILES:= \ $(LINUX_DIR)/drivers/usb/gadget/function/u_serial.ko \ $(LINUX_DIR)/drivers/usb/gadget/function/usb_f_acm.ko \ @@ -208,7 +236,7 @@ define KernelPackage/usb-gadget-serial $(LINUX_DIR)/drivers/usb/gadget/function/usb_f_serial.ko \ $(LINUX_DIR)/drivers/usb/gadget/legacy/g_serial.ko AUTOLOAD:=$(call AutoLoad,52,usb_f_acm) - $(call AddDepends/usb) + $(call AddDepends/usbgadget,+kmod-usb-lib-composite) endef define KernelPackage/usb-gadget-serial/description @@ -220,12 +248,11 @@ $(eval $(call KernelPackage,usb-gadget-serial)) define KernelPackage/usb-gadget-mass-storage TITLE:=USB Mass Storage support KCONFIG:=CONFIG_USB_MASS_STORAGE - DEPENDS:=+kmod-usb-gadget +kmod-usb-lib-composite FILES:= \ $(LINUX_DIR)/drivers/usb/gadget/function/usb_f_mass_storage.ko \ $(LINUX_DIR)/drivers/usb/gadget/legacy/g_mass_storage.ko AUTOLOAD:=$(call AutoLoad,52,usb_f_mass_storage) - $(call AddDepends/usb) + $(call AddDepends/usbgadget,+kmod-usb-lib-composite) endef define KernelPackage/usb-gadget-mass-storage/description @@ -237,10 +264,11 @@ $(eval $(call KernelPackage,usb-gadget-mass-storage)) define KernelPackage/usb-gadget-cdc-composite TITLE:= USB CDC Composite (Ethernet + ACM) KCONFIG:=CONFIG_USB_CDC_COMPOSITE - DEPENDS:=+kmod-usb-gadget +kmod-usb-lib-composite \ - +kmod-usb-gadget-eth +kmod-usb-gadget-serial FILES:= $(LINUX_DIR)/drivers/usb/gadget/legacy/g_cdc.ko - $(call AddDepends/usb) + $(call AddDepends/usbgadget, \ + +kmod-usb-lib-composite \ + +kmod-usb-gadget-eth \ + +kmod-usb-gadget-serial) endef define KernelPackage/usb-gadget-cdc-composite/description @@ -272,13 +300,13 @@ $(eval $(call KernelPackage,usb-uhci,1)) define KernelPackage/usb-ohci TITLE:=Support for OHCI controllers DEPENDS:= \ + +TARGET_ath79:kmod-phy-ath79-usb \ +TARGET_bcm53xx:kmod-usb-bcma \ +TARGET_bcm47xx:kmod-usb-bcma \ +TARGET_bcm47xx:kmod-usb-ssb KCONFIG:= \ CONFIG_USB_OHCI \ CONFIG_USB_OHCI_HCD \ - CONFIG_USB_OHCI_ATH79=y \ CONFIG_USB_OHCI_HCD_AT91=y \ CONFIG_USB_OHCI_BCM63XX=y \ CONFIG_USB_OCTEON_OHCI=y \ @@ -460,13 +488,15 @@ $(eval $(call KernelPackage,usb-dwc2-pci)) define KernelPackage/usb-cdns + SUBMENU:=$(USB_MENU) TITLE:=Cadence USB USB controller driver - DEPENDS:=+USB_GADGET_SUPPORT:kmod-usb-gadget +kmod-usb-roles + DEPENDS:=+USB_GADGET_SUPPORT:kmod-usb-gadget \ + +USB_SUPPORT:kmod-usb-core \ + +kmod-usb-roles KCONFIG:= \ CONFIG_USB_CDNS_SUPPORT FILES:= $(LINUX_DIR)/drivers/usb/cdns3/cdns-usb-common.ko AUTOLOAD:=$(call AutoLoad,50,cdns-usb-common,1) - $(call AddDepends/usb) endef define KernelPackage/usb-cdns/description @@ -478,15 +508,15 @@ $(eval $(call KernelPackage,usb-cdns)) define KernelPackage/usb-cdns3 + SUBMENU:=$(USB_MENU) TITLE:=Cadence USB3 USB controller driver DEPENDS:=+kmod-usb-cdns KCONFIG:= \ CONFIG_USB_CDNS3 \ - CONFIG_USB_CDNS3_GADGET=y \ - CONFIG_USB_CDNS3_HOST=y + CONFIG_USB_CDNS3_GADGET=$(if $(CONFIG_USB_GADGET_SUPPORT),y,n) \ + CONFIG_USB_CDNS3_HOST=$(if $(CONFIG_USB_SUPPORT),y,n) FILES:= $(LINUX_DIR)/drivers/usb/cdns3/cdns3.ko AUTOLOAD:=$(call AutoLoad,54,cdns3,1) - $(call AddDepends/usb) endef define KernelPackage/usb-cdns3/description @@ -498,17 +528,28 @@ $(eval $(call KernelPackage,usb-cdns3)) define KernelPackage/usb-dwc3 + SUBMENU:=$(USB_MENU) TITLE:=DWC3 USB controller driver + DEPENDS:=+USB_GADGET_SUPPORT:kmod-usb-gadget \ + +USB_SUPPORT:kmod-usb-core \ + +kmod-usb-roles KCONFIG:= \ CONFIG_USB_DWC3 \ - CONFIG_USB_DWC3_HOST=y \ - CONFIG_USB_DWC3_GADGET=n \ - CONFIG_USB_DWC3_DUAL_ROLE=n \ CONFIG_USB_DWC3_DEBUG=n \ CONFIG_USB_DWC3_VERBOSE=n +ifeq ($(CONFIG_USB_SUPPORT)$(CONFIG_USB_GADGET_SUPPORT),yy) + KCONFIG+= \ + CONFIG_USB_DWC3_HOST=n \ + CONFIG_USB_DWC3_GADGET=n \ + CONFIG_USB_DWC3_DUAL_ROLE=y +else + KCONFIG+= \ + CONFIG_USB_DWC3_HOST=$(if $(CONFIG_USB_SUPPORT),y,n) \ + CONFIG_USB_DWC3_GADGET=$(if $(CONFIG_USB_GADGET_SUPPORT),y,n) \ + CONFIG_USB_DWC3_DUAL_ROLE=n +endif FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3.ko AUTOLOAD:=$(call AutoLoad,54,dwc3,1) - $(call AddDepends/usb) endef define KernelPackage/usb-dwc3/description @@ -519,9 +560,26 @@ endef $(eval $(call KernelPackage,usb-dwc3)) +define KernelPackage/usb-dwc3-octeon + TITLE:=DWC3 Cavium Octeon USB driver + DEPENDS:=@TARGET_octeon +kmod-usb-dwc3 + KCONFIG:= CONFIG_USB_DWC3_OCTEON + FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-octeon.ko + AUTOLOAD:=$(call AutoProbe,dwc3-octeon,1) + $(call AddDepends/usb) +endef + +define KernelPackage/usb-dwc3-octeon/description + This driver adds support for Cavium Octeon platforms with DesignWare + Core USB3 IP. +endef + +$(eval $(call KernelPackage,usb-dwc3-octeon)) + + define KernelPackage/usb-dwc3-qcom TITLE:=DWC3 Qualcomm USB driver - DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x||TARGET_qualcommax) +kmod-usb-dwc3 + DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x||TARGET_qualcommax||TARGET_qualcommbe) +kmod-usb-dwc3 KCONFIG:= CONFIG_USB_DWC3_QCOM FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-qcom.ko AUTOLOAD:=$(call AutoLoad,53,dwc3-qcom,1) @@ -572,11 +630,11 @@ $(eval $(call KernelPackage,usb-wdm)) define KernelPackage/usb-audio TITLE:=Support for USB audio devices KCONFIG:= \ - CONFIG_USB_AUDIO \ CONFIG_SND_USB=y \ CONFIG_SND_USB_AUDIO $(call AddDepends/usb) $(call AddDepends/sound) + DEPENDS+=+kmod-media-controller FILES:= \ $(LINUX_DIR)/sound/usb/snd-usbmidi-lib.ko \ $(LINUX_DIR)/sound/usb/snd-usb-audio.ko @@ -661,7 +719,6 @@ define KernelPackage/usb-serial-ch348 KCONFIG:=CONFIG_USB_SERIAL_CH348 FILES:=$(LINUX_DIR)/drivers/usb/serial/ch348.ko AUTOLOAD:=$(call AutoProbe,ch348) - DEPENDS:=@LINUX_6_6 $(call AddDepends/usb-serial) endef @@ -1018,6 +1075,21 @@ endef $(eval $(call KernelPackage,usb-serial-qualcomm)) +define KernelPackage/usb-serial-xr + TITLE:=Support for MaxLinear/Exar USB to Serial devices + KCONFIG:=CONFIG_USB_SERIAL_XR + FILES:=$(LINUX_DIR)/drivers/usb/serial/xr_serial.ko + AUTOLOAD:=$(call AutoProbe,xr_serial) + $(call AddDepends/usb-serial) +endef + +define KernelPackage/usb-serial-xr/description + Kernel support for MaxLinear/Exar USB to Serial converter devices +endef + +$(eval $(call KernelPackage,usb-serial-xr)) + + define KernelPackage/usb-storage TITLE:=USB Storage support DEPENDS:= +kmod-scsi-core @@ -1162,8 +1234,7 @@ $(eval $(call KernelPackage,usb-atm-cxacru)) define KernelPackage/usb-net TITLE:=Kernel modules for USB-to-Ethernet convertors DEPENDS:=+kmod-mii - KCONFIG:=CONFIG_USB_USBNET \ - CONFIG_USB_NET_DRIVERS + KCONFIG:=CONFIG_USB_USBNET AUTOLOAD:=$(call AutoProbe,usbnet) FILES:=$(LINUX_DIR)/drivers/$(USBNET_DIR)/usbnet.ko $(call AddDepends/usb) @@ -1201,7 +1272,7 @@ define KernelPackage/usb-net-asix TITLE:=Kernel module for USB-to-Ethernet Asix convertors DEPENDS:= \ +kmod-libphy +kmod-net-selftests +kmod-mdio-devres +kmod-phy-ax88796b \ - +LINUX_6_1:kmod-phylink +LINUX_6_6:kmod-phylink + +kmod-phylink KCONFIG:=CONFIG_USB_NET_AX8817X FILES:=$(LINUX_DIR)/drivers/$(USBNET_DIR)/asix.ko AUTOLOAD:=$(call AutoProbe,asix) @@ -1266,7 +1337,7 @@ $(eval $(call KernelPackage,usb-net-kaweth)) define KernelPackage/usb-net-lan78xx TITLE:=USB-To-Ethernet Microchip LAN78XX convertors - DEPENDS:=+kmod-fixed-phy +kmod-phy-microchip +PACKAGE_kmod-of-mdio:kmod-of-mdio + DEPENDS:=+kmod-fixed-phy +kmod-phy-microchip +kmod-phylink +PACKAGE_kmod-of-mdio:kmod-of-mdio +kmod-net-selftests KCONFIG:=CONFIG_USB_LAN78XX FILES:=$(LINUX_DIR)/drivers/$(USBNET_DIR)/lan78xx.ko AUTOLOAD:=$(call AutoProbe,lan78xx) @@ -1329,7 +1400,7 @@ $(eval $(call KernelPackage,usb-net-smsc75xx)) define KernelPackage/usb-net-smsc95xx TITLE:=SMSC LAN95XX based USB 2.0 10/100 ethernet devices - DEPENDS:=+kmod-libphy +kmod-phy-smsc +!LINUX_5_15:kmod-net-selftests + DEPENDS:=+kmod-libphy +kmod-phy-smsc +kmod-net-selftests KCONFIG:=CONFIG_USB_NET_SMSC95XX FILES:=$(LINUX_DIR)/drivers/$(USBNET_DIR)/smsc95xx.ko AUTOLOAD:=$(call AutoProbe,smsc95xx) @@ -1436,11 +1507,11 @@ $(eval $(call KernelPackage,usb-net-rtl8150)) define KernelPackage/usb-net-rtl8152 TITLE:=Kernel module for USB-to-Ethernet Realtek convertors - DEPENDS:=+r8152-firmware +kmod-crypto-sha256 +kmod-usb-net-cdc-ncm + DEPENDS:=+r8152-firmware +kmod-crypto-sha256 +kmod-mii +kmod-libphy KCONFIG:=CONFIG_USB_RTL8152 FILES:=$(LINUX_DIR)/drivers/$(USBNET_DIR)/r8152.ko AUTOLOAD:=$(call AutoProbe,r8152) - $(call AddDepends/usb-net) + $(call AddDepends/usb) endef define KernelPackage/usb-net-rtl8152/description @@ -1622,7 +1693,7 @@ define KernelPackage/usb-hid-mcp2221 SUBMENU:=$(USB_MENU) TITLE:=Microchip USB 2.0 to I2C/UART Protocol Converter with GPIO KCONFIG:=CONFIG_HID_MCP2221 - DEPENDS:=@GPIO_SUPPORT +kmod-usb-hid +kmod-i2c-core +LINUX_6_6:kmod-iio-core + DEPENDS:=@GPIO_SUPPORT +kmod-usb-hid +kmod-i2c-core +kmod-iio-core FILES:=$(LINUX_DIR)/drivers/hid/hid-mcp2221.ko AUTOLOAD:=$(call AutoProbe,hid-mcp2221) endef @@ -1721,7 +1792,7 @@ $(eval $(call KernelPackage,usbip-server)) define KernelPackage/usb-chipidea TITLE:=Host and device support for Chipidea controllers - DEPENDS:=+USB_GADGET_SUPPORT:kmod-usb-gadget @TARGET_ath79 +kmod-usb-ehci +kmod-usb-phy-nop +kmod-usb-roles + DEPENDS:=+USB_GADGET_SUPPORT:kmod-usb-gadget @TARGET_ath79 +kmod-usb-ehci +kmod-usb-phy-nop +kmod-usb-roles +kmod-phy-ath79-usb KCONFIG:= \ CONFIG_EXTCON \ CONFIG_USB_CHIPIDEA \ @@ -1789,12 +1860,12 @@ define KernelPackage/usb3 TITLE:=Support for USB3 controllers DEPENDS:= \ +kmod-usb-xhci-hcd \ + +TARGET_airoha_an7581:kmod-usb-xhci-mtk \ +TARGET_bcm53xx:kmod-usb-bcma \ +TARGET_bcm53xx:kmod-phy-bcm-ns-usb3 \ +TARGET_ramips_mt7621:kmod-usb-xhci-mtk \ - +TARGET_mediatek:kmod-usb-xhci-mtk \ - +TARGET_apm821xx_nand:kmod-usb-xhci-pci-renesas \ - +TARGET_mvebu_cortexa9:kmod-usb-xhci-pci-renesas + +TARGET_econet_en751221:kmod-usb-xhci-mtk \ + +TARGET_mediatek:kmod-usb-xhci-mtk KCONFIG:= \ CONFIG_USB_PCI=y \ CONFIG_USB_XHCI_PCI \ @@ -1830,11 +1901,12 @@ endef $(eval $(call KernelPackage,usb-net2280)) define KernelPackage/usb-roles + SUBMENU:=$(USB_MENU) TITLE:=USB Role Switch Library Module + DEPENDS:=@USB_SUPPORT||USB_GADGET_SUPPORT KCONFIG:=CONFIG_USB_ROLE_SWITCH HIDDEN:=1 FILES:=$(LINUX_DIR)/drivers/usb/roles/roles.ko - $(call AddDepends/usb) endef define KernelPackage/usb-roles/description @@ -1846,9 +1918,7 @@ $(eval $(call KernelPackage,usb-roles)) define KernelPackage/usb-xhci-hcd TITLE:=xHCI HCD (USB 3.0) support - KCONFIG:= \ - CONFIG_USB_XHCI_HCD \ - CONFIG_USB_XHCI_HCD_DEBUGGING=n + KCONFIG:= CONFIG_USB_XHCI_HCD HIDDEN:=1 FILES:=$(LINUX_DIR)/drivers/usb/host/xhci-hcd.ko AUTOLOAD:=$(call AutoLoad,54,xhci-hcd,1) @@ -1883,8 +1953,8 @@ $(eval $(call KernelPackage,usb-xhci-mtk)) define KernelPackage/usb-xhci-pci-renesas TITLE:=Support for additional Renesas xHCI controller with firmware + DEPENDS:=+kmod-usb3 KCONFIG:=CONFIG_USB_XHCI_PCI_RENESAS - HIDDEN:=1 FILES:=$(LINUX_DIR)/drivers/usb/host/xhci-pci-renesas.ko AUTOLOAD:=$(call AutoLoad,54,xhci-pci-renesas,1) $(call AddDepends/usb) diff --git a/openwrt/patch/openwrt-6.x/modules/video.mk b/openwrt/patch/openwrt-6.x/modules/video.mk index c9533d5e7..044ffc072 100644 --- a/openwrt/patch/openwrt-6.x/modules/video.mk +++ b/openwrt/patch/openwrt-6.x/modules/video.mk @@ -12,6 +12,28 @@ V4L2_DIR=v4l2-core V4L2_USB_DIR=usb V4L2_MEM2MEM_DIR=platform +# +# Media +# +define KernelPackage/media-controller + SUBMENU:=$(VIDEO_MENU) + TITLE:=Media Controller API + KCONFIG:= \ + CONFIG_MEDIA_SUPPORT \ + CONFIG_MEDIA_CONTROLLER=y + FILES:= \ + $(LINUX_DIR)/drivers/media/mc/mc.ko + AUTOLOAD:=$(call AutoProbe,mc) +endef + +define KernelPackage/media-controller/description + Kernel modules for media controller API used to query media devices + internal topology and configure it dynamically. +endef + +$(eval $(call KernelPackage,media-controller)) + + # # Video Display # @@ -19,25 +41,29 @@ V4L2_MEM2MEM_DIR=platform define KernelPackage/acpi-video SUBMENU:=$(VIDEO_MENU) TITLE:=ACPI Extensions For Display Adapters - DEPENDS:=@TARGET_x86 +kmod-backlight + DEPENDS:=@TARGET_x86||TARGET_loongarch64 +kmod-backlight HIDDEN:=1 - KCONFIG:=CONFIG_ACPI_VIDEO \ - CONFIG_ACPI_WMI - FILES:=$(LINUX_DIR)/drivers/acpi/video.ko \ - $(LINUX_DIR)/drivers/platform/x86/wmi.ko - AUTOLOAD:=$(call AutoProbe,wmi video) + KCONFIG:=CONFIG_ACPI_VIDEO + FILES:=$(LINUX_DIR)/drivers/acpi/video.ko + AUTOLOAD:=$(call AutoProbe,video) endef define KernelPackage/acpi-video/description Kernel support for integrated graphics devices. endef +define KernelPackage/acpi-video/x86 + KCONFIG+=CONFIG_ACPI_WMI + FILES+=$(LINUX_DIR)/drivers/platform/x86/wmi.ko + AUTOLOAD:=$(call AutoProbe,wmi video) +endef + $(eval $(call KernelPackage,acpi-video)) define KernelPackage/backlight SUBMENU:=$(VIDEO_MENU) TITLE:=Backlight support - DEPENDS:=@DISPLAY_SUPPORT + DEPENDS:=@DISPLAY_SUPPORT +kmod-fb HIDDEN:=1 KCONFIG:=CONFIG_BACKLIGHT_CLASS_DEVICE \ CONFIG_BACKLIGHT_LCD_SUPPORT=y \ @@ -60,7 +86,7 @@ $(eval $(call KernelPackage,backlight)) define KernelPackage/backlight-pwm SUBMENU:=$(VIDEO_MENU) TITLE:=PWM Backlight support - DEPENDS:=+kmod-backlight + DEPENDS:=@PWM_SUPPORT +kmod-backlight KCONFIG:=CONFIG_BACKLIGHT_PWM FILES:=$(LINUX_DIR)/drivers/video/backlight/pwm_bl.ko AUTOLOAD:=$(call AutoProbe,video pwm_bl) @@ -102,7 +128,6 @@ define KernelPackage/fb CONFIG_VT_CONSOLE=y \ CONFIG_VT_HW_CONSOLE_BINDING=y FILES:=$(LINUX_DIR)/drivers/video/fbdev/core/fb.ko \ - $(LINUX_DIR)/drivers/video/fbdev/core/fb_io_fops.ko \ $(LINUX_DIR)/lib/fonts/font.ko AUTOLOAD:=$(call AutoLoad,06,fb font) endef @@ -112,8 +137,8 @@ define KernelPackage/fb/description endef define KernelPackage/fb/x86 - FILES+=$(LINUX_DIR)/arch/x86/video/fbdev.ko - AUTOLOAD:=$(call AutoLoad,06,fbdev fb font) + FILES+=$(LINUX_DIR)/arch/x86/video/video-common.ko + AUTOLOAD:=$(call AutoLoad,06,video-common fb font) endef $(eval $(call KernelPackage,fb)) @@ -166,11 +191,24 @@ endef $(eval $(call KernelPackage,fb-cfb-imgblt)) +define KernelPackage/fb-io-fops + SUBMENU:=$(VIDEO_MENU) + TITLE:=Fbdev helpers for framebuffers in I/O memory + HIDDEN:=1 + KCONFIG:=CONFIG_FB_IOMEM_FOPS + FILES:=$(LINUX_DIR)/drivers/video/fbdev/core/fb_io_fops.ko + AUTOLOAD:=$(call AutoLoad,07,fb_io_fops) +endef + +$(eval $(call KernelPackage,fb-io-fops)) + + define KernelPackage/fb-sys-fops SUBMENU:=$(VIDEO_MENU) TITLE:=Framebuffer software sys ops support DEPENDS:=+kmod-fb - KCONFIG:=CONFIG_FB_SYS_FOPS + KCONFIG:= \ + CONFIG_FB_SYSMEM_FOPS FILES:=$(LINUX_DIR)/drivers/video/fbdev/core/fb_sys_fops.ko AUTOLOAD:=$(call AutoLoad,07,fb_sys_fops) endef @@ -261,6 +299,17 @@ endef $(eval $(call KernelPackage,multimedia-input)) +define KernelPackage/cec-core + SUBMENU:=$(VIDEO_MENU) + TITLE:=CEC support + KCONFIG:=CONFIG_CEC_CORE + FILES:=$(LINUX_DIR)/drivers/media/cec/core/cec.ko + AUTOLOAD:=$(call AutoProbe,cec) +endef + +$(eval $(call KernelPackage,cec-core)) + + define KernelPackage/drm SUBMENU:=$(VIDEO_MENU) TITLE:=Direct Rendering Manager (DRM) support @@ -280,10 +329,22 @@ endef $(eval $(call KernelPackage,drm)) +define KernelPackage/drm-client-lib + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Direct Rendering Manager + DEPENDS:=+kmod-drm +kmod-drm-kms-helper + KCONFIG:=CONFIG_DRM_CLIENT_LIB + FILES:=$(LINUX_DIR)/drivers/gpu/drm/clients/drm_client_lib.ko + AUTOLOAD:=$(call AutoProbe,drm_client_lib) +endef + +$(eval $(call KernelPackage,drm-client-lib)) + define KernelPackage/drm-buddy SUBMENU:=$(VIDEO_MENU) TITLE:=A page based buddy allocator - DEPENDS:=@DISPLAY_SUPPORT +kmod-drm @LINUX_6_1||LINUX_6_6 + DEPENDS:=@DISPLAY_SUPPORT +kmod-drm + HIDDEN:=1 KCONFIG:=CONFIG_DRM_BUDDY FILES:= $(LINUX_DIR)/drivers/gpu/drm/drm_buddy.ko AUTOLOAD:=$(call AutoProbe,drm_buddy) @@ -298,7 +359,8 @@ $(eval $(call KernelPackage,drm-buddy)) define KernelPackage/drm-display-helper SUBMENU:=$(VIDEO_MENU) TITLE:=DRM helpers for display adapters drivers - DEPENDS:=@DISPLAY_SUPPORT +kmod-drm-kms-helper @LINUX_6_1||LINUX_6_6 + DEPENDS:=@DISPLAY_SUPPORT +kmod-drm-kms-helper +kmod-cec-core + HIDDEN:=1 KCONFIG:=CONFIG_DRM_DISPLAY_HELPER FILES:=$(LINUX_DIR)/drivers/gpu/drm/display/drm_display_helper.ko AUTOLOAD:=$(call AutoProbe,drm_display_helper) @@ -310,22 +372,11 @@ endef $(eval $(call KernelPackage,drm-display-helper)) -define KernelPackage/drm-gem-shmem-helper - SUBMENU:=$(VIDEO_MENU) - TITLE:=GEM shmem helper functions - DEPENDS:=@DISPLAY_SUPPORT +kmod-drm - KCONFIG:=CONFIG_DRM_GEM_SHMEM_HELPER - FILES:=$(LINUX_DIR)/drivers/gpu/drm/drm_shmem_helper.ko - AUTOLOAD:=$(call AutoProbe,drm_shmem_helper) -endef - -$(eval $(call KernelPackage,drm-gem-shmem-helper)) - define KernelPackage/drm-exec SUBMENU:=$(VIDEO_MENU) HIDDEN:=1 TITLE:=Execution context for command submissions - DEPENDS:=@DISPLAY_SUPPORT +kmod-drm @LINUX_6_6 + DEPENDS:=@DISPLAY_SUPPORT +kmod-drm KCONFIG:=CONFIG_DRM_EXEC FILES:=$(LINUX_DIR)/drivers/gpu/drm/drm_exec.ko AUTOLOAD:=$(call AutoProbe,drm_exec) @@ -337,6 +388,75 @@ endef $(eval $(call KernelPackage,drm-exec)) +define KernelPackage/drm-dma-helper + SUBMENU:=$(VIDEO_MENU) + HIDDEN:=1 + TITLE:=GEM DMA helper functions + DEPENDS:=@DISPLAY_SUPPORT +kmod-drm-kms-helper + KCONFIG:=CONFIG_DRM_GEM_DMA_HELPER + FILES:=$(LINUX_DIR)/drivers/gpu/drm/drm_dma_helper.ko + AUTOLOAD:=$(call AutoProbe,drm_dma_helper) +endef + +define KernelPackage/drm-dma-helper/description + GEM DMA helper functions. +endef + +$(eval $(call KernelPackage,drm-dma-helper)) + + +define KernelPackage/drm-shmem-helper + SUBMENU:=$(VIDEO_MENU) + HIDDEN:=1 + TITLE:=GEM SHMEM helper functions + DEPENDS:=@DISPLAY_SUPPORT +kmod-drm-kms-helper + KCONFIG:=CONFIG_DRM_GEM_SHMEM_HELPER + FILES:=$(LINUX_DIR)/drivers/gpu/drm/drm_shmem_helper.ko + AUTOLOAD:=$(call AutoProbe,drm_shmem_helper) +endef + +define KernelPackage/drm-shmem-helper/description + GEM SHMEM helper functions. +endef + +$(eval $(call KernelPackage,drm-shmem-helper)) + + +define KernelPackage/drm-mipi-dbi + SUBMENU:=$(VIDEO_MENU) + HIDDEN:=1 + TITLE:=MIPI DBI helpers + DEPENDS:=@DISPLAY_SUPPORT +kmod-backlight +kmod-drm-kms-helper + KCONFIG:=CONFIG_DRM_MIPI_DBI + FILES:=$(LINUX_DIR)/drivers/gpu/drm/drm_mipi_dbi.ko + AUTOLOAD:=$(call AutoProbe,drm_mipi_dbi) +endef + +define KernelPackage/drm-mipi-dbi/description + MIPI Display Bus Interface (DBI) LCD controller support. +endef + +$(eval $(call KernelPackage,drm-mipi-dbi)) + + +define KernelPackage/drm-sched + SUBMENU:=$(VIDEO_MENU) + HIDDEN:=1 + TITLE:=GPU scheduler + DEPENDS:=@DISPLAY_SUPPORT +kmod-drm + KCONFIG:=CONFIG_DRM_SCHED + FILES:=$(LINUX_DIR)/drivers/gpu/drm/scheduler/gpu-sched.ko + AUTOLOAD:=$(call AutoProbe,gpu-sched) +endef + +define KernelPackage/drm-sched/description + The GPU scheduler provides entities which allow userspace to push jobs + into software queues which are then scheduled on a hardware run queue. +endef + +$(eval $(call KernelPackage,drm-sched)) + + define KernelPackage/drm-ttm SUBMENU:=$(VIDEO_MENU) TITLE:=GPU memory management subsystem @@ -358,7 +478,7 @@ define KernelPackage/drm-ttm-helper SUBMENU:=$(VIDEO_MENU) TITLE:=Helpers for ttm-based gem objects HIDDEN:=1 - DEPENDS:=@DISPLAY_SUPPORT +kmod-drm-ttm + DEPENDS:=@DISPLAY_SUPPORT +kmod-drm-ttm +kmod-drm-kms-helper KCONFIG:=CONFIG_DRM_TTM_HELPER FILES:=$(LINUX_DIR)/drivers/gpu/drm/drm_ttm_helper.ko AUTOLOAD:=$(call AutoProbe,drm_ttm_helper) @@ -389,7 +509,7 @@ define KernelPackage/drm-suballoc-helper SUBMENU:=$(VIDEO_MENU) HIDDEN:=1 TITLE:=DRM suballocation helper - DEPENDS:=@DISPLAY_SUPPORT +kmod-drm @LINUX_6_6 + DEPENDS:=@DISPLAY_SUPPORT +kmod-drm KCONFIG:=CONFIG_DRM_SUBALLOC_HELPER FILES:=$(LINUX_DIR)/drivers/gpu/drm/drm_suballoc_helper.ko AUTOLOAD:=$(call AutoProbe,drm_suballoc_helper) @@ -401,13 +521,30 @@ endef $(eval $(call KernelPackage,drm-suballoc-helper)) +define KernelPackage/drm-vram-helper + SUBMENU:=$(VIDEO_MENU) + HIDDEN:=1 + TITLE:=DRM helpers for VRAM memory management + DEPENDS:=@DISPLAY_SUPPORT \ + +kmod-drm-kms-helper +kmod-drm-ttm-helper + KCONFIG:=CONFIG_DRM_VRAM_HELPER + FILES:=$(LINUX_DIR)/drivers/gpu/drm/drm_vram_helper.ko + AUTOLOAD:=$(call AutoProbe,drm_vram_helper) +endef + +define KernelPackage/drm-vram-helper/description + DRM helpers for VRAM memory management. +endef + +$(eval $(call KernelPackage,drm-vram-helper)) + define KernelPackage/drm-amdgpu SUBMENU:=$(VIDEO_MENU) TITLE:=AMDGPU DRM support - DEPENDS:=@TARGET_x86 @DISPLAY_SUPPORT +kmod-backlight +kmod-drm-ttm \ + DEPENDS:=@TARGET_x86||TARGET_loongarch64 @DISPLAY_SUPPORT +kmod-backlight +kmod-drm-ttm \ +kmod-drm-ttm-helper +kmod-drm-kms-helper +kmod-i2c-algo-bit +amdgpu-firmware \ +kmod-drm-display-helper +kmod-drm-buddy +kmod-acpi-video \ - +LINUX_6_6:kmod-drm-exec +LINUX_6_6:kmod-drm-suballoc-helper + +kmod-drm-exec +kmod-drm-suballoc-helper KCONFIG:=CONFIG_DRM_AMDGPU \ CONFIG_DRM_AMDGPU_SI=y \ CONFIG_DRM_AMDGPU_CIK=y \ @@ -415,7 +552,8 @@ define KernelPackage/drm-amdgpu CONFIG_DEBUG_KERNEL_DC=n FILES:=$(LINUX_DIR)/drivers/gpu/drm/amd/amdgpu/amdgpu.ko \ $(LINUX_DIR)/drivers/gpu/drm/scheduler/gpu-sched.ko \ - $(LINUX_DIR)/drivers/gpu/drm/amd/amdxcp/amdxcp.ko@ge6.5 + $(LINUX_DIR)/drivers/gpu/drm/amd/amdxcp/amdxcp.ko \ + $(LINUX_DIR)/drivers/gpu/drm/drm_panel_backlight_quirks.ko AUTOLOAD:=$(call AutoProbe,amdgpu) endef @@ -423,8 +561,72 @@ define KernelPackage/drm-amdgpu/description Direct Rendering Manager (DRM) support for AMDGPU Cards endef +define KernelPackage/drm-amdgpu/loongarch64 + KCONFIG+=CONFIG_DRM_AMDGPU_USERPTR=y \ + CONFIG_DRM_AMD_DC=y \ + CONFIG_DRM_AMD_DC_FP=y \ + CONFIG_DRM_AMD_DC_SI=y +endef + $(eval $(call KernelPackage,drm-amdgpu)) +define KernelPackage/drm-i915 + SUBMENU:=$(VIDEO_MENU) + TITLE:=Intel i915 DRM support + DEPENDS:=@(TARGET_x86_64||TARGET_x86_generic||TARGET_x86_legacy) \ + @DISPLAY_SUPPORT +kmod-backlight +kmod-drm-ttm \ + +kmod-drm-ttm-helper +kmod-drm-kms-helper +kmod-i2c-algo-bit +i915-firmware-dmc \ + +kmod-drm-display-helper +kmod-drm-buddy +kmod-acpi-video \ + +kmod-drm-exec +kmod-drm-suballoc-helper + KCONFIG:=CONFIG_DRM_I915 \ + CONFIG_DRM_I915_CAPTURE_ERROR=y \ + CONFIG_DRM_I915_COMPRESS_ERROR=y \ + CONFIG_DRM_I915_DEBUG=n \ + CONFIG_DRM_I915_DEBUG_GUC=n \ + CONFIG_DRM_I915_DEBUG_MMIO=n \ + CONFIG_DRM_I915_DEBUG_RUNTIME_PM=n \ + CONFIG_DRM_I915_DEBUG_VBLANK_EVADE=n \ + CONFIG_DRM_I915_FENCE_TIMEOUT=10000 \ + CONFIG_DRM_I915_FORCE_PROBE="" \ + CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500 \ + CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS=n \ + CONFIG_DRM_I915_MAX_REQUEST_BUSYWAIT=8000 \ + CONFIG_DRM_I915_PREEMPT_TIMEOUT=640 \ + CONFIG_DRM_I915_PREEMPT_TIMEOUT_COMPUTE=7500 \ + CONFIG_DRM_I915_REQUEST_TIMEOUT=20000 \ + CONFIG_DRM_I915_SELFTEST=n \ + CONFIG_DRM_I915_STOP_TIMEOUT=100 \ + CONFIG_DRM_I915_SW_FENCE_CHECK_DAG=n \ + CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS=n \ + CONFIG_DRM_I915_TIMESLICE_DURATION=1 \ + CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250 \ + CONFIG_DRM_I915_USERPTR=y \ + CONFIG_DRM_I915_WERROR=n \ + CONFIG_FB_INTEL=n + FILES:=$(LINUX_DIR)/drivers/gpu/drm/i915/i915.ko + AUTOLOAD:=$(call AutoProbe,i915) +endef + +define KernelPackage/drm-i915/description + Direct Rendering Manager (DRM) support for Intel GPU +endef + +$(eval $(call KernelPackage,drm-i915)) + +define KernelPackage/drm-ivpu + SUBMENU:=$(VIDEO_MENU) + TITLE:=Intel VPU DRM support + DEPENDS:=@TARGET_x86_64 +ivpu-firmware + KCONFIG:=CONFIG_DRM_ACCEL_IVPU + FILES:=$(LINUX_DIR)/drivers/accel/ivpu/intel_vpu.ko + AUTOLOAD:=$(call AutoProbe,intel_vpu) +endef + +define KernelPackage/drm-ivpu/description + Direct Rendering Manager (DRM) support for Intel VPU +endef + +$(eval $(call KernelPackage,drm-ivpu)) define KernelPackage/drm-imx SUBMENU:=$(VIDEO_MENU) @@ -445,9 +647,8 @@ define KernelPackage/drm-imx CONFIG_DRM_IMX_LDB=n \ CONFIG_DRM_IMX_HDMI=n FILES:= \ - $(LINUX_DIR)/drivers/gpu/drm/imx/imxdrm.ko@lt6.6 \ - $(LINUX_DIR)/drivers/gpu/drm/imx/ipuv3/imxdrm.ko@ge6.6 \ - $(LINUX_DIR)/drivers/gpu/drm/drm_dma_helper.ko@ge6.1 \ + $(LINUX_DIR)/drivers/gpu/drm/imx/ipuv3/imxdrm.ko \ + $(LINUX_DIR)/drivers/gpu/drm/drm_dma_helper.ko \ $(LINUX_DIR)/drivers/gpu/ipu-v3/imx-ipu-v3.ko AUTOLOAD:=$(call AutoLoad,08,imxdrm imx-ipu-v3 imx-ipuv3-crtc) endef @@ -461,15 +662,14 @@ $(eval $(call KernelPackage,drm-imx)) define KernelPackage/drm-imx-hdmi SUBMENU:=$(VIDEO_MENU) TITLE:=Freescale i.MX HDMI DRM support - DEPENDS:=+kmod-sound-core kmod-drm-imx kmod-drm-display-helper + DEPENDS:=+kmod-sound-core kmod-drm-imx +kmod-drm-display-helper KCONFIG:=CONFIG_DRM_IMX_HDMI \ CONFIG_DRM_DW_HDMI_AHB_AUDIO \ CONFIG_DRM_DW_HDMI_I2S_AUDIO FILES:= \ $(LINUX_DIR)/drivers/gpu/drm/bridge/synopsys/dw-hdmi.ko \ $(LINUX_DIR)/drivers/gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.ko \ - $(LINUX_DIR)/drivers/gpu/drm/imx/dw_hdmi-imx.ko@lt6.6 \ - $(LINUX_DIR)/drivers/gpu/drm/imx/ipuv3/dw_hdmi-imx.ko@ge6.6 + $(LINUX_DIR)/drivers/gpu/drm/imx/ipuv3/dw_hdmi-imx.ko AUTOLOAD:=$(call AutoLoad,08,dw-hdmi dw-hdmi-ahb-audio.ko dw_hdmi-imx) endef @@ -479,13 +679,12 @@ endef $(eval $(call KernelPackage,drm-imx-hdmi)) + define KernelPackage/drm-imx-ldb SUBMENU:=$(VIDEO_MENU) TITLE:=Freescale i.MX LVDS DRM support - DEPENDS:=@(TARGET_imx&&TARGET_imx_cortexa9) +kmod-backlight kmod-drm-imx + DEPENDS:=@(TARGET_imx&&TARGET_imx_cortexa9) +kmod-backlight +kmod-drm-panel-simple kmod-drm-imx KCONFIG:=CONFIG_DRM_IMX_LDB \ - CONFIG_DRM_PANEL_SIMPLE \ - CONFIG_DRM_PANEL=y \ CONFIG_DRM_PANEL_SAMSUNG_LD9040=n \ CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=n \ CONFIG_DRM_PANEL_LG_LG4573=n \ @@ -493,10 +692,8 @@ define KernelPackage/drm-imx-ldb CONFIG_DRM_PANEL_LVDS=n \ CONFIG_DRM_PANEL_S6E8AA0=n \ CONFIG_DRM_PANEL_SITRONIX_ST7789V=n - FILES:=$(LINUX_DIR)/drivers/gpu/drm/imx/imx-ldb.ko@lt6.6 \ - $(LINUX_DIR)/drivers/gpu/drm/imx/ipuv3/imx-ldb.ko@ge6.6 \ - $(LINUX_DIR)/drivers/gpu/drm/panel/panel-simple.ko \ - $(LINUX_DIR)/drivers/gpu/drm/drm_dp_aux_bus.ko@lt6.1 + FILES:= \ + $(LINUX_DIR)/drivers/gpu/drm/imx/ipuv3/imx-ldb.ko AUTOLOAD:=$(call AutoLoad,08,imx-ldb) endef @@ -506,31 +703,45 @@ endef $(eval $(call KernelPackage,drm-imx-ldb)) -define KernelPackage/drm-lima +define KernelPackage/drm-panel-mipi-dbi SUBMENU:=$(VIDEO_MENU) - TITLE:=Mali-4xx GPU support - DEPENDS:=@(TARGET_rockchip||TARGET_sunxi) +kmod-drm-gem-shmem-helper - KCONFIG:= \ - CONFIG_DRM_VGEM \ - CONFIG_DRM_GEM_CMA_HELPER=y \ - CONFIG_DRM_LIMA + TITLE:=Generic MIPI DBI LCD panel + DEPENDS:=+kmod-drm-mipi-dbi +kmod-drm-dma-helper +kmod-drm-client-lib + KCONFIG:=CONFIG_DRM_PANEL_MIPI_DBI \ + CONFIG_DRM_FBDEV_EMULATION=y \ + CONFIG_DRM_FBDEV_OVERALLOC=100 FILES:= \ - $(LINUX_DIR)/drivers/gpu/drm/vgem/vgem.ko \ - $(LINUX_DIR)/drivers/gpu/drm/scheduler/gpu-sched.ko \ - $(LINUX_DIR)/drivers/gpu/drm/lima/lima.ko - AUTOLOAD:=$(call AutoProbe,lima vgem) + $(LINUX_DIR)/drivers/gpu/drm/tiny/panel-mipi-dbi.ko + AUTOLOAD:=$(call AutoProbe,panel-mipi-dbi) +endef + +define KernelPackage/drm-panel-mipi-dbi/description + Generic driver for MIPI Alliance Display Bus Interface endef -define KernelPackage/drm-lima/description - Open-source reverse-engineered driver for Mali-4xx GPUs +$(eval $(call KernelPackage,drm-panel-mipi-dbi)) + + +define KernelPackage/drm-panel-simple + SUBMENU:=$(VIDEO_MENU) + TITLE:=Simple (non-eDP) TFT panels + DEPENDS:=@USES_DEVICETREE @USES_PM +kmod-drm +kmod-backlight + KCONFIG:=CONFIG_DRM_PANEL_SIMPLE \ + CONFIG_DRM_PANEL=y + FILES:=$(LINUX_DIR)/drivers/gpu/drm/panel/panel-simple.ko + AUTOLOAD:=$(call AutoProbe,panel-simple) endef -$(eval $(call KernelPackage,drm-lima)) +define KernelPackage/drm-panel-simple/description + Generic driver for simple raw (ie. non-eDP) TFT panels. +endef + +$(eval $(call KernelPackage,drm-panel-simple)) define KernelPackage/drm-panfrost SUBMENU:=$(VIDEO_MENU) TITLE:=DRM support for ARM Mali Midgard/Bifrost GPUs - DEPENDS:=@(TARGET_rockchip||TARGET_sunxi) +kmod-drm +kmod-drm-gem-shmem-helper + DEPENDS:=@(TARGET_rockchip||TARGET_sunxi) +kmod-drm +kmod-drm-shmem-helper KCONFIG:=CONFIG_DRM_PANFROST FILES:= \ $(LINUX_DIR)/drivers/gpu/drm/panfrost/panfrost.ko \ @@ -548,7 +759,7 @@ $(eval $(call KernelPackage,drm-panfrost)) define KernelPackage/drm-panthor SUBMENU:=$(VIDEO_MENU) TITLE:=DRM support for ARM Mali CSF-based GPUs - DEPENDS:=@TARGET_rockchip +kmod-drm +kmod-drm-exec +kmod-drm-gem-shmem-helper + DEPENDS:=@TARGET_rockchip +kmod-drm +kmod-drm-exec +kmod-drm-shmem-helper KCONFIG:= \ CONFIG_DRM_GPUVM \ CONFIG_DRM_PANTHOR @@ -565,12 +776,34 @@ endef $(eval $(call KernelPackage,drm-panthor)) + +define KernelPackage/drm-panel-tc358762 + SUBMENU:=$(VIDEO_MENU) + TITLE:=TC358762 DSI/DPI bridge + DEPENDS:=+kmod-drm-kms-helper + KCONFIG:=CONFIG_DRM_TOSHIBA_TC358762 \ + CONFIG_DRM_BRIDGE=y \ + CONFIG_DRM_MIPI_DSI=y \ + CONFIG_DRM_PANEL=y + CONFIG_DRM_PANEL_BRIDGE=y + FILES:= \ + $(LINUX_DIR)/drivers/gpu/drm/bridge/tc358762.ko + AUTOLOAD:=$(call AutoProbe,tc358762) +endef + +define KernelPackage/drm-panel-tc358762/description + Toshiba TC358762 DSI/DPI bridge driver +endef + +$(eval $(call KernelPackage,drm-panel-tc358762)) + + define KernelPackage/drm-radeon SUBMENU:=$(VIDEO_MENU) TITLE:=Radeon DRM support DEPENDS:=@TARGET_x86 @DISPLAY_SUPPORT +kmod-backlight +kmod-drm-kms-helper \ +kmod-drm-ttm +kmod-drm-ttm-helper +kmod-i2c-algo-bit +radeon-firmware \ - +kmod-drm-display-helper +kmod-acpi-video +LINUX_6_6:kmod-drm-suballoc-helper + +kmod-drm-display-helper +kmod-acpi-video +kmod-drm-suballoc-helper +kmod-drm-exec KCONFIG:=CONFIG_DRM_RADEON FILES:=$(LINUX_DIR)/drivers/gpu/drm/radeon/radeon.ko AUTOLOAD:=$(call AutoProbe,radeon) @@ -589,13 +822,12 @@ $(eval $(call KernelPackage,drm-radeon)) define KernelPackage/video-core SUBMENU:=$(VIDEO_MENU) TITLE=Video4Linux support - DEPENDS:=+PACKAGE_kmod-i2c-core:kmod-i2c-core + DEPENDS:=+PACKAGE_kmod-i2c-core:kmod-i2c-core +kmod-media-controller KCONFIG:= \ - CONFIG_MEDIA_SUPPORT \ CONFIG_MEDIA_CAMERA_SUPPORT=y \ CONFIG_VIDEO_DEV \ CONFIG_V4L_PLATFORM_DRIVERS=y \ - CONFIG_MEDIA_PLATFORM_DRIVERS=y@ge6.1 + CONFIG_MEDIA_PLATFORM_DRIVERS=y FILES:= \ $(LINUX_DIR)/drivers/media/$(V4L2_DIR)/videodev.ko AUTOLOAD:=$(call AutoLoad,60,videodev) @@ -647,21 +879,27 @@ endef $(eval $(call KernelPackage,video-videobuf2)) - -define KernelPackage/video-cpia2 - TITLE:=CPIA2 video driver - DEPENDS:=@USB_SUPPORT +kmod-usb-core @LINUX_5_15 - KCONFIG:=CONFIG_VIDEO_CPIA2 - FILES:=$(LINUX_DIR)/drivers/media/$(V4L2_USB_DIR)/cpia2/cpia2.ko - AUTOLOAD:=$(call AutoProbe,cpia2) - $(call AddDepends/camera) +define KernelPackage/video-async + TITLE:=V4L2 ASYNC support + HIDDEN:=1 + KCONFIG:=CONFIG_V4L2_ASYNC + FILES:=$(LINUX_DIR)/drivers/media/$(V4L2_DIR)/v4l2-async.ko + $(call AddDepends/video) + AUTOLOAD:=$(call AutoProbe,v4l2-async) endef -define KernelPackage/video-cpia2/description - Kernel modules for supporting CPIA2 USB based cameras +$(eval $(call KernelPackage,video-async)) + +define KernelPackage/video-fwnode + TITLE:=V4L2 FWNODE support + HIDDEN:=1 + KCONFIG:=CONFIG_V4L2_FWNODE + FILES:=$(LINUX_DIR)/drivers/media/$(V4L2_DIR)/v4l2-fwnode.ko + $(call AddDepends/video,+kmod-video-async) + AUTOLOAD:=$(call AutoProbe,v4l2-fwnode) endef -$(eval $(call KernelPackage,video-cpia2)) +$(eval $(call KernelPackage,video-fwnode)) define KernelPackage/video-pwc @@ -685,10 +923,10 @@ $(eval $(call KernelPackage,video-pwc)) define KernelPackage/video-uvc TITLE:=USB Video Class (UVC) support DEPENDS:=@USB_SUPPORT +kmod-usb-core +kmod-video-videobuf2 +kmod-input-core - KCONFIG:= CONFIG_USB_VIDEO_CLASS CONFIG_UVC_COMMON@ge6.3 + KCONFIG:= CONFIG_USB_VIDEO_CLASS CONFIG_UVC_COMMON FILES:=$(LINUX_DIR)/drivers/media/$(V4L2_USB_DIR)/uvc/uvcvideo.ko \ - $(LINUX_DIR)/drivers/media/common/uvc.ko@ge6.3 - AUTOLOAD:=$(call AutoProbe,uvc@ge6.3 uvcvideo) + $(LINUX_DIR)/drivers/media/common/uvc.ko + AUTOLOAD:=$(call AutoProbe,uvc uvcvideo) $(call AddDepends/camera) endef @@ -858,6 +1096,21 @@ endef $(eval $(call KernelPackage,video-gspca-pac207)) +define KernelPackage/video-gspca-pac7302 + TITLE:=pac7302 webcam support + KCONFIG:=CONFIG_USB_GSPCA_PAC7302 + FILES:=$(LINUX_DIR)/drivers/media/$(V4L2_USB_DIR)/gspca/gspca_pac7302.ko + AUTOLOAD:=$(call AutoProbe,gspca_pac7302) + $(call AddDepends/camera-gspca) +endef + +define KernelPackage/video-gspca-pac7302/description + The Pixart PAC7302 USB Camera Driver (pac7302) kernel module +endef + +$(eval $(call KernelPackage,video-gspca-pac7302)) + + define KernelPackage/video-gspca-pac7311 TITLE:=pac7311 webcam support KCONFIG:=CONFIG_USB_GSPCA_PAC7311 @@ -1255,36 +1508,50 @@ endef $(eval $(call KernelPackage,video-mem2mem)) -define KernelPackage/video-dma +define KernelPackage/video-dma-contig SUBMENU:=$(VIDEO_MENU) TITLE:=Video DMA support HIDDEN:=1 DEPENDS:=+kmod-video-videobuf2 - KCONFIG:= \ - CONFIG_VIDEOBUF2_DMA_CONTIG \ - CONFIG_VIDEOBUF2_DMA_SG - FILES:= $(LINUX_DIR)/drivers/media/common/videobuf2/videobuf2-dma-*.ko - AUTOLOAD:=$(call AutoLoad,66,videobuf2-dma-contig videobuf2-dma-sg) + KCONFIG:=CONFIG_VIDEOBUF2_DMA_CONTIG + FILES:=$(LINUX_DIR)/drivers/media/common/videobuf2/videobuf2-dma-contig.ko + AUTOLOAD:=$(call AutoLoad,66,videobuf2-dma-contig) + $(call AddDepends/video) +endef + +define KernelPackage/video-dma-contig/description + Video DMA support Contig +endef + + +$(eval $(call KernelPackage,video-dma-contig)) + +define KernelPackage/video-dma-sg + SUBMENU:=$(VIDEO_MENU) + TITLE:=Video DMA support + HIDDEN:=1 + DEPENDS:=+kmod-video-videobuf2 + KCONFIG:=CONFIG_VIDEOBUF2_DMA_SG + FILES:=$(LINUX_DIR)/drivers/media/common/videobuf2/videobuf2-dma-sg.ko + AUTOLOAD:=$(call AutoLoad,66,videobuf2-dma-sg) $(call AddDepends/video) endef -define KernelPackage/video-dma/description - Video DMA support +define KernelPackage/video-dma-sg/description + Video DMA support SG endef -$(eval $(call KernelPackage,video-dma)) +$(eval $(call KernelPackage,video-dma-sg)) define KernelPackage/video-coda TITLE:=i.MX VPU support - DEPENDS:=@(TARGET_imx&&!TARGET_imx_cortexa7) +kmod-video-mem2mem +kmod-video-dma + DEPENDS:=@(TARGET_imx&&TARGET_imx_cortexa9) +kmod-video-mem2mem +kmod-video-dma-contig KCONFIG:= \ CONFIG_VIDEO_CODA \ CONFIG_VIDEO_IMX_VDOA FILES:= \ - $(LINUX_DIR)/drivers/media/$(V4L2_MEM2MEM_DIR)/coda/coda-vpu.ko@lt6.1 \ - $(LINUX_DIR)/drivers/media/$(V4L2_MEM2MEM_DIR)/chips-media/coda-vpu.ko@ge6.1 \ - $(LINUX_DIR)/drivers/media/$(V4L2_MEM2MEM_DIR)/coda/imx-vdoa.ko@lt6.1 \ - $(LINUX_DIR)/drivers/media/$(V4L2_MEM2MEM_DIR)/chips-media/imx-vdoa.ko@ge6.1 \ + $(LINUX_DIR)/drivers/media/$(V4L2_MEM2MEM_DIR)/chips-media/coda-vpu.ko \ + $(LINUX_DIR)/drivers/media/$(V4L2_MEM2MEM_DIR)/chips-media/imx-vdoa.ko \ $(LINUX_DIR)/drivers/media/$(V4L2_DIR)/v4l2-jpeg.ko AUTOLOAD:=$(call AutoProbe,coda-vpu imx-vdoa v4l2-jpeg) $(call AddDepends/video) @@ -1298,10 +1565,9 @@ $(eval $(call KernelPackage,video-coda)) define KernelPackage/video-pxp TITLE:=i.MX PXP support - DEPENDS:=@TARGET_imx +kmod-video-mem2mem +kmod-video-dma + DEPENDS:=@TARGET_imx +kmod-video-mem2mem +kmod-video-dma-contig KCONFIG:= CONFIG_VIDEO_IMX_PXP - FILES:= $(LINUX_DIR)/drivers/media/$(V4L2_MEM2MEM_DIR)/imx-pxp.ko@lt6.1 \ - $(LINUX_DIR)/drivers/media/platform/nxp/imx-pxp.ko@ge6.1 + FILES:= $(LINUX_DIR)/drivers/media/platform/nxp/imx-pxp.ko AUTOLOAD:=$(call AutoProbe,imx-pxp) $(call AddDepends/video) endef @@ -1316,7 +1582,7 @@ $(eval $(call KernelPackage,video-pxp)) define KernelPackage/video-tw686x TITLE:=TW686x support - DEPENDS:=@PCIE_SUPPORT +kmod-video-dma +kmod-sound-core + DEPENDS:=@PCIE_SUPPORT +kmod-video-dma-contig +kmod-video-dma-sg +kmod-sound-core KCONFIG:= CONFIG_VIDEO_TW686X FILES:= $(LINUX_DIR)/drivers/media/pci/tw686x/tw686x.ko AUTOLOAD:=$(call AutoProbe,tw686x) @@ -1329,42 +1595,3 @@ define KernelPackage/video-tw686x/description endef $(eval $(call KernelPackage,video-tw686x)) - - -define KernelPackage/drm-i915 - SUBMENU:=$(VIDEO_MENU) - TITLE:=Intel GPU drm support - DEPENDS:=@TARGET_x86 +kmod-drm-buddy +kmod-drm-ttm +kmod-drm-kms-helper +i915-firmware \ - +LINUX_6_6:kmod-drm-display-helper +LINUX_6_6:kmod-acpi-video - KCONFIG:= \ - CONFIG_INTEL_GTT \ - CONFIG_DRM_I915 \ - CONFIG_DRM_I915_CAPTURE_ERROR=y \ - CONFIG_DRM_I915_COMPRESS_ERROR=y \ - CONFIG_DRM_I915_DEBUG=n \ - CONFIG_DRM_I915_DEBUG_GUC=n \ - CONFIG_DRM_I915_DEBUG_MMIO=n \ - CONFIG_DRM_I915_DEBUG_RUNTIME_PM=n \ - CONFIG_DRM_I915_DEBUG_VBLANK_EVADE=n \ - CONFIG_DRM_I915_GVT=y \ - CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS=n \ - CONFIG_DRM_I915_SELFTEST=n \ - CONFIG_DRM_I915_SW_FENCE_CHECK_DAG=n \ - CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS=n \ - CONFIG_DRM_I915_USERPTR=y \ - CONFIG_DRM_I915_WERROR=n - FILES:= \ - $(LINUX_DIR)/drivers/gpu/drm/i915/i915.ko - AUTOLOAD:=$(call AutoProbe,i915) -endef - -define KernelPackage/drm-i915/description - Direct Rendering Manager (DRM) support for "Intel Graphics - Media Accelerator" or "HD Graphics" integrated graphics, - including 830M, 845G, 852GM, 855GM, 865G, 915G, 945G, 965G, - G35, G41, G43, G45 chipsets and Celeron, Pentium, Core i3, - Core i5, Core i7 as well as Atom CPUs with integrated graphics. -endef - -$(eval $(call KernelPackage,drm-i915)) - diff --git a/openwrt/patch/openwrt-6.x/modules/virt.mk b/openwrt/patch/openwrt-6.x/modules/virt.mk index 8f4445c52..d7ba60b61 100644 --- a/openwrt/patch/openwrt-6.x/modules/virt.mk +++ b/openwrt/patch/openwrt-6.x/modules/virt.mk @@ -22,7 +22,7 @@ define KernelPackage/kvm-x86 KCONFIG:=\ CONFIG_KVM \ CONFIG_KVM_MMU_AUDIT=n \ - CONFIG_KVM_SMM=y@ge6.6 \ + CONFIG_KVM_SMM=y \ CONFIG_VIRTUALIZATION=y FILES:= $(LINUX_DIR)/arch/$(LINUX_KARCH)/kvm/kvm.ko AUTOLOAD:=$(call AutoProbe,kvm.ko) @@ -80,10 +80,8 @@ define KernelPackage/vfio TITLE:=VFIO Non-Privileged userspace driver framework KCONFIG:= \ CONFIG_VFIO \ - CONFIG_VFIO_AMBA=n \ CONFIG_VFIO_NOIOMMU=n \ - CONFIG_VFIO_MDEV=n \ - CONFIG_VFIO_PLATFORM=n + CONFIG_VFIO_MDEV=n FILES:= \ $(LINUX_DIR)/drivers/vfio/vfio.ko \ $(LINUX_DIR)/drivers/vfio/vfio_iommu_type1.ko diff --git a/openwrt/patch/openwrt-6.x/modules/w1.mk b/openwrt/patch/openwrt-6.x/modules/w1.mk index 9cba28da1..ba2f3d2fe 100644 --- a/openwrt/patch/openwrt-6.x/modules/w1.mk +++ b/openwrt/patch/openwrt-6.x/modules/w1.mk @@ -174,3 +174,19 @@ define KernelPackage/w1-slave-ds2413/description endef $(eval $(call KernelPackage,w1-slave-ds2413)) + + +define KernelPackage/w1-slave-ds2438 + TITLE:=DS2438 Smart Battery Monitor + KCONFIG:= \ + CONFIG_W1_SLAVE_DS2438 + FILES:=$(W1_SLAVES_DIR)/w1_ds2438.ko + AUTOLOAD:=$(call AutoProbe,w1_ds2438) + $(call AddDepends/w1) +endef + +define KernelPackage/w1-slave-ds2438/description + Kernel module for 1-wire DS2438 Smart Battery Monitor support +endef + +$(eval $(call KernelPackage,w1-slave-ds2438)) diff --git a/openwrt/patch/openwrt-6.x/mold/0001-build-add-support-to-use-the-mold-linker-for-package.patch b/openwrt/patch/openwrt-6.x/mold/0001-build-add-support-to-use-the-mold-linker-for-package.patch deleted file mode 100644 index 8a416e299..000000000 --- a/openwrt/patch/openwrt-6.x/mold/0001-build-add-support-to-use-the-mold-linker-for-package.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 92b82f0545fa658e358a85db8c7acee706c5c520 Mon Sep 17 00:00:00 2001 -From: Andre Heider -Date: Fri, 27 Jan 2023 16:35:46 +0100 -Subject: [PATCH 1/8] build: add support to use the mold linker for packages - -If CONFIG_USE_MOLD is set, all target packages will use the mold linker. -Except the ones which opted-out via setting PKG_BUILD_FLAGS:=no-mold. - -Signed-off-by: Andre Heider ---- - include/package.mk | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/include/package.mk b/include/package.mk -index 802e33a..6988e5f 100644 ---- a/include/package.mk -+++ b/include/package.mk -@@ -59,6 +59,11 @@ ifeq ($(call pkg_build_flag,lto,$(if $(CONFIG_USE_LTO),1,0)),1) - TARGET_CXXFLAGS+= -flto=auto -fno-fat-lto-objects - TARGET_LDFLAGS+= -flto=auto -fuse-linker-plugin - endif -+ifdef CONFIG_USE_MOLD -+ ifeq ($(call pkg_build_flag,mold,1),1) -+ TARGET_LINKER:=mold -+ endif -+endif - - include $(INCLUDE_DIR)/hardening.mk - include $(INCLUDE_DIR)/prereq.mk --- -2.43.5 - diff --git a/openwrt/patch/openwrt-6.x/mold/0002-treewide-opt-out-of-tree-wide-mold-usage.patch b/openwrt/patch/openwrt-6.x/mold/0002-treewide-opt-out-of-tree-wide-mold-usage.patch deleted file mode 100644 index 2c450056f..000000000 --- a/openwrt/patch/openwrt-6.x/mold/0002-treewide-opt-out-of-tree-wide-mold-usage.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 149aef90a292c51bd820554ad7cc4c233f400c97 Mon Sep 17 00:00:00 2001 -From: Andre Heider -Date: Fri, 27 Jan 2023 18:22:43 +0100 -Subject: [PATCH 2/8] treewide: opt-out of tree-wide mold usage - -These use linker scripts, which mold doesn't support. - -Signed-off-by: Andre Heider ---- - include/package.mk | 2 +- - package/boot/grub2/Makefile | 2 +- - package/kernel/lantiq/ltq-ifxos/Makefile | 1 + - package/kernel/lantiq/ltq-vdsl-vr11-mei/Makefile | 1 + - package/kernel/lantiq/ltq-vdsl-vr11/Makefile | 1 + - 5 files changed, 5 insertions(+), 2 deletions(-) - -diff --git a/include/package.mk b/include/package.mk -index 6988e5f..e992f37 100644 ---- a/include/package.mk -+++ b/include/package.mk -@@ -28,7 +28,7 @@ ifneq (,$(findstring clang,$(KERNEL_CC))) - endif - - PKG_BUILD_FLAGS?= --__unknown_flags=$(filter-out no-iremap no-mips16 gc-sections no-gc-sections lto no-lto,$(PKG_BUILD_FLAGS)) -+__unknown_flags=$(filter-out no-iremap no-mips16 gc-sections no-gc-sections lto no-lto no-mold,$(PKG_BUILD_FLAGS)) - ifneq ($(__unknown_flags),) - $(error unknown PKG_BUILD_FLAGS: $(__unknown_flags)) - endif -diff --git a/package/boot/grub2/Makefile b/package/boot/grub2/Makefile -index 865feee..44dafe1 100644 ---- a/package/boot/grub2/Makefile -+++ b/package/boot/grub2/Makefile -@@ -25,7 +25,7 @@ ifneq ($(BUILD_VARIANT),none) - endif - - PKG_FLAGS:=nonshared --PKG_BUILD_FLAGS:=no-lto -+PKG_BUILD_FLAGS:=no-lto no-mold - - include $(INCLUDE_DIR)/host-build.mk - include $(INCLUDE_DIR)/package.mk -diff --git a/package/kernel/lantiq/ltq-ifxos/Makefile b/package/kernel/lantiq/ltq-ifxos/Makefile -index d941a9d..97f7ca7 100644 ---- a/package/kernel/lantiq/ltq-ifxos/Makefile -+++ b/package/kernel/lantiq/ltq-ifxos/Makefile -@@ -23,6 +23,7 @@ PKG_LICENSE_FILES:=LICENSE - PKG_EXTMOD_SUBDIRS:=src - - PKG_FIXUP:=autoreconf -+PKG_BUILD_FLAGS:=no-mold - - include $(INCLUDE_DIR)/package.mk - -diff --git a/package/kernel/lantiq/ltq-vdsl-vr11-mei/Makefile b/package/kernel/lantiq/ltq-vdsl-vr11-mei/Makefile -index f2dcf8d..7b8a948 100644 ---- a/package/kernel/lantiq/ltq-vdsl-vr11-mei/Makefile -+++ b/package/kernel/lantiq/ltq-vdsl-vr11-mei/Makefile -@@ -25,6 +25,7 @@ PKG_EXTMOD_SUBDIRS:=src - - PKG_FIXUP:=autoreconf - PKG_FLAGS:=nonshared -+PKG_BUILD_FLAGS:=no-mold - - include $(INCLUDE_DIR)/package.mk - -diff --git a/package/kernel/lantiq/ltq-vdsl-vr11/Makefile b/package/kernel/lantiq/ltq-vdsl-vr11/Makefile -index 8284cba..11f96d7 100644 ---- a/package/kernel/lantiq/ltq-vdsl-vr11/Makefile -+++ b/package/kernel/lantiq/ltq-vdsl-vr11/Makefile -@@ -23,6 +23,7 @@ PKG_LICENSE:=GPL-2.0 BSD-2-Clause - PKG_LICENSE_FILES:=LICENSE - - PKG_FIXUP:=autoreconf -+PKG_BUILD_FLAGS:=no-mold - - include $(INCLUDE_DIR)/package.mk - --- -2.43.5 - diff --git a/openwrt/patch/openwrt-6.x/mold/0003-toolchain-add-mold-as-additional-linker.patch b/openwrt/patch/openwrt-6.x/mold/0003-toolchain-add-mold-as-additional-linker.patch deleted file mode 100644 index 819280982..000000000 --- a/openwrt/patch/openwrt-6.x/mold/0003-toolchain-add-mold-as-additional-linker.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 6a9bd83f7b3f513bebb142ef07392cf5ed218a65 Mon Sep 17 00:00:00 2001 -From: Andre Heider -Date: Fri, 27 Jan 2023 17:53:02 +0100 -Subject: [PATCH 3/8] toolchain: add mold as additional linker - -Install it as $tripple-ld.mold in order to use -fuse-ld=mold. - -Signed-off-by: Andre Heider ---- - toolchain/Makefile | 2 +- - toolchain/mold/Makefile | 22 ++++++++++++++++++++++ - 2 files changed, 23 insertions(+), 1 deletion(-) - create mode 100644 toolchain/mold/Makefile - -diff --git a/toolchain/Makefile b/toolchain/Makefile -index c004629..09c16f7 100644 ---- a/toolchain/Makefile -+++ b/toolchain/Makefile -@@ -27,7 +27,7 @@ - curdir:=toolchain - - # subdirectories to descend into --$(curdir)/builddirs := $(if $(CONFIG_GDB),gdb) $(if $(CONFIG_EXTERNAL_TOOLCHAIN),wrapper,kernel-headers binutils gcc/initial gcc/final $(LIBC) fortify-headers) $(if $(CONFIG_NASM),nasm) -+$(curdir)/builddirs := $(if $(CONFIG_GDB),gdb) $(if $(CONFIG_EXTERNAL_TOOLCHAIN),wrapper,kernel-headers binutils gcc/initial gcc/final $(LIBC) fortify-headers) $(if $(CONFIG_NASM),nasm) $(if $(CONFIG_USE_MOLD),mold) - - # builddir dependencies - ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) -diff --git a/toolchain/mold/Makefile b/toolchain/mold/Makefile -new file mode 100644 -index 0000000..a2acba8 ---- /dev/null -+++ b/toolchain/mold/Makefile -@@ -0,0 +1,22 @@ -+# -+# This is free software, licensed under the GNU General Public License v2. -+# See /LICENSE for more information. -+# -+include $(TOPDIR)/rules.mk -+include $(INCLUDE_DIR)/toolchain-build.mk -+ -+define Host/Configure -+endef -+ -+define Host/Compile -+endef -+ -+define Host/Install -+ $(INSTALL_DIR) $(TOOLCHAIN_DIR)/bin -+ $(INSTALL_BIN) $(STAGING_DIR_HOST)/bin/mold $(TOOLCHAIN_DIR)/bin/$(REAL_GNU_TARGET_NAME)-ld.mold -+endef -+ -+define Host/Clean -+endef -+ -+$(eval $(call HostBuild)) --- -2.43.5 - diff --git a/openwrt/patch/openwrt-6.x/mold/0004-tools-add-mold-a-modern-linker.patch b/openwrt/patch/openwrt-6.x/mold/0004-tools-add-mold-a-modern-linker.patch deleted file mode 100644 index d9a61ac29..000000000 --- a/openwrt/patch/openwrt-6.x/mold/0004-tools-add-mold-a-modern-linker.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 5c32e0a110bd6269136ff90ade852c783d169ecf Mon Sep 17 00:00:00 2001 -From: Andre Heider -Date: Fri, 27 Jan 2023 17:53:02 +0100 -Subject: [PATCH 4/8] tools: add mold, a modern linker - -mold is a faster drop-in replacement for existing Unix linkers. - -A single binary is able to link various targets, which is why this lives -in tools/. - -All toolchain builds then just need to copy the linker over, hence avoiding -multiple builds with the same outcome. - -Signed-off-by: Andre Heider ---- - tools/Makefile | 2 ++ - tools/mold/Makefile | 22 ++++++++++++++++++++++ - 2 files changed, 24 insertions(+) - create mode 100644 tools/mold/Makefile - -diff --git a/tools/Makefile b/tools/Makefile -index feae919..231706c 100644 ---- a/tools/Makefile -+++ b/tools/Makefile -@@ -84,6 +84,7 @@ tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(CONFIG_TARGET_tegra),y) += cbootimage - tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(CONFIG_USES_MINOR),y) += kernel2minor - tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(CONFIG_USE_SPARSE),y) += sparse - tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(CONFIG_USE_LLVM_BUILD),y) += llvm-bpf -+tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(CONFIG_USE_MOLD),y) += mold - - # builddir dependencies - $(curdir)/autoconf/compile := $(curdir)/m4/compile -@@ -115,6 +116,7 @@ $(curdir)/meson/compile := $(curdir)/ninja/compile - $(curdir)/missing-macros/compile := $(curdir)/autoconf/compile - $(curdir)/mkimage/compile += $(curdir)/bison/compile $(curdir)/libressl/compile - $(curdir)/mklibs/compile := $(curdir)/libtool/compile -+$(curdir)/mold/compile := $(curdir)/cmake/compile $(curdir)/zlib/compile $(curdir)/zstd/compile - $(curdir)/mpc/compile := $(curdir)/mpfr/compile $(curdir)/gmp/compile - $(curdir)/mpfr/compile := $(curdir)/gmp/compile - $(curdir)/mtd-utils/compile := $(curdir)/libtool/compile $(curdir)/e2fsprogs/compile $(curdir)/zlib/compile -diff --git a/tools/mold/Makefile b/tools/mold/Makefile -new file mode 100644 -index 0000000..e8fcecb ---- /dev/null -+++ b/tools/mold/Makefile -@@ -0,0 +1,22 @@ -+# SPDX-License-Identifier: GPL-2.0-only -+ -+include $(TOPDIR)/rules.mk -+ -+PKG_NAME:=mold -+PKG_VERSION:=1.11.0 -+ -+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -+PKG_SOURCE_URL_FILE:=v$(PKG_VERSION).tar.gz -+PKG_SOURCE_URL:=https://github.com/rui314/mold/archive/refs/tags -+PKG_HASH:=99318eced81b09a77e4c657011076cc8ec3d4b6867bd324b8677974545bc4d6f -+ -+include $(INCLUDE_DIR)/host-build.mk -+include $(INCLUDE_DIR)/cmake.mk -+ -+CMAKE_HOST_OPTIONS += \ -+ -DMOLD_LTO=ON \ -+ -DMOLD_MOSTLY_STATIC=ON \ -+ -DMOLD_USE_SYSTEM_MIMALLOC=OFF \ -+ -DMOLD_USE_SYSTEM_TBB=OFF -+ -+$(eval $(call HostBuild)) --- -2.43.5 - diff --git a/openwrt/patch/openwrt-6.x/mold/0005-build-replace-SSTRIP_ARGS-with-SSTRIP_DISCARD_TRAILI.patch b/openwrt/patch/openwrt-6.x/mold/0005-build-replace-SSTRIP_ARGS-with-SSTRIP_DISCARD_TRAILI.patch deleted file mode 100644 index d4554926d..000000000 --- a/openwrt/patch/openwrt-6.x/mold/0005-build-replace-SSTRIP_ARGS-with-SSTRIP_DISCARD_TRAILI.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 9cadac681ca14daeb97a8ebfaa32d13c0a375ff2 Mon Sep 17 00:00:00 2001 -From: Andre Heider -Date: Sat, 28 Jan 2023 21:16:16 +0100 -Subject: [PATCH 5/8] build: replace SSTRIP_ARGS with - SSTRIP_DISCARD_TRAILING_ZEROES - -sstrip only has one functional arg. Make that a bool option, which can -easily depend on other knobs then. - -This is required to be disabled for the mold linker. - -Signed-off-by: Andre Heider ---- - config/Config-build.in | 10 ++++------ - rules.mk | 2 +- - 2 files changed, 5 insertions(+), 7 deletions(-) - -diff --git a/config/Config-build.in b/config/Config-build.in -index fe16d81..a96ed2f 100644 ---- a/config/Config-build.in -+++ b/config/Config-build.in -@@ -190,7 +190,6 @@ menu "Global build settings" - help - This will install binaries stripped using strip from binutils. - -- - config USE_SSTRIP - bool "sstrip" - depends on !USE_GLIBC -@@ -207,13 +206,12 @@ menu "Global build settings" - help - Specifies arguments passed to the strip command when stripping binaries. - -- config SSTRIP_ARGS -- string -- prompt "Sstrip arguments" -+ config SSTRIP_DISCARD_TRAILING_ZEROES -+ bool "Strip trailing zero bytes" - depends on USE_SSTRIP -- default "-z" -+ default y - help -- Specifies arguments passed to the sstrip command when stripping binaries. -+ Use sstrip's -z option to discard trailing zero bytes - - config STRIP_KERNEL_EXPORTS - bool "Strip unnecessary exports from the kernel image" -diff --git a/rules.mk b/rules.mk -index 58c5370..c768ccc 100644 ---- a/rules.mk -+++ b/rules.mk -@@ -325,7 +325,7 @@ else - STRIP:=$(TARGET_CROSS)strip $(call qstrip,$(CONFIG_STRIP_ARGS)) - else - ifneq ($(CONFIG_USE_SSTRIP),) -- STRIP:=$(STAGING_DIR_HOST)/bin/sstrip $(call qstrip,$(CONFIG_SSTRIP_ARGS)) -+ STRIP:=$(STAGING_DIR_HOST)/bin/sstrip $(if $(CONFIG_SSTRIP_DISCARD_TRAILING_ZEROES),-z) - endif - endif - RSTRIP= \ --- -2.43.5 - diff --git a/openwrt/patch/openwrt-6.x/mold/0006-config-add-a-knob-to-use-the-mold-linker-for-package.patch b/openwrt/patch/openwrt-6.x/mold/0006-config-add-a-knob-to-use-the-mold-linker-for-package.patch deleted file mode 100644 index 825d61c40..000000000 --- a/openwrt/patch/openwrt-6.x/mold/0006-config-add-a-knob-to-use-the-mold-linker-for-package.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 9494bba487dc290f0fa3cf51f3deac8ea4bd8080 Mon Sep 17 00:00:00 2001 -From: Andre Heider -Date: Fri, 27 Jan 2023 17:13:15 +0100 -Subject: [PATCH 6/8] config: add a knob to use the mold linker for packages - -Building it requires gcc >= 10.2 or clang >= 12. - -Using sstrip with its -z argument can produce non-working binaries, like -a segfaulting `getrandom`, so don't allow that combination. - -Signed-off-by: Andre Heider ---- - config/Config-build.in | 15 ++++++++++++++- - config/check-hostcxx.sh | 12 ++++++++++++ - 2 files changed, 26 insertions(+), 1 deletion(-) - create mode 100755 config/check-hostcxx.sh - -diff --git a/config/Config-build.in b/config/Config-build.in -index a96ed2f..ebfce8a 100644 ---- a/config/Config-build.in -+++ b/config/Config-build.in -@@ -167,6 +167,19 @@ menu "Global build settings" - Adds LTO flags to the CFLAGS and LDFLAGS. - Packages can choose to opt-out via setting PKG_BUILD_FLAGS:=no-lto - -+ config MOLD -+ depends on (aarch64 || arm || i386 || i686 || m68k || powerpc || powerpc64 || sh4 || x86_64) -+ depends on !GCC_USE_VERSION_11 -+ def_bool $(shell, ./config/check-hostcxx.sh 10 2 12) -+ -+ config USE_MOLD -+ bool -+ prompt "Use the mold linker for all packages" -+ depends on MOLD -+ help -+ Link packages with mold, a modern linker -+ Packages can opt-out via setting PKG_BUILD_FLAGS:=no-mold -+ - config IPV6 - def_bool y - -@@ -208,7 +221,7 @@ menu "Global build settings" - - config SSTRIP_DISCARD_TRAILING_ZEROES - bool "Strip trailing zero bytes" -- depends on USE_SSTRIP -+ depends on USE_SSTRIP && !USE_MOLD - default y - help - Use sstrip's -z option to discard trailing zero bytes -diff --git a/config/check-hostcxx.sh b/config/check-hostcxx.sh -new file mode 100755 -index 0000000..442f4cf ---- /dev/null -+++ b/config/check-hostcxx.sh -@@ -0,0 +1,12 @@ -+cat << EOF | "$STAGING_DIR_HOST/bin/g++" -c -x c++ -o /dev/null - >/dev/null 2>&1 -+#if __clang__ -+ #if __clang_major__ < $3 -+ #error "clang too old" -+ #endif -+#else -+ #if __GNUC__ < $1 || (__GNUC__ == $1 && (__GNUC_MINOR__ < $2)) -+ #error "gcc too old" -+ #endif -+#endif -+EOF -+[ $? -eq 0 ] && echo y || echo n --- -2.43.5 - diff --git a/openwrt/patch/openwrt-6.x/mold/0007-rules-prepare-to-use-different-linkers.patch b/openwrt/patch/openwrt-6.x/mold/0007-rules-prepare-to-use-different-linkers.patch deleted file mode 100644 index 4bf03ed2d..000000000 --- a/openwrt/patch/openwrt-6.x/mold/0007-rules-prepare-to-use-different-linkers.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 8086e16507bf6e510c01f616a07282632bd97897 Mon Sep 17 00:00:00 2001 -From: Andre Heider -Date: Fri, 27 Jan 2023 16:32:31 +0100 -Subject: [PATCH 7/8] rules: prepare to use different linkers - -This explicitely adds the default linker to the target LDFLAGS. - -No functional change intended. - -Signed-off-by: Andre Heider ---- - rules.mk | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/rules.mk b/rules.mk -index c768ccc..ca27583 100644 ---- a/rules.mk -+++ b/rules.mk -@@ -211,6 +211,10 @@ ifndef DUMP - endif - endif - endif -+ -+TARGET_LINKER?=bfd -+TARGET_LDFLAGS+= -fuse-ld=$(TARGET_LINKER) -+ - TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(STAGING_DIR_HOSTPKG)/bin:$(TARGET_PATH) - - ifeq ($(CONFIG_SOFT_FLOAT),y) -@@ -252,6 +256,7 @@ TARGET_RANLIB:=$(TARGET_CROSS)gcc-ranlib - TARGET_NM:=$(TARGET_CROSS)gcc-nm - TARGET_CC:=$(TARGET_CROSS)gcc - TARGET_CXX:=$(TARGET_CROSS)g++ -+TARGET_LD:=$(TARGET_CROSS)ld.$(TARGET_LINKER) - KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh - FILECMD:=$(STAGING_DIR_HOST)/bin/file - SED:=$(STAGING_DIR_HOST)/bin/sed -i -e -@@ -305,7 +310,7 @@ endif - TARGET_CONFIGURE_OPTS = \ - AR="$(TARGET_AR)" \ - AS="$(TARGET_CC) -c $(TARGET_ASFLAGS)" \ -- LD=$(TARGET_CROSS)ld \ -+ LD="$(TARGET_LD)" \ - NM="$(TARGET_NM)" \ - CC="$(TARGET_CC)" \ - GCC="$(TARGET_CC)" \ --- -2.43.5 - diff --git a/openwrt/patch/openwrt-6.x/mold/0008-tools-mold-update-to-2.32.1.patch b/openwrt/patch/openwrt-6.x/mold/0008-tools-mold-update-to-2.32.1.patch deleted file mode 100644 index 796be63b3..000000000 --- a/openwrt/patch/openwrt-6.x/mold/0008-tools-mold-update-to-2.32.1.patch +++ /dev/null @@ -1,33 +0,0 @@ -From b9575ea4cfe2acf4e7e19635f7bf6a5a40ea75ca Mon Sep 17 00:00:00 2001 -From: sbwml -Date: Wed, 17 Jul 2024 08:51:39 +0800 -Subject: [PATCH 8/8] tools/mold: update to 2.32.1 - -Signed-off-by: sbwml ---- - tools/mold/Makefile | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/tools/mold/Makefile b/tools/mold/Makefile -index e8fcecb..f6efb80 100644 ---- a/tools/mold/Makefile -+++ b/tools/mold/Makefile -@@ -3,12 +3,11 @@ - include $(TOPDIR)/rules.mk - - PKG_NAME:=mold --PKG_VERSION:=1.11.0 -+PKG_VERSION:=2.32.1 - - PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz --PKG_SOURCE_URL_FILE:=v$(PKG_VERSION).tar.gz --PKG_SOURCE_URL:=https://github.com/rui314/mold/archive/refs/tags --PKG_HASH:=99318eced81b09a77e4c657011076cc8ec3d4b6867bd324b8677974545bc4d6f -+PKG_SOURCE_URL:=https://codeload.github.com/rui314/mold/tar.gz/v$(PKG_VERSION)? -+PKG_HASH:=f3c9a527d884c635834fe7d79b3de959b00783bf9446280ea274d996f0335825 - - include $(INCLUDE_DIR)/host-build.mk - include $(INCLUDE_DIR)/cmake.mk --- -2.43.5 - diff --git a/openwrt/patch/openwrt-6.x/perf/Makefile b/openwrt/patch/openwrt-6.x/perf/Makefile index 53b110581..4eeb9813d 100644 --- a/openwrt/patch/openwrt-6.x/perf/Makefile +++ b/openwrt/patch/openwrt-6.x/perf/Makefile @@ -10,9 +10,9 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=perf PKG_VERSION:=$(LINUX_VERSION) -PKG_RELEASE:=6 +PKG_RELEASE:=7 -PKG_BUILD_FLAGS:=no-mips16 no-lto no-mold +PKG_BUILD_FLAGS:=no-mips16 no-lto PKG_BUILD_PARALLEL:=1 PKG_MAINTAINER:=Felix Fietkau PKG_FLAGS:=nonshared @@ -27,11 +27,11 @@ include $(INCLUDE_DIR)/nls.mk define Package/perf SECTION:=devel CATEGORY:=Development - DEPENDS:= +libelf +libdw +PACKAGE_libunwind:libunwind +libpthread +librt +libstdcpp +objdump @!IN_SDK @KERNEL_PERF_EVENTS \ - +PACKAGE_libbfd:libbfd +PACKAGE_libopcodes:libopcodes + DEPENDS:= +libelf +libdw +PACKAGE_libunwind:libunwind +libpthread +librt +objdump @!IN_SDK @KERNEL_PERF_EVENTS \ + +PACKAGE_libbfd:libbfd +PACKAGE_libopcodes:libopcodes +libtraceevent TITLE:=Linux performance monitoring tool - VERSION:=$(LINUX_VERSION)-$(PKG_RELEASE) - URL:=http://www.kernel.org + VERSION:=$(LINUX_VERSION)-r$(PKG_RELEASE) + URL:=https://www.kernel.org endef define Package/perf/description @@ -42,8 +42,6 @@ HOST_CFLAGS += -I$(LINUX_DIR)/tools/include TARGET_LDFLAGS += $(INTL_LDFLAGS) -TARGET_CFLAGS += -Wno-maybe-uninitialized - MAKE_FLAGS = \ ARCH="$(LINUX_KARCH)" \ NO_LIBPERL=1 \ @@ -52,13 +50,16 @@ MAKE_FLAGS = \ NO_LZMA=1 \ NO_BACKTRACE=1 \ NO_LIBNUMA=1 \ + NO_SLANG=1 \ NO_GTK2=1 \ NO_LIBAUDIT=1 \ NO_LIBCRYPTO=1 \ NO_LIBUNWIND=1 \ NO_LIBZSTD=1 \ NO_LIBCAP=1 \ - NO_LIBTRACEEVENT=1 \ + NO_JEVENTS=1 \ + NO_SHELLCHECK=1 \ + BUILD_BPF_SKEL= \ CROSS_COMPILE="$(TARGET_CROSS)" \ CC="$(TARGET_CC)" \ LD="$(TARGET_CROSS)ld" \ @@ -66,14 +67,27 @@ MAKE_FLAGS = \ LDFLAGS="$(TARGET_LDFLAGS)" \ KBUILD_HOSTCFLAGS="$(HOST_CFLAGS)" \ $(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='') \ + PKG_CONFIG="$(PKG_CONFIG)" \ + PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" \ + EXCLUDE_EXTLIBS="-lstdc++" \ + EXTRA_PERFLIBS="$(shell $(TARGET_CC) -print-file-name=libstdc++.a)" \ WERROR=0 \ O=$(PKG_BUILD_DIR) \ prefix=/usr +ifneq ($(filter $(LINUX_KARCH),powerpc mips),) + MAKE_FLAGS += NO_AUXTRACE=1 +endif + +ifneq (,$(findstring clang,$(KERNEL_CC))) + MAKE_FLAGS += NO_LIBELF=1 +endif + define Build/Compile - +$(MAKE_FLAGS) $(MAKE) $(PKG_JOBS) \ + +$(MAKE) $(PKG_JOBS) $(MAKE_FLAGS) \ --no-print-directory \ - -C $(LINUX_DIR)/tools/perf + -C $(LINUX_DIR)/tools/perf \ + -f Makefile.perf endef define Package/perf/install diff --git a/openwrt/patch/openwrt-6.x/perf/Makefile.2 b/openwrt/patch/openwrt-6.x/perf/Makefile.2 deleted file mode 100644 index 7ea6e9164..000000000 --- a/openwrt/patch/openwrt-6.x/perf/Makefile.2 +++ /dev/null @@ -1,86 +0,0 @@ -# -# Copyright (C) 2011-2013 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk -include $(INCLUDE_DIR)/kernel.mk - -PKG_NAME:=perf -PKG_VERSION:=$(LINUX_VERSION) -PKG_RELEASE:=6 - -PKG_BUILD_FLAGS:=no-mips16 no-lto no-mold -PKG_BUILD_PARALLEL:=1 -PKG_MAINTAINER:=Felix Fietkau -PKG_FLAGS:=nonshared - -# Perf's makefile and headers are not relocatable and must be built from the -# Linux sources directory -PKG_BUILD_DIR:=$(LINUX_DIR)/tools/perf-$(TARGET_DIR_NAME) - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/nls.mk - -define Package/perf - SECTION:=devel - CATEGORY:=Development - DEPENDS:= +libelf +libdw +PACKAGE_libunwind:libunwind +libpthread +librt +libstdcpp +objdump @!IN_SDK @KERNEL_PERF_EVENTS \ - +PACKAGE_libbfd:libbfd +PACKAGE_libopcodes:libopcodes - TITLE:=Linux performance monitoring tool - VERSION:=$(LINUX_VERSION)-$(PKG_RELEASE) - URL:=http://www.kernel.org -endef - -define Package/perf/description - perf is the Linux performance monitoring tool -endef - -HOST_CFLAGS += -I$(LINUX_DIR)/tools/include - -TARGET_LDFLAGS += $(INTL_LDFLAGS) - -TARGET_CFLAGS += -Wno-error=calloc-transposed-args -Wno-error=alloc-size - -KERNEL_CC := $(TARGET_CC) - -MAKE_FLAGS = \ - ARCH="$(LINUX_KARCH)" \ - NO_LIBPERL=1 \ - NO_LIBPYTHON=1 \ - NO_NEWT=1 \ - NO_LZMA=1 \ - NO_BACKTRACE=1 \ - NO_LIBNUMA=1 \ - NO_GTK2=1 \ - NO_LIBAUDIT=1 \ - NO_LIBCRYPTO=1 \ - NO_LIBUNWIND=1 \ - NO_LIBZSTD=1 \ - NO_LIBCAP=1 \ - LIBC_SUPPORT=1 \ - NO_LIBELF=1 \ - NO_LIBTRACEEVENT=1 \ - CROSS_COMPILE="$(TARGET_CROSS)" \ - EXTRA_CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \ - LDFLAGS="$(TARGET_LDFLAGS)" \ - KBUILD_HOSTCFLAGS="$(HOST_CFLAGS)" \ - $(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='') \ - WERROR=0 \ - O=$(PKG_BUILD_DIR) \ - prefix=/usr - -define Build/Compile - +$(MAKE_FLAGS) $(KERNEL_MAKE) $(PKG_JOBS) \ - --no-print-directory \ - -C $(LINUX_DIR)/tools/perf -endef - -define Package/perf/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/perf $(1)/usr/bin/ -endef - -$(eval $(call BuildPackage,perf)) diff --git a/openwrt/patch/openwrt-6.x/x86/64/config-6.6 b/openwrt/patch/openwrt-6.x/x86/64/config-6.18 similarity index 97% rename from openwrt/patch/openwrt-6.x/x86/64/config-6.6 rename to openwrt/patch/openwrt-6.x/x86/64/config-6.18 index 93e8b77e1..084717ca2 100644 --- a/openwrt/patch/openwrt-6.x/x86/64/config-6.6 +++ b/openwrt/patch/openwrt-6.x/x86/64/config-6.18 @@ -22,6 +22,7 @@ CONFIG_ACPI_HOTPLUG_IOAPIC=y # CONFIG_ACPI_I2C_OPREGION is not set CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y CONFIG_ACPI_LPIT=y +CONFIG_ACPI_MADT_WAKEUP=y CONFIG_ACPI_PCC=y # CONFIG_ACPI_PCI_SLOT is not set # CONFIG_ACPI_PFRUT is not set @@ -36,10 +37,11 @@ CONFIG_ACPI_SPCR_TABLE=y CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y # CONFIG_ACPI_TAD is not set CONFIG_ACPI_THERMAL=y +CONFIG_ACPI_THERMAL_LIB=y # CONFIG_ACPI_TOSHIBA is not set CONFIG_ACPI_VIDEO=y CONFIG_ACPI_VIOT=y -# CONFIG_ACPI_WMI is not set +CONFIG_ACPI_WMI=y # CONFIG_ACRN_GUEST is not set # CONFIG_ADDRESS_MASKING is not set # CONFIG_ADV_SWBUTTON is not set @@ -49,12 +51,12 @@ CONFIG_AGP_INTEL=y # CONFIG_AGP_SIS is not set # CONFIG_AGP_VIA is not set # CONFIG_AMD_HSMP is not set -# CONFIG_AMD_SFH_HID is not set CONFIG_AMD_IOMMU=y CONFIG_AMD_IOMMU_V2=y # CONFIG_AMD_PMC is not set # CONFIG_AMD_PMF is not set # CONFIG_AMD_PTDMA is not set +# CONFIG_AMD_SFH_HID is not set CONFIG_APERTURE_HELPERS=y CONFIG_ARCH_CPUIDLE_HALTPOLL=y CONFIG_ARCH_DMA_ADDR_T_64BIT=y @@ -85,6 +87,7 @@ CONFIG_CALL_PADDING=y CONFIG_CALL_THUNKS=y # CONFIG_CALL_THUNKS_DEBUG is not set CONFIG_CDROM=y +CONFIG_CGROUP_HUGETLB=y CONFIG_CONNECTOR=y CONFIG_CONTEXT_TRACKING=y CONFIG_CONTEXT_TRACKING_IDLE=y @@ -101,13 +104,13 @@ CONFIG_CRC64_ROCKSOFT=y CONFIG_CRC_T10DIF=y CONFIG_CRYPTO_AES_NI_INTEL=y CONFIG_CRYPTO_ARCH_HAVE_LIB_BLAKE2S=y -# CONFIG_CRYPTO_ARIA_AESNI_AVX_X86_64 is not set # CONFIG_CRYPTO_ARIA_AESNI_AVX2_X86_64 is not set +# CONFIG_CRYPTO_ARIA_AESNI_AVX_X86_64 is not set # CONFIG_CRYPTO_ARIA_GFNI_AVX512_X86_64 is not set CONFIG_CRYPTO_BLAKE2S_X86=y # CONFIG_CRYPTO_BLOWFISH_X86_64 is not set -# CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64 is not set # CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64 is not set +# CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64 is not set # CONFIG_CRYPTO_CAMELLIA_X86_64 is not set # CONFIG_CRYPTO_CAST5_AVX_X86_64 is not set # CONFIG_CRYPTO_CAST6_AVX_X86_64 is not set @@ -122,16 +125,16 @@ CONFIG_CRYPTO_LRW=y # CONFIG_CRYPTO_NHPOLY1305_AVX2 is not set # CONFIG_CRYPTO_NHPOLY1305_SSE2 is not set # CONFIG_CRYPTO_POLYVAL_CLMUL_NI is not set -# CONFIG_CRYPTO_SERPENT_AVX_X86_64 is not set # CONFIG_CRYPTO_SERPENT_AVX2_X86_64 is not set +# CONFIG_CRYPTO_SERPENT_AVX_X86_64 is not set # CONFIG_CRYPTO_SERPENT_SSE2_X86_64 is not set # CONFIG_CRYPTO_SHA1_SSSE3 is not set # CONFIG_CRYPTO_SHA256_SSSE3 is not set # CONFIG_CRYPTO_SHA512_SSSE3 is not set CONFIG_CRYPTO_SIMD=y # CONFIG_CRYPTO_SM3_AVX_X86_64 is not set -# CONFIG_CRYPTO_SM4_AESNI_AVX_X86_64 is not set # CONFIG_CRYPTO_SM4_AESNI_AVX2_X86_64 is not set +# CONFIG_CRYPTO_SM4_AESNI_AVX_X86_64 is not set # CONFIG_CRYPTO_TWOFISH_AVX_X86_64 is not set # CONFIG_CRYPTO_TWOFISH_X86_64 is not set # CONFIG_CRYPTO_TWOFISH_X86_64_3WAY is not set @@ -140,9 +143,9 @@ CONFIG_DMAR_TABLE=y CONFIG_DMA_ACPI=y CONFIG_DMA_OPS=y CONFIG_DMA_SHARED_BUFFER=y +CONFIG_DRM=y # CONFIG_DRM_AMDGPU_WERROR is not set # CONFIG_DRM_AMD_SECURE_DISPLAY is not set -CONFIG_DRM=y CONFIG_DRM_BOCHS=y CONFIG_DRM_BRIDGE=y CONFIG_DRM_BUDDY=y @@ -154,15 +157,6 @@ CONFIG_DRM_FBDEV_EMULATION=y CONFIG_DRM_FBDEV_OVERALLOC=100 CONFIG_DRM_GEM_SHMEM_HELPER=y # CONFIG_DRM_HYPERV is not set -CONFIG_DRM_I915_FORCE_PROBE="" -CONFIG_DRM_I915_REQUEST_TIMEOUT=20000 -CONFIG_DRM_I915_FENCE_TIMEOUT=10000 -CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250 -CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500 -CONFIG_DRM_I915_PREEMPT_TIMEOUT=640 -CONFIG_DRM_I915_MAX_REQUEST_BUSYWAIT=8000 -CONFIG_DRM_I915_STOP_TIMEOUT=100 -CONFIG_DRM_I915_TIMESLICE_DURATION=1 CONFIG_DRM_KMS_HELPER=y CONFIG_DRM_MIPI_DSI=y CONFIG_DRM_PANEL=y @@ -221,10 +215,9 @@ CONFIG_FB_SYS_FOPS=y CONFIG_FB_SYS_IMAGEBLIT=y CONFIG_FB_TILEBLITTING=y # CONFIG_FB_VESA is not set -CONFIG_FONT_8x8=y CONFIG_FONT_8x16=y +CONFIG_FONT_8x8=y CONFIG_FONT_SUPPORT=y -# CONFIG_FORTIFY_SOURCE is not set CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set @@ -271,6 +264,7 @@ CONFIG_HPET=y CONFIG_HPET_MMAP=y # CONFIG_HP_ACCEL is not set # CONFIG_HUAWEI_WMI is not set +CONFIG_HUGETLBFS=y CONFIG_HVC_DRIVER=y CONFIG_HVC_IRQ=y CONFIG_HVC_XEN=y @@ -345,7 +339,6 @@ CONFIG_IOMMU_HELPER=y CONFIG_IOMMU_IOVA=y CONFIG_IOMMU_IO_PGTABLE=y CONFIG_IOMMU_SUPPORT=y -# CONFIG_IOMMUFD is not set CONFIG_IOSF_MBI=y # CONFIG_IOSF_MBI_DEBUG is not set # CONFIG_IPU_BRIDGE is not set @@ -376,6 +369,12 @@ CONFIG_MEMREGION=y CONFIG_MFD_CORE=y # CONFIG_MFD_INTEL_LPSS_ACPI is not set # CONFIG_MFD_INTEL_PMC_BXT is not set +CONFIG_MITIGATION_CALL_DEPTH_TRACKING=y +CONFIG_MITIGATION_ITS=y +CONFIG_MITIGATION_SLS=y +CONFIG_MITIGATION_SRBDS=y +CONFIG_MITIGATION_SRSO=y +CONFIG_MITIGATION_UNRET_ENTRY=y CONFIG_MMC=y CONFIG_MMC_BLOCK=y CONFIG_MMC_CQHCI=y @@ -441,6 +440,7 @@ CONFIG_PCI_HYPERV_INTERFACE=y CONFIG_PCI_PASID=y CONFIG_PCI_PRI=y CONFIG_PCI_XEN=y +CONFIG_PERSISTENT_HUGE_ZERO_FOLIO=y CONFIG_PER_VMA_LOCK=y CONFIG_PGTABLE_LEVELS=4 CONFIG_PHYSICAL_ALIGN=0x1000000 @@ -542,6 +542,10 @@ CONFIG_THERMAL_WRITABLE_TRIPS=y # CONFIG_THINKPAD_LMI is not set # CONFIG_TOSHIBA_BT_RFKILL is not set # CONFIG_TOSHIBA_WMI is not set +CONFIG_TRANSPARENT_HUGEPAGE=y +# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set +# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set +CONFIG_TRANSPARENT_HUGEPAGE_NEVER=y CONFIG_TREE_RCU=y CONFIG_TREE_SRCU=y # CONFIG_UACCE is not set diff --git a/openwrt/patch/openwrt-6.x/x86/base-files/etc/board.d/02_network b/openwrt/patch/openwrt-6.x/x86/base-files/etc/board.d/02_network index f2ae8f225..c7b3780fa 100644 --- a/openwrt/patch/openwrt-6.x/x86/base-files/etc/board.d/02_network +++ b/openwrt/patch/openwrt-6.x/x86/base-files/etc/board.d/02_network @@ -35,6 +35,63 @@ cisco-mx100-hw) ucidef_set_network_device_path "eth11" "pci0000:00/0000:00:01.1/0000:02:00.2" ucidef_set_interfaces_lan_wan "mgmt eth2 eth3 eth4 eth5 eth6 eth7 eth8 eth9 eth10 eth11" "wan" ;; +dell-emc-edge620) + ucidef_set_interfaces_lan_wan "eth0 eth1 eth2 eth3 eth7" "eth6" + ;; +gowin-solution-co-ltd-gw-mb-u01) + ucidef_set_network_device_path "eth1" "pci0000:00/0000:00:1c.0/0000:01:00.0/0000:02:02.0/0000:04:00.0" + ucidef_set_network_device_path "eth2" "pci0000:00/0000:00:1c.0/0000:01:00.0/0000:02:00.0/0000:03:00.0" + ucidef_set_network_device_path "eth3" "pci0000:00/0000:00:1c.2/0000:07:00.0/0000:08:02.0/0000:0a:00.0" + ucidef_set_network_device_path "eth4" "pci0000:00/0000:00:1c.2/0000:07:00.0/0000:08:00.0/0000:09:00.0" + ucidef_set_network_device_path "poe" "pci0000:00/0000:00:1c.2/0000:07:00.0/0000:08:06.0/0000:0b:00.0" + + sfp_device="pci0000:00/0000:00:1d.0" + sfp_device_path="/sys/devices/$sfp_device" + + pci_count="$(ls -d $sfp_device_path/0000:*:00.* 2>/dev/null | wc -l)" + if [ "$pci_count" -eq 2 ]; then + sfp_port1="$(basename $sfp_device_path/0000:*:00.1)" + sfp_port2="$(basename $sfp_device_path/0000:*:00.0)" + + ucidef_set_network_device_path "sfp1" "$sfp_device/$sfp_port1" + ucidef_set_network_device_path "sfp2" "$sfp_device/$sfp_port2" + elif [ "$pci_count" -eq 1 ]; then + sfp_port="$(basename $sfp_device_path/0000:*:00.0)" + + ucidef_set_network_device_path_port "sfp1" "$sfp_device/$sfp_port" "1" + ucidef_set_network_device_path_port "sfp2" "$sfp_device/$sfp_port" "0" + fi + + ucidef_set_interfaces_lan_wan "eth1 eth2 eth3 eth4 poe" "sfp1 sfp2" + ;; +micro-computer-hk-tech-limited-ms-a2) + ucidef_set_network_device_path "lan1" "pci0000:00/0000:00:03.2/0000:04:00.0" + ucidef_set_network_device_path "lan2" "pci0000:00/0000:00:03.1/0000:03:00.0" + ucidef_set_network_device_path "sfp1" "pci0000:00/0000:00:02.1/0000:05:00.0" + ucidef_set_network_device_path "sfp2" "pci0000:00/0000:00:02.1/0000:05:00.1" + ucidef_set_interface_lan "lan1 lan2 sfp1 sfp2" + ;; +mellanox-technologies-ltd-msn2100) + ucidef_set_network_device_path "mgmt" "pci0000:00/0000:00:14.0" + ucidef_set_interface_lan "mgmt " + ucidef_set_interface_netdev_range "lan" "swp" "1" "16" + ;; +mellanox-technologies-ltd-msn2700) + ucidef_set_network_device_path "mgmt0" "pci0000:00/0000:00:19.0" + ucidef_set_network_device_path "mgmt1" "pci0000:00/0000:00:1c.6/0000:06:00.0" + ucidef_set_interface_lan "mgmt0 mgmt1 " + ucidef_set_interface_netdev_range "lan" "swp" "1" "32" + ;; +mellanox-technologies-ltd-msn3420) + ucidef_set_network_device_path "mgmt" "pci0000:00/0000:00:1c.7/0000:09:00.0" + ucidef_set_interface_lan "mgmt " + ucidef_set_interface_netdev_range "lan" "swp" "1" "60" + ;; +mellanox-technologies-ltd-msn3700) + ucidef_set_network_device_path "mgmt" "pci0000:00/0000:00:1c.7/0000:09:00.0" + ucidef_set_interface_lan "mgmt " + ucidef_set_interface_netdev_range "lan" "swp" "1" "32" + ;; pc-engines-apu1|pc-engines-apu2|pc-engines-apu3) ucidef_set_interfaces_lan_wan "eth1 eth2" "eth0" ;; @@ -68,10 +125,19 @@ sophos-sg-135r2|sophos-xg-135r2| \ sophos-sg-135wr2|sophos-xg-135wr2) ucidef_set_interfaces_lan_wan "eth0 eth2 eth3 eth4 eth5 eth6 eth7" "eth1" ;; +sophos-sg-125r3|sophos-xg-125r3| \ +sophos-sg-125wr3|sophos-xg-125wr3| \ sophos-sg-135r3|sophos-xg-135r3| \ sophos-sg-135wr3|sophos-xg-135wr3) ucidef_set_interfaces_lan_wan "eth0 eth1 eth2 eth3 eth5 eth7 eth8" "eth6" ;; +sophos-sg-210r3|sophos-xg-210r3| \ +sophos-sg-230r2|sophox-xg-230r2) + ucidef_set_interfaces_lan_wan "eth0 eth2 eth3 eth4 eth5" "eth1" + ;; +supermicro-sys-e302-9d) + ucidef_set_interface_lan "eth0 eth1 eth2 eth3 eth4 eth5 eth6 eth7" + ;; traverse-technologies-geos) ucidef_set_interface_lan "eth0 eth1" ucidef_add_atm_bridge "0" "35" "llc" "bridged" diff --git a/openwrt/patch/openwrt-6.x/x86/config-6.6 b/openwrt/patch/openwrt-6.x/x86/config-6.18 similarity index 61% rename from openwrt/patch/openwrt-6.x/x86/config-6.6 rename to openwrt/patch/openwrt-6.x/x86/config-6.18 index 7031def6a..9065a3023 100644 --- a/openwrt/patch/openwrt-6.x/x86/config-6.6 +++ b/openwrt/patch/openwrt-6.x/x86/config-6.18 @@ -1,43 +1,64 @@ # CONFIG_60XX_WDT is not set # CONFIG_64BIT is not set # CONFIG_ACPI is not set +CONFIG_ACPI_EC=y +# CONFIG_ACPI_WMI_LEGACY_DEVICE_NAMES is not set # CONFIG_ACQUIRE_WDT is not set +# CONFIG_AD3530R is not set +# CONFIG_AD4080 is not set +# CONFIG_AD4170_4 is not set +# CONFIG_ADE9000 is not set # CONFIG_ADVANTECH_EC_WDT is not set # CONFIG_ADVANTECH_WDT is not set # CONFIG_ALIM1535_WDT is not set # CONFIG_ALIX is not set +# CONFIG_AMD_3D_VCACHE is not set +# CONFIG_AMD_HFI is not set +# CONFIG_AMD_HSMP_ACPI is not set +# CONFIG_AMD_HSMP_PLAT is not set +# CONFIG_AMD_ISP_PLATFORM is not set CONFIG_AMD_NB=y +CONFIG_AMD_NODE=y +# CONFIG_AMD_WBRF is not set +# CONFIG_AMD_XGBE_DCB is not set CONFIG_ARCH_32BIT_OFF_T=y CONFIG_ARCH_CLOCKSOURCE_INIT=y +CONFIG_ARCH_CONFIGURES_CPU_MITIGATIONS=y CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y +CONFIG_ARCH_DEFAULT_CRASH_DUMP=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y +CONFIG_ARCH_MMAP_RND_BITS=16 +CONFIG_ARCH_PKEY_BITS=4 CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SPLIT_ARG64=y CONFIG_ARCH_STACKWALK=y CONFIG_ARCH_SUSPEND_POSSIBLE=y -CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_ARCH_USES_PG_ARCH_2=y CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y CONFIG_ARCH_WANTS_NO_INSTR=y +# CONFIG_AS21XXX_PHY is not set CONFIG_ATA=y CONFIG_ATA_GENERIC=y CONFIG_ATA_PIIX=y +# CONFIG_AUTOFDO_CLANG is not set # CONFIG_BARCO_P50_GPIO is not set +# CONFIG_BASE_SMALL is not set +# CONFIG_BATTERY_CHAGALL is not set +# CONFIG_BHYVE_GUEST is not set +CONFIG_BINARY_PRINTF=y CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_SD=y -CONFIG_BLK_MQ_PCI=y CONFIG_BOUNCE=y CONFIG_BUFFER_HEAD=y -CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" -CONFIG_CC_NO_ARRAY_BOUNDS=y +# CONFIG_CHARGER_MAX8971 is not set CONFIG_CLKBLD_I8253=y CONFIG_CLKEVT_I8253=y CONFIG_CLKSRC_I8253=y -CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y CONFIG_CLOCKSOURCE_WATCHDOG=y CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=100 CONFIG_CLONE_BACKWARDS=y @@ -47,7 +68,7 @@ CONFIG_COMPAT_32=y CONFIG_COMPAT_32BIT_TIME=y # CONFIG_COMPAT_VDSO is not set CONFIG_CONSOLE_TRANSLATIONS=y -# CONFIG_CPU5_WDT is not set +CONFIG_CPUFREQ_ARCH_CUR_FREQ=y CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set @@ -61,6 +82,8 @@ CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_IDLE=y CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_CPU_IDLE_GOV_TEO=y CONFIG_CPU_MITIGATIONS=y CONFIG_CPU_SUP_AMD=y CONFIG_CPU_SUP_CENTAUR=y @@ -71,19 +94,23 @@ CONFIG_CPU_SUP_TRANSMETA_32=y CONFIG_CPU_SUP_UMC_32=y CONFIG_CPU_SUP_VORTEX_32=y CONFIG_CPU_SUP_ZHAOXIN=y -CONFIG_CRASH_CORE=y -# CONFIG_CRASH_HOTPLUG is not set CONFIG_CRC16=y +# CONFIG_CRYPTO_BENCHMARK is not set CONFIG_CRYPTO_CRC32=y CONFIG_CRYPTO_CRC32C=y -# CONFIG_CRYPTO_CRC32_PCLMUL is not set -CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y +# CONFIG_CRYPTO_DEV_QAT_6XXX is not set +CONFIG_CRYPTO_ECB=y CONFIG_CRYPTO_LIB_GF128MUL=y CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1 -CONFIG_CRYPTO_LIB_SHA1=y +CONFIG_CRYPTO_LIB_SHA256=y CONFIG_CRYPTO_LIB_UTILS=y +CONFIG_CRYPTO_RNG2=y +# CONFIG_CRYPTO_SELFTESTS is not set # CONFIG_CRYPTO_SERPENT_SSE2_586 is not set +CONFIG_CRYPTO_SIG2=y # CONFIG_CX_ECAT is not set +# CONFIG_D3323AA is not set +# CONFIG_DASHARO_ACPI is not set CONFIG_DCACHE_WORD_ACCESS=y # CONFIG_DEBUG_BOOT_PARAMS is not set # CONFIG_DEBUG_ENTRY is not set @@ -95,13 +122,19 @@ CONFIG_DEBUG_MISC=y # CONFIG_DEBUG_TLBFLUSH is not set CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_GZIP=y +CONFIG_DIMLIB=y CONFIG_DMADEVICES=y CONFIG_DMI=y CONFIG_DMIID=y CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y CONFIG_DMI_SYSFS=y CONFIG_DNOTIFY=y +# CONFIG_DRM_AMD_ISP is not set +# CONFIG_DRM_EFIDRM is not set +# CONFIG_DRM_I915_DEBUG_WAKEREF is not set # CONFIG_DRM_I915_GVT_KVMGT is not set +# CONFIG_DRM_I915_REPLAY_GPU_HANGS_API is not set +# CONFIG_DRM_VESADRM is not set CONFIG_DUMMY_CONSOLE=y CONFIG_DYNAMIC_SIGFRAME=y CONFIG_EARLY_PRINTK=y @@ -109,44 +142,50 @@ CONFIG_EARLY_PRINTK=y CONFIG_EDAC_ATOMIC_SCRUB=y CONFIG_EDAC_SUPPORT=y # CONFIG_EDD is not set +CONFIG_EFI_SBAT_FILE="" # CONFIG_EISA is not set # CONFIG_EUROTECH_WDT is not set # CONFIG_EXAR_WDT is not set CONFIG_EXCLUSIVE_SYSTEM_RAM=y +CONFIG_EXECMEM=y CONFIG_EXT4_FS=y CONFIG_F2FS_FS=y # CONFIG_F71808E_WDT is not set CONFIG_FIRMWARE_MEMMAP=y CONFIG_FIX_EARLYCON_MEM=y +CONFIG_FORCE_NR_CPUS=y CONFIG_FRAME_POINTER=y CONFIG_FS_IOMAP=y CONFIG_FS_MBCACHE=y -CONFIG_FUNCTION_ALIGNMENT=16 -CONFIG_FUNCTION_ALIGNMENT_16B=y -CONFIG_FUNCTION_PADDING_BYTES=16 -CONFIG_FUNCTION_PADDING_CFI=11 +CONFIG_FS_STACK=y +CONFIG_FUNCTION_ALIGNMENT=4 +CONFIG_FUNCTION_ALIGNMENT_4B=y +CONFIG_FUNCTION_PADDING_BYTES=4 +CONFIG_FUNCTION_PADDING_CFI=0 CONFIG_FUSION=y # CONFIG_FUSION_CTL is not set # CONFIG_FUSION_LOGGING is not set CONFIG_FUSION_MAX_SGE=128 CONFIG_FUSION_SPI=y +CONFIG_FUTEX_PRIVATE_HASH=y CONFIG_FW_LOADER_PAGED_BUF=y CONFIG_FW_LOADER_SYSFS=y -CONFIG_GCC11_NO_ARRAY_BOUNDS=y -CONFIG_GCC_ASM_GOTO_OUTPUT_WORKAROUND=y -# CONFIG_GDS_FORCE_MITIGATION is not set +CONFIG_GCC_NO_STRINGOP_OVERFLOW=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_GENERIC_BUG=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST_IDLE=y CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y CONFIG_GENERIC_CMOS_UPDATE=y CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_DEVICES=y CONFIG_GENERIC_CPU_VULNERABILITIES=y CONFIG_GENERIC_EARLY_IOREMAP=y CONFIG_GENERIC_ENTRY=y CONFIG_GENERIC_GETTIMEOFDAY=y CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_IRQ_ENTRY=y CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y CONFIG_GENERIC_IRQ_RESERVATION_MODE=y CONFIG_GENERIC_IRQ_SHOW=y @@ -156,32 +195,35 @@ CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_SYSCALL=y CONFIG_GENERIC_TIME_VSYSCALL=y -CONFIG_GENERIC_VDSO_32=y +CONFIG_GENERIC_VDSO_OVERFLOW_PROTECT=y # CONFIG_GEOS is not set CONFIG_GLOB=y -CONFIG_GPIO_CDEV=y +CONFIG_GPIOLIB_LEGACY=y # CONFIG_GPIO_ELKHARTLAKE is not set +# CONFIG_GPIO_VIRTIO is not set # CONFIG_HANGCHECK_TIMER is not set CONFIG_HARDIRQS_SW_RESEND=y CONFIG_HAS_DMA=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_IOPORT_MAP=y +CONFIG_HAS_LTO_CLANG=y CONFIG_HID=y CONFIG_HID_SUPPORT=y CONFIG_HIGHMEM=y CONFIG_HIGHMEM4G=y -# CONFIG_HIGHMEM64G is not set -CONFIG_HIGHPTE=y +# CONFIG_HINIC3 is not set CONFIG_HPET_EMULATE_RTC=y CONFIG_HPET_TIMER=y -CONFIG_HW_CONSOLE=y CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_GEODE=y CONFIG_HW_RANDOM_VIA=y # CONFIG_HYPERVISOR_GUEST is not set +CONFIG_HYPERV_VMBUS=y CONFIG_HZ_PERIODIC=y +# CONFIG_I2C_AMD_ASF is not set CONFIG_I8253_LOCK=y CONFIG_IA32_FEAT_CTL=y # CONFIG_IB700_WDT is not set @@ -189,17 +231,20 @@ CONFIG_IA32_FEAT_CTL=y # CONFIG_IBM_RTL is not set # CONFIG_IE6XX_WDT is not set CONFIG_ILLEGAL_POINTER_VALUE=0 +# CONFIG_INFINEON_TLV493D is not set CONFIG_INITRAMFS_SOURCE="" CONFIG_INPUT=y CONFIG_INPUT_KEYBOARD=y CONFIG_INPUT_VIVALDIFMAP=y +# CONFIG_INSPUR_PLATFORM_PROFILE is not set CONFIG_INSTRUCTION_DECODER=y # CONFIG_INTEL_HFI_THERMAL is not set # CONFIG_INTEL_LDMA is not set +# CONFIG_INTEL_OC_WATCHDOG is not set # CONFIG_INTEL_PCH_THERMAL is not set # CONFIG_INTEL_POWERCLAMP is not set # CONFIG_INTEL_SCU_PCI is not set -# CONFIG_INTEL_TCC_COOLING is not set +# CONFIG_INTEL_THC_HID is not set # CONFIG_INTEL_VSEC is not set # CONFIG_IOSF_MBI is not set CONFIG_IO_DELAY_0X80=y @@ -210,6 +255,11 @@ CONFIG_IRQ_DOMAIN=y CONFIG_IRQ_DOMAIN_HIERARCHY=y CONFIG_IRQ_FORCED_THREADING=y CONFIG_IRQ_WORK=y +# CONFIG_IR_ENE is not set +# CONFIG_IR_FINTEK is not set +# CONFIG_IR_ITE_CIR is not set +# CONFIG_IR_NUVOTON is not set +# CONFIG_IR_WINBOND_CIR is not set # CONFIG_ISA is not set CONFIG_ISA_DMA_API=y # CONFIG_IT8712F_WDT is not set @@ -219,10 +269,18 @@ CONFIG_JBD2=y CONFIG_KALLSYMS=y CONFIG_KEXEC=y CONFIG_KEXEC_CORE=y +# CONFIG_KEXEC_HANDOVER is not set CONFIG_KEYBOARD_ATKBD=y CONFIG_KMAP_LOCAL=y -# CONFIG_KVM_PROVE_MMU is not set +CONFIG_KVM_HYPERV=y +CONFIG_KVM_IOAPIC=y +# CONFIG_LENOVO_SE30_WDT is not set +# CONFIG_LENOVO_WMI_GAMEZONE is not set +# CONFIG_LENOVO_WMI_HOTKEY_UTILITIES is not set +# CONFIG_LENOVO_WMI_TUNING is not set CONFIG_LOCK_DEBUGGING_SUPPORT=y +CONFIG_LOCK_MM_AND_FIND_VMA=y +CONFIG_LRU_GEN_WALKS_MMU=y # CONFIG_M486 is not set # CONFIG_M486SX is not set # CONFIG_M586 is not set @@ -231,22 +289,46 @@ CONFIG_LOCK_DEBUGGING_SUPPORT=y CONFIG_M686=y # CONFIG_MACHZ_WDT is not set # CONFIG_MATOM is not set -# CONFIG_MCORE2 is not set +# CONFIG_MAXLINEAR_86110_PHY is not set # CONFIG_MCRUSOE is not set # CONFIG_MCYRIXIII is not set +# CONFIG_MDIO_BUS is not set +# CONFIG_MEEGOPAD_ANX7428 is not set # CONFIG_MEFFICEON is not set # CONFIG_MELAN is not set +CONFIG_MEMFD_CREATE=y +# CONFIG_MFD_CGBC is not set # CONFIG_MFD_INTEL_LPSS_PCI is not set +# CONFIG_MFD_UPBOARD_FPGA is not set # CONFIG_MGEODEGX1 is not set # CONFIG_MGEODE_LX is not set CONFIG_MICROCODE=y -CONFIG_MICROCODE_LATE_LOADING=y +# CONFIG_MICROCODE_DBG is not set +CONFIG_MICROCODE_INITRD32=y +# CONFIG_MICROCODE_LATE_LOADING is not set CONFIG_MIGRATION=y +CONFIG_MITIGATION_GDS=y +CONFIG_MITIGATION_IBPB_ENTRY=y +CONFIG_MITIGATION_IBRS_ENTRY=y +CONFIG_MITIGATION_L1TF=y +CONFIG_MITIGATION_MDS=y +CONFIG_MITIGATION_MMIO_STALE_DATA=y +CONFIG_MITIGATION_PAGE_TABLE_ISOLATION=y +CONFIG_MITIGATION_RETBLEED=y +# CONFIG_MITIGATION_RETPOLINE is not set CONFIG_MITIGATION_RFDS=y +# CONFIG_MITIGATION_SLS is not set CONFIG_MITIGATION_SPECTRE_BHI=y +CONFIG_MITIGATION_SPECTRE_V1=y +CONFIG_MITIGATION_SPECTRE_V2=y +CONFIG_MITIGATION_SRBDS=y +CONFIG_MITIGATION_SSB=y +CONFIG_MITIGATION_TAA=y +CONFIG_MITIGATION_TSA=y +CONFIG_MITIGATION_VMSCAPE=y # CONFIG_MK6 is not set # CONFIG_MK7 is not set -# CONFIG_MK8 is not set +# CONFIG_MLXREG_DPU is not set CONFIG_MMU_GATHER_MERGE_VMAS=y CONFIG_MMU_LAZY_TLB_REFCOUNT=y # CONFIG_MODIFY_LDT_SYSCALL is not set @@ -256,7 +338,10 @@ CONFIG_MODULES_USE_ELF_REL=y # CONFIG_MPENTIUMII is not set # CONFIG_MPENTIUMIII is not set # CONFIG_MPENTIUMM is not set -# CONFIG_MTD is not set +# CONFIG_MSHV_ROOT is not set +# CONFIG_MTD_INTEL_DG is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_SCx200_DOCFLASH is not set CONFIG_MTRR=y # CONFIG_MTRR_SANITIZER is not set # CONFIG_MVIAC3_2 is not set @@ -264,38 +349,48 @@ CONFIG_MTRR=y # CONFIG_MWINCHIP3D is not set # CONFIG_MWINCHIPC6 is not set CONFIG_NAMESPACES=y +# CONFIG_NCT7201 is not set CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y CONFIG_NEED_PER_CPU_KM=y CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y CONFIG_NEED_SG_DMA_LENGTH=y # CONFIG_NET5501 is not set +# CONFIG_NET_DSA_REALTEK is not set CONFIG_NET_EGRESS=y CONFIG_NET_INGRESS=y # CONFIG_NET_NS is not set +# CONFIG_NET_VENDOR_META is not set CONFIG_NET_XGRESS=y CONFIG_NLS=y # CONFIG_NMI_CHECK_CPU is not set -# CONFIG_NOHIGHMEM is not set +CONFIG_NO_HZ=y CONFIG_NR_CPUS=1 CONFIG_NR_CPUS_DEFAULT=1 CONFIG_NR_CPUS_RANGE_BEGIN=1 CONFIG_NR_CPUS_RANGE_END=1 # CONFIG_NSC_GPIO is not set +# CONFIG_NSM is not set CONFIG_NVRAM=y +# CONFIG_OBJTOOL_WERROR is not set # CONFIG_OF is not set CONFIG_OLD_SIGACTION=y CONFIG_OLD_SIGSUSPEND3=y # CONFIG_OLPC is not set CONFIG_OUTPUT_FORMAT="elf32-i386" +# CONFIG_OVMF_DEBUG_LOG is not set +# CONFIG_OVPN is not set +# CONFIG_OXP_EC is not set +CONFIG_PAGE_MAPCOUNT=y CONFIG_PAGE_OFFSET=0xC0000000 CONFIG_PAGE_POOL=y +CONFIG_PAGE_SHIFT=12 CONFIG_PAGE_SIZE_LESS_THAN_256KB=y CONFIG_PAGE_SIZE_LESS_THAN_64KB=y +CONFIG_PAHOLE_HAS_BTF_TAG=y CONFIG_PAHOLE_HAS_LANG_EXCLUDE=y CONFIG_PC104=y # CONFIG_PC8736x_GPIO is not set # CONFIG_PC87413_WDT is not set -# CONFIG_PCENGINES_APU2 is not set CONFIG_PCI=y CONFIG_PCI_ATS=y CONFIG_PCI_BIOS=y @@ -320,23 +415,38 @@ CONFIG_PGTABLE_LEVELS=2 CONFIG_PHYSICAL_ALIGN=0x100000 CONFIG_PHYSICAL_START=0x1000000 # CONFIG_PHY_INTEL_LGM_EMMC is not set +# CONFIG_PINCTRL_INTEL_PLATFORM is not set +# CONFIG_PINCTRL_METEORPOINT is not set +# CONFIG_PM_USERSPACE_AUTOSLEEP is not set +# CONFIG_PORTWELL_EC is not set CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y CONFIG_POWER_SUPPLY=y +# CONFIG_PREEMPT_LAZY is not set CONFIG_PREEMPT_NONE_BUILD=y # CONFIG_PROCESSOR_SELECT is not set +# CONFIG_PROC_MEM_FORCE_PTRACE is not set +# CONFIG_PROC_MEM_NO_FORCE is not set CONFIG_PROC_PAGE_MONITOR=y CONFIG_PROC_PID_ARCH_STATUS=y +# CONFIG_PROPELLER_CLANG is not set # CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set CONFIG_PTP_1588_CLOCK_OPTIONAL=y +CONFIG_PTP_1588_CLOCK_VMCLOCK=y +CONFIG_PT_RECLAIM=y # CONFIG_PUNIT_ATOM_DEBUG is not set +# CONFIG_RANDSTRUCT_FULL is not set CONFIG_RANDSTRUCT_NONE=y CONFIG_RATIONAL=y CONFIG_RD_BZIP2=y CONFIG_RD_GZIP=y -CONFIG_RETHUNK=y -CONFIG_RETPOLINE=y +# CONFIG_REDMI_WMI is not set +# CONFIG_ROHM_BD79112 is not set +# CONFIG_ROHM_BD79124 is not set CONFIG_RTC_CLASS=y CONFIG_RTC_MC146818_LIB=y +CONFIG_RUSTC_LLVM_VERSION=170004 +CONFIG_RUSTC_VERSION=107400 +# CONFIG_SAMSUNG_GALAXYBOOK is not set CONFIG_SATA_HOST=y # CONFIG_SBC7240_WDT is not set # CONFIG_SBC8360_WDT is not set @@ -349,28 +459,68 @@ CONFIG_SCx200=y CONFIG_SCx200HR_TIMER=y # CONFIG_SCx200_GPIO is not set # CONFIG_SCx200_WDT is not set +# CONFIG_SEN0322 is not set +# CONFIG_SENSORS_GPD is not set +# CONFIG_SERIAL_8250_NI is not set CONFIG_SERIAL_8250_PCI=y CONFIG_SERIAL_8250_PCILIB=y # CONFIG_SERIAL_LANTIQ is not set -CONFIG_SERIAL_MCTRL_GPIO=y CONFIG_SERIO=y CONFIG_SERIO_I8042=y CONFIG_SERIO_LIBPS2=y CONFIG_SERIO_SERPORT=y +CONFIG_SGL_ALLOC=y CONFIG_SG_POOL=y # CONFIG_SIEMENS_SIMATIC_IPC is not set +# CONFIG_SILICOM_PLATFORM is not set +CONFIG_SLUB=y # CONFIG_SMSC37B787_WDT is not set # CONFIG_SMSC_SCH311X_WDT is not set +# CONFIG_SND_HDA_ACPI is not set +# CONFIG_SND_HDA_CODEC_ALC260 is not set +# CONFIG_SND_HDA_CODEC_ALC262 is not set +# CONFIG_SND_HDA_CODEC_ALC268 is not set +# CONFIG_SND_HDA_CODEC_ALC269 is not set +# CONFIG_SND_HDA_CODEC_ALC662 is not set +# CONFIG_SND_HDA_CODEC_ALC680 is not set +# CONFIG_SND_HDA_CODEC_ALC861 is not set +# CONFIG_SND_HDA_CODEC_ALC861VD is not set +# CONFIG_SND_HDA_CODEC_ALC880 is not set +# CONFIG_SND_HDA_CODEC_ALC882 is not set +# CONFIG_SND_HDA_CODEC_CM9825 is not set +# CONFIG_SND_HDA_CODEC_CS420X is not set +# CONFIG_SND_HDA_CODEC_CS421X is not set +# CONFIG_SND_HDA_CODEC_CS8409 is not set +# CONFIG_SND_HDA_CODEC_HDMI_ATI is not set +CONFIG_SND_HDA_CODEC_HDMI_GENERIC=m +# CONFIG_SND_HDA_CODEC_HDMI_INTEL is not set +# CONFIG_SND_HDA_CODEC_HDMI_NVIDIA is not set +# CONFIG_SND_HDA_CODEC_HDMI_NVIDIA_MCP is not set +CONFIG_SND_HDA_CODEC_HDMI_SIMPLE=m +# CONFIG_SND_HDA_CODEC_HDMI_TEGRA is not set +# CONFIG_SND_HDA_CODEC_SENARYTECH is not set +# CONFIG_SND_HDA_SCODEC_TAS2781_SPI is not set +# CONFIG_SND_SOC_AMD_ACP5x is not set +# CONFIG_SND_USB_US144MKII is not set +# CONFIG_SND_VIRTIO is not set CONFIG_SOFTIRQ_ON_OWN_STACK=y CONFIG_SPARSEMEM_STATIC=y CONFIG_SPARSE_IRQ=y -CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y +# CONFIG_SPI_INTEL_PCI is not set +# CONFIG_SPI_INTEL_PLATFORM is not set +# CONFIG_SPI_VIRTIO is not set +# CONFIG_SQUASHFS_COMP_CACHE_FULL is not set +CONFIG_SQUASHFS_DECOMP_SINGLE=y # CONFIG_STATIC_CALL_SELFTEST is not set # CONFIG_STRICT_SIGALTSTACK_SIZE is not set CONFIG_SYSCTL_EXCEPTION_TRACE=y # CONFIG_SYSFB_SIMPLEFB is not set # CONFIG_TELCLOCK is not set +# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set +# CONFIG_TEST_DHRY is not set # CONFIG_TEST_FPU is not set +# CONFIG_TEST_KALLSYMS is not set +# CONFIG_TEST_MAPLE_TREE is not set CONFIG_THERMAL=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 @@ -378,33 +528,46 @@ CONFIG_THERMAL_GOV_STEP_WISE=y CONFIG_THREAD_INFO_IN_TASK=y CONFIG_TICK_CPU_ACCOUNTING=y CONFIG_TINY_SRCU=y +# CONFIG_TI_FPC202 is not set CONFIG_TOOLS_SUPPORT_RELR=y # CONFIG_TOSHIBA is not set # CONFIG_TQMX86_WDT is not set CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y +# CONFIG_TUXEDO_NB04_WMI_AB is not set CONFIG_UNWINDER_FRAME_POINTER=y # CONFIG_UNWINDER_GUESS is not set CONFIG_UP_LATE_INIT=y CONFIG_USB=y +# CONFIG_USB_CDNS3_PCI_WRAP is not set +# CONFIG_USB_CDNSP_PCI is not set CONFIG_USB_COMMON=y +CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1 CONFIG_USB_EHCI_HCD=y # CONFIG_USB_EHCI_HCD_PLATFORM is not set CONFIG_USB_EHCI_PCI=y CONFIG_USB_HID=y CONFIG_USB_HIDDEV=y +# CONFIG_USB_LJCA is not set CONFIG_USB_OHCI_HCD=y CONFIG_USB_OHCI_HCD_PCI=y # CONFIG_USB_OHCI_HCD_PLATFORM is not set CONFIG_USB_PCI=y CONFIG_USB_SUPPORT=y CONFIG_USB_UHCI_HCD=y +# CONFIG_USB_USBIO is not set +# CONFIG_USB_XEN_HCD is not set CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_PCI=y # CONFIG_USB_XHCI_PLATFORM is not set # CONFIG_USER_NS is not set CONFIG_USER_STACKTRACE_SUPPORT=y +# CONFIG_VEML6046X00 is not set CONFIG_VGA_CONSOLE=y # CONFIG_VIA_WDT is not set +# CONFIG_VIDEO_COBALT is not set +# CONFIG_VIDEO_INTEL_IPU6 is not set +# CONFIG_VIDEO_LT6911UXE is not set +# CONFIG_VIRTIO_RTC is not set CONFIG_VM_EVENT_COUNTERS=y CONFIG_VT=y CONFIG_VT_CONSOLE=y @@ -415,19 +578,41 @@ CONFIG_X86=y CONFIG_X86_32=y # CONFIG_X86_32_IRIS is not set # CONFIG_X86_ANCIENT_MCE is not set +CONFIG_X86_BUS_LOCK_DETECT=y # CONFIG_X86_CHECK_BIOS_CORRUPTION is not set CONFIG_X86_CMOV=y -CONFIG_X86_CMPXCHG64=y # CONFIG_X86_CPA_STATISTICS is not set # CONFIG_X86_CPUFREQ_NFORCE2 is not set # CONFIG_X86_CPUID is not set # CONFIG_X86_CPU_RESCTRL is not set +CONFIG_X86_CX8=y CONFIG_X86_DEBUGCTLMSR=y # CONFIG_X86_DEBUG_FPU is not set # CONFIG_X86_DECODER_SELFTEST is not set +CONFIG_X86_DISABLED_FEATURE_CALL_DEPTH=y +CONFIG_X86_DISABLED_FEATURE_ENQCMD=y +CONFIG_X86_DISABLED_FEATURE_FRED=y +CONFIG_X86_DISABLED_FEATURE_IBT=y +CONFIG_X86_DISABLED_FEATURE_INVLPGB=y +CONFIG_X86_DISABLED_FEATURE_LAM=y +CONFIG_X86_DISABLED_FEATURE_OSPKE=y +CONFIG_X86_DISABLED_FEATURE_PCID=y +CONFIG_X86_DISABLED_FEATURE_PKU=y +CONFIG_X86_DISABLED_FEATURE_PTI=y +CONFIG_X86_DISABLED_FEATURE_RETHUNK=y +CONFIG_X86_DISABLED_FEATURE_RETPOLINE=y +CONFIG_X86_DISABLED_FEATURE_RETPOLINE_LFENCE=y +CONFIG_X86_DISABLED_FEATURE_SEV_SNP=y +CONFIG_X86_DISABLED_FEATURE_SGX=y +CONFIG_X86_DISABLED_FEATURE_TDX_GUEST=y +CONFIG_X86_DISABLED_FEATURE_UNRET=y +CONFIG_X86_DISABLED_FEATURE_USER_SHSTK=y +CONFIG_X86_DISABLED_FEATURE_XENPV=y # CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_X86_FRED=y CONFIG_X86_GENERIC=y # CONFIG_X86_GX_SUSPMOD is not set +CONFIG_X86_HAVE_PAE=y # CONFIG_X86_INTEL_PSTATE is not set # CONFIG_X86_INTEL_TSX_MODE_AUTO is not set CONFIG_X86_INTEL_TSX_MODE_OFF=y @@ -449,7 +634,9 @@ CONFIG_X86_MCE_THRESHOLD=y CONFIG_X86_MINIMUM_CPU_FAMILY=6 CONFIG_X86_MPPARSE=y CONFIG_X86_MSR=y +# CONFIG_X86_NATIVE_CPU is not set # CONFIG_X86_P4_CLOCKMOD is not set +# CONFIG_X86_PAE is not set CONFIG_X86_PAT=y CONFIG_X86_PLATFORM_DEVICES=y # CONFIG_X86_PLATFORM_DRIVERS_DELL is not set @@ -457,6 +644,11 @@ CONFIG_X86_PLATFORM_DEVICES=y # CONFIG_X86_POWERNOW_K6 is not set # CONFIG_X86_POWERNOW_K7 is not set # CONFIG_X86_REBOOTFIXUPS is not set +CONFIG_X86_REQUIRED_FEATURE_ALWAYS=y +CONFIG_X86_REQUIRED_FEATURE_CMOV=y +CONFIG_X86_REQUIRED_FEATURE_CX8=y +CONFIG_X86_REQUIRED_FEATURE_FPU=y +CONFIG_X86_REQUIRED_FEATURE_UP=y CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y # CONFIG_X86_SPEEDSTEP_CENTRINO is not set # CONFIG_X86_SPEEDSTEP_ICH is not set @@ -470,6 +662,10 @@ CONFIG_X86_UP_IOAPIC=y CONFIG_X86_USE_PPRO_CHECKSUM=y CONFIG_X86_VERBOSE_BOOTUP=y CONFIG_X86_VMX_FEATURE_NAMES=y +# CONFIG_XEN_PRIVCMD_EVENTFD is not set +CONFIG_XXHASH=y CONFIG_XZ_DEC_BCJ=y CONFIG_XZ_DEC_X86=y CONFIG_ZLIB_INFLATE=y +CONFIG_ZSTD_COMMON=y +CONFIG_ZSTD_DECOMPRESS=y diff --git a/openwrt/patch/openwrt-6.x/x86/patches-6.6/100-fix_cs5535_clockevt.patch b/openwrt/patch/openwrt-6.x/x86/patches-6.18/100-fix_cs5535_clockevt.patch similarity index 85% rename from openwrt/patch/openwrt-6.x/x86/patches-6.6/100-fix_cs5535_clockevt.patch rename to openwrt/patch/openwrt-6.x/x86/patches-6.18/100-fix_cs5535_clockevt.patch index d4de2027b..65c36ccc8 100644 --- a/openwrt/patch/openwrt-6.x/x86/patches-6.6/100-fix_cs5535_clockevt.patch +++ b/openwrt/patch/openwrt-6.x/x86/patches-6.18/100-fix_cs5535_clockevt.patch @@ -1,6 +1,6 @@ --- a/drivers/clocksource/timer-cs5535.c +++ b/drivers/clocksource/timer-cs5535.c -@@ -127,7 +127,9 @@ static irqreturn_t mfgpt_tick(int irq, v +@@ -128,7 +128,9 @@ static irqreturn_t mfgpt_tick(int irq, v cs5535_mfgpt_write(cs5535_event_clock, MFGPT_REG_SETUP, MFGPT_SETUP_CNTEN | MFGPT_SETUP_CMP2); diff --git a/openwrt/patch/openwrt-6.x/x86/patches-6.6/103-pcengines_apu6_platform.patch b/openwrt/patch/openwrt-6.x/x86/patches-6.18/103-pcengines_apu6_platform.patch similarity index 94% rename from openwrt/patch/openwrt-6.x/x86/patches-6.6/103-pcengines_apu6_platform.patch rename to openwrt/patch/openwrt-6.x/x86/patches-6.18/103-pcengines_apu6_platform.patch index 1fd6fc89c..145752e7d 100644 --- a/openwrt/patch/openwrt-6.x/x86/patches-6.6/103-pcengines_apu6_platform.patch +++ b/openwrt/patch/openwrt-6.x/x86/patches-6.18/103-pcengines_apu6_platform.patch @@ -52,10 +52,10 @@ Sighed-off-by: Philip Prindeville --- a/drivers/leds/leds-apu.c +++ b/drivers/leds/leds-apu.c -@@ -183,7 +183,7 @@ static int __init apu_led_init(void) +@@ -182,7 +182,7 @@ static int __init apu_led_init(void) + int err; - if (!(dmi_match(DMI_SYS_VENDOR, "PC Engines") && - (dmi_match(DMI_PRODUCT_NAME, "APU") || dmi_match(DMI_PRODUCT_NAME, "apu1")))) { + if (!dmi_check_system(apu_led_dmi_table)) { - pr_err("No PC Engines APUv1 board detected. For APUv2,3 support, enable CONFIG_PCENGINES_APU2\n"); + pr_err("No PC Engines APUv1 board detected. For APUv2,3,4,5,6 support, enable CONFIG_PCENGINES_APU2\n"); return -ENODEV; @@ -63,7 +63,7 @@ Sighed-off-by: Philip Prindeville --- a/drivers/platform/x86/Kconfig +++ b/drivers/platform/x86/Kconfig -@@ -707,7 +707,7 @@ config XO1_RFKILL +@@ -572,7 +572,7 @@ config XO1_RFKILL laptop. config PCENGINES_APU2 @@ -72,7 +72,7 @@ Sighed-off-by: Philip Prindeville depends on INPUT && INPUT_KEYBOARD && GPIOLIB depends on LEDS_CLASS select GPIO_AMD_FCH -@@ -715,7 +715,7 @@ config PCENGINES_APU2 +@@ -580,7 +580,7 @@ config PCENGINES_APU2 select LEDS_GPIO help This driver provides support for the front button and LEDs on @@ -159,9 +159,9 @@ Sighed-off-by: Philip Prindeville +#define APU5_GPIO_LINE_SIMSWAP1 7 +#define APU5_GPIO_LINE_SIMSWAP2 8 +#define APU5_GPIO_LINE_SIMSWAP3 9 -+ -/* GPIO device */ ++ +/* GPIO device - APU2/3/4/6 */ static int apu2_gpio_regs[] = { @@ -189,8 +189,8 @@ Sighed-off-by: Philip Prindeville }; static const struct amd_fch_gpio_pdata board_apu2 = { -@@ -72,6 +106,40 @@ static const struct amd_fch_gpio_pdata b - .gpio_names = apu2_gpio_names, +@@ -76,6 +110,40 @@ static const struct software_node apu2_g + .name = AMD_FCH_GPIO_DRIVER_NAME, }; +/* GPIO device - APU5 */ @@ -228,9 +228,9 @@ Sighed-off-by: Philip Prindeville +}; + /* GPIO LEDs device */ - - static const struct gpio_led apu2_leds[] = { -@@ -215,6 +283,24 @@ static const struct dmi_system_id apu_gp + static const struct software_node apu2_leds_node = { + .name = "apu2-leds", +@@ -246,6 +314,24 @@ static const struct dmi_system_id apu_gp }, .driver_data = (void *)&board_apu2, }, @@ -255,7 +255,7 @@ Sighed-off-by: Philip Prindeville {} }; -@@ -249,7 +335,7 @@ static int __init apu_board_init(void) +@@ -283,7 +369,7 @@ static int __init apu_board_init(void) id = dmi_first_match(apu_gpio_dmi_table); if (!id) { @@ -264,7 +264,7 @@ Sighed-off-by: Philip Prindeville return -ENODEV; } -@@ -288,7 +374,7 @@ module_init(apu_board_init); +@@ -332,7 +418,7 @@ module_init(apu_board_init); module_exit(apu_board_exit); MODULE_AUTHOR("Enrico Weigelt, metux IT consult "); diff --git a/openwrt/patch/opkg/901-libopkg-opkg_install-copy-conffiles-to-the-system-co.patch b/openwrt/patch/opkg/901-libopkg-opkg_install-copy-conffiles-to-the-system-co.patch new file mode 100644 index 000000000..e7b6ec0d1 --- /dev/null +++ b/openwrt/patch/opkg/901-libopkg-opkg_install-copy-conffiles-to-the-system-co.patch @@ -0,0 +1,57 @@ +From 74dbda351198a9028a69a912be85cefd72c0cec9 Mon Sep 17 00:00:00 2001 +From: sbwml +Date: Thu, 13 Mar 2025 22:07:10 +0800 +Subject: [PATCH] libopkg: opkg_install: copy conffiles to the system + configuration preserved list + +Signed-off-by: sbwml +--- + libopkg/opkg_install.c | 32 ++++++++++++++++++++++++++++++++ + 1 file changed, 32 insertions(+) + +diff --git a/libopkg/opkg_install.c b/libopkg/opkg_install.c +index 68fb9ea..b4d18a2 100644 +--- a/libopkg/opkg_install.c ++++ b/libopkg/opkg_install.c +@@ -1394,6 +1394,38 @@ int opkg_install_pkg(pkg_t * pkg, int from_upgrade) + } + } + ++ /* Handle conffiles for sysupgrade */ ++ { ++ const char *tmp_dir = pkg_get_string(pkg, PKG_TMP_UNPACK_DIR); ++ if (tmp_dir) { ++ char *conffiles_path; ++ asprintf(&conffiles_path, "%s/conffiles", tmp_dir); ++ if (file_exists(conffiles_path)) { ++ char *keep_dir = "/lib/upgrade/keep.d"; ++ char *keep_file; ++ asprintf(&keep_file, "%s/%s", keep_dir, pkg->name); ++ ++ if (file_mkdir_hier(keep_dir, 0755) != 0) { ++ opkg_msg(ERROR, "Failed to create directory %s: %s\n", ++ keep_dir, strerror(errno)); ++ goto cleanup_conffiles; ++ } ++ ++ if (file_copy(conffiles_path, keep_file) != 0) { ++ opkg_msg(ERROR, "Failed to copy %s to %s\n", ++ conffiles_path, keep_file); ++ goto cleanup_conffiles; ++ } ++ opkg_msg(DEBUG, "Copied conffiles to %s for sysupgrade\n", ++ keep_file); ++ ++ cleanup_conffiles: ++ free(keep_file); ++ } ++ free(conffiles_path); ++ } ++ } ++ + err = update_file_ownership(pkg, old_pkg); + if (err) + return -1; +-- +2.43.5 + diff --git a/openwrt/patch/packages-patches/README.md b/openwrt/patch/packages-patches/README.md index 42a5e6472..7f05e7e90 100644 --- a/openwrt/patch/packages-patches/README.md +++ b/openwrt/patch/packages-patches/README.md @@ -1 +1 @@ -### Fix build for linux-6.6 \ No newline at end of file +### Fix build for linux-6.18 diff --git a/openwrt/patch/packages-patches/bpf-headers/900-fix-build.patch b/openwrt/patch/packages-patches/bpf-headers/900-fix-build.patch new file mode 100644 index 000000000..c15ebbfe7 --- /dev/null +++ b/openwrt/patch/packages-patches/bpf-headers/900-fix-build.patch @@ -0,0 +1,22 @@ +--- a/include/linux/sched.h ++++ b/include/linux/sched.h +@@ -49,9 +49,6 @@ + #include + #include + #include +-#ifndef COMPILE_OFFSETS +-#include +-#endif + + /* task_struct member predeclarations (sorted alphabetically): */ + struct audit_context; +@@ -2334,6 +2331,9 @@ DECLARE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); + * + * So use arch_raw_cpu_ptr()/PERCPU_PTR() directly here. + */ ++#ifndef RQ_nr_pinned ++#define RQ_nr_pinned 0 ++#endif + #ifdef CONFIG_SMP + #define this_rq_raw() arch_raw_cpu_ptr(&runqueues) + #else diff --git a/openwrt/patch/packages-patches/clang/linux-atm/openwrt-fix-build-with-clang.patch b/openwrt/patch/packages-patches/clang/linux-atm/openwrt-fix-build-with-clang.patch new file mode 100644 index 000000000..07547a9ee --- /dev/null +++ b/openwrt/patch/packages-patches/clang/linux-atm/openwrt-fix-build-with-clang.patch @@ -0,0 +1,20 @@ +diff --git a/package/network/utils/linux-atm/Makefile b/package/network/utils/linux-atm/Makefile +index c48309d..bec084d 100644 +--- a/package/network/utils/linux-atm/Makefile ++++ b/package/network/utils/linux-atm/Makefile +@@ -6,7 +6,6 @@ + # + + include $(TOPDIR)/rules.mk +-include $(INCLUDE_DIR)/kernel.mk + + PKG_NAME:=linux-atm + PKG_VERSION:=2.5.2 +@@ -24,6 +23,7 @@ PKG_FIXUP:=autoreconf + PKG_FLAGS:=nonshared + + include $(INCLUDE_DIR)/package.mk ++include $(INCLUDE_DIR)/kernel.mk + + ATM_DEBUG_BINS:=aread awrite atmdiag atmdump atmswitch saaldump \ + sonetdiag svc_recv svc_send ttcp_atm diff --git a/openwrt/patch/packages-patches/clang/macremapper/100-macremapper-fix-clang-build.patch b/openwrt/patch/packages-patches/clang/macremapper/100-macremapper-fix-clang-build.patch index 597b5de79..28f35166b 100644 --- a/openwrt/patch/packages-patches/clang/macremapper/100-macremapper-fix-clang-build.patch +++ b/openwrt/patch/packages-patches/clang/macremapper/100-macremapper-fix-clang-build.patch @@ -1,9 +1,11 @@ --- a/feeds/packages/kernel/macremapper/Makefile +++ b/feeds/packages/kernel/macremapper/Makefile -@@ -39,4 +39,13 @@ endef +@@ -38,4 +38,15 @@ endef MAKE_FLAGS += KERNEL_SRC=$(LINUX_DIR) ARCH=$(LINUX_KARCH) MAKE_PATH:=kernelmod ++KERNEL_CC:= $(filter-out ccache,$(KERNEL_CC)) ++ +ifneq (,$(findstring clang,$(KERNEL_CC))) + ifneq (,$(filter clang-%,$(KERNEL_CC))) + LLVM:=-$(subst clang-,,$(KERNEL_CC)) diff --git a/openwrt/patch/packages-patches/cryptodev-linux/001-Fix-build-for-Linux-6.3-rc1.patch b/openwrt/patch/packages-patches/cryptodev-linux/001-Fix-build-for-Linux-6.3-rc1.patch deleted file mode 100644 index 162e7e24c..000000000 --- a/openwrt/patch/packages-patches/cryptodev-linux/001-Fix-build-for-Linux-6.3-rc1.patch +++ /dev/null @@ -1,84 +0,0 @@ -From bd7418182b6c5a782730b80f40b25a0ae9a6d096 Mon Sep 17 00:00:00 2001 -From: Joan Bruguera -Date: Sat, 18 Feb 2023 23:36:56 +0000 -Subject: [PATCH] Fix build for Linux 6.3-rc1 - -The 1st parameter of `crypto_completion_t` is now the user data passed to the -callback instead of the `crypto_async_request`. -Migrate to the new API and add a shim to keep compatibility with old kernels. - -See also: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=255e48eb17684157336bd6dd98d22c1b2d9e3f43 - -Signed-off-by: Joan Bruguera ---- - cryptlib.c | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) - ---- a/cryptlib.c -+++ b/cryptlib.c -@@ -42,9 +42,9 @@ - extern const struct crypto_type crypto_givcipher_type; - #endif - --static void cryptodev_complete(struct crypto_async_request *req, int err) -+static void cryptodev_complete(void *data, int err) - { -- struct cryptodev_result *res = req->data; -+ struct cryptodev_result *res = data; - - if (err == -EINPROGRESS) - return; -@@ -53,6 +53,14 @@ static void cryptodev_complete(struct cr - complete(&res->completion); - } - -+#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)) -+static void cryptodev_complete_shim(struct crypto_async_request *req, int err) -+{ -+ cryptodev_complete(req->data, err); -+} -+#define cryptodev_complete cryptodev_complete_shim -+#endif -+ - int cryptodev_get_cipher_keylen(unsigned int *keylen, struct session_op *sop, - int aead) - { ---- a/ioctl.c -+++ b/ioctl.c -@@ -1184,7 +1184,6 @@ static struct ctl_table verbosity_ctl_ro - { - .procname = "ioctl", - .mode = 0555, -- .child = verbosity_ctl_dir, - }, - {}, - }; -@@ -1205,7 +1204,6 @@ static int __init init_cryptodev(void) - return rc; - } - -- verbosity_sysctl_header = register_sysctl_table(verbosity_ctl_root); - - pr_info(PFX "driver %s loaded.\n", VERSION); - -@@ -1217,9 +1215,6 @@ static void __exit exit_cryptodev(void) - flush_workqueue(cryptodev_wq); - destroy_workqueue(cryptodev_wq); - -- if (verbosity_sysctl_header) -- unregister_sysctl_table(verbosity_sysctl_header); -- - cryptodev_deregister(); - pr_info(PFX "driver unloaded.\n"); - } ---- a/zc.c -+++ b/zc.c -@@ -83,7 +83,7 @@ int __get_userbuf(uint8_t __user *addr, - #else - ret = get_user_pages_remote(mm, - (unsigned long)addr, pgcount, write ? FOLL_WRITE : 0, -- pg, NULL, NULL); -+ pg, NULL); - #endif - #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)) - up_read(&mm->mmap_sem); diff --git a/openwrt/patch/packages-patches/cryptodev-linux/6.18/900-fix-linux-6.18.patch b/openwrt/patch/packages-patches/cryptodev-linux/6.18/900-fix-linux-6.18.patch new file mode 100644 index 000000000..51570bf77 --- /dev/null +++ b/openwrt/patch/packages-patches/cryptodev-linux/6.18/900-fix-linux-6.18.patch @@ -0,0 +1,24 @@ +diff --git a/util.c b/util.c +index 9eba483..98be8b3 100644 +--- a/util.c ++++ b/util.c +@@ -21,6 +21,7 @@ + + #include + #include ++#include + #include "util.h" + + /* These were taken from Maxim Levitsky's patch to lkml. +@@ -45,7 +46,11 @@ struct scatterlist *sg_advance(struct scatterlist *sg, int consumed) + + if (sg->offset >= PAGE_SIZE) { + struct page *page = ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 18, 0) ++ page = sg_page(sg) + (sg->offset / PAGE_SIZE); ++#else + nth_page(sg_page(sg), sg->offset / PAGE_SIZE); ++#endif + sg_set_page(sg, page, sg->length, sg->offset % PAGE_SIZE); + } + diff --git a/openwrt/patch/packages-patches/dmx_usb_module/900-fix-linux-6.6.patch b/openwrt/patch/packages-patches/dmx_usb_module/900-fix-linux-6.6.patch deleted file mode 100644 index f634e5cb3..000000000 --- a/openwrt/patch/packages-patches/dmx_usb_module/900-fix-linux-6.6.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/dmx_usb.c b/dmx_usb.c -index 4e3372d..7dfb814 100644 ---- a/dmx_usb.c -+++ b/dmx_usb.c -@@ -97,7 +97,7 @@ struct dmx_usb_device { - - - /* prevent races between open() and disconnect() */ -- static DEFINE_SEMAPHORE(disconnect_sem); -+ static DEFINE_SEMAPHORE(disconnect_sem, 1); - - /* local function prototypes */ - static ssize_t dmx_usb_write (struct file *file, const char *buffer, size_t count, loff_t *ppos); diff --git a/openwrt/patch/packages-patches/gpio-button-hotplug/fix-linux-6.18.patch b/openwrt/patch/packages-patches/gpio-button-hotplug/fix-linux-6.18.patch new file mode 100644 index 000000000..53ff25949 --- /dev/null +++ b/openwrt/patch/packages-patches/gpio-button-hotplug/fix-linux-6.18.patch @@ -0,0 +1,29 @@ +diff --git a/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c b/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c +index d0e3723..3efbfaa 100644 +--- a/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c ++++ b/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c +@@ -515,7 +515,7 @@ static int gpio_keys_button_probe(struct platform_device *pdev, + /* or the legacy (button->gpio is good) way? */ + error = devm_gpio_request_one(dev, + button->gpio, GPIOF_IN | ( +- button->active_low ? GPIOF_ACTIVE_LOW : ++ button->active_low ? GPIOD_OUT_LOW : + 0), desc); + if (error) { + dev_err_probe(dev, error, +@@ -681,7 +681,6 @@ static void gpio_keys_remove(struct platform_device *pdev) + + static struct platform_driver gpio_keys_driver = { + .probe = gpio_keys_probe, +- .remove_new = gpio_keys_remove, + .driver = { + .name = "gpio-keys", + .of_match_table = of_match_ptr(gpio_keys_of_match), +@@ -690,7 +689,6 @@ static struct platform_driver gpio_keys_driver = { + + static struct platform_driver gpio_keys_polled_driver = { + .probe = gpio_keys_polled_probe, +- .remove_new = gpio_keys_remove, + .driver = { + .name = "gpio-keys-polled", + .of_match_table = of_match_ptr(gpio_keys_polled_of_match), diff --git a/openwrt/patch/packages-patches/gpio-button-hotplug/fix-linux-6.6.patch b/openwrt/patch/packages-patches/gpio-button-hotplug/fix-linux-6.6.patch deleted file mode 100644 index 474da9e74..000000000 --- a/openwrt/patch/packages-patches/gpio-button-hotplug/fix-linux-6.6.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c b/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c -index 522085b..6220ad1 100644 ---- a/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c -+++ b/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c -@@ -538,8 +538,7 @@ static int gpio_keys_button_probe(struct platform_device *pdev, - struct device_node *child = - of_get_next_child(dev->of_node, prev); - -- bdata->gpiod = devm_gpiod_get_from_of_node(dev, -- child, "gpios", 0, GPIOD_IN, desc); -+ bdata->gpiod = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); - - prev = child; - } diff --git a/openwrt/patch/packages-patches/gpio-nct5104d/fix-build-for-linux-6.6.patch b/openwrt/patch/packages-patches/gpio-nct5104d/fix-build-for-linux-6.6.patch deleted file mode 100644 index e6b11b9d5..000000000 --- a/openwrt/patch/packages-patches/gpio-nct5104d/fix-build-for-linux-6.6.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c -+++ b/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c -@@ -18,6 +18,10 @@ - #include - #include - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,6,0) -+#include -+#endif -+ - #define DRVNAME "gpio-nct5104d" - - /* diff --git a/openwrt/patch/packages-patches/gpio-nct5104d/fix-linux-6.18.patch b/openwrt/patch/packages-patches/gpio-nct5104d/fix-linux-6.18.patch new file mode 100644 index 000000000..892142ebd --- /dev/null +++ b/openwrt/patch/packages-patches/gpio-nct5104d/fix-linux-6.18.patch @@ -0,0 +1,40 @@ +diff --git a/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c b/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c +index ffeab29..50817f3 100644 +--- a/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c ++++ b/package/kernel/gpio-nct5104d/src/gpio-nct5104d.c +@@ -124,7 +124,7 @@ static int nct5104d_gpio_direction_in(struct gpio_chip *chip, unsigned offset); + static int nct5104d_gpio_get(struct gpio_chip *chip, unsigned offset); + static int nct5104d_gpio_direction_out(struct gpio_chip *chip, + unsigned offset, int value); +-static void nct5104d_gpio_set(struct gpio_chip *chip, unsigned offset, int value); ++static int nct5104d_gpio_set(struct gpio_chip *chip, unsigned offset, int value); + + #define NCT5104D_GPIO_BANK(_base, _ngpio, _regbase) \ + { \ +@@ -219,7 +219,7 @@ static int nct5104d_gpio_direction_out(struct gpio_chip *chip, + return 0; + } + +-static void nct5104d_gpio_set(struct gpio_chip *chip, unsigned offset, int value) ++static int nct5104d_gpio_set(struct gpio_chip *chip, unsigned offset, int value) + { + int err; + struct nct5104d_gpio_bank *bank = gpiochip_get_data(chip); +@@ -228,7 +228,7 @@ static void nct5104d_gpio_set(struct gpio_chip *chip, unsigned offset, int value + + err = superio_enter(sio->addr); + if (err) +- return; ++ return err; + superio_select(sio->addr, SIO_LD_GPIO); + + data_out = superio_inb(sio->addr, gpio_data(bank->regbase)); +@@ -239,6 +239,8 @@ static void nct5104d_gpio_set(struct gpio_chip *chip, unsigned offset, int value + superio_outb(sio->addr, gpio_data(bank->regbase), data_out); + + superio_exit(sio->addr); ++ ++ return 0; + } + + /* diff --git a/openwrt/patch/packages-patches/irqbalance/901-meson-disable-numa-option-by-default.patch b/openwrt/patch/packages-patches/irqbalance/901-meson-disable-numa-option-by-default.patch new file mode 100644 index 000000000..73a6efaa0 --- /dev/null +++ b/openwrt/patch/packages-patches/irqbalance/901-meson-disable-numa-option-by-default.patch @@ -0,0 +1,11 @@ +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -2,7 +2,7 @@ option('capng', type : 'feature', + description : 'Build with libcap-ng support', + ) + +-option('numa', type : 'feature', value: 'enabled', ++option('numa', type : 'feature', value: 'disabled', + description : 'Build with numa support', + ) + diff --git a/openwrt/patch/packages-patches/jool/Makefile b/openwrt/patch/packages-patches/jool/Makefile index c264b2f84..685239a44 100644 --- a/openwrt/patch/packages-patches/jool/Makefile +++ b/openwrt/patch/packages-patches/jool/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=jool -PKG_VERSION:=4.1.10 +PKG_VERSION:=4.1.13 PKG_RELEASE:=1 PKG_LICENSE:=GPL-2.0-only @@ -16,8 +16,8 @@ PKG_LICENSE_FILES:=COPYING PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/NICMx/Jool.git -PKG_SOURCE_VERSION:=741baa890489d4a3985da45551e203aebf078a93 -PKG_MIRROR_HASH:=543fbec0bd00870a1d72731ad0504fe2b88f1bf5f2c4366d362195739a932cee +PKG_SOURCE_VERSION:=39ca69f8717a83733548bea3b7bfad2a4799572a +PKG_MIRROR_HASH:=f00592d639f34bc6c38e9d012d59a694b159a57ada1b86985cd4df38e4f85d5f PKG_BUILD_DIR=$(KERNEL_BUILD_DIR)/$(PKG_SOURCE_SUBDIR) PKG_BUILD_PARALLEL:=1 @@ -69,7 +69,7 @@ endef define Package/jool/Default SECTION:=net CATEGORY:=Network - URL:=https://www.jool.mx + URL:=https://nicmx.github.io/Jool/ endef define Package/jool/Default/description @@ -104,7 +104,7 @@ endef define Package/jool-tools-netfilter $(call Package/jool/Default) TITLE:=Jool userspace control programs - DEPENDS:=+libnl +kmod-jool-netfilter + DEPENDS:=+libnl +libnl-genl +kmod-jool-netfilter +ethtool endef define Package/jool-tools-netfilter/description @@ -137,6 +137,9 @@ define Package/jool-tools-netfilter/install $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/jool.init $(1)/etc/init.d/jool + $(INSTALL_DIR) $(1)/etc/hotplug.d/net + $(INSTALL_BIN) ./files/jool-disable-fraglist-gro.sh $(1)/etc/hotplug.d/net/90-jool-disable-fraglist-gro.sh + $(INSTALL_DIR) $(1)/etc/jool $(INSTALL_CONF) ./files/jool-nat64.conf.json $(1)/etc/jool/jool-nat64.conf.json $(INSTALL_CONF) ./files/jool-siit.conf.json $(1)/etc/jool/jool-siit.conf.json diff --git a/openwrt/patch/packages-patches/jool/patches/100-fix-compilation-warning-simple-fix.patch b/openwrt/patch/packages-patches/jool/patches/100-fix-compilation-warning-simple-fix.patch new file mode 100644 index 000000000..8dcd7d69b --- /dev/null +++ b/openwrt/patch/packages-patches/jool/patches/100-fix-compilation-warning-simple-fix.patch @@ -0,0 +1,22 @@ +--- a/src/mod/common/xlator.c ++++ b/src/mod/common/xlator.c +@@ -891,7 +891,7 @@ void xlator_put(struct xlator *jool) + static bool offset_equals(struct instance_entry_usr *offset, + struct jool_instance *instance) + { +- return (offset->ns == ((PTR_AS_UINT_TYPE)instance->jool.ns & 0xFFFFFFFF)) ++ return (offset->ns == ((uintptr_t)instance->jool.ns & 0xFFFFFFFF)) + && (strcmp(offset->iname, instance->jool.iname) == 0); + } + +--- a/src/mod/common/nl/instance.c ++++ b/src/mod/common/nl/instance.c +@@ -38,7 +38,7 @@ static int serialize_instance(struct xla + if (!root) + return 1; + +- error = nla_put_u32(skb, JNLAIE_NS, ((PTR_AS_UINT_TYPE)entry->ns) & 0xFFFFFFFF); ++ error = nla_put_u32(skb, JNLAIE_NS, ((uintptr_t)entry->ns) & 0xFFFFFFFF); + if (error) + goto cancel; + error = nla_put_u8(skb, JNLAIE_XF, xlator_flags2xf(entry->flags)); diff --git a/openwrt/patch/packages-patches/jool/patches/900-fix-build-with-linux-6.18.patch b/openwrt/patch/packages-patches/jool/patches/900-fix-build-with-linux-6.18.patch new file mode 100644 index 000000000..0cd4e5bee --- /dev/null +++ b/openwrt/patch/packages-patches/jool/patches/900-fix-build-with-linux-6.18.patch @@ -0,0 +1,29 @@ +--- a/src/mod/common/rfc7915/6to4.c ++++ b/src/mod/common/rfc7915/6to4.c +@@ -203,7 +203,7 @@ static verdict compute_flowix64(struct x + hdr6 = pkt_ip6_hdr(&state->in); + + flow4->flowi4_mark = state->in.skb->mark; +- flow4->flowi4_tos = xlat_tos(&state->jool.globals, hdr6); ++ flow4->flowi4_dscp = xlat_tos(&state->jool.globals, hdr6); + flow4->flowi4_scope = RT_SCOPE_UNIVERSE; + flow4->flowi4_proto = xlat_proto(hdr6); + /* +@@ -645,7 +645,7 @@ static verdict ttp64_ipv4_external(struc + + hdr4->version = 4; + hdr4->ihl = 5; +- hdr4->tos = flow4->flowi4_tos; ++ hdr4->tos = flow4->flowi4_dscp; + hdr4->tot_len = cpu_to_be16(state->out.skb->len); + generate_ipv4_id(state, hdr4, hdr_frag); + hdr4->frag_off = xlat_frag_off(hdr_frag, state); +--- a/src/mod/common/timer.c ++++ b/src/mod/common/timer.c +@@ -63,5 +63,5 @@ int jtimer_setup(void) + */ + void jtimer_teardown(void) + { +- del_timer_sync(&timer); ++ timer_delete_sync(&timer); + } diff --git a/openwrt/patch/packages-patches/libpfring/patches/901-fix-build-for-linux-6.17.patch b/openwrt/patch/packages-patches/libpfring/patches/901-fix-build-for-linux-6.17.patch new file mode 100644 index 000000000..3760135ba --- /dev/null +++ b/openwrt/patch/packages-patches/libpfring/patches/901-fix-build-for-linux-6.17.patch @@ -0,0 +1,38 @@ +--- a/kernel/pf_ring.c ++++ b/kernel/pf_ring.c +@@ -5196,7 +5196,11 @@ static int is_netdev_promisc(struct net_ + debug_printk(1, "checking promisc for %s\n", netdev->name); + + rtnl_lock(); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(6,17,0) + if_flags = (short) dev_get_flags(netdev); ++#else ++ if_flags = (short) netif_get_flags(netdev); ++#endif + rtnl_unlock(); + + return !!(if_flags & IFF_PROMISC); +@@ -5211,7 +5215,11 @@ static void set_netdev_promisc(struct ne + + rtnl_lock(); + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(6,17,0) + if_flags = (short) dev_get_flags(netdev); ++#else ++ if_flags = (short) netif_get_flags(netdev); ++#endif + if(!(if_flags & IFF_PROMISC)) { + if_flags |= IFF_PROMISC; + #if(LINUX_VERSION_CODE < KERNEL_VERSION(5,0,0) && \ +@@ -5234,7 +5242,11 @@ static void unset_netdev_promisc(struct + + rtnl_lock(); + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(6,17,0) + if_flags = (short) dev_get_flags(netdev); ++#else ++ if_flags = (short) netif_get_flags(netdev); ++#endif + if(if_flags & IFF_PROMISC) { + if_flags &= ~IFF_PROMISC; + #if(LINUX_VERSION_CODE < KERNEL_VERSION(5,0,0) && \ diff --git a/openwrt/patch/packages-patches/mdio-netlink/001-mdio-netlink-rework-C45-to-work-with-net-next.patch b/openwrt/patch/packages-patches/mdio-netlink/001-mdio-netlink-rework-C45-to-work-with-net-next.patch deleted file mode 100644 index 4426c47d2..000000000 --- a/openwrt/patch/packages-patches/mdio-netlink/001-mdio-netlink-rework-C45-to-work-with-net-next.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 6cfdfd0a4120758015e99224a8271cdf4d8fd613 Mon Sep 17 00:00:00 2001 -From: Robert Marko -Date: Mon, 23 Jan 2023 11:41:14 +0100 -Subject: [PATCH] mdio-netlink: rework C45 to work with net-next - -net-next has finally completely split C22 and C45 and the old magic -macro for C45 was finally dropped, so lets rework to work on it. - -Signed-off-by: Robert Marko ---- - kernel/mdio-netlink.c | 43 ++++++++++++++++++++----------------------- - 1 file changed, 20 insertions(+), 23 deletions(-) - -diff --git a/kernel/mdio-netlink.c b/kernel/mdio-netlink.c -index d79cf95..fb8254e 100644 ---- a/kernel/mdio-netlink.c -+++ b/kernel/mdio-netlink.c -@@ -9,17 +9,6 @@ - #include - #include - --static void c45_compat_convert(int *kdev, int *kreg, int udev, int ureg) --{ -- if (!mdio_phy_id_is_c45(udev)) { -- *kdev = udev; -- *kreg = ureg; -- } else { -- *kdev = mdio_phy_id_prtad(udev); -- *kreg = MII_ADDR_C45 | (mdio_phy_id_devad(udev) << 16) | ureg; -- } --} -- - struct mdio_nl_xfer { - struct genl_info *info; - struct sk_buff *msg; -@@ -93,7 +82,6 @@ static int mdio_nl_eval(struct mdio_nl_xfer *xfer) - unsigned long timeout; - u16 regs[8] = { 0 }; - unsigned int pc; -- int dev, reg; - int ret = 0; - - timeout = jiffies + msecs_to_jiffies(xfer->timeout_ms); -@@ -110,11 +98,15 @@ static int mdio_nl_eval(struct mdio_nl_xfer *xfer) - - switch ((enum mdio_nl_op)insn->op) { - case MDIO_NL_OP_READ: -- c45_compat_convert(&dev, ®, -- __arg_ri(insn->arg0, regs), -- __arg_ri(insn->arg1, regs)); -- -- ret = __mdiobus_read(xfer->mdio, dev, reg); -+ if (mdio_phy_id_is_c45(__arg_ri(insn->arg0, regs))) -+ ret = __mdiobus_c45_read(xfer->mdio, -+ mdio_phy_id_prtad(__arg_ri(insn->arg0, regs)), -+ mdio_phy_id_devad(__arg_ri(insn->arg0, regs)), -+ __arg_ri(insn->arg1, regs)); -+ else -+ ret = __mdiobus_read(xfer->mdio, -+ __arg_ri(insn->arg0, regs), -+ __arg_ri(insn->arg1, regs)); - if (ret < 0) - goto exit; - *__arg_r(insn->arg2, regs) = ret; -@@ -122,12 +114,17 @@ static int mdio_nl_eval(struct mdio_nl_xfer *xfer) - break; - - case MDIO_NL_OP_WRITE: -- c45_compat_convert(&dev, ®, -- __arg_ri(insn->arg0, regs), -- __arg_ri(insn->arg1, regs)); -- -- ret = __mdiobus_write(xfer->mdio, dev, reg, -- __arg_ri(insn->arg2, regs)); -+ if (mdio_phy_id_is_c45(__arg_ri(insn->arg0, regs))) -+ ret = __mdiobus_c45_write(xfer->mdio, -+ mdio_phy_id_prtad(__arg_ri(insn->arg0, regs)), -+ mdio_phy_id_devad(__arg_ri(insn->arg0, regs)), -+ __arg_ri(insn->arg1, regs), -+ __arg_ri(insn->arg2, regs)); -+ else -+ ret = __mdiobus_write(xfer->mdio, -+ __arg_ri(insn->arg0, regs), -+ __arg_ri(insn->arg1, regs), -+ __arg_ri(insn->arg2, regs)); - if (ret < 0) - goto exit; - ret = 0; diff --git a/openwrt/patch/packages-patches/nat46/102-fix-build-with-kernel-6.18.patch b/openwrt/patch/packages-patches/nat46/102-fix-build-with-kernel-6.18.patch new file mode 100644 index 000000000..ec98eab02 --- /dev/null +++ b/openwrt/patch/packages-patches/nat46/102-fix-build-with-kernel-6.18.patch @@ -0,0 +1,11 @@ +--- a/nat46/modules/nat46-module.c ++++ b/nat46/modules/nat46-module.c +@@ -51,7 +51,7 @@ + #define NAT46_CONTROL_PROC_NAME "control" + + #ifndef NAT46_VERSION +-#define NAT46_VERSION __DATE__ " " __TIME__ ++#define NAT46_VERSION "Unknown Version" + #endif + + MODULE_LICENSE("GPL"); diff --git a/openwrt/patch/packages-patches/ovpn-dco/100-ovpn-dco-adapt-pre-post_doit-CBs-to-new-signature.patch b/openwrt/patch/packages-patches/ovpn-dco/100-ovpn-dco-adapt-pre-post_doit-CBs-to-new-signature.patch deleted file mode 100644 index 374ad42bd..000000000 --- a/openwrt/patch/packages-patches/ovpn-dco/100-ovpn-dco-adapt-pre-post_doit-CBs-to-new-signature.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 95b3011f1ba7719ec9348163f986ead8c57ad997 Mon Sep 17 00:00:00 2001 -From: Antonio Quartulli -Date: Sat, 21 Jan 2023 00:25:40 +0100 -Subject: [PATCH] ovpn-dco: adapt pre/post_doit CBs to new signature - -With linux-6.2.0 the signature of pre/post_doit CBs in the netlink -family structure has been changed. - -Adapt the functions to reflect the new signature. - -Fixes: https://github.com/OpenVPN/ovpn-dco/issues/12 -Signed-off-by: Antonio Quartulli ---- - drivers/net/ovpn-dco/netlink.c | 4 ++-- - linux-compat.h | 6 ++++++ - 2 files changed, 8 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/ovpn-dco/netlink.c b/drivers/net/ovpn-dco/netlink.c -index 1a2932f..e3eb012 100644 ---- a/drivers/net/ovpn-dco/netlink.c -+++ b/drivers/net/ovpn-dco/netlink.c -@@ -148,7 +148,7 @@ ovpn_get_dev_from_attrs(struct net *net, struct nlattr **attrs) - * - * Return: 0 on success or negative error number in case of failure - */ --static int ovpn_pre_doit(const struct genl_ops *ops, struct sk_buff *skb, -+static int ovpn_pre_doit(const struct genl_split_ops *ops, struct sk_buff *skb, - struct genl_info *info) - { - struct net *net = genl_info_net(info); -@@ -169,7 +169,7 @@ static int ovpn_pre_doit(const struct genl_ops *ops, struct sk_buff *skb, - * @skb: Netlink message with request data - * @info: receiver information - */ --static void ovpn_post_doit(const struct genl_ops *ops, struct sk_buff *skb, -+static void ovpn_post_doit(const struct genl_split_ops *ops, struct sk_buff *skb, - struct genl_info *info) - { - struct ovpn_struct *ovpn; -diff --git a/linux-compat.h b/linux-compat.h -index 8aa53f4..c0ee963 100644 ---- a/linux-compat.h -+++ b/linux-compat.h -@@ -22,6 +22,12 @@ - #endif - #endif - -+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 2, 0) -+ -+#define genl_split_ops genl_ops -+ -+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(6, 2, 0) */ -+ - #if LINUX_VERSION_CODE < KERNEL_VERSION(5, 19, 0) - - /** diff --git a/openwrt/patch/packages-patches/ovpn-dco/900-fix-linux-6.6.patch b/openwrt/patch/packages-patches/ovpn-dco/900-fix-linux-6.6.patch deleted file mode 100644 index 8d5457da1..000000000 --- a/openwrt/patch/packages-patches/ovpn-dco/900-fix-linux-6.6.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/drivers/net/ovpn-dco/ovpn.c b/drivers/net/ovpn-dco/ovpn.c -index 66c0191..6cc426a 100644 ---- a/drivers/net/ovpn-dco/ovpn.c -+++ b/drivers/net/ovpn-dco/ovpn.c -@@ -21,6 +21,10 @@ - #include "tcp.h" - #include "udp.h" - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,4,10) -+#include -+#endif -+ - #include - #include - diff --git a/openwrt/patch/packages-patches/ovpn-dco/Makefile b/openwrt/patch/packages-patches/ovpn-dco/Makefile new file mode 100644 index 000000000..d9657b806 --- /dev/null +++ b/openwrt/patch/packages-patches/ovpn-dco/Makefile @@ -0,0 +1,61 @@ +# +# Copyright (C) 2021 Jianhui Zhao +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/kernel.mk + +PKG_NAME:=ovpn-dco +PKG_VERSION:=0.2.20251017 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL=https://codeload.github.com/OpenVPN/ovpn-dco/tar.gz/v$(PKG_VERSION)? +PKG_HASH:=af88c9bc73b350e0cada9aa5b21c5d4b598f9a9868f0b78b2d06026183a67032 + +PKG_MAINTAINER:=Jianhui Zhao +PKG_LICENSE:=GPL-2.0-only + + +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/ovpn-dco-v2 + SUBMENU:=Network Support + TITLE:=OpenVPN data channel offload + DEPENDS:=+kmod-crypto-aead +kmod-udptunnel4 +IPV6:kmod-udptunnel6 + FILES:=$(PKG_BUILD_DIR)/drivers/net/ovpn-dco/ovpn-dco-v2.ko + AUTOLOAD:=$(call AutoLoad,30,ovpn-dco-v2) +endef + +define KernelPackage/ovpn-dco-v2/description + This module enhances the performance of the OpenVPN userspace software + by offloading the data channel processing to kernelspace. +endef + +NOSTDINC_FLAGS += \ + $(KERNEL_NOSTDINC_FLAGS) \ + -I$(PKG_BUILD_DIR)/include \ + -I$(PKG_BUILD_DIR)/compat-include \ + -include $(PKG_BUILD_DIR)/linux-compat.h + +EXTRA_KCONFIG:= \ + CONFIG_OVPN_DCO_V2=m + +PKG_EXTMOD_SUBDIRS = drivers/net/ovpn-dco + +MAKE_OPTS:= \ + $(KERNEL_MAKE_FLAGS) \ + M="$(PKG_BUILD_DIR)/drivers/net/ovpn-dco" \ + NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \ + $(EXTRA_KCONFIG) + +define Build/Compile + $(MAKE) -C "$(LINUX_DIR)" \ + $(MAKE_OPTS) \ + modules +endef + +$(eval $(call KernelPackage,ovpn-dco-v2)) diff --git a/openwrt/patch/packages-patches/rtpengine/901-fix-build-for-linux-6.18.patch b/openwrt/patch/packages-patches/rtpengine/901-fix-build-for-linux-6.18.patch new file mode 100644 index 000000000..40cf0fbe5 --- /dev/null +++ b/openwrt/patch/packages-patches/rtpengine/901-fix-build-for-linux-6.18.patch @@ -0,0 +1,25 @@ +--- a/kernel-module/xt_RTPENGINE.c ++++ b/kernel-module/xt_RTPENGINE.c +@@ -35,11 +35,7 @@ + #include + #include + #include +-#ifndef __RE_EXTERNAL +-#include +-#else + #include "xt_RTPENGINE.h" +-#endif + + #include "rtpengine_config.h" + +--- a/kernel-module/xt_RTPENGINE.h ++++ b/kernel-module/xt_RTPENGINE.h +@@ -1,7 +1,7 @@ + #ifndef XT_RTPPROXY_H + #define XT_RTPPROXY_H + +- ++#define RTPENGINE_VERSION "11.5.1.49" + + #define RTPE_NUM_PAYLOAD_TYPES 32 + #define RTPE_MAX_FORWARD_DESTINATIONS 32 diff --git a/openwrt/patch/packages-patches/ubootenv-nvram/010-fix-build-for-linux-6.18.patch b/openwrt/patch/packages-patches/ubootenv-nvram/010-fix-build-for-linux-6.18.patch new file mode 100644 index 000000000..7fe766af6 --- /dev/null +++ b/openwrt/patch/packages-patches/ubootenv-nvram/010-fix-build-for-linux-6.18.patch @@ -0,0 +1,12 @@ +diff --git a/package/kernel/ubootenv-nvram/src/ubootenv-nvram.c b/package/kernel/ubootenv-nvram/src/ubootenv-nvram.c +index ba1d797..36e3c2d 100644 +--- a/package/kernel/ubootenv-nvram/src/ubootenv-nvram.c ++++ b/package/kernel/ubootenv-nvram/src/ubootenv-nvram.c +@@ -142,7 +142,6 @@ static void ubootenv_remove(struct platform_device *pdev) + + static struct platform_driver ubootenv_driver = { + .probe = ubootenv_probe, +- .remove_new = ubootenv_remove, + .driver = { + .name = NAME, + .of_match_table = of_ubootenv_match, diff --git a/openwrt/patch/packages-patches/v4l2loopback/Makefile b/openwrt/patch/packages-patches/v4l2loopback/Makefile new file mode 100644 index 000000000..19e12749d --- /dev/null +++ b/openwrt/patch/packages-patches/v4l2loopback/Makefile @@ -0,0 +1,50 @@ +# This software is in the public domain, furnished "as is", without technical +# support, and with no warranty, express or implied, as to its usefulness for +# any purpose. + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/kernel.mk + +PKG_NAME:=v4l2loopback +PKG_VERSION:=0.15.3 +PKG_RELEASE:=1 + +PKG_SOURCE:=v4l2loopback-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://codeload.github.com/umlaeute/v4l2loopback/tar.gz/v$(PKG_VERSION)? +PKG_HASH:=2758ea287da8dd34a0421c0dd50094a0342d22414e1bbccbbe92f41bbaa26b2d + +PKG_MAINTAINER:=Michel Promonet +PKG_CPE_ID:=cpe:/o:v4l2loopback_project:v4l2loopback + +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/v4l2loopback + SUBMENU:=Video Support + TITLE:=v4l2loopback kernel module + FILES:=$(PKG_BUILD_DIR)/v4l2loopback.ko + DEPENDS:=+kmod-video-core + AUTOLOAD:=$(call AutoProbe,v4l2loopback) +endef + +define KernelPackage/v4l2loopback/description + This module allows you to create "virtual video devices". + Normal (v4l2) applications will read these devices as if + they were ordinary video devices, but the video will not be + read from e.g. a capture card but instead it is generated + by another application. +endef + +MAKE_OPTS:= \ + ARCH="$(LINUX_KARCH)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + M="$(PKG_BUILD_DIR)" + +define Build/Compile + $(MAKE) -C "$(LINUX_DIR)" \ + $(MAKE_OPTS) \ + CONFIG_PACKAGE_kmod-v4l2loopback=m \ + modules +endef + +$(eval $(call KernelPackage,v4l2loopback)) + diff --git a/openwrt/patch/packages-patches/xr_usb_serial_common/900-fix-linux-6.6.patch b/openwrt/patch/packages-patches/xr_usb_serial_common/900-fix-linux-6.6.patch deleted file mode 100644 index 18a1cae3c..000000000 --- a/openwrt/patch/packages-patches/xr_usb_serial_common/900-fix-linux-6.6.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- a/xr_usb_serial_common-1a/xr_usb_serial_common.c -+++ b/xr_usb_serial_common-1a/xr_usb_serial_common.c -@@ -643,8 +643,13 @@ static void xr_usb_serial_tty_close(stru - tty_port_close(&xr_usb_serial->port, tty, filp); - } - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 2, 0) -+static ssize_t xr_usb_serial_tty_write(struct tty_struct *tty, -+ const unsigned char *buf, size_t count) -+#else - static int xr_usb_serial_tty_write(struct tty_struct *tty, - const unsigned char *buf, int count) -+#endif - { - struct xr_usb_serial *xr_usb_serial = tty->driver_data; - int stat; diff --git a/openwrt/patch/packages-patches_gcc16/elfutils/900-fix-gcc16-null-dereference-with-lto.patch b/openwrt/patch/packages-patches_gcc16/elfutils/900-fix-gcc16-null-dereference-with-lto.patch new file mode 100644 index 000000000..95383f319 --- /dev/null +++ b/openwrt/patch/packages-patches_gcc16/elfutils/900-fix-gcc16-null-dereference-with-lto.patch @@ -0,0 +1,11 @@ +--- a/libelf/elf32_updatenull.c ++++ b/libelf/elf32_updatenull.c +@@ -133,6 +133,8 @@ __elfw2(LIBELFBITS,updatenull_wrlock) (E + int ehdr_flags = 0; + + ehdr = __elfw2(LIBELFBITS,getehdr_wrlock) (elf); ++ if (ehdr == NULL) ++ return -1; + + /* Set the default values. */ + if (ELFW(default_ehdr,LIBELFBITS) (elf, ehdr, shnum, change_bop) != 0) diff --git a/openwrt/patch/packages-patches_gcc16/libwebsockets/900-fix-build-for-gcc-16.patch b/openwrt/patch/packages-patches_gcc16/libwebsockets/900-fix-build-for-gcc-16.patch new file mode 100644 index 000000000..6d99f8e4d --- /dev/null +++ b/openwrt/patch/packages-patches_gcc16/libwebsockets/900-fix-build-for-gcc-16.patch @@ -0,0 +1,29 @@ +--- a/plugins/deaddrop/protocol_lws_deaddrop.c ++++ b/plugins/deaddrop/protocol_lws_deaddrop.c +@@ -135,7 +135,7 @@ scan_upload_dir(struct vhd_deaddrop *vhd + char filepath[256], subdir[3][128], *p; + struct lwsac *lwsac_head = NULL; + lws_list_ptr sorted_head = NULL; +- int i, sp = 0, found = 0; ++ int i, sp = 0; + struct dir_entry *dire; + struct dirent *de; + size_t initial, m; +@@ -224,8 +224,6 @@ scan_upload_dir(struct vhd_deaddrop *vhd + lws_strncpy(dire->user, subdir[1], sizeof(dire->user)); + #endif + +- found++; +- + memcpy(&dire[1], filepath + initial, m); + + lws_list_ptr_insert(&sorted_head, &dire->next, de_mtime_sort); +@@ -244,8 +242,6 @@ scan_upload_dir(struct vhd_deaddrop *vhd + + vhd->filelist_version++; + +- lwsl_info("%s: found %d\n", __func__, found); +- + lws_start_foreach_llp(struct pss_deaddrop **, ppss, vhd->pss_head) { + start_sending_dir(*ppss); + lws_callback_on_writable((*ppss)->wsi); diff --git a/openwrt/patch/pcre/Config.in b/openwrt/patch/pcre/Config.in new file mode 100644 index 000000000..15e75fc75 --- /dev/null +++ b/openwrt/patch/pcre/Config.in @@ -0,0 +1,11 @@ +config PCRE_JIT_ENABLED + bool + depends on PACKAGE_libpcre && (arm || i386 || i686 || x86_64 || mips || mipsel || powerpc || sparc) + default y if (arm || i686 || x86_64) + prompt "Enable JIT compiler support" + help + Enable JIT (Just-In-Time) compiler support. + + Enabling this option can give an about 10x performance increase on JIT operations. It can be desireable for e.g. high performance Apache mod_rewrite or HA-Proxy reqrep operations. + + However, JIT should _only_ be enabled on architectures that are supported. Enabling JIT on unsupported platforms will result in a compilation failure. A list of supported architectures can be found here: https://pcre.org/original/doc/html/pcrejit.html#SEC3 . diff --git a/openwrt/patch/pcre/Makefile b/openwrt/patch/pcre/Makefile new file mode 100644 index 000000000..5309f81d7 --- /dev/null +++ b/openwrt/patch/pcre/Makefile @@ -0,0 +1,129 @@ +# +# Copyright (C) 2006-2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=pcre +PKG_VERSION:=8.45 +PKG_RELEASE:=5 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +PKG_SOURCE_URL:=@SF/$(PKG_NAME) +PKG_HASH:=4dae6fdcd2bb0bb6c37b5f97c33c2be954da743985369cddac3546e3218bffb8 + +PKG_MAINTAINER:=Thomas Heil +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENCE +PKG_CPE_ID:=cpe:/a:pcre:pcre + +PKG_INSTALL:=1 +PKG_BUILD_PARALLEL:=1 + +PKG_CONFIG_DEPENDS:=\ + CONFIG_PACKAGE_libpcrecpp \ + CONFIG_PCRE_JIT_ENABLED + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/host-build.mk + +define Package/libpcre/default + SECTION:=libs + CATEGORY:=Libraries + URL:=https://www.pcre.org/ +endef + +define Package/libpcre/config + source "$(SOURCE)/Config.in" +endef + +define Package/libpcre + $(call Package/libpcre/default) + TITLE:=A Perl Compatible Regular Expression library +endef + +define Package/libpcre16 + $(call Package/libpcre/default) + TITLE:=A Perl Compatible Regular Expression library (16bit support) +endef + +define Package/libpcre32 + $(call Package/libpcre/default) + TITLE:=A Perl Compatible Regular Expression library (32bit support) +endef + +define Package/libpcrecpp + $(call Package/libpcre/default) + TITLE:=C++ wrapper for Perl Compatible Regular Expression library + DEPENDS:=+libpcre +libstdcpp +endef + +HOST_CONFIGURE_ARGS += \ + --disable-shared \ + --enable-utf8 \ + --enable-unicode-properties \ + --enable-pcre16 \ + --with-match-limit-recursion=16000 \ + --enable-cpp \ + --with-pic + +CONFIGURE_ARGS += \ + --enable-utf8 \ + --enable-unicode-properties \ + --enable-pcre16 \ + --enable-pcre32 \ + $(if $(CONFIG_PCRE_JIT_ENABLED),--enable-jit,--disable-jit) \ + --with-match-limit-recursion=16000 \ + --$(if $(CONFIG_PACKAGE_libpcrecpp),en,dis)able-cpp \ + --with-pic + +MAKE_FLAGS += \ + CFLAGS="$(TARGET_CFLAGS)" + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/pcre-config $(1)/usr/bin/ + $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(1)/usr/bin/pcre-config + + $(INSTALL_DIR) $(2)/bin + $(LN) $(STAGING_DIR)/usr/bin/pcre-config $(2)/bin + + $(INSTALL_DIR) $(1)/usr/include + $(CP) $(PKG_INSTALL_DIR)/usr/include/pcre*.h $(1)/usr/include/ + + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre*.{a,so*} $(1)/usr/lib/ + + $(INSTALL_DIR) $(1)/usr/lib/pkgconfig + $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libpcre*.pc $(1)/usr/lib/pkgconfig/ +endef + +define Package/libpcre/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre{,posix}.so.* $(1)/usr/lib/ + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre.so $(1)/usr/lib/ +endef + +define Package/libpcre16/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre16.so* $(1)/usr/lib/ +endef + +define Package/libpcre32/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre32.so* $(1)/usr/lib/ +endef + +define Package/libpcrecpp/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcrecpp.so.* $(1)/usr/lib/ +endef + +$(eval $(call BuildPackage,libpcre)) +$(eval $(call BuildPackage,libpcre16)) +$(eval $(call BuildPackage,libpcre32)) +$(eval $(call BuildPackage,libpcrecpp)) +$(eval $(call HostBuild)) diff --git a/openwrt/patch/sqm-scripts/Makefile b/openwrt/patch/sqm-scripts/Makefile new file mode 100644 index 000000000..f5c6b7299 --- /dev/null +++ b/openwrt/patch/sqm-scripts/Makefile @@ -0,0 +1,45 @@ +# +# Copyright (C) 2014 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=sqm-scripts +PKG_SOURCE_VERSION:=33a89d8e7f6c82acc0adced84cf5cd95447e6bb5 +PKG_VERSION:=1.6.0 +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/tohojo/sqm-scripts +PKG_MIRROR_HASH:=abe04270207177fb3ba4df103ffce3db4037d52d601ce1ce4e75206ad4b21377 + +PKG_MAINTAINER:=Toke Høiland-Jørgensen +PKG_LICENSE:=GPL-2.0-only + +include $(INCLUDE_DIR)/package.mk + +define Package/sqm-scripts + SECTION:=net + CATEGORY:=Base system + DEPENDS:=+tc +kmod-sched-cake +kmod-ifb + TITLE:=SQM Scripts (QoS) + PKGARCH:=all +endef + +define Package/sqm-scripts/description + A set of scripts that does simple SQM configuration. +endef + +define Package/sqm-scripts/conffiles +/etc/config/sqm +/etc/sqm/sqm.conf +endef + +define Package/sqm-scripts/install + make -C $(PKG_BUILD_DIR) DESTDIR=$(1) PLATFORM=openwrt install +endef + +$(eval $(call BuildPackage,sqm-scripts)) diff --git a/openwrt/patch/sqm/001-help-translation.patch b/openwrt/patch/sqm/001-help-translation.patch deleted file mode 100644 index e051dfba8..000000000 --- a/openwrt/patch/sqm/001-help-translation.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff --git a/src/layer_cake.qos.help b/src/layer_cake.qos.help -index 1cab3ed..c75bf8a 100644 ---- a/src/layer_cake.qos.help -+++ b/src/layer_cake.qos.help -@@ -1,4 +1,4 @@ --This uses the cake qdisc as a replacement for both htb as shaper and fq_codel as leaf qdisc. --This exercises cake's diffserv profile(s) as different "layers" of priority. --This script requires that cake is selected as qdisc, and forces its usage. --See: http://www.bufferbloat.net/projects/codel/wiki/Cake for more information -+这个 cake 列队规则使用 HTB 作为过滤器,使用 fq_codel 作为叶列队规则。 -+这个 cake 规则将不同的文件分为不同的“层次”优先级。 -+该脚本需要将该 cake 选为列队规则。 -+请参阅:http://www.bufferbloat.net/projects/codel/wiki/Cake 获取更多信息 -diff --git a/src/piece_of_cake.qos.help b/src/piece_of_cake.qos.help -index b95e9be..8bb0d31 100644 ---- a/src/piece_of_cake.qos.help -+++ b/src/piece_of_cake.qos.help -@@ -1,4 +1,4 @@ --This just uses the cake qdisc as a replacement for both htb as shaper and fq_codel as leaf qdisc. --It just does not come any simpler than this, in other words it truely is a "piece of cake". --This script requires that cake is selected as qdisc, and forces its usage. --See: http://www.bufferbloat.net/projects/codel/wiki/Cake for more information -+这个 cake 列队规则使用 HTB 作为过滤器,使用 fq_codel 作为叶列队规则。 -+它不会比这更简单,换句话说,它真的是“小菜一碟”。 -+该脚本需要将 cake 选为列队规则。 -+请参阅:http://www.bufferbloat.net/projects/codel/wiki/Cake 获取更多信息 -diff --git a/src/simple.qos.help b/src/simple.qos.help -index b3c0096..94a146a 100644 ---- a/src/simple.qos.help -+++ b/src/simple.qos.help -@@ -1 +1 @@ --BW-limited three-tier prioritisation scheme with your qdisc on each queue. (default) -+使用 fq_codel 列队规则在每个列队上进行三层优先级的带宽控制。(默认) -diff --git a/src/simplest.qos.help b/src/simplest.qos.help -index c359256..8b37d9f 100644 ---- a/src/simplest.qos.help -+++ b/src/simplest.qos.help -@@ -1 +1 @@ --Simplest possible configuration: HTB rate limiter with your qdisc attached. -+最简单的配置:使用带有 HTB 过滤器的列队规则来进行速率限制。 -diff --git a/src/simplest_tbf.qos.help b/src/simplest_tbf.qos.help -index 3f93f89..f4936e2 100644 ---- a/src/simplest_tbf.qos.help -+++ b/src/simplest_tbf.qos.help -@@ -1,2 +1 @@ --Simplest possible configuration (TBF): TBF rate limiter with your qdisc attached. --TBF may give better performance than HTB on some architectures. -+最简单的配置(TBF):使用带有 TBF 过滤器的列队规则来进行速率限制。在某些架构上,TBF 可能会比 HTB 提供更好的性能。 diff --git a/openwrt/patch/target-modify_for_aarch64_x86_64.patch b/openwrt/patch/target-modify_for_aarch64_x86_64.patch new file mode 100644 index 000000000..af99426e4 --- /dev/null +++ b/openwrt/patch/target-modify_for_aarch64_x86_64.patch @@ -0,0 +1,26 @@ +--- a/include/target.mk ++++ b/include/target.mk +@@ -215,7 +215,7 @@ LINUX_RECONF_DIFF = $(SCRIPT_DIR)/kconfig.pl - '>' $(call __linux_confcmd,$(filt + ifeq ($(DUMP),1) + BuildTarget=$(BuildTargets/DumpCurrent) + +- CPU_CFLAGS = -Os -pipe ++ CPU_CFLAGS = -O2 -mtune=generic -pipe + ifneq ($(findstring mips,$(ARCH)),) + ifneq ($(findstring mips64,$(ARCH)),) + CPU_TYPE ?= mips64 +@@ -276,6 +276,14 @@ ifeq ($(DUMP),1) + CPU_CFLAGS := -O2 -pipe + CPU_CFLAGS_generic:=-march=loongarch64 + endif ++ ifeq ($(BOARD),armsr) ++ CPU_CFLAGS = -O2 -pipe ++ CPU_CFLAGS_generic = -march=armv8-a+crc+crypto ++ endif ++ ifeq ($(BOARD),rockchip) ++ CPU_CFLAGS = -O2 -Wl,--gc-sections -pipe ++ CPU_CFLAGS_generic = -march=armv8-a+crc+crypto ++ endif + ifneq ($(CPU_TYPE),) + ifndef CPU_CFLAGS_$(CPU_TYPE) + $(warning CPU_TYPE "$(CPU_TYPE)" doesn't correspond to a known type) diff --git a/openwrt/patch/target-modify_for_armsr.patch b/openwrt/patch/target-modify_for_armsr.patch deleted file mode 100644 index 515873ad6..000000000 --- a/openwrt/patch/target-modify_for_armsr.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/include/target.mk b/include/target.mk -index b5e3e7f..396fdf8 100644 ---- a/include/target.mk -+++ b/include/target.mk -@@ -264,6 +264,10 @@ ifeq ($(DUMP),1) - CPU_TYPE ?= riscv64 - CPU_CFLAGS_riscv64:=-mabi=lp64d -march=rv64imafdc - endif -+ ifeq ($(BOARD),armsr) -+ CPU_CFLAGS = -O3 -pipe -+ CPU_CFLAGS_generic = -march=armv8-a+crc+crypto -+ endif - ifneq ($(CPU_TYPE),) - ifndef CPU_CFLAGS_$(CPU_TYPE) - $(warning CPU_TYPE "$(CPU_TYPE)" doesn't correspond to a known type) diff --git a/openwrt/patch/target-modify_for_rockchip.patch b/openwrt/patch/target-modify_for_rockchip.patch deleted file mode 100644 index 938c00062..000000000 --- a/openwrt/patch/target-modify_for_rockchip.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/include/target.mk b/include/target.mk -index b5e3e7f..d655af9 100644 ---- a/include/target.mk -+++ b/include/target.mk -@@ -264,6 +264,10 @@ ifeq ($(DUMP),1) - CPU_TYPE ?= riscv64 - CPU_CFLAGS_riscv64:=-mabi=lp64d -march=rv64imafdc - endif -+ ifeq ($(BOARD),rockchip) -+ CPU_CFLAGS = -O3 -Wl,--gc-sections -pipe -+ CPU_CFLAGS_generic = -march=armv8-a+crc+crypto -+ endif - ifneq ($(CPU_TYPE),) - ifndef CPU_CFLAGS_$(CPU_TYPE) - $(warning CPU_TYPE "$(CPU_TYPE)" doesn't correspond to a known type) diff --git a/openwrt/patch/target-modify_for_x86_64.patch b/openwrt/patch/target-modify_for_x86_64.patch deleted file mode 100644 index f20d8a42b..000000000 --- a/openwrt/patch/target-modify_for_x86_64.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/include/target.mk -+++ b/include/target.mk -@@ -208,7 +208,7 @@ LINUX_RECONF_DIFF = $(SCRIPT_DIR)/kconfig.pl - '>' $(call __linux_confcmd,$(filt - ifeq ($(DUMP),1) - BuildTarget=$(BuildTargets/DumpCurrent) - -- CPU_CFLAGS = -Os -pipe -+ CPU_CFLAGS = -O3 -mtune=generic -pipe - ifneq ($(findstring mips,$(ARCH)),) - ifneq ($(findstring mips64,$(ARCH)),) - CPU_TYPE ?= mips64 diff --git a/openwrt/patch/upx/Makefile b/openwrt/patch/upx/Makefile deleted file mode 100644 index e01375d6d..000000000 --- a/openwrt/patch/upx/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=upx -PKG_VERSION:=4.2.4 - -PKG_SOURCE:=upx-$(PKG_VERSION)-src.tar.xz -PKG_SOURCE_URL:=https://github.com/upx/upx/releases/download/v$(PKG_VERSION)/ -PKG_HASH:=5ed6561607d27fb4ef346fc19f08a93696fa8fa127081e7a7114068306b8e1c4 - -HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)-$(PKG_VERSION)-src -HOST_BUILD_PARALLEL:=1 - -include $(INCLUDE_DIR)/host-build.mk - -define Host/Compile - UPX_UCLDIR=$(STAGING_DIR_HOST) \ - $(MAKE) -C $(HOST_BUILD_DIR)/src \ - LDFLAGS="$(HOST_LDFLAGS)" \ - CXX="$(HOSTCXX)" -endef - -define Host/Install - $(INSTALL_DIR) $(STAGING_DIR_HOST)/bin - $(INSTALL_BIN) $(HOST_BUILD_DIR)/build/release/upx $(STAGING_DIR_HOST)/bin/upx -endef - -define Host/Clean - rm -f $(STAGING_DIR_HOST)/bin/upx -endef - -$(eval $(call HostBuild)) diff --git a/openwrt/patch/util-linux/util-linux_ntfs3.patch b/openwrt/patch/util-linux/util-linux_ntfs3.patch deleted file mode 100644 index 2bfc4be90..000000000 --- a/openwrt/patch/util-linux/util-linux_ntfs3.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/libblkid/src/superblocks/ntfs.c b/libblkid/src/superblocks/ntfs.c -index be2e3d8..3019b10 100644 ---- a/libblkid/src/superblocks/ntfs.c -+++ b/libblkid/src/superblocks/ntfs.c -@@ -238,7 +238,7 @@ int blkid_probe_is_ntfs(blkid_probe pr) - - const struct blkid_idinfo ntfs_idinfo = - { -- .name = "ntfs", -+ .name = "ntfs3", - .usage = BLKID_USAGE_FILESYSTEM, - .probefunc = probe_ntfs, - .magics = -diff --git a/libmount/src/utils.c b/libmount/src/utils.c -index 7481505..587e657 100644 ---- a/libmount/src/utils.c -+++ b/libmount/src/utils.c -@@ -390,7 +390,7 @@ const char *mnt_statfs_get_fstype(struct statfs *vfs) - case STATFS_NCP_MAGIC: return "ncp"; - case STATFS_NFS_MAGIC: return "nfs"; - case STATFS_NILFS_MAGIC: return "nilfs2"; -- case STATFS_NTFS_MAGIC: return "ntfs"; -+ case STATFS_NTFS_MAGIC: return "ntfs3"; - case STATFS_OCFS2_MAGIC: return "ocfs2"; - case STATFS_OMFS_MAGIC: return "omfs"; - case STATFS_OPENPROMFS_MAGIC: return "openpromfs"; diff --git a/openwrt/patch/vim/0001-vim-fix-renamed-defaults-config-file.patch b/openwrt/patch/vim/0001-vim-fix-renamed-defaults-config-file.patch deleted file mode 100644 index ef77c7087..000000000 --- a/openwrt/patch/vim/0001-vim-fix-renamed-defaults-config-file.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 7388298a7c008c1b999ae3f819ad6308738ea733 Mon Sep 17 00:00:00 2001 -From: Leonard de Vries -Date: Thu, 21 Sep 2023 09:40:12 +0200 -Subject: [PATCH] vim: fix renamed defaults config file - -Since vim version 9 the config file has been renamed from vimrc to defaults.vim. -The syntax also has been changed however this new version is not the default, -therefore the config doesn't need a change. - -Signed-off-by: Leonard de Vries ---- - utils/vim/Makefile | 10 +++++----- - utils/vim/files/{vimrc => defaults.vim} | 0 - utils/vim/files/{vimrc.full => defaults.vim.full} | 0 - 3 files changed, 5 insertions(+), 5 deletions(-) - rename utils/vim/files/{vimrc => defaults.vim} (100%) - rename utils/vim/files/{vimrc.full => defaults.vim.full} (100%) - -diff --git a/utils/vim/Makefile b/utils/vim/Makefile -index 125acbf99..59ae674fa 100644 ---- a/utils/vim/Makefile -+++ b/utils/vim/Makefile -@@ -73,12 +73,12 @@ define Package/xxd - endef - - define Package/vim-full/conffiles --/usr/share/vim/vimrc -+/usr/share/vim/defaults.vim - /root/.vimrc - endef - - define Package/vim/conffiles --/usr/share/vim/vimrc -+/usr/share/vim/defaults.vim - /root/.vimrc - endef - -@@ -208,7 +208,7 @@ define Package/vim/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/vim_tiny $(1)/usr/bin/vim - $(INSTALL_DIR) $(1)/usr/share/vim -- $(INSTALL_CONF) ./files/vimrc $(1)/usr/share/vim/ -+ $(INSTALL_CONF) ./files/defaults.vim $(1)/usr/share/vim/ - endef - - define Package/vim-full/install -@@ -216,7 +216,7 @@ define Package/vim-full/install - $(INSTALL_BIN) $(PKG_BUILD_DIR)/vim_normal $(1)/usr/bin/vim - $(INSTALL_DIR) $(1)/usr/share/vim - $(LN) vim $(1)/usr/bin/vimdiff -- $(INSTALL_CONF) ./files/vimrc.full $(1)/usr/share/vim/vimrc -+ $(INSTALL_CONF) ./files/defaults.vim.full $(1)/usr/share/vim/defaults.vim - endef - - -@@ -226,7 +226,7 @@ define Package/vim-fuller/install - $(INSTALL_DIR) $(1)/usr/share/vim - $(LN) vim $(1)/usr/bin/vimdiff - $(CP) $(PKG_INSTALL_DIR)/usr/share/vim/vim$(VIMVER) $(1)/usr/share/vim -- $(INSTALL_CONF) ./files/vimrc.full $(1)/usr/share/vim/vimrc -+ $(INSTALL_CONF) ./files/defaults.vim.full $(1)/usr/share/vim/defaults.vim - endef - - -diff --git a/utils/vim/files/vimrc b/utils/vim/files/defaults.vim -similarity index 100% -rename from utils/vim/files/vimrc -rename to utils/vim/files/defaults.vim -diff --git a/utils/vim/files/vimrc.full b/utils/vim/files/defaults.vim.full -similarity index 100% -rename from utils/vim/files/vimrc.full -rename to utils/vim/files/defaults.vim.full --- -2.43.5 - diff --git a/openwrt/scripts/00-prepare_base.sh b/openwrt/scripts/00-prepare_base.sh index 2685bdf23..3ca14f590 100644 --- a/openwrt/scripts/00-prepare_base.sh +++ b/openwrt/scripts/00-prepare_base.sh @@ -1,57 +1,55 @@ #!/bin/bash -e # Rockchip - rkbin & u-boot -rm -rf package/boot/uboot-rockchip package/boot/arm-trusted-firmware-rockchip -if [ "$platform" = "rk3568" ]; then - git clone https://$github/sbwml/package_boot_uboot-rockchip package/boot/uboot-rockchip - git clone https://$github/sbwml/arm-trusted-firmware-rockchip package/boot/arm-trusted-firmware-rockchip -else +rm -rf package/boot/rkbin package/boot/uboot-rockchip package/boot/arm-trusted-firmware-rockchip +if [ "$platform" = "rk3399" ]; then git clone https://$github/sbwml/package_boot_uboot-rockchip package/boot/uboot-rockchip -b v2023.04 git clone https://$github/sbwml/arm-trusted-firmware-rockchip package/boot/arm-trusted-firmware-rockchip -b 0419 +else + git clone https://$github/sbwml/package_boot_uboot-rockchip package/boot/uboot-rockchip + git clone https://$github/sbwml/arm-trusted-firmware-rockchip package/boot/arm-trusted-firmware-rockchip fi -# BTF: fix failed to validate module -# config/Config-kernel.in patch -curl -s https://$mirror/openwrt/patch/generic/0001-kernel-add-MODULE_ALLOW_BTF_MISMATCH-option.patch | patch -p1 - -# tools: add upx tools -mkdir -p tools/upx -curl -s https://$mirror/openwrt/patch/upx/Makefile > tools/upx/Makefile -sed -i "/tools-y += sstrip/atools-y += upx" tools/Makefile - -# rootfs: upx compression -# include/rootfs.mk -curl -s https://$mirror/openwrt/patch/generic/0002-rootfs-add-upx-compression-support.patch | patch -p1 - -# kernel: Add support for llvm/clang compiler -curl -s https://$mirror/openwrt/patch/generic/0003-kernel-Add-support-for-llvm-clang-compiler.patch | patch -p1 - -# toolchain: Add libquadmath to the toolchain -curl -s https://$mirror/openwrt/patch/generic/0004-libquadmath-Add-libquadmath-to-the-toolchain.patch | patch -p1 - -# rootfs: add r/w (0600) permissions for UCI configuration files -# include/rootfs.mk -curl -s https://$mirror/openwrt/patch/generic/0005-rootfs-add-r-w-permissions-for-UCI-configuration-fil.patch | patch -p1 - -# build: kernel: add out-of-tree kernel config -curl -s https://$mirror/openwrt/patch/generic/0006-build-kernel-add-out-of-tree-kernel-config.patch | patch -p1 - -# rootfs: Add support for local kmod installation sources -curl -s https://$mirror/openwrt/patch/generic/0007-rootfs-Add-support-for-local-kmod-installation-sourc.patch | patch -p1 - -# meson: add platform variable to cross-compilation file -curl -s https://$mirror/openwrt/patch/generic/010-meson-add-platform-variable-to-cross-compilation-file.patch | patch -p1 - -# dwarves: Fix a dwarf type DW_ATE_unsigned_1024 to btf encoding issue -mkdir -p tools/dwarves/patches -curl -s https://$mirror/openwrt/patch/openwrt-6.x/dwarves/100-btf_encoder-Fix-a-dwarf-type-DW_ATE_unsigned_1024-to-btf-encoding-issue.patch > tools/dwarves/patches/100-btf_encoder-Fix-a-dwarf-type-DW_ATE_unsigned_1024-to-btf-encoding-issue.patch - -# x86 - disable intel_pstate & mitigations -sed -i 's/noinitrd/noinitrd intel_pstate=disable mitigations=off/g' target/linux/x86/image/grub-efi.cfg +# lto jobserver +sed -i 's/-flto=auto/-flto=jobserver/g' include/package.mk + +# patch source +curl -s $mirror/openwrt/patch/generic-25.12/0001-tools-add-upx-tools.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0002-rootfs-add-upx-compression-support.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0003-rootfs-add-r-w-permissions-for-UCI-configuration-fil.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0004-rootfs-Add-support-for-local-kmod-installation-sourc.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0005-kernel-Add-support-for-llvm-clang-compiler.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0006-build-kernel-add-out-of-tree-kernel-config.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0007-include-kernel-add-miss-config-for-linux-6.11.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0008-meson-add-platform-variable-to-cross-compilation-fil.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0009-tools-squashfs4-enable-lz4-zstd-compression-support.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0010-kernel-add-PREEMPT_RT-support-for-aarch64-x86_64.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0011-config-include-image-add-support-for-squashfs-zstd-c.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0012-include-kernel-Always-collect-module-symvers.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0013-toolchain-gcc-add-support-for-GCC-16.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0014-tools-mold-update-to-2.41.0.patch | patch -p1 +curl -s $mirror/openwrt/patch/generic-25.12/0015-tools-build-lz4-by-default.patch | patch -p1 + +# add source mirror +#sed -i '/"@OPENWRT": \[/a\\t\t"https://sources-cdn-openwrt.cooluc.com",' scripts/projectsmirrors.json +sed -i '/"@OPENWRT": \[/a\\t\t"https://source.cooluc.com",' scripts/projectsmirrors.json + +# attr no-mold +[ "$ENABLE_MOLD" = "y" ] && sed -i '/PKG_BUILD_PARALLEL/aPKG_BUILD_FLAGS:=no-mold' feeds/packages/utils/attr/Makefile + +# x86 - disable mitigations +sed -i 's/noinitrd/noinitrd mitigations=off/g' target/linux/x86/image/grub-efi.cfg # default LAN IP sed -i "s/192.168.1.1/$LAN/g" package/base-files/files/bin/config_generate +# default password +if [ -n "$ROOT_PASSWORD" ]; then + # sha256 encryption + default_password=$(openssl passwd -5 $ROOT_PASSWORD) + sed -i "s|^root:[^:]*:|root:${default_password}:|" package/base-files/files/etc/shadow +fi + # Use nginx instead of uhttpd if [ "$ENABLE_UHTTPD" != "y" ]; then sed -i 's/+uhttpd /+luci-nginx /g' feeds/luci/collections/luci/Makefile @@ -59,38 +57,52 @@ if [ "$ENABLE_UHTTPD" != "y" ]; then sed -i 's/+uhttpd /+luci-nginx /g' feeds/luci/collections/luci-light/Makefile sed -i "s/+luci /+luci-nginx /g" feeds/luci/collections/luci-ssl-openssl/Makefile sed -i "s/+luci /+luci-nginx /g" feeds/luci/collections/luci-ssl/Makefile - if [ "$version" = "snapshots-23.05" ] || [ "$version" = "rc2" ]; then + if [ "$version" = "dev" ] || [ "$version" = "rc2" ]; then sed -i 's/+uhttpd +uhttpd-mod-ubus /+luci-nginx /g' feeds/packages/net/wg-installer/Makefile sed -i '/uhttpd-mod-ubus/d' feeds/luci/collections/luci-light/Makefile sed -i 's/+luci-nginx \\$/+luci-nginx/' feeds/luci/collections/luci-light/Makefile fi fi -# Realtek driver - R8168 & R8125 & R8126 & R8152 & R8101 +# drop attendedsysupgrade +sed -i '/luci-app-attendedsysupgrade/d' \ + feeds/luci/collections/luci-nginx/Makefile \ + feeds/luci/collections/luci-ssl-openssl/Makefile \ + feeds/luci/collections/luci-ssl/Makefile \ + feeds/luci/collections/luci/Makefile + +# Realtek Ethernet driver - R8168 & R8125 & R8126 & R8152 & R8101 & r8127 +rm -rf package/kernel/{r8168,r8101,r8125,r8126,r8127} git clone https://$github/sbwml/package_kernel_r8168 package/kernel/r8168 git clone https://$github/sbwml/package_kernel_r8152 package/kernel/r8152 git clone https://$github/sbwml/package_kernel_r8101 package/kernel/r8101 git clone https://$github/sbwml/package_kernel_r8125 package/kernel/r8125 git clone https://$github/sbwml/package_kernel_r8126 package/kernel/r8126 +git clone https://$github/sbwml/package_kernel_r8127 package/kernel/r8127 +# Realtek Wireless driver - RTL8822CS & RTL8852AU +git clone https://$github/sbwml/package_kernel_rtl8822cs package/kernel/rtl8822cs +git clone https://$github/sbwml/package_kernel_rtl8852au package/kernel/rtl8852au # GCC Optimization level -O3 -if [ "$platform" = "x86_64" ]; then - curl -s https://$mirror/openwrt/patch/target-modify_for_x86_64.patch | patch -p1 -elif [ "$platform" = "armv8" ]; then - curl -s https://$mirror/openwrt/patch/target-modify_for_armsr.patch | patch -p1 -else - curl -s https://$mirror/openwrt/patch/target-modify_for_rockchip.patch | patch -p1 -fi +curl -s $mirror/openwrt/patch/target-modify_for_aarch64_x86_64.patch | patch -p1 + +# libubox +sed -i '/TARGET_CFLAGS/ s/$/ -O2/' package/libs/libubox/Makefile + +# DPDK & NUMACTL +mkdir -p package/new/{dpdk/patches,numactl} +curl -s $mirror/openwrt/patch/dpdk/dpdk/Makefile > package/new/dpdk/Makefile +curl -s $mirror/openwrt/patch/dpdk/dpdk/Config.in > package/new/dpdk/Config.in +curl -s $mirror/openwrt/patch/dpdk/dpdk/patches/010-dpdk_arm_build_platform_fix.patch > package/new/dpdk/patches/010-dpdk_arm_build_platform_fix.patch +curl -s $mirror/openwrt/patch/dpdk/dpdk/patches/201-r8125-add-r8125-ethernet-poll-mode-driver.patch > package/new/dpdk/patches/201-r8125-add-r8125-ethernet-poll-mode-driver.patch +curl -s $mirror/openwrt/patch/dpdk/numactl/Makefile > package/new/numactl/Makefile # IF USE GLIBC if [ "$ENABLE_GLIBC" = "y" ]; then # musl-libc git clone https://$gitea/sbwml/package_libs_musl-libc package/libs/musl-libc - # bump fstools version - rm -rf package/system/fstools - cp -a ../master/openwrt/package/system/fstools package/system/fstools # glibc-common - curl -s https://$mirror/openwrt/patch/glibc/glibc-common.patch | patch -p1 + curl -s $mirror/openwrt/patch/glibc/glibc-common.patch | patch -p1 # glibc-common - locale data mkdir -p package/libs/toolchain/glibc-locale curl -Lso package/libs/toolchain/glibc-locale/locale-archive https://github.com/sbwml/r4s_build_script/releases/download/locale/locale-archive @@ -102,170 +114,64 @@ if [ "$ENABLE_GLIBC" = "y" ]; then sed -i "/disable-profile/d" toolchain/glibc/common.mk fi -# DPDK & NUMACTL -if [ "$ENABLE_DPDK" = "y" ]; then - mkdir -p package/new/{dpdk/patches,numactl} - curl -s https://$mirror/openwrt/patch/dpdk/dpdk/Makefile > package/new/dpdk/Makefile - curl -s https://$mirror/openwrt/patch/dpdk/dpdk/Config.in > package/new/dpdk/Config.in - curl -s https://$mirror/openwrt/patch/dpdk/dpdk/patches/010-dpdk_arm_build_platform_fix.patch > package/new/dpdk/patches/010-dpdk_arm_build_platform_fix.patch - curl -s https://$mirror/openwrt/patch/dpdk/dpdk/patches/201-r8125-add-r8125-ethernet-poll-mode-driver.patch > package/new/dpdk/patches/201-r8125-add-r8125-ethernet-poll-mode-driver.patch - curl -s https://$mirror/openwrt/patch/dpdk/numactl/Makefile > package/new/numactl/Makefile -fi - -# mold -if [ "$ENABLE_MOLD" = "y" ]; then - curl -s https://$mirror/openwrt/patch/openwrt-6.x/mold/0001-build-add-support-to-use-the-mold-linker-for-package.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/openwrt-6.x/mold/0002-treewide-opt-out-of-tree-wide-mold-usage.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/openwrt-6.x/mold/0003-toolchain-add-mold-as-additional-linker.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/openwrt-6.x/mold/0004-tools-add-mold-a-modern-linker.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/openwrt-6.x/mold/0005-build-replace-SSTRIP_ARGS-with-SSTRIP_DISCARD_TRAILI.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/openwrt-6.x/mold/0006-config-add-a-knob-to-use-the-mold-linker-for-package.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/openwrt-6.x/mold/0007-rules-prepare-to-use-different-linkers.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/openwrt-6.x/mold/0008-tools-mold-update-to-2.30.0.patch | patch -p1 - # no-mold - sed -i '/PKG_BUILD_PARALLEL/aPKG_BUILD_FLAGS:=no-mold' feeds/packages/utils/attr/Makefile -fi - -# Mbedtls AES & GCM Crypto Extensions -if [ ! "$platform" = "x86_64" ]; then - curl -s https://$mirror/openwrt/patch/mbedtls-23.05/200-Implements-AES-and-GCM-with-ARMv8-Crypto-Extensions.patch > package/libs/mbedtls/patches/200-Implements-AES-and-GCM-with-ARMv8-Crypto-Extensions.patch - curl -s https://$mirror/openwrt/patch/mbedtls-23.05/mbedtls.patch | patch -p1 -fi - -# NTFS3 -mkdir -p package/system/fstools/patches -curl -s https://$mirror/openwrt/patch/fstools/ntfs3.patch > package/system/fstools/patches/ntfs3.patch -curl -s https://$mirror/openwrt/patch/util-linux/util-linux_ntfs3.patch > package/utils/util-linux/patches/util-linux_ntfs3.patch - -# fstools - enable any device with non-MTD rootfs_data volume -curl -s https://$mirror/openwrt/patch/fstools/block-mount-add-fstools-depends.patch | patch -p1 -if [ "$ENABLE_GLIBC" = "y" ]; then - curl -s https://$mirror/openwrt/patch/fstools/fstools-set-ntfs3-utf8-new.patch > package/system/fstools/patches/ntfs3-utf8.patch - curl -s https://$mirror/openwrt/patch/fstools/glibc/0001-libblkid-tiny-add-support-for-XFS-superblock.patch > package/system/fstools/patches/0001-libblkid-tiny-add-support-for-XFS-superblock.patch - curl -s https://$mirror/openwrt/patch/fstools/glibc/0003-block-add-xfsck-support.patch > package/system/fstools/patches/0003-block-add-xfsck-support.patch -else - curl -s https://$mirror/openwrt/patch/fstools/fstools-set-ntfs3-utf8-new.patch > package/system/fstools/patches/ntfs3-utf8.patch -fi -if [ "$ENABLE_GLIBC" = "y" ]; then - curl -s https://$mirror/openwrt/patch/fstools/22-fstools-support-extroot-for-non-MTD-rootfs_data-new-version.patch > package/system/fstools/patches/22-fstools-support-extroot-for-non-MTD-rootfs_data.patch -else - curl -s https://$mirror/openwrt/patch/fstools/22-fstools-support-extroot-for-non-MTD-rootfs_data.patch > package/system/fstools/patches/22-fstools-support-extroot-for-non-MTD-rootfs_data.patch -fi +# fstools +rm -rf package/system/fstools +git clone https://$github/sbwml/package_system_fstools -b openwrt-25.12 package/system/fstools +# util-linux +rm -rf package/utils/util-linux +git clone https://$github/sbwml/package_utils_util-linux -b openwrt-25.12 package/utils/util-linux # Shortcut Forwarding Engine git clone https://$gitea/sbwml/shortcut-fe package/new/shortcut-fe # Patch FireWall 4 -if [ "$version" = "snapshots-23.05" ] || [ "$version" = "rc2" ]; then - # firewall4 - master - rm -rf package/network/config/firewall4 - cp -a ../master/openwrt/package/network/config/firewall4 package/network/config/firewall4 +if [ "$version" = "dev" ] || [ "$version" = "rc2" ]; then + # firewall4 mkdir -p package/network/config/firewall4/patches - # fix ct status dnat - curl -s https://$mirror/openwrt/patch/firewall4/firewall4_patches/990-unconditionally-allow-ct-status-dnat.patch > package/network/config/firewall4/patches/990-unconditionally-allow-ct-status-dnat.patch # fullcone - curl -s https://$mirror/openwrt/patch/firewall4/firewall4_patches/999-01-firewall4-add-fullcone-support.patch > package/network/config/firewall4/patches/999-01-firewall4-add-fullcone-support.patch + curl -s $mirror/openwrt/patch/firewall4/firewall4_patches/999-01-firewall4-add-fullcone-support.patch > package/network/config/firewall4/patches/999-01-firewall4-add-fullcone-support.patch # bcm fullcone - curl -s https://$mirror/openwrt/patch/firewall4/firewall4_patches/999-02-firewall4-add-bcm-fullconenat-support.patch > package/network/config/firewall4/patches/999-02-firewall4-add-bcm-fullconenat-support.patch - # kernel version - curl -s https://$mirror/openwrt/patch/firewall4/firewall4_patches/002-fix-fw4.uc-adept-kernel-version-type-of-x.x.patch > package/network/config/firewall4/patches/002-fix-fw4.uc-adept-kernel-version-type-of-x.x.patch + curl -s $mirror/openwrt/patch/firewall4/firewall4_patches/999-02-firewall4-add-bcm-fullconenat-support.patch > package/network/config/firewall4/patches/999-02-firewall4-add-bcm-fullconenat-support.patch # fix flow offload - curl -s https://$mirror/openwrt/patch/firewall4/firewall4_patches/001-fix-fw4-flow-offload.patch > package/network/config/firewall4/patches/001-fix-fw4-flow-offload.patch + curl -s $mirror/openwrt/patch/firewall4/firewall4_patches/001-fix-fw4-flow-offload.patch > package/network/config/firewall4/patches/001-fix-fw4-flow-offload.patch # add custom nft command support - curl -s https://$mirror/openwrt/patch/firewall4/100-openwrt-firewall4-add-custom-nft-command-support.patch | patch -p1 + curl -s $mirror/openwrt/patch/firewall4/100-openwrt-firewall4-add-custom-nft-command-support.patch | patch -p1 + # fw4 - github mirror + sed -i 's|$(PROJECT_GIT)/project|https://github.com/openwrt|g' package/network/config/firewall4/Makefile # libnftnl - rm -rf package/libs/libnftnl - cp -a ../master/openwrt/package/libs/libnftnl package/libs/libnftnl mkdir -p package/libs/libnftnl/patches - curl -s https://$mirror/openwrt/patch/firewall4/libnftnl/001-libnftnl-add-fullcone-expression-support.patch > package/libs/libnftnl/patches/001-libnftnl-add-fullcone-expression-support.patch - curl -s https://$mirror/openwrt/patch/firewall4/libnftnl/002-libnftnl-add-brcm-fullcone-support.patch > package/libs/libnftnl/patches/002-libnftnl-add-brcm-fullcone-support.patch - sed -i '/PKG_INSTALL:=1/iPKG_FIXUP:=autoreconf' package/libs/libnftnl/Makefile + curl -s $mirror/openwrt/patch/firewall4/libnftnl/0001-libnftnl-add-fullcone-expression-support.patch > package/libs/libnftnl/patches/0001-libnftnl-add-fullcone-expression-support.patch + curl -s $mirror/openwrt/patch/firewall4/libnftnl/0002-libnftnl-add-brcm-fullcone-support.patch > package/libs/libnftnl/patches/0002-libnftnl-add-brcm-fullcone-support.patch + # fix build on rhel9 + sed -i '/^PKG_BUILD_FLAGS[[:space:]]*:/aPKG_FIXUP:=autoreconf' package/libs/libnftnl/Makefile # nftables - rm -rf package/network/utils/nftables - cp -a ../master/openwrt/package/network/utils/nftables package/network/utils/nftables mkdir -p package/network/utils/nftables/patches - curl -s https://$mirror/openwrt/patch/firewall4/nftables/002-nftables-add-fullcone-expression-support.patch > package/network/utils/nftables/patches/002-nftables-add-fullcone-expression-support.patch - curl -s https://$mirror/openwrt/patch/firewall4/nftables/003-nftables-add-brcm-fullconenat-support.patch > package/network/utils/nftables/patches/003-nftables-add-brcm-fullconenat-support.patch - # hide nftables warning message - pushd feeds/luci - curl -s https://$mirror/openwrt/patch/luci/luci-nftables.patch | patch -p1 - popd + curl -s $mirror/openwrt/patch/firewall4/nftables/0001-nftables-add-fullcone-expression-support.patch > package/network/utils/nftables/patches/0001-nftables-add-fullcone-expression-support.patch + curl -s $mirror/openwrt/patch/firewall4/nftables/0002-nftables-add-brcm-fullconenat-support.patch > package/network/utils/nftables/patches/0002-nftables-add-brcm-fullconenat-support.patch fi # FullCone module git clone https://$gitea/sbwml/nft-fullcone package/new/nft-fullcone # IPv6 NAT -git clone https://$github/sbwml/packages_new_nat6 package/new/nat6 +git clone https://$github/sbwml/packages_new_nat6 package/new/nat6 -b openwrt-25.12 -# Patch Luci add nft_fullcone/bcm_fullcone & shortcut-fe & ipv6-nat & custom nft command option -pushd feeds/luci - curl -s https://$mirror/openwrt/patch/firewall4/01-luci-app-firewall_add_nft-fullcone-bcm-fullcone_option.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/firewall4/02-luci-app-firewall_add_shortcut-fe.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/firewall4/03-luci-app-firewall_add_ipv6-nat.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/firewall4/04-luci-add-firewall4-nft-rules-file.patch | patch -p1 -popd +# natflow +git clone https://$github/sbwml/package_new_natflow package/new/natflow -# openssl - quictls -if [ "$version" = "rc2" ]; then - rm -rf package/libs/openssl - cp -a ../master/openwrt-23.05/package/libs/openssl package/libs/openssl -fi -pushd package/libs/openssl/patches - curl -sO https://$mirror/openwrt/patch/openssl/quic/0001-QUIC-Add-support-for-BoringSSL-QUIC-APIs.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0002-QUIC-New-method-to-get-QUIC-secret-length.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0003-QUIC-Make-temp-secret-names-less-confusing.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0004-QUIC-Move-QUIC-transport-params-to-encrypted-extensi.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0005-QUIC-Use-proper-secrets-for-handshake.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0006-QUIC-Handle-partial-handshake-messages.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0007-QUIC-Fix-quic_transport-constructors-parsers.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0008-QUIC-Reset-init-state-in-SSL_process_quic_post_hands.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0009-QUIC-Don-t-process-an-incomplete-message.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0010-QUIC-Quick-fix-s2c-to-c2s-for-early-secret.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0011-QUIC-Add-client-early-traffic-secret-storage.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0012-QUIC-Add-OPENSSL_NO_QUIC-wrapper.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0013-QUIC-Correctly-disable-middlebox-compat.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0014-QUIC-Move-QUIC-code-out-of-tls13_change_cipher_state.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0015-QUIC-Tweeks-to-quic_change_cipher_state.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0016-QUIC-Add-support-for-more-secrets.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0017-QUIC-Fix-resumption-secret.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0018-QUIC-Handle-EndOfEarlyData-and-MaxEarlyData.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0019-QUIC-Fall-through-for-0RTT.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0020-QUIC-Some-cleanup-for-the-main-QUIC-changes.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0021-QUIC-Prevent-KeyUpdate-for-QUIC.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0022-QUIC-Test-KeyUpdate-rejection.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0023-QUIC-Buffer-all-provided-quic-data.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0024-QUIC-Enforce-consistent-encryption-level-for-handsha.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0025-QUIC-add-v1-quic_transport_parameters.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0026-QUIC-return-success-when-no-post-handshake-data.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0027-QUIC-__owur-makes-no-sense-for-void-return-values.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0028-QUIC-remove-SSL_R_BAD_DATA_LENGTH-unused.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0029-QUIC-SSLerr-ERR_raise-ERR_LIB_SSL.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0030-QUIC-Add-compile-run-time-checking-for-QUIC.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0031-QUIC-Add-early-data-support.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0032-QUIC-Make-SSL_provide_quic_data-accept-0-length-data.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0033-QUIC-Process-multiple-post-handshake-messages-in-a-s.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0034-QUIC-Fix-CI.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0035-QUIC-Break-up-header-body-processing.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0036-QUIC-Don-t-muck-with-FIPS-checksums.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0037-QUIC-Update-RFC-references.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0038-QUIC-revert-white-space-change.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0039-QUIC-use-SSL_IS_QUIC-in-more-places.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0040-QUIC-Error-when-non-empty-session_id-in-CH.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0041-QUIC-Update-SSL_clear-to-clear-quic-data.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0042-QUIC-Better-SSL_clear.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0043-QUIC-Fix-extension-test.patch - curl -sO https://$mirror/openwrt/patch/openssl/quic/0044-QUIC-Update-metadata-version.patch +# Patch Luci add nft_fullcone/bcm_fullcone & shortcut-fe & natflow & ipv6-nat & custom nft command option +pushd feeds/luci + curl -s $mirror/openwrt/patch/firewall4/luci-25.12/0001-luci-app-firewall-add-nft-fullcone-and-bcm-fullcone-.patch | patch -p1 + curl -s $mirror/openwrt/patch/firewall4/luci-25.12/0002-luci-app-firewall-add-shortcut-fe-option.patch | patch -p1 + curl -s $mirror/openwrt/patch/firewall4/luci-25.12/0003-luci-app-firewall-add-ipv6-nat-option.patch | patch -p1 + curl -s $mirror/openwrt/patch/firewall4/luci-25.12/0004-luci-add-firewall-add-custom-nft-rule-support.patch | patch -p1 + curl -s $mirror/openwrt/patch/firewall4/luci-25.12/0005-luci-app-firewall-add-natflow-offload-support.patch | patch -p1 + curl -s $mirror/openwrt/patch/firewall4/luci-25.12/0006-luci-app-firewall-enable-hardware-offload-only-on-de.patch | patch -p1 + curl -s $mirror/openwrt/patch/firewall4/luci-25.12/0007-luci-app-firewall-add-fullcone6-option-for-nftables-.patch | patch -p1 popd -# openssl hwrng -if [ "$platform" = "rk3399" ] || [ "$platform" = "rk3568" ]; then - sed -i "/-openwrt/iOPENSSL_OPTIONS += enable-ktls '-DDEVRANDOM=\"\\\\\"/dev/hwrng\\\\\"\"\'\n" package/libs/openssl/Makefile -else - sed -i "/-openwrt/iOPENSSL_OPTIONS += enable-ktls '-DDEVRANDOM=\"\\\\\"/dev/urandom\\\\\"\"\'\n" package/libs/openssl/Makefile -fi -# openssl -Ofast -sed -i "s/-O3/-Ofast/g" package/libs/openssl/Makefile +# openssl urandom +sed -i "/-openwrt/iOPENSSL_OPTIONS += enable-ktls '-DDEVRANDOM=\"\\\\\"/dev/urandom\\\\\"\"\'\n" package/libs/openssl/Makefile # openssl - lto if [ "$ENABLE_LTO" = "y" ]; then @@ -287,33 +193,12 @@ git clone https://$github/sbwml/feeds_packages_net_curl feeds/packages/net/curl # Docker rm -rf feeds/luci/applications/luci-app-dockerman -git clone https://$gitea/sbwml/luci-app-dockerman -b openwrt-23.05 feeds/luci/applications/luci-app-dockerman -if [ "$version" = "snapshots-23.05" ] || [ "$version" = "rc2" ]; then - rm -rf feeds/packages/utils/{docker,dockerd,docker-compose,containerd,runc} - git clone https://$github/sbwml/packages_utils_docker feeds/packages/utils/docker - git clone https://$github/sbwml/packages_utils_dockerd feeds/packages/utils/dockerd - git clone https://$github/sbwml/packages_utils_containerd feeds/packages/utils/containerd - git clone https://$github/sbwml/packages_utils_runc feeds/packages/utils/runc - cp -a ../master/packages/utils/docker-compose feeds/packages/utils/docker-compose -fi -sed -i '/sysctl.d/d' feeds/packages/utils/dockerd/Makefile -pushd feeds/packages - curl -s https://$mirror/openwrt/patch/docker/0001-dockerd-fix-bridge-network.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/docker/0002-docker-add-buildkit-experimental-support.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/docker/0003-dockerd-disable-ip6tables-for-bridge-network-by-defa.patch | patch -p1 -popd - -# cgroupfs-mount -# fix unmount hierarchical mount -pushd feeds/packages - curl -s https://$mirror/openwrt/patch/cgroupfs-mount/0001-fix-cgroupfs-mount.patch | patch -p1 -popd -# mount cgroup v2 hierarchy to /sys/fs/cgroup/cgroup2 -mkdir -p feeds/packages/utils/cgroupfs-mount/patches -curl -s https://$mirror/openwrt/patch/cgroupfs-mount/900-mount-cgroup-v2-hierarchy-to-sys-fs-cgroup-cgroup2.patch > feeds/packages/utils/cgroupfs-mount/patches/900-mount-cgroup-v2-hierarchy-to-sys-fs-cgroup-cgroup2.patch -curl -s https://$mirror/openwrt/patch/cgroupfs-mount/901-fix-cgroupfs-umount.patch > feeds/packages/utils/cgroupfs-mount/patches/901-fix-cgroupfs-umount.patch -# docker systemd support -curl -s https://$mirror/openwrt/patch/cgroupfs-mount/902-mount-sys-fs-cgroup-systemd-for-docker-systemd-suppo.patch > feeds/packages/utils/cgroupfs-mount/patches/902-mount-sys-fs-cgroup-systemd-for-docker-systemd-suppo.patch +git clone https://$github/sbwml/luci-app-dockerman -b openwrt-25.12 feeds/luci/applications/luci-app-dockerman +rm -rf feeds/packages/utils/{docker,dockerd,containerd,runc} +git clone https://$github/sbwml/packages_utils_docker feeds/packages/utils/docker +git clone https://$github/sbwml/packages_utils_dockerd feeds/packages/utils/dockerd +git clone https://$github/sbwml/packages_utils_containerd feeds/packages/utils/containerd +git clone https://$github/sbwml/packages_utils_runc feeds/packages/utils/runc # procps-ng - top sed -i 's/enable-skill/enable-skill --disable-modern-top/g' feeds/packages/utils/procps-ng/Makefile @@ -325,51 +210,37 @@ sed -i 's/procd_set_param stdout 1/procd_set_param stdout 0/g' feeds/packages/ut sed -i 's/procd_set_param stderr 1/procd_set_param stderr 0/g' feeds/packages/utils/ttyd/files/ttyd.init # UPnP -rm -rf feeds/packages/net/miniupnpd -git clone https://$gitea/sbwml/miniupnpd feeds/packages/net/miniupnpd -b v2.3.6 -rm -rf feeds/luci/applications/luci-app-upnp -git clone https://$gitea/sbwml/luci-app-upnp feeds/luci/applications/luci-app-upnp -pushd feeds/packages - curl -s https://$mirror/openwrt/patch/miniupnpd/01-set-presentation_url.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/miniupnpd/02-force_forwarding.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/miniupnpd/04-enable-force_forwarding-by-default.patch | patch -p1 -popd - -# UPnP - Move to network -sed -i 's/services/network/g' feeds/luci/applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json - -# nginx-util - fix gcc13 -pushd feeds/packages - curl -s https://$mirror/openwrt/nginx/nginx-util/0001-nginx-util-fix-compilation-with-GCC13.patch | patch -p1 - curl -s https://$mirror/openwrt/nginx/nginx-util/0002-nginx-util-move-to-pcre2.patch | patch -p1 -popd +rm -rf feeds/{packages/net/miniupnpd,luci/applications/luci-app-upnp} +git clone https://$gitea/sbwml/miniupnpd feeds/packages/net/miniupnpd -b v2.3.9 +git clone https://$gitea/sbwml/luci-app-upnp feeds/luci/applications/luci-app-upnp -b openwrt-24.10 # nginx - latest version rm -rf feeds/packages/net/nginx -git clone https://$github/sbwml/feeds_packages_net_nginx feeds/packages/net/nginx -b quic+zstd +git clone https://$github/sbwml/feeds_packages_net_nginx feeds/packages/net/nginx -b openwrt-25.12 sed -i 's/procd_set_param stdout 1/procd_set_param stdout 0/g;s/procd_set_param stderr 1/procd_set_param stderr 0/g' feeds/packages/net/nginx/files/nginx.init # nginx - ubus sed -i 's/ubus_parallel_req 2/ubus_parallel_req 6/g' feeds/packages/net/nginx/files-luci-support/60_nginx-luci-support -sed -i '/ubus_parallel_req/a\ ubus_script_timeout 600;' feeds/packages/net/nginx/files-luci-support/60_nginx-luci-support +sed -i '/ubus_parallel_req/a\ ubus_script_timeout 300;' feeds/packages/net/nginx/files-luci-support/60_nginx-luci-support + +# nginx - config +curl -s $mirror/openwrt/nginx/luci.locations > feeds/packages/net/nginx/files-luci-support/luci.locations +curl -s $mirror/openwrt/nginx/uci.conf.template > feeds/packages/net/nginx-util/files/uci.conf.template -# nginx - uwsgi timeout & enable brotli -curl -s https://$mirror/openwrt/nginx/luci.locations > feeds/packages/net/nginx/files-luci-support/luci.locations -curl -s https://$mirror/openwrt/nginx/uci.conf.template > feeds/packages/net/nginx-util/files/uci.conf.template +# nginx-util +sed -i '/\/etc\/nginx\/uci.conf.template/d' feeds/packages/net/nginx-util/Makefile -# zstd - bump version -rm -rf feeds/packages/utils/zstd -cp -a ../master/packages/utils/zstd feeds/packages/utils/zstd +# netifd +curl -s $mirror/openwrt/patch/netifd/001-hack-packet_steering-for-nanopi-r76s.patch | patch -p1 + +# apk +mkdir -p package/system/apk/patches +curl -s $mirror/openwrt/patch/apk/9000-io_url_wget-disbale-hsts.patch > package/system/apk/patches/9000-io_url_wget-disbale-hsts.patch # opkg mkdir -p package/system/opkg/patches -curl -s https://$mirror/openwrt/patch/opkg/900-opkg-download-disable-hsts.patch > package/system/opkg/patches/900-opkg-download-disable-hsts.patch - -# uwsgi - bump version -if [ "$version" = "snapshots-23.05" ] || [ "$version" = "rc2" ]; then - rm -rf feeds/packages/net/uwsgi - cp -a ../master/packages/net/uwsgi feeds/packages/net/uwsgi -fi +curl -s $mirror/openwrt/patch/opkg/900-opkg-download-disable-hsts.patch > package/system/opkg/patches/900-opkg-download-disable-hsts.patch +curl -s $mirror/openwrt/patch/opkg/901-libopkg-opkg_install-copy-conffiles-to-the-system-co.patch > package/system/opkg/patches/901-libopkg-opkg_install-copy-conffiles-to-the-system-co.patch # uwsgi - fix timeout sed -i '$a cgi-timeout = 600' feeds/packages/net/uwsgi/files-luci-support/luci-*.ini @@ -386,65 +257,59 @@ sed -i 's/cheaper = 1/cheaper = 2/g' feeds/packages/net/uwsgi/files-luci-support sed -i 's/option timeout 30/option timeout 60/g' package/system/rpcd/files/rpcd.config sed -i 's#20) \* 1000#60) \* 1000#g' feeds/luci/modules/luci-base/htdocs/luci-static/resources/rpc.js -# luci - 20_memory & 25_storage & refresh interval +# luci-mod extra pushd feeds/luci - curl -s https://$mirror/openwrt/patch/luci/20_memory.js.patch | patch -p1 - curl -s https://$mirror/openwrt/patch/luci/luci-refresh-interval.patch | patch -p1 - # luci-mod-status: storage index applicable only to valid - curl -s https://$mirror/openwrt/patch/luci/luci-mod-status-storage-index-applicable-only-to-val.patch | patch -p1 + curl -s $mirror/openwrt/patch/luci/0001-luci-mod-system-add-modal-overlay-dialog-to-reboot.patch | patch -p1 + curl -s $mirror/openwrt/patch/luci/0002-luci-mod-status-displays-actual-process-memory-usage.patch | patch -p1 + curl -s $mirror/openwrt/patch/luci/0003-luci-mod-status-storage-index-applicable-only-to-val.patch | patch -p1 + curl -s $mirror/openwrt/patch/luci/0004-luci-mod-status-firewall-disable-legacy-firewall-rul.patch | patch -p1 + curl -s $mirror/openwrt/patch/luci/0005-luci-mod-system-add-refresh-interval-setting.patch | patch -p1 + curl -s $mirror/openwrt/patch/luci/0006-luci-mod-system-mounts-add-docker-directory-mount-po.patch | patch -p1 + curl -s $mirror/openwrt/patch/luci/0007-luci-mod-system-add-ucitrack-luci-mod-system-zram.js.patch | patch -p1 popd # Luci diagnostics.js sed -i "s/openwrt.org/www.qq.com/g" feeds/luci/modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js -# luci - drop ethernet port status -rm -f feeds/luci/modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js - -# luci - rollback dhcp.js -curl -s https://$mirror/openwrt/patch/luci/dhcp/dhcp.js > feeds/luci/modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js - -# luci - disable wireless WPA3 -[ "$platform" = "bcm53xx" ] && sed -i -e '/if (has_ap_sae || has_sta_sae) {/{N;N;N;N;d;}' feeds/luci/modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js - -# ppp - 2.5.0 -rm -rf package/network/services/ppp -git clone https://$github/sbwml/package_network_services_ppp package/network/services/ppp +# luci-compat - remove extra line breaks from description +sed -i '/
/d' feeds/luci/modules/luci-compat/luasrc/view/cbi/full_valuefooter.htm -# odhcpd RFC-9096 -mkdir -p package/network/services/odhcpd/patches -curl -s https://$mirror/openwrt/patch/odhcpd/001-odhcpd-RFC-9096-compliance.patch > package/network/services/odhcpd/patches/001-odhcpd-RFC-9096-compliance.patch +# luci-app-package-manager pushd feeds/luci - curl -s https://$mirror/openwrt/patch/odhcpd/luci-mod-network-add-option-for-ipv6-max-plt-vlt.patch | patch -p1 + curl -s $mirror/openwrt/patch/luci/applications/luci-app-package-manager/0001-luci-app-package-manager-support-installing-uploaded.patch | patch -p1 popd # urngd - 2020-01-21 rm -rf package/system/urngd git clone https://$github/sbwml/package_system_urngd package/system/urngd -# zlib - 1.3 -ZLIB_VERSION=1.3.1 -ZLIB_HASH=38ef96b8dfe510d42707d9c781877914792541133e1870841463bfa73f883e32 -sed -ri "s/(PKG_VERSION:=)[^\"]*/\1$ZLIB_VERSION/;s/(PKG_HASH:=)[^\"]*/\1$ZLIB_HASH/" package/libs/zlib/Makefile - # profile sed -i 's#\\u@\\h:\\w\\\$#\\[\\e[32;1m\\][\\u@\\h\\[\\e[0m\\] \\[\\033[01;34m\\]\\W\\[\\033[00m\\]\\[\\e[32;1m\\]]\\[\\e[0m\\]\\\$#g' package/base-files/files/etc/profile sed -ri 's/(export PATH=")[^"]*/\1%PATH%:\/opt\/bin:\/opt\/sbin:\/opt\/usr\/bin:\/opt\/usr\/sbin/' package/base-files/files/etc/profile -sed -i '/PS1/a\export TERM=xterm-color' package/base-files/files/etc/profile +sed -i '/ENV/i\export TERM=xterm-color' package/base-files/files/etc/profile # bash sed -i 's#ash#bash#g' package/base-files/files/etc/passwd sed -i '\#export ENV=/etc/shinit#a export HISTCONTROL=ignoredups' package/base-files/files/etc/profile mkdir -p files/root -curl -so files/root/.bash_profile https://$mirror/openwrt/files/root/.bash_profile -curl -so files/root/.bashrc https://$mirror/openwrt/files/root/.bashrc +curl -so files/root/.bash_profile $mirror/openwrt/files/root/.bash_profile +curl -so files/root/.bashrc $mirror/openwrt/files/root/.bashrc + +# busybox +sed -i '/profile\.d/d' package/utils/busybox/Makefile # rootfs files mkdir -p files/etc/sysctl.d -curl -so files/etc/sysctl.d/15-vm-swappiness.conf https://$mirror/openwrt/files/etc/sysctl.d/15-vm-swappiness.conf -curl -so files/etc/sysctl.d/16-udp-buffer-size.conf https://$mirror/openwrt/files/etc/sysctl.d/16-udp-buffer-size.conf +curl -so files/etc/sysctl.d/10-default.conf $mirror/openwrt/files/etc/sysctl.d/10-default.conf +curl -so files/etc/sysctl.d/15-vm-swappiness.conf $mirror/openwrt/files/etc/sysctl.d/15-vm-swappiness.conf +curl -so files/etc/sysctl.d/16-udp-buffer-size.conf $mirror/openwrt/files/etc/sysctl.d/16-udp-buffer-size.conf # NTP sed -i 's/0.openwrt.pool.ntp.org/ntp1.aliyun.com/g' package/base-files/files/bin/config_generate sed -i 's/1.openwrt.pool.ntp.org/ntp2.aliyun.com/g' package/base-files/files/bin/config_generate sed -i 's/2.openwrt.pool.ntp.org/time1.cloud.tencent.com/g' package/base-files/files/bin/config_generate sed -i 's/3.openwrt.pool.ntp.org/time2.cloud.tencent.com/g' package/base-files/files/bin/config_generate + +# luci-theme-bootstrap +sed -i 's/font-size: 13px/font-size: 14px/g' feeds/luci/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css +sed -i 's/9.75px/10.75px/g' feeds/luci/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css diff --git a/openwrt/scripts/01-prepare_base-mainline.sh b/openwrt/scripts/01-prepare_base-mainline.sh index c7fdc274f..718070cb7 100644 --- a/openwrt/scripts/01-prepare_base-mainline.sh +++ b/openwrt/scripts/01-prepare_base-mainline.sh @@ -2,214 +2,212 @@ ################################################################# -# Rockchip - target - r4s/r5s only +# autocore +git clone https://$github/sbwml/autocore-arm -b openwrt-25.12 package/system/autocore + +# rockchip - target - r4s/r5s only rm -rf target/linux/rockchip -git clone https://nanopi:nanopi@$gitea/sbwml/target_linux_rockchip-6.x target/linux/rockchip -b linux-6.6 - -# x86_64 - target -curl -s https://$mirror/openwrt/patch/openwrt-6.x/x86/64/config-6.6 > target/linux/x86/64/config-6.6 -curl -s https://$mirror/openwrt/patch/openwrt-6.x/x86/config-6.6 > target/linux/x86/config-6.6 -mkdir -p target/linux/x86/patches-6.6 -curl -s https://$mirror/openwrt/patch/openwrt-6.x/x86/patches-6.6/100-fix_cs5535_clockevt.patch > target/linux/x86/patches-6.6/100-fix_cs5535_clockevt.patch -curl -s https://$mirror/openwrt/patch/openwrt-6.x/x86/patches-6.6/103-pcengines_apu6_platform.patch > target/linux/x86/patches-6.6/103-pcengines_apu6_platform.patch -sed -i '/KERNEL_PATCHVER/a\KERNEL_TESTING_PATCHVER:=6.6' target/linux/x86/Makefile -curl -s https://$mirror/openwrt/patch/openwrt-6.x/x86/base-files/etc/board.d/01_leds > target/linux/x86/base-files/etc/board.d/01_leds -curl -s https://$mirror/openwrt/patch/openwrt-6.x/x86/base-files/etc/board.d/02_network > target/linux/x86/base-files/etc/board.d/02_network - -# bcm53xx - target -rm -rf target/linux/bcm53xx -git clone https://nanopi:nanopi@$gitea/sbwml/target_linux_bcm53xx target/linux/bcm53xx -git clone https://nanopi:nanopi@$gitea/sbwml/brcmfmac-firmware-4366c-pcie package/firmware/brcmfmac-firmware-4366c-pcie -git clone https://nanopi:nanopi@$gitea/sbwml/brcmfmac-firmware-4366b-pcie package/firmware/brcmfmac-firmware-4366b-pcie +if [ "$(whoami)" = "sbwml" ]; then + git clone https://$gitea/sbwml/target_linux_rockchip-6.x target/linux/rockchip -b v6.18 --depth=1 +else + git clone https://"$git_name":"$git_password"@$gitea/sbwml/target_linux_rockchip-6.x target/linux/rockchip -b v6.18 --depth=1 +fi + +# bpf-headers - 6.18 +sed -ri "s/(PKG_PATCHVER:=)[^\"]*/\16.18/" package/kernel/bpf-headers/Makefile +curl -s $mirror/openwrt/patch/packages-patches/bpf-headers/900-fix-build.patch > package/kernel/bpf-headers/patches/900-fix-build.patch + +## x86_64 - target 6.18 +curl -s $mirror/openwrt/patch/openwrt-6.x/x86/64/config-6.18 > target/linux/x86/64/config-6.18 +curl -s $mirror/openwrt/patch/openwrt-6.x/x86/config-6.18 > target/linux/x86/config-6.18 +mkdir -p target/linux/x86/patches-6.18 +curl -s $mirror/openwrt/patch/openwrt-6.x/x86/patches-6.18/100-fix_cs5535_clockevt.patch > target/linux/x86/patches-6.18/100-fix_cs5535_clockevt.patch +curl -s $mirror/openwrt/patch/openwrt-6.x/x86/patches-6.18/103-pcengines_apu6_platform.patch > target/linux/x86/patches-6.18/103-pcengines_apu6_platform.patch +## x86_64 - target +sed -ri "s/(KERNEL_PATCHVER:=)[^\"]*/\16.18/" target/linux/x86/Makefile +sed -i '/KERNEL_PATCHVER/a\KERNEL_TESTING_PATCHVER:=6.12' target/linux/x86/Makefile +curl -s $mirror/openwrt/patch/openwrt-6.x/x86/base-files/etc/board.d/01_leds > target/linux/x86/base-files/etc/board.d/01_leds +curl -s $mirror/openwrt/patch/openwrt-6.x/x86/base-files/etc/board.d/02_network > target/linux/x86/base-files/etc/board.d/02_network # armsr/armv8 rm -rf target/linux/armsr -git clone https://nanopi:nanopi@$gitea/sbwml/target_linux_armsr target/linux/armsr +git clone https://nanopi:nanopi@$gitea/sbwml/target_linux_armsr target/linux/armsr -b v6.18 -# kernel - 6.x -curl -s https://$mirror/tags/kernel-6.6 > include/kernel-6.6 +# kernel - 6.18 +curl -s $mirror/tags/kernel-6.18 > target/linux/generic/kernel-6.18 # kenrel Vermagic sed -ie 's/^\(.\).*vermagic$/\1cp $(TOPDIR)\/.vermagic $(LINUX_DIR)\/.vermagic/' include/kernel-defaults.mk -grep HASH include/kernel-6.6 | awk -F'HASH-' '{print $2}' | awk '{print $1}' | md5sum | awk '{print $1}' > .vermagic +grep HASH target/linux/generic/kernel-6.18 | awk -F'HASH-' '{print $2}' | awk '{print $1}' | md5sum | awk '{print $1}' > .vermagic # kernel generic patches -rm -rf target/linux/generic -kernel_version=$(sed -n 's/^LINUX_KERNEL_HASH-\([0-9.]\+\) = .*/\1/p' include/kernel-6.6) -release_kernel_version=$(curl -sL https://raw.githubusercontent.com/sbwml/r4s_build_script/master/tags/kernel-6.6 | sed -n 's/^LINUX_KERNEL_HASH-\([0-9.]\+\) = .*/\1/p') -if [ "$kernel_version" = "$release_kernel_version" ]; then - git clone https://$github/sbwml/target_linux_generic -b main target/linux/generic --depth=1 +curl -s $mirror/openwrt/patch/kernel-6.18/openwrt/linux-6.18-target-linux-generic.patch | patch -p1 +if [ "$(whoami)" = "sbwml" ]; then + git clone https://$gitea/sbwml/target_linux_generic -b openwrt-25.12 target/linux/generic-6.18 --depth=1 else - if [ "$(whoami)" = "runner" ]; then - git_name=private - git_password="$git_password" - git clone https://"$git_name":"$git_password"@$gitea/sbwml/target_linux_generic -b main target/linux/generic --depth=1 - elif [ "$(whoami)" = "sbwml" ]; then - git clone https://$gitea/sbwml/target_linux_generic -b main target/linux/generic --depth=1 - fi + git clone https://"$git_name":"$git_password"@$gitea/sbwml/target_linux_generic -b openwrt-25.12 target/linux/generic-6.18 --depth=1 fi - -# bcm53xx - fix build kernel with clang -[ "$platform" = "bcm53xx" ] && [ "$KERNEL_CLANG_LTO" = "y" ] && rm -f target/linux/generic/hack-6.6/220-arm-gc_sections.patch +cp -a target/linux/generic-6.18/* target/linux/generic # kernel modules rm -rf package/kernel/linux git checkout package/kernel/linux pushd package/kernel/linux/modules rm -f [a-z]*.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/block.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/can.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/crypto.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/firewire.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/fs.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/gpio-cascade.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/hwmon.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/i2c.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/iio.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/input.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/leds.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/lib.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/multiplexer.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/netdevices.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/netfilter.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/netsupport.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/nls.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/other.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/pcmcia.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/sound.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/spi.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/usb.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/video.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/virt.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/w1.mk - curl -Os https://$mirror/openwrt/patch/openwrt-6.x/modules/wpan.mk - [ "$platform" = "bcm53xx" ] && sed -i 's/tcp-bbr3/tcp-bbr/g' netsupport.mk - [ "$platform" = "bcm53xx" ] && sed -i 's/BBRv3/BBR/g' netsupport.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/block.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/bluetooth.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/can.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/crypto.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/firewire.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/fs.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/gpio.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/hwmon.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/i2c.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/iio.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/input.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/leds.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/lib.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/multiplexer.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/netdevices.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/netfilter.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/netsupport.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/nls.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/other.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/pcmcia.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/rtc.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/sound.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/spi.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/usb.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/video.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/virt.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/w1.mk + curl -Os $mirror/openwrt/patch/openwrt-6.x/modules/wpan.mk popd -# BBRv3 - linux-6.6 -if [ "$platform" != "bcm53xx" ]; then - pushd target/linux/generic/backport-6.6 - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0001-net-tcp_bbr-broaden-app-limited-rate-sample-detectio.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0002-net-tcp_bbr-v2-shrink-delivered_mstamp-first_tx_msta.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0003-net-tcp_bbr-v2-snapshot-packets-in-flight-at-transmi.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0004-net-tcp_bbr-v2-count-packets-lost-over-TCP-rate-samp.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0005-net-tcp_bbr-v2-export-FLAG_ECE-in-rate_sample.is_ece.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0006-net-tcp_bbr-v2-introduce-ca_ops-skb_marked_lost-CC-m.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0007-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-merge-in.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0008-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-split-in.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0009-net-tcp-add-new-ca-opts-flag-TCP_CONG_WANTS_CE_EVENT.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0010-net-tcp-re-generalize-TSO-sizing-in-TCP-CC-module-AP.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0011-net-tcp-add-fast_ack_mode-1-skip-rwin-check-in-tcp_f.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0012-net-tcp_bbr-v2-record-app-limited-status-of-TLP-repa.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0013-net-tcp_bbr-v2-inform-CC-module-of-losses-repaired-b.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0014-net-tcp_bbr-v2-introduce-is_acking_tlp_retrans_seq-i.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0015-tcp-introduce-per-route-feature-RTAX_FEATURE_ECN_LOW.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0016-net-tcp_bbr-v3-update-TCP-bbr-congestion-control-mod.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0017-net-tcp_bbr-v3-ensure-ECN-enabled-BBR-flows-set-ECT-.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/bbr3_6.6/010-bbr3-0018-tcp-export-TCPI_OPT_ECN_LOW-in-tcp_info-tcpi_options.patch - popd -fi +# BBRv3 - linux-6.18 +pushd target/linux/generic/backport-6.18 + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0001-net-tcp_bbr-broaden-app-limited-rate-sample-detectio.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0002-net-tcp_bbr-v2-shrink-delivered_mstamp-first_tx_msta.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0003-net-tcp_bbr-v2-snapshot-packets-in-flight-at-transmi.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0004-net-tcp_bbr-v2-count-packets-lost-over-TCP-rate-samp.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0005-net-tcp_bbr-v2-export-FLAG_ECE-in-rate_sample.is_ece.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0006-net-tcp_bbr-v2-introduce-ca_ops-skb_marked_lost-CC-m.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0007-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-merge-in.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0008-net-tcp_bbr-v2-adjust-skb-tx.in_flight-upon-split-in.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0009-net-tcp-add-new-ca-opts-flag-TCP_CONG_WANTS_CE_EVENT.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0010-net-tcp-re-generalize-TSO-sizing-in-TCP-CC-module-AP.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0011-net-tcp-add-fast_ack_mode-1-skip-rwin-check-in-tcp_f.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0012-net-tcp_bbr-v2-record-app-limited-status-of-TLP-repa.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0013-net-tcp_bbr-v2-inform-CC-module-of-losses-repaired-b.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0014-net-tcp_bbr-v2-introduce-is_acking_tlp_retrans_seq-i.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0015-tcp-introduce-per-route-feature-RTAX_FEATURE_ECN_LOW.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0016-net-tcp_bbr-v3-update-TCP-bbr-congestion-control-mod.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0017-net-tcp_bbr-v3-ensure-ECN-enabled-BBR-flows-set-ECT-.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0018-tcp-export-TCPI_OPT_ECN_LOW-in-tcp_info-tcpi_options.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0019-x86-cfi-bpf-Add-tso_segs-and-skb_marked_lost-to-bpf_.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/bbr3/010-bbr3-0020-net-tcp_bbr-v3-silence-Wconstant-logical-operand.patch +popd + +# LRNG - 6.18 +pushd target/linux/generic/hack-6.18 + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0001-LRNG-Entropy-Source-and-DRNG-Manager.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0002-LRNG-allocate-one-DRNG-instance-per-NUMA-node.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0003-LRNG-proc-interface.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0004-LRNG-add-switchable-DRNG-support.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0005-LRNG-add-common-generic-hash-support.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0006-crypto-DRBG-externalize-DRBG-functions-for-LRNG.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0007-LRNG-add-SP800-90A-DRBG-extension.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0008-LRNG-add-kernel-crypto-API-PRNG-extension.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0009-LRNG-add-atomic-DRNG-implementation.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0010-LRNG-add-common-timer-based-entropy-source-code.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0011-LRNG-add-interrupt-entropy-source.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0012-scheduler-add-entropy-sampling-hook.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0013-LRNG-add-scheduler-based-entropy-source.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0014-LRNG-add-SP800-90B-compliant-health-tests.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0015-LRNG-add-random.c-entropy-source-support.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0016-LRNG-CPU-entropy-source.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0017-LRNG-add-Jitter-RNG-fast-noise-source.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0018-LRNG-add-option-to-enable-runtime-entropy-rate-confi.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0019-LRNG-add-interface-for-gathering-of-raw-entropy.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0020-LRNG-add-power-on-and-runtime-self-tests.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0021-LRNG-sysctls-and-proc-interface.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0022-LRMG-add-drop-in-replacement-random-4-API.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0023-LRNG-add-kernel-crypto-API-interface.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0024-LRNG-add-dev-lrng-device-file-support.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/lrng/011-LRNG-0025-LRNG-add-hwrand-framework-interface.patch +popd -# LRNG v54 - linux-6.6 -pushd target/linux/generic/hack-6.6 - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0001-LRNG-Entropy-Source-and-DRNG-Manager.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0002-LRNG-allocate-one-DRNG-instance-per-NUMA-node.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0003-LRNG-proc-interface.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0004-LRNG-add-switchable-DRNG-support.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0005-LRNG-add-common-generic-hash-support.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0006-crypto-DRBG-externalize-DRBG-functions-for-LRNG.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0007-LRNG-add-SP800-90A-DRBG-extension.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0008-LRNG-add-kernel-crypto-API-PRNG-extension.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0009-LRNG-add-atomic-DRNG-implementation.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0010-LRNG-add-common-timer-based-entropy-source-code.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0011-LRNG-add-interrupt-entropy-source.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0012-scheduler-add-entropy-sampling-hook.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0013-LRNG-add-scheduler-based-entropy-source.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0014-LRNG-add-SP800-90B-compliant-health-tests.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0015-LRNG-add-random.c-entropy-source-support.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0016-LRNG-CPU-entropy-source.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0017-LRNG-add-Jitter-RNG-fast-noise-source.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0018-LRNG-add-option-to-enable-runtime-entropy-rate-confi.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0019-LRNG-add-interface-for-gathering-of-raw-entropy.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0020-LRNG-add-power-on-and-runtime-self-tests.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0021-LRNG-sysctls-and-proc-interface.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0022-LRMG-add-drop-in-replacement-random-4-API.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0023-LRNG-add-kernel-crypto-API-interface.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0024-LRNG-add-dev-lrng-device-file-support.patch - curl -Os https://$mirror/openwrt/patch/kernel-6.6/lrng/011-LRNG-0025-LRNG-add-hwrand-framework-interface.patch +# linux-rt - i915 +pushd target/linux/generic/hack-6.18 + curl -Os $mirror/openwrt/patch/kernel-6.18/linux-rt/012-RT-0001-drm-i915-Use-preempt_disable-enable_rt-where-recomme.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/linux-rt/012-RT-0002-drm-i915-Don-t-disable-interrupts-on-PREEMPT_RT-duri.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/linux-rt/012-RT-0003-drm-i915-Disable-tracing-points-on-PREEMPT_RT.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/linux-rt/012-RT-0004-drm-i915-gt-Use-spin_lock_irq-instead-of-local_irq_d.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/linux-rt/012-RT-0005-drm-i915-Drop-the-irqs_disabled-check.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/linux-rt/012-RT-0006-drm-i915-guc-Consider-also-RCU-depth-in-busy-loop.patch + curl -Os $mirror/openwrt/patch/kernel-6.18/linux-rt/012-RT-0007-Revert-drm-i915-Depend-on-PREEMPT_RT.patch popd -# linux-firmware: rtw89 / rtl8723d / rtl8821c /i915 firmware +# linux-firmware rm -rf package/firmware/linux-firmware git clone https://$github/sbwml/package_firmware_linux-firmware package/firmware/linux-firmware -# rtl8812au-ct - fix linux-6.6 -rm -rf package/kernel/rtl8812au-ct -git clone https://$github/sbwml/package_kernel_rtl8812au-ct package/kernel/rtl8812au-ct - -# add rtl8812au-ac -git clone https://$github/sbwml/package_kernel_rtl8812au-ac package/kernel/rtl8812au-ac - -# mt76 - 2024-05-17 -rm -rf package/kernel/mt76/patches -curl -s https://$mirror/openwrt/patch/mt76/Makefile > package/kernel/mt76/Makefile - -# iwinfo: add mt7922 device id -mkdir -p package/network/utils/iwinfo/patches -curl -s https://$mirror/openwrt/patch/openwrt-6.x/iwinfo/0001-devices-add-MediaTek-MT7922-device-id.patch > package/network/utils/iwinfo/patches/0001-devices-add-MediaTek-MT7922-device-id.patch - -# iwinfo: add rtl8812/14/21au devices -curl -s https://$mirror/openwrt/patch/openwrt-6.x/iwinfo/0004-add-rtl8812au-devices.patch > package/network/utils/iwinfo/patches/0004-add-rtl8812au-devices.patch +# mt76 +rm -rf package/kernel/mt76 +mkdir -p package/kernel/mt76/patches package/kernel/mt76/src/firmware/mt7927 +curl -s $mirror/openwrt/patch/mt76/Makefile > package/kernel/mt76/Makefile +pushd package/kernel/mt76/patches + curl -Os $mirror/openwrt/patch/mt76/patches/003-pass-LED-define-via-ccflags-y.patch + curl -Os $mirror/openwrt/patch/mt76/patches/100-fix-build-with-linux-6.12rc2.patch + curl -Os $mirror/openwrt/patch/mt76/patches/102-use-hrtimer_setup-in-mt76x02u-beacon-init.patch + curl -Os $mirror/openwrt/patch/mt76/patches/201-mt76-mt7925-fix-stale-pointer-comparisons-in-change_.patch + curl -Os $mirror/openwrt/patch/mt76/patches/202-mt76-mt7925-add-320MHz-bandwidth-to-bss_rlm_tlv.patch + curl -Os $mirror/openwrt/patch/mt76/patches/203-mt76-mt7925-handle-320MHz-bandwidth-in-RXV-and-TXS.patch + curl -Os $mirror/openwrt/patch/mt76/patches/204-mt76-mt7925-populate-EHT-320MHz-MCS-map-in-sta_rec.patch + curl -Os $mirror/openwrt/patch/mt76/patches/205-mt76-mt7925-advertise-EHT-320MHz-capabilities-for-6G.patch + curl -Os $mirror/openwrt/patch/mt76/patches/206-mt76-mt7925-add-MT7927-chip-ID-helpers.patch + curl -Os $mirror/openwrt/patch/mt76/patches/207-mt76-mt7925-add-MT7927-firmware-paths.patch + curl -Os $mirror/openwrt/patch/mt76/patches/208-mt76-mt7925-use-irq_map-for-chip-specific-interrupt-.patch + curl -Os $mirror/openwrt/patch/mt76/patches/209-mt76-mt7925-disable-ASPM-and-runtime-PM-for-MT7927.patch +popd +pushd package/kernel/mt76/src/firmware/mt7927 + curl -Os $mirror/openwrt/patch/mt76/src/firmware/mt7927/WIFI_MT6639_PATCH_MCU_2_1_hdr.bin + curl -Os $mirror/openwrt/patch/mt76/src/firmware/mt7927/WIFI_RAM_CODE_MT6639_2_1.bin +popd # wireless-regdb -rm -rf package/firmware/wireless-regdb -cp -a ../master/openwrt/package/firmware/wireless-regdb package/firmware/wireless-regdb -curl -s https://$mirror/openwrt/patch/openwrt-6.x/500-world-regd-5GHz.patch > package/firmware/wireless-regdb/patches/500-world-regd-5GHz.patch +curl -s $mirror/openwrt/patch/openwrt-6.x/500-world-regd-5GHz.patch > package/firmware/wireless-regdb/patches/500-world-regd-5GHz.patch -# mac80211 - fix linux 6.6 & add rtw89 +# mac80211 - linux 7.x rm -rf package/kernel/mac80211 -git clone https://$github/sbwml/package_kernel_mac80211 package/kernel/mac80211 -b v6.9.9 +git clone https://$github/sbwml/package_kernel_mac80211 package/kernel/mac80211 -b v7.0.5 # ath10k-ct rm -rf package/kernel/ath10k-ct -git clone https://$github/sbwml/package_kernel_ath10k-ct package/kernel/ath10k-ct +git clone https://$github/sbwml/package_kernel_ath10k-ct package/kernel/ath10k-ct -b v6.18 # kernel patch # btf: silence btf module warning messages -curl -s https://$mirror/openwrt/patch/kernel-6.6/btf/990-btf-silence-btf-module-warning-messages.patch > target/linux/generic/hack-6.6/990-btf-silence-btf-module-warning-messages.patch +curl -s $mirror/openwrt/patch/kernel-6.18/btf/990-btf-silence-btf-module-warning-messages.patch > target/linux/generic/hack-6.18/990-btf-silence-btf-module-warning-messages.patch # cpu model -curl -s https://$mirror/openwrt/patch/kernel-6.6/arm64/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch > target/linux/generic/pending-6.6/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch -# fullcone -curl -s https://$mirror/openwrt/patch/kernel-6.6/net/952-net-conntrack-events-support-multiple-registrant.patch > target/linux/generic/hack-6.6/952-net-conntrack-events-support-multiple-registrant.patch +curl -s $mirror/openwrt/patch/kernel-6.18/arm64/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch > target/linux/generic/hack-6.18/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch # bcm-fullcone -curl -s https://$mirror/openwrt/patch/kernel-6.6/net/982-add-bcm-fullcone-support.patch > target/linux/generic/hack-6.6/982-add-bcm-fullcone-support.patch -curl -s https://$mirror/openwrt/patch/kernel-6.6/net/983-add-bcm-fullcone-nft_masq-support.patch > target/linux/generic/hack-6.6/983-add-bcm-fullcone-nft_masq-support.patch +curl -s $mirror/openwrt/patch/kernel-6.18/net/982-add-bcm-fullcone-support.patch > target/linux/generic/hack-6.18/982-add-bcm-fullcone-support.patch +curl -s $mirror/openwrt/patch/kernel-6.18/net/983-add-bcm-fullcone-nft_masq-support.patch > target/linux/generic/hack-6.18/983-add-bcm-fullcone-nft_masq-support.patch # shortcut-fe -curl -s https://$mirror/openwrt/patch/kernel-6.6/net/601-netfilter-export-udp_get_timeouts-function.patch > target/linux/generic/hack-6.6/601-netfilter-export-udp_get_timeouts-function.patch -curl -s https://$mirror/openwrt/patch/kernel-6.6/net/953-net-patch-linux-kernel-to-support-shortcut-fe.patch > target/linux/generic/hack-6.6/953-net-patch-linux-kernel-to-support-shortcut-fe.patch -# backport - 6.8 fast-path-variables -if [ "$platform" != "bcm53xx" ]; then - curl -s https://$mirror/openwrt/patch/kernel-6.6/backport/901-v6.8-cache-enforce-cache-groups.patch > target/linux/generic/backport-6.6/901-v6.8-cache-enforce-cache-groups.patch - curl -s https://$mirror/openwrt/patch/kernel-6.6/backport/902-v6.8-netns-ipv4-reorganize-netns_ipv4-fast-path-variables.patch > target/linux/generic/backport-6.6/902-v6.8-netns-ipv4-reorganize-netns_ipv4-fast-path-variables.patch - curl -s https://$mirror/openwrt/patch/kernel-6.6/backport/903-v6.8-net-device-reorganize-net_device-fast-path-variables.patch > target/linux/generic/backport-6.6/903-v6.8-net-device-reorganize-net_device-fast-path-variables.patch - curl -s https://$mirror/openwrt/patch/kernel-6.6/backport/904-v6.8-tcp-reorganize-tcp_sock-fast-path-variables.patch > target/linux/generic/backport-6.6/904-v6.8-tcp-reorganize-tcp_sock-fast-path-variables.patch - curl -s https://$mirror/openwrt/patch/kernel-6.6/backport/905-v6.8-tcp-move-tp-scaling_ratio-to-tcp_sock_read_txrx-grou.patch > target/linux/generic/backport-6.6/905-v6.8-tcp-move-tp-scaling_ratio-to-tcp_sock_read_txrx-grou.patch -fi - -# ubnt-ledbar - fix linux-6.x -rm -rf package/kernel/ubnt-ledbar -cp -a ../master/openwrt/package/kernel/ubnt-ledbar package/kernel/ubnt-ledbar +curl -s $mirror/openwrt/patch/kernel-6.18/net/601-netfilter-export-udp_get_timeouts-function.patch > target/linux/generic/hack-6.18/601-netfilter-export-udp_get_timeouts-function.patch +curl -s $mirror/openwrt/patch/kernel-6.18/net/952-net-conntrack-events-support-multiple-registrant.patch > target/linux/generic/hack-6.18/952-net-conntrack-events-support-multiple-registrant.patch +curl -s $mirror/openwrt/patch/kernel-6.18/net/953-net-patch-linux-kernel-to-support-shortcut-fe.patch > target/linux/generic/hack-6.18/953-net-patch-linux-kernel-to-support-shortcut-fe.patch # RTC -if [ "$platform" = "rk3399" ] || [ "$platform" = "rk3568" ]; then - curl -s https://$mirror/openwrt/patch/rtc/sysfixtime > package/base-files/files/etc/init.d/sysfixtime +if [ "$platform" = "rk3399" ] || [ "$platform" = "rk3568" ] || [ "$platform" = "rk3576" ]; then + curl -s $mirror/openwrt/patch/rtc/sysfixtime > package/base-files/files/etc/init.d/sysfixtime chmod 755 package/base-files/files/etc/init.d/sysfixtime fi # emmc-install -if [ "$platform" = "rk3568" ]; then +if [ "$platform" = "rk3568" ] || [ "$platform" = "rk3576" ]; then mkdir -p files/sbin - curl -so files/sbin/emmc-install https://$mirror/openwrt/files/sbin/emmc-install + curl -so files/sbin/emmc-install $mirror/openwrt/files/sbin/emmc-install chmod 755 files/sbin/emmc-install fi diff --git a/openwrt/scripts/02-prepare_package.sh b/openwrt/scripts/02-prepare_package.sh index e78a0cf92..1735e93a4 100644 --- a/openwrt/scripts/02-prepare_package.sh +++ b/openwrt/scripts/02-prepare_package.sh @@ -1,42 +1,66 @@ #!/bin/bash -e -# golang 1.23 +# golang 1.26 rm -rf feeds/packages/lang/golang -git clone https://$github/sbwml/packages_lang_golang -b 23.x feeds/packages/lang/golang +git clone https://$github/sbwml/packages_lang_golang -b 26.x feeds/packages/lang/golang + +# rust +rm -rf feeds/packages/lang/rust +git clone https://$github/sbwml/packages_lang_rust feeds/packages/lang/rust # node - prebuilt rm -rf feeds/packages/lang/node -git clone https://$github/sbwml/feeds_packages_lang_node-prebuilt feeds/packages/lang/node +git clone https://$github/sbwml/feeds_packages_lang_node feeds/packages/lang/node -b packages-25.12 + +# default settings +git clone https://$github/sbwml/default-settings package/new/default-settings -b openwrt-25.12 + +# wwan +git clone https://$github/sbwml/wwan-packages package/new/wwan --depth=1 + +# bluetooth +git clone https://$github/sbwml/luci-app-bluetooth package/new/luci-app-bluetooth +git clone https://$github/sbwml/package_new_bluez-alsa package/new/bluez-alsa + +# bandix +git clone https://$github/timsaya/openwrt-bandix package/new/bandix --depth=1 +git clone https://$github/timsaya/luci-app-bandix package/new/luci-app-bandix --depth=1 + +# luci-app-diskman +git clone https://$github/sbwml/luci-app-diskman package/new/diskman --depth=1 + +# istore +git clone https://$github/sbwml/package_new_istore package/new/istore --depth=1 + +# luci-app-filemanager +rm -rf feeds/luci/applications/luci-app-filemanager +git clone https://$github/sbwml/luci-app-filemanager package/new/luci-app-filemanager + +# luci-app-quickfile +git clone https://$github/sbwml/luci-app-quickfile package/new/quickfile + +# luci-app-airplay2 +git clone https://$github/sbwml/luci-app-airplay2 package/new/airplay2 -# Default settings -git clone https://$github/sbwml/default-settings package/new/default-settings +# luci-app-webdav +git clone https://$github/sbwml/luci-app-webdav package/new/luci-app-webdav -# DDNS +# ddns - fix boot sed -i '/boot()/,+2d' feeds/packages/net/ddns-scripts/files/etc/init.d/ddns # nlbwmon - disable syslog sed -i 's/stderr 1/stderr 0/g' feeds/packages/net/nlbwmon/files/nlbwmon.init -# boost - 1.84.0 -rm -rf feeds/packages/libs/boost -cp -a ../master/packages/libs/boost feeds/packages/libs/boost +# pcre - 8.45 +mkdir -p package/libs/pcre +curl -s $mirror/openwrt/patch/pcre/Makefile > package/libs/pcre/Makefile +curl -s $mirror/openwrt/patch/pcre/Config.in > package/libs/pcre/Config.in # lrzsz - 0.12.20 rm -rf feeds/packages/utils/lrzsz git clone https://$github/sbwml/packages_utils_lrzsz package/new/lrzsz -# irqbalance - openwrt master -rm -rf feeds/packages/utils/irqbalance -cp -a ../master/packages/utils/irqbalance feeds/packages/utils/irqbalance -# irqbalance: disable build with numa -if [ "$ENABLE_DPDK" = "y" ]; then - curl -s https://$mirror/openwrt/patch/irqbalance/011-meson-numa.patch > feeds/packages/utils/irqbalance/patches/011-meson-numa.patch - sed -i '/-Dcapng=disabled/i\\t-Dnuma=disabled \\' feeds/packages/utils/irqbalance/Makefile -fi - -# FRPC -rm -rf feeds/packages/net/frp -cp -a ../master/packages/net/frp feeds/packages/net/frp +# frpc sed -i 's/procd_set_param stdout $stdout/procd_set_param stdout 0/g' feeds/packages/net/frp/files/frpc.init sed -i 's/procd_set_param stderr $stderr/procd_set_param stderr 0/g' feeds/packages/net/frp/files/frpc.init sed -i 's/stdout stderr //g' feeds/packages/net/frp/files/frpc.init @@ -46,12 +70,18 @@ sed -i 's/env conf_inc/env conf_inc enable/g' feeds/packages/net/frp/files/frpc. sed -i "s/'conf_inc:list(string)'/& \\\\/" feeds/packages/net/frp/files/frpc.init sed -i "/conf_inc:list/a\\\t\t\'enable:bool:0\'" feeds/packages/net/frp/files/frpc.init sed -i '/procd_open_instance/i\\t\[ "$enable" -ne 1 \] \&\& return 1\n' feeds/packages/net/frp/files/frpc.init -curl -s https://$mirror/openwrt/patch/luci/applications/001-luci-app-frpc-hide-token.patch | patch -p1 -curl -s https://$mirror/openwrt/patch/luci/applications/002-luci-app-frpc-add-enable-flag.patch | patch -p1 +curl -s $mirror/openwrt/patch/luci/applications/luci-app-frpc/001-luci-app-frpc-hide-token.patch | patch -p1 +curl -s $mirror/openwrt/patch/luci/applications/luci-app-frpc/002-luci-app-frpc-add-enable-flag.patch | patch -p1 + +# natmap +sed -i 's/log_stdout:bool:1/log_stdout:bool:0/g;s/log_stderr:bool:1/log_stderr:bool:0/g' feeds/packages/net/natmap/files/natmap.init +pushd feeds/luci + curl -s $mirror/openwrt/patch/luci/applications/luci-app-natmap/0001-luci-app-natmap-add-default-STUN-server-lists.patch | patch -p1 +popd # samba4 - bump version -rm -rf feeds/packages/net/samba4 -git clone https://$github/sbwml/feeds_packages_net_samba4 feeds/packages/net/samba4 +#rm -rf feeds/packages/net/samba4 +#git clone https://$github/sbwml/feeds_packages_net_samba4 feeds/packages/net/samba4 # enable multi-channel sed -i '/workgroup/a \\n\t## enable multi-channel' feeds/packages/net/samba4/files/smb.conf.template sed -i '/enable multi-channel/a \\tserver multi channel support = yes' feeds/packages/net/samba4/files/smb.conf.template @@ -68,65 +98,50 @@ sed -i 's/0666/0644/g;s/0777/0755/g' feeds/packages/net/samba4/files/smb.conf.te # rk3568 bind cpus [ "$platform" = "rk3568" ] && sed -i 's#/usr/sbin/smbd -F#/usr/bin/taskset -c 1,0 /usr/sbin/smbd -F#' feeds/packages/net/samba4/files/samba.init -# autoCore -git clone https://$github/sbwml/autocore-arm -b openwrt-23.05 package/new/autocore - -# Aria2 & ariaNG -rm -rf feeds/packages/net/ariang -rm -rf feeds/luci/applications/luci-app-aria2 -git clone https://$github/sbwml/ariang-nginx package/new/ariang-nginx -rm -rf feeds/packages/net/aria2 -git clone https://$github/sbwml/feeds_packages_net_aria2 -b 22.03 feeds/packages/net/aria2 +# zerotier +rm -rf feeds/packages/net/zerotier +git clone https://$github/sbwml/feeds_packages_net_zerotier feeds/packages/net/zerotier -# AirConnect -git clone https://$github/sbwml/luci-app-airconnect package/new/airconnect +# airconnect +git clone https://$github/sbwml/luci-app-airconnect package/new/airconnect --depth=1 # netkit-ftp git clone https://$github/sbwml/package_new_ftp package/new/ftp # nethogs -git clone https://github.com/sbwml/package_new_nethogs package/new/nethogs +git clone https://$github/sbwml/package_new_nethogs package/new/nethogs # SSRP & Passwall rm -rf feeds/packages/net/{xray-core,v2ray-core,v2ray-geodata,sing-box} git clone https://$github/sbwml/openwrt_helloworld package/new/helloworld -b v5 -# DAED -git clone https://$github/sbwml/luci-app-daed package/new/daed - -# alist -git clone https://$github/sbwml/openwrt-alist package/new/alist +# openlist +git clone https://$github/sbwml/luci-app-openlist2 package/new/openlist --depth=1 -# Netdata -rm -rf feeds/packages/admin/netdata -cp -a ../master/packages/admin/netdata feeds/packages/admin/netdata +# netdata sed -i 's/syslog/none/g' feeds/packages/admin/netdata/files/netdata.conf -# OpenAI -git clone https://$github/sbwml/luci-app-openai package/new/openai - # qBittorrent -git clone https://$github/sbwml/luci-app-qbittorrent package/new/qbittorrent +git clone https://$github/sbwml/luci-app-qbittorrent package/new/qbittorrent --depth=1 # unblockneteasemusic -git clone https://$github/UnblockNeteaseMusic/luci-app-unblockneteasemusic package/new/luci-app-unblockneteasemusic +git clone https://$github/UnblockNeteaseMusic/luci-app-unblockneteasemusic package/new/luci-app-unblockneteasemusic --depth=1 sed -i 's/解除网易云音乐播放限制/网易云音乐解锁/g' package/new/luci-app-unblockneteasemusic/root/usr/share/luci/menu.d/luci-app-unblockneteasemusic.json -# xunlei -git clone https://$github/sbwml/luci-app-xunlei package/new/xunlei - # Theme -git clone --depth 1 https://$github/sbwml/luci-theme-argon.git package/new/luci-theme-argon +git clone https://$github/sbwml/luci-theme-argon -b openwrt-25.12 package/new/luci-theme-argon --depth=1 +git clone https://$github/eamonxg/luci-theme-aurora package/new/luci-theme-aurora --depth=1 +git clone https://$github/eamonxg/luci-app-aurora-config package/new/luci-app-aurora-config --depth=1 +rm -rf package/new/luci-theme-aurora/root/etc/uci-defaults +sed -i 's/100/85/g' package/new/luci-app-aurora-config/root/usr/share/luci/menu.d/luci-app-aurora.json # Mosdns -git clone https://$github/sbwml/luci-app-mosdns -b v5 package/new/mosdns +git clone https://$github/sbwml/luci-app-mosdns -b v5 package/new/mosdns --depth=1 # OpenAppFilter -git clone https://$github/sbwml/OpenAppFilter --depth=1 package/new/OpenAppFilter +git clone https://$github/sbwml/OpenAppFilter --depth=1 package/new/OpenAppFilter -b main # iperf3 -rm -rf feeds/packages/net/iperf3 -cp -a ../master/packages/net/iperf3 feeds/packages/net/iperf3 sed -i "s/D_GNU_SOURCE/D_GNU_SOURCE -funroll-loops/g" feeds/packages/net/iperf3/Makefile # nlbwmon @@ -134,40 +149,26 @@ sed -i 's/services/network/g' feeds/luci/applications/luci-app-nlbwmon/root/usr/ sed -i 's/services/network/g' feeds/luci/applications/luci-app-nlbwmon/htdocs/luci-static/resources/view/nlbw/config.js # mentohust -git clone https://github.com/sbwml/luci-app-mentohust package/new/mentohust +git clone https://$github/sbwml/luci-app-mentohust package/new/mentohust # custom packages rm -rf feeds/packages/utils/coremark git clone https://$github/sbwml/openwrt_pkgs package/new/custom --depth=1 +rm -rf package/new/custom/ddns-scripts-aliyun # coremark - prebuilt with gcc15 -if [ "$platform" = "rk3568" ]; then - curl -s https://$mirror/openwrt/patch/coremark/coremark.aarch64-4-threads > package/new/custom/coremark/src/musl/coremark.aarch64 -elif [ "$platform" = "rk3399" ]; then - curl -s https://$mirror/openwrt/patch/coremark/coremark.aarch64-6-threads > package/new/custom/coremark/src/musl/coremark.aarch64 -elif [ "$platform" = "armv8" ]; then - curl -s https://$mirror/openwrt/patch/coremark/coremark.aarch64-16-threads > package/new/custom/coremark/src/musl/coremark.aarch64 -fi +curl -s $mirror/openwrt/patch/coremark/coremark.aarch64-16-threads > package/new/custom/coremark/src/musl/coremark.aarch64 # luci-compat - fix translation sed -i 's/<%:Up%>/<%:Move up%>/g' feeds/luci/modules/luci-compat/luasrc/view/cbi/tblsection.htm sed -i 's/<%:Down%>/<%:Move down%>/g' feeds/luci/modules/luci-compat/luasrc/view/cbi/tblsection.htm -# FRPC Translation -sed -i 's,发送,Transmission,g' feeds/luci/applications/luci-app-transmission/po/zh_Hans/transmission.po -sed -i 's,frp 服务器,FRP 服务器,g' feeds/luci/applications/luci-app-frps/po/zh_Hans/frps.po -sed -i 's,frp 客户端,FRP 客户端,g' feeds/luci/applications/luci-app-frpc/po/zh_Hans/frpc.po +# frpc translation +sed -i 's,frp 服务器,Frp 服务器,g' feeds/luci/applications/luci-app-frps/po/zh_Hans/frps.po +sed -i 's,frp 客户端,Frp 客户端,g' feeds/luci/applications/luci-app-frpc/po/zh_Hans/frpc.po -# SQM Translation -mkdir -p feeds/packages/net/sqm-scripts/patches -curl -s https://$mirror/openwrt/patch/sqm/001-help-translation.patch > feeds/packages/net/sqm-scripts/patches/001-help-translation.patch - -# mjpg-streamer init -sed -i "s,option port '8080',option port '1024',g" feeds/packages/multimedia/mjpg-streamer/files/mjpg-streamer.config -sed -i "s,option fps '5',option fps '25',g" feeds/packages/multimedia/mjpg-streamer/files/mjpg-streamer.config - -# luci-app-mjpg-streamer -rm -rf feeds/luci/applications/luci-app-mjpg-streamer -git clone https://$github/sbwml/luci-app-mjpg-streamer feeds/luci/applications/luci-app-mjpg-streamer +# luci-app-sqm +rm -rf feeds/luci/applications/luci-app-sqm +git clone https://$gitea/sbwml/luci-app-sqm feeds/luci/applications/luci-app-sqm # unzip rm -rf feeds/packages/utils/unzip @@ -178,3 +179,10 @@ git clone https://$github/sbwml/package_kernel_tcp-brutal package/kernel/tcp-bru # watchcat - clean config true > feeds/packages/utils/watchcat/files/watchcat.config + +# libpcap +rm -rf package/libs/libpcap +git clone https://$github/sbwml/package_libs_libpcap package/libs/libpcap + +# sqm-scripts +curl -s $mirror/openwrt/patch/sqm-scripts/Makefile > feeds/packages/net/sqm-scripts/Makefile diff --git a/openwrt/scripts/04-fix_kmod.sh b/openwrt/scripts/04-fix_kmod.sh index ae82eadcd..959747b00 100644 --- a/openwrt/scripts/04-fix_kmod.sh +++ b/openwrt/scripts/04-fix_kmod.sh @@ -1,92 +1,92 @@ #!/bin/bash -e -# Fix build for linux-6.6 +# Fix build for 6.18 + +### BROKEN +sed -i 's/^\([[:space:]]*DEPENDS:=.*\)$/\1 @BROKEN/' package/kernel/rtl8812au-ct/Makefile # cryptodev-linux -mkdir -p package/kernel/cryptodev-linux/patches -curl -s https://$mirror/openwrt/patch/packages-patches/cryptodev-linux/001-Fix-build-for-Linux-6.3-rc1.patch > package/kernel/cryptodev-linux/patches/001-Fix-build-for-Linux-6.3-rc1.patch +curl -s $mirror/openwrt/patch/packages-patches/cryptodev-linux/6.18/900-fix-linux-6.18.patch > package/kernel/cryptodev-linux/patches/900-fix-linux-6.18.patch # gpio-button-hotplug -curl -s https://$mirror/openwrt/patch/packages-patches/gpio-button-hotplug/fix-linux-6.6.patch | patch -p1 +curl -s $mirror/openwrt/patch/packages-patches/gpio-button-hotplug/fix-linux-6.18.patch | patch -p1 # gpio-nct5104d -curl -s https://$mirror/openwrt/patch/packages-patches/gpio-nct5104d/fix-build-for-linux-6.6.patch | patch -p1 - -# dmx_usb_module -mkdir -p feeds/packages/libs/dmx_usb_module/patches -curl -s https://$mirror/openwrt/patch/packages-patches/dmx_usb_module/900-fix-linux-6.6.patch > feeds/packages/libs/dmx_usb_module/patches/900-fix-linux-6.6.patch +curl -s $mirror/openwrt/patch/packages-patches/gpio-nct5104d/fix-linux-6.18.patch | patch -p1 # jool -curl -s https://$mirror/openwrt/patch/packages-patches/jool/Makefile > feeds/packages/net/jool/Makefile - -# mdio-netlink -mkdir -p feeds/packages/kernel/mdio-netlink/patches -curl -s https://$mirror/openwrt/patch/packages-patches/mdio-netlink/001-mdio-netlink-rework-C45-to-work-with-net-next.patch > feeds/packages/kernel/mdio-netlink/patches/001-mdio-netlink-rework-C45-to-work-with-net-next.patch +rm -rf feeds/packages/net/jool +mkdir -p feeds/packages/net/jool/patches +curl -s $mirror/openwrt/patch/packages-patches/jool/Makefile > feeds/packages/net/jool/Makefile +curl -s $mirror/openwrt/patch/packages-patches/jool/patches/100-fix-compilation-warning-simple-fix.patch > feeds/packages/net/jool/patches/100-fix-compilation-warning-simple-fix.patch +curl -s $mirror/openwrt/patch/packages-patches/jool/patches/900-fix-build-with-linux-6.18.patch > feeds/packages/net/jool/patches/900-fix-build-with-linux-6.18.patch # ovpn-dco -mkdir -p feeds/packages/kernel/ovpn-dco/patches -curl -s https://$mirror/openwrt/patch/packages-patches/ovpn-dco/100-ovpn-dco-adapt-pre-post_doit-CBs-to-new-signature.patch > feeds/packages/kernel/ovpn-dco/patches/100-ovpn-dco-adapt-pre-post_doit-CBs-to-new-signature.patch -curl -s https://$mirror/openwrt/patch/packages-patches/ovpn-dco/900-fix-linux-6.6.patch > feeds/packages/kernel/ovpn-dco/patches/900-fix-linux-6.6.patch - -# siit -rm -rf feeds/packages/net/siit -cp -a ../master/packages/net/siit feeds/packages/net/siit +rm -rf feeds/packages/kernel/ovpn-dco/patches +curl -s $mirror/openwrt/patch/packages-patches/ovpn-dco/Makefile > feeds/packages/kernel/ovpn-dco/Makefile # libpfring rm -rf feeds/packages/libs/libpfring mkdir -p feeds/packages/libs/libpfring/patches -curl -s https://$mirror/openwrt/patch/packages-patches/libpfring/Makefile > feeds/packages/libs/libpfring/Makefile +curl -s $mirror/openwrt/patch/packages-patches/libpfring/Makefile > feeds/packages/libs/libpfring/Makefile pushd feeds/packages/libs/libpfring/patches - curl -Os https://$mirror/openwrt/patch/packages-patches/libpfring/patches/0001-fix-cross-compiling.patch - curl -Os https://$mirror/openwrt/patch/packages-patches/libpfring/patches/100-fix-compilation-warning.patch - curl -Os https://$mirror/openwrt/patch/packages-patches/libpfring/patches/900-fix-linux-6.6.patch + curl -Os $mirror/openwrt/patch/packages-patches/libpfring/patches/0001-fix-cross-compiling.patch + curl -Os $mirror/openwrt/patch/packages-patches/libpfring/patches/100-fix-compilation-warning.patch + curl -Os $mirror/openwrt/patch/packages-patches/libpfring/patches/900-fix-linux-6.6.patch + curl -Os $mirror/openwrt/patch/packages-patches/libpfring/patches/901-fix-build-for-linux-6.17.patch popd -# packages -pushd feeds/packages - # xr_usb_serial_common - curl -s https://github.com/openwrt/packages/commit/23a3ea2d6b3779cd48d318b95a3c72cad9433d50.patch | patch -p1 - # fix linux-6.6 - curl -s https://$mirror/openwrt/patch/packages-patches/xr_usb_serial_common/900-fix-linux-6.6.patch > libs/xr_usb_serial_common/patches/900-fix-linux-6.6.patch - # coova-chilli - curl -s https://github.com/openwrt/packages/commit/9975e855adcfc24939080a5e0279e0a90553347b.patch | patch -p1 - curl -s https://github.com/openwrt/packages/commit/c0683d3f012096fc7b2fbe8b8dc81ea424945e9b.patch | patch -p1 -popd +# nat46 +mkdir -p package/kernel/nat46/patches +curl -s $mirror/openwrt/patch/packages-patches/nat46/102-fix-build-with-kernel-6.18.patch > package/kernel/nat46/patches/102-fix-build-with-kernel-6.18.patch + +# openvswitch +sed -i '/ovs_kmod_openvswitch_depends/a\\t\ \ +kmod-sched-act-sample \\' feeds/packages/net/openvswitch/Makefile -# xtables-addons -rm -rf feeds/packages/net/xtables-addons -cp -a ../master/packages/net/xtables-addons feeds/packages/net/xtables-addons +# rtpengine +curl -s $mirror/openwrt/patch/packages-patches/rtpengine/901-fix-build-for-linux-6.18.patch > feeds/telephony/net/rtpengine/patches/901-fix-build-for-linux-6.18.patch + +# ubootenv-nvram - 6.18 +curl -s $mirror/openwrt/patch/packages-patches/ubootenv-nvram/010-fix-build-for-linux-6.18.patch | patch -p1 + +# usb-serial-xr_usb_serial_common: remove package +# Now that we have packaged the upstream driver[1] and only board[2] that +# includes it by default has been switched to it, remove this out-of-tree +# driver that is broken on 6.12 anyway. +rm -rf feeds/packages/libs/xr_usb_serial_common + +# v4l2loopback +rm -rf feeds/packages/kernel/v4l2loopback +mkdir -p feeds/packages/kernel/v4l2loopback +curl -s $mirror/openwrt/patch/packages-patches/v4l2loopback/Makefile > feeds/packages/kernel/v4l2loopback/Makefile # telephony pushd feeds/telephony # dahdi-linux rm -rf libs/dahdi-linux - git clone https://$github/sbwml/feeds_telephony_libs_dahdi-linux libs/dahdi-linux + git clone https://$github/sbwml/feeds_telephony_libs_dahdi-linux libs/dahdi-linux -b v6.18 popd -# routing - batman-adv -rm -rf feeds/routing/batman-adv -cp -a ../master/routing/batman-adv feeds/routing/batman-adv - -# bcm53xx -if [ "$platform" = "bcm53xx" ]; then - # libpfring - sed -i '/CONFIGURE_VARS +=/iEXTRA_CFLAGS += -Wno-int-conversion\n' feeds/packages/libs/libpfring/Makefile -fi +# routing +pushd feeds/routing + # batman-adv + rm -rf batman-adv + git clone https://$github/sbwml/feeds_routing_batman-adv batman-adv +popd # clang if [ "$KERNEL_CLANG_LTO" = "y" ]; then # xtables-addons module rm -rf feeds/packages/net/xtables-addons - git clone https://$github/sbwml/kmod_packages_net_xtables-addons feeds/packages/net/xtables-addons + git clone https://$github/sbwml/kmod_packages_net_xtables-addons feeds/packages/net/xtables-addons -b openwrt-25.12 # netatop sed -i 's/$(MAKE)/$(KERNEL_MAKE)/g' feeds/packages/admin/netatop/Makefile - curl -s https://$mirror/openwrt/patch/packages-patches/clang/netatop/900-fix-build-with-clang.patch > feeds/packages/admin/netatop/patches/900-fix-build-with-clang.patch + curl -s $mirror/openwrt/patch/packages-patches/clang/netatop/900-fix-build-with-clang.patch > feeds/packages/admin/netatop/patches/900-fix-build-with-clang.patch # dmx_usb_module rm -rf feeds/packages/libs/dmx_usb_module git clone https://$gitea/sbwml/feeds_packages_libs_dmx_usb_module feeds/packages/libs/dmx_usb_module # macremapper - curl -s https://$mirror/openwrt/patch/packages-patches/clang/macremapper/100-macremapper-fix-clang-build.patch | patch -p1 + curl -s $mirror/openwrt/patch/packages-patches/clang/macremapper/100-macremapper-fix-clang-build.patch | patch -p1 # coova-chilli module rm -rf feeds/packages/net/coova-chilli git clone https://$github/sbwml/kmod_packages_net_coova-chilli feeds/packages/net/coova-chilli diff --git a/openwrt/scripts/05-fix-source.sh b/openwrt/scripts/05-fix-source.sh index efc68b51f..1e6c93967 100644 --- a/openwrt/scripts/05-fix-source.sh +++ b/openwrt/scripts/05-fix-source.sh @@ -1,139 +1,57 @@ #!/bin/bash -# libsodium - fix build with lto (GNU BUG - 89147) -sed -i "/CONFIGURE_ARGS/i\TARGET_CFLAGS += -ffat-lto-objects\n" feeds/packages/libs/libsodium/Makefile - -# grub2 - disable `gc-sections` flag -sed -i '/PKG_BUILD_FLAGS/ s/$/ no-gc-sections/' package/boot/grub2/Makefile - -# fix gcc13 -if [ "$USE_GCC13" = "y" ] || [ "$USE_GCC14" = y ] || [ "$USE_GCC15" = y ]; then - # libwebsockets - mkdir feeds/packages/libs/libwebsockets/patches - pushd feeds/packages/libs/libwebsockets/patches - curl -sLO https://raw.githubusercontent.com/openwrt/packages/bcd970fb4ff6029fbf612dccf6d8c2902a65e20e/libs/libwebsockets/patches/010-fix-enum-int-mismatch-openssl.patch - curl -sLO https://raw.githubusercontent.com/openwrt/packages/bcd970fb4ff6029fbf612dccf6d8c2902a65e20e/libs/libwebsockets/patches/011-fix-enum-int-mismatch-mbedtls.patch - curl -sLO https://raw.githubusercontent.com/openwrt/packages/94bd1ca8bad053a772a3ea8cb06ce59241fb9a57/libs/libwebsockets/patches/100-fix-uninitialized-variable-usage.patch - popd -fi - -# fix gcc14 -if [ "$USE_GCC14" = y ] || [ "$USE_GCC15" = y ]; then - # iproute2 - rm -rf package/network/utils/iproute2 - git clone https://$github/sbwml/package_network_utils_iproute2 package/network/utils/iproute2 - # wsdd2 - if [ "$ENABLE_GLIBC" != "y" ]; then - mkdir -p feeds/packages/net/wsdd2/patches - curl -s https://$mirror/openwrt/patch/openwrt-6.x/gcc-14/wsdd2/100-wsdd2-cast-from-pointer-to-integer-of-different-size.patch > feeds/packages/net/wsdd2/patches/100-wsdd2-cast-from-pointer-to-integer-of-different-size.patch - fi - # libunwind - rm -rf package/libs/libunwind - git clone https://$github/sbwml/package_libs_libunwind package/libs/libunwind - # lrzsz - curl -s https://$mirror/openwrt/patch/openwrt-6.x/gcc-14/lrzsz/900-lrzsz-fix-gcc14.patch > package/new/lrzsz/patches/900-lrzsz-fix-gcc14.patch - sed -i '/lrzsz\/install/iTARGET_CFLAGS += -Wno-implicit-function-declaration -Wno-builtin-declaration-mismatch -Wno-incompatible-pointer-types' package/new/lrzsz/Makefile - # mbedtls - curl -s https://$mirror/openwrt/patch/openwrt-6.x/gcc-14/mbedtls/900-tests-fix-calloc-argument-list-gcc-14-fix.patch > package/libs/mbedtls/patches/900-tests-fix-calloc-argument-list-gcc-14-fix.patch +if [ "$KERNEL_CLANG_LTO" = "y" ]; then # linux-atm - rm -rf package/network/utils/linux-atm - git clone https://$github/sbwml/package_network_utils_linux-atm package/network/utils/linux-atm - # lsof - rm -rf feeds/packages/utils/lsof - cp -a ../master/packages/utils/lsof feeds/packages/utils/lsof - # screen - SCREEN_VERSION=4.9.1 - SCREEN_HASH=26cef3e3c42571c0d484ad6faf110c5c15091fbf872b06fa7aa4766c7405ac69 - sed -ri "s/(PKG_VERSION:=)[^\"]*/\1$SCREEN_VERSION/;s/(PKG_HASH:=)[^\"]*/\1$SCREEN_HASH/" feeds/packages/utils/screen/Makefile - rm -rf feeds/packages/utils/screen/patches && mkdir -p feeds/packages/utils/screen/patches - curl -s https://$mirror/openwrt/patch/openwrt-6.x/gcc-14/screen/900-fix-implicit-function-declaration.patch > feeds/packages/utils/screen/patches/900-fix-implicit-function-declaration.patch - # xdp-tools - curl -s https://$mirror/openwrt/patch/openwrt-6.x/gcc-14/xdp-tools/900-Fix-transposed-calloc-arguments.patch > package/network/utils/xdp-tools/patches/900-Fix-transposed-calloc-arguments.patch - # perl - curl -s https://$mirror/openwrt/patch/openwrt-6.x/gcc-14/perl/1000-fix-implicit-declaration-error.patch > feeds/packages/lang/perl/patches/1000-fix-implicit-declaration-error.patch - # grub2 - curl -s https://$mirror/openwrt/patch/openwrt-6.x/gcc-14/grub2/900-fix-incompatible-pointer-type.patch > package/boot/grub2/patches/900-fix-incompatible-pointer-type.patch - # glibc - # Added the compiler flag -Wno-implicit-function-declaration to suppress - # warnings about implicit function declarations during the build process. - # This change addresses build issues in environments where some functions - # are used without prior declaration. - if [ "$ENABLE_GLIBC" = "y" ]; then - # perl - sed -i "/Target perl/i\TARGET_CFLAGS_PERL += -Wno-implicit-function-declaration -Wno-int-conversion\n" feeds/packages/lang/perl/Makefile - # lucihttp - sed -i "/TARGET_CFLAGS/i\TARGET_CFLAGS += -Wno-implicit-function-declaration" feeds/luci/contrib/package/lucihttp/Makefile - # rpcd - sed -i "/TARGET_LDFLAGS/i\TARGET_CFLAGS += -Wno-implicit-function-declaration" package/system/rpcd/Makefile - # ucode-mod-lua - sed -i "/Build\/Configure/i\TARGET_CFLAGS += -Wno-implicit-function-declaration" feeds/luci/contrib/package/ucode-mod-lua/Makefile - # luci-base - sed -i "s/-DNDEBUG/-DNDEBUG -Wno-implicit-function-declaration/g" feeds/luci/modules/luci-base/src/Makefile - # uhttpd - sed -i "/Package\/uhttpd\/install/i\TARGET_CFLAGS += -Wno-implicit-function-declaration\n" package/network/services/uhttpd/Makefile - fi - # openssh - 9.8p1 - if [ "$version" = "snapshots-23.05" ] || [ "$version" = "rc2" ]; then - rm -rf feeds/packages/net/openssh - cp -a ../master/packages/net/openssh feeds/packages/net/openssh - fi + curl -s $mirror/openwrt/patch/packages-patches/clang/linux-atm/openwrt-fix-build-with-clang.patch | patch -p1 fi -# fix gcc-15 -if [ "$USE_GCC15" = y ]; then - # Mbedtls - curl -s https://$mirror/openwrt/patch/openwrt-6.x/gcc-15/mbedtls/901-tests-fix-string-initialization-error-on-gcc15.patch > package/libs/mbedtls/patches/901-tests-fix-string-initialization-error-on-gcc15.patch - # elfutils - curl -s https://$mirror/openwrt/patch/openwrt-6.x/gcc-15/elfutils/901-backends-fix-string-initialization-error-on-gcc15.patch > package/libs/elfutils/patches/901-backends-fix-string-initialization-error-on-gcc15.patch - # libwebsockets - curl -s https://$mirror/openwrt/patch/openwrt-6.x/gcc-15/libwebsockets/901-fix-string-initialization-error-on-gcc15.patch > feeds/packages/libs/libwebsockets/patches/901-fix-string-initialization-error-on-gcc15.patch - # libxcrypt - mkdir -p feeds/packages/libs/libxcrypt/patches - curl -s https://$mirror/openwrt/patch/openwrt-6.x/gcc-15/libxcrypt/901-fix-string-initialization-error-on-gcc15.patch > feeds/packages/libs/libxcrypt/patches/901-fix-string-initialization-error-on-gcc15.patch +if [ "$ENABLE_MOLD" = "y" ]; then + # attr + sed -i '/PKG_BUILD_PARALLEL/aPKG_BUILD_FLAGS:=no-mold' feeds/packages/utils/attr/Makefile fi +# irqbalance +curl -s $mirror/openwrt/patch/packages-patches/irqbalance/901-meson-disable-numa-option-by-default.patch > feeds/packages/utils/irqbalance/patches/901-meson-disable-numa-option-by-default.patch + +# libsodium - fix build with lto (GNU BUG - 89147) +sed -i "/CONFIGURE_ARGS/i\TARGET_CFLAGS += -ffat-lto-objects\n" feeds/packages/libs/libsodium/Makefile + +# haproxy - fix build with quictls +sed -i '/USE_QUIC_OPENSSL_COMPAT/d' feeds/packages/net/haproxy/Makefile + # xdp-tools -[ "$platform" != "x86_64" ] && sed -i '/TARGET_LDFLAGS +=/iTARGET_CFLAGS += -Wno-error=maybe-uninitialized -ffat-lto-objects\n' package/network/utils/xdp-tools/Makefile -[ "$platform" = "x86_64" ] && sed -i '/TARGET_LDFLAGS +=/iTARGET_CFLAGS += -ffat-lto-objects\n' package/network/utils/xdp-tools/Makefile +rm -rf package/network/utils/xdp-tools +git clone https://$github/sbwml/package_network_utils_xdp-tools package/network/utils/xdp-tools # ksmbd luci -rm -rf feeds/luci/applications/luci-app-ksmbd -cp -a ../master/luci/applications/luci-app-ksmbd feeds/luci/applications/luci-app-ksmbd sed -i 's/0666/0644/g;s/0777/0755/g' feeds/luci/applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js # ksmbd tools -rm -rf feeds/packages/net/ksmbd-tools -cp -a ../master/packages/net/ksmbd-tools feeds/packages/net/ksmbd-tools sed -i 's/0666/0644/g;s/0777/0755/g' feeds/packages/net/ksmbd-tools/files/ksmbd.config.example sed -i 's/bind interfaces only = yes/bind interfaces only = no/g' feeds/packages/net/ksmbd-tools/files/ksmbd.conf.template -# vim - fix E1187: Failed to source defaults.vim -pushd feeds/packages - curl -s https://$mirror/openwrt/patch/vim/0001-vim-fix-renamed-defaults-config-file.patch | patch -p1 -popd - -# bpf - add host clang-15/17 support -sed -i 's/command -v clang/command -v clang clang-17 clang-15/g' include/bpf.mk - # perf -curl -s https://$mirror/openwrt/patch/openwrt-6.x/musl/990-add-typedefs-for-Elf64_Relr-and-Elf32_Relr.patch > toolchain/musl/patches/990-add-typedefs-for-Elf64_Relr-and-Elf32_Relr.patch -if [ "$KERNEL_CLANG_LTO" = "y" ]; then - curl -s https://$mirror/openwrt/patch/openwrt-6.x/perf/Makefile.2 > package/devel/perf/Makefile -else - curl -s https://$mirror/openwrt/patch/openwrt-6.x/perf/Makefile > package/devel/perf/Makefile -fi +curl -s $mirror/openwrt/patch/openwrt-6.x/musl/990-add-typedefs-for-Elf64_Relr-and-Elf32_Relr.patch > toolchain/musl/patches/990-add-typedefs-for-Elf64_Relr-and-Elf32_Relr.patch +curl -s $mirror/openwrt/patch/openwrt-6.x/perf/Makefile > package/devel/perf/Makefile # kselftests-bpf -curl -s https://$mirror/openwrt/patch/packages-patches/kselftests-bpf/Makefile > package/devel/kselftests-bpf/Makefile +curl -s $mirror/openwrt/patch/packages-patches/kselftests-bpf/Makefile > package/devel/kselftests-bpf/Makefile + +####################################### -# bcm53xx -if [ "$platform" = "bcm53xx" ]; then - # mtd - sed -i 's/=1 -Wall/=1 -Wall -Wno-implicit-function-declaration/g' package/system/mtd/Makefile - # uwsgi - sed -i '/MAKE_VARS+=/iTARGET_CFLAGS += -Wno-incompatible-pointer-types\n' feeds/packages/net/uwsgi/Makefile - # libsoxr - sed -i '/CMAKE_INSTALL/iPKG_BUILD_FLAGS:=no-lto no-mold\n' feeds/packages/libs/libsoxr/Makefile - # wsdd2 - sed -i '/Build\/Compile/iTARGET_CFLAGS += -Wno-error -Wno-int-conversion\n' feeds/packages/net/wsdd2/Makefile +# fix gcc-15.0.1 gnu17 +if [ "$USE_GCC15" = y ] || [ "$USE_GCC16" = y ]; then + # xl2tpd + sed -i '/ifneq (0,0)/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/net/xl2tpd/Makefile +fi + +# fix gcc-16.1.0 +if [ "$USE_GCC16" = y ]; then + # elfutils lto + curl -s $mirror/openwrt/patch/packages-patches_gcc16/elfutils/900-fix-gcc16-null-dereference-with-lto.patch > package/libs/elfutils/patches/900-fix-gcc16-null-dereference-with-lto.patch + # libwebsockets + mkdir -p feeds/packages/libs/libwebsockets/patches + curl -s $mirror/openwrt/patch/packages-patches_gcc16/libwebsockets/900-fix-build-for-gcc-16.patch > feeds/packages/libs/libwebsockets/patches/900-fix-build-for-gcc-16.patch + # bash + sed -i "/PKG_INSTALL:=/i\PKG_BUILD_FLAGS:=no-lto" feeds/packages/utils/bash/Makefile fi diff --git a/openwrt/scripts/10-custom.sh b/openwrt/scripts/10-custom.sh new file mode 100644 index 000000000..cea74a296 --- /dev/null +++ b/openwrt/scripts/10-custom.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +# 自定义脚本 diff --git a/openwrt/scripts/99_clean_build_cache.sh b/openwrt/scripts/99_clean_build_cache.sh index f776b6d85..32ba91afa 100644 --- a/openwrt/scripts/99_clean_build_cache.sh +++ b/openwrt/scripts/99_clean_build_cache.sh @@ -1,8 +1,6 @@ rm -rf bin -rm -rf build_dir/target-aarch64_generic_musl/root-rockchip build_dir/target-x86_64_musl/root-x86 build_dir/target-arm_cortex-a9_musl_eabi/root-bcm53xx -rm -rf build_dir/target-aarch64_generic_musl/root.orig-rockchip build_dir/target-x86_64_musl/root.orig-x86 build_dir/target-arm_cortex-a9_musl_eabi/root.orig-bcm53xx +rm -rf build_dir/target-aarch64_generic_musl/root-rockchip build_dir/target-x86_64_musl/root-x86 rm -rf staging_dir/target-aarch64_generic_musl/root-rockchip staging_dir/target-x86_64_musl/root-x86 -rm -rf staging_dir/packages/rockchip staging_dir/packages/x86 staging_dir/target-arm_cortex-a9_musl_eabi/root-bcm53xx rm -rf dl/geo* rm -rf tmp/.config* CURRENT_DATE=$(date +%s) diff --git a/tags/kernel-6.18 b/tags/kernel-6.18 new file mode 100644 index 000000000..ccd85ab5b --- /dev/null +++ b/tags/kernel-6.18 @@ -0,0 +1,2 @@ +LINUX_VERSION-6.18 = .34 +LINUX_KERNEL_HASH-6.18.34 = 640c4732fb42842166db97e032c1fe7e5ff72c85a8982c75b40f74be3555d760 diff --git a/tags/kernel-6.6 b/tags/kernel-6.6 deleted file mode 100644 index 5fbb10e05..000000000 --- a/tags/kernel-6.6 +++ /dev/null @@ -1,2 +0,0 @@ -LINUX_VERSION-6.6 = .48 -LINUX_KERNEL_HASH-6.6.48 = 6b16df7b2aba3116b78fdfd8aea0b6cd7abe8f0cb699b04a66d3169141772029 diff --git a/tags/kernel-tag.sh b/tags/kernel-tag.sh index 8257a30dd..e508e360c 100755 --- a/tags/kernel-tag.sh +++ b/tags/kernel-tag.sh @@ -1,12 +1,31 @@ #!/bin/bash +set -e + ROOT="./" -# LTS -KERNEL_VERSION=`curl -s https://us.cooluc.com/kernel/v6.x/sha256sums.asc | awk '{print $2}' | grep -E ^linux-6.6 | grep tar.xz | sed 's/linux-//g;s/.tar.xz//g' | tail -n 1` -KERNEL_HASH=`curl -s https://us.cooluc.com/kernel/v6.x/sha256sums.asc | grep linux-$KERNEL_VERSION | grep tar.xz | awk '{print $1}'` -TAG=`echo $KERNEL_VERSION | awk -F"." '{print $3}'` +# 获取所有 stable 版本中最新的 6.18.x +KERNEL_VERSION=$(curl -s https://www.kernel.org/releases.json \ + | jq -r '.releases[] | select(.moniker=="longterm") | .version' \ + | grep '^6\.18\.' \ + | sort -V \ + | tail -n1) + +# 从自建镜像获取对应 tar.xz 的 SHA256 +KERNEL_HASH=$(curl -s https://us.cooluc.com/kernel/v6.x/sha256sums.asc \ + | grep "linux-$KERNEL_VERSION.tar.xz" \ + | awk '{print $1}') + +# 如果没有匹配到 SHA256,立即退出 +if [ -z "$KERNEL_HASH" ]; then + echo "Error: SHA256 for linux-$KERNEL_VERSION.tar.xz not found. Mirror may not be synced." + exit 1 +fi + +# 提取 TAG(第三段版本号) +TAG=$(echo "$KERNEL_VERSION" | awk -F"." '{print $3}') +[ -z "$TAG" ] && TAG="" || TAG=".$TAG" -[ -z $TAG ] && TAG="" || TAG=.$TAG -echo "LINUX_VERSION-6.6 = $TAG -LINUX_KERNEL_HASH-$KERNEL_VERSION = $KERNEL_HASH" > $ROOT/kernel-6.6 +# 输出到文件 +echo "LINUX_VERSION-6.18 = $TAG +LINUX_KERNEL_HASH-$KERNEL_VERSION = $KERNEL_HASH" > "$ROOT/kernel-6.18" diff --git a/tags/openwrt-tag.sh b/tags/openwrt-tag.sh index 023846b4b..779ffda28 100755 --- a/tags/openwrt-tag.sh +++ b/tags/openwrt-tag.sh @@ -8,5 +8,5 @@ else cat tags.json | jq . > jq.json 2>&1 fi -grep name jq.json | grep v23 | head -1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g' | sed 's/v//g' > v23 +grep name jq.json | grep v25 | head -1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g' | sed 's/v//g' > v25 rm -f tags.json jq.json diff --git a/tags/v23 b/tags/v23 deleted file mode 100644 index fb51fde99..000000000 --- a/tags/v23 +++ /dev/null @@ -1 +0,0 @@ -23.05.4 diff --git a/tags/v25 b/tags/v25 new file mode 100644 index 000000000..e19286fea --- /dev/null +++ b/tags/v25 @@ -0,0 +1 @@ +25.12.4