get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2198420,
    "url": "http://patchwork.ozlabs.org/api/1.0/patches/2198420/?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-24-andrei.otcheretianski@intel.com>",
    "date": "2026-02-19T20:24:39",
    "name": "[23/58] NAN: Add support for converting NAN schedule entries to availability",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "d387c448b0e85357fd1381b0e0b532db1a6428a2",
    "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-24-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/2198420/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=nNVlHLh9;\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=WENJPe2y;\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 4fH4gQ2pJ5z1xxN\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 20 Feb 2026 07:27:30 +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 1vtAbz-0000000BxPS-0ocq;\n\tThu, 19 Feb 2026 20:26: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 1vtAbf-0000000Bwog-0G8c\n\tfor hostap@lists.infradead.org;\n\tThu, 19 Feb 2026 20:26:50 +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:26:38 -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:26:34 -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=16gfGXx9r+lGe3o7H3QQamhpjwNOtF3GNJhDMi84MTY=; b=nNVlHLh9ZmIeGm\n\tFsQN4R5isnRYDyILdW3+HTxsLjFDIw8Z3sBcC5GS6F49WrTDH1/wu7SYIOFbBRHVqlzNjHSi/t8B8\n\tCPIbZlDdTgf1mxRUjZtbe78Yo2ByFemYsp5juwajJRxbJMP9Oy7Loadf8IdDMk16fEtXlGMSOIKyO\n\t0l2mNxudgXm51ne5aSQ0SASOBFLbyKZFoqrUWMtogULPqTqlqNMizWGyytZi6wHme2/VRP+cMkFDp\n\tRaReyCgzdTZHSwL2hIiLk4WWy9up8HqXs5extqYsmkMesE1Z1qr1XP+7u+A745Jv9bKmN55IPAkAy\n\tW9FuQLTrSM7JSNDqcaYQ==;",
            "v=1; a=rsa-sha256; c=relaxed/simple;\n  d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n  t=1771532799; x=1803068799;\n  h=from:to:cc:subject:date:message-id:in-reply-to:\n   references:mime-version:content-transfer-encoding;\n  bh=kl8PS8+02w1bIN84C8fFgpJ+OYCNkBg3D8RKzgCn+rU=;\n  b=WENJPe2y2o6RQ6CcWUSovVsXOapxmYSVVqF2GiNQdyYZKg+4/wC0ibjF\n   Fc0gpHY2CLAkozL5Jx3UecyEDmyrtSbZVppRao7f4mFdXZaqmQN57U1oa\n   AEyXPOpomwVFt5MIZjxSHHjr+gjzuoAQ7Hf4zQG6NxDAlPPjhv8/qt9IO\n   5FLQIzP4l15BlNbc3LAXhvuWbjqX8zgz2olQW+EnxYrnyqTUr58ocstOw\n   lId3aD8FFI66rYMKHw3RrqG0kMdGFUF+3sbc037uY7NrwfPDm/XdcfAAk\n   9brF5LRlKh4vbDkdx6UyuCrLQRW60gal8TLE4qeVQ441jyv8FiQdb+iqZ\n   w==;"
        ],
        "X-CSE-ConnectionGUID": [
            "wr3I/ou3TNmQVgmOSVK+Rw==",
            "JEVbmWXtTvmz7BJIJB1BVw=="
        ],
        "X-CSE-MsgGUID": [
            "wGHUgePpRJuIQFEJebMGfw==",
            "PLcrCaBISXiJTYQSDjuQjg=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6800,10657,11706\"; a=\"90040019\"",
            "E=Sophos;i=\"6.21,300,1763452800\";\n   d=\"scan'208\";a=\"90040019\"",
            "E=Sophos;i=\"6.21,300,1763452800\";\n   d=\"scan'208\";a=\"219153852\""
        ],
        "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 23/58] NAN: Add support for converting NAN schedule entries to\n availability",
        "Date": "Thu, 19 Feb 2026 22:24:39 +0200",
        "Message-ID": "<20260219202514.5781-24-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_122639_257586_7D5190C1 ",
        "X-CRM114-Status": "GOOD (  15.50  )",
        "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 a utility\n function\n    to convert NAN schedule entries (as defined by the Wi-Fi Aware\n specification\n    version 4.0 in Table 104) to NAN availability entries (as defined\n internally).    \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 SPF_PASS               SPF: sender matches SPF record\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 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 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 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 a utility function to convert NAN schedule entries (as defined\nby the Wi-Fi Aware specification version 4.0 in Table 104) to NAN\navailability entries (as defined internally).\n\nSigned-off-by: Ilan Peer <ilan.peer@intel.com>\n---\n src/nan/nan.c      |  15 +-----\n src/nan/nan_i.h    |   6 +++\n src/nan/nan_util.c | 114 +++++++++++++++++++++++++++++++++++++++++++++\n 3 files changed, 121 insertions(+), 14 deletions(-)",
    "diff": "diff --git a/src/nan/nan.c b/src/nan/nan.c\nindex 92d0c9deba..455ba7f64f 100644\n--- a/src/nan/nan.c\n+++ b/src/nan/nan.c\n@@ -38,22 +38,9 @@ struct nan_data * nan_init(const struct nan_config *cfg)\n }\n \n \n-static void nan_del_avail_entry(struct nan_avail_entry *entry)\n-{\n-\tos_free(entry->band_chan);\n-\tos_free(entry);\n-}\n-\n-\n static void nan_peer_flush_avail(struct nan_peer_info *info)\n {\n-\tstruct nan_avail_entry *cur, *next;\n-\n-\tdl_list_for_each_safe(cur, next, &info->avail_entries,\n-\t\t\t      struct nan_avail_entry, list) {\n-\t\tdl_list_del(&cur->list);\n-\t\tnan_del_avail_entry(cur);\n-\t}\n+\tnan_flush_avail_entries(&info->avail_entries);\n }\n \n \ndiff --git a/src/nan/nan_i.h b/src/nan/nan_i.h\nindex 16292a01de..1d4ddae95d 100644\n--- a/src/nan/nan_i.h\n+++ b/src/nan/nan_i.h\n@@ -445,4 +445,10 @@ int nan_add_avail_attrs(struct nan_data *nan, u8 sequence_id,\n \t\t\tu8 type_for_conditional,\n \t\t\tsize_t n_chans, struct nan_chan_schedule *chans,\n \t\t\tstruct wpabuf *buf);\n+void nan_del_avail_entry(struct nan_avail_entry *entry);\n+void nan_flush_avail_entries(struct dl_list *avail_entries);\n+int nan_sched_entries_to_avail_entries(struct nan_data *nan,\n+\t\t\t\t       struct dl_list *avail_entries,\n+\t\t\t\t       u8 *sched_entries,\n+\t\t\t\t       u16 sched_entries_len);\n #endif /* NAN_I_H */\ndiff --git a/src/nan/nan_util.c b/src/nan/nan_util.c\nindex d0e4407fc3..45f932ddb5 100644\n--- a/src/nan/nan_util.c\n+++ b/src/nan/nan_util.c\n@@ -828,3 +828,117 @@ int nan_add_avail_attrs(struct nan_data *nan, u8 sequence_id,\n \n \treturn 0;\n }\n+\n+\n+/**\n+ * nan_del_avail_entry - Delete an availability entry\n+ *\n+ * @entry: The availability entry to delete\n+ */\n+void nan_del_avail_entry(struct nan_avail_entry *entry)\n+{\n+\tos_free(entry->band_chan);\n+\tos_free(entry);\n+}\n+\n+\n+/**\n+ * nan_flush_avail_entries - Flush a list of availability entries\n+ *\n+ * @avail_entries: List of availability entries\n+ */\n+void nan_flush_avail_entries(struct dl_list *avail_entries)\n+{\n+\tstruct nan_avail_entry *cur, *next;\n+\n+\tdl_list_for_each_safe(cur, next, avail_entries,\n+\t\t\t      struct nan_avail_entry, list) {\n+\t\tdl_list_del(&cur->list);\n+\t\tnan_del_avail_entry(cur);\n+\t}\n+}\n+\n+\n+/**\n+ * nan_sched_entries_to_avail_entries - Convert NAN schedule entries to NAN\n+ * availability entries\n+ *\n+ * @nan: NAN module context from nan_init()\n+ * @avail_entries: On successful return would hold a valid list of availability\n+ *     entries\n+ * @sched_entries: Buffer holding the schedule entries, each of type\n+ *     &struct nan_sched_entry\n+ * @sched_entries_len: Length of the sched_entries buffer\n+ */\n+int nan_sched_entries_to_avail_entries(struct nan_data *nan,\n+\t\t\t\t       struct dl_list *avail_entries,\n+\t\t\t\t       u8 *sched_entries,\n+\t\t\t\t       u16 sched_entries_len)\n+{\n+\tdl_list_init(avail_entries);\n+\n+\tif (!sched_entries || !sched_entries_len)\n+\t\treturn 0;\n+\n+\tif (sched_entries_len < sizeof(struct nan_sched_entry)) {\n+\t\twpa_printf(MSG_DEBUG,\n+\t\t\t   \"NAN: Schedule entry too short=%u\",\n+\t\t\t   sched_entries_len);\n+\t\treturn -1;\n+\t}\n+\n+\twhile (sched_entries_len > 0) {\n+\t\tstruct nan_sched_entry *sched_entry =\n+\t\t\t(struct nan_sched_entry *)sched_entries;\n+\t\tstruct nan_avail_entry *avail_entry;\n+\t\tu16 ctrl;\n+\n+\t\tif (sched_entries_len <\n+\t\t    sizeof(struct nan_sched_entry) + sched_entry->len) {\n+\t\t\twpa_printf(MSG_DEBUG,\n+\t\t\t\t   \"NAN: Invalid schedule entry len=%u\",\n+\t\t\t\t   sched_entry->len);\n+\t\t\tgoto fail;\n+\t\t}\n+\n+\t\tif (sched_entry->len > NAN_TIME_BITMAP_MAX_LEN)\n+\t\t\tgoto fail;\n+\n+\t\tavail_entry = os_zalloc(sizeof(struct nan_avail_entry));\n+\t\tif (!avail_entry)\n+\t\t\tgoto fail;\n+\n+\t\tavail_entry->map_id = sched_entry->map_id;\n+\t\tctrl = le_to_host16(sched_entry->control);\n+\n+\t\tavail_entry->tbm.duration =\n+\t\t\tBITS(ctrl,\n+\t\t\t     NAN_TIME_BM_CTRL_BIT_DURATION_MASK,\n+\t\t\t     NAN_TIME_BM_CTRL_BIT_DURATION_POS);\n+\t\tavail_entry->tbm.period =\n+\t\t\tBITS(ctrl,\n+\t\t\t     NAN_TIME_BM_CTRL_PERIOD_MASK,\n+\t\t\t     NAN_TIME_BM_CTRL_PERIOD_POS);\n+\t\tavail_entry->tbm.offset =\n+\t\t\tBITS(ctrl,\n+\t\t\t     NAN_TIME_BM_CTRL_START_OFFSET_MASK,\n+\t\t\t     NAN_TIME_BM_CTRL_START_OFFSET_POS);\n+\n+\t\tavail_entry->tbm.len = sched_entry->len;\n+\t\tos_memcpy(avail_entry->tbm.bitmap, sched_entry->bm,\n+\t\t\t  sched_entry->len);\n+\n+\t\tdl_list_init(&avail_entry->list);\n+\t\tdl_list_add(avail_entries, &avail_entry->list);\n+\n+\t\tsched_entries_len -= sizeof(struct nan_sched_entry) +\n+\t\t\tsched_entry->len;\n+\t\tsched_entries += sizeof(struct nan_sched_entry) +\n+\t\t\tsched_entry->len;\n+\t}\n+\n+\treturn 0;\n+fail:\n+\tnan_flush_avail_entries(avail_entries);\n+\treturn -1;\n+}\n",
    "prefixes": [
        "23/58"
    ]
}