get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2234501,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/2234501/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/hostap/patch/20260507192335.14f03dbf9817.I4fe7f4061db5923e2ece70e7cd9041b6d6031a98@changeid/",
    "project": {
        "id": 22,
        "url": "http://patchwork.ozlabs.org/api/1.2/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": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260507192335.14f03dbf9817.I4fe7f4061db5923e2ece70e7cd9041b6d6031a98@changeid>",
    "list_archive_url": null,
    "date": "2026-05-07T17:21:37",
    "name": "[v3,10/12] tests: Add two tests for UHR DBE",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "60fc6219826c929af270347b667ab2aee17b15cc",
    "submitter": {
        "id": 265,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/265/?format=api",
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/hostap/patch/20260507192335.14f03dbf9817.I4fe7f4061db5923e2ece70e7cd9041b6d6031a98@changeid/mbox/",
    "series": [
        {
            "id": 503235,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/503235/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/hostap/list/?series=503235",
            "date": "2026-05-07T17:21:28",
            "name": "some UHR support",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/503235/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2234501/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2234501/checks/",
    "tags": {},
    "related": [],
    "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=uM51t5MN;\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=ebZOqO7N;\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 4gBK052W1Gz1yCg\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 08 May 2026 03:25:41 +1000 (AEST)",
            "from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux))\n\tid 1wL2S3-00000004SZ0-182O;\n\tThu, 07 May 2026 17:23:55 +0000",
            "from s3.sipsolutions.net ([2a01:4f8:242:246e::2]\n helo=sipsolutions.net)\n\tby bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux))\n\tid 1wL2S1-00000004SUs-03bG\n\tfor hostap@lists.infradead.org;\n\tThu, 07 May 2026 17:23:54 +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 1wL2Rx-000000045pG-0xM3;\n\tThu, 07 May 2026 19:23:49 +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=KAzAa1GmAH810CbGrYyJoozXKF9GcW4MUWNA8z5sq2g=; b=uM51t5MNRIuFhd\n\tzNMbDEvh5AAXehgBCDaxYdEGuatEVUh2V9kBQvch8gmuTptMRENi4NCTdA+jDSJrT2lv8uzH0Mcxu\n\txqPTZtsKJ3NoBnb4qrpOwiCYzIhAZG5iEWBSwvzDE+fUZQzOlScaRz1Plp4cGQuQ66w+Qhlz79vWQ\n\tDrbtnP6aEKeGBkdd//z2CzTTb6MKgakDxrQKoJt0GGCWZXDyPnRy54PJUnjX9mEVVBA5sA1AwqL0a\n\tnKRdzlNZOurP0YeVz6my68RYgQU+DPvOjsFeBUK66f5nu6gi4MwfA+HbV1Gy3KybG8vCarFBudqM4\n\t3cIghCV3c5qIn8hMt+rg==;",
            "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=OApbHcVdVs6tBOZaxIM0jRn6IkLowGSLR0W6k43mi8I=;\n\tt=1778174632; x=1779384232; b=ebZOqO7NdKuZmnSWqb4HShR9Y2/73xmUfwKGbywss6iU6vu\n\tAgH14iYg3fygJUJPz+5IS5phmt+zBjpC1bLuruCaRwCGGUPYpvSOmAL9WahdeMQf7hXChsWiqvdwK\n\tve2jzwhJaXzTHH/t0JlaYuFyRXdNsFou4XF+mJbIFJN5GMqqyy4IsoMAiDww7+AKlJCk/4gQc8Rgu\n\t9zNaY2Ryu8XgmX1qZQWuHtnyjo+gcJZBa55rYjywz8dXpjCH5SDCXQia5+K5Kq4W8n52VCuxBCDCk\n\tzNSHSXF3Nrr8FOL1jRs4e2tgg33wCL1n34ozJvJL1KAY/P27MU7T0mK3Z3kSOJIw==;"
        ],
        "From": "Johannes Berg <johannes@sipsolutions.net>",
        "To": "hostap@lists.infradead.org",
        "Cc": "Johannes Berg <johannes.berg@intel.com>",
        "Subject": "[PATCH v3 10/12] tests: Add two tests for UHR DBE",
        "Date": "Thu,  7 May 2026 19:21:37 +0200",
        "Message-ID": "\n <20260507192335.14f03dbf9817.I4fe7f4061db5923e2ece70e7cd9041b6d6031a98@changeid>",
        "X-Mailer": "git-send-email 2.53.0",
        "In-Reply-To": "<20260507172335.546456-14-johannes@sipsolutions.net>",
        "References": "<20260507172335.546456-14-johannes@sipsolutions.net>",
        "MIME-Version": "1.0",
        "X-CRM114-Version": "20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 ",
        "X-CRM114-CacheID": "sfid-20260507_102353_077304_E8078E8D ",
        "X-CRM114-Status": "GOOD (  12.34  )",
        "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_NONE               SPF: sender does not publish an SPF Record\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n -0.1 DKIM_VALID_EF          Message has a valid DKIM or DK signature from\n                             envelope-from domain\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n author's\n                             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]\n -0.0 DMARC_PASS             DMARC pass policy",
        "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 | 115 ++++++++++++++++++++++++++++++++++++++--\n 1 file changed, 112 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/tests/hwsim/test_uhr.py b/tests/hwsim/test_uhr.py\nindex aaffd5f51f83..67f6e06dbf79 100644\n--- a/tests/hwsim/test_uhr.py\n+++ b/tests/hwsim/test_uhr.py\n@@ -8,13 +8,14 @@\n import binascii\n import tempfile\n import time\n+from functools import partial\n \n import hostapd\n 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 from test_eht import eht_mld_ap_wpa2_params, eht_mld_enable_ap\n \n def uhr_verify_wifi_version(dev):\n@@ -26,7 +27,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 +55,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_simple(dev, apdev):\n     \"\"\"UHR AP with simple SAE configuration\"\"\"\n@@ -173,3 +177,108 @@ 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(ssid, passphrase, 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 = uhr_mld_ap_wpa2_params(ssid, passphrase, key_mgmt=\"SAE\",\n+                                    mfp=\"2\", pwe='2')\n+    params.update({\n+        \"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+\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(channel, chanwidth, ccfs1, ccfs2=0,\n+                   callback=None, uhr_connection=True, **kw):\n+    with HWSimRadio(use_mlo=True) as (hapd_radio, hapd_iface), \\\n+         HWSimRadio(use_mlo=True) as (wpas_radio, wpas_iface):\n+        wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')\n+        wpas.interface_add(wpas_iface)\n+        check_sae_capab(wpas)\n+\n+        passphrase = 'quertyiop'\n+        params = uhr_5ghz_params('uhr', passphrase, channel,\n+                                 chanwidth, ccfs1, ccfs2)\n+        params.update(kw)\n+\n+        freq = 5000 + channel * 5\n+\n+        hapd = uhr_mld_enable_ap(hapd_iface, 0, params)\n+        wpas.set('sae_pwe', '1')\n+        wpas.connect('uhr', sae_password=passphrase, scan_freq=str(freq),\n+                     key_mgmt=\"SAE\", ieee80211w=\"2\",\n+                     disable_uhr='1' if not uhr_connection else '0')\n+        hapd.wait_sta()\n+\n+        uhr_verify_status(wpas, hapd, is_ht=True, is_vht=True,\n+                          sta_expect_uhr=uhr_connection)\n+        if uhr_connection:\n+            uhr_verify_wifi_version(wpas)\n+        else:\n+            eht_verify_wifi_version(wpas)\n+        hwsim_utils.test_connectivity(wpas, hapd)\n+        if callback: callback(wpas, hapd)\n+\n+def _check_width(link, width, wpas, hapd):\n+    sig = wpas.request(\"MLO_SIGNAL_POLL\").splitlines()\n+    logger.debug(sig)\n+    link_data = {}\n+    cur_link = None\n+    for line in sig:\n+        if line.startswith('LINK_ID='):\n+            cur_link = int(line[8:])\n+        if not cur_link in link_data:\n+            link_data[cur_link] = []\n+        link_data[cur_link].append(line)\n+    assert link in link_data, f'link {link} not found'\n+    assert f'WIDTH={width} MHz' in link_data[link], \\\n+        f'client not connected with {width} MHz'\n+\n+def test_uhr_5ghz_dbe_80(dev, apdev):\n+    \"\"\"UHR with DBE enabled\"\"\"\n+    try:\n+        _test_uhr_5ghz(36, 0, 38, dbe_bandwidth=\"2\",\n+                       callback=partial(_check_width, 0, 80))\n+    finally:\n+        set_world_reg(apdev[0], None, dev[0])\n+\n+def test_uhr_5ghz_dbe_80_not_used(dev, apdev):\n+    \"\"\"UHR with DBE enabled but client can't use it\"\"\"\n+    try:\n+        _test_uhr_5ghz(36, 0, 38, dbe_bandwidth=\"2\",\n+                       callback=partial(_check_width, 0, 40),\n+                       uhr_connection=False)\n+    finally:\n+        set_world_reg(apdev[0], None, dev[0])\n",
    "prefixes": [
        "v3",
        "10/12"
    ]
}