{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "org.jenkinsci.plugins.parameterizedscheduler.ParameterizedTimerTriggerCause",
          "shortDescription" : "Started by timer with parameters: {BUILD_CFG_TARGET_DEV=WR8750N/WR9500N/WG600HP (AR9344)}"
        }
      ]
    },
    {
      "_class" : "hudson.model.ParametersAction",
      "parameters" : [
        {
          "_class" : "hudson.model.BooleanParameterValue",
          "name" : "BUILD_CFG_DISTCLEAN",
          "value" : True
        },
        {
          "_class" : "hudson.model.BooleanParameterValue",
          "name" : "BUILD_CFG_DIFFCONFIG",
          "value" : True
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "BUILD_CFG_TARGET_DEV",
          "value" : "WR8750N/WR9500N/WG600HP (AR9344)"
        }
      ]
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/main" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 519,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "795f369b181cd128962fa8f60a03eaf0ac8afac6",
            "branch" : [
              {
                "SHA1" : "795f369b181cd128962fa8f60a03eaf0ac8afac6",
                "name" : "refs/remotes/origin/main"
              }
            ]
          },
          "revision" : {
            "SHA1" : "795f369b181cd128962fa8f60a03eaf0ac8afac6",
            "branch" : [
              {
                "SHA1" : "795f369b181cd128962fa8f60a03eaf0ac8afac6",
                "name" : "refs/remotes/origin/main"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "795f369b181cd128962fa8f60a03eaf0ac8afac6",
        "branch" : [
          {
            "SHA1" : "795f369b181cd128962fa8f60a03eaf0ac8afac6",
            "name" : "refs/remotes/origin/main"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/openwrt/openwrt"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    {
      "displayPath" : "config.buildinfo",
      "fileName" : "config.buildinfo",
      "relativePath" : "bin/targets/ath79/tiny/config.buildinfo"
    },
    {
      "displayPath" : "feeds.buildinfo",
      "fileName" : "feeds.buildinfo",
      "relativePath" : "bin/targets/ath79/tiny/feeds.buildinfo"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wg600hp-initramfs-factory.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wg600hp-initramfs-factory.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wg600hp-initramfs-factory.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wg600hp-initramfs-kernel.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wg600hp-initramfs-kernel.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wg600hp-initramfs-kernel.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wg600hp-squashfs-sysupgrade.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wg600hp-squashfs-sysupgrade.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wg600hp-squashfs-sysupgrade.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wg600hp-uboot.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wg600hp-uboot.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wg600hp-uboot.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wr8750n-initramfs-factory.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wr8750n-initramfs-factory.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wr8750n-initramfs-factory.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wr8750n-initramfs-kernel.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wr8750n-initramfs-kernel.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wr8750n-initramfs-kernel.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wr8750n-squashfs-sysupgrade.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wr8750n-squashfs-sysupgrade.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wr8750n-squashfs-sysupgrade.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wr8750n-uboot.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wr8750n-uboot.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wr8750n-uboot.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wr9500n-initramfs-factory.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wr9500n-initramfs-factory.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wr9500n-initramfs-factory.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wr9500n-initramfs-kernel.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wr9500n-initramfs-kernel.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wr9500n-initramfs-kernel.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wr9500n-squashfs-sysupgrade.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wr9500n-squashfs-sysupgrade.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wr9500n-squashfs-sysupgrade.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny-nec_wr9500n-uboot.bin",
      "fileName" : "openwrt-ath79-tiny-nec_wr9500n-uboot.bin",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny-nec_wr9500n-uboot.bin"
    },
    {
      "displayPath" : "openwrt-ath79-tiny.manifest",
      "fileName" : "openwrt-ath79-tiny.manifest",
      "relativePath" : "bin/targets/ath79/tiny/openwrt-ath79-tiny.manifest"
    },
    {
      "displayPath" : "profiles.json",
      "fileName" : "profiles.json",
      "relativePath" : "bin/targets/ath79/tiny/profiles.json"
    },
    {
      "displayPath" : "sha256sums",
      "fileName" : "sha256sums",
      "relativePath" : "bin/targets/ath79/tiny/sha256sums"
    },
    {
      "displayPath" : "version.buildinfo",
      "fileName" : "version.buildinfo",
      "relativePath" : "bin/targets/ath79/tiny/version.buildinfo"
    }
  ],
  "building" : False,
  "description" : "diffconfig: true, device: WR8750N/WR9500N/WG600HP (AR9344)",
  "displayName" : "#519",
  "duration" : 2074465,
  "estimatedDuration" : 2120772,
  "executor" : None,
  "fullDisplayName" : "OpenWrt (master) for NEC Aterm (NetBSD based) #519",
  "id" : "519",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 519,
  "queueId" : 84,
  "result" : "SUCCESS",
  "timestamp" : 1793230800229,
  "url" : "https://taiha.net/jenkins/job/OpenWrt-master-NEC-BSD-Aterm/519/",
  "builtOn" : "home-slave02_taihasv",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
        ],
        "commitId" : "9d696f9ec1c41e74a4dafd846ecec5ca0052fe84",
        "timestamp" : 1793001377000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/markus.stockhausen",
          "fullName" : "markus.stockhausen"
        },
        "authorEmail" : "markus.stockhausen@gmx.de",
        "comment" : "realtek: pie: serialize rule deletion with allocation\u000a\u000aPIE rule additions hold pie_mutex, but range deletion uses reg_mutex and\u000arule removal clears the allocation bitmap after dropping that lock. The\u000atwo paths can therefore access the engine concurrently. On RTL838x,\u000adeletion can also overwrite lookup changes made by a concurrent addition.\u000a\u000aUse pie_mutex for rule removal on RTL838x, RTL839x, RTL930x and RTL931x,\u000acovering both the hardware deletion and release of the allocated ID.\u000aRequire callers of the range-deletion helpers to hold that mutex and\u000aassert this with lockdep. Hold the same lock during PIE initialization,\u000aincluding the initial range clear and block configuration.\u000a\u000aThis serializes deletion with existing rule-add and RTL839x L3 write\u000apaths without nesting pie_mutex inside itself or acquiring reg_mutex.\u000a\u000aSigned-off-by: João Silva <jgc3silva@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26190\u000aSigned-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>\u000a",
        "date" : "2026-10-26 08:56:17 +0100",
        "id" : "9d696f9ec1c41e74a4dafd846ecec5ca0052fe84",
        "msg" : "realtek: pie: serialize rule deletion with allocation",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
        ],
        "commitId" : "14ba4bb0aa8928c98fbf5f3024bdfd2038348dd5",
        "timestamp" : 1793001377000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/markus.stockhausen",
          "fullName" : "markus.stockhausen"
        },
        "authorEmail" : "markus.stockhausen@gmx.de",
        "comment" : "realtek: pie: bound rule deletion polling\u000a\u000aReplace the unbounded deletion-command loops on RTL838x, RTL839x,\u000aRTL930x and RTL931x with regmap_read_poll_timeout(). Return register\u000aaccess errors and stop waiting after 100 ms if the command stays busy.\u000a\u000aKeep affected rule IDs reserved after an error, since a timed-out command\u000amay still be pending in hardware. Stop PIE initialization if its initial\u000aclear fails, and only release individual IDs after successful deletion.\u000aOn RTL838x, restore block lookup only after the clear has completed.\u000a\u000aSigned-off-by: João Silva <jgc3silva@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26190\u000aSigned-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>\u000a",
        "date" : "2026-10-26 08:56:17 +0100",
        "id" : "14ba4bb0aa8928c98fbf5f3024bdfd2038348dd5",
        "msg" : "realtek: pie: bound rule deletion polling",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
        ],
        "commitId" : "3c5ccaaf58d9334d0a150dd5ffbd24da5e41f2d4",
        "timestamp" : 1793001377000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/markus.stockhausen",
          "fullName" : "markus.stockhausen"
        },
        "authorEmail" : "markus.stockhausen@gmx.de",
        "comment" : "realtek: pie: convert IPv6 address and mask words consistently\u000a\u000aConvert IPv6 source and destination address words and their masks from\u000anetwork byte order before packing the RTL838x, RTL839x, RTL930x and\u000aRTL931x PIE entries. Use the inverse conversion when unpacking IPv6\u000adestination words in the RTL839x readback path.\u000a\u000aThis makes the register representation independent of CPU byte order\u000aand keeps address and mask handling consistent. Use a local word index\u000ato keep the conversions readable.\u000a\u000aSigned-off-by: João Silva <jgc3silva@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26190\u000aSigned-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>\u000a",
        "date" : "2026-10-26 08:56:17 +0100",
        "id" : "3c5ccaaf58d9334d0a150dd5ffbd24da5e41f2d4",
        "msg" : "realtek: pie: convert IPv6 address and mask words consistently",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "rules.mk"
        ],
        "commitId" : "7375c575c3ea9871d41a1eaf63a2b9e96c63fc61",
        "timestamp" : 1793002233000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/ansuelsmth",
          "fullName" : "ansuelsmth"
        },
        "authorEmail" : "ansuelsmth@gmail.com",
        "comment" : "rules: derive GCC_VERSION from the configuration\u000a\u000aThe toolchain writes its version into staging_dir/toolchain-*/info.mk,\u000awhich rules.mk includes. toolchain/Makefile creates that file from a\u000aplaceholder whose GCC_VERSION is the literal \"unknown\", and the only\u000athing that ever replaces it is Host/SetToolchainInfo, called from the\u000agcc prepare step.\u000a\u000aThe two live in different trees: the stamp that suppresses the prepare\u000astep sits in build_dir/toolchain-*, while info.mk sits in staging_dir.\u000aRemove staging_dir alone and the placeholder is reinstalled while the\u000aprepare stamp survives, so nothing rewrites it and every package is\u000abuilt with GCC_VERSION=unknown. apk rejects that outright:\u000a\u000a  ERROR: info field 'version' has invalid value: package version is invalid\u000a  ERROR: failed to create package: package version is invalid\u000a\u000aFor an internal toolchain the version is already known from\u000aCONFIG_GCC_VERSION, which rules.mk reads a few lines earlier as GCCV, so\u000afall back to it when info.mk offers nothing usable. TARGET_CROSS on the\u000aline above is defaulted the same way for the same reason.\u000a\u000aSigned-off-by: Daniel Golle <daniel@makrotopia.org>\u000aLink: https://github.com/openwrt/openwrt/pull/26181\u000aSigned-off-by: Christian Marangi <ansuelsmth@gmail.com>\u000a",
        "date" : "2026-10-26 09:10:33 +0100",
        "id" : "7375c575c3ea9871d41a1eaf63a2b9e96c63fc61",
        "msg" : "rules: derive GCC_VERSION from the configuration",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "rules.mk"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/firmware/linux-firmware/Makefile"
        ],
        "commitId" : "4dbc40c0630fccabc67c5ac7f613e6793a1d690e",
        "timestamp" : 1793002296000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/ansuelsmth",
          "fullName" : "ansuelsmth"
        },
        "authorEmail" : "ansuelsmth@gmail.com",
        "comment" : "linux-firmware: update to 20261019\u000a\u000a% git log --no-merges --pretty=oneline --abbrev-commit 20260916...20261019\u000a158cd9ed6ebd rockchip: add PCIe3 PHY firmware for snps-pcie3\u000a733c58c2a8a9 Update ADSP firmware for Qualcomm qcs615 platform.\u000a4d3ecb245971 Revert \"amdgpu: update GC 11.0.0 firmware\"\u000ade4fccc398dc amdgpu: update vangogh firmware\u000a15f6f42c2991 amdgpu: update VPE 6.1.1 firmware\u000a347dcaed1ac0 amdgpu: update VCN 4.0.6 firmware\u000a2012998affe0 amdgpu: update PSP 14.0.1 firmware\u000a7a4a30b05a99 amdgpu: update GC 11.5.1 firmware\u000a9558ec3a8b69 amdgpu: update VCN 4.0.5 firmware\u000acf4b4addc1c4 amdgpu: update PSP 14.0.0 firmware\u000acab2fc931be4 amdgpu: update GC 11.5.0 firmware\u000a6deb84db6373 amdgpu: update renoir firmware\u000aa59975400aad amdgpu: update yellow carp firmware\u000a811ee4511577 amdgpu: update raven2 firmware\u000aa519eab5dca2 amdgpu: update raven firmware\u000a2d2cb01899a5 amdgpu: update VCN 3.1.2 firmware\u000a93b290fd8e35 amdgpu: update PSP 13.0.5 firmware\u000a9a3d7b4963aa amdgpu: update picasso firmware\u000aaf63ec014ba7 amdgpu: update PSP 13.0.11 firmware\u000afb52d937c35b amdgpu: update GC 11.0.4 firmware\u000aa4748ebfe8e9 amdgpu: update VCN 4.0.2 firmware\u000ad612c2461324 amdgpu: update PSP 13.0.4 firmware\u000a94daa4fe9a20 amdgpu: update GC 11.0.1 firmware\u000a7f7e805237cd amdgpu: update VCN 5.0.0 firmware\u000a85232b1cf902 amdgpu: update PSP 14.0.3 firmware\u000a58e210c52e72 amdgpu: update GC 12.0.1 firmware\u000aff4209304cec amdgpu: update PSP 14.0.2 firmware\u000a25cd19c34f83 amdgpu: update GC 12.0.0 firmware\u000a381bbd194f46 amdgpu: update VCN 4.0.4 firmware\u000abc9f817fb104 amdgpu: update PSP 13.0.7 firmware\u000a48d5ac9b57dc amdgpu: update GC 11.0.2 firmware\u000af547110145f6 amdgpu: update PSP 13.0.10 firmware\u000acc6d98c1dc6d amdgpu: update GC 11.0.3 firmware\u000a8dbdfc13ba7c amdgpu: update VCN 4.0.0 firmware\u000af8e341502af0 amdgpu: update PSP 13.0.0 firmware\u000a972f521e428f amdgpu: update GC 11.0.0 firmware\u000a9281ebe07688 amdgpu: update beige goby firmware\u000a921bdaa170f5 amdgpu: update dimgrey cavefish firmware\u000a77887010b3d8 amdgpu: update navy flounder firmware\u000a295a404bfc6b amdgpu: update sienna cichlid firmware\u000a9c2bed6472a6 amdgpu: update navi14 firmware\u000abb48b903db22 amdgpu: update navi12 firmware\u000aa97e3b5db17e amdgpu: update navi10 firmware\u000ada22110c7203 amdgpu: update VCN 5.0.1 firmware\u000a1cb1bc502d7a amdgpu: update GC 9.4.4 firmware\u000af102a868d206 amdgpu: update PSP 15.0.9 firmware\u000a5478478d2339 amdgpu: update GC 11.7.1 firmware\u000a36e99d99aa38 amdgpu: update VCN 5.3.0 firmware\u000ab1ca0bb6caa8 amdgpu: update PSP 15.0.0 firmware\u000a362b09d83a69 amdgpu: update PSP 14.0.5 firmware\u000a94cf07dfc413 amdgpu: update GC 11.5.3 firmware\u000ab8dadf247edd amdgpu: update PSP 14.0.4 firmware\u000a19b7ec9a3169 amdgpu: update GC 11.5.2 firmware\u000ae301e556e6bf amdgpu: update green sardine firmware\u000ac9944b924b18 amdgpu: update VCN 4.0.3 firmware\u000a6f6bfe6fa1e5 amdgpu: update PSP 13.0.6 firmware\u000aac2c59644fb2 amdgpu: update GC 9.4.3 firmware\u000a9ff0f3abf72d amdgpu: DMCUB updates for various ASICs\u000a50dd1bcf2f4b rtw89: init board_elm.bin with stuffs for board ID 1\u000a9f5eaf1e5fa1 rtw89: 8922d: update fw 0.35.119.3 with format suffix -1\u000a3dcdaa69640c rtw89: 8922d: update fw 0.35.115.2\u000a9936de9f9fdd wfx: update to firmware 3.18\u000abdeb9f0f93f1 nvidia: Update and add missing firmware files for Tegra SoCs\u000aee632be9e54c qcom:Update qdsp6sw firmware for shikra platform\u000a8d279b943f1f aic: Add AIC8800D80 Bluetooth and Wi-Fi firmware\u000a7609749670be qcom: update HPASS firmware for nord platform\u000af45ea109af75 amdgpu: DMCUB updates for various ASICs\u000a9ec083c3aba9 amdgpu: update gc 11.0.1 and 11.0.4 firmware\u000a3eadf1895677 qcom: update LPAICP firmware for shikra platform\u000a575bbe3f8356 ath12k: WCN7850 hw2.0: update board-2.bin\u000a5cdef65aaa63 panthor: Add initial firmware for Architecture 14.8 Arm Mali GPU\u000a6b5ab2d6f060 qcom: update ADSP firmware for glymur platform\u000a9c7ee0c8ef56 cirrus: cs35l41: Add firmware and tuning for Lenovo Thinkbook laptops\u000ac3bbdd9de36a cirrus: cs35l63: Add firmware for Cirrus CS35L63 for various Dell laptops\u000aae4b9e72fc5e cirrus: cs42l45: Add CS42L49 SDCA codec firmware for Dell laptops\u000a2180bb08bab1 qcom: fix qcs8300 gpdspr.jsn symlink target\u000a360b6a1c56da qcom: update ADSP firmware for x1e80100 platform\u000a6163f5ba0c33 linux-firmware: Update firmware file for Intel Solar core\u000ab95a9e931958 linux-firmware: Update firmware file for Intel Magnetar core\u000a2ce099f2c913 linux-firmware: Update firmware file for Intel BlazaruHrpGfp core\u000ab593e397a7c8 linux-firmware: Update firmware file for Intel BlazariGfp core\u000a458831d07217 linux-firmware: Update firmware file for Intel BlazarUFmPArl core\u000aa385fbdf1678 linux-firmware: Update firmware file for Intel BlazarI core\u000a8956e3383e94 linux-firmware: Update firmware file for Intel BlazariFmp core\u000a138a87a2591c linux-firmware: Update firmware file for Intel BlazarU core\u000a5c1ebeca629f linux-firmware: Update firmware file for Intel ScorpiusGfp core\u000a8a2941fae0d0 linux-firmware: Update firmware file for Intel Scorpius core\u000ac6e051da7ca9 cirrus: cs35l57 cs35l63: Add firmware for some Dell laptops\u000a185df4e8a45a WHENCE: add SPDX license references for non-standard license texts\u000a37d557ab3cc2 WHENCE: add initial SPDX identifiers\u000a8dcbe88cf1c0 cirrus: cs42l45: Add CS42L45 SDCA codec firmware for a Dell laptop\u000a675924146dab cirrus: cs35l41: Add support for Lenovo Yoga Slim 7 Carbon 14ACN6\u000a01d600e69036 linux-firmware: Add ISH firmware files for Intel Nova Lake-H/S platforms\u000a970505040744 qcom: add ADSP firmware for eliza platform\u000ae13358126f69 qcom: update ADSP firmware for hawi platform\u000af830e56c110c QCA: Add QCA2066 Bluetooth firmware hpnv21g.30c\u000a11184fe575c7 QCA: Update Bluetooth QCA2066 firmware to 2.1.0-00653\u000a5e7b5bc6a938 Revert \"qcom: update ADSP firmware for qcs615 platform\"q\u000a28b21de36022 qcom: Add gpu firmwares for Hawi and Maili chipsets\u000aa4c4b10b7ed6 qcom: update Rubik Pi 3 ADSP firmware\u000a4203b9738f72 cirrus: cs35l56: Correct firmware instances for 103c8c52 and 103c8c53\u000ad9dd66ff33ed contrib: post the MR comment to the project of the merge request\u000a83f41d84ccdc amdgpu: update VPE 2.0.0 firmware\u000abc5252f2c0de amdgpu: update VCN 5.3.0 firmware\u000ac3e8dd75984b amdgpu: update GC 11.7.0 MES firmware\u000a9ab11f1c5767 amdgpu: update PSP 15.0.9 firmware\u000a09c29d394433 amdgpu: update PSP 15.0.0 firmware\u000a39490329b234 qcom: vpu: add Gen2 firmware binary for Hawi\u000af1ea87d9cc84 qcom: vpu: add Gen2 firmware binary for Maili\u000ade45f8bef2ce linux-firmware: Update AMD cpu microcode\u000ab72356140866 iwlwifi: add Bz/Sc FW for core24.80-41 release\u000a092f5591c585 iwlwifi: Update Bz/Fm firmware for core24.80-41 release\u000a723c52333487 iwlwifi: Add Hr/Gf firmware for core24.80-41 release\u000a72caed25761a iwlwifi: update ty/So/Ma firmwares for core24.80-41 release\u000a0029ab7d3138 iwlwifi: Add cc/Qu/QuZ firmwares for core24.80-41 release\u000aca5fdc3e674b linux-firmware: mwifiex: add IW416 firmware\u000ae88807ffbf0f ath12k: WCN7850 hw2.0: update board-2.bin\u000a781bd88c531d ath12k: QCC2072 hw1.0: update board-2.bin\u000a4de2491cbe13 ci: add Qualcomm firmware version diff MR comment job\u000a4e1bb35244b7 qcom: sdx61: add missing firmware version\u000abd59c643be3c qcom: sdx35: add missing firmware version\u000ad04b22b2f7b1 qcom: aic100: add missing firmware versions\u000a77b75e7f7c09 qcom: qdu100: add missing firmware versions\u000a3cbed670aaa5 qcom: sdm845: add missing modem firmware version\u000ab259e2f9460c qcom: x1e80100: add missing Dell XPS 13 9345 DSP versions\u000a4d9d409cddcb qcom: add missing Adreno ZAP shader versions\u000a630e8b53cc2a contrib: report the version of the Qualcomm Bluetooth firmware\u000a28b24eb3bacf contrib: detect the version of Adreno GMU firmware\u000a0e45740a8632 contrib: detect the version of Adreno RGMU firmware\u000a968bab9bb0a8 contrib: detect the version of Adreno ZAP shaders\u000a4aeb44e73c5f contrib: detect the version of Adreno SQE and AQE microcode\u000a019260ca4ee3 contrib: report Iris video firmware versions in the WHENCE format\u000a30a63ce57b85 contrib: add Qualcomm firmware version scripts\u000a5d6ac99fb005 contrib: move common firmware script helpers to fw_helpers.py\u000a6a3381ca8301 qcom: use the WHENCE version format for the x1e80100 video firmware\u000a5dd792fbcbbc qca: separate the WCN685x uart firmware revisions\u000a16726a813864 qca: group the QCA61x4 USB firmware files\u000a8e96c7fb4935 qca: drop duplicate version lines\u000affce0cc01642 qca: fix the version of the QCA6698 Bluetooth firmware\u000aeedcf262a66a qca: fix the version of the WCN785x USB firmware\u000a828db6bf0dc9 qcom: fix the version of the a660 GMU firmware\u000ad77a7ff09172 qcom: fix the version of the Eliza SQE microcode\u000af35ac0f38f83 qcom: fix the version of the QCS615 ZAP shader\u000a837ae0e5becc qcom/shikra: link WiFi firmware from the ath10k subdir\u000a9a7c283fa003 Revert \"amdgpu: update GC 11.0.0 firmware\"\u000a0a5565a4a888 Revert \"amdgpu: update GC 11.0.0 firmware\"\u000af5e8adfa1e0c amdgpu: DMCUB updates for various ASICs\u000aa98a6daa9f4d intel: Update ibt-00a0-01a1-pci.ddc for BE211 - Whale Peak2 (WhP2)\u000a8fe920c980c3 ath11k: WCN6855 hw2.0: update board-2.bin\u000a30f83ae033e8 cirrus: cs42l45: Add CS42L45 SDCA codec firmware for Dell laptops\u000ac664be6ce9be qcom: add CDSP firmware for hawi platform\u000a10f09227a370 cirrus: cs42l45: Add CS42L45 SDCA codec firmware for Dell laptops\u000a2ded07e3da99 cirrus: cs35l63: Add Cirrus CS35L63 firmware mappings for some Dell laptops\u000ac50e97d36b10 QCA: Update Bluetooth firmware for QCC2072 UART interface: 1.1.0-00340 to 1.1.0-00355\u000a\u000aSigned-off-by: John Audia <therealgraysky@proton.me>\u000aLink: https://github.com/openwrt/openwrt/pull/26125\u000aSigned-off-by: Christian Marangi <ansuelsmth@gmail.com>\u000a",
        "date" : "2026-10-26 09:11:36 +0100",
        "id" : "4dbc40c0630fccabc67c5ac7f613e6793a1d690e",
        "msg" : "linux-firmware: update to 20261019",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/firmware/linux-firmware/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "tools/mold/Makefile"
        ],
        "commitId" : "85398d134e0cce59efbd3c6f384a2da3df8dbfce",
        "timestamp" : 1793003639000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "mold: bump to 2.42.1\u000a\u000aUpdate mold to 2.42.1\u000a\u000aChangelog:\u000ahttps://github.com/rui314/mold/releases/tag/v2.42.1\u000a\u000aThis is the last version of mold based on C++, newer versions are based\u000aon Rust which needs different build systems.\u000a\u000aSigned-off-by: Carsten Schuette <schuettecarsten@googlemail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26188\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:33:59 +0100",
        "id" : "85398d134e0cce59efbd3c6f384a2da3df8dbfce",
        "msg" : "mold: bump to 2.42.1",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "tools/mold/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
        ],
        "commitId" : "b771d55b76a8606146eb577e9f06f9647a33ea9a",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: give a shaped mqprio class ten milliseconds of burst\u000a\u000aAn mqprio class was programmed with a bucket of one frame. A sender's\u000abursts leave the class's queues empty between them, and the tokens that\u000aaccrue meanwhile are lost, so the class runs well below its rate. Size\u000athe bucket to ten milliseconds of the class's rate, as cpu_port_rate\u000aalready does.\u000a\u000aOn an AX3600 with SQM's hw_ppe.qos at 305/165 Mbit/s, a single TCP\u000adownload over IPv4 or IPv6 carries 278-284 Mbit/s instead of 226-268\u000aMbit/s (3 runs each), and loaded RTT to the server stays within 0.3 ms\u000aof idle.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "b771d55b76a8606146eb577e9f06f9647a33ea9a",
        "msg" : "qualcommax: qca_ppe: give a shaped mqprio class ten milliseconds of burst",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
        ],
        "commitId" : "1152a41775cabdbae6bce089d3cc10a40ccb4c2d",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: record VSI 0 for a port outside a bridge\u000a\u000aqca_ppe_setup() and qca_ppe_port_bridge_leave() bind a port outside a\u000abridge to VSI 0 but record PPE_VSI_INVALID for it in port_vsi[]. Record\u000athe VSI the port is bound to. VSI 0 is reserved at setup, so no bridge\u000acompares equal to it.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "1152a41775cabdbae6bce089d3cc10a40ccb4c2d",
        "msg" : "qualcommax: qca_ppe: record VSI 0 for a port outside a bridge",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
        ],
        "commitId" : "4a2fc6517d6a18d749d53e0e1907fcf69cd76487",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: size a shaped port's queue from the tbf limit\u000a\u000aA shaped port's queue limit is 1 ms of the rate, too shallow to hold one\u000aflow at that rate, and a static limit per hash queue gives one flow a\u000aquarter of the depth at most. Take the depth from the tbf limit, read\u000afrom the bfifo tbf keeps it in, falling back to 1 ms, and set it before\u000athe rate is programmed so a refused rate restores the previous limit.\u000aEach shaped port's band queues share a dynamic admission group of that\u000adepth, and the queues of its rate-limited mqprio classes share another\u000aof 10 ms of each queue's rate. The classes of several ports at the same\u000adepth share one group, as each carries a share of the same download, such\u000aas every LAN port's band below one WAN rate. Three groups are free; a\u000afurther bottleneck splits its depth into static per-queue limits. Every\u000asuch queue has FORCE_AC set and the largest dynamic weight.\u000a\u000aMeasured on IPQ8074 at 50 Mbit/s with a 312 KB limit, one TCP flow to a\u000aserver 171 ms away, n=3: 38-40 Mbit/s with the depth shared, 14-17 Mbit/s\u000awith it split per queue. With SQM shaping the WAN and the download bands\u000aof lan1, lan2 and lan3, the three bands share one group and the WAN keeps\u000aanother, where the third LAN port fell back to static limits before.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "4a2fc6517d6a18d749d53e0e1907fcf69cd76487",
        "msg" : "qualcommax: qca_ppe: size a shaped port's queue from the tbf limit",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/patches-6.18/0953-net-ethernet-qca-add-EDMA.patch",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/patches-6.18/0952-net-ethernet-qca-add-ppe.patch"
        ],
        "commitId" : "3844ee698bd81d362a2830985fe81603a3544828",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: add PPE flow table access and debugfs dump\u000a\u000aThe PPE flow, host, nexthop, egress L3 interface and public address tables\u000aare unused. Add their register definitions and op engine accessors, enable\u000athe lookup with forward on miss so nothing changes yet, set the bucket\u000afunction of both hash blocks explicitly, and dump the flow table through\u000adebugfs. An entry is read back through the op engine because an IPv6 entry\u000aspans two flat slots, and a valid host entry is removed through the host op\u000aengine, not by zeroing it. Table sizes are per-SoC data, and the age period\u000afollows the board's PPE clock rate.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "3844ee698bd81d362a2830985fe81603a3544828",
        "msg" : "qualcommax: qca_ppe: add PPE flow table access and debugfs dump",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0953-net-ethernet-qca-add-EDMA.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "add",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0952-net-ethernet-qca-add-ppe.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/patches-6.18/0953-net-ethernet-qca-add-EDMA.patch",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c",
          "target/linux/qualcommax/patches-6.18/0952-net-ethernet-qca-add-ppe.patch",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_vlan.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
        ],
        "commitId" : "882844eb2319d584df9970d07ab383cb7d73c45d",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: add netfilter flowtable hardware offload\u000a\u000aRouted and NAT connections are forwarded by the CPU although the PPE has a\u000aflow table. Implement flowtable offload as mtk_ppe does: each rule becomes\u000aone route, SNAT or DNAT entry with shared, refcounted host, nexthop,\u000aegress L3 interface and public address entries, and the stats callback\u000areads the entry's age and counters and credits the bridge and VLAN uppers.\u000aEach egress L3 interface owns its index and carries the egress MTU,\u000abecause a nexthop naming interface 0 sent every LAN-to-WAN PPPoE packet to\u000athe CPU as L3_EXP_MTU_DF_FAIL, and a PPPoE-over-802.1Q uplink gets a\u000adedicated VSI with VLAN translation and a PPPoE session entry so its\u000adownload reaches the flow lookup. Rules rewriting both addresses, IPv6\u000aNAT, non-switch ingress and untranslated ingress tags stay in software,\u000afragments bypass the lookup, and flows are purged when their VSI is\u000areleased, a port's MTU changes or the flowtable block is released.\u000aDSA hands a flowtable bound to a user port to the conduit, as for\u000amtk_eth, and qca_edma passes it on to the switch.\u000a\u000aOn IPQ8074 with a PPPoE-over-VID7 uplink, both directions of an offloaded\u000aconnection stay off the conduit. A routed flow that leaves by its ingress\u000aport, a VLAN on a stick for one, is forwarded by its entry as well:\u000arouted TCP between two subnets on one port ran at 866-882 Mbit/s with the\u000areceive softirq rate at its idle level (3 runs).\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "882844eb2319d584df9970d07ab383cb7d73c45d",
        "msg" : "qualcommax: qca_ppe: add netfilter flowtable hardware offload",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0952-net-ethernet-qca-add-ppe.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_vlan.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0953-net-ethernet-qca-add-EDMA.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
        ],
        "commitId" : "46e3391b905f696d4d932c62effceaa78275595f",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: offload GRE flowtable flows\u000a\u000aA GRE flow has no ports key, and the driver refuses it. Encode it as a\u000athree-tuple entry whose protocol field names no L4 protocol and which\u000acarries the IP protocol where the source port would be. The flowtable never\u000aoffloads NATed GRE, so these entries only route. fw4 offers only tcp and\u000audp, so a stock config needs a flow add rule that names gre.\u000a\u000aOn IPQ8074 IPv4 and IPv6 GRE packets go through one hardware entry.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "46e3391b905f696d4d932c62effceaa78275595f",
        "msg" : "qualcommax: qca_ppe: offload GRE flowtable flows",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
        ],
        "commitId" : "dbdb7aa6d76574c2c3a7c0f129d52ee88e152e64",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: prioritise sparse flows on a shaped port\u000a\u000aOn a shaped port a low-rate flow shares the bulk FIFO, takes its loss rate\u000aand recovers by RTO, so the latency probe of a speed test stalls. Use each\u000auser port's four unused unicast queues as a list one strict priority above\u000athe download band, inside its shaper, reached from flow priority profile\u000a12. A work every 100 ms re-adds a flow with that profile after ten periods\u000aunder eight packets, and back to its own profile once it exceeds eight in a\u000aperiod; the same pass credits counter deltas to the upper interfaces. The\u000asparse_flows module parameter turns it off.\u000a\u000aMeasured on IPQ8074 with a PPPoE uplink shaped to 305/165 Mbit/s, wired:\u000aLibreQoS +1/+1/+1 ms, against +1 ms in nine of fourteen runs before.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "dbdb7aa6d76574c2c3a7c0f129d52ee88e152e64",
        "msg" : "qualcommax: qca_ppe: prioritise sparse flows on a shaped port",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/airoha/patches-6.18/161-01-v7.2-net-airoha-Introduce-airoha_gdm_dev-struct.patch",
          "target/linux/airoha/patches-6.18/915-01-net-netfilter-flowtable-Add-the-capability-to-offloa.patch",
          "target/linux/generic/pending-6.18/708-netfilter-flowtable-tear-down-direct-xmit-flows-when.patch",
          "target/linux/airoha/patches-6.18/099-08-v6.19-net-airoha-ppe-Flush-PPE-SRAM-table-during-PPE-setup.patch",
          "target/linux/generic/pending-6.18/708-00-net-mlx5e-ignore-FLOW_ACTION_PRIORITY-on-flowtable-offload.patch",
          "target/linux/generic/pending-6.18/736-04-net-ethernet-mediatek-fix-ppe-flow-accounting-for-L2.patch",
          "target/linux/airoha/patches-6.18/165-01-v7.2-net-airoha-Remove-private-net_device-pointer-in-airo.patch",
          "target/linux/airoha/patches-6.18/191-v7.2-net-airoha-add-preliminary-support-to-configure-tx-h.patch",
          "target/linux/generic/pending-6.18/708-netfilter-flowtable-carry-a-priority-into-the-offload.patch",
          "target/linux/airoha/patches-6.18/134-v7.1-net-airoha-Delay-offloading-until-all-net_devices-ar.patch",
          "target/linux/airoha/patches-6.18/165-05-v7.2-net-airoha-Support-multiple-LAN-WAN-interfaces-for-h.patch",
          "target/linux/generic/hack-6.18/650-netfilter-add-xt_FLOWOFFLOAD-target.patch",
          "target/linux/airoha/patches-6.18/161-02-v7.2-net-airoha-Move-airoha_qdma-pointer-in-airoha_gdm_de.patch",
          "target/linux/generic/pending-6.18/795-01-net-ethernet-mtk_ppe_offload-use-rhashtable_lookup_f.patch",
          "target/linux/generic/pending-6.18/795-03-net-ethernet-mtk_ppe_offload-set-output-device-befor.patch",
          "target/linux/airoha/patches-6.18/185-v7.2-net-airoha-Fix-error-handling-in-airoha_ppe_flush_sr.patch",
          "target/linux/airoha/patches-6.18/915-02-net-airoha-Set-hw-QoS-parameter-according-to-the-pac.patch"
        ],
        "commitId" : "9e692c0e7b52334245a65e2009464238a3b112ab",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "generic: add FLOW_ACTION_PRIORITY to the flowtable offload\u000a\u000aAdd 708, the netfilter-devel posting prepared for nf-next: the flowtable\u000astores the priority a rule set before \"flow add\", applies it in the\u000asoftware fast path and passes it to drivers as FLOW_ACTION_PRIORITY. An\u000aIPv4 priority that ip_forward() derived from the TOS is not stored,\u000asince it belongs to each packet; the fast path derives it per packet\u000ainstead. 708-00 makes mlx5 ignore the action on flowtable flows so they\u000astay offloaded. qca_ppe uses it in the next patch. The airoha, mediatek\u000aand xt_FLOWOFFLOAD patches are refreshed.\u000a\u000aLink: https://lore.kernel.org/netfilter-devel/20261004171636.3545085-1-julius@bairaktaris.de/\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "9e692c0e7b52334245a65e2009464238a3b112ab",
        "msg" : "generic: add FLOW_ACTION_PRIORITY to the flowtable offload",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/patches-6.18/191-v7.2-net-airoha-add-preliminary-support-to-configure-tx-h.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/708-netfilter-flowtable-carry-a-priority-into-the-offload.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/patches-6.18/165-01-v7.2-net-airoha-Remove-private-net_device-pointer-in-airo.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/708-00-net-mlx5e-ignore-FLOW_ACTION_PRIORITY-on-flowtable-offload.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/patches-6.18/161-01-v7.2-net-airoha-Introduce-airoha_gdm_dev-struct.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/patches-6.18/915-01-net-netfilter-flowtable-Add-the-capability-to-offloa.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/795-01-net-ethernet-mtk_ppe_offload-use-rhashtable_lookup_f.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/hack-6.18/650-netfilter-add-xt_FLOWOFFLOAD-target.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/patches-6.18/134-v7.1-net-airoha-Delay-offloading-until-all-net_devices-ar.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/patches-6.18/161-02-v7.2-net-airoha-Move-airoha_qdma-pointer-in-airoha_gdm_de.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/708-netfilter-flowtable-tear-down-direct-xmit-flows-when.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/patches-6.18/915-02-net-airoha-Set-hw-QoS-parameter-according-to-the-pac.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/795-03-net-ethernet-mtk_ppe_offload-set-output-device-befor.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/patches-6.18/165-05-v7.2-net-airoha-Support-multiple-LAN-WAN-interfaces-for-h.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/patches-6.18/185-v7.2-net-airoha-Fix-error-handling-in-airoha_ppe_flush_sr.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/736-04-net-ethernet-mediatek-fix-ppe-flow-accounting-for-L2.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/patches-6.18/099-08-v6.19-net-airoha-ppe-Flush-PPE-SRAM-table-during-PPE-setup.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
        ],
        "commitId" : "3a26e63cc6fd5db4285b55e7e813b329894a0250",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: offload FLOW_ACTION_PRIORITY to the flow entry\u000a\u000aAn offloaded flow never returns to the CPU, so its queue cannot follow the\u000aruleset's classification. Write the flowtable's FLOW_ACTION_PRIORITY into\u000athe entry's priority profile, which outranks DSCP and whose table maps each\u000aprofile to the same priority; profile 0 leaves DSCP to decide. A priority\u000aabove PPE_QOS_MAX_PRI, such as the 802.1d tags of 256 and up that Wi-Fi\u000astamps take, is ignored and leaves the queue to DSCP, rather than keeping\u000athe whole flow in software.\u000a\u000aOn IPQ8074 with meta priority set 0:5, IPv6 and IPv4 NAT packets of the\u000aflow leave on queue 5, and an unmarked flow is still classified by DSCP.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "3a26e63cc6fd5db4285b55e7e813b329894a0250",
        "msg" : "qualcommax: qca_ppe: offload FLOW_ACTION_PRIORITY to the flow entry",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/airoha/patches-6.18/915-01-net-netfilter-flowtable-Add-the-capability-to-offloa.patch",
          "target/linux/generic/pending-6.18/709-netfilter-flowtable-advertise-the-vlan-match-in-used_keys.patch"
        ],
        "commitId" : "1b90dab6216e8b8d254bf6edd80d04b6673cfad1",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "generic: advertise the flowtable vlan match\u000a\u000anf_flow_rule_match() builds a vlan match but does not set it in\u000aused_keys, so drivers never see the tag. 709 sets the bits; it is v3 as\u000asent to netfilter-devel. The airoha 915-01 patch is refreshed.\u000a\u000aLink: https://lore.kernel.org/netfilter-devel/20260913104251.648421-1-julius@bairaktaris.de/\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "1b90dab6216e8b8d254bf6edd80d04b6673cfad1",
        "msg" : "generic: advertise the flowtable vlan match",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/patches-6.18/915-01-net-netfilter-flowtable-Add-the-capability-to-offloa.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/709-netfilter-flowtable-advertise-the-vlan-match-in-used_keys.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
        ],
        "commitId" : "59c1ffad8b370bd334478d37753b19f5210f8b5e",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: map the flowtable's ingress VLAN to a VSI\u000a\u000aA rule whose ingress frame keeps an 802.1Q tag now carries the tag as a\u000amatch key, but a flow entry has no tag field, only the VSI. Map the tag to\u000athe uplink's VSI on a PPPoE port or the VLAN's VSI on a bridge member; a\u000atag with no such classification, or a second tag, stays in software. Before\u000athe previous patch the key never arrived and a tagged ingress was matched\u000aon the PVID's VSI.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "59c1ffad8b370bd334478d37753b19f5210f8b5e",
        "msg" : "qualcommax: qca_ppe: map the flowtable's ingress VLAN to a VSI",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
        ],
        "commitId" : "114c4091f14dba9e2aca1a299e1d819d25cb29d7",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: send slow-path packets of offloaded flows to the CPU\u000a\u000aThe flowtable matches every TCP flow with FIN and RST clear, but the driver\u000aignored FLOW_DISSECTOR_KEY_TCP and the hardware forwarded the teardown, so\u000aan offloaded connection only ended on the idle timeout. The software fast\u000apath also leaves IPv4 options, IPv6 extension headers and short TCP or UDP\u000aheaders to the stack, and a SYN on a closing flow tears it down. Program\u000aTCP flag exceptions for FIN, SYN and RST and enable them for routed flow\u000ahits with the header exceptions the software fast path leaves to the\u000astack, as qca-nss-ppe does: IPv4 options, IPv6 extension headers, a TTL\u000aor hop limit about to expire, fragments, and truncated or malformed L2,\u000aPPPoE, IP and L4 headers. Each redirects the packet to the CPU and leaves the flow entry\u000ain place, and every other exception is cleared. Accept the TCP key only\u000awhen every flag it excludes is one of the trapped ones.\u000a\u000aOn IPQ8074, over IPv4 and IPv6, a flow leaves hardware as the connection\u000acloses, and without the trap it stays offloaded until the idle timeout.\u000aPackets with IPv4 options, an IPv6 hop-by-hop header or a short TCP or\u000aUDP header on an offloaded flow reach the CPU, 3 of 3 each, and the flow\u000aentry stays (one run). 200 SYNs on an offloaded flow reach the CPU (two\u000aruns).\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "114c4091f14dba9e2aca1a299e1d819d25cb29d7",
        "msg" : "qualcommax: qca_ppe: send slow-path packets of offloaded flows to the CPU",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
        ],
        "commitId" : "aaa6875d7361b319242bb7769dc39cc84593f592",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: use all sixteen PPPoE session entries\u000a\u000aThe uplink state was one per port and the PPPoE session table was indexed\u000aby port, so a port carried one session on one VLAN and a re-dial overwrote\u000athe session that older flows still matched on. Keep uplinks per port and\u000aVLAN, each with its own VSI and L3 interface, and give every session its\u000aown refcounted entry pointing at its uplink. Like the kernel's session\u000alookup, an entry matches the server's address too, so a frame with the\u000asession id from another source on the uplink stays in software. The same\u000aid from one server on two VLANs of one port is refused, as the hardware\u000acannot tell them apart.\u000a\u000aOn IPQ8074, with two sessions from a PPPoE server on one port, each session\u000aholds its own entry and the connections over both are offloaded. On a\u000aTelekom PPPoE uplink the entry reads back the server's address, and\u000adownloads stay offloaded at 260-284 Mbit/s behind a 305 Mbit/s shaper\u000awith the CPU idle (two servers, 2 runs each).\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "aaa6875d7361b319242bb7769dc39cc84593f592",
        "msg" : "qualcommax: qca_ppe: use all sixteen PPPoE session entries",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
        ],
        "commitId" : "3945d5a8ed3b4f2140c42c0e7ca9a4f029fa811d",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: route a VLAN that no bridge VLAN classifies\u000a\u000aA VLAN device on a port outside any bridge, such as a DHCP WAN on\u000awan.<vid> or lan1.20, or on a port of a bridge that does not filter\u000aVLANs, has no VSI its tagged frames are classified into, so a flow\u000aarriving on it was refused as ingress_vlan_domain. Give such a port and\u000aVLAN the uplink a tagged PPPoE WAN uses, without a session, whichever\u000adirection of the flow is installed first. The L3 interface terminates\u000aPPPoE only once a session is attached to it. The offload debugfs file\u000alists the uplinks in use with the number of flows on each.\u000a\u000aOn IPQ8074, TCP routed both ways between VLANs 20 and 30 on one port of\u000aa bridge that does not filter VLANs runs at 933-936 Mbit/s combined with\u000athe softirq share of the CPU at 0% and no flow refused (3 runs), against\u000a907 Mbit/s at 21% with 53 flows refused before (1 run).\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "3945d5a8ed3b4f2140c42c0e7ca9a4f029fa811d",
        "msg" : "qualcommax: qca_ppe: route a VLAN that no bridge VLAN classifies",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
        ],
        "commitId" : "f7abd7bcaa5191804fc44e96f5a6a28ffb276c77",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: add devlink resources for flow, PPPoE and meters\u000a\u000aThe flow table, the PPPoE session table and the ACL meters are the\u000atables the offload runs out of first, but devlink only reports the L2\u000atables. Register them as devlink resources with occupancy, so that\u000a\"devlink resource show\" says how full each one is.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "f7abd7bcaa5191804fc44e96f5a6a28ffb276c77",
        "msg" : "qualcommax: qca_ppe: add devlink resources for flow, PPPoE and meters",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_acl.c"
        ],
        "commitId" : "713941a1ba8a60ca881aacd2b2ad0eb807200a6f",
        "timestamp" : 1793004286000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: default small_pkt_len to the qca-ppe-qos value\u000a\u000aqca-ppe-qos sets small_pkt_len to 1000, while the driver defaults to\u000a256. A module loaded without the package then leaves latency probes,\u000alarger DNS answers and game state in the bulk queue. Use 1000 as the\u000adriver default, which stays below a full-size segment on any path whose\u000aMSS is above 1000.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:46 +0100",
        "id" : "713941a1ba8a60ca881aacd2b2ad0eb807200a6f",
        "msg" : "qualcommax: qca_ppe: default small_pkt_len to the qca-ppe-qos value",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_acl.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
        ],
        "commitId" : "80884df9a23f024a574421e260868deee403a154",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_edma: keep the ring indices the driver owns in software\u000a\u000aThe data path read every ring index back from the engine through the\u000aregister map, including the producer index of the transmit and fill rings\u000aand the consumer index of the completion and receive rings, which only the\u000adriver moves. Each frame sent cost two register reads and a doorbell\u000awrite, and each poll about a dozen reads.\u000a\u000aKeep those indices in the queue, read the engine only for the indices it\u000amoves, and read the transmit consumer index only when the cached one\u000areports too little room. Write the transmit doorbell once per batch when\u000athe stack sets xmit_more, and always before the queue stops or a frame is\u000adropped. Access the index registers with readl() and writel(), which\u000aorder against the descriptor memory like the register map did.\u000a\u000aRouted Wi-Fi upload through a 1x1 station takes 4% fewer cycles per\u000apacket and 64-byte UDP upload 5% fewer (2 runs each).\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "80884df9a23f024a574421e260868deee403a154",
        "msg" : "qualcommax: qca_edma: keep the ring indices the driver owns in software",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/ipq807x/base-files/etc/init.d/smp_affinity",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
        ],
        "commitId" : "62e4e6ac5d2b2066c523dea20fed4c1a19b4531d",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_edma: poll in softirq context\u000a\u000aThreaded NAPI costs a context switch per poll, and the driver already\u000abinds each queue's interrupts to its own CPU, so softirq polling spreads\u000athe load the same way. Routed TCP from a wired host to a 2x2 HE160 station\u000atakes 11% fewer CPU cycles per packet upstream and 3% fewer downstream\u000awith one flow, 20% and 7% fewer with four flows (2 runs each). Threaded\u000aNAPI stays available through /sys/class/net/<dev>/threaded.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "62e4e6ac5d2b2066c523dea20fed4c1a19b4531d",
        "msg" : "qualcommax: qca_edma: poll in softirq context",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/ipq807x/base-files/etc/init.d/smp_affinity"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
        ],
        "commitId" : "8d4ec787822d48b749b4957aa799b147a2821c33",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_edma: sync only the longest frame for the device\u000a\u000aThe page pool synced the whole receive buffer for the device each time a\u000apage was recycled, although no frame is longer than the MTU allows. Size\u000athe sync to the longest frame the ports admit and drop a longer one that\u000athe PPE still passes to the CPU, counting it as a length error. Cache\u000amaintenance on a routed 900 Mbit/s Wi-Fi downlink falls from 4.6% to\u000a3.6% of the CPU time (3 runs).\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "8d4ec787822d48b749b4957aa799b147a2821c33",
        "msg" : "qualcommax: qca_edma: sync only the longest frame for the device",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
        ],
        "commitId" : "3ce1d9eb181f9f2a851d84f9d6a6a9efdcbc0219",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_edma: read the next frame's headers ahead\u000a\u000aEvery received frame stalled on its first read of the preheader and the\u000aheaders behind it, which the receive sync had just evicted from the\u000acache. Read the next descriptor while the current frame is processed,\u000async its frame for the CPU and prefetch its first two cache lines.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "3ce1d9eb181f9f2a851d84f9d6a6a9efdcbc0219",
        "msg" : "qualcommax: qca_edma: read the next frame's headers ahead",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
        ],
        "commitId" : "6d5c2446833e24b6e8dd1883b9b46805b18c99e2",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_edma: mark frames the switch forwarded itself\u000a\u000aThe out-of-band tagger never sets offload_fwd_mark, so the bridge floods\u000aevery broadcast, multicast and unknown unicast frame from a switch port\u000aagain in software, after the PPE has flooded it in hardware. Frames the\u000aswitch forwarded or flooded to the CPU carry CPU code 0 in the receive\u000apreheader; hand those up with a METADATA_HW_PORT_MUX dst naming their\u000aport, as mtk_eth does, so DSA marks them and the tagger's skb extension\u000ais not allocated. A frame the switch trapped keeps its CPU code, goes\u000athrough the tagger and stays unmarked, so the bridge still forwards it.\u000a\u000aOn an AX3600, 1000 broadcasts sent on lan2 left lan1 and lan3 2000 times\u000aeach before and 1000 times after (3 runs), and 256 IGMP reports, which\u000athe switch traps, left each of them 256 times (3 runs).\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "6d5c2446833e24b6e8dd1883b9b46805b18c99e2",
        "msg" : "qualcommax: qca_edma: mark frames the switch forwarded itself",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
        ],
        "commitId" : "6914ff44db97010e5ae0d5da497f1b3f752f9312",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_edma: copy a transmitted head only when it is shared\u000a\u000aTransmit reallocated the head of every cloned skb before writing the\u000apreheader into its headroom, although a clone whose header was released,\u000aas TCP's are, may have its headroom written. Use skb_cow_head(), which\u000acopies the head only when the header is shared or the headroom is short.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "6914ff44db97010e5ae0d5da497f1b3f752f9312",
        "msg" : "qualcommax: qca_edma: copy a transmitted head only when it is shared",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/patches-6.18/0953-net-ethernet-qca-add-EDMA.patch",
          "target/linux/qualcommax/patches-6.18/0952-net-ethernet-qca-add-ppe.patch"
        ],
        "commitId" : "f3aac46ea7bc193dd06685f8294754abb6a1834e",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: declare what the PPE and EDMA drivers build on\u000a\u000aQCOM_80211AX_PPE registers a DSA switch on the out-of-band tag, takes its\u000aPCS from the UNIPHY driver and its registers through regmap, and QCOM_EDMA\u000auses the out-of-band tag's skb extension and page_pool, but neither says\u000aso: they only build because the target config enables all of it. Add the\u000adependencies and selects.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "f3aac46ea7bc193dd06685f8294754abb6a1834e",
        "msg" : "qualcommax: declare what the PPE and EDMA drivers build on",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0953-net-ethernet-qca-add-EDMA.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0952-net-ethernet-qca-add-ppe.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/pcs/pcs-qca-uniphy.c",
          "target/linux/qualcommax/files/include/linux/pcs/pcs-qca-uniphy.h"
        ],
        "commitId" : "62792fff96994a03981098b80d62c6c6cdeec06f",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: pcs-qca-uniphy: fix macro and clock callback slips\u000a\u000ato_qca_uniphy_pcs() ignored its argument and ended in a semicolon, the\u000aport clock index macros lacked outer parentheses, the reference clock's\u000ainit fields were chained with commas, and recalc_rate returned -EINVAL as\u000aa rate for an unknown UNIPHY. Use the argument, parenthesise the macros,\u000aend the statements and report a rate of 0. Drop the unused rst_ahb.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "62792fff96994a03981098b80d62c6c6cdeec06f",
        "msg" : "qualcommax: pcs-qca-uniphy: fix macro and clock callback slips",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/include/linux/pcs/pcs-qca-uniphy.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/pcs/pcs-qca-uniphy.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
        ],
        "commitId" : "c6a86d76b99c560f227c6886624bd237185f362d",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_edma: correct two comments\u000a\u000aThe transmit completion walk carried two comments saying the same thing,\u000aand the checksum comment read as if the driver accepted a padded frame's\u000asum, where it leaves the frame to software. Merge the first pair and\u000arestate the second.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "c6a86d76b99c560f227c6886624bd237185f362d",
        "msg" : "qualcommax: qca_edma: correct two comments",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
        ],
        "commitId" : "bbb0d915e054c5482f23a06741b7494d565e9ace",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: keep a group's members when its lookup times out\u000a\u000aport_mdb_add starts a group from the CPU port alone on any lookup\u000aerror, so an operation that timed out rewrote an existing group with\u000aonly the CPU and the new port, dropping every other member. Start afresh\u000aonly when the group does not exist and pass any other error up.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "bbb0d915e054c5482f23a06741b7494d565e9ace",
        "msg" : "qualcommax: qca_ppe: keep a group's members when its lookup times out",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
        ],
        "commitId" : "91ccd0713d44f687979f65305266c4881a704fdc",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: fold the CPU port's queue counters periodically\u000a\u000aThe fold work visits user ports only, so the CPU port's queue counters,\u000a32 bits of packets and 40 of bytes, were folded only when ethtool read\u000athem. At 1 Gbit/s the byte counter wraps in about 2.4 hours, and two\u000awraps between reads lose a whole period. Fold every available port.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "91ccd0713d44f687979f65305266c4881a704fdc",
        "msg" : "qualcommax: qca_ppe: fold the CPU port's queue counters periodically",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
        ],
        "commitId" : "2ebcefb7526b24da2cd70221a6dbbb42b11a00f0",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: share the FDB operation code\u000a\u000aThe unicast and multicast FDB writes repeated the op engine sequence, the\u000aMAC packing was written out three times, and the LAG FDB ops copied the\u000aport ones apart from the destination. The LAG copies also took flow_lock,\u000awhich guards none of the FDB state; fdb_lock already serialises the op\u000aengine. Share the op engine write, the MAC packing and one FDB set helper\u000athat the port and LAG ops call.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "2ebcefb7526b24da2cd70221a6dbbb42b11a00f0",
        "msg" : "qualcommax: qca_ppe: share the FDB operation code",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
        ],
        "commitId" : "fd5484ac4924d7dd21bc0df7329e5d149ac6c317",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: drop dead checks and accept an ethernet-ports node\u000a\u000appe_vlan_find() was declared twice, and four ethtool callbacks checked\u000athe port against num_ports, which DSA never exceeds. Probe and the\u000aIPQ6018 mux setup looked for a \"ports\" node only, while the binding and\u000athe DSA core also accept \"ethernet-ports\". Drop the duplicate and the\u000adead checks, and look for both names.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "fd5484ac4924d7dd21bc0df7329e5d149ac6c317",
        "msg" : "qualcommax: qca_ppe: drop dead checks and accept an ethernet-ports node",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
        ],
        "commitId" : "680b2858345d19bcea96d211fe482a4ad349956d",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: count only switched traffic in offloaded qdisc stats\u000a\u000aThe root tbf, ets and prio stats add the MAC's transmit counters to the\u000aqdisc's, but the MAC also sends every frame the host put through that\u000aqdisc, which the qdisc has counted itself, so host traffic was reported\u000atwice. Subtract what the host sent on the port over the same interval.\u000a\u000aOn a WAN port with an offloaded tbf, the qdisc reported the MAC's bytes\u000aplus its fq_codel child's before, and reports 177955309 bytes against the\u000aMAC's 177957143 after.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "680b2858345d19bcea96d211fe482a4ad349956d",
        "msg" : "qualcommax: qca_ppe: count only switched traffic in offloaded qdisc stats",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
        ],
        "commitId" : "fcd37e330bed77dcb73c9d717852aaab58988322",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: refuse an mqprio class that splits a hashed band\u000a\u000aA priority selects a band of four queues and the flow hash picks the\u000aqueue in it, but mqprio's map was checked against priority i leaving on\u000aqueue i, a layout from before the hash spread. A class of one queue then\u000apassed the check and shaped a quarter of its priority's flows, chosen\u000aby hash. Require each class to own the whole band its priorities select.\u000ahw_ppe's map, 8@0 4@8, still passes.\u000a\u000aFixes: 3881df344eb (\"qualcommax: qca_ppe: spread flows across queues by RSS hash\")\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "fcd37e330bed77dcb73c9d717852aaab58988322",
        "msg" : "qualcommax: qca_ppe: refuse an mqprio class that splits a hashed band",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
        ],
        "commitId" : "8948da32427e35357867e61a0dd530e5350bccbb",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: keep a replacing mqprio's offload\u000a\u000atc qdisc replace of an offloaded mqprio installs the new qdisc first and\u000athen destroys the old one, whose offload removal carries no qdisc and\u000acleared the shapers and the transmit queue mapping the new qdisc had\u000ajust set. Count the port's offloaded mqprio qdiscs and ignore a removal\u000awhile another one is installed.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "8948da32427e35357867e61a0dd530e5350bccbb",
        "msg" : "qualcommax: qca_ppe: keep a replacing mqprio's offload",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
        ],
        "commitId" : "6b9c6c5b6cb03d2cccd7fe42b446008e14414e0b",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: look a port's scheduler layout up in one place\u000a\u000aTen functions searched port_l0[] for the port with the same loop. Give\u000athe search a helper.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "6b9c6c5b6cb03d2cccd7fe42b446008e14414e0b",
        "msg" : "qualcommax: qca_ppe: look a port's scheduler layout up in one place",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
        ],
        "commitId" : "94b80939378466333f918750b8fc40157038d85d",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: refuse mqprio frame preemption\u000a\u000amqprio's preemptible traffic classes were accepted and ignored. The MACs\u000ahave no frame preemption, so refuse them.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "94b80939378466333f918750b8fc40157038d85d",
        "msg" : "qualcommax: qca_ppe: refuse mqprio frame preemption",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_acl.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_debugfs.c"
        ],
        "commitId" : "fee126ace8a35af26aff3d965253a902a6836f3d",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: correct stale and wrong comments\u000a\u000aSeveral comments no longer matched the code: the qdisc band map claimed\u000anothing is programmed, the highest classifier priority was explained by a\u000anode sharing that was removed, the shaper state was described as tbf only,\u000athe root tbf comment sat above the gred code, the CPU port's admission\u000acomment said its scheduler is not built, and the ACL comment had ethtool\u000ainserting without rtnl, which it holds. Others narrated history or said\u000aFIXME. Correct or trim them.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "fee126ace8a35af26aff3d965253a902a6836f3d",
        "msg" : "qualcommax: qca_ppe: correct stale and wrong comments",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_acl.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_debugfs.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
        ],
        "commitId" : "dd1227705a03ba479753267362823bbfca39b55a",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_edma: read a descriptor in one access\u000a\u000aThe descriptor rings are uncached, and the receive peek and the transmit\u000acompletion walk read a descriptor's address and status as separate 32-bit\u000aloads, the completion walk its status up to three times. Read both words\u000awith one 64-bit load.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "dd1227705a03ba479753267362823bbfca39b55a",
        "msg" : "qualcommax: qca_edma: read a descriptor in one access",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
        ],
        "commitId" : "2ca23dee6693fe78d5432d8e9fc3aa390d33d445",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_edma: prefetch the next segment of a frag_list frame\u000a\u000aCounting the descriptors of a frag_list frame walks its segments, and\u000aeach one misses on the skb and then on its shared info. Prefetch the next\u000asegment while the current one is counted.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "2ca23dee6693fe78d5432d8e9fc3aa390d33d445",
        "msg" : "qualcommax: qca_edma: prefetch the next segment of a frag_list frame",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_vlan.c"
        ],
        "commitId" : "33f270e580676520e2d8b4b0a4c9cf8b5a67c989",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: give a PVID-classified frame the VLAN's VID\u000a\u000aOn a VLAN-aware bridge, a frame that arrives untagged on a port and is\u000aclassified into its PVID VLAN carries no VID, so a port that egresses the\u000aVLAN tagged sends it with VID 0. Unicast between an untagged and a tagged\u000aport of the same VLAN therefore never arrives. Let the PVID rule add the\u000aVLAN's VID to the frame.\u000a\u000aOn an AX3600 with lan1 untagged in VLAN 1 and lan2 carrying VLAN 1\u000atagged, the PC's frames left lan2 tagged with VID 0 and its ping to a host\u000abehind lan2 failed; with the VID added, ping and TCP pass both ways.\u000a\u000aFixes: 142104bb90b (\"qualcommax: add PPE driver\")\u000aLink: https://github.com/openwrt/openwrt/issues/25904\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "33f270e580676520e2d8b4b0a4c9cf8b5a67c989",
        "msg" : "qualcommax: qca_ppe: give a PVID-classified frame the VLAN's VID",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_vlan.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/patches-6.18/0966-net-dsa-tag_oob-let-the-switch-send-frames-it-routed-to-the-CPU.patch",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
        ],
        "commitId" : "00ad5b53846b3a0ee386804a75f797c667167289",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: route flows to Wi-Fi through the CPU port\u000a\u000aA flow out of a device the switch cannot reach, such as a Wi-Fi\u000ainterface, was left to the software flowtable. Offload it with the CPU\u000aport as the egress port: the PPE routes and translates it and rewrites\u000athe Ethernet header, and the frame reaches the CPU finished, with the\u000aindex of the flow it matched in the receive preheader. qca_edma hands\u000asuch frames to the switch driver ahead of GRO, which queues them on the\u000aflow's egress device, so its qdisc, AQL and airtime fairness see them as\u000abefore. Routed TCP to a 2x2 HE160 station costs 27% fewer CPU cycles per\u000apacket over IPv4 (2 runs) and 23% fewer over IPv6 (1 run). The cpu_xmit\u000amodule parameter turns it off.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "00ad5b53846b3a0ee386804a75f797c667167289",
        "msg" : "qualcommax: qca_ppe: route flows to Wi-Fi through the CPU port",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          },
          {
            "editType" : "add",
            "file" : "target/linux/qualcommax/patches-6.18/0966-net-dsa-tag_oob-let-the-switch-send-frames-it-routed-to-the-CPU.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
        ],
        "commitId" : "d6c75fb80965aa1b68d5333549ada9efc6cf151e",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: read an FDB lookup's entry before retiring its result\u000a\u000aThe FDB read results queue up: the data registers show the oldest, and\u000areading the result register retires it. The driver polled the result\u000aregister and then read the data, which by then was zero, so every\u000alookup missed. A port_mdb_add therefore always started the group from\u000athe CPU port alone and added another entry for the same group, and a\u000agroup with members on two ports was split over entries that each named\u000aone of them.\u000a\u000aRead the data before the result register in each poll, so the data read\u000ajust before the result that names the operation is its entry.\u000a\u000aOn an AX3600 with IGMP snooping, a group joined from lan1 and lan2 had\u000asix hardware entries, naming CPU and lan1 or CPU and lan2, and lan1\u000areceived none of the group's traffic; a lookup by hand returns the entry\u000awhen its data is read first.\u000a\u000aFixes: 0f9baab7f64 (\"qualcommax: qca_ppe: finish an FDB operation before reading its result\")\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "d6c75fb80965aa1b68d5333549ada9efc6cf151e",
        "msg" : "qualcommax: qca_ppe: read an FDB lookup's entry before retiring its result",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_acl.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
        ],
        "commitId" : "68e25f82b10811cdbb99572bb9c4c35ecf54cbb0",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: keep PSH segments out of the small-packet priority\u000a\u000aA short TCP segment that carries PSH ends a write of a flow whose other\u000asegments are full size. Promoted by the small-packet rule, it overtakes\u000athem and reorders the flow on every write: a 16 Mbit/s download through\u000athe switch saw 35-42 reordered segments per 30 s, and none once the rule\u000amatches only frames with PSH clear (2-3 runs each). Acks, handshakes and\u000aevery protocol other than TCP, whose frames carry no TCP flags, still\u000amatch.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "68e25f82b10811cdbb99572bb9c4c35ecf54cbb0",
        "msg" : "qualcommax: qca_ppe: keep PSH segments out of the small-packet priority",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_acl.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/qca-ppe-qos/files/qca-ppe-qos.init"
        ],
        "commitId" : "fadbcb65d5699317d938a1ed46e23345c359e544",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qca-ppe-qos: keep PSH segments out of the Wi-Fi small-packet stamp\u000a\u000aThe u32 stamp moves short frames into a higher access category, so a\u000ashort TCP segment with PSH, which ends a write of a bulk flow, overtakes\u000athe flow's full-size segments. A download over Wi-Fi saw 240-460\u000areordered segments per 25 s, and none with two pass filters ahead of the\u000astamp for TCP segments with PSH set (3 runs each). The filters use fixed\u000aoffsets, so they cover IPv4 without options and IPv6 without extension\u000aheaders.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "fadbcb65d5699317d938a1ed46e23345c359e544",
        "msg" : "qca-ppe-qos: keep PSH segments out of the Wi-Fi small-packet stamp",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/qca-ppe-qos/files/qca-ppe-qos.init"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/qca-ppe-qos/files/qca-ppe-qos.init"
        ],
        "commitId" : "be48899f48a6c92ec9b2bd0551f674164ec09e33",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qca-ppe-qos: let 'enabled' switch only the marking rules\u000a\u000aWith enabled set to 0 the script tore everything down, the DSCP maps and\u000athe small-packet priority included, and skipped the Wi-Fi stamp, while\u000athe LuCI page offers the option as the switch for the marking rules.\u000aKeep the maps and the small-packet priority, and only flush the marking\u000afilters.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "be48899f48a6c92ec9b2bd0551f674164ec09e33",
        "msg" : "qca-ppe-qos: let 'enabled' switch only the marking rules",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/qca-ppe-qos/files/qca-ppe-qos.init"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/qca-ppe-qos/files/qca-ppe-qos.init"
        ],
        "commitId" : "bddefbe965f978b22e6dc26cbb2e95a43e53ea7f",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qca-ppe-qos: end the rule range at preference 509\u000a\u000aThe driver ranks a lower preference higher, so a filter at 511, where\u000ahw_ppe.qos marks its download band, ranks below every rule of this\u000ascript, not above as the comment said. Stop the range at 509, below the\u000asmall-packet rule's rank, and still flush up to 510, which earlier\u000aversions installed rules at.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "bddefbe965f978b22e6dc26cbb2e95a43e53ea7f",
        "msg" : "qca-ppe-qos: end the rule range at preference 509",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/qca-ppe-qos/files/qca-ppe-qos.init"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h",
          "target/linux/qualcommax/patches-6.18/0952-net-ethernet-qca-add-ppe.patch",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
        ],
        "commitId" : "8099efef1880f379fde94f90f51c058ddfef4b0a",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: hand shaped flows to a qdisc after the hardware routed them\u000a\u000aThe PPE has no queue that can run CAKE or mark ECN. A flow that crosses\u000athe shaped WAN link now keeps its lookup, NAT and encapsulation in\u000ahardware, and its finished frames reach the CPU only to pass a qdisc on\u000aa shaper device, one per direction, which the driver creates when the\u000adevlink parameter dl_shaper or ul_shaper names a device that does not\u000aexist yet. The PPE builds an upload frame whole, PPPoE and VLAN headers\u000aincluded. Once the qdisc releases a frame for a switch port, the shaper\u000adevice sends it straight into the conduit's ring; a download to Wi-Fi\u000agoes on to that interface. What the host forwards itself reaches the\u000asame devices through act_mirred, as it would reach an ifb: from the\u000auplink's egress, where the upload device builds the uplink's PPPoE and\u000aVLAN headers itself and sends the frame to the conduit too, and from the\u000aWAN port's ingress, from where the download device returns it to the\u000areceive path. Upload frames carry the conntrack the hardware path would\u000aotherwise lose, so CAKE's nat mode still tells the LAN hosts apart; a\u000adownload to a tagged LAN VLAN gets its tag after the shaper. An ifb\u000anamed instead works as well, at a higher cost. The devlink parameters\u000adl_shaper, ul_shaper, uplink and ct_dscp configure it, and sqm-scripts'\u000appe_cake.qos sets them.\u000a\u000aFlent from a wired client over a 300/150 Mbit/s PPPoE line shaped to\u000a330/168, 8 TCP streams each way: through the shaper devices the download\u000acarries 307.4 Mbit/s and the upload 157.2, as through IFBs, and the\u000arouter spends 13.4k CPU cycles per forwarded download packet instead of\u000a15.8k and 18.2k per upload packet instead of 22.4k; the four cores' load\u000ataken from idle-priority spinners falls from 26.5 to 21.6 % on the\u000adownload and from 19.4 to 15.8 % on the upload. Latency under load\u000astays at idle at the median through both; its 99th percentile rose by\u000a0.05-0.07 ms in six of seven runs and by 4.3 ms in one (3 runs each\u000aarm).\u000a\u000aLink: https://github.com/tohojo/sqm-scripts/pull/196\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "8099efef1880f379fde94f90f51c058ddfef4b0a",
        "msg" : "qualcommax: qca_ppe: hand shaped flows to a qdisc after the hardware routed them",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0952-net-ethernet-qca-add-ppe.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/qca-ppe-qos/Makefile"
        ],
        "commitId" : "be8b18e401fed78948828e66dcc281edf49da122",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qca-ppe-qos: name ppe_cake.qos in the package description\u000a\u000aThe classifiers pair with sqm-scripts' ppe_cake.qos as they do with\u000ahw_ppe.qos.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "be8b18e401fed78948828e66dcc281edf49da122",
        "msg" : "qca-ppe-qos: name ppe_cake.qos in the package description",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/qca-ppe-qos/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
        ],
        "commitId" : "c31a509a4d0d787278b65b74e9a7be0333bb488d",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_edma: pick a multiqueue shaper's queue by the receive ring\u000a\u000aedma_rx_flow() hands a frame of an offloaded flow to its egress before\u000athe receive queue was recorded, so with cake_mq on the IFBs every such\u000aframe took the same queue. Record the ring first, so that each ring's\u000aCPU feeds a CAKE instance of its own.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "c31a509a4d0d787278b65b74e9a7be0333bb488d",
        "msg" : "qualcommax: qca_edma: pick a multiqueue shaper's queue by the receive ring",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_debugfs.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
        ],
        "commitId" : "6cadbf46d30ae9294eb2ca9046497ba47edb2000",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_ppe: run CoDel's control law on the shaped queues\u000a\u000aThe queue manager drops a frame only on arrival, against a limit in\u000abuffers, so it bounds a queue but cannot tell a standing queue from a\u000aburst. A kthread reads the depth of every hashed queue of a shaped port\u000aand of the CPU port's download band, takes each bottleneck's delay from\u000aits backlog and rate, and when CoDel's law calls for a drop lowers the\u000alimit of each busy queue of that bottleneck to one frame under its depth\u000afor one tick. It ticks every 2 ms while a queue holds a full frame and\u000aevery 20 ms otherwise; aqm_tick_us=0 turns it off, and debugfs aqm shows\u000aits state.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "6cadbf46d30ae9294eb2ca9046497ba47edb2000",
        "msg" : "qualcommax: qca_ppe: run CoDel's control law on the shaped queues",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_scheduler.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_debugfs.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h"
        ],
        "commitId" : "698653058fe52a70d543a056a97e4a97eb047971",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: qca_edma: moderate receive interrupts over 100 us\u000a\u000aAt a shaped 330 Mbit/s download each receive interrupt found 2.4 frames,\u000athe 25 us moderation timer expiring long before the 16-frame threshold.\u000aWith 100 us it finds 6.7 (3.5 for the upload), and the router spends\u000a4.4 % fewer CPU cycles per forwarded packet on the download, with the\u000asame throughput and latency under load (Flent tcp_ndown 8 through CAKE,\u000a3 runs each; the upload's 1.8 % is within the 3 % that two identical\u000aconfigurations differ by). ethtool -C still sets it.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "698653058fe52a70d543a056a97e4a97eb047971",
        "msg" : "qualcommax: qca_edma: moderate receive interrupts over 100 us",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/patches-6.18/0966-net-dsa-tag_oob-let-the-switch-send-frames-it-routed-to-the-CPU.patch",
          "target/linux/qualcommax/files/include/linux/qca_edma.h",
          "target/linux/qualcommax/patches-6.18/0953-net-ethernet-qca-add-EDMA.patch",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h",
          "target/linux/qualcommax/patches-6.18/0955-net-dsa-tag_qca-add-a-variant-behind-an-ethertype.patch",
          "target/linux/qualcommax/config-6.18",
          "target/linux/qualcommax/patches-6.18/0952-net-ethernet-qca-add-ppe.patch",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c",
          "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c",
          "target/linux/qualcommax/patches-6.18/0950-net-dsa-add-out-of-band-tagging-protocol.patch"
        ],
        "commitId" : "b50530932b5a8dc7b086476ac930190ea6dc2d3b",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: tag with the QCA header instead of out of band\u000a\u000aThe out-of-band tagger was never merged upstream: it carries the port in\u000aan skb extension that DSA allocates for every frame sent, and that\u000aqca_edma allocated for every frame the switch trapped to the CPU. Use the\u000aQCA tagger instead, as airoha and mtk_eth_soc use their switch's in-band\u000atagger. On transmit, qca_edma reads the port out of the two-byte tag and\u000aremoves it once the frame is sure to go out, then names the port in the\u000apreheader as before. On receive, a forwarded frame keeps the metadata dst\u000athat DSA resolves without a tagger, and only a trapped frame, which the\u000abridge has to forward itself, gets the header the tagger reads its port\u000afrom. The switch's frames for a flow reach qca_ppe through a hook it\u000aregisters with qca_edma, and its shaper devices pass the port to\u000aqca_edma_port_xmit() directly, so the shaped path allocates nothing per\u000apacket. The tagger's needed headroom raises the conduit's MTU by 2.\u000a\u000aWired LAN, a VLAN-aware bridge, IGMP snooping with offloaded MDB\u000aentries, PPPoE over a VLAN uplink and Wi-Fi through the CPU port work\u000aunchanged on a Xiaomi AX3600.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "b50530932b5a8dc7b086476ac930190ea6dc2d3b",
        "msg" : "qualcommax: tag with the QCA header instead of out of band",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/config-6.18"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0952-net-ethernet-qca-add-ppe.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_main.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.c"
          },
          {
            "editType" : "delete",
            "file" : "target/linux/qualcommax/patches-6.18/0966-net-dsa-tag_oob-let-the-switch-send-frames-it-routed-to-the-CPU.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_edma.h"
          },
          {
            "editType" : "add",
            "file" : "target/linux/qualcommax/files/include/linux/qca_edma.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0953-net-ethernet-qca-add-EDMA.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0955-net-dsa-tag_qca-add-a-variant-behind-an-ethertype.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/drivers/net/ethernet/qualcomm/qca_ppe_flow_offload.c"
          },
          {
            "editType" : "delete",
            "file" : "target/linux/qualcommax/patches-6.18/0950-net-dsa-add-out-of-band-tagging-protocol.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/backport-6.18/706-04-v7.3-netfilter-flowtable-use-the-vlan-id-not-the-full-tci.patch"
        ],
        "commitId" : "be75fbfa9b26eba3b60c291cff766c5fca8e929d",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "kernel: backport the flowtable VLAN ID fix\u000a\u000aBackport c203ecf90574, which keys the flowtable tuple on the 12-bit VLAN\u000aID instead of the whole TCI, so that frames whose tag carries a PCP\u000astill match their flow.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "be75fbfa9b26eba3b60c291cff766c5fca8e929d",
        "msg" : "kernel: backport the flowtable VLAN ID fix",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/generic/backport-6.18/706-04-v7.3-netfilter-flowtable-use-the-vlan-id-not-the-full-tci.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/pending-6.18/708-netfilter-flowtable-tear-down-direct-xmit-flows-when.patch"
        ],
        "commitId" : "09fe0f814008b287734a0582d985a9f99c6b3cdc",
        "timestamp" : 1793004287000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "generic: flowtable: check the bridge a roaming flow transmits on\u000a\u000aUpdate the imported fdb roaming teardown to v9. With a vlan device of one\u000abridge enslaved to another bridge, v8 counted the vlans below both\u000abridges, looked the bridge port up from the wrong device and read past\u000aencap[]; v9 resets the count at each bridge, so the gc checks the bridge\u000athe flow transmits on. v9 also carries Pablo's authorship and sign-off\u000afrom his posting with a note of the changes, instead of Co-developed-by.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:47 +0100",
        "id" : "09fe0f814008b287734a0582d985a9f99c6b3cdc",
        "msg" : "generic: flowtable: check the bridge a roaming flow transmits on",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/708-netfilter-flowtable-tear-down-direct-xmit-flows-when.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/pending-6.18/643-net-dsa-fix-host-fdb-refcount-when-a-bridge-fdb-entry-roams.patch",
          "target/linux/generic/pending-6.18/642-net-bridge-switchdev-add-br_switchdev_fdb_find_port.patch"
        ],
        "commitId" : "c7924dcd74a6bd30abd5f935209528c071ddd287",
        "timestamp" : 1793004288000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "generic: dsa: track host fdb entries per port\u000a\u000aWhen a bridge fdb entry roams between ports, br_fdb_update() notifies\u000aswitchdev of the deletion and the addition without a lock, and DSA's\u000ahost address count on the CPU port goes wrong when two CPUs learn one\u000aaddress on different ports: \"qca-ppe 3a000000.ppe: port 5 failed to\u000adelete ... from fdb: -2\", and an address left on the CPU port.\u000a\u000aBackport the series prepared for net-next that makes each DSA user port\u000arecord the host addresses it holds and look up where the bridge has the\u000aentry when it handles each event, without a lock in the bridge's\u000alearning path.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/24806\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:44:48 +0100",
        "id" : "c7924dcd74a6bd30abd5f935209528c071ddd287",
        "msg" : "generic: dsa: track host fdb entries per port",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/642-net-bridge-switchdev-add-br_switchdev_fdb_find_port.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/643-net-dsa-fix-host-fdb-refcount-when-a-bridge-fdb-entry-roams.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/firewall4/Makefile"
        ],
        "commitId" : "e2e50c9dc4b2dd57f4815ea9ff66c1c094bd21d8",
        "timestamp" : 1793004695000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "firewall4: update to Git HEAD (2026-10-26)\u000a\u000adf0c9021bbe7 ruleset: fix for missing counters handling code for ipsets\u000abac1d656e09b Do not emit helper jump without helper modules\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:51:35 +0100",
        "id" : "e2e50c9dc4b2dd57f4815ea9ff66c1c094bd21d8",
        "msg" : "firewall4: update to Git HEAD (2026-10-26)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/firewall4/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/patches-6.18/0953-net-ethernet-qca-add-EDMA.patch"
        ],
        "commitId" : "189012aed9ace46ca0f16650ce9b7136a631f05d",
        "timestamp" : 1793005059000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: refresh patches\u000a\u000aCI told us we need to do so, so lets do it.\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 09:57:39 +0100",
        "id" : "189012aed9ace46ca0f16650ce9b7136a631f05d",
        "msg" : "qualcommax: refresh patches",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0953-net-ethernet-qca-add-EDMA.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/octeon/patches-6.18/900-cn70xx-fix-pem-bar-register-map.patch"
        ],
        "commitId" : "76d6b7fdbf0bc84bc4c89158faed8fe33beaf1e3",
        "timestamp" : 1793005782000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "octeon: fix PEM BAR register map on CN70XX\u000a\u000aOn CN70XX, the PEM register map differs from the other Octoen III models.\u000aPEM_BAR_CTL is at block offset 0xa0 and the BAR1 index table at 0x100, while\u000athe in-tree code uses the CN68XX offsets (BAR_CTL at 0x128, BAR1 index at 0xa8)\u000afor all Octeon III parts. The Cavium OCTEON-SDK cvmx-permx-defs.h special cases\u000aCN70XX for both registers.\u000a\u000aWith the generic offsets, __cvmx_pcie_rc_initialize_gen2() programs the wrong\u000aregisters on CN70XX. The intended BAR_CTL value lands on a BAR1 index entry,\u000aand the BAR1 index writes land on the real BAR_CTL (0xa8) and BAR2_MASK (0xb0).\u000aBAR2_MASK is ANDed with inbound (device DMA) addresses, so a bogus value there\u000asilently corrups all PCIe DMA to host memory. Observed on a CN7030 board while\u000adebugging a failing b43 firmware intialization followed by DMA errors.\u000a\u000aAdd model awareness helpers and use them for the three affected addresses.\u000a\u000aSigned-off-by: Andrew LaMarche <andrewjlamarche@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26198\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 10:09:42 +0100",
        "id" : "76d6b7fdbf0bc84bc4c89158faed8fe33beaf1e3",
        "msg" : "octeon: fix PEM BAR register map on CN70XX",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/octeon/patches-6.18/900-cn70xx-fix-pem-bar-register-map.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/ath79/dts/ar9344_wd_mynet-nxxx.dtsi"
        ],
        "commitId" : "c5e88157e9d33dca599a2e2f752b7b7bd4ee18d1",
        "timestamp" : 1793010935000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/ansuelsmth",
          "fullName" : "ansuelsmth"
        },
        "authorEmail" : "ansuelsmth@gmail.com",
        "comment" : "ath79: use old SPI driver on WD MyNet to avoid filesystem errors\u000a\u000acomplaints about JFFS2 corruption on WD Mynet N750 devices started at 21.02.\u000ahttps://forum.openwrt.org/t/upgrade-from-barrier-breaker-14-07-to-latest-21-02-wd-my-net-n750/119833/\u000a\u000ait's still happening on 25.12, from my device:\u000ajffs2: notice: (594) jffs2_get_inode_nodes: Node header CRC failed at 0x006e9c.\u000ajffs2: notice: (723) jffs2_get_inode_nodes: Node header CRC failed at 0x006e58.\u000ajffs2: warning: (723) jffs2_do_read_inode_internal: no data nodes found for ino #37\u000affs2: notice: (723) jffs2_do_read_inode_internal: but it has children so we fake some modes for it\u000a\u000acommit ebf0d8dade (between 19.07 and 21.02) started using the new\u000aspi-ar934x driver for the ath79 target instead of spi-ath79.\u000a\u000ai don't know exactly what's wrong with the new driver with this device.\u000abut putting it back to the old one seems to fix it.\u000a\u000aI've been using my N750 successfully now for a week, changing configs,\u000ainstalling/removing packages, rebooting, yanking power.\u000aI don't get any more JFFS2 complaints, the device stays responsive and\u000aLUCI is usable as expected\u000a\u000aSigned-off-by: Ronald Ouyang <repaxan@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26154\u000aSigned-off-by: Christian Marangi <ansuelsmth@gmail.com>\u000a",
        "date" : "2026-10-26 11:35:35 +0100",
        "id" : "c5e88157e9d33dca599a2e2f752b7b7bd4ee18d1",
        "msg" : "ath79: use old SPI driver on WD MyNet to avoid filesystem errors",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/ath79/dts/ar9344_wd_mynet-nxxx.dtsi"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/files/include/dt-bindings/net/pcs/qualcomm,ipq-uniphy.yaml",
          "target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6018-ess.dtsi",
          "target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq8074-ess.dtsi"
        ],
        "commitId" : "a41558d2d3654938cbc22c1b3a9c6e68a1833089",
        "timestamp" : 1793015431000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: list UNIPHY clock output names RX first\u000a\u000aqca_uniphy_register_clks() registers each clock under the\u000aclock-output-names entry at its UNIPHY_CLK_* index, and the binding\u000aheader defines UNIPHY_CLK_RX as 0. The ipq6018 and ipq8074 nodes list\u000athe TX name first, so the RX clock carries the TX name and vice versa.\u000aSince GCC takes these clocks by phandle, debugfs reports every port TX\u000aRCG on uniphyN_gcc_rx_clk while the hardware selects uniphyN TX, and a\u000aparent lookup by name picks the wrong one. List the names RX first, as\u000aipq5018 already does, and make the binding match.\u000a\u000aTested on a Xiaomi AX3600 (ipq8074): nss_port1..5_tx_clk_src now report\u000auniphy0_gcc_tx_clk and the RX sources uniphy0_gcc_rx_clk, matching CFG\u000asrc 1 in their parent maps. The CFG registers and all rates are\u000aunchanged, and lan1 to lan2 iperf3 runs at 941 Mbit/s in each direction\u000a(one 5 s run each).\u000a\u000aFixes: 5df1a6ab80a (\"qualcommax: ipq60xx: pass UNIPHY clocks directly to GCC\")\u000aFixes: 49193000bf4 (\"qualcommax: ipq807x: pass UNIPHY clocks directly to GCC\")\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/26205\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 12:50:31 +0100",
        "id" : "a41558d2d3654938cbc22c1b3a9c6e68a1833089",
        "msg" : "qualcommax: list UNIPHY clock output names RX first",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6018-ess.dtsi"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/include/dt-bindings/net/pcs/qualcomm,ipq-uniphy.yaml"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq8074-ess.dtsi"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/rtl/003-wifi-rtw88-usb-Download-the-reserved-page-synchronously.patch",
          "package/kernel/mac80211/Makefile"
        ],
        "commitId" : "a40fd94a3fa9bb787e631349032cf7878e3e6aad",
        "timestamp" : 1793018263000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/ansuelsmth",
          "fullName" : "ansuelsmth"
        },
        "authorEmail" : "ansuelsmth@gmail.com",
        "comment" : "mac80211: realtek: download rsvd page synchronously on USB\u000a\u000aIn AP mode, rtw88 downloads the reserved page, which holds the beacon,\u000aand then polls BCN_VALID. Over USB the download only queues the URB, so\u000athe poll can run while the beacon is still on the bus and time out, in\u000abursts when the beacon changes often, such as when stations associate\u000aand disassociate (lwfinger/rtw88#451):\u000a\u000a    rtw_8822bu: error beacon valid\u000a    rtw_8822bu: failed to download drv rsvd page\u000a\u000aAdd v5 of the rtw88 patch. It waits for that URB in a new\u000artw_usb_write_port_sync() and kills it if it does not complete within\u000a5 s, as usb_bulk_msg() does, but keeps URB_ZERO_PACKET. This fixes the\u000ause-after-free that Ping-Ke Shih found in v3, where the completion\u000ahandler could run after the waiter had freed its context on timeout.\u000aOnly the line numbers and one context line differ from rtw-next.\u000a\u000av4 was tested with backports 7.2 on a Turris 1.x with a TP-Link Archer\u000aT4U v3 (RTL8812BU, handled by rtw_8822bu) as a 2.4 GHz AP over USB 2 and\u000aUSB 3 and as a 5 GHz AP over USB 3. The AP came up after each of 15\u000arestarts, and no \"error beacon valid\", \"failed to download drv rsvd\u000apage\" or USB write error was logged during them or 7 beacon changes. No\u000astation was associated, and the builds without the patch did not log\u000athese errors either, so this shows no regression; lwfinger/rtw88#451\u000aitself was not reproduced. v5 only reorders declarations, drops an\u000ainitializer and rewords a comment.\u000a\u000aPending upstream, submitted to rtw-next and acked by Ping-Ke Shih:\u000ahttps://lore.kernel.org/linux-wireless/20261013033737.6761-1-pepe.schlehofer@gmail.com/\u000a\u000aSigned-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/25837\u000aSigned-off-by: Christian Marangi <ansuelsmth@gmail.com>\u000a",
        "date" : "2026-10-26 13:37:43 +0100",
        "id" : "a40fd94a3fa9bb787e631349032cf7878e3e6aad",
        "msg" : "mac80211: realtek: download rsvd page synchronously on USB",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/Makefile"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/rtl/003-wifi-rtw88-usb-Download-the-reserved-page-synchronously.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/rtl/002-wifi-rtw88-8822b-Relax-ETSI-EDCCA-threshold-on-2.4-GHz.patch"
        ],
        "commitId" : "2462519a7f3811fe0535be440273e978cf66d080",
        "timestamp" : 1793018327000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/ansuelsmth",
          "fullName" : "ansuelsmth"
        },
        "authorEmail" : "ansuelsmth@gmail.com",
        "comment" : "mac80211: realtek: relax 8822B 2.4 GHz ETSI EDCCA threshold\u000a\u000aUnder ETSI, rtw88 sets the RTL8822B EDCCA threshold to min(IGI, 36),\u000aat most about -74 dBm. On a Turris 1.x with a TP-Link Archer T4U v3\u000a(RTL8812BU) in USB 3 mode as a 2.4 GHz AP under CZ, in-band energy,\u000amostly from the adapter's own USB 3 link, kept IGI at 0x2a and the\u000athreshold at 36. The AP was not seen in any of 5 scans, and the\u000adriver reported \"failed to get tx report from firmware\".\u000a\u000aAdd the pending upstream patch that uses the normal threshold,\u000amax(IGI + 8, 48), on 2.4 GHz under ETSI, capped at 50 (nominally\u000a-60 dBm), and keeps the existing rule on 5 GHz and in JP. With it,\u000athe AP was seen in 4 of 5 scans on the same port and boot (16 of 19\u000aacross repeated runs), with no TX report failures. Only the line\u000anumbers are adapted to backports 7.2.\u000a\u000aPending upstream, submitted to rtw-next and acked by Ping-Ke Shih:\u000ahttps://lore.kernel.org/linux-wireless/20261011204509.46062-1-pepe.schlehofer@gmail.com/\u000a\u000aSigned-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/25836\u000aSigned-off-by: Christian Marangi <ansuelsmth@gmail.com>\u000a",
        "date" : "2026-10-26 13:38:47 +0100",
        "id" : "2462519a7f3811fe0535be440273e978cf66d080",
        "msg" : "mac80211: realtek: relax 8822B 2.4 GHz ETSI EDCCA threshold",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/rtl/002-wifi-rtw88-8822b-Relax-ETSI-EDCCA-threshold-on-2.4-GHz.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/ramips/dts/mt7621_mqmaker_witi.dts"
        ],
        "commitId" : "b5ff052caf4b7e90eb4b84941dec77bb5e4b5e08",
        "timestamp" : 1793022258000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "ramips: mt7621: fix SATA detection on MQMaker WiTi\u000a\u000aThe WiTi's SATA controller worked under OpenWrt 19.07, but\u000astopped being detected in the 21.02 release series following\u000achanges to the MT7621 PCIe driver. PCIe port 2 fails to\u000ainitialise, leaving the onboard ASMedia ASM1062 inaccessible.\u000a\u000aThis adds the missing board-specific reset GPIOs (19, 8 and 7).\u000aThe mapping was originally suggested by Sergio Paracuellos\u000aand tested by Florian Hofmann in the earlier issue discussion.\u000a\u000aI've tested the fix on a WiTi v2.0 (256 MB) with both OpenWrt main\u000a(Linux 6.18.55) and the 25.12 branch (Linux 6.12.112).\u000aBoth SATA ports negotiated 6 Gbps links, and I was able to\u000aread from two connected SSDs without errors.\u000a\u000aHope this helps anyone who is still using one of these boards\u000afor anything.\u000a\u000aLink: https://github.com/openwrt/openwrt/issues/9156\u000aLink: https://github.com/openwrt/openwrt/issues/9869\u000aSigned-off-by: Alex Sunekants <asunekants@pm.me>\u000aLink: https://github.com/openwrt/openwrt/pull/26196\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 14:44:18 +0100",
        "id" : "b5ff052caf4b7e90eb4b84941dec77bb5e4b5e08",
        "msg" : "ramips: mt7621: fix SATA detection on MQMaker WiTi",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/ramips/dts/mt7621_mqmaker_witi.dts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/firmware/intel-microcode/Makefile"
        ],
        "commitId" : "6079d00acde51dc5a01cfd282d6647667e031f9e",
        "timestamp" : 1793022729000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "intel-microcode: switch source to Intel upstream, update to 20260925\u000a\u000aDebian tarball lags/currently 5 commits and 9 months old\u000arelative to upstream. Worse is that upstream is asleep at\u000athe switch with 3 outstanding bug reports since Feb/2026\u000ashowing them this fact[1-3].\u000a\u000aTherefore use intel/Intel-Linux-Processor-Microcode-Data-Files\u000adirectly and drop the Debian-supplied make step.\u000a\u000a1. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1149038\u000a2. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1136460\u000a3. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1144154\u000a\u000aSigned-off-by: John Audia <therealgraysky@proton.me>\u000aLink: https://github.com/openwrt/openwrt/pull/26184\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 14:52:09 +0100",
        "id" : "6079d00acde51dc5a01cfd282d6647667e031f9e",
        "msg" : "intel-microcode: switch source to Intel upstream, update to 20260925",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/firmware/intel-microcode/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/kirkwood/base-files/etc/init.d/hwmon_fancontrol"
        ],
        "commitId" : "3c3a4150694ca9ea4b8a44c12273bd4780bbf7d0",
        "timestamp" : 1793024040000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "kirkwood: fix ReadyNAS Duo v2 fan controller detection\u000a\u000aThe hwmon index is not stable across boots. On the\u000aReadyNAS Duo v2, hwmon0 is the kirkwood_thermal sensor\u000awhile the g762 fan controller is registered as hwmon1.\u000a\u000aFind the fan controller by its hwmon name instead of\u000aassuming a fixed index.\u000a\u000aSigned-off-by: Jakub Skoczen <skoczko@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26206\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 15:14:00 +0100",
        "id" : "3c3a4150694ca9ea4b8a44c12273bd4780bbf7d0",
        "msg" : "kirkwood: fix ReadyNAS Duo v2 fan controller detection",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/kirkwood/base-files/etc/init.d/hwmon_fancontrol"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl-otto.h"
        ],
        "commitId" : "0074cd9b1d617bdb77a38f70d16653f5e31902ab",
        "timestamp" : 1793043963000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/markus.stockhausen",
          "fullName" : "markus.stockhausen"
        },
        "authorEmail" : "markus.stockhausen@gmx.de",
        "comment" : "realtek: pie: preserve two-bit L2 frame type fields\u000a\u000aThe PIE L2 frame type and its mask occupy two bits in hardware, but their\u000apie_rule members are bool. Assigning LLC_Other (2) or a full mask (3)\u000atherefore truncates the value to 1 before the encoders can pack it.\u000a\u000aUse u8 for frame_type_l2 and frame_type_l2_m so all four switch families\u000apreserve the complete match and mask values during encoding and readback.\u000a\u000aSigned-off-by: João Silva <jgc3silva@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26225\u000aSigned-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>\u000a",
        "date" : "2026-10-26 20:46:03 +0100",
        "id" : "0074cd9b1d617bdb77a38f70d16653f5e31902ab",
        "msg" : "realtek: pie: preserve two-bit L2 frame type fields",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl-otto.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
        ],
        "commitId" : "6ca8a7f1d5b7051e365ade017d4fe481a5a622a7",
        "timestamp" : 1793044139000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/markus.stockhausen",
          "fullName" : "markus.stockhausen"
        },
        "authorEmail" : "markus.stockhausen@gmx.de",
        "comment" : "realtek: pie: rtl930x: fix template 4 source port fields\u000a\u000aThe software description of RTL930x fixed template 4 lists SPM1 twice,\u000abut the hardware template contains SPM0 followed by SPM1. This encodes\u000athe upper source-port bitmap word into both fields, losing the lower\u000a16 source-port match bits and their mask.\u000a\u000aDescribe the two fields as SPM0, SPM1 so IPv6 source-address rules using\u000athis template match the intended ingress ports.\u000a\u000aSigned-off-by: João Silva <jgc3silva@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26226\u000aSigned-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>\u000a",
        "date" : "2026-10-26 20:48:59 +0100",
        "id" : "6ca8a7f1d5b7051e365ade017d4fe481a5a622a7",
        "msg" : "realtek: pie: rtl930x: fix template 4 source port fields",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/config-6.18"
        ],
        "commitId" : "5df2651e6a7002eec305fd1bef0c7f06050a949c",
        "timestamp" : 1793045293000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "generic: 6.18: add CONFIG_DETECT_HUNG_TASK_BLOCKER\u000a\u000aLinux 6.15 added DETECT_HUNG_TASK_BLOCKER, which depends on\u000aDETECT_HUNG_TASK. The generic config leaves DETECT_HUNG_TASK unset, so\u000athe symbol stays hidden by default, but selecting\u000aKERNEL_DETECT_HUNG_TASK makes it visible and the kernel build stops at\u000athe syncconfig prompt for it. Add it to the generic config.\u000a\u000aAssisted-by: Claude:claude-opus-5-5\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/26012\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 21:08:13 +0100",
        "id" : "5df2651e6a7002eec305fd1bef0c7f06050a949c",
        "msg" : "generic: 6.18: add CONFIG_DETECT_HUNG_TASK_BLOCKER",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/generic/config-6.18"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/mediatek/filogic/config-6.18",
          "target/linux/mediatek/mt7622/config-6.18"
        ],
        "commitId" : "3d0cafad1cc516d3ed1e5db058a2686d23c5a8b2",
        "timestamp" : 1793045430000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "mediatek: disable perf events by default\u000a\u000aThe perf utility is not shipped by default. To use perf on a custom\u000abuild, enable KERNEL_PERF_EVENTS.\u000a\u000aSigned-off-by: Qingfang Deng <dqfext@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26200\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 21:10:30 +0100",
        "id" : "3d0cafad1cc516d3ed1e5db058a2686d23c5a8b2",
        "msg" : "mediatek: disable perf events by default",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/mediatek/mt7622/config-6.18"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/mediatek/filogic/config-6.18"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/mediatek/filogic/config-6.18",
          "target/linux/mediatek/mt7622/config-6.18"
        ],
        "commitId" : "4d3ed016a2d710ac5719863e7870fa91e39fc27e",
        "timestamp" : 1793045430000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "mediatek: disable unrelated errata\u000a\u000aMT7622 and MT798x (except MT7988) have a Cortex-A53 r0p4, as indicated\u000aby /proc/cpuinfo. Disable errata that only apply to earlier revisions.\u000a\u000aSigned-off-by: Qingfang Deng <dqfext@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26200\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 21:10:30 +0100",
        "id" : "4d3ed016a2d710ac5719863e7870fa91e39fc27e",
        "msg" : "mediatek: disable unrelated errata",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/mediatek/filogic/config-6.18"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/mediatek/mt7622/config-6.18"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/mediatek/filogic/config-6.18",
          "target/linux/mediatek/mt7622/config-6.18"
        ],
        "commitId" : "7d0bf92beefbb62e306f2318dfe5b47538bd85a6",
        "timestamp" : 1793045430000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "mediatek: disable unsupported arch features\u000a\u000aBoth A53 and A73 are baseline-ARMv8.0 and do not support those features.\u000a\u000aSigned-off-by: Qingfang Deng <dqfext@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26200\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-26 21:10:30 +0100",
        "id" : "7d0bf92beefbb62e306f2318dfe5b47538bd85a6",
        "msg" : "mediatek: disable unsupported arch features",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/mediatek/filogic/config-6.18"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/mediatek/mt7622/config-6.18"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "scripts/mkits-qsdk-ipq-image.sh"
        ],
        "commitId" : "9ec7903e371233ef913f1dee4e2aeb8872efff85",
        "timestamp" : 1793081966000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/daniel",
          "fullName" : "daniel"
        },
        "authorEmail" : "daniel@makrotopia.org",
        "comment" : "scripts: mkits-qsdk-ipq-image: strip path from description\u000a\u000aThe FIT description of the boot script image is derived from the\u000afile name given on the command line. Take only the basename so that\u000athe script can be passed by path while the description stays the\u000asame.\u000a\u000aSigned-off-by: Daniel Golle <daniel@makrotopia.org>\u000a",
        "date" : "2026-10-27 06:19:26 +0000",
        "id" : "9ec7903e371233ef913f1dee4e2aeb8872efff85",
        "msg" : "scripts: mkits-qsdk-ipq-image: strip path from description",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "scripts/mkits-qsdk-ipq-image.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/image/ipq807x.mk"
        ],
        "commitId" : "454e516148eed22217dc878d486e28dd5cac5890",
        "timestamp" : 1793081967000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/daniel",
          "fullName" : "daniel"
        },
        "authorEmail" : "daniel@makrotopia.org",
        "comment" : "qualcommax: ipq807x: fix Netgear factory image race\u000a\u000aRBR750, RBS750, RBR850 and RBS850 share one bootscript, and the\u000afactory image recipe copies it into the common kernel tmp directory\u000awith cp -f. When several images are built in parallel, one cp can\u000acreate the destination between the unlink and the create of another\u000aand fail with \"File exists\", aborting the target install.\u000a\u000aThe copy only serves to let dtc find the script next to the .its\u000afile. Pass the script by its absolute path instead, so that no shared\u000afile is written at all.\u000a\u000aFixes: d0bd7ad1a2 (\"qualcommax: ipq807x: add Netgear RBx750 support\")\u000aSigned-off-by: Daniel Golle <daniel@makrotopia.org>\u000a",
        "date" : "2026-10-27 06:19:27 +0000",
        "id" : "454e516148eed22217dc878d486e28dd5cac5890",
        "msg" : "qualcommax: ipq807x: fix Netgear factory image race",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/image/ipq807x.mk"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/image/ipq60xx.mk"
        ],
        "commitId" : "936801c4489b02ad39eadd1a9b26d38dd3a40e0f",
        "timestamp" : 1793081967000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/daniel",
          "fullName" : "daniel"
        },
        "authorEmail" : "daniel@makrotopia.org",
        "comment" : "qualcommax: ipq60xx: fix Netgear factory image race\u000a\u000aRBR350 and RBS350 share one bootscript, and the factory image recipe\u000acopies it into the common kernel tmp directory with cp -f. When both\u000aimages are built in parallel, one cp can create the destination\u000abetween the unlink and the create of the other and fail with \"File\u000aexists\", aborting the target install.\u000a\u000aThe copy only serves to let dtc find the script next to the .its\u000afile. Pass the script by its absolute path instead, so that no shared\u000afile is written at all.\u000a\u000aFixes: 67e6baf05e (\"qualcommax: ipq60xx: add Netgear RBx350 support\")\u000aSigned-off-by: Daniel Golle <daniel@makrotopia.org>\u000a",
        "date" : "2026-10-27 06:19:27 +0000",
        "id" : "936801c4489b02ad39eadd1a9b26d38dd3a40e0f",
        "msg" : "qualcommax: ipq60xx: fix Netgear factory image race",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/image/ipq60xx.mk"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/patches-6.18/705-v7.1-net-sfp-initialize-i2c_block_size-at-adapter-configu.patch",
          "target/linux/realtek/patches-6.18/706-01-v7.2-net-sfp-apply-I2C-adapter-quirks-to-limit-block-size.patch",
          "target/linux/realtek/patches-6.18/706-02-v7.2-net-sfp-extend-SMBus-support.patch",
          "target/linux/realtek/patches-6.18/714-net-phy-sfp-add-support-for-SMBus.patch",
          "target/linux/generic/pending-6.18/753-net-sfp-add-quirk-for-ZYXEL-PMG3000-D20B.patch"
        ],
        "commitId" : "8ef3195f377420401969d31ecfd87c5e4179d166",
        "timestamp" : 1793091151000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "generic: 6.18: add SFP quirk for ZYXEL PMG3000-D20B\u000a\u000aThe ZYXEL PMG3000-D20B GPON SFP module reports LOS and TX_FAULT in a\u000away that prevents the SFP state machine from initialising it. Its\u000aEEPROM also advertises autonegotiation, which the module does not\u000asupport, and it needs a long startup delay before it comes up reliably.\u000a\u000aAdd a quirk which reuses the existing fixups to ignore LOS and\u000aTX_FAULT, drops the bogus autoneg capability and sets module_t_wait\u000ato T_START_UP_BAD_GPON (60s).\u000a\u000aSigned-off-by: Martin Ostertag <martin.ostertag@gmx.de>\u000aLink: https://github.com/openwrt/openwrt/pull/26187\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-27 09:52:31 +0100",
        "id" : "8ef3195f377420401969d31ecfd87c5e4179d166",
        "msg" : "generic: 6.18: add SFP quirk for ZYXEL PMG3000-D20B",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/patches-6.18/705-v7.1-net-sfp-initialize-i2c_block_size-at-adapter-configu.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/patches-6.18/706-01-v7.2-net-sfp-apply-I2C-adapter-quirks-to-limit-block-size.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/patches-6.18/706-02-v7.2-net-sfp-extend-SMBus-support.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/patches-6.18/714-net-phy-sfp-add-support-for-SMBus.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/753-net-sfp-add-quirk-for-ZYXEL-PMG3000-D20B.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/patches-6.18/824-net-dsa-pass-bridge-VLAN-protocol-changes-to-drivers.patch"
        ],
        "commitId" : "f3aa65fff90f2be10efedff798f8ba6bf6b90f0f",
        "timestamp" : 1793092466000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "realtek: refresh patches\u000a\u000aCI told us to refresh, so lets do it.\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-27 10:14:26 +0100",
        "id" : "f3aa65fff90f2be10efedff798f8ba6bf6b90f0f",
        "msg" : "realtek: refresh patches",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/patches-6.18/824-net-dsa-pass-bridge-VLAN-protocol-changes-to-drivers.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/firmware/ipq-wifi/Makefile"
        ],
        "commitId" : "f5a8129af3b8be8c9e629cefe603a7873ead21b8",
        "timestamp" : 1793093707000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "ipq-wifi: update to Git HEAD (2026-10-25)\u000a\u000aa4bb9873649c ipq9574/qcn9274: add Linksys LN6001 board files\u000a49ce14c099b1 ipq6018: add BDF for Wallys DR6018S\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-27 10:35:07 +0100",
        "id" : "f5a8129af3b8be8c9e629cefe603a7873ead21b8",
        "msg" : "ipq-wifi: update to Git HEAD (2026-10-25)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/firmware/ipq-wifi/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/platform.sh",
          "target/linux/qualcommax/image/ipq60xx.mk",
          "target/linux/qualcommax/dts/ipq6010-dr6018s.dts",
          "target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network",
          "package/firmware/ipq-wifi/Makefile"
        ],
        "commitId" : "01573cdc37e86b5e5308fffc81244b805bfb97f1",
        "timestamp" : 1793093783000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: ipq60xx: add support for Wallys DR6018S\u000a\u000aThe Wallys DR6018S is a dual-band Wi-Fi 6 board based on the\u000aQualcomm-Atheros IPQ6010 platform.\u000a\u000aProduct specification:\u000ahttps://www.wallystech.com/upload/DR6018S.pdf\u000a\u000aHardware:\u000a- Qualcomm-Atheros IPQ6010 quad-core ARM 64-bit A53 processor at 1.8 GHz\u000a- 1 GB DDR3L memory (2 x 512 MB)\u000a- 8 MB NOR flash and 256 MB NAND flash\u000a- Two 1 Gbps Ethernet ports with a QCA8075 PHY package\u000a- One Ethernet port supports passive or active PoE\u000a- Integrated 2x2 2.4 GHz 802.11ax radio, up to 573 Mbps\u000a- Integrated 2x2 5 GHz 802.11ax radio, up to 1201 Mbps\u000a- M.2 NGFF E-key socket with PCIe 3.0 support for an optional QCN9074\u000a  Wi-Fi module\u000a- Optional SD card slot\u000a- Optional USB 3.0 port\u000a- Four-pin serial connector using GPIO44/GPIO45 at 115200 8N1\u000a- Four status LEDs and one reset button\u000a- Four MMCX antenna connectors\u000a- 24-48 V DC input with passive and active PoE support\u000a\u000aThis adds the device tree, FIT/UBI image definitions, network defaults,\u000aNVMEM-backed ART calibration and MAC address extraction, NAND sysupgrade\u000asupport and optional QCN9074 PCIe Wi-Fi support.\u000a\u000aThe SD card slot and USB 3.0 port are listed as board capabilities from\u000athe vendor specification. They are not required for the tested onboard\u000aWi-Fi configuration.\u000a\u000aMAC address layout:\u000a- WAN: MAC stored in 0:ART at offset 0x0000\u000a- LAN: MAC stored in 0:ART at offset 0x0006\u000a- 2.4 GHz and 5 GHz Wi-Fi: calibration and radio MACs stored in the\u000a  calibration block at 0:ART offset 0x1000\u000a\u000aThe MAC addresses are unit-specific and are not hard-coded.\u000a\u000aBoard data is submitted separately through firmware_qca-wireless.\u000a\u000aInstallation:\u000a1. Boot the initramfs image through the vendor U-Boot:\u000a\u000a   setenv serverip 192.168.1.4\u000a   setenv ipaddr 192.168.1.1\u000a   tftpboot 0x44000000 openwrt-qualcommax-ipq60xx-wallys_dr6018s-initramfs-uImage.itb\u000a   bootm 0x44000000\u000a\u000a2. Transfer the sysupgrade image to /tmp and install it:\u000a\u000a   sysupgrade -n /tmp/openwrt-qualcommax-ipq60xx-wallys_dr6018s-squashfs-sysupgrade.bin\u000a\u000aTested on a Wallys DR6018S:\u000a- Booting the initramfs image from the vendor U-Boot\u000a- Installing OpenWrt to SPI NAND\u000a- Rebooting and cold-booting from the installed system\u000a- 2.4 GHz and 5 GHz AP operation\u000a- QCN9074 PCIe module enumeration and Wi-Fi operation\u000a- Ethernet connectivity\u000a- Correct Ethernet and Wi-Fi MAC addresses\u000a\u000aSigned-off-by: Alan Gao <1226010136@qq.com>\u000aLink: https://github.com/openwrt/openwrt/pull/25955\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-27 10:36:23 +0100",
        "id" : "01573cdc37e86b5e5308fffc81244b805bfb97f1",
        "msg" : "qualcommax: ipq60xx: add support for Wallys DR6018S",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/image/ipq60xx.mk"
          },
          {
            "editType" : "add",
            "file" : "target/linux/qualcommax/dts/ipq6010-dr6018s.dts"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/platform.sh"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network"
          },
          {
            "editType" : "edit",
            "file" : "package/firmware/ipq-wifi/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc",
          "package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-iface.json"
        ],
        "commitId" : "c9ea07732f7561a346d5d95e525c53fe0b00cf14",
        "timestamp" : 1793094200000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: ignore sae_pwe 0 on an AP MLD with a 6 GHz link\u000a\u000ahostapd_config_check_bss_6g() turns sae_pwe 0 into 2 on 6 GHz only.\u000aWith an explicit sae_pwe 0 on an AP MLD, the 6 GHz link advertises SAE\u000aH2E in its RSNXE and the other links advertise no RSNXE. IEEE\u000a802.11be-2024 12.6.2 requires the same RSNXE on all links.\u000a\u000aFor sae and sae-mixed, use the band defaults in place of 0: 1 on 6 GHz,\u000awhere WPA3 v3.5 does not allow hunting-and-pecking, and 2 elsewhere.\u000aBoth values set the same RSNXE. psk2 and sae-compat keep the value,\u000asince their RSNE has no SAE AKM outside 6 GHz.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-27 10:43:20 +0100",
        "id" : "c9ea07732f7561a346d5d95e525c53fe0b00cf14",
        "msg" : "wifi-scripts: ignore sae_pwe 0 on an AP MLD with a 6 GHz link",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-iface.json"
          },
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc",
          "package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-iface.json"
        ],
        "commitId" : "035a94fdb5fe5cc23cb369d0ce220601d2727ea4",
        "timestamp" : 1793094200000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: default sae_pwe also with ppsk\u000a\u000aWith ppsk, iface_auth_type() leaves sae_pwe unset and hostapd uses 0.\u000aOn an AP MLD with a 6 GHz link, the 6 GHz link then advertises SAE H2E\u000ain its RSNXE and the other links advertise no RSNXE, as with an\u000aexplicit sae_pwe 0.\u000a\u000appsk skipped the defaults because sae_get_password() derived no PT for\u000aa per-station password, so H2E commits failed. Commit 8db58e80ab30\u000a(\"hostapd: derive the SAE PT of a per-station password\") added that, so\u000ause the defaults with ppsk too: 1 on 6 GHz and 2 on other bands.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-27 10:43:20 +0100",
        "id" : "035a94fdb5fe5cc23cb369d0ce220601d2727ea4",
        "msg" : "wifi-scripts: default sae_pwe also with ppsk",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc"
          },
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-iface.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/bridger/Makefile"
        ],
        "commitId" : "fbbcf2f78ba001471016f8b5ab0c265b532b22ea",
        "timestamp" : 1793094221000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "bridger: update to Git HEAD (2026-09-18)\u000a\u000a5084b9c68b0d flow: free flow struct on delete and skip idle path after free\u000ab2b73e247c3b device: prevent member_list double-add on repeated update\u000a4b008863ec30 device: clean up fdb entries on master change and device free\u000ac38234ea982b nl: guard bridger_nl_udebug_cb behind NL_UDEBUG\u000a7328c75e0683 nl: fix bridge vlan state notification handling\u000a335bb7a93793 nl: dump vlan state after link info during resync\u000a3855a8d2fe55 nl: fix vlan table leak and state loss on rebuild\u000a72293c5adf2e nl: clear offloaded flows when a vlan stops forwarding\u000a8a282a294061 nl: keep port state across link messages without protinfo\u000a385d82f1024b device: clean up references to freed devices and bridges\u000aeffe9fb0f351 flow: fix offload ifindex truncation\u000aa429ae138b17 nl: dump all offload filters when updating flow stats\u000a056524b9f39c flow: evict the least active flow when the offload map is full\u000ae8d03f033c5d ubus: apply bridge_local_tx regardless of blacklist contents\u000a04b40c1234c4 flow: skip offload for blacklisted or detached devices\u000a582e26c56fc8 nl: fix message leak in bridger_refresh_linkinfo\u000abb2b1f40ba4f nl: remove stale devices and fdb entries during resync\u000acefdf80bcf81 flow: reset the fdb refresh flag on all entries\u000ae0dbb73fa96c bridger-bpf: count packets for flows without a target port\u000a43c44960b8ea bridger-bpf: fix off-by-one in skb_ptr bounds check\u000a871ee2e5fd10 bridger-bpf: preserve vlan priority when retagging flows\u000a6b5071cf63a2 device: drop remaining kernel and config state on free\u000a240ce3e86f1b flow: remove the offload filter when a re-added flow stops qualifying\u000a6ef1f9d9c6dd nl: process fdb removal for aged out entries\u000ac355096362a2 nl: fix handling of bridge vlan change notifications\u000a1bb2be83ea48 main: fix link failure with ubus support disabled\u000a8b29b5d03c4b flow: fix pending flow handling for existing flows\u000a0bcfb0043645 flow: only evict flows when the offload map is full\u000a7a0d64fcab83 nl: report netlink errors back to the caller\u000a2a2d1261d12e nl: offload on the outermost device of the chain first\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-27 10:43:41 +0100",
        "id" : "fbbcf2f78ba001471016f8b5ab0c265b532b22ea",
        "msg" : "bridger: update to Git HEAD (2026-09-18)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/bridger/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/utils/ethtool/Makefile"
        ],
        "commitId" : "eeea495767bd378f65093294f7ddb492b3cab378",
        "timestamp" : 1793094272000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "ethtool: update to 7.2\u000a\u000aVersion 7.2 - Oct 19, 2026\u000a\u0009* Feature: support for KSZ87xx PHY tunables (--{get,set}-phy-tunable)\u000a\u0009* Fix: cmis: fix printing of Tx bias current (-m)\u000a\u0009* Fix: cmis: fix printing of channel-level flags (-m)\u000a\u0009* Fix: cmis: fix printing of CDB EPL pages (-m)\u000a\u0009* Fix: printing of transmitter technology for CMIS transceivers (-m)\u000a\u0009* Fix: avoid undefined behavior with CMIS transceivers (-m)\u000a\u0009* Fix: add missing CMIS transmitter technologies (-m)\u000a\u0009* Fix: printing of attenuation and wavelength (-m)\u000a\u0009* Fix: printing of link length (-m)\u000a\u0009* Fix: sfpid: print all implemented options (-m)\u000a\u0009* Fix: sfpid: print all compliance codes (-m)\u000a\u0009* Fix: qsfp: print all compliance codes (-m)\u000a\u0009* Fix: module-eeprom: clamp data length to attribute payload size (-m)\u000a\u0009* Fix: validate module EEPROM offset and length (-m)\u000a\u0009* Fix: rss: bound hash function masks in text and JSON output (-x)\u000a\u0009* Fix: fbnic: fix off-by-one shift in reg dump parser (-d)\u000a\u0009* Fix: fbnic: Fix various TX and RX CSR fields decoding (-d)\u000a\u0009* Fix: fbnic: Fix register dump names and bit labels (-d)\u000a\u000aSigned-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26216\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-27 10:44:32 +0100",
        "id" : "eeea495767bd378f65093294f7ddb492b3cab378",
        "msg" : "ethtool: update to 7.2",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/utils/ethtool/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/utils/iw/Makefile"
        ],
        "commitId" : "0104d9e500aebd0344c0a6a24801d80dde1ce441",
        "timestamp" : 1793094420000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "iw: fix the documentation URL\u000a\u000aThe old wireless.kernel.org URL is redirected to a malformed address on\u000awireless.docs.kernel.org, which returns 404. Point it to the current\u000adocumentation page.\u000a\u000aSigned-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26218\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-27 10:47:00 +0100",
        "id" : "0104d9e500aebd0344c0a6a24801d80dde1ce441",
        "msg" : "iw: fix the documentation URL",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/utils/iw/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/utils/iproute2/patches/200-drop_libbsd_dependency.patch",
          "package/network/utils/iproute2/patches/150-keep_libcap_optional.patch",
          "package/network/utils/iproute2/patches/001-1-tc-cake-add-cake_mq-support.patch",
          "package/network/utils/iproute2/patches/301-fix-UINT_MAX-undeclared-with-build-with-musl-libc.patch",
          "package/network/utils/iproute2/patches/140-keep_libmnl_optional.patch",
          "package/network/utils/iproute2/patches/130-no_netem_tipc_man_vdpa.patch",
          "package/network/utils/iproute2/Makefile",
          "package/network/utils/iproute2/patches/001-0-Update-kernel-headers.patch"
        ],
        "commitId" : "6b7ea6896a3a83c9ae80d31e8d35d911e032268f",
        "timestamp" : 1793094610000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "iproute2: update to 7.3.0\u000a\u000aDrop the patches that are included upstream: the kernel headers update,\u000athe cake_mq support and the musl UINT_MAX fix. Do not build the new\u000adpll tool, like the other tools that are not packaged, and refresh the\u000aremaining patches.\u000a\u000aSigned-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26217\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-27 10:50:10 +0100",
        "id" : "6b7ea6896a3a83c9ae80d31e8d35d911e032268f",
        "msg" : "iproute2: update to 7.3.0",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/utils/iproute2/Makefile"
          },
          {
            "editType" : "edit",
            "file" : "package/network/utils/iproute2/patches/130-no_netem_tipc_man_vdpa.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/utils/iproute2/patches/150-keep_libcap_optional.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/utils/iproute2/patches/200-drop_libbsd_dependency.patch"
          },
          {
            "editType" : "delete",
            "file" : "package/network/utils/iproute2/patches/001-0-Update-kernel-headers.patch"
          },
          {
            "editType" : "delete",
            "file" : "package/network/utils/iproute2/patches/001-1-tc-cake-add-cake_mq-support.patch"
          },
          {
            "editType" : "delete",
            "file" : "package/network/utils/iproute2/patches/301-fix-UINT_MAX-undeclared-with-build-with-musl-libc.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/utils/iproute2/patches/140-keep_libmnl_optional.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/common.c",
          "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl-otto.h"
        ],
        "commitId" : "86f43bcb32558f0f33cac03ae9c5b7851ba79334",
        "timestamp" : 1793106513000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/markus.stockhausen",
          "fullName" : "markus.stockhausen"
        },
        "authorEmail" : "markus.stockhausen@gmx.de",
        "comment" : "realtek: dsa: unregister the switch during remove and probe unwind\u000a\u000aThe Realtek platform driver calls dsa_switch_shutdown() on removal and\u000awhen L3 setup fails after DSA registration. Shutdown only disconnects\u000aports for system shutdown; it does not undo dsa_register_switch(). The\u000alink-state interrupt requested with request_irq() is also left installed.\u000a\u000aTrack successful IRQ registration and release the interrupt before\u000aunregistering the switch, while its port devices still exist. Cancel\u000acounter polling on the L3 probe failure path as well as on removal, then\u000ause dsa_unregister_switch() before releasing TC state and the workqueue.\u000a\u000aSigned-off-by: João Silva <jgc3silva@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26228\u000aSigned-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>\u000a",
        "date" : "2026-10-27 14:08:33 +0100",
        "id" : "86f43bcb32558f0f33cac03ae9c5b7851ba79334",
        "msg" : "realtek: dsa: unregister the switch during remove and probe unwind",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl-otto.h"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/common.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "include/kernel-build.mk",
          "include/image.mk",
          "include/subdir.mk",
          "target/linux/Makefile"
        ],
        "commitId" : "7cd9ef1f2223541943c1ebb9808a7a637b173864",
        "timestamp" : 1793119521000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "build: add optional DTB schema check target\u000a\u000aAdd target/linux/dtbs_check for manually checking selected OpenWrt\u000aDTBs against the patched kernel binding schemas. It runs only when\u000aexplicitly requested; normal builds do not invoke it.\u000a\u000aDT_SCHEMA_FILES can limit validation to specific bindings.\u000a\u000aLink: https://github.com/openwrt/openwrt/pull/26240\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-27 17:45:21 +0100",
        "id" : "7cd9ef1f2223541943c1ebb9808a7a637b173864",
        "msg" : "build: add optional DTB schema check target",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "include/subdir.mk"
          },
          {
            "editType" : "edit",
            "file" : "include/kernel-build.mk"
          },
          {
            "editType" : "edit",
            "file" : "include/image.mk"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/rtl960x/target.mk"
        ],
        "commitId" : "dc9ce90354a2733489663c9479084477070f747d",
        "timestamp" : 1793169716000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/markus.stockhausen",
          "fullName" : "markus.stockhausen"
        },
        "authorEmail" : "markus.stockhausen@gmx.de",
        "comment" : "realtek: rtl960x: change to router device type\u000a\u000aThe SoCs in rtl960x subtarget are of router variety so override the\u000adevice type from basic to router.\u000a\u000aSigned-off-by: Rustam Adilov <adilov@tutamail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26137\u000aSigned-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>\u000a",
        "date" : "2026-10-28 07:41:56 +0100",
        "id" : "dc9ce90354a2733489663c9479084477070f747d",
        "msg" : "realtek: rtl960x: change to router device type",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/rtl960x/target.mk"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/dts/rtl9607c-vb.dtsi",
          "target/linux/realtek/dts/rtl9607c-va.dtsi",
          "target/linux/realtek/dts/rtl9607_bt-pon_bt-g711ax.dts"
        ],
        "commitId" : "92b3ad7722ea7c2fe16173b3543eec0f50d2df07",
        "timestamp" : 1793169716000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/markus.stockhausen",
          "fullName" : "markus.stockhausen"
        },
        "authorEmail" : "markus.stockhausen@gmx.de",
        "comment" : "realtek: add rtl9607c-vb and rtl9607c-va dtsi files\u000a\u000aSome devices have the an older revision of RTL9607C/RTL8198D SoC which would\u000arequire board file to override some compatibles from rtl960x dtsi file, like\u000apcie phy and potentially more in the future.\u000a\u000aAdd the separate rtl9607c-vb and rtl9607c-va dtsi files to handle it instead.\u000a\u000aChange the bt-g711ax dts file to now include the new rtl9607c-vb dtsi file.\u000a\u000aSigned-off-by: Rustam Adilov <adilov@tutamail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26137\u000aSigned-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>\u000a",
        "date" : "2026-10-28 07:41:56 +0100",
        "id" : "92b3ad7722ea7c2fe16173b3543eec0f50d2df07",
        "msg" : "realtek: add rtl9607c-vb and rtl9607c-va dtsi files",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/realtek/dts/rtl9607c-vb.dtsi"
          },
          {
            "editType" : "add",
            "file" : "target/linux/realtek/dts/rtl9607c-va.dtsi"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/dts/rtl9607_bt-pon_bt-g711ax.dts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
        ],
        "commitId" : "3947b4d959f93478a1e792afae76d55d84018945",
        "timestamp" : 1793172942000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/markus.stockhausen",
          "fullName" : "markus.stockhausen"
        },
        "authorEmail" : "markus.stockhausen@gmx.de",
        "comment" : "realtek: pie: rtl930x: validate rules and propagate programming errors\u000a\u000aThe RTL930x PIE writer indexes the template array using unchecked rule\u000aand template IDs and reports success even when the table write fails.\u000aRule addition also ignores template-register read errors and the writer's\u000areturn value. TC can therefore report an offloaded rule that was not\u000ainstalled.\u000a\u000aValidate rule indices and template selectors before accessing registers,\u000abitmaps or template descriptions. Propagate register, table-acquisition\u000aand table-write errors, including writes that clear a rule.\u000a\u000aOnly enable block lookup after successfully writing the rule and return\u000alookup programming errors to the caller. Mark failed software rules\u000ainvalid but keep their IDs reserved: a failed hardware operation may\u000astill have committed and reusing the ID could overwrite an active rule.\u000a\u000aSigned-off-by: João Silva <jgc3silva@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26227\u000aSigned-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>\u000a",
        "date" : "2026-10-28 08:35:42 +0100",
        "id" : "3947b4d959f93478a1e792afae76d55d84018945",
        "msg" : "realtek: pie: rtl930x: validate rules and propagate programming errors",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl-otto.h",
          "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
        ],
        "commitId" : "1943e280ca7f1426061cb06b3eb5cd6557d3974c",
        "timestamp" : 1793172942000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/markus.stockhausen",
          "fullName" : "markus.stockhausen"
        },
        "authorEmail" : "markus.stockhausen@gmx.de",
        "comment" : "realtek: pie: rtl930x: roll back failed TC rule additions\u000a\u000aA failed table write may already have installed an active hardware rule.\u000aTC discards the failed flow without calling rule removal, so clearing\u000athe software valid flag and reserving the ID leaves that rule orphaned.\u000a\u000aInvalidate the hardware row before returning the original programming\u000aerror. Allow invalidation without reading the template selector, keeping\u000arollback independent of selector-read failures.\u000a\u000aIf rollback fails, disable and quarantine the entire PIE block until\u000areprobe. Prevent subsequent additions from re-enabling it, including\u000aafter existing rules release their IDs. Report when block disabling\u000acannot be verified and a reset is required.\u000a\u000aValidated with partial and delayed write failures, TC failure cleanup,\u000asanitizer checks, MIPS compilation and checkpatch.\u000a\u000aSigned-off-by: João Silva <jgc3silva@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26227\u000aSigned-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>\u000a",
        "date" : "2026-10-28 08:35:42 +0100",
        "id" : "1943e280ca7f1426061cb06b3eb5cd6557d3974c",
        "msg" : "realtek: pie: rtl930x: roll back failed TC rule additions",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/pie.c"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl-otto.h"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/netifd/files/usr/libexec/network/packet-steering.uc",
          "package/network/config/netifd/Makefile"
        ],
        "commitId" : "e1dd9894042a7250d96d7fae1f6d6a98060f2d78",
        "timestamp" : 1793178094000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "netifd: leave receive steering off on hardware RSS devices\u000a\u000aA device with at least as many receive queues as CPUs and no NAPI\u000athreads is steered like a single queue device: the default mode points\u000athe RPS mask of every queue at one CPU. qca_edma on qualcommax spreads\u000aits flows over four rings by RSS and pins the interrupts of each ring to\u000aits own CPU, so this funnels everything the hardware spread back onto\u000aCPU0.\u000a\u000aOn a Xiaomi AX3600 with flow offload off, a routed 8-flow TCP download\u000areached 737-790 Mbit/s with CPU0 at 100% softirq and the other CPUs\u000abelow 10% (6 runs). With RPS off the same download reached\u000a933-941 Mbit/s (3 runs).\u000a\u000aLeave RPS off on such a device in the default mode when its receive\u000ainterrupts, the MSI vectors of a PCI device or the GIC interrupts of its\u000adevice tree node, are pinned to every CPU between them. Interrupts named\u000afor transmit completions only are not counted. A device whose receive\u000ainterrupts land on fewer CPUs is steered as before, as are mode 2 and\u000adevices with NAPI threads.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/26222\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 10:01:34 +0100",
        "id" : "e1dd9894042a7250d96d7fae1f6d6a98060f2d78",
        "msg" : "netifd: leave receive steering off on hardware RSS devices",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/netifd/files/usr/libexec/network/packet-steering.uc"
          },
          {
            "editType" : "edit",
            "file" : "package/network/config/netifd/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/netifd/files/usr/libexec/network/packet-steering.uc"
        ],
        "commitId" : "cd6b08f2b5b99c8ac76adc58b77f75fad3bd9d78",
        "timestamp" : 1793178094000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "netifd: leave receive steering off on RSS Wi-Fi devices\u000a\u000amac80211 gives a Wi-Fi netdev one receive queue, also when the driver\u000aspreads received frames over several rings by RSS and says so with\u000aIEEE80211_HW_USES_RSS. ath11k hashes received frames over four REO\u000arings, and on ipq807x the interrupts of those rings are pinned to\u000aseparate CPUs, but the default steering mode points the RPS mask of the\u000aAP netdev at one CPU, moving the stack work of every received frame back\u000aonto it.\u000a\u000aOn a Xiaomi AX3600, a 4-stream TCP upload from a Wi-Fi client to a\u000awired host ran CPU0 at 80-91% with RPS on CPU0 and the other CPUs below\u000a21%. With RPS off no CPU went above 44%, at the same total CPU time and\u000a908-938 Mbit/s against 858-937 Mbit/s (3 runs each).\u000a\u000aRead the flag from mac80211's hwflags in debugfs and treat such a\u000adevice like a multi-queue RSS device: RPS stays off when its receive\u000ainterrupts are spread over every CPU.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/26222\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 10:01:34 +0100",
        "id" : "cd6b08f2b5b99c8ac76adc58b77f75fad3bd9d78",
        "msg" : "netifd: leave receive steering off on RSS Wi-Fi devices",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/netifd/files/usr/libexec/network/packet-steering.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/netifd/files/usr/libexec/network/packet-steering.uc"
        ],
        "commitId" : "8a97b52c3a90266769c63c8efbbf1666f249e523",
        "timestamp" : 1793178094000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "netifd: steer receive work away from the interrupt CPUs\u000a\u000aThe default mode picks the RPS CPU of a softirq NAPI device by load\u000aalone, without knowing where its interrupts are taken. On a system with\u000aone such device the pick is CPU0, which is where its interrupts usually\u000aland, so RPS hands the stack work to the CPU that already polls the\u000adevice. A multi-queue device with every interrupt on one CPU (igb\u000awithout spread vectors, bcmgenet, ath11k over PCI on qualcommax) and a\u000asingle queue device on CPU0 run all of their receive work there.\u000a\u000aOn a Xiaomi AX3600 with every qca_edma interrupt moved to CPU0 and flow\u000aoffload off, a routed 8-flow TCP download reached 625-649 Mbit/s with\u000aRPS on CPU0 and CPU0 at 100%. RPS on one other CPU reached\u000a922-940 Mbit/s with that CPU at 97-99%. RPS over the three CPUs without\u000ainterrupts reached 929-941 Mbit/s with no CPU above 60%, and RPS over\u000aall four ran CPU0 at 93-96% (2 runs each).\u000a\u000aWhen the receive interrupts of a softirq NAPI device are pinned to some\u000abut not all CPUs, point its RPS mask in the default mode at the other\u000aCPUs and account the load on both. Devices whose interrupts cannot be\u000aread are steered as before.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/26222\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 10:01:34 +0100",
        "id" : "8a97b52c3a90266769c63c8efbbf1666f249e523",
        "msg" : "netifd: steer receive work away from the interrupt CPUs",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/netifd/files/usr/libexec/network/packet-steering.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/ipq807x/base-files/etc/init.d/smp_affinity"
        ],
        "commitId" : "e54d48c11e6e45bb662339233389c94dabc87143",
        "timestamp" : 1793178094000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: ipq807x: re-run packet steering after pinning the IRQs\u000a\u000aThe packet steering script decides from where the receive interrupts of\u000aa device are pinned. smp_affinity pins the ath11k rings at START=93,\u000aafter packet steering ran at START=25, so steering only sees the spread\u000aif an interface event happens to reload it afterwards.\u000a\u000aReload packet steering once the interrupts are pinned.\u000a\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/26222\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 10:01:34 +0100",
        "id" : "e54d48c11e6e45bb662339233389c94dabc87143",
        "msg" : "qualcommax: ipq807x: re-run packet steering after pinning the IRQs",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/ipq807x/base-files/etc/init.d/smp_affinity"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/ustp/Makefile"
        ],
        "commitId" : "e80838fb2a84cc9537c8540382d7af0e8826c35d",
        "timestamp" : 1793185014000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "ustp: update to Git HEAD (2026-10-28)\u000a\u000a22cb867fd37e netif_utils: size sysfs path buffers for the longest interface name\u000ad13acc7252ab netif_utils: close the port file on a read error\u000adbf456dfe9ad ubus: take the bridge priority from add_bridge\u000a1be05eb1239f config: free the config of removed bridges\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 11:56:54 +0100",
        "id" : "e80838fb2a84cc9537c8540382d7af0e8826c35d",
        "msg" : "ustp: update to Git HEAD (2026-10-28)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/ustp/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/netifd/Makefile"
        ],
        "commitId" : "0747c5b48890e32876eb44659a76473ebc4ae4f5",
        "timestamp" : 1793185019000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "netifd: update to Git HEAD (2026-10-28)\u000a\u000af898a7321f80 system-linux: refuse netns move of an unresolved device\u000ab81713f8cac8 interface: defer jailed device move until the device exists\u000ac34c90f38db9 interface: drop a pending jail move when the jail config changes\u000ae9414e7f8482 bridge: take bridge-vlan configuration as part of the bridge config\u000a05574f61fff5 device: replace config devices that were removed from the config\u000a8cfc2c03959d bridge: apply member vlans from one place\u000affe88f2ce0f1 system-linux: do not leak the callback in system_bridge_vlan_check()\u000a6d4cac2b6e2f bridge: handle a failed member allocation in bridge_hotplug_add()\u000acdf3e8d097d4 vlandev: keep the old config if copying the new one fails\u000a2ac163481042 vlandev: restart the device when its vid alias changes\u000ab1d52c59304e bridge: tie the vlan handling to vlan filtering and configured vlans\u000acfaf6dd3d489 bridge: keep hotplug vlans when the config drops their vlan\u000abba15bc16284 bridge: release hotplug vlans that no member uses any more\u000a967189471692 bridge: create bridge vlans only for tracked hotplug entries\u000a569ff4f7e374 bridge: make a hotplug add set the member's hotplug vlans\u000a4a8597e9adc1 interface: keep the member when the master of a link stays the same\u000a230521b6253d bridge: handle a failed vlan allocation in bridge_hotplug_get_vlan()\u000a9a63cdaf0a0d bridge: keep range vlans when a tracked vlan of the port goes away\u000a70355bfebe6d bridge: accept range vlans of a port in the vlan check\u000a2a4c065b043a bridge: write the bridge's own extra vlans only with vlan filtering\u000a79a5da4bfce5 vlan, vlandev: forward hotplug links only to a bridge that filters vlans\u000af39e5958edb1 vlandev: check hotplug operations on vlan updates\u000a9d3dac944a60 bridge: accept auth vlans of a port in the vlan check\u000a09af141e97f3 bridge: remove all hotplug vlans of a member on hotplug del\u000a9988b0bd897e bridge: group the vlans of a member by source\u000a423123d7135b bridge: track config and hotplug ownership of members\u000a0d37020faeee device: keep the hotplug link on device replacement, iterate all devices\u000a07518dc5ad9c interface: keep an external hotplug device a hotplug main device on reload\u000aed7603dc842a interface: replace a hotplug main device with a newly linked one\u000a976eb74f9fbf extdev: do not announce a topology change for an existing member\u000aab357c2f237e interface: apply stored hotplug links again after config and device changes\u000a13002e858a70 device, bridge: add the bridge and bridge_vlan device options\u000a5f7a462bcbcb bridge: keep the default vlan 1 without bridge-vlan sections\u000ab85814b0ee17 bridge: keep auth vlans when ranges or vlans of a port are removed\u000a58768be7bf62 system-linux: check the allocations in system_bridge_vlan_check()\u000ac9041c7fa7b4 system-linux: apply the state of system_if_check() after the exchange\u000a3443837ab8cd system-linux: read the link state again on a link event\u000a721103dbeafb system-dummy: log the bridge operations\u000af077e15544ca bridge: add the bridge-vlan option local_pvid\u000a7ed52d1e649f bridge: make a kept dynamic vlan a tagged vlan of the bridge\u000a866dffb41cac ubus: walk a copy of procd's data in netifd_ubus_data_cb()\u000a8da363f546f5 main: end a helper with the netifd that started it\u000ab359355f3349 proto-ext: remove the host route when the interface goes down\u000a80e17d8b74aa build: generate ethtool-modes.h in an out-of-tree build\u000aedfe9877ee7d main: end the helpers with SIGTERM when netifd exits\u000a48e4f695773c bridge: move the vlan setup of the bridge and of a port into helpers\u000ad7d270a5a9a1 bridge: apply a change of vlan_filtering to the running bridge\u000a86d56ad76c67 config: add a procd network-device entry in the pass of its type\u000a2fec6e82409b config: add a procd network-device entry without its uci section first\u000a06fc90458560 device: add a board.json default for the pse option\u000a1816971a93c3 main: only use prctl() on linux\u000a13c7e63045ef device: add IPv6 NDP tunable device options\u000a19d2392ff5bb bridge: add per-VLAN multicast snooping\u000aadd2e9e7a29e device: add ARP and per-family neighbour options\u000a8a268294c8eb system-linux: empty the event queue before the link dump\u000ae4b847c71b50 main: wait for the helpers before exiting\u000abf7f2afae02a vlandev, macvlan: delete a stale device before creating it\u000a2922ee823259 main: start no helper while netifd waits for its exit\u000a7d1555e10a6a vrf: delete a stale device before creating it\u000a20be6d5c7908 bridge: pass the bridge priority to the userspace STP daemon\u000aade072a34c93 bridge: use a valid bridge priority as default\u000aa1e39a458f96 bridge: ignore a bridge priority above 65535\u000a\u000aFixes: https://github.com/openwrt/openwrt/issues/22905\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 11:56:59 +0100",
        "id" : "0747c5b48890e32876eb44659a76473ebc4ae4f5",
        "msg" : "netifd: update to Git HEAD (2026-10-28)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/netifd/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/bcm53xx/patches-6.18/348-v7.4-PCI-Expose-devm_pci_alloc_host_bridge_release.patch",
          "target/linux/bcm53xx/patches-6.18/351-v7.4-PCI-iproc-Use-the-EROM-outbound-window-on-BCMA.patch",
          "target/linux/bcm53xx/patches-6.18/351-PCI-iproc-Use-the-EROM-outbound-window-on-BCMA.patch"
        ],
        "commitId" : "79aba5e09246e52081935700b003167e9540ba63",
        "timestamp" : 1793189795000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "bcm53xx: backport the mainline PCIe EROM window fix\u000a\u000aThe fix carried as 351 since a36ed219f2 was reworked upstream and merged\u000afor Linux v7.4. Replace it with the two mainline commits:\u000a\u000a  39d1c645bb99 (\"PCI: Expose devm_pci_alloc_host_bridge_release()\")\u000a  9850907ee1dd (\"PCI: iproc: Use the EROM outbound window on BCMA\")\u000a\u000aThe first one adds a helper the second one uses, so it goes in as 348.\u000a\u000aLike the old 351, the upstream version requests only the memory window\u000athe enumeration ROM reports. When the DT window differs from it, the\u000adriver now prints a warning, where the old 351 dropped it silently. The\u000adts (349) carries the addresses of PCIe core revision 0x07, so boards\u000awith revision 0x01 now log \"does not match EROM window\" for controllers\u000a1 and 2. The window in use is the same as before.\u000a\u000aTested on an ASUS RT-N18U (BCM47081, core revision 0x01): the BCM4360\u000aon bcma0:7 is found and its link comes up, and /proc/iomem and the PCI\u000adevice list match the old 351.\u000a\u000aSigned-off-by: Semih Baskan <strst.gs@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26237\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 13:16:35 +0100",
        "id" : "79aba5e09246e52081935700b003167e9540ba63",
        "msg" : "bcm53xx: backport the mainline PCIe EROM window fix",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/bcm53xx/patches-6.18/351-v7.4-PCI-iproc-Use-the-EROM-outbound-window-on-BCMA.patch"
          },
          {
            "editType" : "delete",
            "file" : "target/linux/bcm53xx/patches-6.18/351-PCI-iproc-Use-the-EROM-outbound-window-on-BCMA.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/bcm53xx/patches-6.18/348-v7.4-PCI-Expose-devm_pci_alloc_host_bridge_release.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/pending-6.18/835-03-leds-trigger-netdev-fix-sysfs-update-group-races.patch",
          "target/linux/generic/pending-6.18/835-05-leds-trigger-netdev-serialize-mode-interval-stores-with-trigger-lock.patch",
          "target/linux/generic/pending-6.18/835-01-leds-trigger-netdev-put-netdev-on-activate-error-path.patch",
          "target/linux/generic/pending-6.18/835-04-leds-trigger-netdev-report-invalid-interval-to-user-space.patch",
          "target/linux/generic/pending-6.18/835-02-leds-trigger-netdev-access-net-dev-under-trigger-data-lock-in-the-worker.patch"
        ],
        "commitId" : "e9c8d91f6dd1db454af504412fc6050cedbc454b",
        "timestamp" : 1793191895000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "generic: 6.18: add pending netdev LED trigger race fixes\u000a\u000aImport pending Alexander Sverdlin's v6 series [1] to fix races between\u000anetdev trigger activation and link-speed sysfs updates. The race can cause\u000aduplicate link_10 entries during boot and leave orphaned sysfs files.\u000a\u000aAdapt the link-speed and mode-store hunks to the attributes and bit\u000aoperations present in 6.18.55.\u000a\u000a[1] https://lore.kernel.org/linux-leds/20261027113349.383147-1-alexander.sverdlin@siemens.com/\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 13:51:35 +0100",
        "id" : "e9c8d91f6dd1db454af504412fc6050cedbc454b",
        "msg" : "generic: 6.18: add pending netdev LED trigger race fixes",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/835-05-leds-trigger-netdev-serialize-mode-interval-stores-with-trigger-lock.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/835-04-leds-trigger-netdev-report-invalid-interval-to-user-space.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/835-01-leds-trigger-netdev-put-netdev-on-activate-error-path.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/835-02-leds-trigger-netdev-access-net-dev-under-trigger-data-lock-in-the-worker.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/835-03-leds-trigger-netdev-fix-sysfs-update-group-races.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/ppp/files/50-ppp-radius-servers-mode.sh",
          "package/network/services/ppp/files/pppd.capabilities",
          "package/network/services/ppp/files/ppp.sh",
          "package/network/services/ppp/files/50-ppp-secrets-mode.sh",
          "package/network/services/ppp/Makefile",
          "package/network/services/ppp/files/pppd_acl.json"
        ],
        "commitId" : "b855f33ea91674c5858dd5c12ed108dac4d38601",
        "timestamp" : 1793192222000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "ppp: run pppd in ujail as an unprivileged user\u000a\u000apppd drops to user ppp (uid 454, created via USERID) with CAP_NET_ADMIN\u000a(/dev/ppp, PPPIOCNEWUNIT, SIOCSIF*) and CAP_NET_RAW (pppoe PF_PACKET),\u000aboth ambient so ip-up/ip-down scripts keep them, with\u000aPR_SET_NO_NEW_PRIVS. The wrapper covers every proto that routes through\u000appp_generic_setup() and is skipped when /sbin/ujail, the capabilities\u000afile or the ppp user is missing. ujail exits EXIT_FAILURE on a -U name\u000ait cannot resolve, and a sysupgrade can preserve an /etc/passwd that\u000apredates the uid.\u000a\u000apppd's euid != 0 gate (EXIT_NOT_ROOT) would stop the drop. ppp 2.5.4\u000alets pppd run without root when it holds CAP_NET_ADMIN\u000a(ppp-project/ppp#608) and grants the privileged option flag on the\u000acapability, which proto_pppoe_setup() needs for its OPT_PRIV \"plugin\u000apppoe.so\", unless the exec itself raised the privileges (AT_SECURE).\u000a\u000aThe wrapper also hands /dev/ppp to the ppp user. The node is opened at\u000alink setup (generic_establish_ppp), not only in the (stubbed) kernel\u000asupport check, and ships 0600 root:root. chown keeps it reachable for\u000auid 454 alone; the kernel's ppp_open() gates on\u000ans_capable(CAP_NET_ADMIN) either way.\u000a\u000apppd mkdir_recursive()s PPP_PATH_VARRUN and writes its <ifname>.pid\u000aand pppd2.tdb there, which is /var/run/pppd with OpenWrt's\u000a--localstatedir=/var; nothing in this package creates that directory\u000atoday, and uid 454 cannot do it in a root-owned /var/run, so the\u000awrapper pre-creates and chowns it. A failure to write the pid file is\u000aa logged error and a failed tdb open a warning (multilink drops),\u000aneither fatal. usepeerdns makes pppd rewrite /etc/ppp/resolv.conf, the\u000apackage's symlink to /tmp/resolv.conf.ppp, at every connect; a copy left\u000aby a root-run instance across an in-place upgrade refuses uid 454, so\u000athe wrapper removes it first. Nothing in OpenWrt reads that file, the\u000aDNS servers reach netifd through the DNS1/DNS2 environment.\u000a\u000aThe ip-up/ip-down scripts run inside the jail and report back to netifd\u000aover ubus; ubusd's ACL default is deny for every non-root uid, so the\u000ajailed notify_proto call failed silently and the interface never\u000acompleted setup while the PPP session sat connected. Ship\u000a/usr/share/acl.d/pppd.json granting uid 454 access to network.interface\u000anotify_proto and network add_dynamic (ppp6-up's dynamic-interface\u000aregistry call). The postinst reloads the ubusd ACLs, so an upgrade on a\u000arunning router does not leave the interface down. User hooks in\u000a/etc/ppp/ip-up.d and ip-down.d run the same way, as uid 454 with\u000aCAP_NET_ADMIN and CAP_NET_RAW only; a hook that needs root no longer\u000agets it.\u000a\u000aTwo things the unprivileged uid cannot reach on its own. A serial link is\u000ahanded its TTY as a pppd argument - first by proto_ppp_setup, last by\u000acomgt's proto_3g_setup - and a TTY is root:dialout 0660, which\u000aCAP_NET_ADMIN does not override, so the wrapper grants whichever\u000aargument is a character device, the same way it already grants /dev/ppp.\u000aAnd the secrets pppd authenticates from ship 0600 root:root -\u000achap-secrets here, the RADIUS server list in ppp-mod-radius - so a\u000auci-defaults script regrades them to 0640 root:ppp. That has to run on\u000athe device: a postinst runs on the build host with IPKG_INSTROOT set,\u000awhere chgrp resolves the group name through the host's /etc/group and\u000anot the target's, so the image would ship them root:root regardless.\u000a\u000aAssisted-by: Claude:claude-opus-5\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aLink: https://github.com/openwrt/openwrt/pull/25537\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 13:57:02 +0100",
        "id" : "b855f33ea91674c5858dd5c12ed108dac4d38601",
        "msg" : "ppp: run pppd in ujail as an unprivileged user",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/ppp/files/50-ppp-radius-servers-mode.sh"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/ppp/files/pppd.capabilities"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/ppp/Makefile"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/ppp/files/50-ppp-secrets-mode.sh"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/ppp/files/ppp.sh"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/ppp/files/pppd_acl.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/system/rpcd/Makefile"
        ],
        "commitId" : "8ac5e0118cfab77d0978a1ce523ec420629c8a1f",
        "timestamp" : 1793192606000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "rpcd: update to Git HEAD (2026-10-28)\u000a\u000a469d7852316e session: enforce session ACLs for non-root ubus callers\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 14:03:26 +0100",
        "id" : "8ac5e0118cfab77d0978a1ce523ec420629c8a1f",
        "msg" : "rpcd: update to Git HEAD (2026-10-28)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/system/rpcd/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/system/ubus/Makefile"
        ],
        "commitId" : "f79894ab5720ed505ef40e3d99fab1c87baa0036",
        "timestamp" : 1793192606000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "ubus: update to Git HEAD (2026-10-28)\u000a\u000adb20eff5535f libubus: add a pre-invoke callback for resolved object methods\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 14:03:26 +0100",
        "id" : "f79894ab5720ed505ef40e3d99fab1c87baa0036",
        "msg" : "ubus: update to Git HEAD (2026-10-28)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/system/ubus/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/qualcommax/patches-6.18/0084-03-Align-CMN-PLL-inputs-with-binding.patch",
          "target/linux/qualcommax/patches-6.18/0123-arm64-dts-ipq8074-add-cooling-cells-to-CPU-nodes.patch",
          "target/linux/qualcommax/patches-6.18/0130-arm64-dts-qcom-ipq8074-add-CPU-OPP-table.patch",
          "target/linux/qualcommax/patches-6.18/0121-arm64-dts-ipq8074-Add-WLAN-node.patch",
          "target/linux/qualcommax/patches-6.18/0120-arm64-dts-qcom-ipq8074-add-secure-WCSS-remoteproc.patch",
          "target/linux/qualcommax/patches-6.18/0102-arm64-dts-ipq8074-add-reserved-memory-nodes.patch",
          "target/linux/qualcommax/patches-6.18/0902-arm64-dts-ipq8074-add-label-to-clocks.patch",
          "target/linux/qualcommax/patches-6.18/0084-02-Allow-CMN-PLL-bias-clocks.patch",
          "target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq8074-ess.dtsi",
          "target/linux/qualcommax/patches-6.18/0147-arm64-dts-qcom-ipq8074-add-uniphy-clocks-to-gcc.patch",
          "target/linux/qualcommax/patches-6.18/0145-arm64-dts-qcom-ipq8074-move-DR-mode-to-board-DTS.patch",
          "target/linux/qualcommax/patches-6.18/0122-arm64-dts-ipq8074-add-CPU-clock.patch",
          "target/linux/qualcommax/patches-6.18/0084-04-Add-IPQ8074-CMN-PLL.patch",
          "target/linux/qualcommax/patches-6.18/0084-01-Correct-IPQ8074-NSS-NoC-rate.patch",
          "target/linux/qualcommax/patches-6.18/0129-arm64-dts-qcom-ipq8074-add-QFPROM-fuses.patch",
          "target/linux/qualcommax/patches-6.18/0146-arm64-dts-qcom-ipq8074-Flatten-usb-controller-nodes.patch"
        ],
        "commitId" : "4835f60a6d7e28db3e87b17857e1a394f8662745",
        "timestamp" : 1793194038000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qualcommax: ipq8074: add pending CMN PLL clock updates\u000a\u000aImport the pending v2 CMN PLL series [1].\u000aits been reviewed and is pending merge upstream.\u000a\u000aIt corrects the NSS NoC output rate, describes the two GCC inputs, resolves\u000athem through device tree references, and adds the CMN PLL to the SoC DTSI.\u000a\u000aRemove the duplicate ESS overlay node. Refresh the later IPQ8074 DTS\u000apatches for the new node and GCC clock list, and extend the GCC binding\u000afor the target's UNIPHY clock inputs.s\u000a\u000a[1] https://patchwork.kernel.org/series/1193706/\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 14:27:18 +0100",
        "id" : "4835f60a6d7e28db3e87b17857e1a394f8662745",
        "msg" : "qualcommax: ipq8074: add pending CMN PLL clock updates",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0129-arm64-dts-qcom-ipq8074-add-QFPROM-fuses.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0146-arm64-dts-qcom-ipq8074-Flatten-usb-controller-nodes.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0147-arm64-dts-qcom-ipq8074-add-uniphy-clocks-to-gcc.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/qualcommax/patches-6.18/0084-02-Allow-CMN-PLL-bias-clocks.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0120-arm64-dts-qcom-ipq8074-add-secure-WCSS-remoteproc.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0121-arm64-dts-ipq8074-Add-WLAN-node.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0122-arm64-dts-ipq8074-add-CPU-clock.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0123-arm64-dts-ipq8074-add-cooling-cells-to-CPU-nodes.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/qualcommax/patches-6.18/0084-04-Add-IPQ8074-CMN-PLL.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0102-arm64-dts-ipq8074-add-reserved-memory-nodes.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0145-arm64-dts-qcom-ipq8074-move-DR-mode-to-board-DTS.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/qualcommax/patches-6.18/0084-03-Align-CMN-PLL-inputs-with-binding.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0130-arm64-dts-qcom-ipq8074-add-CPU-OPP-table.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/qualcommax/patches-6.18/0084-01-Correct-IPQ8074-NSS-NoC-rate.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq8074-ess.dtsi"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/patches-6.18/0902-arm64-dts-ipq8074-add-label-to-clocks.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/mediatek/mt7622/base-files/lib/preinit/04_set_netdev_label",
          "target/linux/microchipsw/lan969x/base-files/lib/preinit/04_set_netdev_label",
          "target/linux/airoha/base-files/lib/preinit/04_set_netdev_label",
          "target/linux/qualcommax/ipq50xx/base-files/lib/preinit/04_set_netdev_label",
          "target/linux/ramips/mt7621/base-files/lib/preinit/04_set_netdev_label"
        ],
        "commitId" : "de3a3f7132b801b845e03ef533fe546b3c7a853c",
        "timestamp" : 1793194457000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "treewide: handle name collisions in set_netdev_labels\u000a\u000aThe 04_set_netdev_label preinit scripts (airoha, mediatek/mt7622,\u000amicrochipsw/lan969x, qualcommax/ipq50xx, ramips/mt7621) rename\u000ainterfaces with a plain \"ip link set <netdev> name <label>\". The kernel\u000arefuses to rename an interface to a name that is already in use\u000a(-EEXIST), and the scripts neither check the result nor log a failure,\u000aso the rename silently does not happen.\u000a\u000aThis breaks whenever the requested name is currently held by another\u000ainterface, most notably when two interfaces have to swap names, e.g.\u000abecause their probe order is not deterministic. Swapping them needs\u000aan intermediate name, as each rename asks for the name the other\u000ainterface still holds.\u000a\u000aRename in two phases instead:\u000a\u000a 1. park: move every interface that needs a new name to a temporary\u000a    name (\"tmp%d\"), which the kernel expands to the lowest free\u000a    \"tmpN\"\u000a 2. rename: give each parked interface its final name\u000a\u000aAfter the first phase none of the affected interfaces holds its old\u000aname any more, so the target names are free in the second phase and\u000athe result no longer depends on the order in which /sys/class/net is\u000awalked.\u000a\u000aInterfaces that already have the requested name are left alone, so\u000anothing changes (and nothing shows up in the boot log) when the names\u000aare already correct. An interface that has to be renamed now takes two\u000arenames instead of one.\u000a\u000aThe label is read again in the second phase, which works because the\u000aof_node of an interface follows it across renames. Letting the kernel\u000apick the temporary name means it cannot collide with an existing\u000ainterface and always fits in IFNAMSIZ, regardless of the label length.\u000a\u000aThis does not help if the requested name is held by an interface that\u000ahas no label of its own, as there is nobody to move it out of the way.\u000a\u000aWhere a script handles both \"label\" and \"openwrt,netdev-name\", the\u000alatter takes precedence, as before, but both are now evaluated in a\u000asingle pass over /sys/class/net.\u000a\u000aThe filogic target is not changed here. Its set_netdev_labels loop\u000acalls netdev_name_set from /lib/functions/netdev-name.sh, which is\u000ashared with the preinit_netdev event handler that renames one\u000ainterface at a time. Making it two-phase needs a change to that\u000ashared helper and is left for a separate patch.\u000a\u000aSigned-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>\u000aLink: https://github.com/openwrt/openwrt/pull/25460\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 14:34:17 +0100",
        "id" : "de3a3f7132b801b845e03ef533fe546b3c7a853c",
        "msg" : "treewide: handle name collisions in set_netdev_labels",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/microchipsw/lan969x/base-files/lib/preinit/04_set_netdev_label"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/airoha/base-files/lib/preinit/04_set_netdev_label"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/qualcommax/ipq50xx/base-files/lib/preinit/04_set_netdev_label"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/mediatek/mt7622/base-files/lib/preinit/04_set_netdev_label"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/ramips/mt7621/base-files/lib/preinit/04_set_netdev_label"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/odhcpd/Makefile"
        ],
        "commitId" : "36af490dc8356bfc91d9c9b970952ce86ba85633",
        "timestamp" : 1793194634000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "odhcpd: update to Git HEAD (2026-10-28)\u000a\u000a5f5f900a7177 main: allow running as a non-root user\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 14:37:14 +0100",
        "id" : "36af490dc8356bfc91d9c9b970952ce86ba85633",
        "msg" : "odhcpd: update to Git HEAD (2026-10-28)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/odhcpd/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/ath79/dts/qca9561_tplink_eap225-wall-v2.dts"
        ],
        "commitId" : "017459e6ff24ea1cedcb642d4583e125c9b75607",
        "timestamp" : 1793196204000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "ath79: tplink_eap225-wall-v2: use generic calibration variant\u000a\u000aThe qcom,ath10k-calibration-variant property has been deprecated\u000ain favor of the generic qcom,calibration-variant property, which\u000ais common to all Qualcomm Atheros WiFi bindings.\u000a\u000aSwitch to the undeprecated property.\u000a\u000aSigned-off-by: Hernán Lorenzo <lorenzofh@gmail.com>\u000a",
        "date" : "2026-10-28 15:03:24 +0100",
        "id" : "017459e6ff24ea1cedcb642d4583e125c9b75607",
        "msg" : "ath79: tplink_eap225-wall-v2: use generic calibration variant",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/ath79/dts/qca9561_tplink_eap225-wall-v2.dts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch",
          "package/kernel/mac80211/patches/subsys/011-wifi-mac80211-drop-encap-offload-frames-with-a-taint.patch",
          "package/kernel/mac80211/patches/subsys/009-wifi-mac80211-fix-key-selection-for-encap-offload-fr.patch",
          "package/kernel/mac80211/patches/subsys/012-mac80211-tx-Use-info-flags-in-ieee80211_tx_h_select_.patch",
          "package/kernel/mac80211/patches/subsys/321-wifi-mac80211-add-ieee80211_txq_aql_pending.patch",
          "package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch",
          "package/kernel/mac80211/patches/subsys/396-wifi-mac80211-use-link-address-as-TA-for-non-MLO-4-a.patch",
          "package/kernel/mac80211/patches/subsys/008-wifi-mac80211-fix-unauthorised-port-check-for-encap-.patch",
          "package/kernel/mac80211/patches/subsys/397-wifi-mac80211-use-the-AP-address-as-RA-for-a-4-addr-.patch",
          "package/kernel/mac80211/patches/subsys/392-wifi-mac80211-fix-station-lookup-for-management-fram.patch",
          "package/kernel/mac80211/patches/subsys/010-wifi-mac80211-don-t-send-encap-offload-frames-unencr.patch"
        ],
        "commitId" : "87ba6ac8984f7421a8b8a331e767f1b288d759c9",
        "timestamp" : 1793198779000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: backport the encap offload TX fixes\u000a\u000aFor an 802.3 encap offload frame, ieee80211_tx_dequeue() and\u000aieee80211_tx_h_select_key() read the Ethernet header as an 802.11\u000aheader. The unauthorised port check then depends on bits of the\u000adestination address, so frames that a station's TXQ holds when the\u000astation loses its AUTHORIZED flag still go out, also after its\u000aDisassociation. Key selection does not drop a frame of a station that\u000auses encryption but has no key, and does not drop a frame with a\u000atainted key.\u000a\u000aBackport the upstream series that fixes this:\u000a- d59b9bf7df49 (\"wifi: mac80211: fix unauthorised port check for encap offload\")\u000a- 0e80db08668b (\"wifi: mac80211: fix key selection for encap offload frames\")\u000a- a48daf145fed (\"wifi: mac80211: don't send encap offload frames unencrypted\")\u000a- c8ddbe1e8c43 (\"wifi: mac80211: drop encap offload frames with a tainted key\")\u000a- 5f2530a4df8e (\"mac80211: tx: Use info->flags in ieee80211_tx_h_select_key()\")\u000a\u000a5f2530a4df8e corrects the flag field that 0e80db08668b tests; without\u000ait, encap offload frames take the 802.11 key selection path. Refresh\u000athe patches whose hunks moved.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:19 +0000",
        "id" : "87ba6ac8984f7421a8b8a331e767f1b288d759c9",
        "msg" : "mac80211: backport the encap offload TX fixes",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/396-wifi-mac80211-use-link-address-as-TA-for-non-MLO-4-a.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/392-wifi-mac80211-fix-station-lookup-for-management-fram.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/009-wifi-mac80211-fix-key-selection-for-encap-offload-fr.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/012-mac80211-tx-Use-info-flags-in-ieee80211_tx_h_select_.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/010-wifi-mac80211-don-t-send-encap-offload-frames-unencr.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/008-wifi-mac80211-fix-unauthorised-port-check-for-encap-.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/397-wifi-mac80211-use-the-AP-address-as-RA-for-a-4-addr-.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/011-wifi-mac80211-drop-encap-offload-frames-with-a-taint.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/321-wifi-mac80211-add-ieee80211_txq_aql_pending.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/013-wifi-add-the-nl80211-and-hwsim-UAPI-numbers-of-wirel.patch",
          "package/network/services/hostapd/patches/014-nl80211-Add-the-command-and-attribute-numbers-of-wir.patch"
        ],
        "commitId" : "257c0f6bd5683b9b272c89bc25ad39ba15425cc8",
        "timestamp" : 1793198779000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211, hostapd: add the nl80211 UAPI numbers of wireless-next\u000a\u000aLater patches of both packages add nl80211 commands, attributes and\u000aextended features, and mac80211_hwsim attributes. Upstream added\u000aentries at the same places since the 7.2 release, for example\u000aNL80211_CMD_UPDATE_BEACON and HWSIM_ATTR_NO_MONITOR.\u000a\u000aAdd the commands, attributes and extended features of wireless-next\u000acommit 2c50cd5d10e8 to the nl80211 header of both packages, and\u000aHWSIM_ATTR_NO_MONITOR to the hwsim header, so that the local additions\u000atake the numbers after the upstream ones. Other changes of the\u000aupstream header are left out, since the 7.2 code depends on them, for\u000aexample on the number of station flags.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:19 +0000",
        "id" : "257c0f6bd5683b9b272c89bc25ad39ba15425cc8",
        "msg" : "mac80211, hostapd: add the nl80211 UAPI numbers of wireless-next",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/014-nl80211-Add-the-command-and-attribute-numbers-of-wir.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/013-wifi-add-the-nl80211-and-hwsim-UAPI-numbers-of-wirel.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/423-wifi-mac80211-count-the-DTIM-of-each-AP-link.patch"
        ],
        "commitId" : "dafcf8122bfa807908fbba18bbee04d25a5d9649",
        "timestamp" : 1793198779000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: count the DTIM of each AP link\u000a\u000aAll links of an AP MLD counted the DTIM in one counter, so with\u000aieee80211_beacon_get() the DTIM Count in the Beacon frames of a link\u000adid not follow the TBTTs of that link.\u000a\u000aAdd patch 423, which keeps the count per link. The debugfs file\u000adtim_count moves to the link directory of an AP MLD and stays in the\u000anetdev directory of an AP without links.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:19 +0000",
        "id" : "dafcf8122bfa807908fbba18bbee04d25a5d9649",
        "msg" : "mac80211: count the DTIM of each AP link",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/423-wifi-mac80211-count-the-DTIM-of-each-AP-link.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/425-wifi-mac80211-clear-the-Critical-Update-flag-after-t.patch",
          "package/kernel/mac80211/patches/subsys/424-wifi-nl80211-report-the-end-of-a-critical-update-on-.patch"
        ],
        "commitId" : "6b4c37295afca87bf59c7ec5423f69b2745633aa",
        "timestamp" : 1793198779000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: end the Critical Update flag after the DTIM Beacon\u000a\u000aIEEE 802.11be-2024 35.3.10 sets the Critical Update flag until and\u000aincluding the next DTIM Beacon on the link. hostapd does not see the\u000aDTIM Count, so it cannot end the flag there.\u000a\u000aPatch 424 adds NL80211_EXT_FEATURE_BEACON_CRIT_UPDATE, the attribute\u000aNL80211_ATTR_CRIT_UPDATE_ID and the per-link event\u000aNL80211_CMD_CRIT_UPDATE_DONE. User space gives each critical update an\u000aID in the beacon of START_AP and SET_BEACON, and the event carries the\u000aID of the update it ends, so that the event of an earlier update cannot\u000aend a later one. A new ID starts an update also after the previous one\u000ahas ended.\u000a\u000aPatch 425 ends the flag after the DTIM Beacon: mac80211 does it for\u000aBeacon frames from ieee80211_beacon_get(), and a driver with a beacon\u000atemplate reports it with ieee80211_crit_update_done(), which takes the\u000aID that ieee80211_beacon_get_template() returns in\u000aieee80211_mutable_offsets. Each beacon holds the ID of its critical\u000aupdate, so that a Beacon frame from a beacon that an update replaces\u000ameanwhile neither ends nor clears the flag of the new update. mac80211\u000adoes not track the flag of a nontransmitted BSSID. cfg80211_beacon_dup()\u000acopies the ID, so that the beacon after a channel switch or a colour\u000achange keeps the ID that user space gave for it.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:19 +0000",
        "id" : "6b4c37295afca87bf59c7ec5423f69b2745633aa",
        "msg" : "mac80211: end the Critical Update flag after the DTIM Beacon",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/425-wifi-mac80211-clear-the-Critical-Update-flag-after-t.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/424-wifi-nl80211-report-the-end-of-a-critical-update-on-.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/815-ap-learn-the-obss-colors-from-received-beacons.patch",
          "package/network/services/hostapd/patches/781-hostapd-clear-the-qos-map-with-an-empty-SET_QOS_MAP_SET.patch",
          "package/network/services/hostapd/patches/761-shared_das_port.patch",
          "package/network/services/hostapd/patches/814-ap-mld-keep-the-nl80211-bss-of-a-restarted-first-link.patch",
          "package/network/services/hostapd/patches/809-AP-process-OBSS-Beacon-frames-on-the-link-and-radio-of-their-channel.patch",
          "package/network/services/hostapd/patches/810-ap-mld-move-the-shared-authenticator-to-the-new-first-link.patch",
          "package/network/services/hostapd/patches/812-ap-mld-run-eap-of-a-non-mlo-station-on-its-own-link.patch",
          "package/network/services/hostapd/patches/813-ap-mld-initialise-the-shared-authenticator-of-the-first-link-once.patch",
          "package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch",
          "package/network/services/hostapd/patches/740-snoop_iface.patch",
          "package/network/services/hostapd/patches/608-AP-MLD-end-the-Critical-Update-flag-at-the-DTIM-Beac.patch",
          "package/network/services/hostapd/patches/720-iface_max_num_sta.patch",
          "package/network/services/hostapd/patches/701-reload_config_inline.patch"
        ],
        "commitId" : "38aad4a0d8b99aa49261b737e19834980c3a42ad",
        "timestamp" : 1793198779000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: end the Critical Update flag of a link removal at the DTIM Beacon\u000a\u000aPatch 602 sets the Critical Update flag of a link removal for DTIM\u000aperiod plus one counts of the AP Removal Timer, since hostapd does not\u000asee the TBTT at which the DTIM Beacon goes out.\u000a\u000aAdd patch 608, which keeps the flag on each link until\u000aNL80211_CMD_CRIT_UPDATE_DONE where the driver declares\u000aNL80211_EXT_FEATURE_BEACON_CRIT_UPDATE. Each critical update gets a new\u000aNL80211_ATTR_CRIT_UPDATE_ID, the AP Removal Timer updates continue it\u000awith the same ID, and an event with another ID is ignored. A\u000anontransmitted BSSID keeps the count of patch 602. The patches after\u000a608 are refreshed for the new line numbers.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:19 +0000",
        "id" : "38aad4a0d8b99aa49261b737e19834980c3a42ad",
        "msg" : "hostapd: end the Critical Update flag of a link removal at the DTIM Beacon",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/810-ap-mld-move-the-shared-authenticator-to-the-new-first-link.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/608-AP-MLD-end-the-Critical-Update-flag-at-the-DTIM-Beac.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/720-iface_max_num_sta.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/814-ap-mld-keep-the-nl80211-bss-of-a-restarted-first-link.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/812-ap-mld-run-eap-of-a-non-mlo-station-on-its-own-link.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/701-reload_config_inline.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/740-snoop_iface.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/781-hostapd-clear-the-qos-map-with-an-empty-SET_QOS_MAP_SET.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/809-AP-process-OBSS-Beacon-frames-on-the-link-and-radio-of-their-channel.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/813-ap-mld-initialise-the-shared-authenticator-of-the-first-link-once.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/761-shared_das_port.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/815-ap-learn-the-obss-colors-from-received-beacons.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/426-wifi-nl80211-add-the-advertised-TID-to-link-mapping-.patch",
          "package/kernel/mac80211/patches/subsys/427-wifi-mac80211-pass-the-advertised-TID-to-link-mappin.patch"
        ],
        "commitId" : "c8f1f84c063647fafa7160926415becf51494293",
        "timestamp" : 1793198779000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: add the advertised TID-to-link mapping of an AP MLD\u000a\u000aAn AP MLD disables a link for all associated non-AP MLDs with an\u000aadvertised TID-to-link mapping (IEEE 802.11be-2024 35.3.7.2.4). cfg80211\u000ahandles the negotiated mapping of a station only.\u000a\u000aPatch 426 adds NL80211_CMD_ADV_TTLM_REQUEST, with which user space\u000arequests a mapping of all TIDs to a set of links for a duration, the\u000aevents of its steps and NL80211_EXT_FEATURE_AP_ADV_TTLM, which needs\u000aNL80211_EXT_FEATURE_BEACON_CRIT_UPDATE as well. cfg80211 keeps one\u000amapping per AP MLD: the reply and every event carry the cookie of the\u000arequest, a request while a mapping is active fails with -EBUSY, and the\u000astop of any link of the AP MLD cancels the mapping in the driver and\u000asends ADV_TTLM_ENDED, after which no event of the mapping follows. Each\u000alink of the mapping must beacon, the default mapping is refused, and the\u000aswitch time is 1 to 65535 TUs. STARTED and ESTABLISHED carry the\u000aCLOCK_BOOTTIME of the TBTT of each step, so that user space can count\u000athe Expected Duration from the TBTT. The driver keeps the Expected\u000aDuration field of the element in its beacon template current.\u000a\u000aPatch 427 passes the request and the cancel to the driver, and its\u000aevents with their cookie to user space. A driver whose device cannot\u000astop a mapping refuses new requests with -EBUSY until the mapping of\u000athe device ends. A driver that gets its Beacon frames from mac80211\u000asets the Expected Duration with ieee80211_adv_ttlm_duration_set(), and\u000amac80211 writes the field before it protects the frame.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:19 +0000",
        "id" : "c8f1f84c063647fafa7160926415becf51494293",
        "msg" : "mac80211: add the advertised TID-to-link mapping of an AP MLD",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/426-wifi-nl80211-add-the-advertised-TID-to-link-mapping-.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/427-wifi-mac80211-pass-the-advertised-TID-to-link-mappin.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/ap/ubus.h",
          "package/network/services/hostapd/src/src/ap/ubus.c",
          "package/network/services/hostapd/patches/815-ap-learn-the-obss-colors-from-received-beacons.patch",
          "package/network/services/hostapd/patches/781-hostapd-clear-the-qos-map-with-an-empty-SET_QOS_MAP_SET.patch",
          "package/network/services/hostapd/patches/761-shared_das_port.patch",
          "package/network/services/hostapd/patches/814-ap-mld-keep-the-nl80211-bss-of-a-restarted-first-link.patch",
          "package/network/services/hostapd/patches/809-AP-process-OBSS-Beacon-frames-on-the-link-and-radio-of-their-channel.patch",
          "package/network/services/hostapd/patches/819-ap-mld-refuse-an-association-while-a-link-is-not-started.patch",
          "package/network/services/hostapd/patches/810-ap-mld-move-the-shared-authenticator-to-the-new-first-link.patch",
          "package/network/services/hostapd/patches/762-AP-don-t-ignore-probe-requests-with-invalid-DSSS-par.patch",
          "package/network/services/hostapd/patches/813-ap-mld-initialise-the-shared-authenticator-of-the-first-link-once.patch",
          "package/network/services/hostapd/patches/812-ap-mld-run-eap-of-a-non-mlo-station-on-its-own-link.patch",
          "package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch",
          "package/network/services/hostapd/patches/609-AP-MLD-advertise-a-TID-to-link-mapping.patch",
          "package/network/services/hostapd/patches/740-snoop_iface.patch",
          "package/network/services/hostapd/patches/720-iface_max_num_sta.patch",
          "package/network/services/hostapd/patches/701-reload_config_inline.patch"
        ],
        "commitId" : "e1ef289cfbacb79b2844cf28b470a22a578b0b91",
        "timestamp" : 1793198779000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: advertise a TID-to-link mapping of an AP MLD\u000a\u000ahostapd adds a TID-To-Link Mapping element only with\u000aCONFIG_TESTING_OPTIONS, without the Mapping Switch Time and Expected\u000aDuration fields of an advertised mapping (IEEE 802.11be-2024\u000a35.3.7.2.4).\u000a\u000aAdd patch 609, which requests the mapping from a driver with\u000aNL80211_EXT_FEATURE_AP_ADV_TTLM and\u000aNL80211_EXT_FEATURE_BEACON_CRIT_UPDATE and builds the element of each\u000astep:\u000a- the Mapping Switch Time of each link until the mapping is\u000a  established, in Beacon and Probe Response frames only;\u000a- the remaining Expected Duration after it, counted from the TBTT of\u000a  the frame (9.4.2.324) with the TBTT times of the driver events;\u000a- the Disabled Link Indication of the Reduced Neighbor Report.\u000a\u000aA link that becomes disabled or enabled through the mapping sets the\u000aCritical Update flag (35.3.10). The BSS Parameters Change Count stays,\u000aas 9.4.2.169.2 increments it only for the critical updates of 11.2.3.14.\u000aWithout a given switch time, the mapping is established two DTIM\u000aintervals after the request. A switch time is at most 65535 TUs. Events\u000aare matched by the cookie of the request. The stop of a link ends the\u000amapping, a link removal is refused while a mapping is active, and a\u000arequest is refused while a link removal runs.\u000a\u000aThe ubus method ttlm_advertise of hostapd.<ifname> takes the links, the\u000aduration in TUs and an optional switch time. get_status reports the\u000astate of the mapping and the Mapping Switch Time of each link. The ubus\u000anotification adv-ttlm reports the establishment and the end, so that a\u000acaller can request the next mapping. The length of the element\u000acovers the largest element while a mapping is advertised, since its\u000apresence depends on the frame subtype and on the time of the write. The\u000apatches after 609 are refreshed for the new line numbers.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:19 +0000",
        "id" : "e1ef289cfbacb79b2844cf28b470a22a578b0b91",
        "msg" : "hostapd: advertise a TID-to-link mapping of an AP MLD",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/813-ap-mld-initialise-the-shared-authenticator-of-the-first-link-once.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/810-ap-mld-move-the-shared-authenticator-to-the-new-first-link.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/762-AP-don-t-ignore-probe-requests-with-invalid-DSSS-par.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/740-snoop_iface.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/720-iface_max_num_sta.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/814-ap-mld-keep-the-nl80211-bss-of-a-restarted-first-link.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/812-ap-mld-run-eap-of-a-non-mlo-station-on-its-own-link.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/781-hostapd-clear-the-qos-map-with-an-empty-SET_QOS_MAP_SET.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ubus.c"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ubus.h"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/809-AP-process-OBSS-Beacon-frames-on-the-link-and-radio-of-their-channel.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/761-shared_das_port.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/819-ap-mld-refuse-an-association-while-a-link-is-not-started.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/609-AP-MLD-advertise-a-TID-to-link-mapping.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/815-ap-learn-the-obss-colors-from-received-beacons.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/701-reload_config_inline.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc",
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/iface.uc",
          "package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-iface.json"
        ],
        "commitId" : "cdfb8b584d766b182d27a601e703bfd6d50d391f",
        "timestamp" : 1793198779000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: keep the RSNO2 element of an AP MLD with sae_ext_key 0\u000a\u000aWith sae_ext_key 0, a psk2 or sae-compat AP MLD with a 6 GHz link has\u000aPSK in the 2.4 and 5 GHz RSNE, SAE in the 6 GHz RSNE and no override\u000aelement with a shared AKM. The links have no common AKM, against IEEE\u000a802.11be-2024 12.6.2, and no AKM 24, against WPA3 v3.5 2.5. A station\u000afinds no AKM for a multi-link association and uses one link.\u000a\u000aOn an AP MLD, keep the RSNE Override 2 element with SAE-EXT-KEY also\u000awith sae_ext_key 0, which then only keeps SAE-EXT-KEY out of the RSNE.\u000aDo this only where an SAE password exists, so that an AP MLD with a\u000araw PSK starts as before. Outside an AP MLD nothing changes.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:19 +0000",
        "id" : "cdfb8b584d766b182d27a601e703bfd6d50d391f",
        "msg" : "wifi-scripts: keep the RSNO2 element of an AP MLD with sae_ext_key 0",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc"
          },
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/iface.uc"
          },
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-iface.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc"
        ],
        "commitId" : "cf592af0024f3a78df446324e1454c40919775e7",
        "timestamp" : 1793198779000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: refuse sae-mixed and sae-compat with a raw PSK\u000a\u000asae-mixed offers SAE in the RSNE. Outside 6 GHz, sae-compat offers SAE\u000ain the RSNE Override element, and both offer SAE-EXT-KEY in the RSNE\u000aOverride 2 element with EHT. A 64-hex-digit key is a raw PSK and no SAE\u000apassword, so no station can use SAE there. bss_refusal() refuses this\u000awith SAE_NO_PASSWORD only for sae, and for sae-compat on 6 GHz.\u000a\u000aRefuse sae-mixed and sae-compat with a raw PSK on every band.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:19 +0000",
        "id" : "cf592af0024f3a78df446324e1454c40919775e7",
        "msg" : "wifi-scripts: refuse sae-mixed and sae-compat with a raw PSK",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/446-wifi-cfg80211-report-an-undecided-SCS-evaluation.patch",
          "package/kernel/mac80211/patches/subsys/465-wifi-nl80211-add-a-client-to-SCS-and-MSCS-descriptor.patch",
          "package/kernel/mac80211/patches/subsys/447-wifi-cfg80211-split-the-DSCP-mapping-out-of-cfg80211.patch",
          "package/kernel/mac80211/patches/subsys/436-wifi-cfg80211-add-set_scs-and-set_mscs-driver-ops.patch",
          "package/kernel/mac80211/patches/subsys/466-wifi-cfg80211-match-SCS-descriptors-on-their-client-.patch",
          "package/kernel/mac80211/patches/subsys/449-wifi-mac80211-add-the-flow-offload-flush-op.patch",
          "package/kernel/mac80211/patches/subsys/444-wifi-mac80211-add-SCS-and-MSCS-debugfs-files.patch",
          "package/kernel/mac80211/patches/subsys/450-wifi-mac80211-keep-learned-MSCS-entries-of-offloaded.patch",
          "package/kernel/mac80211/patches/subsys/448-wifi-mac80211-add-a-flow-priority-query.patch",
          "package/kernel/mac80211/patches/subsys/442-wifi-mac80211-apply-MSCS-on-transmit.patch",
          "package/kernel/mac80211/patches/subsys/433-wifi-cfg80211-add-the-SCS-evaluator.patch",
          "package/kernel/mac80211/patches/subsys/445-wifi-mac80211_hwsim-support-SCS-and-MSCS.patch",
          "package/kernel/mac80211/patches/subsys/441-wifi-mac80211-learn-MSCS-flows-on-receive.patch",
          "package/kernel/mac80211/patches/subsys/467-wifi-mac80211-keep-an-MSCS-per-client-and-configured.patch",
          "package/kernel/mac80211/patches/subsys/434-wifi-ieee80211-add-the-QoS-Characteristics-element.patch",
          "package/kernel/mac80211/patches/subsys/440-wifi-mac80211-classify-transmitted-MSDUs-with-SCS.patch",
          "package/kernel/mac80211/patches/subsys/435-wifi-cfg80211-add-SCS-and-MSCS-request-validation.patch",
          "package/kernel/mac80211/patches/subsys/439-wifi-mac80211-add-SCS-and-MSCS-rule-storage.patch",
          "package/kernel/mac80211/patches/subsys/431-wifi-cfg80211-add-the-TCLAS-element-parsers.patch",
          "package/kernel/mac80211/patches/subsys/437-wifi-cfg80211-add-SCS-and-MSCS-configuration-command.patch",
          "package/kernel/mac80211/patches/subsys/432-wifi-cfg80211-add-the-flow-parser-and-the-MSCS-key.patch",
          "package/kernel/mac80211/patches/subsys/443-wifi-mac80211-add-the-sta_set_scs-driver-op.patch"
        ],
        "commitId" : "9665b69513a678968a94c7bcb6d68cdb9e5f60e2",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: add SCS and MSCS support\u000a\u000aAdd the SCS and MSCS series: the TCLAS and flow parsers, the SCS\u000aevaluator, the QoS Characteristics element, the nl80211 commands, the\u000arule storage and the classification of transmitted MSDUs in mac80211,\u000athe MSCS learning on receive, the sta_set_scs driver op, the debugfs\u000afiles and the hwsim implementation.\u000a\u000amac80211 marks a frame whose priority an SCS or MSCS rule set with\u000aIEEE80211_TX_CTRL_STREAM_CLASSIFIED, so that a driver can hand that\u000apriority to a device that classifies 802.3 frames itself. hwsim\u000aadvertises the SCS Traffic Description Support of EHT for its AP\u000ainterfaces, so that a non-AP EHT STA sends it a QoS Characteristics\u000aelement.\u000a\u000aFor hardware that forwards flows on behalf of mac80211, add the\u000aundecided SCS verdict, the DSCP to user priority helper, the flow\u000apriority query, the per flow flush op and the idle query. A driver uses\u000athem to apply the SCS and MSCS rules of a station to those flows and to\u000akeep a learned MSCS entry alive while the hardware forwards its flow.\u000aThe flow priority query refuses a flow with an undecided verdict, also\u000awhen a rule matched. While the hardware forwards the uplink of an MSCS\u000aflow, its frames do not reach the learn path. When the hardware keeps a\u000alearned entry alive, mac80211 therefore also drops the flow from the\u000ahardware, so that its next uplink frames reach mac80211 and a priority\u000athat the station changes is learned within one stream timeout.\u000a\u000aFor a 4-address peer, such as a backhaul station, a rule that names\u000aonly the peer applies to every host behind it. Patches 465 to 467 add\u000aan optional client address to both descriptors, apply an SCS\u000adescriptor with a client only to MSDUs with that destination address,\u000aand keep a list of up to 16 MSCS per station. An MSCS is identified by\u000aits client and by a flag for an MSCS that the AP configures on behalf\u000aof the network, and the MSCS that the station requested comes first.\u000aThe client does not scope the SCSID: the SCSIDs of a peer stay one\u000aspace, which the layer that configures the descriptors assigns.\u000aRequests without a client or the flag keep their meaning.\u000a\u000aThe new nl80211 commands and attributes follow the local advertised\u000aTID-to-link mapping additions, so their numbers differ from the\u000awireless tree. User space must take them from this copy of nl80211.h.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "9665b69513a678968a94c7bcb6d68cdb9e5f60e2",
        "msg" : "mac80211: add SCS and MSCS support",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/433-wifi-cfg80211-add-the-SCS-evaluator.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/443-wifi-mac80211-add-the-sta_set_scs-driver-op.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/436-wifi-cfg80211-add-set_scs-and-set_mscs-driver-ops.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/441-wifi-mac80211-learn-MSCS-flows-on-receive.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/448-wifi-mac80211-add-a-flow-priority-query.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/432-wifi-cfg80211-add-the-flow-parser-and-the-MSCS-key.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/445-wifi-mac80211_hwsim-support-SCS-and-MSCS.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/447-wifi-cfg80211-split-the-DSCP-mapping-out-of-cfg80211.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/466-wifi-cfg80211-match-SCS-descriptors-on-their-client-.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/442-wifi-mac80211-apply-MSCS-on-transmit.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/449-wifi-mac80211-add-the-flow-offload-flush-op.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/435-wifi-cfg80211-add-SCS-and-MSCS-request-validation.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/434-wifi-ieee80211-add-the-QoS-Characteristics-element.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/444-wifi-mac80211-add-SCS-and-MSCS-debugfs-files.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/465-wifi-nl80211-add-a-client-to-SCS-and-MSCS-descriptor.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/439-wifi-mac80211-add-SCS-and-MSCS-rule-storage.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/431-wifi-cfg80211-add-the-TCLAS-element-parsers.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/467-wifi-mac80211-keep-an-MSCS-per-client-and-configured.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/446-wifi-cfg80211-report-an-undecided-SCS-evaluation.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/437-wifi-cfg80211-add-SCS-and-MSCS-configuration-command.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/440-wifi-mac80211-classify-transmitted-MSDUs-with-SCS.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/450-wifi-mac80211-keep-learned-MSCS-entries-of-offloaded.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/pending-6.18/797-01-net-ethernet-mtk_eth_soc-query-the-wireless-driver-f.patch",
          "target/linux/mediatek/patches-6.18/944-net-ethernet-mtk_wed-move-dlm-a-dedicated-dts-node.patch",
          "package/kernel/mac80211/patches/subsys/483-wifi-cfg80211-check-the-layout-of-the-flow-types.patch",
          "package/kernel/mt76/patches/003-wifi-mt76-mt7996-implement-the-flow-offload-idle-op.patch",
          "package/kernel/mt76/patches/001-wifi-mt76-answer-the-flow-priority-query.patch",
          "target/linux/generic/pending-6.18/797-02-net-ethernet-mtk_eth_soc-report-the-idle-time-of-off.patch",
          "package/kernel/mt76/patches/002-wifi-mt76-mt7996-implement-the-flow-offload-flush-op.patch",
          "target/linux/generic/pending-6.18/797-00-wifi-cfg80211-add-the-flow-key-and-flow-description-.patch"
        ],
        "commitId" : "0547b912e981df32731e8bd6f583a79c1021e181",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "kernel: mtk_eth_soc: query the wireless driver for the TID of flows\u000a\u000aQuery the wireless driver for the user priority of a flow as the PPE\u000aentry binds and store the answer in the WINFO TID field, unbind the\u000aentries of a station that the wireless driver flushes, and report how\u000along ago the PPE last hit the entries that match a flow.\u000a\u000aAn AP learns the priority of an MSCS flow from its uplink frames, and\u000aonce the PPE forwards the uplink of a flow, those frames no longer\u000areach mac80211. Record the station of an entry that the WED receive\u000apath binds, and unbind those entries as well at a flush, so that the\u000anext uplink frame passes mac80211 again. The ppe_check op of WED takes\u000athe station index for this.\u000a\u000aThe flow key of the wireless driver describes the frames to the\u000astation, so the match callback learns whether an entry carries the\u000aframes of the station. Such an entry is described by its tuple before\u000aNAT, without the MAC addresses of a routed entry, and mt7996 compares\u000ait in the mirrored direction. mt7996 also asks the WED device of the\u000areceive path for the idle time.\u000a\u000aAdd the flow key and flow description types of the SCS series to the\u000akernel cfg80211 header, since the PPE driver builds against it while\u000athe wireless driver reads the copy in the mac80211 package. The two\u000acopies are separate definitions, so assert the value of each flow\u000afield, the offset of each field and the size of each structure in both\u000aof them (797-00 and mac80211 subsys patch 483). The PPE code of this\u000atree keeps L2 subflows in l2_list and clears them with a set_state\u000aflag.\u000a\u000amt76: backport the WED users of the new ops from the mt76 tree. They\u000aimplement the flow_prio, flow_flush and flow_idle ops, and pass the\u000astation index to ppe_check, which the WED change requires for mt7915\u000aand mt7996 to build.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "0547b912e981df32731e8bd6f583a79c1021e181",
        "msg" : "kernel: mtk_eth_soc: query the wireless driver for the TID of flows",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mt76/patches/003-wifi-mt76-mt7996-implement-the-flow-offload-idle-op.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/797-00-wifi-cfg80211-add-the-flow-key-and-flow-description-.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mt76/patches/001-wifi-mt76-answer-the-flow-priority-query.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/797-02-net-ethernet-mtk_eth_soc-report-the-idle-time-of-off.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mt76/patches/002-wifi-mt76-mt7996-implement-the-flow-offload-flush-op.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/483-wifi-cfg80211-check-the-layout-of-the-flow-types.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/797-01-net-ethernet-mtk_eth_soc-query-the-wireless-driver-f.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/mediatek/patches-6.18/944-net-ethernet-mtk_wed-move-dlm-a-dedicated-dts-node.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc",
          "package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-device.json"
        ],
        "commitId" : "6f2eb2f677733c3078f443aaf4c1d69f1b05b35c",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: pass the EHT punct_bitmap of a wifi-device to hostapd\u000a\u000ahostapd takes the EHT disabled subchannel bitmap as punct_bitmap, a\u000a16-bit value, but the wifi-device schema had no such option. validate()\u000alogged \"punct_bitmap is not present in the schema\", kept the value as\u000atext, and hostapd.uc wrote no line for it, so a bitmap that a service\u000apublishes for a radio never reached hostapd.\u000a\u000aAdd the option to the schema, 0 to 65535 with no default, and write it\u000awith the other EHT options of the radio.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "6f2eb2f677733c3078f443aaf4c1d69f1b05b35c",
        "msg" : "wifi-scripts: pass the EHT punct_bitmap of a wifi-device to hostapd",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/schema/wireless.wifi-device.json"
          },
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/validate.uc"
        ],
        "commitId" : "dca7a472b4c604049e743fc14920636252410655",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: check a schema minimum or maximum of 0\u000a\u000avalidate_value() tested `schema.minimum && value < schema.minimum`, so a\u000aminimum of 0 never applied: a negative value of any option whose schema\u000astarts at 0 (punct_bitmap, airtime_mode, mbssid, log_level and 14\u000aothers) passed unchecked. The same held for a maximum of 0.\u000a\u000aCompare where the bound is present, whatever its value.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "dca7a472b4c604049e743fc14920636252410655",
        "msg" : "wifi-scripts: check a schema minimum or maximum of 0",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/validate.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/451-wifi-mac80211-do-not-check-the-Beacon-of-another-BSS.patch"
        ],
        "commitId" : "b80e388b056000a5ad788cf7a68f6efee5fad0f1",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: do not check the Beacon of another BSS with an AP's BIGTK\u000a\u000aAn AP checked a protected OBSS Beacon with its own BIGTK, the MIC\u000afailed, and the Beacon was dropped before it could be reported to the\u000abeacon registration. hostapd learned no neighbour that runs beacon\u000aprotection, and its BSS Color never entered the colours in use.\u000a\u000aLet such a Beacon go on without a key, so that mac80211 reports it.\u000aBeacons of the AP's own links and Beacons on other interface types are\u000achecked as before.\u000a\u000aThe software BSS Color collision check runs on the same path, so a\u000aprotected neighbour with the AP's own colour now raises a collision, as\u000aan unprotected one does.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "b80e388b056000a5ad788cf7a68f6efee5fad0f1",
        "msg" : "mac80211: do not check the Beacon of another BSS with an AP's BIGTK",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/451-wifi-mac80211-do-not-check-the-Beacon-of-another-BSS.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/supplicant.uc"
        ],
        "commitId" : "94119141d68c936270fde2bc0355884591cd8d5e",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: leave a WPS credential to the reader of its event\u000a\u000aThe ucode generator wrote a WPS station without wps_cred_processing, so\u000awpa_supplicant added the credential of the M8 as a network of its own\u000aand joined with it: for a WPA2-PSK credential with key_mgmt PSK and no\u000aPMF, before the reader of the wps_credentials event (50-wps_sta, or\u000aanother daemon) applied its own configuration. The shell generator\u000ahostapd.sh writes wps_cred_processing=1 for the same station.\u000a\u000aWrite wps_cred_processing=1 for encryption 'wps' as well. The ucode\u000ahook sends the wps_credentials event before wpa_supplicant tests the\u000avalue, so the readers of the event see no change.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "94119141d68c936270fde2bc0355884591cd8d5e",
        "msg" : "wifi-scripts: leave a WPS credential to the reader of its event",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/supplicant.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/427-wifi-mac80211-pass-the-advertised-TID-to-link-mappin.patch",
          "package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch",
          "package/kernel/mac80211/patches/subsys/411-wifi-mac80211-keep-the-carrier-while-another-AP-link-beacons.patch",
          "package/kernel/mac80211/patches/subsys/446-wifi-cfg80211-report-an-undecided-SCS-evaluation.patch",
          "package/kernel/mac80211/patches/subsys/412-wifi-mac80211-stop-only-the-MBSSID-set-of-the-stopped-AP-link.patch",
          "package/kernel/mac80211/patches/subsys/415-wifi-cfg80211-report-the-MLD-address-and-link-of-a-dumped-station.patch",
          "package/kernel/mac80211/patches/subsys/447-wifi-cfg80211-split-the-DSCP-mapping-out-of-cfg80211.patch",
          "package/kernel/mac80211/patches/subsys/436-wifi-cfg80211-add-set_scs-and-set_mscs-driver-ops.patch",
          "package/kernel/mac80211/patches/subsys/425-wifi-mac80211-clear-the-Critical-Update-flag-after-t.patch",
          "package/kernel/mac80211/patches/subsys/424-wifi-nl80211-report-the-end-of-a-critical-update-on-.patch",
          "package/kernel/mac80211/patches/subsys/210-ap_scan.patch",
          "package/kernel/mac80211/patches/subsys/433-wifi-cfg80211-add-the-SCS-evaluator.patch",
          "package/kernel/mac80211/patches/subsys/310-cfg80211-allow-grace-period-for-DFS-available-after-.patch",
          "package/kernel/mac80211/patches/subsys/014-wifi-cfg80211-mac80211-apply-HE-OBSS-PD-settings-on-.patch",
          "package/kernel/mac80211/patches/subsys/435-wifi-cfg80211-add-SCS-and-MSCS-request-validation.patch",
          "package/kernel/mac80211/patches/subsys/414-wifi-cfg80211-take-the-MLO-station-rates-from-the-links-that-report-them.patch",
          "package/kernel/mac80211/patches/subsys/439-wifi-mac80211-add-SCS-and-MSCS-rule-storage.patch",
          "package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch",
          "package/kernel/mac80211/patches/subsys/421-wifi-mac80211-report-the-totals-of-an-MLO-station-when-it-is-removed.patch",
          "package/kernel/mac80211/patches/subsys/426-wifi-nl80211-add-the-advertised-TID-to-link-mapping-.patch",
          "package/kernel/mac80211/patches/subsys/431-wifi-cfg80211-add-the-TCLAS-element-parsers.patch",
          "package/kernel/mac80211/patches/subsys/437-wifi-cfg80211-add-SCS-and-MSCS-configuration-command.patch",
          "package/kernel/mac80211/patches/subsys/390-wifi-mac80211-notify-driver-on-airtime-weight-change.patch",
          "package/kernel/mac80211/patches/subsys/432-wifi-cfg80211-add-the-flow-parser-and-the-MSCS-key.patch"
        ],
        "commitId" : "a2c41530117dac320789b30f8bf57bc1c227314d",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: apply the HE OBSS PD settings of a running AP's beacon update\u000a\u000anl80211 parsed NL80211_ATTR_HE_OBSS_PD at the start of an AP alone, and\u000amac80211 signalled BSS_CHANGED_HE_OBSS_PD there alone, so new Spatial\u000aReuse settings reached the driver only through a restart of the AP,\u000awhich drops its stations. hostapd already sends the attribute with a\u000abeacon update, and mt7996 applies BSS_CHANGED_HE_OBSS_PD at any time.\u000a\u000aParse the attribute in nl80211_set_beacon(), and apply settings that\u000adiffer in ieee80211_change_beacon().\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "a2c41530117dac320789b30f8bf57bc1c227314d",
        "msg" : "mac80211: apply the HE OBSS PD settings of a running AP's beacon update",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/411-wifi-mac80211-keep-the-carrier-while-another-AP-link-beacons.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/412-wifi-mac80211-stop-only-the-MBSSID-set-of-the-stopped-AP-link.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/210-ap_scan.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/415-wifi-cfg80211-report-the-MLD-address-and-link-of-a-dumped-station.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/421-wifi-mac80211-report-the-totals-of-an-MLO-station-when-it-is-removed.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/446-wifi-cfg80211-report-an-undecided-SCS-evaluation.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/424-wifi-nl80211-report-the-end-of-a-critical-update-on-.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/414-wifi-cfg80211-take-the-MLO-station-rates-from-the-links-that-report-them.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/439-wifi-mac80211-add-SCS-and-MSCS-rule-storage.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/427-wifi-mac80211-pass-the-advertised-TID-to-link-mappin.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/433-wifi-cfg80211-add-the-SCS-evaluator.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/435-wifi-cfg80211-add-SCS-and-MSCS-request-validation.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/425-wifi-mac80211-clear-the-Critical-Update-flag-after-t.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/014-wifi-cfg80211-mac80211-apply-HE-OBSS-PD-settings-on-.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/436-wifi-cfg80211-add-set_scs-and-set_mscs-driver-ops.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/310-cfg80211-allow-grace-period-for-DFS-available-after-.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/431-wifi-cfg80211-add-the-TCLAS-element-parsers.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/437-wifi-cfg80211-add-SCS-and-MSCS-configuration-command.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/390-wifi-mac80211-notify-driver-on-airtime-weight-change.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/432-wifi-cfg80211-add-the-flow-parser-and-the-MSCS-key.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/426-wifi-nl80211-add-the-advertised-TID-to-link-mapping-.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/447-wifi-cfg80211-split-the-DSCP-mapping-out-of-cfg80211.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/files/hostapd.uc"
        ],
        "commitId" : "5f0d5c1945ee05dca93e0760b021f14b3fd95ea2",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: change the BSS color and spatial reuse of a running AP\u000a\u000aA change of the BSS color or of a he_spr_* field restarted the\u000ainterface. The restart drops the stations and the OBSS colors the\u000ainterface learned, so a report of the neighbour colors right after a\u000aspatial reuse change named none.\u000a\u000aWhere only the BSS color and the he_spr_* lines of the radio differ, on\u000athe same channel, with the color enabled before and after, set the\u000achanged fields with SET, update the beacon of every BSS, and start a\u000acolor change announcement with COLOR_CHANGE. The beacon update goes\u000afirst, because mac80211 refuses one while a color change runs. Where a\u000astep fails, the interface restarts as before.\u000a\u000aA requested color above 63, the default 128 included, asks hostapd for\u000aa random color, which the running color already is. Start a color\u000achange only where the requested color differs from the color that runs\u000aand is 1 to 63, since COLOR_CHANGE refuses a value above 63. The color\u000athat runs comes from STATUS, because after a color collision\u000ahostapd_switch_color_timeout_handler() moves the radio to another color\u000aby itself, while the old configuration still names the configured one.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "5f0d5c1945ee05dca93e0760b021f14b3fd95ea2",
        "msg" : "hostapd: change the BSS color and spatial reuse of a running AP",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/hostapd.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/820-AP-Drop-a-Re-Association-Request-frame-while-a-respo.patch"
        ],
        "commitId" : "044c3e0d9b8bbe6bf0cd700e6ad6a4cf060df9c7",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: drop an association request while a response is pending\u000a\u000ahandle_assoc() drops a repeated (Re)Association Request frame only\u000awhen the Retry bit is set and the sequence number repeats. mac80211\u000asends the next try as a new frame 100 ms after the earlier try was\u000aacknowledged. When the AP needs longer to answer, hostapd processes the\u000asecond request before the TX status of the first response. For a\u000astation MLD, ieee80211_ml_process_link() then finds the link station\u000aof the first request and rejects the partner link, and the driver\u000astation keeps the association link only. The station uses the first\u000aresponse with all links, so it misses the GTK of the partner link in\u000amessage 3, or it is deauthenticated when it transmits on that link.\u000a\u000aAdd patch 820, which drops a new (Re)Association Request frame while a\u000asuccessful response to the station waits for its TX status, for at\u000amost one second. An Authentication frame with transaction sequence\u000anumber 1 ends the wait, since the station then starts over and a lost\u000aor late TX status must not delay its next request. PASN does not start\u000athe association over, so a PASN frame does not end the wait.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "044c3e0d9b8bbe6bf0cd700e6ad6a4cf060df9c7",
        "msg" : "hostapd: drop an association request while a response is pending",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/820-AP-Drop-a-Re-Association-Request-frame-while-a-respo.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/821-AP-Drop-a-later-try-of-an-acknowledged-Re-Associatio.patch"
        ],
        "commitId" : "711475e83a680473410782b69cd6263211550953",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: drop a later try of an acknowledged association request\u000a\u000aIf the AP answers a (Re)Association Request slowly, hostapd can read\u000amac80211's next try of the request after the TX status of the response.\u000aIt then processes the try as a new association of an associated\u000astation: it removes and re-adds the driver station, restarts the 4-way\u000ahandshake and, for a non-AP MLD, rejects the partner links, while the\u000astation keeps the first response.\u000a\u000aDrop a request with the same subtype and body as the acknowledged one\u000afor one second after the TX status, while the station is associated.\u000aThe window ends early when the station becomes authorized,\u000adisassociates, authenticates again or a response is not acknowledged\u000aor rejected. A station that is authorized already keeps the window, so\u000aa late try of its re-association is dropped too. A station that\u000abecomes authorized at the TX status, with no 4-way handshake (open,\u000aFT, FILS, or an AP without WPA and IEEE 802.1X), has no window.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "711475e83a680473410782b69cd6263211550953",
        "msg" : "hostapd: drop a later try of an acknowledged association request",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/821-AP-Drop-a-later-try-of-an-acknowledged-Re-Associatio.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/files/wpa_supplicant.uc"
        ],
        "commitId" : "982f09cd3f0d5e6174af05c81acbf16a735380be",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wpa_supplicant: wait for radios hostapd holds before starting an MLD\u000a\u000anetifd calls mld_start once its wifi-scripts setups have returned. A\u000ahostapd restart of a radio runs after that, in __iface_pending_next(),\u000aand holds the radio with phy_set_state {stop: true} until the new\u000ainterface is added. mld_start() then brings a station MLD up on the\u000aother radios. When the restart gives the radio back, mld_add_links()\u000aremoves the MLD and adds it again, so the station associates twice.\u000a\u000aDo not start or extend an MLD while one of its configured radios is\u000aheld. The phy_set_state {stop: false} that ends the restart starts it\u000aon all radios. A radio that netifd configures again, after a hostapd\u000acrash or a reload, is no longer held. A radio whose config netifd\u000aremoves no longer counts.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "982f09cd3f0d5e6174af05c81acbf16a735380be",
        "msg" : "wpa_supplicant: wait for radios hostapd holds before starting an MLD",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/wpa_supplicant.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/files/hostapd.uc"
        ],
        "commitId" : "71bfd4920829529e9dbac4a9f42998bdbddf2329",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: give a radio back to wpa_supplicant when its setup ends early\u000a\u000aA pending setup can have sent phy_set_state {stop: true} to\u000awpa_supplicant. iface_config_remove() aborts such a setup when the\u000aconfig of the phy goes away (config_reset, shutdown, a config with no\u000aBSS left, the removal of the last MLD link), and an exception ends\u000aiface_pending_next() early. Neither sent the matching start, so the\u000astations of the radio stayed down, and a station MLD waits for that\u000aradio.\u000a\u000aSend phy_set_state {stop: false} in both cases, as iface_restart()\u000adoes for an aborted setup. A start for a radio that was never stopped\u000astarts only the station interfaces of that radio that are not running,\u000aand adds no link to an MLD that is up.\u000a\u000aThe exception also ended iface_pending_next() without the \"done\" step,\u000aso hostapd.data.pending_config[phy] kept the dead setup.\u000aiface_reload_config() treats a pending setup as up to date, so a later\u000aconfig with the same BSSes reloaded in place, and the phy stayed\u000awithout its AP interface until a BSS changed. The status method also\u000areported the BSSes as pending, and a later removal of the config\u000aaborted the dead setup and sent a second phy_set_state start. End the\u000asetup with the \"done\" step after the exception, as a setup that\u000areturns no next state does. The next config then restarts the phy.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "71bfd4920829529e9dbac4a9f42998bdbddf2329",
        "msg" : "hostapd: give a radio back to wpa_supplicant when its setup ends early",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/hostapd.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/files/wpa_supplicant.uc"
        ],
        "commitId" : "18dcdffc9843394d7de40f4623da9963395e77f0",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wpa_supplicant: give a radio back to an MLD only with its config\u000a\u000aphy_set_state {stop: false} sets the present bit of the radio in every\u000aMLD whose radio_mask holds it. A radio of radio_mask can lack a phy\u000aconfig, for example a disabled device whose radio stays in the radios\u000aof the MLD. A start for it after a stop or an abort can make it the\u000afirst present radio, mld_add() then adds a null config, and the MLD\u000astays down until netifd configures that radio again.\u000a\u000aSkip an MLD that has no config for the radio. Its other radios then\u000astart it as before.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "18dcdffc9843394d7de40f4623da9963395e77f0",
        "msg" : "wpa_supplicant: give a radio back to an MLD only with its config",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/wpa_supplicant.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/files/wpa_supplicant.uc"
        ],
        "commitId" : "5a621d3f3fc30ebaed6e33bacbf8ebdaac37f9e6",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wpa_supplicant: keep an MLD without links while hostapd holds a radio\u000a\u000ahostapd stops the stations of a radio before it restarts the AP on it,\u000aunless the station reports COMPLETED and the AP starts with the station\u000astatus. For a station MLD that scans or is disconnected, phy_set_state\u000astop then reaches mld_update_iface(), which removes the whole MLD netdev,\u000aand the start adds it again. The netdev already spans every radio of the\u000aMLD, so this changes nothing but drops the PMKSA cache, the BSSID ignore\u000alist and the bridge port.\u000a\u000aWhere the MLD is DISCONNECTED, INACTIVE or SCANNING and another radio of\u000ait stays present, keep the netdev and leave the held radio out of the\u000ascan frequency list. A station without a link holds no channel on the\u000aradio. In any other state the MLD goes down as before.\u000a\u000aphy_status no longer reports the MLD for a kept radio. hostapd aborts a\u000asetup without a start when it restarts the radio again, and relies on\u000athe stop and start of the next setup. If the kept MLD associated in the\u000ameantime, that setup would start the AP on its own channel and send\u000aneither, and the radio would stay held.\u000a\u000aThe frequency list of an MLD now leaves out every radio hostapd holds,\u000asince bss_allowed() filters the association and the partner links with\u000ait. So an associated MLD also refuses the BSSes of a held radio that\u000acarries no link of it. The start gives the full list back, also after\u000ahostapd aborts the setup of the radio.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "5a621d3f3fc30ebaed6e33bacbf8ebdaac37f9e6",
        "msg" : "wpa_supplicant: keep an MLD without links while hostapd holds a radio",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/wpa_supplicant.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/454-wifi-mac80211-remove-AP-VLAN-frames-from-station-TXQ.patch"
        ],
        "commitId" : "b48d95153551a669c575511ebdcbc2673f6e5b7c",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: remove the frames of a stopped AP VLAN from station TXQs\u000a\u000ahostapd moves a 4-address station back to the BSS interface before it\u000adeletes the station's AP VLAN. The frames queued through the VLAN stay\u000ain the station's TXQs, and their dequeue after the VLAN stop\u000adereferences the NULL sdata->bss in ieee80211_tx_dequeue(). On mt7996\u000athis oopses in the mt76 TX worker.\u000a\u000aRemove the frames of the stopping VLAN from every queue of the BSS, and\u000await for an RCU grace period before sdata->bss is cleared. Remove them\u000aagain after the grace period, for the fragments that a dequeue in\u000aprogress queued.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "b48d95153551a669c575511ebdcbc2673f6e5b7c",
        "msg" : "mac80211: remove the frames of a stopped AP VLAN from station TXQs",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/454-wifi-mac80211-remove-AP-VLAN-frames-from-station-TXQ.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/456-wifi-mac80211-let-a-driver-report-the-expiry-of-an-A.patch",
          "package/kernel/mac80211/patches/subsys/455-wifi-nl80211-report-the-expiry-of-an-offloaded-AP-Re.patch"
        ],
        "commitId" : "9abf356d31c14fec2acf8a4033bca0c868e9d75e",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: let a driver count the AP Removal Timer of a link removal\u000a\u000aAn AP MLD announces the removal of an affiliated AP with the AP Removal\u000aTimer of a Reconfiguration Multi-Link element in the Beacon frames of\u000aall its links. hostapd counts the timer with a beacon update of every\u000alink at each beacon interval, and on mt7996 each such update keeps the\u000aCritical Update flag set past the DTIM Beacon.\u000a\u000aPatch 455 adds NL80211_EXT_FEATURE_AP_REMOVAL_TIMER_OFFLOAD, with which\u000athe driver counts the timer in the Beacon frames itself, and reports the\u000aexpiry with NL80211_CMD_LINKS_REMOVED on the AP interface. The links\u000astay until user space removes them.\u000a\u000aPatch 456 adds ieee80211_links_removed(), with which a driver reports\u000athe expiry from any context. The teardown of the interface cancels the\u000awork that sends the report.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "9abf356d31c14fec2acf8a4033bca0c868e9d75e",
        "msg" : "mac80211: let a driver count the AP Removal Timer of a link removal",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/456-wifi-mac80211-let-a-driver-report-the-expiry-of-an-A.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/455-wifi-nl80211-report-the-expiry-of-an-offloaded-AP-Re.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/822-AP-MLD-let-the-driver-count-the-AP-Removal-Timer.patch"
        ],
        "commitId" : "8b165eb6567973baf77188d271d54528af1a3714",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: let the driver count the AP Removal Timer\u000a\u000ahostapd counts the AP Removal Timer of a link removal with a beacon\u000aupdate of every link of the AP MLD at each beacon interval. On mt7996\u000aeach update keeps the Critical Update flag set past the DTIM Beacon.\u000a\u000aWhere the driver declares NL80211_EXT_FEATURE_AP_REMOVAL_TIMER_OFFLOAD,\u000apatch 822 sets the beacons once at the start and lets the driver count\u000athe timer. No beacon of the AP MLD is set during the countdown, as the\u000aMediaTek SDK does. The driver's NL80211_CMD_LINKS_REMOVED ends the\u000aremoval: the other links drop the Reconfiguration element at once, and\u000athe stations get their frames and the link stops after the removal TBTT,\u000awhich comes less than count + 1 beacon intervals after the return of the\u000afirst update. The host count keeps the Probe Response frames at or below\u000athe count of the Beacon frames and stays at 1 until the event. Without\u000athe event, hostapd ends the removal itself count + 2 intervals after\u000athat return. A removal fails if the driver takes no beacon with the\u000aelement at the start. A removal of a count that is not a whole number of\u000aseconds, and a second removal on the AP MLD while one runs, are refused.\u000a\u000aA non-AP MLD whose only setup link is the removed one counts itself\u000adisassociated at the removal TBTT (IEEE 802.11be-2024 35.3.6.3). Clear\u000aits authorized flag at NL80211_CMD_LINKS_REMOVED, which comes before\u000athat TBTT, as 603 does at the host expiry. The Deauthentication after\u000athe TBTT stays.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "8b165eb6567973baf77188d271d54528af1a3714",
        "msg" : "hostapd: let the driver count the AP Removal Timer",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/822-AP-MLD-let-the-driver-count-the-AP-Removal-Timer.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/822-AP-MLD-let-the-driver-count-the-AP-Removal-Timer.patch",
          "package/network/services/hostapd/patches/815-ap-learn-the-obss-colors-from-received-beacons.patch",
          "package/network/services/hostapd/patches/810-ap-mld-move-the-shared-authenticator-to-the-new-first-link.patch",
          "package/network/services/hostapd/patches/606-ap-notify-ubus-of-a-bss-color-change.patch",
          "package/network/services/hostapd/patches/813-ap-mld-initialise-the-shared-authenticator-of-the-first-link-once.patch",
          "package/network/services/hostapd/patches/812-ap-mld-run-eap-of-a-non-mlo-station-on-its-own-link.patch",
          "package/network/services/hostapd/patches/603-ap-mld-remove-an-affiliated-ap-at-the-expiry.patch",
          "package/network/services/hostapd/patches/609-AP-MLD-advertise-a-TID-to-link-mapping.patch",
          "package/network/services/hostapd/patches/761-shared_das_port.patch",
          "package/network/services/hostapd/patches/814-ap-mld-keep-the-nl80211-bss-of-a-restarted-first-link.patch",
          "package/network/services/hostapd/patches/701-reload_config_inline.patch",
          "package/network/services/hostapd/patches/608-AP-MLD-end-the-Critical-Update-flag-at-the-DTIM-Beac.patch"
        ],
        "commitId" : "3e04eccebb01aabd46d70fdcfd70b962739666d2",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: deauthorize the stations of a link removal before their frames\u000a\u000aAt the end of a link removal, patch 603 sends each station of the link\u000aa Disassociation or a Deauthentication, but it leaves the station\u000aauthorized in hostapd and in the driver until the link stops. New data\u000afor the station then still reaches the driver after that frame. On\u000amt7996, data frames to a non-MLD station went out up to 8.7 ms after an\u000aacknowledged Disassociation, while IEEE 802.11-2024 11.3.3 allows no\u000aClass 3 frame in State 2.\u000a\u000aClear the authorized flag of each such station in hostapd and in the\u000adriver before its frame, with the calls of ap_sta_disconnect_common().\u000aUpstream's inactivity timer and control interface send the frame first\u000aand clear the flag after it; this order is stricter. mac80211 then\u000adrops new data for the station. Data frames already queued in mac80211\u000a(with 802.3 encap offload, as on mt7996) and in the driver can still go\u000aout.\u000a\u000aThe other patches that change src/ap/hostapd.c are refreshed for the\u000anew line numbers.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "3e04eccebb01aabd46d70fdcfd70b962739666d2",
        "msg" : "hostapd: deauthorize the stations of a link removal before their frames",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/815-ap-learn-the-obss-colors-from-received-beacons.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/813-ap-mld-initialise-the-shared-authenticator-of-the-first-link-once.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/606-ap-notify-ubus-of-a-bss-color-change.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/814-ap-mld-keep-the-nl80211-bss-of-a-restarted-first-link.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/822-AP-MLD-let-the-driver-count-the-AP-Removal-Timer.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/701-reload_config_inline.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/812-ap-mld-run-eap-of-a-non-mlo-station-on-its-own-link.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/761-shared_das_port.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/608-AP-MLD-end-the-Critical-Update-flag-at-the-DTIM-Beac.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/810-ap-mld-move-the-shared-authenticator-to-the-new-first-link.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/603-ap-mld-remove-an-affiliated-ap-at-the-expiry.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/609-AP-MLD-advertise-a-TID-to-link-mapping.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc"
        ],
        "commitId" : "19ad663d2fa4fe0abd9251d89b5491034edf44c7",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: iwinfo: bound the bss_info calls to 2 s\u000a\u000aupdate() runs when iwinfo.uc loads and asks hostapd, then\u000awpa_supplicant, for the bss_info of each nl80211 interface on a ubus\u000aconnection with the default timeout of 30 s. A hostapd that stops\u000aanswering on ubus therefore holds every importer for 30 s per interface,\u000aat the load and at each update().\u000a\u000aMake the bss_info calls on a connection of their own with a timeout of\u000a2 s. A healthy hostapd answers bss_info in less than 10 ms, and the\u000atimeout of a ucode ubus connection is a whole number of seconds (0\u000ameans no timeout). 1 s is the only shorter value; 2 s leaves a margin\u000afor a hostapd that is busy for a moment. After the first timeout\u000aof a daemon, the same update() does not call that daemon again, so a\u000awedged daemon costs 2 s per update() and not per interface. The\u000anetwork.wireless status call keeps the connection with the default\u000atimeout, so that a netifd busy with a wifi reload does not leave the\u000ainterface list without its configuration.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "19ad663d2fa4fe0abd9251d89b5491034edf44c7",
        "msg" : "wifi-scripts: iwinfo: bound the bss_info calls to 2 s",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/823-nl80211-End-the-wait-for-a-reply-on-a-positive-error.patch"
        ],
        "commitId" : "1330b91bad82e70154d339f19800ae146c953b61",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: end the wait for a netlink reply on a positive error\u000a\u000asend_and_recv_glb() reads replies while the error is positive, and\u000aerror_handler() copies the error of an NLMSG_ERROR message unchanged.\u000aAn answer with a positive error therefore leaves hostapd in recvmsg()\u000afor ever: the answer was read and no other message follows. The event\u000aloop stops, and every ubus and control interface stops with it. This\u000ais a defect of hostapd, an endless wait on an answer that arrived,\u000aindependent of the kernel bug that produced the value.\u000a\u000aWith mt7996, the station request of add_associated_sta() for a non-AP\u000aMLD got the error 65539, and hostapd answered no ubus call until a\u000arestart.\u000a\u000aTake a positive error as -EPROTO and log the raw value with the message\u000atype and command, so that the request fails, the association is\u000arejected and the event loop goes on.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "1330b91bad82e70154d339f19800ae146c953b61",
        "msg" : "hostapd: end the wait for a netlink reply on a positive error",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/823-nl80211-End-the-wait-for-a-reply-on-a-positive-error.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/825-AP-MLD-Refuse-a-link-addition-while-the-link-is-not-.patch"
        ],
        "commitId" : "24bdd0906bc8220dd5e4523dc1e7a9825e1311a6",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: refuse a link addition while the link is not started\u000a\u000aA Link Reconfiguration Request can add a link of the AP MLD that waits\u000afor an HT scan, ACS or a DFS CAC. The link has no authenticator yet, so\u000athe response accepts the link without the group key KDEs that IEEE Std\u000a802.11be-2024, 35.3.6.4 requires for each added link, or a refused link\u000astation reports a disconnection of a station that stays associated.\u000aRefuse such a link as a link that the AP MLD does not have.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "24bdd0906bc8220dd5e4523dc1e7a9825e1311a6",
        "msg" : "hostapd: refuse a link addition while the link is not started",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/825-AP-MLD-Refuse-a-link-addition-while-the-link-is-not-.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/826-AP-MLD-Keep-the-ML-information-of-a-station-whose-as.patch"
        ],
        "commitId" : "7844ec9e473139a7aff84f5d9f117b7dc22d9660",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: keep the ML information of a refused association after SA Query\u000a\u000aAfter a timed out SA Query, a failed (Re)Association Request of a\u000anon-AP MLD cleared the ML information of its still associated station\u000aentry, or left the links of the refused request in it. The entry then\u000awas no MLD station any more, and a later request without a new\u000aauthentication failed with an MLD address mismatch. Keep a copy with\u000athe earlier state machine and put it back after the response.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "7844ec9e473139a7aff84f5d9f117b7dc22d9660",
        "msg" : "hostapd: keep the ML information of a refused association after SA Query",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/826-AP-MLD-Keep-the-ML-information-of-a-station-whose-as.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/827-AP-MLD-refuse-a-link-whose-removal-runs.patch"
        ],
        "commitId" : "fb443d05c662bff86970671bc478ebda019d119a",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: refuse a link whose removal runs\u000a\u000aDuring the countdown of an affiliated AP removal (patches 602, 603\u000aand 822), hostapd accepts that link in a multi-link association and in\u000aa Link Reconfiguration Request that adds it. IEEE 802.11be-2024\u000a35.3.6.3 removes the affiliated AP at the TBTT the AP Removal Timer\u000anames, so such a link exists only until that TBTT. mt7996 moves the TX\u000aof a station off the link at the start of the removal, and a new link\u000astation then gets the link again.\u000a\u000aRefuse that link with UNSPECIFIED_FAILURE in the per-STA status, as\u000athe other refused links; the association or reconfiguration goes on\u000aover the other links. Refuse a multi-link association received on\u000athat link, since it would be the association link, and 603 ends the\u000awhole association at the removal anyway.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "fb443d05c662bff86970671bc478ebda019d119a",
        "msg" : "hostapd: refuse a link whose removal runs",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/827-AP-MLD-refuse-a-link-whose-removal-runs.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/828-AP-MLD-Report-no-disconnection-for-a-refused-link.patch"
        ],
        "commitId" : "64ebbd770c046f02dbb7f786b04feabfac2ef3bd",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: report no disconnection for a refused MLD link\u000a\u000aieee80211_ml_process_link() gives a new link station the flags of the\u000aorigin station, the authorized flag included. Where the link is then\u000arefused (element check, no AID, or the driver refuses the link\u000astation), ap_free_sta() of the link station reports AP-STA-DISCONNECTED\u000aand the ubus disassoc notification, although the non-AP MLD stays\u000aassociated. A Link Reconfiguration Request that adds a link always\u000areaches this.\u000a\u000aUpstream hostap has the same code (main 741d70dd8e32).\u000a\u000aClear the flag without the event before the free, as\u000aap_free_link_sta() does for the other link stations (patch 828).\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "64ebbd770c046f02dbb7f786b04feabfac2ef3bd",
        "msg" : "hostapd: report no disconnection for a refused MLD link",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/828-AP-MLD-Report-no-disconnection-for-a-refused-link.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/ap/ubus.c",
          "package/network/services/hostapd/README.md"
        ],
        "commitId" : "2817b942b7260173ae808c380b4b3fcb44be4bc5",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: ubus bss_transition_request sets Link Removal Imminent\u000a\u000aThe ubus method bss_transition_request has no attribute for the Link\u000aRemoval Imminent bit of the BSS Transition Management Request, and\u000ahostapd_bss_tr_send() never sets it. blobmsg_parse() drops the\u000alink_removal_imminent attribute that a caller passes, so no request\u000asent over ubus can carry the bit.\u000a\u000aAdd the boolean attribute link_removal_imminent and set\u000aWNM_BSS_TM_REQ_LINK_REMOVAL_IMMINENT from it, like the ctrl_iface\u000aBSS_TM_REQ parameter of the same name. IEEE 802.11be-2024 9.6.13.9\u000areserves the field unless the sending AP is affiliated with an AP MLD\u000aof more than one affiliated AP, so send the request with the bit\u000acleared in that case and log it at debug level.\u000a\u000aWith the bit set, wnm_send_bss_tm_req() starts no disassociation timer\u000afor a non-AP MLD with more than one valid link (upstream commit\u000a3e8fa9551a81 (\"WNM: Disassociate STA only when Link Removal Imminent is\u000a0 in BTM Request frame\")): such a station stays associated at the end\u000aof disassociation_timer. Without the bit, the timer works as before.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "2817b942b7260173ae808c380b4b3fcb44be4bc5",
        "msg" : "hostapd: ubus bss_transition_request sets Link Removal Imminent",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ubus.c"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/README.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/829-AP-MLD-Keep-the-shared-wpa_sm-of-the-partner-links-f.patch"
        ],
        "commitId" : "28714dc524f3b7274b17809a712cb8984fa37e7f",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: keep the shared wpa_sm of an MLD station for a refused link\u000a\u000aFor a new link station of a non-AP MLD, the failure path of\u000a__check_assoc_ies() clears the wpa_sm of every partner link entry of the\u000aMLD address, the association link station included. Those entries hold\u000athe shared state machine, not the temporary per-link one that is freed.\u000aAfter that, the station stays associated with no wpa_sm. This has two\u000aeffects:\u000a\u000a- A Link Reconfiguration add that the element check refuses, followed\u000a  by a valid add, crashes hostapd in wpa_auth_set_ml_info() called\u000a  from hostapd_ml_process_reconf_link().\u000a- An association with a partner link that __check_assoc_ies() refuses\u000a  never starts the 4-way handshake, and the station times out.\u000a\u000aUpstream commit 0435c06fc270 (\"AP MLD: Update partner link wpa_sm\u000apointers more consistently\") and commit 3c98f62ac942 (\"AP MLD: Clear\u000awpa_sm entries for all STAs more thoroughly\") added these clears to\u000aremove pointers to a freed wpa_sm. That only applies where the station\u000aowns the shared wpa_sm. Upstream main 741d70dd8e32 has the same code.\u000a\u000aClear the partner links only for the station that owns the shared\u000awpa_sm. A link station frees only its own temporary wpa_sm, and on\u000asuccess it still sets the shared wpa_sm on its partner links.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "28714dc524f3b7274b17809a712cb8984fa37e7f",
        "msg" : "hostapd: keep the shared wpa_sm of an MLD station for a refused link",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/829-AP-MLD-Keep-the-shared-wpa_sm-of-the-partner-links-f.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/830-WDS-Interface-removal-in-MLO-cases.patch"
        ],
        "commitId" : "7e74099f9fb91559042787037d080c68efca5ecb",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: keep the WDS interface of an MLD while it has a link\u000a\u000aBackport the removal part of hostap 7561cfa1ea9a. Freeing one link\u000astation of a non-AP MLD removed the AP_VLAN (ap-mldN.staM) that all its\u000alinks share, while the MLD stayed associated over its other links.\u000amac80211 reports the unexpected 4-address frame that could create it\u000aagain once per station at most, so a second link removal in the same\u000aassociation left the backhaul without its AP_VLAN.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "7e74099f9fb91559042787037d080c68efca5ecb",
        "msg" : "hostapd: keep the WDS interface of an MLD while it has a link",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/830-WDS-Interface-removal-in-MLO-cases.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/457-wifi-mac80211-use-the-AP-interface-for-link-changes-.patch"
        ],
        "commitId" : "b521b6040ea38d1157a703dd0d59789d100a8b57",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: use the AP interface for link changes of a VLAN station\u000a\u000adrv_change_sta_links() checked the AP VLAN of a 4-address station in\u000aplace of its AP, so adding or removing a link of such a non-AP MLD\u000awarned once, returned -EIO and left the driver unaware of the change.\u000ahostapd keeps the station on its VLAN while it removes one of its links\u000asince the WDS interface fix (patch 830).\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "b521b6040ea38d1157a703dd0d59789d100a8b57",
        "msg" : "mac80211: use the AP interface for link changes of a VLAN station",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/457-wifi-mac80211-use-the-AP-interface-for-link-changes-.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/ap/ubus.c"
        ],
        "commitId" : "cb66fb9495a5258a31af388e6292395630554912",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: cancel the ubus reconnect timer when the context goes\u000a\u000ahostapd_ubus_connection_lost() arms ubus_reconnect_timeout(), which\u000areconnects the global ctx. When the last ubus object is removed before\u000athe reconnect succeeds, hostapd_ubus_ref_dec() frees ctx and sets it to\u000aNULL, but the timer stays armed. One second later it calls\u000aubus_reconnect() with a NULL context and hostapd crashes:\u000a\u000a  WPA_TRACE: eloop SIGSEGV - START\u000a  ubus_reconnect+0xc\u000a  ubus_reconnect_timeout() ../src/ap/ubus.c\u000a  eloop_run() ../src/utils/eloop.c\u000a\u000aReachable when ubusd stops and every BSS of hostapd goes within that\u000awindow, or while ubusd stays down.\u000a\u000aCancel the reconnect timer together with the context it serves, as\u000ahostapd_bss_flush_bans() does with its timers. The next BSS connects\u000aanew through hostapd_ubus_init().\u000a\u000aThe problem dates from commit 9df75e7f34d4 (\"hostapd: fix ubus\u000areconnect handling\"), which added the timer while\u000ahostapd_ubus_ref_dec() already freed the context.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "cb66fb9495a5258a31af388e6292395630554912",
        "msg" : "hostapd: cancel the ubus reconnect timer when the context goes",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ubus.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/831-MLD-STA-Send-the-Multi-AP-element-in-the-profile-of-.patch"
        ],
        "commitId" : "8a1d63b00cabb6c993e87c05bc1ea66eb60b835f",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: send the Multi-AP element in the profile of an added MLD link\u000a\u000aA Link Reconfiguration Request that adds a link carries the complete\u000aprofile of that link's STA. IEEE Std 802.11be-2024, 35.3.6.4 applies no\u000ainheritance there. wpa_supplicant sent no elements for an added link.\u000aSo the profile of a Multi-AP backhaul STA had no Multi-AP element.\u000ahostapd refuses that link on a backhaul-only BSS with status 12. On a\u000aBSS that is fronthaul and backhaul, it clears WLAN_STA_MULTI_AP of the\u000anew link station, and the AP_VLAN of the MLD then leaks when that link\u000astation is the last one freed.\u000a\u000aSend the Multi-AP element of the association request in the profile of\u000aeach added link of a backhaul STA.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "8a1d63b00cabb6c993e87c05bc1ea66eb60b835f",
        "msg" : "hostapd: send the Multi-AP element in the profile of an added MLD link",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/831-MLD-STA-Send-the-Multi-AP-element-in-the-profile-of-.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/832-AP-MLD-Keep-the-Multi-AP-state-of-an-MLD-for-an-adde.patch"
        ],
        "commitId" : "1605835b36ba10355f8f11a1ce1b629deaa36d28",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: keep the Multi-AP state of an MLD for an added link\u000a\u000ahostapd checks the profile of a link that a Link Reconfiguration\u000aRequest adds on its own, with no inheritance (IEEE Std 802.11be-2024,\u000a35.3.6.4). A backhaul STA MLD that omits the Multi-AP element there is\u000arefused with status 12 on a backhaul-only BSS. On a BSS that is\u000afronthaul and backhaul, the new link station loses WLAN_STA_MULTI_AP,\u000aand the AP_VLAN of the MLD leaks when that link station is the last one\u000afreed.\u000a\u000aWhere the profile has no Multi-AP element and the MLD associated as a\u000aMulti-AP backhaul STA, keep its Multi-AP state. This accepts a profile\u000athat 35.3.6.4 calls incomplete, for interoperability with stations that\u000aomit the element. A profile with the element is checked as before, and\u000aan MLD that is no backhaul STA stays refused on a backhaul-only BSS.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "1605835b36ba10355f8f11a1ce1b629deaa36d28",
        "msg" : "hostapd: keep the Multi-AP state of an MLD for an added link",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/832-AP-MLD-Keep-the-Multi-AP-state-of-an-MLD-for-an-adde.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/ap/ubus.h",
          "package/network/services/hostapd/src/src/ap/ubus.c"
        ],
        "commitId" : "58286e3c0e71a2b4de3c8bee656b882528e590ea",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: add a BSS ubus object once the ubus connection is back\u000a\u000aA BSS added while hostapd has no working ubus connection never got its\u000aubus object:\u000a\u000a- With the connection lost and the context kept (other objects still\u000a  registered), ubus_add_object() fails and takes no reference. The\u000a  reconnect registers again only the objects in the context, so the new\u000a  object stays absent until hostapd restarts.\u000a- With no context (ubusd down at the add, for example after the last\u000a  object went while ubusd was down), hostapd_ubus_add_bss() returned\u000a  when the connect failed, and nothing tried again.\u000a\u000aKeep such objects on a pending list. Each holds a reference, so the\u000acontext and its reconnect timer stay. The reconnect timer adds them\u000aafter a successful reconnect. Without a context, a connect timer of\u000a1 s tries to connect, and the first connect adds them. Removing a BSS\u000atakes its object off the list, and the last reference cancels the\u000aconnect timer. An add that a live ubusd refuses keeps the current\u000abehaviour: no object, no reference.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "58286e3c0e71a2b4de3c8bee656b882528e590ea",
        "msg" : "hostapd: add a BSS ubus object once the ubus connection is back",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ubus.h"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ubus.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/458-wifi-mac80211-send-MLO-group-frames-only-on-links-wi.patch"
        ],
        "commitId" : "0ac9421585380e50e119f9fe9892db55b957fa48",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: send MLO group frames only on links with a running AP\u000a\u000aA stopped link of an AP MLD stays in active_links until hostapd removes\u000ait, and mac80211 sent a copy of each group addressed frame there. On\u000ahwsim this warns \"TX w/o channel\"; mt7996 queues the copy with the TXD of\u000athe stopped link. Patch 458 skips links without a beacon, and drops a\u000acopy that waits in the TXQ while the AP of its link stops.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "0ac9421585380e50e119f9fe9892db55b957fa48",
        "msg" : "mac80211: send MLO group frames only on links with a running AP",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/458-wifi-mac80211-send-MLO-group-frames-only-on-links-wi.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/459-wifi-mac80211-free-the-link-data-of-a-refused-link-r.patch"
        ],
        "commitId" : "12094c0280e3f0f346e7650b3e49e6b957976d6a",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: free the link data of a refused link reconfiguration\u000a\u000aA Multi-Link Reconfiguration whose every added link the AP refuses left\u000areconf.add_links_data allocated in the station, because\u000aieee80211_ml_reconf_reset() returns early once added_links and\u000aremoved_links are 0. Each later authentication took its link addresses\u000afrom it, so a link outside the refused request authenticated from\u000a00:00:00:00:00:00, which hostapd drops (\"Invalid SA\").\u000a\u000aAdd subsys/459, which also resets the reconfiguration state while\u000aadd_links_data is set. Upstream wireless has the same code.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "12094c0280e3f0f346e7650b3e49e6b957976d6a",
        "msg" : "mac80211: free the link data of a refused link reconfiguration",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/459-wifi-mac80211-free-the-link-data-of-a-refused-link-r.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/839-AP-take-the-authenticator-of-a-station-timer-from-it.patch",
          "package/network/services/hostapd/patches/882-AP-MLD-keep-the-pending-RADIUS-messages-of-a-non-AP-.patch",
          "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch",
          "package/network/services/hostapd/patches/836-AP-MLD-keep-the-association-of-a-non-AP-MLD-at-a-lin.patch",
          "package/network/services/hostapd/patches/868-AP-MLD-keep-the-session-timers-of-a-moved-associatio.patch"
        ],
        "commitId" : "beeab8d64764c47f88f70c30569c5a6945ca0912",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: keep the association of a non-AP MLD at a link removal\u000a\u000aAt the expiry of an AP link removal, patch 603 deauthenticated each\u000anon-AP MLD whose association link was the removed link, also where it\u000ahad other setup links. IEEE Std 802.11be-2024, 35.3.6.3 ends only the\u000aassociation of a non-AP MLD whose only setup link is removed, so a\u000abackhaul MLD with other links lost its backhaul for some seconds.\u000a\u000aAdd patch 836: move the association of such a non-AP MLD to its lowest\u000aother setup link whose AP runs, as hostapd already does for a Link\u000aReconfiguration that deletes the association link, and free the STA of\u000athe removed link as a link STA. The move takes the group of the new\u000alink for the state machine, since the group of the removed link is\u000afreed with its AP.\u000a\u000aThe move must keep the state that the old association STA holds:\u000a- 839: wpa_rekey_ptk() and wpa_send_eapol_timeout() take the\u000a  authenticator from the state machine when they fire, so that a\u000a  pending timer does not use the authenticator of the freed link;\u000a- 868: the session timer, the session warning timer and the session\u000a  deadline move to the new association STA;\u000a- 875: the accounting session and the EAPOL state machine move to the\u000a  new association STA, so that the RADIUS server sees no end of the\u000a  session and reauthentication goes on;\u000a- 882: the free of a link STA keeps the pending RADIUS messages of the\u000a  MLD address, which the association STA still waits for.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "beeab8d64764c47f88f70c30569c5a6945ca0912",
        "msg" : "hostapd: keep the association of a non-AP MLD at a link removal",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/836-AP-MLD-keep-the-association-of-a-non-AP-MLD-at-a-lin.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/882-AP-MLD-keep-the-pending-RADIUS-messages-of-a-non-AP-.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/868-AP-MLD-keep-the-session-timers-of-a-moved-associatio.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/839-AP-take-the-authenticator-of-a-station-timer-from-it.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/839-AP-take-the-authenticator-of-a-station-timer-from-it.patch",
          "package/network/services/hostapd/patches/837-AP-MLD-accept-the-association-link-in-M2-of-a-rekeyi.patch"
        ],
        "commitId" : "f37e174443d07aadf143df1878882bcffceb125b",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: accept the association link in M2 of a PTK rekey\u000a\u000aAfter hostapd moved the association of a non-AP MLD to another link\u000a(a Link Reconfiguration that deletes the association link, or patch\u000a836 at an AP removal), the first PTK rekey ended the association:\u000awpa_auth_validate_ml_kdes_m2() refused the MLO Link KDE of the new\u000aassociation link, which wpa_supplicant still lists. IEEE Std\u000a802.11be-2024, 12.7.6.3 has message 2 of a rekeying name each setup\u000alink.\u000a\u000aAdd patch 837: in message 2 of a rekeying, accept the KDE of the\u000aassociation link where its address matches.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "f37e174443d07aadf143df1878882bcffceb125b",
        "msg" : "hostapd: accept the association link in M2 of a PTK rekey",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/837-AP-MLD-accept-the-association-link-in-M2-of-a-rekeyi.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/839-AP-take-the-authenticator-of-a-station-timer-from-it.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/460-wifi-mac80211-compute-the-links-of-each-AP-VLAN-on-i.patch"
        ],
        "commitId" : "d179d224cecd0f331c759b0f076e8b69779ebc20",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: compute the links of each AP VLAN on its own\u000a\u000aAt an AP link change, ieee80211_update_apvlan_links() carried the link\u000amask of one 4-address AP VLAN over to the next. With two Multi-AP\u000abackhaul MLDs on different link sets, the second VLAN lost links that\u000aits station holds, and mac80211 removed them from the station.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "d179d224cecd0f331c759b0f076e8b69779ebc20",
        "msg" : "mac80211: compute the links of each AP VLAN on its own",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/460-wifi-mac80211-compute-the-links-of-each-AP-VLAN-on-i.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/461-wifi-mac80211-follow-the-station-links-on-its-4-addr.patch"
        ],
        "commitId" : "ae11dd33909887bd5e728387142d10253c645b7e",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: follow the station links on its 4-address AP VLAN\u000a\u000aThe 4-address AP VLAN of a Multi-AP backhaul MLD held only the links\u000athat the station had when it moved to the VLAN. A Link Reconfiguration\u000aadd of another link then failed in ieee80211_add_link_station() with\u000a-EINVAL, so hostapd answered status 17. Add the link to the VLAN at the\u000aadd and remove it at the delete.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "ae11dd33909887bd5e728387142d10253c645b7e",
        "msg" : "mac80211: follow the station links on its 4-address AP VLAN",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/461-wifi-mac80211-follow-the-station-links-on-its-4-addr.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/ap/ucode.c",
          "package/network/services/hostapd/patches/882-AP-MLD-keep-the-pending-RADIUS-messages-of-a-non-AP-.patch",
          "package/network/services/hostapd/patches/835-AP-Remove-the-AP_VLAN-of-a-WDS-station-from-the-entr.patch",
          "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch",
          "package/network/services/hostapd/patches/868-AP-MLD-keep-the-session-timers-of-a-moved-associatio.patch"
        ],
        "commitId" : "69e29aef383951d0da0fbbd932ffae455c2abbf1",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: remove the AP_VLAN of a WDS station from the entry that made it\u000a\u000aap_free_sta() decides the removal of a station's AP_VLAN from flags of\u000athe freed entry, and with patch 830 from the entries that the other\u000alink BSSes of an AP MLD hold for the address. The AP_VLAN outlives\u000aboth. A new authentication whose association is refused clears\u000aWLAN_STA_MULTI_AP, so the AP_VLAN leaks, also for a station that is no\u000aMLD. On an AP MLD a plain WDS AP_VLAN leaks when the link station that\u000areceived the 4-address frame is not the last one freed. The removal of\u000athe association link removes the AP_VLAN twice, because the station of\u000athe removed link BSS sees no partner and the remaining one does not see\u000ait.\u000a\u000aAdd patch 835: remove the AP_VLAN only from the entry on which hostapd\u000acreated or enabled it again. The entry gets the mark also where\u000ahostapd_set_wds_sta() fails, since i802_set_wds_sta() can create the\u000ainterface and then fail at the bridge add or at the VLAN move of the\u000astation. When the marked link station of a non-AP MLD is freed while\u000aanother link station stays, the mark passes to it.\u000a\u000auc_hostapd_bss_rename() renames the AP_VLANs of the entries with\u000aWLAN_STA_WDS. A Multi-AP backhaul AP_VLAN and a WDS AP_VLAN whose mark\u000apassed to a link station without the flag kept the old name, so the\u000afree missed them and netifd matched them to no vif or to the wrong one.\u000aRename the AP_VLAN of each entry that holds the mark.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "69e29aef383951d0da0fbbd932ffae455c2abbf1",
        "msg" : "hostapd: remove the AP_VLAN of a WDS station from the entry that made it",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/882-AP-MLD-keep-the-pending-RADIUS-messages-of-a-non-AP-.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/868-AP-MLD-keep-the-session-timers-of-a-moved-associatio.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ucode.c"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/835-AP-Remove-the-AP_VLAN-of-a-WDS-station-from-the-entr.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/ipv6/odhcp6c/Makefile",
          "package/network/ipv6/odhcp6c/patches/100-ubus-keep-reconnecting-after-a-ubusd-restart.patch"
        ],
        "commitId" : "64badc4891538bc7902db560beb84d8d892727ab",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "odhcp6c: keep reconnecting to ubus after a ubusd restart\u000a\u000aOn a lost ubus connection, odhcp6c tries one reconnect, then frees the\u000acontext while main() still polls its socket and holds its pointer.\u000aAfter a ubusd restart odhcp6c spins at full CPU, the odhcp6c.<ifname>\u000aobject never comes back, and the exit frees the context a second\u000atime.\u000a\u000aAdd a patch that keeps the context and retries the connection from\u000athe main loop once per second.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "64badc4891538bc7902db560beb84d8d892727ab",
        "msg" : "odhcp6c: keep reconnecting to ubus after a ubusd restart",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/ipv6/odhcp6c/patches/100-ubus-keep-reconnecting-after-a-ubusd-restart.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/ipv6/odhcp6c/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/dnsmasq/Makefile",
          "package/network/services/dnsmasq/patches/200-ubus_dns.patch"
        ],
        "commitId" : "b76d1aa387dd2ce7f8881d498bb471b884b73fcd",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "dnsmasq: register the dnsmasq.dns type again after a lost ubus connection\u000a\u000aubus_destroy() clears the ids of the dnsmasq object and its type, but\u000anot those of dnsmasq.dns. When dnsmasq connects again after a ubusd\u000arestart, it adds dnsmasq.dns with the type id of the old ubusd. A ubusd\u000athat does not know the id creates the object without a type, which no\u000alookup finds, so subscribers of dnsmasq.dns cannot come back.\u000a\u000aClear both ids in ubus_destroy(), so that the add registers the type\u000aagain. A stale type id can also name a type\u000aof another client of the new ubusd, so the object can get the wrong\u000atype. Also allocate the dnsmasq.dns name once, instead of at every\u000aconnection attempt, which leaked the name of each attempt.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "b76d1aa387dd2ce7f8881d498bb471b884b73fcd",
        "msg" : "dnsmasq: register the dnsmasq.dns type again after a lost ubus connection",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/dnsmasq/Makefile"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/dnsmasq/patches/200-ubus_dns.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/dnsmasq/Makefile",
          "package/network/services/dnsmasq/patches/210-ubus-free-a-lost-connection-only-from-check_ubus_lis.patch"
        ],
        "commitId" : "ceb8710238aca1850d0eef877696ed03ab86d19e",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "dnsmasq: free a lost ubus connection only from the main loop\u000a\u000aWhen ubusd goes away, the ubus connection_lost callback of dnsmasq\u000afrees the context while libubus still uses it: check_ubus_listeners()\u000areads the freed context right after ubus_handle_event(), and a wait in\u000aubus_complete_request() reads it after the callback returns.\u000a\u000aAdd a patch that leaves the context alone in the callback and frees\u000ait in check_ubus_listeners(), after which the main loop connects\u000aagain through ubus_init().\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "ceb8710238aca1850d0eef877696ed03ab86d19e",
        "msg" : "dnsmasq: free a lost ubus connection only from the main loop",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/dnsmasq/Makefile"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/dnsmasq/patches/210-ubus-free-a-lost-connection-only-from-check_ubus_lis.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/dnsmasq/Makefile",
          "package/network/services/dnsmasq/patches/220-ubus-wake-the-main-loop-while-waiting-to-connect-aga.patch"
        ],
        "commitId" : "7e4c82ba69e256d4e1cfe83bffbd4d6c41a0fa0b",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "dnsmasq: retry the ubus connection without traffic\u000a\u000aAfter a lost ubus connection, dnsmasq calls ubus_init() again only\u000awhen poll() returns. Without DNS or DHCP traffic nothing wakes poll(),\u000aso the dnsmasq objects stay absent after a ubusd restart.\u000a\u000aAdd a patch that wakes the main loop every second while the ubus\u000aconnection is missing, as dnsmasq already does for DBus.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "7e4c82ba69e256d4e1cfe83bffbd4d6c41a0fa0b",
        "msg" : "dnsmasq: retry the ubus connection without traffic",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/dnsmasq/Makefile"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/dnsmasq/patches/220-ubus-wake-the-main-loop-while-waiting-to-connect-aga.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/361-mac80211-estimate-expected-throughput-if-not-provide.patch"
        ],
        "commitId" : "e4d08564634d847b1d2f3312c529685d13c5cb02",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: fix suspicious RCU usage in expected throughput estimation\u000a\u000asta_estimate_expected_throughput() reads the channel context with\u000arcu_dereference(), but its caller sta_set_sinfo() runs under the wiphy\u000amutex without the RCU read lock. With PROVE_RCU, a station dump or a\u000astation removal of a station without an expected throughput from rate\u000acontrol warns:\u000a\u000a  WARNING: suspicious RCU usage\u000a  net/mac80211/sta_info.c:3120 suspicious rcu_dereference_check() usage!\u000a   sta_set_sinfo+0xb5f/0xb70\u000a   __sta_info_destroy_part2+0x10f/0x250\u000a   __sta_info_flush+0x198/0x250\u000a   ieee80211_set_disassoc+0x701/0x960\u000a\u000aUse sdata_dereference(), since every caller of sta_set_sinfo() holds the\u000awiphy mutex, like the other per-station reads in sta_set_sinfo().\u000a\u000aFixes: f10732fb5632 (\"mac80211: estimate expected throughput if not provided by driver/rc\")\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "e4d08564634d847b1d2f3312c529685d13c5cb02",
        "msg" : "mac80211: fix suspicious RCU usage in expected throughput estimation",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/361-mac80211-estimate-expected-throughput-if-not-provide.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/462-wifi-mac80211-remove-the-stations-of-an-AP-VLAN-befo.patch"
        ],
        "commitId" : "9983e8caab65e71d27ff44ab3329381d398445d4",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: remove the stations of an AP VLAN before its links\u000a\u000aAn AP VLAN of an AP MLD that went down with its station on it, by\u000aifdown or by removing the radio, made ieee80211_vif_update_links()\u000awarn at its station flush, because ieee80211_do_stop() cleared the\u000alinks of the VLAN before it flushed its stations.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "9983e8caab65e71d27ff44ab3329381d398445d4",
        "msg" : "mac80211: remove the stations of an AP VLAN before its links",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/462-wifi-mac80211-remove-the-stations-of-an-AP-VLAN-befo.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/843-DSCP-hostapd-control-interface-for-configuring-DSCP-.patch",
          "package/network/services/hostapd/files/hostapd-full.config",
          "package/network/services/hostapd/patches/845-DSCP-Building-and-sending-Unsolicited-DSCP-policy-re.patch",
          "package/network/services/hostapd/patches/842-DSCP-Advertise-Wi-Fi-Alliance-Capabilities-element-i.patch",
          "package/network/services/hostapd/patches/841-DSCP-Policy-capability-configuration-in-AP-mode.patch",
          "package/network/services/hostapd/patches/846-DSCP-Parse-policy-queries-and-send-solicitied-reques.patch",
          "package/network/services/hostapd/patches/844-DSCP-Allow-DSCP-policy-to-be-attached-to-an-associat.patch",
          "package/network/services/hostapd/patches/868-AP-MLD-keep-the-session-timers-of-a-moved-associatio.patch",
          "package/network/services/hostapd/patches/882-AP-MLD-keep-the-pending-RADIUS-messages-of-a-non-AP-.patch",
          "package/network/services/hostapd/patches/884-AP-MLD-move-the-DSCP-Policy-state-of-a-moved-associa.patch",
          "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch",
          "package/network/services/hostapd/patches/847-DSCP-Handle-DSCP-Policy-Response-frames-from-STA.patch",
          "package/network/services/hostapd/patches/840-DSCP-Check-STA-capability-for-DSCP-policy.patch"
        ],
        "commitId" : "3797d138c3211f771b0601e2d920cc18c9bd1fb9",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: backport the AP side of QoS Management DSCP Policy\u000a\u000ahostap main holds the AP side of DSCP Policy (Wi-Fi QoS Management\u000aSpecification v4.0, section 3.4) since 220bb242f6d4 to d4638304acf8,\u000aafter the 2.12 branch point that the package pins. Backport the eight\u000acommits that change hostapd as patches 840 to 847, with the upstream\u000aauthorship. Each patch header names the context it was adapted to.\u000ad4638304acf8 adds hwsim tests only, which the package does not build,\u000aso it is left out.\u000a\u000aEnable CONFIG_ROBUST_AV in the full variant, so that hostapd takes\u000aenable_dscp_policy_capa, advertises the Wi-Fi Alliance Capabilities\u000aelement and answers DSCP Policy Query frames.\u000a\u000ahostapd_ml_move_assoc_sta() of patch 836 moves the association of a\u000anon-AP MLD to another link STA, and the old STA is then freed with its\u000aDSCP policies. Add patch 884, which moves the policies, the DSCP Policy\u000astate and the dialog token to the new association STA.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "3797d138c3211f771b0601e2d920cc18c9bd1fb9",
        "msg" : "hostapd: backport the AP side of QoS Management DSCP Policy",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/843-DSCP-hostapd-control-interface-for-configuring-DSCP-.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/840-DSCP-Check-STA-capability-for-DSCP-policy.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/882-AP-MLD-keep-the-pending-RADIUS-messages-of-a-non-AP-.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/847-DSCP-Handle-DSCP-Policy-Response-frames-from-STA.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/842-DSCP-Advertise-Wi-Fi-Alliance-Capabilities-element-i.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/841-DSCP-Policy-capability-configuration-in-AP-mode.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/844-DSCP-Allow-DSCP-policy-to-be-attached-to-an-associat.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/845-DSCP-Building-and-sending-Unsolicited-DSCP-policy-re.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/hostapd-full.config"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/868-AP-MLD-keep-the-session-timers-of-a-moved-associatio.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/846-DSCP-Parse-policy-queries-and-send-solicitied-reques.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/884-AP-MLD-move-the-DSCP-Policy-state-of-a-moved-associa.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/849-DSCP-remove-an-invalidated-policy-from-the-list-of-t.patch"
        ],
        "commitId" : "11fd9aa2463dacf5626caf1683fdf5b9021c5943",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: DSCP: remove an invalidated policy from the station's list\u000a\u000ainvalidate_policy_by_id() of the backported DSCP Policy code left a\u000aNULL entry in the policy list of the station, which the response\u000ahandler and the query match then dereference, and leaked the policy.\u000aPatch 849 removes the entry and frees it.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "11fd9aa2463dacf5626caf1683fdf5b9021c5943",
        "msg" : "hostapd: DSCP: remove an invalidated policy from the station's list",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/849-DSCP-remove-an-invalidated-policy-from-the-list-of-t.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/850-hostapd-report-DSCP-Policy-Query-and-Response-frames.patch",
          "package/network/services/hostapd/patches/851-hostapd-DSCP-send-a-DSCP-Policy-Request-with-given-e.patch",
          "package/network/services/hostapd/src/src/ap/ubus.c",
          "package/network/services/hostapd/patches/852-build_features-indicate-CONFIG_ROBUST_AV.patch"
        ],
        "commitId" : "1247a1642323b3784f8d70e7b8143da7b34e850d",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: report DSCP Policy frames on ubus, send raw DSCP Policy Requests\u000a\u000aLet user space see every DSCP Policy Query and Response body, and send\u000aQoS Management elements that it builds to a station in an unsolicited\u000aDSCP Policy Request, without DSCP Policy state in hostapd:\u000a\u000a- patch 850: report both frames as the action-frame notification,\u000a  types dscp-query and dscp-response, with the body from the Category\u000a  octet;\u000a- patch 851 and the ubus method dscp_policy_request {addr, elements,\u000a  reset}: send the given QoS Management elements unchanged with the\u000a  station's next Dialog Token, and reply with that token.\u000a  NOT_SUPPORTED where the BSS has no enable_dscp_policy_capa or the\u000a  station did not set the DSCP Policy bit of its Wi-Fi Alliance\u000a  Capabilities element, NOT_FOUND for an unknown station,\u000a  INVALID_ARGUMENT for elements that are not whole QoS Management\u000a  elements or do not fit in one frame;\u000a  The method finds the station on the link of an AP MLD that holds it,\u000a  as the other station methods do;\u000a- patch 852: `hostapd -vrobust-av` answers whether the build holds\u000a  CONFIG_ROBUST_AV.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "1247a1642323b3784f8d70e7b8143da7b34e850d",
        "msg" : "hostapd: report DSCP Policy frames on ubus, send raw DSCP Policy Requests",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/850-hostapd-report-DSCP-Policy-Query-and-Response-frames.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/852-build_features-indicate-CONFIG_ROBUST_AV.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/851-hostapd-DSCP-send-a-DSCP-Policy-Request-with-given-e.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ubus.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/ap/ubus.h",
          "package/network/services/hostapd/patches/885-hostapd-advertise-the-QoS-Management-SCS-Traffic-Des.patch",
          "package/network/services/hostapd/patches/857-hostapd-add-the-configuration-option-robust_av_scs_d.patch",
          "package/network/services/hostapd/patches/860-build_features-indicate-the-SCS-and-MSCS-handling.patch",
          "package/network/services/hostapd/src/src/ap/ubus.c",
          "package/network/services/hostapd/patches/869-hostapd-keep-the-SCSIDs-of-a-station-one-space.patch",
          "package/network/services/hostapd/patches/862-hostapd-install-SCS-and-MSCS-rules-that-the-AP-confi.patch",
          "package/network/services/hostapd/patches/853-nl80211-install-SCS-and-MSCS-through-NL80211_CMD_SET.patch",
          "package/network/services/hostapd/patches/855-hostapd-handle-MSCS-requests-in-AP-mode.patch",
          "package/network/services/hostapd/patches/854-hostapd-handle-SCS-Requests-in-AP-mode.patch",
          "package/network/services/hostapd/patches/856-hostapd-add-the-control-command-DEL_MSCS.patch",
          "package/network/services/hostapd/patches/868-AP-MLD-keep-the-session-timers-of-a-moved-associatio.patch",
          "package/network/services/hostapd/patches/859-hostapd-report-SCS-and-MSCS-requests-on-ubus-and-app.patch",
          "package/network/services/hostapd/patches/861-nl80211-pass-a-client-with-SCS-and-MSCS-descriptors.patch",
          "package/network/services/hostapd/patches/858-hostapd-advertise-SCS-and-MSCS-where-the-driver-inst.patch",
          "package/network/services/hostapd/patches/884-AP-MLD-move-the-DSCP-Policy-state-of-a-moved-associa.patch",
          "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch"
        ],
        "commitId" : "a554261872ad44da8386434db4ce2f15ac75210f",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: handle SCS and MSCS requests in AP mode\u000a\u000aThe kernel (mac80211 subsys patches 431 to 450 and 465 to 467)\u000aclassifies the streams that a station requests with SCS and MSCS, and\u000atakes them through NL80211_CMD_SET_SCS and NL80211_CMD_SET_MSCS.\u000ahostapd answers no such request in AP mode, so a station gets no\u000aresponse.\u000a\u000aPort the AP side of the MediaTek feed (Howard Hsu), with the vendor\u000adriver calls replaced by the nl80211 commands, under CONFIG_ROBUST_AV:\u000a\u000a- patch 853: the nl80211 commands and attributes, the driver flags\u000a  WPA_DRIVER_FLAGS2_SCS/_MSCS and the driver operations set_scs() and\u000a  set_mscs();\u000a- patch 854: SCS Request frames, downlink and uplink descriptors and\u000a  any number of descriptors per frame, with the TCLAS, TCLAS Processing\u000a  and QoS Characteristics elements as received; an Add of an active\u000a  SCSID and a Change or Remove of one that is not active are declined;\u000a- patch 855: MSCS Request frames and the MSCS Descriptor element of a\u000a  (Re)Association Request, with every TCLAS Mask element as received;\u000a- patch 856: the control command DEL_MSCS, which fails for a station\u000a  without an MSCS;\u000a- patch 857: the BSS option robust_av_scs_disabled;\u000a- patch 858: the SCS and Mirrored SCS bits of the Extended Capabilities\u000a  element where the driver installs the services, and no SCS Traffic\u000a  Description Support without SCS.\u000a\u000aReport the requests and let user space configure rules:\u000a\u000a- patch 859 and the robust-av ubus notification: each request that\u000a  hostapd accepted with Request Type Add or Change, each request with\u000a  Request Type Remove and each rule that hostapd removed itself (the\u000a  driver entry of the station was removed, or DEL_MSCS), with the\u000a  descriptor element as received, its status, and a Remove descriptor\u000a  that hostapd builds for a rule it removed; the requests of a station\u000a  of the disallow lists are declined with REQUEST_DECLINED;\u000a- the ubus method robust_av_disallow {mscs, scs}, which replaces the\u000a  disallow lists of the BSS, of every link on the object of an AP MLD;\u000a  a link that joins the object later takes a copy of the lists;\u000a- patch 860: `hostapd -vrobust-av-scs` answers whether the build\u000a  handles SCS and MSCS;\u000a- patch 861: nl80211_copy.h gets NL80211_SCS_DESC_ATTR_CLIENT,\u000a  NL80211_MSCS_DESC_ATTR_CLIENT and NL80211_MSCS_DESC_ATTR_CONFIGURED,\u000a  and the driver ops send them;\u000a- patch 862: hostapd_robust_av_configure() installs, changes or removes\u000a  a rule that the AP configures for a station, also for a host behind\u000a  the 4-address backhaul station of another AP, from a whole SCS or\u000a  MSCS Descriptor element; the request paths share its parsers. It and\u000a  DEL_MSCS find the associated station on every link of an AP MLD and\u000a  act on the BSS of its association link;\u000a- patch 869: the kernel identifies an SCS rule of a peer by its SCSID\u000a  alone, so hostapd keeps the SCSIDs of the configured rules of a\u000a  station. A configured rule with the SCSID of a request of the station\u000a  is refused, and an Add of the station with the SCSID of a configured\u000a  rule removes that rule first and reports the removal on ubus;\u000a- the ubus method robust_av_configure {addr, client, kind, element},\u000a  reply { status } or { busy }. It finds the station on the link of an\u000a  AP MLD that holds it.\u000a\u000aAn AP that enables QoS Management SCS Traffic Description also sets bit\u000a2 of the Capabilities field of its Wi-Fi Alliance Capabilities element\u000a(Wi-Fi QoS Management v4.0, 3.3). Without the bit, wpa_supplicant\u000arefuses an SCS Request with a QoS Characteristics element on a\u000aconnection that is not EHT. Patch 885 sets it where hostapd keeps the\u000aEHT subfield, for every station and also on a BSS without EHT.\u000a\u000aA move of the association of a non-AP MLD to another link STA moves its\u000aSCS streams, its MSCS and the SCSIDs of its configured rules as well.\u000a\u000aFelix Fietkau is the author of the ports, with Howard Hsu as\u000aco-developer.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "a554261872ad44da8386434db4ce2f15ac75210f",
        "msg" : "hostapd: handle SCS and MSCS requests in AP mode",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/856-hostapd-add-the-control-command-DEL_MSCS.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/862-hostapd-install-SCS-and-MSCS-rules-that-the-AP-confi.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ubus.c"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/861-nl80211-pass-a-client-with-SCS-and-MSCS-descriptors.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/884-AP-MLD-move-the-DSCP-Policy-state-of-a-moved-associa.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/854-hostapd-handle-SCS-Requests-in-AP-mode.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/868-AP-MLD-keep-the-session-timers-of-a-moved-associatio.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/855-hostapd-handle-MSCS-requests-in-AP-mode.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/859-hostapd-report-SCS-and-MSCS-requests-on-ubus-and-app.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/858-hostapd-advertise-SCS-and-MSCS-where-the-driver-inst.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ubus.h"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/857-hostapd-add-the-configuration-option-robust_av_scs_d.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/860-build_features-indicate-the-SCS-and-MSCS-handling.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/869-hostapd-keep-the-SCSIDs-of-a-station-one-space.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/853-nl80211-install-SCS-and-MSCS-through-NL80211_CMD_SET.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/885-hostapd-advertise-the-QoS-Management-SCS-Traffic-Des.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/853-nl80211-install-SCS-and-MSCS-through-NL80211_CMD_SET.patch",
          "package/network/services/hostapd/patches/838-nl80211-keep-the-netdev-of-a-BSS-that-becomes-the-fi.patch"
        ],
        "commitId" : "dc56066839acfc4a1712b714c4e034063e521d30",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: keep the netdev of a BSS that becomes the first BSS\u000a\u000aThe ucode BSS deletion and set_bss_order make another BSS the first BSS\u000aof an interface with set_first_bss(). Its netdev can be one that hostapd\u000acreated. A DISABLE of the interface on a shared driver then removed that\u000anetdev, and the next ENABLE failed in the driver init, which finds the\u000ashared driver through the netdev of the first BSS.\u000a\u000aNew patch 838: set_first_bss() clears added_if of the new first BSS, so\u000aits netdev stays at a deinit, and moves drv->ifindex to it, as the\u000aremoval of a first BSS does. The old first BSS keeps its flag.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "dc56066839acfc4a1712b714c4e034063e521d30",
        "msg" : "hostapd: keep the netdev of a BSS that becomes the first BSS",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/853-nl80211-install-SCS-and-MSCS-through-NL80211_CMD_SET.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/838-nl80211-keep-the-netdev-of-a-BSS-that-becomes-the-fi.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/ap/ucode.c",
          "package/network/services/hostapd/patches/853-nl80211-install-SCS-and-MSCS-through-NL80211_CMD_SET.patch",
          "package/network/services/hostapd/files/hostapd.uc",
          "package/network/services/hostapd/patches/834-AP-MLD-free-the-data-of-a-removed-affiliated-AP-at-t.patch",
          "package/network/services/hostapd/patches/836-AP-MLD-keep-the-association-of-a-non-AP-MLD-at-a-lin.patch",
          "package/network/services/hostapd/src/src/ap/ucode.h"
        ],
        "commitId" : "3a50215a24a6c73ea672070faf97d377fbc738c7",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: free the data of a removed MLD link at the expiry\u000a\u000aAt the end of an AP MLD link removal, hostapd_link_remove_finish()\u000atakes the BSS out of the AP MLD and leaves its stations and its data\u000afor the ucode bss_link_removed hook to delete. Every other path frees\u000athe BSS data right after it leaves the AP MLD. Where the BSS outlives\u000athe hook (hwsim, or a hook that returns early), it keeps references to\u000athe objects the links share. Once the other links are gone,\u000ahostapd_mld_is_first_bss() returns true for it, and the removal of its\u000ainterface frees the shared IEEE 802.1X authenticator a second time\u000a(\"invalid magic\" in eapol_auth_deinit()). Its kept MLD station entry\u000aalso left a stale wpa_sm pointer, and a new association of that station\u000aon another link crashed in wpa_auth_sta_set_vlan().\u000a\u000aFree the stations before the BSS leaves the AP MLD and its data after,\u000ain a new patch 834. Remove the link from the driver at the expiry too,\u000aalso for a BSS that is bss[0] of its interface, and clear its drv_priv.\u000aA later deletion of the stopped BSS then sends no flush without a link\u000aID, which would remove the stations of the other links.\u000a\u000aThe stopped BSS can stay in the BSS list of its interface, with no\u000adrv_priv. hostapd_set_freq() and hostapd_start_dfs_cac() did not test\u000adrv_priv, so the ucode start of an enabled interface, which calls\u000ahostapd_set_freq() for each BSS, crashed in nl80211_set_channel() where\u000athe stopped BSS was bss[0]. Both functions now return without drv_priv,\u000aas the driver wrappers around them do. The ucode start also skips a BSS\u000athat is not started.\u000a\u000aThe stopped BSS no longer stays bss[0] of its interface, which holds\u000athe driver handle and the enabled state of the interface: an ADD of a\u000aBSS on that interface crashed in wpa_driver_nl80211_if_add(), and\u000aDISABLE answered \"already disabled\" while another BSS ran. Where the\u000ainterface has another BSS, the stopped BSS moves behind the others and\u000athe next BSS becomes the first, as the ucode BSS deletion does (needs\u000apatch 838 for a later DISABLE and ENABLE). Where it was the only BSS,\u000athe interface state becomes DISABLED, as upstream leaves it.\u000a\u000aPatch 836 is refreshed for the new offsets.\u000a\u000ahostapd now frees the ucode object of the BSS before the hook, so:\u000a\u000a- hostapd.uc mld_link_bss_remove() takes the BSS from the hook's\u000a  argument, not from hostapd.bss, which still holds the released\u000a  object;\u000a- hostapd_interface_free() drops the ucode registry entry of each BSS\u000a  without an event, for the new object that the hook makes when it\u000a  removes the whole interface.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "3a50215a24a6c73ea672070faf97d377fbc738c7",
        "msg" : "hostapd: free the data of a removed MLD link at the expiry",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ucode.c"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/836-AP-MLD-keep-the-association-of-a-non-AP-MLD-at-a-lin.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/853-nl80211-install-SCS-and-MSCS-through-NL80211_CMD_SET.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ucode.h"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/hostapd.uc"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/834-AP-MLD-free-the-data-of-a-removed-affiliated-AP-at-t.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/475-wifi-mac80211-mark-frames-whose-priority-does-not-fo.patch"
        ],
        "commitId" : "9e76276c807558e75f5b723087e0ad6eb7fc0fe1",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: mark frames whose priority does not follow the DSCP\u000a\u000aA device that encapsulates 802.3 frames in firmware takes the TID from\u000athe DSCP with a mapping of its own (mt7996 SDO), so a priority that\u000auser space sets from a DSCP mapping of its own, a VLAN PCP or a QoS\u000amap does not reach the air. Add\u000apatch 475, which marks these frames with IEEE80211_TX_CTRL_EXPLICIT_UP,\u000aso that the driver can hand their priority to the device. A frame\u000awithout a DSCP is expected at priority 0.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "9e76276c807558e75f5b723087e0ad6eb7fc0fe1",
        "msg" : "mac80211: mark frames whose priority does not follow the DSCP",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/475-wifi-mac80211-mark-frames-whose-priority-does-not-fo.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/864-AP-MLD-move-the-VLAN-list-also-when-one-link-remains.patch"
        ],
        "commitId" : "2c2c5c5e2e040d98df2a2e78aad0b20bee2ddd0d",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: move the VLAN list of an AP MLD also when one link remains\u000a\u000ahostapd_mld_remove_link() moves the VLAN list of an AP MLD to the new\u000afirst BSS only where that BSS is not the last link, since upstream\u000acommit aa7a038e088f (\"AP MLD: Move VLAN list when the first link (BSS)\u000ais removed\"). When the first of two links is removed, the remaining\u000alink reads its own list, which holds only the wildcard entry. A GTK\u000arekey of a VLAN group then ends in FATAL_FAILURE, and the AP_VLAN netdev\u000astays after its last station, so the next station of that VLAN fails\u000aits VLAN assignment and its association (status 53 after SAE).\u000a\u000aAdd patch 864: move the list to every new first BSS and free the new\u000afirst BSS's own list, which the AP MLD does not read. The header marks\u000ait as an upstream fix.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "2c2c5c5e2e040d98df2a2e78aad0b20bee2ddd0d",
        "msg" : "hostapd: move the VLAN list of an AP MLD also when one link remains",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/864-AP-MLD-move-the-VLAN-list-also-when-one-link-remains.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/865-AP-MLD-count-the-AP_VLAN-reference-of-a-link-STA.patch"
        ],
        "commitId" : "4c68a350cdea3cf498381631eff8e242025d0f9c",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: count the AP_VLAN reference of an MLD link STA\u000a\u000aieee80211_ml_process_link() copies the VLAN ID to a link STA without a\u000areference to the dynamic VLAN entry, but ap_free_sta() of that STA drops\u000aone for sta->vlan_id and one for sta->vlan_id_bound. Where the VLAN comes\u000afrom the SAE password, it is assigned before the link STAs exist, so each\u000alink STA drops one reference more than it takes. With three links, the\u000aAP removal of both partner links removes the AP_VLAN netdev while the\u000astation stays associated on its association link.\u000a\u000aAdd patch 865: take the reference where the VLAN ID is copied, as\u000aap_sta_set_vlan() does for an existing entry. The header marks it as an\u000aupstream fix.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "4c68a350cdea3cf498381631eff8e242025d0f9c",
        "msg" : "hostapd: count the AP_VLAN reference of an MLD link STA",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/865-AP-MLD-count-the-AP_VLAN-reference-of-a-link-STA.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/866-AP-MLD-bind-the-VLAN-of-a-link-added-by-Link-Reconfi.patch",
          "package/network/services/hostapd/patches/867-AP-MLD-delete-the-keys-of-a-freed-VLAN-group.patch"
        ],
        "commitId" : "cf660e88b5c0d3ad854f8af085ca63c1c10e2dc2",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: bind the VLAN of a link added by Link Reconfiguration\u000a\u000ahostapd_ml_process_reconf_link() sets up a link STA for an added link,\u000abut does not bind it to the VLAN of the non-AP MLD, as ap_sta_bind_vlan()\u000adoes for each partner link at association. The link takes no reference\u000ato the VLAN group of its authenticator. Its Link Reconfiguration\u000aResponse carries the default group's GTK where that authenticator has no\u000agroup of the VLAN, and a later release of the link frees the VLAN group\u000awhile another station still uses it.\u000a\u000aAdd patch 866: bind the added link STA alone before the response is\u000abuilt; ap_sta_bind_vlan() would take a second group reference on each\u000apartner link. The bind leaves the driver VLAN alone: the driver holds\u000aone station for the MLD, which the association put on its AP_VLAN or\u000aWDS interface, and a move would take a Multi-AP backhaul STA off its\u000aWDS interface. The header marks it as an upstream fix.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "cf660e88b5c0d3ad854f8af085ca63c1c10e2dc2",
        "msg" : "hostapd: bind the VLAN of a link added by Link Reconfiguration",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/866-AP-MLD-bind-the-VLAN-of-a-link-added-by-Link-Reconfi.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/867-AP-MLD-delete-the-keys-of-a-freed-VLAN-group.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/files/hostapd.uc"
        ],
        "commitId" : "21b47bd63f6713fc3b38e5ca63479ab6a56e3c8d",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: announce the removal of an MLD link before a radio restart\u000a\u000aA configuration change that restarts a radio (iface_restart(), for a\u000achannel change of a radio with an AP MLD link or a change of a radio\u000aline) stops each link of that radio without a frame to the non-AP MLDs\u000athat hold it. The link beacons again after the restart with the same\u000aBSSID, so a non-AP MLD that is not told keeps sending on it.\u000a\u000aWhere the link's own BSS stays the same, announce an AP removal of the\u000alink with a count of 10 first, and restart the radio at its expiry, as\u000aIEEE 802.11be-2024 35.3.6.3 describes for the removal of an affiliated\u000aAP. A non-AP MLD then drops the link and keeps its association over its\u000aother links. The bss_link_removed hook of such a removal restarts the\u000aradio and keeps it in the AP MLD; a removal that umapd asks for still\u000atakes the link out. A configuration that arrives during the countdown\u000areplaces the one the restart applies.\u000a\u000aThe radio restarts at once, as before, where hostapd refuses the\u000aremoval (the last link that beacons, a channel or colour switch, an\u000aMBSSID set) or where the link's own BSS changes, since its stations\u000amust associate again. Where hostapd keeps the link at the expiry, the\u000arestart follows one second after the latest time the removal names.\u000aA teardown, a configuration without a BSS and another restart of the\u000aradio end the wait.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "21b47bd63f6713fc3b38e5ca63479ab6a56e3c8d",
        "msg" : "hostapd: announce the removal of an MLD link before a radio restart",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/hostapd.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/480-wifi-mac80211-keep-the-priority-of-an-802.3-frame-fo.patch"
        ],
        "commitId" : "8e852c996276df5a485332dad3b2390fc31ad962",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: keep the priority of an 802.3 frame for the slow path\u000a\u000aWhile the aggregation session of a TID is not operational, the encap\u000aoffload path hands a frame to the slow path, which classifies it a\u000asecond time. A priority of 256 to 263, which user space can set from a\u000aDSCP mapping of its own, is then lost, and the first frames of a new\u000aflow go out with the TID of the DSCP.\u000aGive the slow path the priority the frame had on entry.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "8e852c996276df5a485332dad3b2390fc31ad962",
        "msg" : "mac80211: keep the priority of an 802.3 frame for the slow path",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/480-wifi-mac80211-keep-the-priority-of-an-802.3-frame-fo.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/476-wifi-nl80211-set-the-TID-to-link-mapping-of-a-statio.patch",
          "package/kernel/mac80211/patches/subsys/477-wifi-mac80211-pass-the-TID-to-link-mapping-of-a-stat.patch"
        ],
        "commitId" : "3101d77a481e5cbfcf983147e2dc48a407401a7c",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: set the negotiated TID-to-link mapping of an AP MLD station\u000a\u000aAn AP MLD that negotiates a TID-to-link mapping with an associated\u000anon-AP MLD has no way to pass the mapping to the driver:\u000aNL80211_CMD_SET_TID_TO_LINK_MAPPING serves a non-AP MLD interface only.\u000a\u000aAccept the command on an AP interface with the MLD address of the\u000astation, where the driver declares the new extended feature\u000aNL80211_EXT_FEATURE_AP_NEG_TTLM, and pass the mapping to the driver with\u000aa new driver op. Based on the MediaTek feed patches 0084 and 0085 by\u000aMichael-CY Lee, reworked onto the upstream command in place of a\u000aprivate one.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "3101d77a481e5cbfcf983147e2dc48a407401a7c",
        "msg" : "mac80211: set the negotiated TID-to-link mapping of an AP MLD station",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/476-wifi-nl80211-set-the-TID-to-link-mapping-of-a-statio.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/477-wifi-mac80211-pass-the-TID-to-link-mapping-of-a-stat.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/872-AP-MLD-answer-a-TID-to-link-mapping-in-an-associatio.patch",
          "package/network/services/hostapd/patches/870-nl80211-set-the-TID-to-link-mapping-of-a-non-AP-MLD.patch",
          "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch",
          "package/network/services/hostapd/patches/871-AP-MLD-answer-a-TID-to-link-mapping-negotiation.patch"
        ],
        "commitId" : "25cde366f66aede5ec6beb132ad3977eae87c72e",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: answer the TID-to-link mapping negotiation of a non-AP MLD\u000a\u000aAn AP MLD ignores the TID-To-Link Mapping Request and Teardown frames of\u000aa non-AP MLD and a TID-To-Link Mapping element in its (Re)Association\u000aRequest frame, so the station gets no answer and the driver never gets\u000athe mapping.\u000a\u000aAnswer a request where the driver applies a negotiated mapping: accept\u000aa valid mapping and set it in the driver once the Response frame is\u000aacknowledged, deny one with status 133 otherwise, and answer a rejected\u000amapping of an association with the default mapping as the preferred\u000aone. Ports of the MediaTek feed patch 0129 and its fixes 0274, 0280,\u000a0287, 0288, 0290 and 0291, adapted to the advertised mapping of patch\u000a609.\u000a\u000aOnly the links that the station set up with success count as its\u000alinks, so that no mapping names a refused link, and a mapping of an\u000aassociation request that names a link the response refuses is rejected\u000awith the default mapping as the preferred one. A move of the\u000aassociation of a non-AP MLD to another link STA moves the negotiated\u000amapping as well.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "25cde366f66aede5ec6beb132ad3977eae87c72e",
        "msg" : "hostapd: answer the TID-to-link mapping negotiation of a non-AP MLD",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/872-AP-MLD-answer-a-TID-to-link-mapping-in-an-associatio.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/871-AP-MLD-answer-a-TID-to-link-mapping-negotiation.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/870-nl80211-set-the-TID-to-link-mapping-of-a-non-AP-MLD.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/873-AP-MLD-advertise-TID-to-link-mapping-negotiation-sup.patch"
        ],
        "commitId" : "faed64df44a49a1de7ae7424c4f44b5ebf5dc668",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: advertise TID-to-link mapping negotiation support\u000a\u000ahostapd clears the TID-To-Link Mapping Negotiation Support subfield of\u000athe driver's MLD capabilities, since the AP MLD answered no negotiation.\u000aAdvertise the value of the driver where the driver applies a negotiated\u000amapping (NL80211_EXT_FEATURE_AP_NEG_TTLM).\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "faed64df44a49a1de7ae7424c4f44b5ebf5dc668",
        "msg" : "hostapd: advertise TID-to-link mapping negotiation support",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/873-AP-MLD-advertise-TID-to-link-mapping-negotiation-sup.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/479-wifi-mac80211-wait-for-RCU-only-when-a-vif-link-is-r.patch"
        ],
        "commitId" : "0ef61fcd02284d4b9175c9ea132e4052c3bbc872",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: wait for RCU only when a vif link is removed\u000a\u000aAdd subsys patch 479. A Link Reconfiguration add of a 4-address station\u000aupdates the links of its AP VLAN (patch 461), and that update waits\u000afor an RCU grace period although it removes no link. The wait comes\u000abefore hostapd sends the Link Reconfiguration Response, which a\u000amac80211 station expects within 100 ms.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "0ef61fcd02284d4b9175c9ea132e4052c3bbc872",
        "msg" : "mac80211: wait for RCU only when a vif link is removed",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/479-wifi-mac80211-wait-for-RCU-only-when-a-vif-link-is-r.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/874-MLD-STA-move-the-association-link-off-a-removed-link.patch"
        ],
        "commitId" : "1be9a8d1ba4ce221f0055627ca6e2ba8eede23a8",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: move the association link of an MLD station off a removed link\u000a\u000aAfter a link removal, wpa_supplicant kept the association link id and\u000aassoc_freq of the removed link, so Action frames sent on assoc_freq, the\u000aBTM Response and the DPP frames of the ucode API among them, went\u000aoff-channel to a channel that the AP MLD no longer uses. Take the lowest\u000aremaining link and its frequency.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "1be9a8d1ba4ce221f0055627ca6e2ba8eede23a8",
        "msg" : "hostapd: move the association link of an MLD station off a removed link",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/874-MLD-STA-move-the-association-link-off-a-removed-link.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/876-AP-MLD-reset-an-associated-non-AP-MLD-at-a-new-assoc.patch"
        ],
        "commitId" : "a9d651dd95358ba18ae0e1caef4a7b61e0ac8ef3",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: reset an associated non-AP MLD at a new association\u000a\u000aA non-AP MLD that is associated and sends a new (Re)Association Request\u000awithout a new Authentication keeps its station entries in\u000ahandle_assoc(). ieee80211_ml_process_link() then refuses every partner\u000alink with \"MLD: link: Station already exists\", and add_associated_sta()\u000aremoves the station from the driver with all its links. The response\u000arefuses the partner links, while hostapd keeps their entries without a\u000adriver station.\u000a\u000aReset such a non-AP MLD as patch 181 does after a timed out SA Query,\u000awhich removes the entries of the other links before they are processed\u000aagain (IEEE 802.11be-2024 11.3.5.3 l). An authorized non-AP MLD with\u000aPMF reaches this point only after its SA Query timed out, because\u000acheck_sa_query() refuses it before. A request on another link than the\u000aassociation link makes that link the association link, so that the\u000areset adds the non-AP MLD again on it instead of only a link of the\u000astation that it removes.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "a9d651dd95358ba18ae0e1caef4a7b61e0ac8ef3",
        "msg" : "hostapd: reset an associated non-AP MLD at a new association",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/876-AP-MLD-reset-an-associated-non-AP-MLD-at-a-new-assoc.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/877-AP-MLD-find-a-non-AP-MLD-by-its-link-address-for-a-f.patch"
        ],
        "commitId" : "9e51ee8e1ad210bcbcfb2036bae74177844e86a7",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: find a non-AP MLD by link address for a frame from an unknown STA\u000a\u000amac80211 translates the addresses of a frame of a non-AP MLD to the MLD\u000aaddresses only where it finds the station. Without a driver station,\u000afor example in the short time while hostapd removes and adds the\u000astation again for a new association, it reports a Data frame with the\u000alink address. ieee802_11_rx_from_unknown() looks that address up with\u000aap_get_sta(), which knows a non-AP MLD only by its MLD address, and\u000asends reason 7 to a station that is associated.\u000a\u000aLook the station up by its link address where ap_get_sta() finds none\u000aon a link of an AP MLD. The rules for the station found stay as they\u000aare, and a sender that hostapd does not hold still gets the frame.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "9e51ee8e1ad210bcbcfb2036bae74177844e86a7",
        "msg" : "hostapd: find a non-AP MLD by link address for a frame from an unknown STA",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/877-AP-MLD-find-a-non-AP-MLD-by-its-link-address-for-a-f.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/481-wifi-mac80211-do-not-send-an-off-channel-frame-after.patch"
        ],
        "commitId" : "b4bfe07ab16cb97d8d29180842feee6820f35387",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: do not send an off-channel frame after the ROC expired\u000a\u000aIf the wiphy lock is held for longer than a hardware ROC lasts, the\u000adriver reports the expiry before mac80211 handles the start of the ROC,\u000aand mac80211 then sends the pending frame on the off-channel queue.\u000amac80211_hwsim warns \"TX w/o channel - queue = 4\" for it. Report such a\u000aframe as not acknowledged instead of sending it.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "b4bfe07ab16cb97d8d29180842feee6820f35387",
        "msg" : "mac80211: do not send an off-channel frame after the ROC expired",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/481-wifi-mac80211-do-not-send-an-off-channel-frame-after.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/ap/ucode.c",
          "package/network/services/hostapd/patches/878-AP-add-hostapd_bss_stop_ap-for-a-stop-that-keeps-the.patch"
        ],
        "commitId" : "282560ecfa379dd83a9906edd616adf158282604",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: ucode: tell and free the stations at an iface stop\u000a\u000auc_hostapd_iface_stop() (hostapd.uc apsta_state with up=false) stops\u000aeach BSS with hostapd_drv_stop_ap() alone. mac80211 drops every station\u000aof the BSS, and of an AP MLD every non-AP MLD that holds the stopped\u000alink, without a frame and without an event that hostapd acts on. A\u000alater iface.start() beacons again with the same BSSID: the stations\u000awere not told and keep sending, and hostapd keeps their entries.\u000a\u000aTell and free the stations before the stop with the broadcast\u000aDeauthentication and reason 3, as ctrl DISABLE does on a disabled BSS\u000awith hostapd_bss_deinit_no_free(). The WEP keys stay, since\u000aiface.start() does not set them again. The Deauthentication ends the\u000aassociation of a non-AP MLD on all its links, so a non-AP MLD whose\u000aassociation link is another link of the AP MLD is freed on all its\u000alinks as well. The new hostapd_bss_stop_ap() of patch 878 does both.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "282560ecfa379dd83a9906edd616adf158282604",
        "msg" : "hostapd: ucode: tell and free the stations at an iface stop",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ucode.c"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/878-AP-add-hostapd_bss_stop_ap-for-a-stop-that-keeps-the.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/pending-6.18/798-net-ethernet-mtk_wed-free-the-hw_rro-buffers-once-in.patch"
        ],
        "commitId" : "63a44aefc71bceeeb9d9b2a12a8789dd8f3aed29",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "kernel: mtk_wed: free the hw_rro buffers once in a rx reset\u000a\u000amtk_wed_rx_reset() frees the hw_rro buffers a second time after\u000amtk_wed_free_rx_buffer() freed them. The second walk of the freed page\u000alist panics the first reset of an MT7996 with hw_rro under WED on\u000aMT7988. Add a pending patch that drops the second call.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "63a44aefc71bceeeb9d9b2a12a8789dd8f3aed29",
        "msg" : "kernel: mtk_wed: free the hw_rro buffers once in a rx reset",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/798-net-ethernet-mtk_wed-free-the-hw_rro-buffers-once-in.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/files/wpa_supplicant.uc"
        ],
        "commitId" : "d0c0650b27845e50ad3d8bbc997d55c0edc8f5ed",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wpa_supplicant: fill a new station MLD from the stored radio configs\u000a\u000aset_config() gives the MLO interface configs of a radio only to the\u000aMLD entries that exist at that time, and mld_set_config() starts a new\u000aentry with no radio config. After a wpa_supplicant restart,\u000amac80211.sh sends config_set as soon as the new object appears, and\u000athis can reach the process before the mld_set of netifd's object add\u000alistener. The config of that radio is then lost: the MLD comes up\u000awithout its link, or stays down for a one-radio MLD, until the next\u000anetifd round sends config_set again.\u000a\u000aKeep the MLO configs of the last config_set on the phy entry and fill\u000aeach new MLD entry from them, as the config_set would have done. A\u000aradio that a phy_set_state stop took after its config_set is not\u000amarked present, so mld_start() waits for its start as for any other\u000aheld radio.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "d0c0650b27845e50ad3d8bbc997d55c0edc8f5ed",
        "msg" : "wpa_supplicant: fill a new station MLD from the stored radio configs",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/wpa_supplicant.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files/lib/netifd/wireless.uc",
          "package/network/config/wifi-scripts/files/lib/netifd/wireless-device.uc"
        ],
        "commitId" : "b2958254ac34d40eac6f04956b95a5cf6cc383f2",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: set up a changed radio after netifd adds the interfaces\u000a\u000aSince netifd commit aaf5b194b15d (\"proto-ucode: add ucode protocol\u000ahandler infrastructure\"), config_init_all() runs the ucode config_init\u000abefore config_init_interfaces(). update() then sets a running radio up\u000afrom inside config_init, and interface_get_bridge() does not find an\u000ainterface that the same reload adds. A reload that adds a VLAN bridge\u000aand moves an AP to it thus sets the radio up without a bridge for that\u000aAP, and hostapd replaces the BSS. When the bridge comes up,\u000acheck_interfaces() sets the radio up again with the bridge, and hostapd\u000areplaces the BSS a second time.\u000a\u000aDo not set up a radio while netifd runs config_init; apply the change in\u000aconfig_start, which netifd calls after interface_start_pending().\u000aupdate() only marks the change. check_interfaces() does nothing from\u000aconfig_init to config_start: interface_set_up() calls it inside\u000aconfig_init_interfaces() for an interface that the reload reloads, and\u000ain interface_start_pending(), before config_start. config_start starts\u000aeach radio and then sets up a running radio with a change. This is the\u000aorder of the C wireless code, where __wireless_device_set_up() returned\u000awhile config_init was set and wireless_start_pending() ran after\u000ainterface_start_pending().\u000a\u000aA radio that the reload creates starts with a change, so config_start\u000areads its bridges again, also where the network has no ifindex yet. A\u000areconf call still sets the radio up at once.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "b2958254ac34d40eac6f04956b95a5cf6cc383f2",
        "msg" : "wifi-scripts: set up a changed radio after netifd adds the interfaces",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files/lib/netifd/wireless.uc"
          },
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files/lib/netifd/wireless-device.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files/lib/netifd/wireless.uc"
        ],
        "commitId" : "7757608b17c7863bd07d462315a9956a4bc822b8",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: skip an MLD whose first radio cannot be resolved\u000a\u000awpad_update_mlo() passes the radio config of the first device of an MLO\u000ainterface to find_phy() without a check. That config is null where the\u000afirst device of a UCI wifi-iface is not a known wifi-device, and where\u000ano device of a service data wifi-iface is known. find_phy() then raises,\u000aso the config load stops before it updates any device.\u000a\u000aSkip such an MLD and log a warning, as for an MLD whose first radio has\u000ano phy. Log that case too, which so far dropped the MLD silently.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "7757608b17c7863bd07d462315a9956a4bc822b8",
        "msg" : "wifi-scripts: skip an MLD whose first radio cannot be resolved",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files/lib/netifd/wireless.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files/usr/share/ucode/wifi/utils.uc"
        ],
        "commitId" : "cafa893bc0dfbe58171dcce86689661128f21d28",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: find no phy without sysfs or board.json instead of raising\u000a\u000afind_phy() raises where /sys/class/ieee80211 is absent: lsdir() returns\u000anull, and the path, macaddr and name lookups index the result. It also\u000araises where /etc/board.json is absent and the path or name lookup reads\u000ait, because json() rejects the null from readfile().\u000a\u000aTake a missing ieee80211 class as no phys, and a missing board.json as no\u000aboard data, so that find_phy() returns null or the phy that its path\u000amatches. Every caller already handles null and logs it.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "cafa893bc0dfbe58171dcce86689661128f21d28",
        "msg" : "wifi-scripts: find no phy without sysfs or board.json instead of raising",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files/usr/share/ucode/wifi/utils.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files/lib/netifd/wireless.uc",
          "package/network/config/wifi-scripts/files/lib/netifd/wireless-device.uc"
        ],
        "commitId" : "d9577c5b5e0463bc12d6473d90e6ac656aae8aff",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: pair every supplicant mld_set with an mld_start\u000a\u000awpa_supplicant marks an MLD start pending at every mld_set, also at one\u000athat changes nothing, and mld_start() does nothing while that mark\u000astands. netifd sends mld_start only from wireless_config_done(), at the\u000aend of a round that ran a handler. A reload that changes no device\u000asends an mld_set but runs no handler, so the mark stays until the next\u000around. A radio that hostapd gives back in that time does not start the\u000astation MLD, and the MLD stays down.\u000a\u000aSend mld_start after netifd started the wireless devices of a config\u000aload, if no handler is queued or running at that time. A round that the\u000asame load starts keeps the deferral, because its end sends mld_start as\u000abefore. Do not send the netifd.wireless.done event there, since no\u000around ended.\u000a\u000aWith the mark cleared after such a load, a later round that sends no\u000amld_set of its own, such as the network.wireless up call of `wifi up`,\u000aa check_interfaces() round or the restart after a hostapd process\u000adied, would start the MLD radio by radio as hostapd starts each AP.\u000aSend the supplicant mld_set when a handler is queued while no other\u000ahandler runs or waits, so that every round defers the MLD start to its\u000aend. That mld_set runs after setup() or teardown() set the device state,\u000aso a raise in it would leave the device in setup or teardown with no\u000ahandler. The two previous commits make wpad_update_mlo() and find_phy()\u000areturn without a raise for a radio that cannot be resolved.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "d9577c5b5e0463bc12d6473d90e6ac656aae8aff",
        "msg" : "wifi-scripts: pair every supplicant mld_set with an mld_start",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files/lib/netifd/wireless.uc"
          },
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files/lib/netifd/wireless-device.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files/usr/share/ucode/wifi/utils.uc",
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc"
        ],
        "commitId" : "b4058c1ed7a09f25679b69aecba0987f3e7d8621",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: load iwinfo.uc without board.json or its data files\u000a\u000aiwinfo.uc parses /etc/board.json, /usr/share/wifi_devices.json and\u000a/usr/share/iso3166.json with json(readfile()) at load. Where one of\u000athem is absent, json() rejects the null from readfile(), and the import\u000aof the module fails, so the iwinfo command fails for every interface.\u000a\u000aRead the three files with a helper that gives no data for a missing or\u000aempty file, and take board.json through board_wlan(), as find_phy()\u000adoes. Without board.json no interface lists HT or hardware modes,\u000awithout wifi_devices.json every device is a generic one, and without\u000aiso3166.json the country list holds no names.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "b4058c1ed7a09f25679b69aecba0987f3e7d8621",
        "msg" : "wifi-scripts: load iwinfo.uc without board.json or its data files",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc"
          },
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files/usr/share/ucode/wifi/utils.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files/lib/wifi/mac80211.uc"
        ],
        "commitId" : "087a182043c2e1adfaf0df714b11bb4cc04b108a",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: detect no radios in mac80211.uc without board.json\u000a\u000amac80211.uc parses /etc/board.json with json(readfile()) before it\u000achecks for wlan data. Without the file json() rejects the null from\u000areadfile(), and the script dies with a type error in \"wifi config\".\u000a\u000aTake the wlan data from board_wlan(), which gives none for a missing or\u000aempty board.json, so that the script detects no radios and exits 0, as\u000ait already does for a board.json without wlan data.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "087a182043c2e1adfaf0df714b11bb4cc04b108a",
        "msg" : "wifi-scripts: detect no radios in mac80211.uc without board.json",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files/lib/wifi/mac80211.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc"
        ],
        "commitId" : "8f013fa0d0c601b40208efd6f20f86291675dbb4",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: list no modes in iwinfo.uc for an interface without band\u000a\u000ahtmodelist() reads iface.radio.band, but update() sets iface.radio only\u000afor an interface that network.wireless status lists. For any other\u000ainterface, for example a monitor added by hand, `iwinfo <if> htmodelist`\u000araises \"left-hand side expression is null\". Both htmodelist() and\u000ahwmodelist() also raise where the configured band of the radio has no\u000aentry in the board.json data of its phy.\u000a\u000aGive an interface without a radio, without a band or without board.json\u000amodes for that band no HT modes and no hardware modes, as hwmodelist()\u000aalready does for an interface without a radio.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "8f013fa0d0c601b40208efd6f20f86291675dbb4",
        "msg" : "wifi-scripts: list no modes in iwinfo.uc for an interface without band",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files/usr/share/ucode/wifi/utils.uc"
        ],
        "commitId" : "7a53329657d0fcaf3b93c8e8ec17b0204d12b1f9",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: read no data from a JSON file that does not parse\u000a\u000ajson_file_read() returns null for a missing or empty file, but json()\u000araises for a truncated file or for invalid JSON. A damaged board.json,\u000awifi_devices.json or iso3166.json thus still fails the import of\u000aiwinfo.uc, `wifi config` in lib/wifi/mac80211.uc and find_phy().\u000a\u000aReturn null for such a file as well, and warn with its path and the\u000aparse error, so the damaged file stays visible. A handler that netifd\u000aruns passes the warning to the netifd log.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "7a53329657d0fcaf3b93c8e8ec17b0204d12b1f9",
        "msg" : "wifi-scripts: read no data from a JSON file that does not parse",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files/usr/share/ucode/wifi/utils.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/utils/ucode.c"
        ],
        "commitId" : "6a825983bc00ad46b971a7c651e998a8d899e9b2",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: fix the 2.4 GHz HT40 centre frequency of freq_info()\u000a\u000auc_wpa_freq_info() derives center_freq1 from the 5 GHz channel block\u000aarithmetic for every band. Below 3000 MHz the u8 channel wraps, so\u000achannel 1 HT40+ gives a centre of 3677 MHz instead of 2422 MHz, and the\u000asecondary channel offset is ignored. cfg80211 refuses such a chandef,\u000aso iface.switch_channel() fails for any 2.4 GHz HT40 AP. Reachable via\u000athe apsta_state handler of hostapd.uc: when the station of the same\u000aradio follows a channel switch of its uplink, the AP does not switch,\u000aand mac80211 cannot finalise the station's channel context reservation\u000aand disconnects it.\u000a\u000aGive a 2.4 GHz 40 MHz channel the centre between the primary and the\u000asecondary channel, at the primary +/- 10 MHz (IEEE Std 802.11-2024,\u000a19.3.15.4). center_seg0_idx stays 0 there, as before.\u000a\u000aFixes: 847984c773d8 (\"hostapd: reimplement AP/STA support via ucode\")\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "6a825983bc00ad46b971a7c651e998a8d899e9b2",
        "msg" : "hostapd: fix the 2.4 GHz HT40 centre frequency of freq_info()",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/utils/ucode.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/files/wpa_supplicant.uc"
        ],
        "commitId" : "569cbf2bf36d1fc6f1dbab004a5f6ba636b1faab",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wpa_supplicant: log a channel switch that hostapd refuses to follow\u000a\u000aiface_channel_switch() hands the channel switch of a station to the AP\u000aside of its radio with the apsta_state call and ignores the result.\u000ahostapd logs a channel switch that the driver refuses only at debug\u000alevel, so a refused follow leaves no trace, and the station later loses\u000aits link when the channel context reservation cannot be finalised.\u000a\u000aLog the error of the apsta_state call with the interface and the target\u000afrequency.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "569cbf2bf36d1fc6f1dbab004a5f6ba636b1faab",
        "msg" : "wpa_supplicant: log a channel switch that hostapd refuses to follow",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/wpa_supplicant.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/879-AP-free-a-non-AP-MLD-on-all-its-links-at-a-BSS-deini.patch"
        ],
        "commitId" : "ec01246b7036913ae8d811a9d18d3f0ae157ac5a",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: free a non-AP MLD on all its links at a BSS deinit\u000a\u000actrl DISABLE of a link stops it with hostapd_bss_deinit_no_free(): the\u000adriver flush of the link and the broadcast Deauthentication. mac80211\u000athen drops every non-AP MLD that holds the link with all its links, and\u000athe Deauthentication ends the association of such a non-AP MLD on all\u000aits links. hostapd freed only the link STA of a non-AP MLD whose\u000aassociation link is another link of the AP MLD, and kept it associated\u000aand authorized on that link, so its next association failed.\u000a\u000aShare the part of hostapd_bss_stop_ap() (patch 878) that frees such a\u000anon-AP MLD on all its links with hostapd_bss_deinit_no_free().\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "ec01246b7036913ae8d811a9d18d3f0ae157ac5a",
        "msg" : "hostapd: free a non-AP MLD on all its links at a BSS deinit",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/879-AP-free-a-non-AP-MLD-on-all-its-links-at-a-BSS-deini.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/880-AP-free-a-non-AP-MLD-on-all-its-links-at-a-drop-with.patch"
        ],
        "commitId" : "fb23b45a7b95f90df52239a9d68f3c8f9ef4be30",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: free a non-AP MLD on all its links at a ctrl drop with tx=0\u000a\u000aDEAUTHENTICATE and DISASSOCIATE with tx=0 remove the station from the\u000adriver and free its entry on the BSS of the command. The driver removes\u000aa non-AP MLD with all its links, but hostapd kept the STA on the other\u000alinks: the link STA after the command on the association link, and the\u000aassociated, authorized STA of the association link after the command on\u000aanother link. A frame on such a link then found the stale entry, and\u000athe next association could not set up that link.\u000a\u000aFree the non-AP MLD on all its links with the new\u000aap_free_sta_all_links(), which hostapd_free_link_sta_mlds() of patch\u000a878 now uses as well.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "fb23b45a7b95f90df52239a9d68f3c8f9ef4be30",
        "msg" : "hostapd: free a non-AP MLD on all its links at a ctrl drop with tx=0",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/880-AP-free-a-non-AP-MLD-on-all-its-links-at-a-drop-with.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/882-AP-MLD-keep-the-pending-RADIUS-messages-of-a-non-AP-.patch",
          "package/network/services/hostapd/patches/881-AP-MLD-take-the-EAPOL-frames-of-a-non-AP-MLD-on-its-.patch"
        ],
        "commitId" : "691a91ae9f06329ae2fc420fe706ce37e422bdaa",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: take the EAPOL frames of a non-AP MLD on its association STA\u000a\u000aA non-AP MLD sends its EAPOL frames on any of its links, and\u000aieee802_1x_receive() handles each on the STA of the receiving link. A\u000alink STA has no EAPOL state machine, so the first such frame allocates\u000aa second one there. A reauthentication of the MLD then stalls until a\u000aretransmission takes the link whose state machine waits for it.\u000a\u000aPatch 881 hands each EAPOL frame of a non-AP MLD to its association\u000aSTA, with the helper of the SCS and MSCS handlers.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "691a91ae9f06329ae2fc420fe706ce37e422bdaa",
        "msg" : "hostapd: take the EAPOL frames of a non-AP MLD on its association STA",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/882-AP-MLD-keep-the-pending-RADIUS-messages-of-a-non-AP-.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/881-AP-MLD-take-the-EAPOL-frames-of-a-non-AP-MLD-on-its-.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/files/hostapd.uc"
        ],
        "commitId" : "90ca1f605a7691009e2b3f57f9c849723a5eddd1",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: keep the AP_VLAN names of a BSS with a temporary name valid\u000a\u000aiface_reload_config() gives a kept BSS the temporary name \"tmp_\" plus\u000a8 hex digits when its new name is still held by another kept BSS. For\u000aeach WDS station, the rename also renames the AP_VLAN \"<bss>.sta<aid>\",\u000aand \"tmp_xxxxxxxx.sta1\" exceeds IFNAMSIZ. The kernel refuses that\u000aname, the rename back from the temporary name finds no interface, and\u000athe AP_VLAN keeps the old BSS name while its BSS runs under the new\u000aone. hostapd only logs \"nl80211: Renaming device ... failed\", and the\u000areload reports success. A reload that adds a BSS in front of a\u000abackhaul BSS, with another kept BSS after it, reaches this.\u000a\u000aUse \"tmp\" plus the BSS index as the temporary name. It is unique\u000awithin one reload, and \"<tmp>.sta<aid>\" fits IFNAMSIZ for every AID up\u000ato 2007.\u000a\u000aFixes: 20c667cc8817 (\"hostapd: rework reload support and MAC address handling\")\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "90ca1f605a7691009e2b3f57f9c849723a5eddd1",
        "msg" : "hostapd: keep the AP_VLAN names of a BSS with a temporary name valid",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/hostapd.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/ap/ubus.c",
          "package/network/services/hostapd/patches/883-AP-free-a-non-AP-MLD-on-all-its-links-at-a-group-add.patch"
        ],
        "commitId" : "484c930cbcab394cf45b9ed1df4cb6f2c0293496",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: free a non-AP MLD on all its links at a group addressed drop\u000a\u000aDEAUTHENTICATE and DISASSOCIATE of ff:ff:ff:ff:ff:ff on the control\u000ainterface, and ubus del_client of the broadcast address, send the group\u000aaddressed frame on one link and then free the stations of that BSS with\u000ahostapd_free_stas(). The frame ends the association of a non-AP MLD on\u000aall its links, but on a link that is not its association link only its\u000alink STA was freed. hostapd kept the associated, authorized STA of the\u000aassociation link, and the driver kept the station.\u000a\u000aFree such a non-AP MLD on all its links, as the BSS stop and deinit of\u000apatches 878 and 879 already do.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "484c930cbcab394cf45b9ed1df4cb6f2c0293496",
        "msg" : "hostapd: free a non-AP MLD on all its links at a group addressed drop",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/883-AP-free-a-non-AP-MLD-on-all-its-links-at-a-group-add.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ubus.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/files/wpa_supplicant.uc"
        ],
        "commitId" : "263dccf12d96bb13e8e8910dc6247f09d56aeaf3",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wpa_supplicant: take a station config into an MLD only on its radios\u000a\u000amld_set_iface_config() sets the present bit for every radio with a\u000astation config for the MLD, also for a radio outside the radios that\u000amld_set names. The MLD netdev spans only those radios, but such a radio\u000ajoins the Add, its frequencies enter the scan list and phy_status of\u000athat radio names the MLD. A later phy_set_state stop of that radio\u000aremoves the MLD, and the start skips the radio because it is outside\u000adata.radio_mask, so the MLD stays down although another radio has a\u000aconfig.\u000a\u000aSet the present bit only for a radio of the MLD, as the phy_set_state\u000astart and mld_radios_held() already count only those radios.\u000a\u000aFixes: 9aca8a97d791 (\"wpa_supplicant: add MLO client support\")\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "263dccf12d96bb13e8e8910dc6247f09d56aeaf3",
        "msg" : "wpa_supplicant: take a station config into an MLD only on its radios",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/wpa_supplicant.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/base-files/files/lib/functions.sh"
        ],
        "commitId" : "a0318a5106e6c26a1ebfd425b9f1671f63fb1ebe",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "base-files: start only enabled services on package upgrade\u000a\u000aSince commit afaa34ccd734 (\"base-files: don't modify enabled state of\u000aservice on upgrade\"), default_postinst() starts every init script of\u000athe package on an upgrade, and leaves out only the enable. With opkg the\u000aprerm stops the service first, so the pair acts as a restart. apk runs\u000ano prerm on an upgrade, and its post-upgrade script calls\u000adefault_postinst() with PKG_UPGRADE=1. A reinstall or an upgrade with\u000aapk thus starts a service that the system has disabled and stopped.\u000a\u000aOn an upgrade, start an init script only where it reports itself\u000aenabled. A fresh install still enables and starts each service, and an\u000aoffline root still only enables it.\u000a\u000aWith opkg, a service that the system has disabled but that was started\u000aby hand now stays stopped after an upgrade, since the prerm stops it\u000aand the postinst no longer starts it.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "a0318a5106e6c26a1ebfd425b9f1671f63fb1ebe",
        "msg" : "base-files: start only enabled services on package upgrade",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/base-files/files/lib/functions.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/ap/ubus.c"
        ],
        "commitId" : "4f88e1b6d4fac140aec1027ac89f41e76b7d4653",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: ubus wps_cancel ends the push button of one link on request\u000a\u000aThe ubus object of an AP MLD resolves to one link, the MLD's first BSS\u000aor else its first link (hostapd_ubus_mld_hapd()). wps_start arms the\u000alink that its link_id names, but wps_cancel takes no link_id and acts on\u000athe resolved link. With wps_independent, which is the default,\u000ahostapd_wps_cancel() reaches only that BSS, so a push button armed on\u000aanother link stays active until its walk time ends.\u000a\u000awps_cancel takes the optional link_id of wps_start and ends the push\u000abutton on that link's BSS; NOT_FOUND where the object has no such link.\u000aget_features reports wps_link_cancel, so that a caller can tell a\u000ahostapd that takes the argument from one that ignores it.\u000a\u000aRefresh patches 863 and 869, whose ubus.c hunks moved by 11 lines.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "4f88e1b6d4fac140aec1027ac89f41e76b7d4653",
        "msg" : "hostapd: ubus wps_cancel ends the push button of one link on request",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ubus.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/300-noscan.patch",
          "package/network/services/hostapd/patches/170-hostapd-update-cfs0-and-cfs1-for-160MHz.patch"
        ],
        "commitId" : "908ed08613f6cff4d38f7dbaf3100d88a0231af2",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: build HT and VHT operation of a BSS without hardware modes\u000a\u000aPatch 170 reads hapd->iface->current_mode->vht_capab in\u000ahostapd_eid_ht_operation() and hostapd_eid_vht_operation() without a\u000acheck of current_mode. A BSS of driver=none has no hardware modes, so\u000acurrent_mode stays NULL, and hostapd crashes at the start of such a BSS\u000awith ieee80211n=1 or ieee80211ac=1:\u000a\u000a  WPA_TRACE: eloop SIGSEGV - START\u000a  hostapd_eid_ht_operation() ../src/ap/ieee802_11_ht.c:150\u000a  ieee802_11_build_ap_params() ../src/ap/beacon.c:2427\u000a  hostapd_setup_bss() ../src/ap/hostapd.c:2566\u000a\u000aTake the extended NSS BW capability only from a present mode, like\u000ahostapd_eid_vht_capabilities() already does.\u000a\u000aFixes: adfeda849198 (\"hostapd: add fix for dealing with VHT 160 MHz via ext nss bw\")\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "908ed08613f6cff4d38f7dbaf3100d88a0231af2",
        "msg" : "hostapd: build HT and VHT operation of a BSS without hardware modes",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/170-hostapd-update-cfs0-and-cfs1-for-160MHz.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/300-noscan.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/865-AP-MLD-count-the-AP_VLAN-reference-of-a-link-STA.patch",
          "package/network/services/hostapd/patches/803-hostapd-fix-80211be-build.patch",
          "package/network/services/hostapd/patches/821-AP-Drop-a-later-try-of-an-acknowledged-Re-Associatio.patch",
          "package/network/services/hostapd/patches/600-ubus_support.patch",
          "package/network/services/hostapd/patches/866-AP-MLD-bind-the-VLAN-of-a-link-added-by-Link-Reconfi.patch",
          "package/network/services/hostapd/patches/605-ap-mld-a-removed-affiliated-ap-leaves-the-links-of-its-stations.patch",
          "package/network/services/hostapd/patches/844-DSCP-Allow-DSCP-policy-to-be-attached-to-an-associat.patch",
          "package/network/services/hostapd/patches/883-AP-free-a-non-AP-MLD-on-all-its-links-at-a-group-add.patch",
          "package/network/services/hostapd/patches/868-AP-MLD-keep-the-session-timers-of-a-moved-associatio.patch",
          "package/network/services/hostapd/patches/880-AP-free-a-non-AP-MLD-on-all-its-links-at-a-drop-with.patch",
          "package/network/services/hostapd/patches/878-AP-add-hostapd_bss_stop_ap-for-a-stop-that-keeps-the.patch",
          "package/network/services/hostapd/patches/882-AP-MLD-keep-the-pending-RADIUS-messages-of-a-non-AP-.patch",
          "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch",
          "package/network/services/hostapd/patches/826-AP-MLD-Keep-the-ML-information-of-a-station-whose-as.patch",
          "package/network/services/hostapd/patches/601-ucode_support.patch"
        ],
        "commitId" : "59787f0ff409306917d01f4e6353b53af37f319e",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: free the taxonomy copy of the association frame\u000a\u000ahandle_assoc() keeps a copy of each (Re)Association Request frame in\u000asta->assoc_frame_taxonomy for the get_sta_ies ubus method, but\u000aap_free_sta() frees only probe_ie_taxonomy and assoc_ie_taxonomy. Each\u000afreed station that sent a (Re)Association Request thus leaks the copy\u000aof its last request. A request of a station that is still present\u000afrees the previous copy in taxonomy_sta_info_assoc_frame().\u000a\u000aFree the copy in ap_free_sta() with the other taxonomy data, and\u000arefresh the later patches whose hunks the two lines shift.\u000a\u000aFixes: 79cd45ddeeb5 (\"hostapd: add association frame to taxonomy data\")\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "59787f0ff409306917d01f4e6353b53af37f319e",
        "msg" : "hostapd: free the taxonomy copy of the association frame",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/868-AP-MLD-keep-the-session-timers-of-a-moved-associatio.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/600-ubus_support.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/605-ap-mld-a-removed-affiliated-ap-leaves-the-links-of-its-stations.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/875-AP-MLD-keep-the-accounting-session-and-EAPOL-state-o.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/803-hostapd-fix-80211be-build.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/844-DSCP-Allow-DSCP-policy-to-be-attached-to-an-associat.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/883-AP-free-a-non-AP-MLD-on-all-its-links-at-a-group-add.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/821-AP-Drop-a-later-try-of-an-acknowledged-Re-Associatio.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/878-AP-add-hostapd_bss_stop_ap-for-a-stop-that-keeps-the.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/826-AP-MLD-Keep-the-ML-information-of-a-station-whose-as.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/880-AP-free-a-non-AP-MLD-on-all-its-links-at-a-drop-with.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/882-AP-MLD-keep-the-pending-RADIUS-messages-of-a-non-AP-.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/865-AP-MLD-count-the-AP_VLAN-reference-of-a-link-STA.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/601-ucode_support.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/866-AP-MLD-bind-the-VLAN-of-a-link-added-by-Link-Reconfi.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/pending-6.18/799-net-ethernet-mtk_wed-attach-a-PCIe-device-of-domain-.patch",
          "target/linux/mediatek/patches-6.18/944-net-ethernet-mtk_wed-move-dlm-a-dedicated-dts-node.patch"
        ],
        "commitId" : "7eff1f94e0efc493dce05eebb7dec22e829115e4",
        "timestamp" : 1793198780000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "kernel: mtk_wed: attach a PCIe device of domain 2\u000a\u000amtk_wed_attach() refuses a PCIe device in a PCI domain above 1. The\u000asecond PCIe interface of the MT7996 on the ASUS ZenWiFi BT8 is on the\u000acontroller at 0x11290000, which is domain 2, so it runs without WED\u000awhile the first interface runs WED with hw_rro. In that mixed setup the\u000afirst interface reports a \"Message 001a0002 timeout\" about 87 s after\u000aboot, the root port reports a completion timeout (AER CmpltTO), and the\u000adriver restarts the hardware about every 54 s.\u000a\u000aAdd pending patch 799, which accepts every domain that indexes the three\u000aWED instances of MT7988, like the MediaTek SDK patch \"refactor\u000amtk_wed_attach for support wed2\". The second interface then attaches\u000aWED 2, and the BT8 runs without a timeout or a restart. Refresh 944,\u000awhose hunk the patch shifts.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:20 +0000",
        "id" : "7eff1f94e0efc493dce05eebb7dec22e829115e4",
        "msg" : "kernel: mtk_wed: attach a PCIe device of domain 2",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/mediatek/patches-6.18/944-net-ethernet-mtk_wed-move-dlm-a-dedicated-dts-node.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/799-net-ethernet-mtk_wed-attach-a-PCIe-device-of-domain-.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/patches/196-AP-MLD-Send-a-link-agnostic-Action-frame-to-a-non-ML.patch",
          "package/network/services/hostapd/patches/853-nl80211-install-SCS-and-MSCS-through-NL80211_CMD_SET.patch",
          "package/network/services/hostapd/patches/834-AP-MLD-free-the-data-of-a-removed-affiliated-AP-at-t.patch"
        ],
        "commitId" : "6828f6a6101370875a318004d1aecfd7fffa1d39",
        "timestamp" : 1793198781000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: send a link-agnostic action frame to a non-MLD STA on its link\u000a\u000ahapd_drv_send_action() sends the action frames that IEEE Std\u000a802.11be-2024, 35.3.14 makes link-agnostic (Robust AV Streaming SCS and\u000aMSCS, WNM BSS Transition Management and WNM Sleep Mode) with link ID -1\u000ato every station of an AP MLD. For a station that is not a non-AP MLD,\u000athe SA and the BSSID are the link address of the BSS, and\u000acfg80211_mlme_mgmt_tx() refuses the frame with -EINVAL where that\u000aaddress is not the address of the interface. A non-MLO station on such\u000aa link gets no SCS Response and no MSCS Response.\u000a\u000aThe rule of 35.3.14 holds between an AP MLD and a non-AP MLD only. Add\u000apatch 196, which sends these frames to a non-MLD station of the BSS on\u000athe link of the BSS, as hostapd_drv_sta_disassoc() does with patch 187.\u000aA destination without an entry in the BSS keeps link ID -1. Patches 834\u000aand 853 are refreshed on top of it.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:21 +0000",
        "id" : "6828f6a6101370875a318004d1aecfd7fffa1d39",
        "msg" : "hostapd: send a link-agnostic action frame to a non-MLD STA on its link",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/834-AP-MLD-free-the-data-of-a-removed-affiliated-AP-at-t.patch"
          },
          {
            "editType" : "add",
            "file" : "package/network/services/hostapd/patches/196-AP-MLD-Send-a-link-agnostic-Action-frame-to-a-non-ML.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/patches/853-nl80211-install-SCS-and-MSCS-through-NL80211_CMD_SET.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/backport-6.18/735-v7.3-net-ethernet-mtk_wed-Fix-dma_unmap_single-size.patch"
        ],
        "commitId" : "3b6ab640fb1a09311ecd61e47ee97a8a6f67bfa8",
        "timestamp" : 1793198781000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "kernel: backport the mtk_wed dma_unmap_single() size fix\u000a\u000amtk_wed_wo_queue_refill() maps a WO receive buffer with q->buf_size, but\u000amtk_wed_wo_dequeue() unmaps it with SKB_WITH_OVERHEAD(q->buf_size).\u000a\u000aBackport upstream commit ff5a2a7acec1 (\"net: ethernet: mtk_wed: Fix\u000adma_unmap_single() size\") from net, which unmaps the buffer with the\u000asize it was mapped with.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 14:46:21 +0000",
        "id" : "3b6ab640fb1a09311ecd61e47ee97a8a6f67bfa8",
        "msg" : "kernel: backport the mtk_wed dma_unmap_single() size fix",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/generic/backport-6.18/735-v7.3-net-ethernet-mtk_wed-Fix-dma_unmap_single-size.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/pending-6.18/799-net-ethernet-mtk_wed-attach-a-PCIe-device-of-domain-.patch",
          "target/linux/generic/pending-6.18/793-02-net-ethernet-mtk_wed-fix-reset-condition-for-rx-wdma.patch",
          "target/linux/generic/pending-6.18/797-01-net-ethernet-mtk_eth_soc-query-the-wireless-driver-f.patch",
          "target/linux/mediatek/patches-6.18/944-net-ethernet-mtk_wed-move-dlm-a-dedicated-dts-node.patch",
          "target/linux/generic/pending-6.18/793-04-net-ethernet-mtk_wed-setup-WDMA_RING_TX-0-for-non-DB.patch",
          "target/linux/generic/pending-6.18/798-net-ethernet-mtk_wed-free-the-hw_rro-buffers-once-in.patch",
          "target/linux/generic/pending-6.18/793-03-net-ethernet-mtk_wed-free-up-rings-during-detach.patch",
          "target/linux/generic/pending-6.18/793-01-net-ethernet-mtk_wed-skip-ring-reset-in-wdma_tx_ring.patch",
          "target/linux/generic/pending-6.18/797-02-net-ethernet-mtk_eth_soc-report-the-idle-time-of-off.patch"
        ],
        "commitId" : "7bc917532c7aadf05bed8a9eb7d14a5728795102",
        "timestamp" : 1793199045000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "kernel: mtk_wed: add the pending ring reset and detach fixes\u000a\u000aAdd the four mtk_wed patches that Zhi-Jun You sent to netdev as v6 on\u000a2026-10-26:\u000a- skip the generic ring reset of the WDMA TX rings on WED v3, whose\u000a  descriptors have a different size and initial values;\u000a- reset the CPU index of the WDMA RX rings that are set up, instead of\u000a  the ones that are not;\u000a- free the RX rings and the WDMA TX rings on detach;\u000a- set up WDMA_RING_TX(0) for WED RX on a non-DBDC MT7986.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 15:50:45 +0100",
        "id" : "7bc917532c7aadf05bed8a9eb7d14a5728795102",
        "msg" : "kernel: mtk_wed: add the pending ring reset and detach fixes",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/797-01-net-ethernet-mtk_eth_soc-query-the-wireless-driver-f.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/797-02-net-ethernet-mtk_eth_soc-report-the-idle-time-of-off.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/793-03-net-ethernet-mtk_wed-free-up-rings-during-detach.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/793-04-net-ethernet-mtk_wed-setup-WDMA_RING_TX-0-for-non-DB.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/798-net-ethernet-mtk_wed-free-the-hw_rro-buffers-once-in.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/793-01-net-ethernet-mtk_wed-skip-ring-reset-in-wdma_tx_ring.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/799-net-ethernet-mtk_wed-attach-a-PCIe-device-of-domain-.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/793-02-net-ethernet-mtk_wed-fix-reset-condition-for-rx-wdma.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/mediatek/patches-6.18/944-net-ethernet-mtk_wed-move-dlm-a-dedicated-dts-node.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/pending-6.18/799-net-ethernet-mtk_wed-attach-a-PCIe-device-of-domain-.patch",
          "target/linux/generic/pending-6.18/797-01-net-ethernet-mtk_eth_soc-query-the-wireless-driver-f.patch",
          "target/linux/generic/pending-6.18/798-net-ethernet-mtk_wed-free-the-hw_rro-buffers-once-in.patch",
          "target/linux/generic/pending-6.18/797-02-net-ethernet-mtk_eth_soc-report-the-idle-time-of-off.patch",
          "target/linux/generic/pending-6.18/794-net-ethernet-mtk_wed-bypass-the-RROQM-when-hw_rro-is.patch"
        ],
        "commitId" : "ab2006029b32e241db217393d429e5e25cc938cf",
        "timestamp" : 1793199050000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "kernel: mtk_wed: bypass the RROQM when hw_rro is used\u000a\u000aWith hw_rro on WED v3, the WLAN chip reorders RX frames, and WED takes\u000athem from the RRO rings into the RRO ingress of the route QM. The RROQM,\u000awhose MIOD and feedback rings serve the WO firmware, and the legacy\u000aingress of the route QM (IGRS1) are still configured as for WED v2.\u000a\u000aAdd pending patch 794, based on the MediaTek SDK patch \"add wedv3\u000asupport RROQM bypass WO\", which sets the RROQM bypass and forces the\u000adestination of IGRS1. Apply it only when hw_rro is used: without\u000ahw_rro, for example with mt7915 on WED v3, RX reordering still goes\u000athrough the WO firmware and the RROQM. Refresh 797-01, 797-02, 798 and\u000a799, whose hunks the patch shifts.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 15:50:50 +0100",
        "id" : "ab2006029b32e241db217393d429e5e25cc938cf",
        "msg" : "kernel: mtk_wed: bypass the RROQM when hw_rro is used",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/794-net-ethernet-mtk_wed-bypass-the-RROQM-when-hw_rro-is.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/799-net-ethernet-mtk_wed-attach-a-PCIe-device-of-domain-.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/797-01-net-ethernet-mtk_eth_soc-query-the-wireless-driver-f.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/798-net-ethernet-mtk_wed-free-the-hw_rro-buffers-once-in.patch"
          },
          {
            "editType" : "edit",
            "file" : "target/linux/generic/pending-6.18/797-02-net-ethernet-mtk_eth_soc-report-the-idle-time-of-off.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc"
        ],
        "commitId" : "7737e0a7f53c9f802aff3df2e3c7ac86d48e2946",
        "timestamp" : 1793199050000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: read the FTM responder and background radar feature bits\u000a\u000ahostapd.uc tests NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER as bit 33 and\u000aNL80211_EXT_FEATURE_RADAR_BACKGROUND as bit 61. In nl80211.h they are\u000a32 and 60; bits 33 and 61 are AIRTIME_FAIRNESS and\u000aPOWERED_ADDR_CHANGE. The values had no effect until commit\u000a28c6f5e6f7b8 (\"wifi-scripts: fix extended-feature bit test\").\u000a\u000aSince then mt76 radios, which set AIRTIME_FAIRNESS, read as FTM\u000aresponders, and mac80211_hwsim, which has an FTM responder, does not.\u000aEvery mac80211 radio sets POWERED_ADDR_CHANGE, so every 5 GHz radio\u000areads as capable of background radar.\u000a\u000aUse the values of nl80211.h.\u000a\u000aFixes: 218f3884d2fb (\"wifi-scripts: add ucode based scripts\")\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 15:50:50 +0100",
        "id" : "7737e0a7f53c9f802aff3df2e3c7ac86d48e2946",
        "msg" : "wifi-scripts: read the FTM responder and background radar feature bits",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc"
        ],
        "commitId" : "292104ab33e743ae5f9d6cd8f24b957f4f56063c",
        "timestamp" : 1793199050000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: write ftm_responder only for a radio with an FTM responder\u000a\u000aiface_rrm() appends ftm_responder to the BSS config with no feature\u000acheck, so iface_ftm() only decides about lci and civic. A UCI\u000aftm_responder=1 thus always reaches hostapd, which then sets the FTM\u000aresponder bit of the Extended Capabilities element from the config\u000aalone, also where the driver has no FTM responder.\u000a\u000aLeave ftm_responder to iface_ftm(), which writes it, lci and civic\u000awhere the phy sets NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER, as\u000ahostapd.sh does.\u000a\u000aFixes: 218f3884d2fb (\"wifi-scripts: add ucode based scripts\")\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 15:50:50 +0100",
        "id" : "292104ab33e743ae5f9d6cd8f24b957f4f56063c",
        "msg" : "wifi-scripts: write ftm_responder only for a radio with an FTM responder",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/ap.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mt76/patches/003-wifi-mt76-mt7996-implement-the-flow-offload-idle-op.patch",
          "package/kernel/mt76/patches/001-wifi-mt76-answer-the-flow-priority-query.patch",
          "package/kernel/mt76/Makefile",
          "package/kernel/mt76/patches/002-wifi-mt76-mt7996-implement-the-flow-offload-flush-op.patch"
        ],
        "commitId" : "d38d376b492ccb046024749fd765ce2d3cf84809",
        "timestamp" : 1793199369000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mt76: update to Git HEAD (2026-10-28)\u000a\u000a5e697c3982d7 wifi: mt76: mt7603: validate MCU response length\u000a19901c7f3cc9 wifi: mt76: mt7915: validate MCU response lengths\u000a0720e321afee wifi: mt76: mt7915: validate MURU statistics response\u000abbb18d7844e9 wifi: mt76: mt7915: validate EEPROM response length\u000a7264a8a110c4 wifi: mt76: mt7915: validate free-block response length\u000a8c534f59b4a9 wifi: mt76: mt7915: validate channel MIB response length\u000afa6b2367e281 wifi: mt76: mt7915: validate RX rate response length\u000a07f248fe9830 wifi: mt76: mt7915: validate WED TX statistics response\u000af76151f8d04f wifi: mt76: mt7915: validate RF register response length\u000a0d218afcbddb wifi: mt76: mt76x02: keep A-MSDU subframe buffers at even addresses\u000a558c6aee6891 wifi: mt76: mt76x02: sync the group key PN before a restart\u000adb39c8d4d6d9 wifi: mt76: fix NULL dereference reading napi_threaded in debugfs\u000a6dcc00bb44c5 wifi: mt76: mt7925: deduplicate MLD support code in mt7925_mac_link_sta_add\u000a859b54fabce0 wifi: mt76: mt7925: do not reset WPDMA before stopping NAPI on reset\u000a2bb98336d469 wifi: mt76: mt7996: clamp VHT/HE beamforming NSS\u000ad2712ce4ed84 wifi: mt76: mt7996: clamp EHT beamforming NSS\u000ad973f6ec9a3d wifi: mt76: mt7921: validate MCU response lengths\u000a1618141fbd29 wifi: mt76: mt7921: validate EEPROM response length\u000a1fe8a56213ce wifi: mt76: mt7921: validate TX power response length\u000a759e140bc76a wifi: mt76: mt7921: validate testmode query response\u000ae06a746261e0 wifi: mt76: mt7925: validate MCU response lengths\u000aae20af438c32 wifi: mt76: mt7925: validate register query response\u000aad5b05038a34 wifi: mt76: mt7925: validate EEPROM response length\u000ad0a80080eed9 wifi: mt76: mt7925: validate temperature response length\u000a06deecb57b96 wifi: mt76: mt7925: validate TX power response length\u000aa73af3f06db4 wifi: mt76: mt7925: validate radio status response\u000a487aa470cada wifi: mt76: mt792x: bound firmware release-info parsing\u000aa13a2be996e3 wifi: mt76: mt7996: validate MCU response lengths\u000ae0670ce95e40 wifi: mt76: mt7996: validate EEPROM response lengths\u000a8f71d66ad74e wifi: mt76: mt7996: validate free-block response length\u000a90e7c0007d7f wifi: mt76: mt7996: validate channel MIB response length\u000ae1e90bbe363c wifi: mt76: mt7996: validate temperature response length\u000af99c91725472 wifi: mt76: mt7996: validate RF register response length\u000a8127e3ff88ff wifi: mt76: mt76x02: keep stations registered during watchdog recovery\u000a247c4d987c39 wifi: mt76: honour the more-data flag when releasing buffered frames\u000af75d4f05974d wifi: mt76: mt76x02: serialise wcid drop mask updates\u000a4af6beb07b88 wifi: mt76: mt76x02: clear the wcid drop mask for all powersave responses\u000a304aa9be68dd wifi: mt76: mt7996: stop radios after add failure\u000a1295868b85d3 wifi: mt76: mt7921: validate CLC event length\u000a04bf44cd2cb5 wifi: mt76: mt7921: validate NIC capability TLV payload lengths\u000a3c0806b4dfae wifi: mt76: mt7925: validate NIC capability TLV lengths\u000acb8537008b58 wifi: mt76: mt7925: free the MCU event when linearising fails\u000acd0c5fdf01b3 wifi: mt76: mt7996: validate radar, thermal and WED RRO event lengths\u000aba86572bd0d4 wifi: mt76: connac: validate the RAM firmware region table\u000a3ecd7e69dbc9 wifi: mt76: mt7996: validate the RAM firmware region table\u000a2871dc0e2b72 wifi: mt76: mt7925: validate CLC firmware regions and records\u000a35d9c038be88 wifi: mt76: connac: validate the ROM patch section table\u000a8356461aee79 wifi: mt76: mt7996: validate the ROM patch section table\u000ad4c9872bbd9c wifi: mt76: mt792x: use mt76_connac2_fw_check()\u000a8a8c857798f5 wifi: mt76: mt7996: add scan dwell time hw cap\u000a451f47376280 wifi: mt76: mt7996: take the link of an 802.3 frame from its station\u000ab4dd3d4f6d27 wifi: mt76: mt7996: do not update beacons while CSA is active\u000ad343a85da6fe wifi: mt76: mt7996: only remove a BMC STA_REC that was added\u000a46ed43b905d5 wifi: mt76: mt7996: pass the puncturing bitmap to the firmware\u000a49892ef42067 wifi: mt76: abort a scan when the chanctx changes\u000a1507666f034f wifi: mt76: set the channel again when the chanctx puncturing changes\u000aab907b18ddc9 wifi: mt76: mt7996: advertise preamble puncturing support\u000ad55666f37245 wifi: mt76: mt7996: keep scan and ROC links out of the MLD group\u000afde06f678c30 wifi: mt76: mt7996: factor the vif link teardown out of remove_interface\u000a25dbe41cf7c9 wifi: mt76: mt7996: destroy station links before the MLD group is freed\u000afecc93e7f1ed wifi: mt76: mt7996: send MLD link operations for an AP MLD only\u000a78084e732159 wifi: mt76: mt7996: set up a vif link again on another radio\u000a1e1ca91c2b70 wifi: mt76: mt7996: describe an MLD peer with the PEER_MLD command\u000a43008928840b wifi: mt76: mt7915: honour the valid flag in efuse block reads\u000aa60235641e8f wifi: mt76: mt7996: skip MLD address translation for encap offload frames\u000a1152058aee06 wifi: mt76: mt7921: honour the valid flag in efuse block reads\u000a2356292ae38f wifi: mt76: mt7915: upload the CSA beacon only once\u000a801f6a53f2f1 wifi: mt76: read the chanctx of a link once\u000a47665de41b5d wifi: mt76: restart the beacon monitor of a link that gets a chanctx again\u000a9c4ada3a37eb wifi: mt76: publish the beacon monitor interval after its timestamp\u000aba30cf5adb2b wifi: mt76: mt7996: keep rx header translation off while a monitor runs\u000a6611f0126ccd wifi: mt76: mt7996: apply monitor mode again after a full reset\u000a59b149d24e27 wifi: mt76: check the RX PN of an MLD peer once per peer\u000ad8d24d7cbf5d wifi: mt76: mt7996: send no MLD_SETUP when station links only go away\u000a46b67e5b7c49 wifi: mt76: mt7996: keep a unicast management frame on its MLO link\u000ad7e3bee841a5 wifi: mt76: mt7996: pass the default DSCP map to the firmware\u000a6428114db709 wifi: mt76: mt7996: write the TXD of stream classified 802.3 frames\u000a2b926d2d7776 wifi: mt76: mt7996: support SCS and MSCS\u000a7f2f67eebb54 wifi: mt76: mt7996: implement the flow offload flush op\u000aeb9e675d4cfc wifi: mt76: mt7996: implement the flow offload idle op\u000a238538d7d1cf wifi: mt76: answer the flow priority query\u000af349872e5149 firmware: update mt7990, mt7992 and mt7996 firmware to 202607\u000a0936617dc529 wifi: mt76: mt7996: write the TXD of 802.3 frames with an explicit UP\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 15:56:09 +0100",
        "id" : "d38d376b492ccb046024749fd765ce2d3cf84809",
        "msg" : "mt76: update to Git HEAD (2026-10-28)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/kernel/mt76/Makefile"
          },
          {
            "editType" : "delete",
            "file" : "package/kernel/mt76/patches/002-wifi-mt76-mt7996-implement-the-flow-offload-flush-op.patch"
          },
          {
            "editType" : "delete",
            "file" : "package/kernel/mt76/patches/003-wifi-mt76-mt7996-implement-the-flow-offload-idle-op.patch"
          },
          {
            "editType" : "delete",
            "file" : "package/kernel/mt76/patches/001-wifi-mt76-answer-the-flow-priority-query.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/utils/ucode/Makefile"
        ],
        "commitId" : "3e6064bbbf6f25f9e61d713a540538c28224c90f",
        "timestamp" : 1793199442000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "ucode: update to Git HEAD (2026-10-28)\u000a\u000ad41981561d7f types: keep tostring exceptions pending during stringification\u000a94562341453a vm: invoke standard library functions internally\u000aa357bc0fd001 compiler: add typeof operator and throw statement\u000a0de223bb2e49 vm, debug: show which function I_STCALL invokes\u000a6004c5aad287 lexer: add a raw text skipper to find the end of a bracketed expression\u000ae915e50fa79c compiler: add destructuring declarations and assignments\u000aa250f159019d rtnl: look up the port attributes by the kind of the master\u000a90b756787ff8 rtnl: decode the slave data of a port with the port attributes\u000af14b11ba2378 rtnl: send the port data of a link without a link kind\u000a961af31de74a tests: ffi: add calls with complex arguments and return values\u000a3f379cd7d5ed ubus: ignore a channel request after the channel was lost\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 15:57:22 +0100",
        "id" : "3e6064bbbf6f25f9e61d713a540538c28224c90f",
        "msg" : "ucode: update to Git HEAD (2026-10-28)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/utils/ucode/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/generic/pending-6.18/860-04-media-drxk-stop-accessing-a-disconnected-device.patch",
          "target/linux/generic/pending-6.18/860-01-media-az6007-fix-CAM-status-polling-after-disconnect.patch",
          "target/linux/generic/pending-6.18/860-05-media-dvb-core-dmxdev-wake-up-readers-on-release.patch",
          "target/linux/generic/pending-6.12/860-01-media-az6007-fix-CAM-status-polling-after-disconnect.patch",
          "target/linux/generic/pending-6.12/860-04-media-drxk-stop-accessing-a-disconnected-device.patch",
          "target/linux/generic/pending-6.18/860-06-media-dvb-core-wake-up-CA-users-on-release.patch",
          "target/linux/generic/pending-6.18/860-02-media-az6007-propagate-USB-errors-from-I2C-transfers.patch",
          "target/linux/generic/pending-6.12/860-06-media-dvb-core-wake-up-CA-users-on-release.patch",
          "target/linux/generic/pending-6.12/860-05-media-dvb-core-dmxdev-wake-up-readers-on-release.patch",
          "target/linux/generic/pending-6.12/860-02-media-az6007-propagate-USB-errors-from-I2C-transfers.patch",
          "target/linux/generic/pending-6.12/860-03-media-drxk-stop-retrying-after-disconnect.patch",
          "target/linux/generic/pending-6.18/860-03-media-drxk-stop-retrying-after-disconnect.patch"
        ],
        "commitId" : "785c7f9348a351a4d7cbff77f0ef7ee2e94a0c98",
        "timestamp" : 1793200939000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/daniel",
          "fullName" : "daniel"
        },
        "authorEmail" : "daniel@makrotopia.org",
        "comment" : "generic: media: add pending fixes for DVB tuner hot-unplug\u000a\u000aUnplugging an az6007 based DVB-C tuner, such as the TechniSat CableStar\u000aCombo HD CI, while tvheadend uses it floods the log and the USB\u000adisconnect does not complete. The CA thread spins on failed CAM status\u000apolls, drxk keeps retrying I2C transfers on the gone device, and dmxdev\u000aand dvb_ca wait for users that are never woken.\u000a\u000aAdd v2 of the series submitted upstream to pending-6.12 and\u000apending-6.18. With it the disconnect completes in about 150 ms and\u000atvheadend picks the adapter up again when it is plugged back in.\u000a\u000av1 was tested on a Turris 1.x (mpc85xx/p2020) with 6.18, v2 on a Turris\u000aOmnia (mvebu) with the 6.6 backport in Turris OS 9.1.2 and in QEMU with\u000avidtv on v7.3-rc2. The 6.12 copy, and patch 5 in the 6.18 copy, are\u000acompile tested only.\u000a\u000aLink: https://lore.kernel.org/all/20261004100741.71711-1-pepe.schlehofer@gmail.com/\u000aSigned-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>\u000a",
        "date" : "2026-10-28 15:22:19 +0000",
        "id" : "785c7f9348a351a4d7cbff77f0ef7ee2e94a0c98",
        "msg" : "generic: media: add pending fixes for DVB tuner hot-unplug",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/860-03-media-drxk-stop-retrying-after-disconnect.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/860-02-media-az6007-propagate-USB-errors-from-I2C-transfers.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.12/860-04-media-drxk-stop-accessing-a-disconnected-device.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.12/860-06-media-dvb-core-wake-up-CA-users-on-release.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/860-04-media-drxk-stop-accessing-a-disconnected-device.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.12/860-02-media-az6007-propagate-USB-errors-from-I2C-transfers.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.12/860-03-media-drxk-stop-retrying-after-disconnect.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/860-01-media-az6007-fix-CAM-status-polling-after-disconnect.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.12/860-05-media-dvb-core-dmxdev-wake-up-readers-on-release.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.12/860-01-media-az6007-fix-CAM-status-polling-after-disconnect.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/860-05-media-dvb-core-dmxdev-wake-up-readers-on-release.patch"
          },
          {
            "editType" : "add",
            "file" : "target/linux/generic/pending-6.18/860-06-media-dvb-core-wake-up-CA-users-on-release.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/files/hostapd.uc"
        ],
        "commitId" : "9f0bbefb03f2ae4a83cef1eee48f20fff45e6389",
        "timestamp" : 1793201385000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: fix the config channel switch on a multi-radio wiphy\u000a\u000amac80211 refuses to bring up an interface while any interface of the\u000awiphy is in a channel switch (ieee80211_check_concurrent_iface()), and\u000acfg80211 runs one scan per wiphy. On a multi-radio wiphy such as the\u000amt7996, the radios share both limits:\u000a\u000a- A config change that switches the channel of one radio and restarts\u000a  another radio failed the restart with EBUSY, and the AP stayed down\u000a  until the next config change.\u000a- While ACS ran on one radio, the 20/40 MHz coexistence scan of another\u000a  radio got EBUSY each second, and after 15 s hostapd starts that AP at\u000a  20 MHz.\u000a\u000aHold a pending interface setup back in steps of 100 ms while another AP\u000aof the same wiphy is in a channel switch, an ACS or a coexistence scan,\u000afor 30 s at most.\u000a\u000aAlso fix three cases of the config channel switch:\u000a\u000a- iface_freq_info() took the oper_chwidth values of hostapd as the\u000a  width argument of freq_info() and ignored op_class. The EHT320 config\u000a  of wifi-scripts got 320 MHz only because its he_oper_chwidth=3\u000a  (80+80 MHz) equals the freq_info() width of 320 MHz. Take the width\u000a  from op_class where the config has one, as hostapd does, and map the\u000a  oper_chwidth values otherwise. Restart for 80+80 MHz, which\u000a  freq_info() lacks.\u000a- A config change of the channel and of a BSS ran the channel switch and\u000a  then reloaded the BSS, which stops the BSS during the switch. Restart\u000a  instead.\u000a- radio_base() dropped [HT40+] and [HT40-], so a change between HT20 and\u000a  HT40 on the same channel was not applied. Keep [HT40] without the sign.\u000a\u000aSigned-off-by: John Crispin <john@phrozen.org>\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 16:29:45 +0100",
        "id" : "9f0bbefb03f2ae4a83cef1eee48f20fff45e6389",
        "msg" : "hostapd: fix the config channel switch on a multi-radio wiphy",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/files/hostapd.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/services/hostapd/src/src/ap/ucode.c",
          "package/network/services/hostapd/src/src/utils/ucode.c"
        ],
        "commitId" : "de796327bc6e2866436ff8351225aed9e3018155",
        "timestamp" : 1793201385000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "hostapd: ucode: fix the width and the result of switch_channel\u000a\u000aswitch_channel() takes the width from oper_chwidth and falls back to the\u000acurrent width of the interface. freq_info() did not return it, so a\u000aconfig change of the width alone made a channel switch with the old\u000awidth and the new centre frequency, which the kernel refuses, and the\u000aradio restarted instead. Return oper_chwidth from freq_info(). start()\u000areads the same field, so a start with a frequency from wpa_supplicant\u000anow also takes the width of the config, which matches the centre\u000afrequency that freq_info() computes for it.\u000a\u000aswitch_channel() also returned the result of the last BSS only.\u000amac80211 does not finalise a channel switch that only part of the BSSes\u000aof a radio take part in, so stop at the first BSS that fails and let the\u000acaller restart the radio.\u000a\u000aSigned-off-by: John Crispin <john@phrozen.org>\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 16:29:45 +0100",
        "id" : "de796327bc6e2866436ff8351225aed9e3018155",
        "msg" : "hostapd: ucode: fix the width and the result of switch_channel",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/ap/ucode.c"
          },
          {
            "editType" : "edit",
            "file" : "package/network/services/hostapd/src/src/utils/ucode.c"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc"
        ],
        "commitId" : "62d9f2d4f22a5d126403304923bb8ac509fec8fd",
        "timestamp" : 1793201385000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: iwinfo: wait for the results of the scan it triggered\u000a\u000ascan() took the next NL80211_CMD_NEW_SCAN_RESULTS that nl80211.waitfor()\u000areturned. The ucode nl80211 event socket stays subscribed for the life\u000aof the process, so in a long running caller the results of an earlier\u000ascan, or of a scan on another interface of the wiphy, were already\u000aqueued. scan() then returned within milliseconds, dumped the cache\u000abefore its own scan had finished, and left that scan running, so a scan\u000aon another radio of a multi-radio wiphy failed with EBUSY.\u000a\u000aDrop the queued scan events before the trigger, and wait for the event\u000aof the interface that was scanned.\u000a\u000aSigned-off-by: John Crispin <john@phrozen.org>\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 16:29:45 +0100",
        "id" : "62d9f2d4f22a5d126403304923bb8ac509fec8fd",
        "msg" : "wifi-scripts: iwinfo: wait for the results of the scan it triggered",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc"
        ],
        "commitId" : "19483fa9075686e7a627c777e09c0a24163c8323",
        "timestamp" : 1793201385000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "wifi-scripts: write the hostapd width values for 6 GHz 320 MHz\u000a\u000aFor EHT320, device_htmode_append() writes eht_oper_chwidth=7 and\u000ahe_oper_chwidth=3. In enum oper_chan_width of hostapd these are 8640 MHz\u000aand 80+80 MHz, not 320 MHz and the 160 MHz that the HE comment asks for.\u000ahostapd replaces both with the width of op_class 137 in\u000asetup_interface2(), so only readers of the config such as hostapd.uc\u000asee the wrong values.\u000a\u000aWrite 9 (320 MHz) and 2 (160 MHz), the values hostapd sets for op_class\u000a137 in hostapd_set_oper_chwidth(), like mac80211.sh already does for\u000aeht_oper_chwidth.\u000a\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 16:29:45 +0100",
        "id" : "19483fa9075686e7a627c777e09c0a24163c8323",
        "msg" : "wifi-scripts: write the hostapd width values for 6 GHz 320 MHz",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/wifi-scripts/files-ucode/usr/share/ucode/wifi/hostapd.uc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/qca-ppe-qos/Makefile"
        ],
        "commitId" : "bcbb85d6791e544c6b1ea79bcf6b0334084dbd43",
        "timestamp" : 1793209659000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qca-ppe-qos: remove PKG_VERSION\u000a\u000aPackage is fully local and has no sources, so no sense in setting the\u000aPKG_VERSION at all.\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 18:47:39 +0100",
        "id" : "bcbb85d6791e544c6b1ea79bcf6b0334084dbd43",
        "msg" : "qca-ppe-qos: remove PKG_VERSION",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/qca-ppe-qos/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/qca-ppe-qos/Makefile"
        ],
        "commitId" : "377206841ab054674ed46705697af867b96d2f1e",
        "timestamp" : 1793209659000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qca-ppe-qos: remove PKG_LICENSE_FILES\u000a\u000aPKG_LICENSE_FILES is empty, so remove it.\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 18:47:39 +0100",
        "id" : "377206841ab054674ed46705697af867b96d2f1e",
        "msg" : "qca-ppe-qos: remove PKG_LICENSE_FILES",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/qca-ppe-qos/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/qca-ppe-qos/Makefile"
        ],
        "commitId" : "c6f6358f8f130e623400523aef696f432cab1368",
        "timestamp" : 1793209659000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qca-ppe-qos: mark package nonshared\u000a\u000aThe package is limited to qualcommax, but has no nonshared flag.\u000a\u000aTarget buildbots select nonshared packages through\u000aCONFIG_ALL_NONSHARED, so mark it nonshared. Drop PKGARCH:=all to use\u000athe target package architecture.\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 18:47:39 +0100",
        "id" : "c6f6358f8f130e623400523aef696f432cab1368",
        "msg" : "qca-ppe-qos: mark package nonshared",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/qca-ppe-qos/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/network/config/qca-ppe-qos/Makefile"
        ],
        "commitId" : "fc5bd7cc0c2c0ab55e27d85a3edfca80ada12088",
        "timestamp" : 1793209921000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "qca-ppe-qos: make it depend on subtargets\u000a\u000aqca-ppe-qos is ipq807x and ipq60xx specific, so depend on those subtargets\u000ainstead of just qualcommax target.\u000a\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 18:52:01 +0100",
        "id" : "fc5bd7cc0c2c0ab55e27d85a3edfca80ada12088",
        "msg" : "qca-ppe-qos: make it depend on subtargets",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "package/network/config/qca-ppe-qos/Makefile"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "package/kernel/mac80211/patches/subsys/461-wifi-mac80211-follow-the-station-links-on-its-4-addr.patch",
          "package/kernel/mac80211/patches/subsys/412-wifi-mac80211-stop-only-the-MBSSID-set-of-the-stopped-AP-link.patch",
          "package/kernel/mac80211/patches/subsys/425-wifi-mac80211-clear-the-Critical-Update-flag-after-t.patch",
          "package/kernel/mac80211/patches/subsys/445-wifi-mac80211_hwsim-support-SCS-and-MSCS.patch",
          "package/kernel/mac80211/patches/subsys/481-wifi-mac80211-do-not-send-an-off-channel-frame-after.patch",
          "package/kernel/mac80211/patches/subsys/441-wifi-mac80211-learn-MSCS-flows-on-receive.patch",
          "package/kernel/mac80211/patches/subsys/440-wifi-mac80211-classify-transmitted-MSDUs-with-SCS.patch",
          "package/kernel/mac80211/patches/subsys/423-wifi-mac80211-count-the-DTIM-of-each-AP-link.patch",
          "package/kernel/mac80211/patches/subsys/439-wifi-mac80211-add-SCS-and-MSCS-rule-storage.patch",
          "package/kernel/mac80211/patches/subsys/360-mac80211-factor-out-part-of-ieee80211_calc_expected_.patch",
          "package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch",
          "package/kernel/mac80211/patches/subsys/014-wifi-mac80211-fix-swapped-fq_overlimit-fq_overmemory.patch",
          "package/kernel/mac80211/patches/subsys/015-wifi-mac80211-don-t-reset-the-TXQ-scheduling-round-n.patch",
          "package/kernel/mac80211/patches/subsys/443-wifi-mac80211-add-the-sta_set_scs-driver-op.patch"
        ],
        "commitId" : "83384b861ffbafe757c803e654e89b8e0ab2dbd0",
        "timestamp" : 1793216461000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
          "fullName" : "nbd"
        },
        "authorEmail" : "nbd@nbd.name",
        "comment" : "mac80211: backport TXQ round and aqm debugfs fixes\u000a\u000aieee80211_txq_schedule_start() resets the TXQ scheduling round number\u000awhen an AC is over its airtime limit. A txq that was served in an\u000aearlier round with the same number is then skipped in the next round.\u000aThe aqm debugfs file also prints fq_overlimit and fq_overmemory\u000aswapped. Both fixes are in wireless-next. Patches 320, 360 and 412 are\u000arefreshed for the new offsets.\u000a\u000aAssisted-by: Claude:claude-opus-5-5\u000aSigned-off-by: Julius Bairaktaris <julius@bairaktaris.de>\u000aSigned-off-by: Felix Fietkau <nbd@nbd.name>\u000a",
        "date" : "2026-10-28 20:41:01 +0100",
        "id" : "83384b861ffbafe757c803e654e89b8e0ab2dbd0",
        "msg" : "mac80211: backport TXQ round and aqm debugfs fixes",
        "paths" : [
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/014-wifi-mac80211-fix-swapped-fq_overlimit-fq_overmemory.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/481-wifi-mac80211-do-not-send-an-off-channel-frame-after.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/423-wifi-mac80211-count-the-DTIM-of-each-AP-link.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/439-wifi-mac80211-add-SCS-and-MSCS-rule-storage.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/412-wifi-mac80211-stop-only-the-MBSSID-set-of-the-stopped-AP-link.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/440-wifi-mac80211-classify-transmitted-MSDUs-with-SCS.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/443-wifi-mac80211-add-the-sta_set_scs-driver-op.patch"
          },
          {
            "editType" : "add",
            "file" : "package/kernel/mac80211/patches/subsys/015-wifi-mac80211-don-t-reset-the-TXQ-scheduling-round-n.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/360-mac80211-factor-out-part-of-ieee80211_calc_expected_.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/445-wifi-mac80211_hwsim-support-SCS-and-MSCS.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/425-wifi-mac80211-clear-the-Critical-Update-flag-after-t.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/461-wifi-mac80211-follow-the-station-links-on-its-4-addr.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/441-wifi-mac80211-learn-MSCS-flows-on-receive.patch"
          },
          {
            "editType" : "edit",
            "file" : "package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/octeon/patches-6.18/901-octeon-fix-pcie-port-reset-on-octeon3.patch"
        ],
        "commitId" : "65592178ec1105d9794c5807b1a42e4b5667adbf",
        "timestamp" : 1793220426000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "octeon: fix PCIe port reset on Octeon III\u000a\u000aarch/mips/pci/pcie-octeon.c was ported from the Cavium SDK cvmx-pcie.c,\u000abut the OCTEON_IS_OCTEON3() branches of the port reset sequence were\u000adropped: __cvmx_pcie_rc_initialize_gen2() unconditionally pulses\u000aCIU_SOFT_PRST/CIU_SOFT_PRST1 and checks MIO_RST_CTLX. Those are Octeon II\u000ablocks; on Octeon III (CN7xxx) they are unclaimed -- reads return garbage\u000aand writes are silently dropped. The kernel therefore never resets the\u000aPEM port, never drives PERST# to the endpoint, and never clears a\u000aSOFT_PRST that the RST block has latched.\u000a\u000aOn Octeon III the per-port reset logic lives in the RST block:\u000aRST_SOFT_PRSTX[n] requests a port reset and RST_CTLX[n] configures the\u000areset behavior and reports status. RST_CTLX[PRST_LINK] controls whether\u000aa link-down or hot-reset from the endpoint asserts SOFT_PRST, and\u000aRST_CTLX[RST_LINK] whether it warm-resets the whole chip. If PRST_LINK\u000ais left set (it survives a soft reset, so whatever the bootloader or a\u000aprevious warm boot left behind persists), an endpoint that resets its\u000aown PCIe link kills the PEM: SOFT_PRST latches, every PEM register then\u000areads zero, the link never retrains, and the port stays dead until the\u000anext reboot. Observed on a CN7030 board with two QCA9984 wifi chips,\u000awhose driver (ath10k qca99x0) issues SOC_GLOBAL_RESET -- \"put target,\u000aincluding PCIe, into reset\" -- during probe:\u000a\u000a  ath10k_pci 0000:01:00.0: failed to receive initialized event from\u000a  target: 00000000\u000a  ath10k_pci 0000:01:00.0: failed to wait for target after cold reset:\u000a  -145\u000a\u000aProgram RST_CTLX for root-complex operation (clear PRST_LINK/RST_LINK,\u000adrive PERST#, do not sample it, do not chain to a chip warm reset -- the\u000asame values the SDK programs in __setup_pem_reset()) and route the port\u000areset pulse, the host-mode check and the rst_done wait through the RST\u000ablock on Octeon III, mirroring the SDK. The Octeon II path is unchanged.\u000a\u000aSince the port reset now actually reaches the endpoint on Octeon III,\u000aalso add the SDK's post-reset device boot allowance: PCIe endpoints\u000athat load firmware from a serial flash (such as the QCA99xx) can take\u000aup to 900ms after PERST# before they answer configuration requests,\u000alonger than the hardware cfg_rtry window covers.\u000a\u000aWhile there, fix the PEMX_BIST_STATUS2 read in gen2 init: the register\u000adoes not exist on CN73XX/CN78XX, and on CN70XX it lives at block offset\u000a0x440, not 0x420 (0x420 is PEMX_ON on CN70XX). Reading the generic\u000aaddress on CN70XX reports pemon|pemoor as a bogus \"BIST2 FAILED (0x3)\"\u000aon every boot.\u000a\u000aSigned-off-by: Andrew LaMarche <andrewjlamarche@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26272\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 21:47:06 +0100",
        "id" : "65592178ec1105d9794c5807b1a42e4b5667adbf",
        "msg" : "octeon: fix PCIe port reset on Octeon III",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/octeon/patches-6.18/901-octeon-fix-pcie-port-reset-on-octeon3.patch"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "target/linux/octeon/patches-6.18/903-octeon-keep-pcie-bar-allocations-below-4gb.patch"
        ],
        "commitId" : "795f369b181cd128962fa8f60a03eaf0ac8afac6",
        "timestamp" : 1793220426000,
        "author" : {
          "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
          "fullName" : "robimarko"
        },
        "authorEmail" : "robimarko@gmail.com",
        "comment" : "octeon: keep PCIe BAR allocations below 4GB\u000a\u000aThe root-complex memory windows registered by octeon_pcie_setup()\u000aspan 64 bits of bus address (mem_resource covers 4GB-256MB up to\u000amem_base + 2^36), so the PCI core places 64-bit BARs above 4GB. On\u000aa CN7030 board with two QCA9984 wifi chips each BAR0 landed at bus\u000aaddress 0x100000000 -- low half 0x00000000, high half 0x1.\u000a\u000aThat placement is fatal for endpoints whose inbound memory window is\u000a32-bit internally even though their PCIe config space advertises a\u000a64-bit BAR. The QCA9984 routes inbound memory requests through a\u000a32-bit CORE_CTRL/BAR0-start register (see the \"target writes BAR to\u000aCORE_CTRL\" comment in the ath10k driver), and after the chip's\u000aSOC_GLOBAL_RESET -- which ath10k issues unconditionally during\u000aprobe -- its boot ROM re-establishes that window from the low half\u000aof the BAR only. The chip then stops decoding the address the host\u000amaps it at, while config space keeps working: setpci shows the full\u000aBAR and command register intact, but every MMIO read is a failed\u000acompletion (devmem of the hardwired chip ID at BAR0+0xec returns\u000a0xffffffff) and ath10k times out waiting for the firmware indicator\u000aforever:\u000a\u000a  ath10k_pci 0000:01:00.0: failed to receive initialized event from target: 00000000\u000a  ath10k_pci 0000:01:00.0: failed to wait for target after cold reset: -145\u000a\u000aThe vendor SDK kernel avoids this by keeping the bootloader's 32-bit\u000aBAR assignment (0xe0000000). Cap the controller memory windows at\u000athe end of 32-bit bus address space so every device BAR is placed\u000awhere 32-bit-only endpoints can decode it. The window start already\u000asits at 4GB-256MB -- the x86 \"big BAR\" convention this code\u000aemulates -- so each port keeps 256MB of device address space, ample\u000afor the wifi and switch cards these SoCs ship with, and matching\u000awhat x86 BIOSes do by default. Device DMA (inbound) is unaffected:\u000ait is translated by the BAR2 window, not by these resources.\u000a\u000aSigned-off-by: Andrew LaMarche <andrewjlamarche@gmail.com>\u000aLink: https://github.com/openwrt/openwrt/pull/26272\u000aSigned-off-by: Robert Marko <robimarko@gmail.com>\u000a",
        "date" : "2026-10-28 21:47:06 +0100",
        "id" : "795f369b181cd128962fa8f60a03eaf0ac8afac6",
        "msg" : "octeon: keep PCIe BAR allocations below 4GB",
        "paths" : [
          {
            "editType" : "add",
            "file" : "target/linux/octeon/patches-6.18/903-octeon-keep-pcie-bar-allocations-below-4gb.patch"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://taiha.net/jenkins/user/daniel",
      "fullName" : "daniel"
    },
    {
      "absoluteUrl" : "https://taiha.net/jenkins/user/ansuelsmth",
      "fullName" : "ansuelsmth"
    },
    {
      "absoluteUrl" : "https://taiha.net/jenkins/user/nbd",
      "fullName" : "nbd"
    },
    {
      "absoluteUrl" : "https://taiha.net/jenkins/user/markus.stockhausen",
      "fullName" : "markus.stockhausen"
    },
    {
      "absoluteUrl" : "https://taiha.net/jenkins/user/robimarko",
      "fullName" : "robimarko"
    }
  ]
}