get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 1555102,
    "url": "http://patchwork.ozlabs.org/api/patches/1555102/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/openvswitch/patch/20211115025312.786953-7-cmi@nvidia.com/",
    "project": {
        "id": 47,
        "url": "http://patchwork.ozlabs.org/api/projects/47/?format=api",
        "name": "Open vSwitch",
        "link_name": "openvswitch",
        "list_id": "ovs-dev.openvswitch.org",
        "list_email": "ovs-dev@openvswitch.org",
        "web_url": "http://openvswitch.org/",
        "scm_url": "git@github.com:openvswitch/ovs.git",
        "webscm_url": "https://github.com/openvswitch/ovs",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20211115025312.786953-7-cmi@nvidia.com>",
    "list_archive_url": null,
    "date": "2021-11-15T02:53:10",
    "name": "[ovs-dev,v18,6/8] ofproto: Introduce API to process sFlow offload packet",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "70e3c73dd712dcca1eee66a60c6ff5730e7d06aa",
    "submitter": {
        "id": 80086,
        "url": "http://patchwork.ozlabs.org/api/people/80086/?format=api",
        "name": "Chris Mi",
        "email": "cmi@nvidia.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/openvswitch/patch/20211115025312.786953-7-cmi@nvidia.com/mbox/",
    "series": [
        {
            "id": 271987,
            "url": "http://patchwork.ozlabs.org/api/series/271987/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/openvswitch/list/?series=271987",
            "date": "2021-11-15T02:53:04",
            "name": "Add offload support for sFlow",
            "version": 18,
            "mbox": "http://patchwork.ozlabs.org/series/271987/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/1555102/comments/",
    "check": "success",
    "checks": "http://patchwork.ozlabs.org/api/patches/1555102/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<ovs-dev-bounces@openvswitch.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "dev@openvswitch.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "ovs-dev@lists.linuxfoundation.org"
        ],
        "Authentication-Results": [
            "bilbo.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=KbCFIx3W;\n\tdkim-atps=neutral",
            "ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org\n (client-ip=140.211.166.138; helo=smtp1.osuosl.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=<UNKNOWN>)",
            "smtp4.osuosl.org (amavisd-new);\n dkim=pass (2048-bit key) header.d=nvidia.com"
        ],
        "Received": [
            "from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby bilbo.ozlabs.org (Postfix) with ESMTPS id 4Hsv0j1f3mz9s5P\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 15 Nov 2021 13:54:13 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby smtp1.osuosl.org (Postfix) with ESMTP id 7D19F80E41;\n\tMon, 15 Nov 2021 02:54:11 +0000 (UTC)",
            "from smtp1.osuosl.org ([127.0.0.1])\n\tby localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id pc5Yf2xg4yR5; Mon, 15 Nov 2021 02:54:10 +0000 (UTC)",
            "from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56])\n\tby smtp1.osuosl.org (Postfix) with ESMTPS id 9ED2A80DB9;\n\tMon, 15 Nov 2021 02:54:09 +0000 (UTC)",
            "from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id 83D88C002E;\n\tMon, 15 Nov 2021 02:54:09 +0000 (UTC)",
            "from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n by lists.linuxfoundation.org (Postfix) with ESMTP id 854FEC0012\n for <dev@openvswitch.org>; Mon, 15 Nov 2021 02:54:08 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n by smtp4.osuosl.org (Postfix) with ESMTP id 890F3402C8\n for <dev@openvswitch.org>; Mon, 15 Nov 2021 02:53:46 +0000 (UTC)",
            "from smtp4.osuosl.org ([127.0.0.1])\n by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n with ESMTP id O4sAfyPKhpMD for <dev@openvswitch.org>;\n Mon, 15 Nov 2021 02:53:44 +0000 (UTC)",
            "from NAM11-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam11on20619.outbound.protection.outlook.com\n [IPv6:2a01:111:f400:7eaa::619])\n by smtp4.osuosl.org (Postfix) with ESMTPS id 208BB40329\n for <dev@openvswitch.org>; Mon, 15 Nov 2021 02:53:44 +0000 (UTC)",
            "from BN9PR03CA0294.namprd03.prod.outlook.com (2603:10b6:408:f5::29)\n by BYAPR12MB3223.namprd12.prod.outlook.com (2603:10b6:a03:138::31)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.16; Mon, 15 Nov\n 2021 02:53:41 +0000",
            "from BN8NAM11FT058.eop-nam11.prod.protection.outlook.com\n (2603:10b6:408:f5:cafe::f7) by BN9PR03CA0294.outlook.office365.com\n (2603:10b6:408:f5::29) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.15 via Frontend\n Transport; Mon, 15 Nov 2021 02:53:41 +0000",
            "from mail.nvidia.com (216.228.112.32) by\n BN8NAM11FT058.mail.protection.outlook.com (10.13.177.58) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id\n 15.20.4690.15 via Frontend Transport; Mon, 15 Nov 2021 02:53:38 +0000",
            "from HQMAIL101.nvidia.com (172.20.187.10) by HQMAIL109.nvidia.com\n (172.20.187.15) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Sun, 14 Nov\n 2021 18:53:28 -0800",
            "from dev-r630-03.lab.mtl.com (172.20.187.5) by mail.nvidia.com\n (172.20.187.10) with Microsoft SMTP Server id 15.0.1497.18 via Frontend\n Transport; Mon, 15 Nov 2021 02:53:27 +0000"
        ],
        "X-Virus-Scanned": [
            "amavisd-new at osuosl.org",
            "amavisd-new at osuosl.org"
        ],
        "X-Greylist": "whitelisted by SQLgrey-1.8.0",
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=SoTP5ug27WvARZ9GfSYNm5BnZXY2fo3mPSQjH0Y9mUfHtNQPDxwfoJQeiUXpJQKXFMVUimIjR2JZVu/lKwRXNsqSaFG3bxQD/SrYA3zYI9AMt0eDnHHUM8BQjGCcmMPyvhv8QT71rNe0mISu5Cqf5Xpwf5CmapvwnOGAC1SFoOaztaLCKmxOllnEidnrxKvqERj2CDmCC/eH3i/z/WW+bK/1n261sjuq0Kzz3R0dLsXmT0uzqQ6cg8U1rd5TTdZ0a5+tdyXba+Gu5wSeamdrQLiNOdf41PSI2J3yqc5SXd6rd9nojjP9efZ7lL8ywBKTEmFjRo98Or+xLe/4S4QnEg==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=2prjTLmXxmeTNp8B3BBH42NXiaTPHsbsRt1kAXV4aKM=;\n b=KMUcA3vDsaUtmc3s7XJHxDx6BWE5TPv6Ti0n7/YU/L0QJToZnqS8rQ3XG0fWTxIDgZJvzSRjTUbYAzkm6eWlDYbDCf4awl8wMww6v3oKQFa1rjBIDacwjc4x6phFuCywj+/63UEGPdHzKGTpv4vpYTutpklershYSQyJKl3sTzmY3I/7raovNfSbDz1AZAqGnw2Ytl8Rs6OM+tymk6Zi82s1M5n2tjx1/7NvqHH2i1/YKUsicqk3lr/AmgH0LYjGObAThJAAcP7ZJXbI6hbbhTfaMe9a5HOUGqGhO50bLw3xVrkZcy4bkQdX/U/Vrk5w/rfGasoUuAuubxzBuWPeEA==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.112.32) smtp.rcpttodomain=ovn.org smtp.mailfrom=nvidia.com;\n dmarc=pass (p=quarantine sp=quarantine pct=100) action=none\n header.from=nvidia.com; dkim=none (message not signed); arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=2prjTLmXxmeTNp8B3BBH42NXiaTPHsbsRt1kAXV4aKM=;\n b=KbCFIx3W3kb7owxTrQFOR6ugwMEQSNPsbUH+4hw5xNdfTGkp0QpdNZJOw3quI2ABTsyEtzt7uvfLT56Mkg2qfOwce8rCfSSHjHLnH1ezWmDq7peR6yqudfsvyEiK5wjjSRRqLoNZPNgdM5SucXpfPgmLkDhr67EC3+fHctrHGmnZgC0oXd5U42DRm/quYXhwvkMT6KM5BIYBV8nLZqg25alhXxvJGE0c5mp74CfnixSVkAXI2uKPtOVzXg7f8O0VGvsSuDfQrVkL9hgHSlcCutg7MOFB+TWzEhJ4QRtpsryb6FW+6ja9356NIs2PD4WA+Og0KnOG528N3O7XCQfElA==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.112.32)\n smtp.mailfrom=nvidia.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=nvidia.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.112.32 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.112.32; helo=mail.nvidia.com;",
        "To": "<dev@openvswitch.org>",
        "Date": "Mon, 15 Nov 2021 10:53:10 +0800",
        "Message-ID": "<20211115025312.786953-7-cmi@nvidia.com>",
        "X-Mailer": "git-send-email 2.30.2",
        "In-Reply-To": "<20211115025312.786953-1-cmi@nvidia.com>",
        "References": "<20211115025312.786953-1-cmi@nvidia.com>",
        "MIME-Version": "1.0",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "c898a14f-b0d2-433d-7a5f-08d9a7e32011",
        "X-MS-TrafficTypeDiagnostic": "BYAPR12MB3223:",
        "X-Microsoft-Antispam-PRVS": "\n <BYAPR12MB3223FEB25955F949C65CF6FFCF989@BYAPR12MB3223.namprd12.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:5236;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n 9CCamQUmNbDBwugWyOg1HlC39mHwm/T/X52xIRbBCOOJlusnScTaUwFs08+DZHQztS/cIlqqvIlj+ScvSpAtt0GZ57QmEAsuJr1sn7ra2q8Ra4+OMoZu5kvRu3lXa2O5spO+rvdxVLJi0RYvCb1+WfAeH+JGbarI5dezAHizUQ+qxLmZyGzmvcLKydvIFex6PCM7oxLDg5jV3WCVautLC4engeH21iCiYj9DFTlBFvkFoggBjKYLJ3nJOfffOIuJ0AgTNZXpbeBu0F4cDRK5j3sEq+XjDwu5oQt2+rnvVNe48M9EWWqHRIczGS1ILbcjFb7Ax5axMR1969okf4zNXgBhAbXD6uigBLeyoE6nfd6IDwoQBJMMVZ+JE/uh3McSb+10Gm2KxJtJTAcgc14hz9QgZCBe8WA1FU82ODnxm75hdwLXIfTWZY3j1cjIs6DnMHgs6NcD45pdeEFo+JaRDyzIKVfG1JIiCfS4xD1ukTQ1EytBbzna/TVim6lJTpxsUw84d3HQFlwQ2tjAlZdigjOy8eBioi5h2IpLsdFldviwGQw1hAzSwWoDaLz0Eprh30Z/eqt7SqQfGuKLmS0Uc9K5i/QUt03Yzaj7b1AlOLRiwrUiT4IKAzCAXMkUGGFGH7iNDdmJtm0gDH9u7qK9VyXJDN05gR9hqEL4WI+HRCmRBAO3oxGOb338qH7QJEK5hnUckj1AwNwXsZ/fzOmUIw==",
        "X-Forefront-Antispam-Report": "CIP:216.228.112.32; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid01.nvidia.com; CAT:NONE;\n SFS:(4636009)(36840700001)(46966006)(26005)(7636003)(86362001)(186003)(336012)(316002)(426003)(36860700001)(6916009)(6666004)(2616005)(356005)(8936002)(83380400001)(70206006)(5660300002)(82310400003)(36756003)(1076003)(107886003)(4326008)(508600001)(8676002)(47076005)(54906003)(2906002)(70586007);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "15 Nov 2021 02:53:38.1600 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n c898a14f-b0d2-433d-7a5f-08d9a7e32011",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.32];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n BN8NAM11FT058.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BYAPR12MB3223",
        "Cc": "elibr@nvidia.com, simon.horman@netronome.com, roniba@nvidia.com,\n i.maximets@ovn.org",
        "Subject": "[ovs-dev] [PATCH v18 6/8] ofproto: Introduce API to process sFlow\n\toffload packet",
        "X-BeenThere": "ovs-dev@openvswitch.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "<ovs-dev.openvswitch.org>",
        "List-Unsubscribe": "<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>",
        "List-Archive": "<http://mail.openvswitch.org/pipermail/ovs-dev/>",
        "List-Post": "<mailto:ovs-dev@openvswitch.org>",
        "List-Help": "<mailto:ovs-dev-request@openvswitch.org?subject=help>",
        "List-Subscribe": "<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=subscribe>",
        "From": "Chris Mi via dev <ovs-dev@openvswitch.org>",
        "Reply-To": "Chris Mi <cmi@nvidia.com>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "ovs-dev-bounces@openvswitch.org",
        "Sender": "\"dev\" <ovs-dev-bounces@openvswitch.org>"
    },
    "content": "Process sFlow offload packet in handler thread if handler id is 0.\n\nSigned-off-by: Chris Mi <cmi@nvidia.com>\nReviewed-by: Eli Britstein <elibr@nvidia.com>\nAcked-by: Eelco Chaudron <echaudro@redhat.com>\n---\n ofproto/ofproto-dpif-upcall.c | 73 +++++++++++++++++++++++++++++++++++\n 1 file changed, 73 insertions(+)",
    "diff": "diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c\nindex 1c9c720f0..c2c7d3b73 100644\n--- a/ofproto/ofproto-dpif-upcall.c\n+++ b/ofproto/ofproto-dpif-upcall.c\n@@ -22,6 +22,7 @@\n #include \"connmgr.h\"\n #include \"coverage.h\"\n #include \"cmap.h\"\n+#include \"lib/dpif-offload-provider.h\"\n #include \"lib/dpif-provider.h\"\n #include \"dpif.h\"\n #include \"openvswitch/dynamic-string.h\"\n@@ -779,6 +780,74 @@ udpif_get_n_flows(struct udpif *udpif)\n     return flow_count;\n }\n \n+static void\n+process_offload_sflow(struct udpif *udpif, struct dpif_offload_sflow *sflow)\n+{\n+    const struct dpif_sflow_attr *attr = sflow->attr;\n+    const struct user_action_cookie *cookie;\n+    struct dpif_sflow *dpif_sflow;\n+    struct ofproto_dpif *ofproto;\n+    struct upcall upcall;\n+    struct flow flow;\n+\n+    if (!attr) {\n+        VLOG_WARN_RL(&rl, \"sFlow upcall is missing its attribute\");\n+        return;\n+    }\n+\n+    cookie = nl_attr_get(attr->userdata);\n+    if (!cookie) {\n+        VLOG_WARN_RL(&rl, \"sFlow user action cookie is missing\");\n+        return;\n+    }\n+    if (nl_attr_get_size(attr->userdata) < sizeof(struct user_action_cookie)) {\n+        VLOG_WARN_RL(&rl, \"sFlow user action cookie is corrupted\");\n+        return;\n+    }\n+    ofproto = ofproto_dpif_lookup_by_uuid(&cookie->ofproto_uuid);\n+    if (!ofproto) {\n+        VLOG_WARN_RL(&rl, \"sFlow upcall can't find ofproto dpif for UUID \"\n+                     UUID_FMT, UUID_ARGS(&cookie->ofproto_uuid));\n+        return;\n+    }\n+    dpif_sflow = ofproto->sflow;\n+    if (!dpif_sflow) {\n+        VLOG_WARN_RL(&rl, \"sFlow upcall is missing dpif information\");\n+        return;\n+    }\n+\n+    memset(&flow, 0, sizeof flow);\n+    if (attr->tunnel) {\n+        memcpy(&flow.tunnel, attr->tunnel, sizeof flow.tunnel);\n+    }\n+    flow.in_port.odp_port = netdev_ifindex_to_odp_port(sflow->iifindex);\n+    memset(&upcall, 0, sizeof upcall);\n+    upcall.flow = &flow;\n+    upcall.cookie = *cookie;\n+    upcall.packet = &sflow->packet;\n+    upcall.sflow = dpif_sflow;\n+    upcall.ufid = &attr->ufid;\n+    upcall.type = SFLOW_UPCALL;\n+    process_upcall(udpif, &upcall, NULL, NULL);\n+}\n+\n+static void\n+recv_offload_sflow(struct udpif *udpif)\n+{\n+    size_t n_sflow = 0;\n+\n+    while (n_sflow < UPCALL_MAX_BATCH) {\n+        struct dpif_offload_sflow sflow;\n+\n+        if (dpif_offload_sflow_recv(udpif->dpif, &sflow)) {\n+            break;\n+        }\n+        process_offload_sflow(udpif, &sflow);\n+        n_sflow++;\n+    }\n+    dpif_offload_sflow_recv_wait(udpif->dpif);\n+}\n+\n /* The upcall handler thread tries to read a batch of UPCALL_MAX_BATCH\n  * upcalls from dpif, processes the batch and installs corresponding flows\n  * in dpif. */\n@@ -795,6 +864,10 @@ udpif_upcall_handler(void *arg)\n             dpif_recv_wait(udpif->dpif, handler->handler_id);\n             latch_wait(&udpif->exit_latch);\n         }\n+        /* Only handler id 0 thread process sFlow offload packet. */\n+        if (handler->handler_id == 0) {\n+            recv_offload_sflow(udpif);\n+        }\n         poll_block();\n     }\n \n",
    "prefixes": [
        "ovs-dev",
        "v18",
        "6/8"
    ]
}