get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2198406,
    "url": "http://patchwork.ozlabs.org/api/1.0/patches/2198406/?format=api",
    "project": {
        "id": 22,
        "url": "http://patchwork.ozlabs.org/api/1.0/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": "<20260219202514.5781-10-andrei.otcheretianski@intel.com>",
    "date": "2026-02-19T20:24:25",
    "name": "[09/58] NAN: Introduce NDP data structures",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "35bc48c872915a8c63d43ef7e03d885b315ba9b3",
    "submitter": {
        "id": 62065,
        "url": "http://patchwork.ozlabs.org/api/1.0/people/62065/?format=api",
        "name": "Andrei Otcheretianski",
        "email": "andrei.otcheretianski@intel.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/hostap/patch/20260219202514.5781-10-andrei.otcheretianski@intel.com/mbox/",
    "series": [
        {
            "id": 492721,
            "url": "http://patchwork.ozlabs.org/api/1.0/series/492721/?format=api",
            "date": "2026-02-19T20:24:21",
            "name": "NAN: Add NAN Data Path (NDP) support",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/492721/mbox/"
        }
    ],
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2198406/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=B3+zOjp+;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256\n header.s=Intel header.b=PzF7Nhcd;\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 4fH4f463Lqz1xxN\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 20 Feb 2026 07:26:20 +1100 (AEDT)",
            "from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1vtAb1-0000000Bw1V-1vvs;\n\tThu, 19 Feb 2026 20:25:59 +0000",
            "from mgamail.intel.com ([198.175.65.10])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1vtAaz-0000000BvpR-2zTH\n\tfor hostap@lists.infradead.org;\n\tThu, 19 Feb 2026 20:25:58 +0000",
            "from orviesa004.jf.intel.com ([10.64.159.144])\n  by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 19 Feb 2026 12:25:58 -0800",
            "from aotchere-mobl1.ger.corp.intel.com (HELO\n aotchere-mobl1.intel.com) ([10.245.246.171])\n  by orviesa004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 19 Feb 2026 12:25:55 -0800"
        ],
        "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=+8Moi2uUKri3oA2bQ1eykrojoZalgzSyAQeOEiba2l8=; b=B3+zOjp+KZw9GL\n\taL2xIbUNEWWidnvJjX1pL+CeyYYxC7ezisWNfX4SZ3D/kJdjoUwrqbVUG9MiI4KAb+0Hs00r42bO8\n\t+nn7ddBev6w+kELBF11Q4LVh5b/IxXvL0nsQ0dmqToCXsn5kx92PoH3mLp9TINJpSDBT1f5yAt7aC\n\tgX/+0xyNCnt+ggp3LtXdsbAvxyUZMzsy3YA8TIc47XnjV7NGnz5cXX6wDiin2L9V0yS1WpPUBBPIb\n\t2AYrIDkdW1SLtfmnpY3f2POSmsp5SUz831Heexek0Zv9iJQOWBbgn1DzHitSeUAvMRZsF329vmyCg\n\tE61j8ZzLGZCuRQAZL53w==;",
            "v=1; a=rsa-sha256; c=relaxed/simple;\n  d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n  t=1771532758; x=1803068758;\n  h=from:to:cc:subject:date:message-id:in-reply-to:\n   references:mime-version:content-transfer-encoding;\n  bh=C+7dIpG8wnyOLTdFYMnKCL4u4uiQsOTcxpG7KNd72rQ=;\n  b=PzF7NhcdS+ZpR7Gv1hPSpUqaJqZkuWEeNapS6FRzpBu7aj1FZej75ZSd\n   jwnRfTY+ARpH5+7BHgX/BKCxAviLuPwh7IOdurzkfdNH+aJUGe37ee1GR\n   /cGoTBQY7fIXDXfAWf4z9exWOmbzLJ+rTqUxreIsNtUI8KYs5BnU+im3K\n   TzSl+pVagcowXDqyqf+nySzLP6ZFe3Vh5zzUtED8Kr7YEdm6PkU38d5gx\n   ZU2iGgXMiGEqCgXZ2XZU4U7qQ0eRqJUiqqhUfqP9AW01fblaEXPE3hRrr\n   pfUn72P3PywYhX9vtYqRz69jtzMTIOifULBXVF7XGou9NaSkHf6fUj1/W\n   Q==;"
        ],
        "X-CSE-ConnectionGUID": [
            "4PepuSWGQv6n/WBnzIHaNQ==",
            "go6VGBlMRBm/b+DnSEH/KA=="
        ],
        "X-CSE-MsgGUID": [
            "kGxbEdXwSdSdTy9i48lTMw==",
            "Arv13gnGTiiS8HCMngsZ4g=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6800,10657,11706\"; a=\"90039949\"",
            "E=Sophos;i=\"6.21,300,1763452800\";\n   d=\"scan'208\";a=\"90039949\"",
            "E=Sophos;i=\"6.21,300,1763452800\";\n   d=\"scan'208\";a=\"219153733\""
        ],
        "X-ExtLoop1": "1",
        "From": "Andrei Otcheretianski <andrei.otcheretianski@intel.com>",
        "To": "hostap@lists.infradead.org,\n\tvamsin@qti.qualcomm.com,\n\tvganneva@qti.qualcomm.com,\n\tmaheshkkv@google.com",
        "Cc": "Ilan Peer <ilan.peer@intel.com>",
        "Subject": "[PATCH 09/58] NAN: Introduce NDP data structures",
        "Date": "Thu, 19 Feb 2026 22:24:25 +0200",
        "Message-ID": "<20260219202514.5781-10-andrei.otcheretianski@intel.com>",
        "X-Mailer": "git-send-email 2.52.0",
        "In-Reply-To": "<20260219202514.5781-1-andrei.otcheretianski@intel.com>",
        "References": "<20260219202514.5781-1-andrei.otcheretianski@intel.com>",
        "MIME-Version": "1.0",
        "X-CRM114-Version": "20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ",
        "X-CRM114-CacheID": "sfid-20260219_122557_802828_7FAEE173 ",
        "X-CRM114-Status": "GOOD (  20.26  )",
        "X-Spam-Score": "-4.4 (----)",
        "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: Ilan Peer <ilan.peer@intel.com> Add NAN NDP data\n structures\n    to describe the state and data of an NDP session between the local device\n    and a peer. All established NDP sessions between the local device and a\n peer\n    are managed per peer.\n Content analysis details:   (-4.4 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -2.3 RCVD_IN_DNSWL_MED      RBL: Sender listed at https://www.dnswl.org/,\n                             medium trust\n                             [198.175.65.10 listed in list.dnswl.org]\n  0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [198.175.65.10 listed in sa-accredit.habeas.com]\n  0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE: The\n                             query to Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                          [198.175.65.10 listed in\n sa-trusted.bondedsender.org]\n  0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [198.175.65.10 listed in\n bl.score.senderscore.com]\n -0.0 SPF_PASS               SPF: sender matches SPF record\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an 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_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_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 DKIMWL_WL_HIGH         DKIMwl.org - High trust sender",
        "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: Ilan Peer <ilan.peer@intel.com>\n\nAdd NAN NDP data structures to describe the state and data\nof an NDP session between the local device and a peer.\n\nAll established NDP sessions between the local device and\na peer are managed per peer.\n\nSigned-off-by: Ilan Peer <ilan.peer@intel.com>\n---\n src/nan/nan.c   | 34 +++++++++++++++++++-\n src/nan/nan.h   | 12 +++++++\n src/nan/nan_i.h | 83 +++++++++++++++++++++++++++++++++++++++++++++++++\n 3 files changed, 128 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/src/nan/nan.c b/src/nan/nan.c\nindex 9596193420..2e876b39e1 100644\n--- a/src/nan/nan.c\n+++ b/src/nan/nan.c\n@@ -46,6 +46,26 @@ static void nan_del_peer(struct nan_data *nan, struct nan_peer *peer)\n \twpa_printf(MSG_DEBUG, \"NAN: Removing peer: \" MACSTR,\n \t\t   MAC2STR(peer->nmi_addr));\n \n+\tif (!dl_list_empty(&peer->ndps)) {\n+\t\tstruct nan_ndp *ndp, *tndp;\n+\n+\t\t/* TODO: tear down active NDPs */\n+\t\twpa_printf(MSG_DEBUG,\n+\t\t\t   \"NAN: Peer delete while there are active ndps\");\n+\n+\t\tdl_list_for_each_safe(ndp, tndp, &peer->ndps,\n+\t\t\t\t      struct nan_ndp, list) {\n+\t\t\tdl_list_del(&ndp->list);\n+\t\t\tos_free(ndp);\n+\t\t}\n+\t}\n+\n+\tif (peer->ndp_setup.ndp) {\n+\t\twpa_printf(MSG_DEBUG,\n+\t\t\t   \"NAN: Peer delete while ndp setup is WIP\");\n+\t\tos_free(peer->ndp_setup.ndp);\n+\t}\n+\n \tdl_list_del(&peer->list);\n \tos_free(peer);\n }\n@@ -160,12 +180,23 @@ static struct nan_peer *nan_alloc_peer(struct nan_data *nan)\n \n \tdl_list_for_each(peer, &nan->peer_list, struct nan_peer, list) {\n \t\tcount++;\n+\n+\t\t/* Do not expire peers that we have NDPs with */\n+\t\tif (!dl_list_empty(&peer->ndps) || peer->ndp_setup.ndp)\n+\t\t\tcontinue;\n+\n \t\tif (!oldest ||\n \t\t    os_reltime_before(&peer->last_seen, &oldest->last_seen))\n \t\t\toldest = peer;\n \t}\n \n-\tif (count >= NAN_MAX_PEERS && oldest) {\n+\tif (count >= NAN_MAX_PEERS) {\n+\t\tif (!oldest) {\n+\t\t\twpa_printf(MSG_DEBUG,\n+\t\t\t\t   \"NAN: Cannot remove any of the peers\");\n+\t\t\treturn NULL;\n+\t\t}\n+\n \t\twpa_printf(MSG_DEBUG,\n \t\t\t   \"NAN: Remove peer=\" MACSTR \" to make room\",\n \t\t\t   MAC2STR(oldest->nmi_addr));\n@@ -178,6 +209,7 @@ static struct nan_peer *nan_alloc_peer(struct nan_data *nan)\n \t\treturn NULL;\n \n \tdl_list_add(&nan->peer_list, &peer->list);\n+\tdl_list_init(&peer->ndps);\n \treturn peer;\n }\n \ndiff --git a/src/nan/nan.h b/src/nan/nan.h\nindex 198441bed8..8c1692058b 100644\n--- a/src/nan/nan.h\n+++ b/src/nan/nan.h\n@@ -30,6 +30,18 @@ struct nan_device_capabilities {\n \tu8 capa;\n };\n \n+/**\n+ * struct nan_qos - NAN QoS requirements\n+ *\n+ * @min_slots: Minimal number of slots.\n+ * @max_latency: Maximum allowed NAN slots between every two non-contiguous\n+ *     NAN Data Link (NDL) Common Resource Blocks (CRB)\n+ */\n+struct nan_qos {\n+\tu8 min_slots;\n+\tu16 max_latency;\n+};\n+\n struct nan_config {\n \tvoid *cb_ctx;\n \ndiff --git a/src/nan/nan_i.h b/src/nan/nan_i.h\nindex fab724aaa2..6124c9b83c 100644\n--- a/src/nan/nan_i.h\n+++ b/src/nan/nan_i.h\n@@ -16,16 +16,99 @@\n \n struct nan_config;\n \n+/*\n+ * enum nan_ndp_state - State of NDP establishment\n+ * @NAN_NDP_STATE_NONE: No NDP establishment in progress.\n+ * @NAN_NDP_STATE_START: Starting NDP establishment.\n+ * @NAN_NDP_STATE_REQ_SENT: NDP request was sent.\n+ * @NAN_NDP_STATE_REQ_RECV: NDP response was received and processed.\n+ * @NAN_NDP_STATE_RES_SENT: NDP response was sent and NDP is not accepted yet.\n+ * @NAN_NDP_STATE_RES_RECV: NDP response was received and NDP was not accepted\n+ *     yet (security is negotiated or confirmation is required).\n+ * @NAN_NDP_STATE_CON_SENT: NDP confirm was sent and NDP was not done yet, as\n+ *     security is negotiated.\n+ * @NAN_NDP_STATE_CON_RECV: NDP confirm received and NDP was not done yet, as\n+ *     security is negotiated.\n+ * @NAN_NDP_STATE_DONE: NDP establishment is done (either success or reject).\n+ *     In this state the NAN module handles actions such as notification to the\n+ *     encapsulating logic etc. Once processing is done the NDP should either be\n+ *     cleared (rejected) or moved to the list of NDPs associated with the peer.\n+ */\n+enum nan_ndp_state {\n+\tNAN_NDP_STATE_NONE = 0,\n+\tNAN_NDP_STATE_START,\n+\tNAN_NDP_STATE_REQ_SENT,\n+\tNAN_NDP_STATE_REQ_RECV,\n+\tNAN_NDP_STATE_RES_SENT,\n+\tNAN_NDP_STATE_RES_RECV,\n+\tNAN_NDP_STATE_CON_SENT,\n+\tNAN_NDP_STATE_CON_RECV,\n+\tNAN_NDP_STATE_DONE,\n+};\n+\n+/*\n+ * struct nan_ndp - NDP information.\n+ *\n+ * Used to maintain the NDP as an object in a peer's list of NDPs.\n+ *\n+ * @list: Used for linking in the NDPs list.\n+ * @peer: Pointer to the peer data structure\n+ * @initiator: True iff the local device is the initiator\n+ * @ndp_id: NDP Id.\n+ * @init_ndi: Initiator NDI\n+ * @resp_ndi: Responder NDI. Might not always be set (as this depends on the\n+ *     state of NDP establishment and the status).\n+ * @qos: Qos requirements for this NDP\n+ */\n+struct nan_ndp {\n+\t/* for nan_peer ndps list */\n+\tstruct dl_list list;\n+\tstruct nan_peer *peer;\n+\tbool initiator;\n+\tu8 ndp_id;\n+\tu8 init_ndi[ETH_ALEN];\n+\tu8 resp_ndi[ETH_ALEN];\n+\n+\tstruct nan_qos qos;\n+};\n+\n+/*\n+ * struct nan_ndp_setup - Holds the state of the NDP setup\n+ *\n+ * @ndp: NDP information\n+ * @state: Current state\n+ * @status: Current status\n+ * @dialog_token: Setup dialog token\n+ * @publisher_inst_id: Publish function instance ID\n+ * @conf_req: True iff the NDP exchange requires confirm message.\n+ * @reason: Reject reason. Only valid when status is rejected.\n+ */\n+struct nan_ndp_setup {\n+\tstruct nan_ndp *ndp;\n+\tenum nan_ndp_state state;\n+\tenum nan_ndp_status status;\n+\tu8 dialog_token;\n+\tu8 publish_inst_id;\n+\tbool conf_req;\n+\tenum nan_reason reason;\n+};\n+\n /**\n  * struct nan_peer - Represents a known NAN peer\n  * @list: List node for linking peers.\n  * @nmi_addr: NAN MAC address of the peer.\n  * @last_seen: Timestamp of the last time this peer was seen.\n+ * @ndps: List of NDPs associated with this peer.\n+ * @ndp_setup: Used to hold an NDP object while NDP establishment is in\n+ *     progress.\n  */\n struct nan_peer {\n \tstruct dl_list list;\n \tu8 nmi_addr[ETH_ALEN];\n \tstruct os_reltime last_seen;\n+\tstruct dl_list ndps;\n+\n+\tstruct nan_ndp_setup ndp_setup;\n };\n \n /**\n",
    "prefixes": [
        "09/58"
    ]
}