get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.1/patches/2227725/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2227725,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2227725/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/hostap/patch/20260424091257.ae9d1b5cd389.I4fe7f4061db5923e2ece70e7cd9041b6d6031a98@changeid/",
    "project": {
        "id": 22,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/22/?format=api",
        "name": "HostAP Development",
        "link_name": "hostap",
        "list_id": "hostap.lists.infradead.org",
        "list_email": "hostap@lists.infradead.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20260424091257.ae9d1b5cd389.I4fe7f4061db5923e2ece70e7cd9041b6d6031a98@changeid>",
    "date": "2026-04-24T07:12:00",
    "name": "[v3,8/8] tests: uhr: add two tests for DBE",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "525f9985c244e0eb4761dba9835bff5042a4088c",
    "submitter": {
        "id": 265,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/265/?format=api",
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/hostap/patch/20260424091257.ae9d1b5cd389.I4fe7f4061db5923e2ece70e7cd9041b6d6031a98@changeid/mbox/",
    "series": [
        {
            "id": 501311,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/501311/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/hostap/list/?series=501311",
            "date": "2026-04-24T07:11:54",
            "name": null,
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/501311/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2227725/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2227725/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "\n <hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=RGHEhzAW;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n secure) header.d=sipsolutions.net header.i=@sipsolutions.net\n header.a=rsa-sha256 header.s=mail header.b=O81Bmaql;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g24275fx3z1xvV\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 17:13:51 +1000 (AEST)",
            "from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wGAiy-0000000CmRB-13Zp;\n\tFri, 24 Apr 2026 07:13:16 +0000",
            "from s3.sipsolutions.net ([2a01:4f8:242:246e::2]\n helo=sipsolutions.net)\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wGAiq-0000000CmNI-0pJo\n\tfor hostap@lists.infradead.org;\n\tFri, 24 Apr 2026 07:13:14 +0000",
            "by sipsolutions.net with esmtpsa\n (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256)\n\t(Exim 4.98.2)\n\t(envelope-from <johannes@sipsolutions.net>)\n\tid 1wGAin-00000008vqe-2AW0;\n\tFri, 24 Apr 2026 09:13:05 +0200"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:\n\tMessage-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=e90H9/NkXcdVBG/gdorWGtHzXGxiVyTS+c54CacOM48=; b=RGHEhzAWZkhrsD\n\tE5er9cXaXlxYTnhW8w28OAy1eRJxGLhtgDU1XZpdLrPEAWr6PZO30Cow7CqeeFk2mf88WjI20zbxU\n\tSsSBjDkdSYICRIuIEHUhhh+pSW91Ui34QvqgvxaXFA/1tqipOAETk9ak5fVRzV7JScGnn70Qh90ie\n\tMqeqNUTpCwd2SA7n07P3VhnPIyBxiC36XBXryBo8ovCoULVFUNejl8+CoxB53JrbChQU9M/J01eKQ\n\twvJtp9JOyTomios582fpVGrRcDE6KWCWdkfDgknb+sKW3e7mEVHQkNH7hNO14TSfWip04IB8LojSt\n\tlHrA1sOYcPb2vztCGlAg==;",
            "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=sipsolutions.net; s=mail; h=Content-Transfer-Encoding:MIME-Version:\n\tReferences:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Content-Type:Sender\n\t:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-To:\n\tResent-Cc:Resent-Message-ID; bh=bIYluRaXH139CGalLQW/k6Kb5WyrvOygQEpGj8ORF04=;\n\tt=1777014788; x=1778224388; b=O81Bmaql0VZPoPnZsiqg0jm8Mb8Z3QJRZ3qSNUmm4mJKcLv\n\t72gO8P74dZ7+6uI1NUeqfgpmca2Hp+Ovzq3XnBl/9SxUFTy/38Ngy3rxWq2EgVg7+jFAZ9E2YEXLA\n\to/Mq0ojugHnadPWBUdsPJScjbe9kwDgoETKmBGo1dXjOqta7RrtSMQKQZS+haS8wg/vFzW26PzWMT\n\tev2ytXryl8COSITG2QZ/abghEiHT92FbZlPsnl268JIXZJf7R2ZEoUse4xkw5hUVZQdwALB2VTNht\n\tji5TTROBfUCSZx9l1o4RLE2Vzar+YvPZA1bBsrlHnBZBcsa4G7K59Y8igIN2XnCQ==;"
        ],
        "From": "Johannes Berg <johannes@sipsolutions.net>",
        "To": "hostap@lists.infradead.org",
        "Cc": "Johannes Berg <johannes.berg@intel.com>",
        "Subject": "[PATCH v3 8/8] tests: uhr: add two tests for DBE",
        "Date": "Fri, 24 Apr 2026 09:12:00 +0200",
        "Message-ID": "\n <20260424091257.ae9d1b5cd389.I4fe7f4061db5923e2ece70e7cd9041b6d6031a98@changeid>",
        "X-Mailer": "git-send-email 2.53.0",
        "In-Reply-To": "<20260424071256.71834-10-johannes@sipsolutions.net>",
        "References": "<20260424071256.71834-10-johannes@sipsolutions.net>",
        "MIME-Version": "1.0",
        "X-CRM114-Version": "20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ",
        "X-CRM114-CacheID": "sfid-20260424_001308_272599_2EC71A0B ",
        "X-CRM114-Status": "GOOD (  11.53  )",
        "X-Spam-Score": "-2.1 (--)",
        "X-Spam-Report": "Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  From: Johannes Berg <johannes.berg@intel.com> Add two\n simple\n    tests for DBE with 80 MHz instead of the EHT 40 MHz,\n one where it gets used\n    by a UHR client and one where it doesn't get used by a non-UHR client.\n Content analysis details:   (-2.1 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -0.0 SPF_PASS               SPF: sender matches SPF record\n -0.0 SPF_HELO_PASS          SPF: HELO matches SPF record\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n author's\n                             domain\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -0.1 DKIM_VALID_EF          Message has a valid DKIM or DK signature from\n                             envelope-from domain\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]",
        "X-BeenThere": "hostap@lists.infradead.org",
        "X-Mailman-Version": "2.1.34",
        "Precedence": "list",
        "List-Id": "<hostap.lists.infradead.org>",
        "List-Unsubscribe": "<http://lists.infradead.org/mailman/options/hostap>,\n <mailto:hostap-request@lists.infradead.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.infradead.org/pipermail/hostap/>",
        "List-Post": "<mailto:hostap@lists.infradead.org>",
        "List-Help": "<mailto:hostap-request@lists.infradead.org?subject=help>",
        "List-Subscribe": "<http://lists.infradead.org/mailman/listinfo/hostap>,\n <mailto:hostap-request@lists.infradead.org?subject=subscribe>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Sender": "\"Hostap\" <hostap-bounces@lists.infradead.org>",
        "Errors-To": "hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"
    },
    "content": "From: Johannes Berg <johannes.berg@intel.com>\n\nAdd two simple tests for DBE with 80 MHz instead of the\nEHT 40 MHz, one where it gets used by a UHR client and\none where it doesn't get used by a non-UHR client.\n\nSigned-off-by: Johannes Berg <johannes.berg@intel.com>\n---\n tests/hwsim/test_uhr.py | 116 ++++++++++++++++++++++++++++++++++++++--\n 1 file changed, 113 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/tests/hwsim/test_uhr.py b/tests/hwsim/test_uhr.py\nindex 4917bcc6ff2d..2127a8b7924e 100644\n--- a/tests/hwsim/test_uhr.py\n+++ b/tests/hwsim/test_uhr.py\n@@ -15,7 +15,7 @@ from utils import *\n from hwsim import HWSimRadio\n import hwsim_utils\n from wpasupplicant import WpaSupplicant\n-from test_eht import eht_verify_status, traffic_test\n+from test_eht import eht_verify_status, traffic_test, eht_verify_wifi_version\n \n def uhr_verify_wifi_version(dev):\n     status = dev.get_status()\n@@ -26,7 +26,7 @@ def uhr_verify_wifi_version(dev):\n     if status['wifi_generation'] != \"8\":\n         raise Exception(\"Unexpected wifi_generation value: \" + status['wifi_generation'])\n \n-def uhr_verify_status(wpas, hapd, is_ht=False, is_vht=False):\n+def uhr_verify_status(wpas, hapd, is_ht=False, is_vht=False, sta_expect_uhr=True):\n     status = hapd.get_status()\n \n     logger.info(\"hostapd STATUS: \" + str(status))\n@@ -54,7 +54,10 @@ def uhr_verify_status(wpas, hapd, is_ht=False, is_vht=False):\n     if \"[EHT]\" not in sta['flags']:\n         raise Exception(\"Missing STA flag: EHT\")\n     if \"[UHR]\" not in sta['flags']:\n-        raise Exception(\"Missing STA flag: UHR\")\n+        if sta_expect_uhr:\n+            raise Exception(\"Missing STA flag: UHR\")\n+    elif not sta_expect_uhr:\n+        raise Exception(\"Erroneous STA flag: UHR\")\n \n def test_uhr_open(dev, apdev):\n     \"\"\"UHR AP with open mode configuration\"\"\"\n@@ -166,3 +169,110 @@ def run_uhr_mld_sae_single_link(dev, apdev, anti_clogging_token=False):\n def test_uhr_mld_sae_single_link(dev, apdev):\n     \"\"\"UHR MLD AP with MLD client SAE H2E connection using single link\"\"\"\n     run_uhr_mld_sae_single_link(dev, apdev)\n+\n+def uhr_5ghz_params(channel, chanwidth, ccfs1, ccfs2=0,\n+                    he_ccfs1=None, he_oper_chanwidth=None):\n+    if he_ccfs1 is None:\n+        he_ccfs1 = ccfs1\n+    if he_oper_chanwidth is None:\n+        he_oper_chanwidth = chanwidth\n+\n+    params = {\"country_code\": \"US\",\n+              \"hw_mode\": \"a\",\n+              \"channel\": str(channel),\n+              \"ieee80211n\": \"1\",\n+              \"ieee80211ac\": \"1\",\n+              \"ieee80211ax\": \"1\",\n+              \"ieee80211be\": \"1\",\n+              \"ieee80211bn\": \"1\",\n+              \"vht_oper_chwidth\": str(he_oper_chanwidth),\n+              \"vht_oper_centr_freq_seg0_idx\": str(he_ccfs1),\n+              \"vht_oper_centr_freq_seg1_idx\": str(ccfs2),\n+              \"he_oper_chwidth\": str(he_oper_chanwidth),\n+              \"he_oper_centr_freq_seg0_idx\": str(he_ccfs1),\n+              \"he_oper_centr_freq_seg1_idx\": str(ccfs2),\n+              \"eht_oper_centr_freq_seg0_idx\": str(ccfs1),\n+              \"eht_oper_chwidth\": str(chanwidth)}\n+\n+    if he_oper_chanwidth == 0:\n+        if channel < he_ccfs1:\n+                params[\"ht_capab\"] = \"[HT40+]\"\n+        elif channel > he_ccfs1:\n+                params[\"ht_capab\"] = \"[HT40-]\"\n+    else:\n+        params[\"ht_capab\"] = \"[HT40+]\"\n+        if he_oper_chanwidth == 2:\n+            params[\"vht_capab\"] = \"[VHT160]\"\n+        elif he_oper_chanwidth == 3:\n+            params[\"vht_capab\"] = \"[VHT160-80PLUS80]\"\n+\n+    return params\n+\n+def _test_uhr_5ghz(dev, apdev, channel, chanwidth, ccfs1, ccfs2=0,\n+                   callback=None, **kw):\n+    hapd = None\n+    try:\n+        params = uhr_5ghz_params(channel, chanwidth, ccfs1, ccfs2)\n+        params['ssid'] = 'uhr'\n+        params.update(kw)\n+\n+        freq = 5000 + channel * 5\n+\n+        hapd = hostapd.add_ap(apdev[0], params)\n+        dev[0].connect(\"uhr\", key_mgmt=\"NONE\", scan_freq=str(freq))\n+        hapd.wait_sta()\n+\n+        uhr_verify_status(dev[0], hapd, is_ht=True, is_vht=True)\n+        uhr_verify_wifi_version(dev[0])\n+        hwsim_utils.test_connectivity(dev[0], hapd)\n+        if callback: callback()\n+    finally:\n+        dev[0].request(\"DISCONNECT\")\n+        dev[0].wait_disconnected()\n+        if hapd:\n+            hapd.wait_sta_disconnect()\n+        set_world_reg(apdev[0], None, dev[0])\n+\n+def test_uhr_5ghz_dbe_80(dev, apdev):\n+    \"\"\"UHR with DBE enabled\"\"\"\n+    def check_80mhz():\n+        # give the DBE enablement a bit of time\n+        time.sleep(1)\n+        p = subprocess.run(['iw', 'dev', dev[0].ifname, 'info'],\n+                           capture_output=True, check=True)\n+        assert b\"channel 36 (5180 MHz), width: 80 MHz,\" in p.stdout, \\\n+            \"client not connected with 80 MHz\"\n+    _test_uhr_5ghz(dev, apdev, 36, 0, 38, 0,\n+                   callback=check_80mhz,\n+                   dbe_bandwidth=\"2\")\n+\n+def test_uhr_5ghz_dbe_80_not_used(dev, apdev):\n+    \"\"\"UHR with DBE enabled but client can't use it\"\"\"\n+    hapd = None\n+    try:\n+        params = uhr_5ghz_params(36, 0, 38)\n+        params['ssid'] = 'uhr'\n+        params['dbe_bandwidth'] = '2'\n+\n+        freq = 5000 + 36 * 5\n+\n+        hapd = hostapd.add_ap(apdev[0], params)\n+        dev[0].connect(\"uhr\", key_mgmt=\"NONE\", scan_freq=str(freq),\n+                       disable_uhr='1')\n+        hapd.wait_sta()\n+\n+        uhr_verify_status(dev[0], hapd, is_ht=True, is_vht=True,\n+                          sta_expect_uhr=False)\n+        eht_verify_wifi_version(dev[0])\n+        hwsim_utils.test_connectivity(dev[0], hapd)\n+        time.sleep(1)\n+        p = subprocess.run(['iw', 'dev', dev[0].ifname, 'info'],\n+                           capture_output=True, check=True)\n+        assert b\"channel 36 (5180 MHz), width: 40 MHz,\" in p.stdout, \\\n+            \"client not connected with 40 MHz\"\n+    finally:\n+        dev[0].request(\"DISCONNECT\")\n+        dev[0].wait_disconnected()\n+        if hapd:\n+            hapd.wait_sta_disconnect()\n+        set_world_reg(apdev[0], None, dev[0])\n",
    "prefixes": [
        "v3",
        "8/8"
    ]
}