get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 43011,
    "url": "http://patches.dpdk.org/api/patches/43011/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180713092910.26276-7-adrien.mazarguil@6wind.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20180713092910.26276-7-adrien.mazarguil@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180713092910.26276-7-adrien.mazarguil@6wind.com",
    "date": "2018-07-13T09:40:47",
    "name": "[v2,6/6] net/mlx5: add port ID pattern item to switch flow rules",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "10989b73c2832703edc2bd9ef19e8189fd3be3e9",
    "submitter": {
        "id": 165,
        "url": "http://patches.dpdk.org/api/people/165/?format=api",
        "name": "Adrien Mazarguil",
        "email": "adrien.mazarguil@6wind.com"
    },
    "delegate": {
        "id": 6624,
        "url": "http://patches.dpdk.org/api/users/6624/?format=api",
        "username": "shahafs",
        "first_name": "Shahaf",
        "last_name": "Shuler",
        "email": "shahafs@mellanox.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180713092910.26276-7-adrien.mazarguil@6wind.com/mbox/",
    "series": [
        {
            "id": 558,
            "url": "http://patches.dpdk.org/api/series/558/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=558",
            "date": "2018-07-13T09:40:35",
            "name": "net/mlx5: add support for switch flow rules",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/558/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/43011/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/43011/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 8D8991B448;\n\tFri, 13 Jul 2018 11:41:07 +0200 (CEST)",
            "from mail-wm0-f68.google.com (mail-wm0-f68.google.com\n\t[74.125.82.68]) by dpdk.org (Postfix) with ESMTP id 834201B3AE\n\tfor <dev@dpdk.org>; Fri, 13 Jul 2018 11:41:04 +0200 (CEST)",
            "by mail-wm0-f68.google.com with SMTP id v128-v6so8148798wme.5\n\tfor <dev@dpdk.org>; Fri, 13 Jul 2018 02:41:04 -0700 (PDT)",
            "from 6wind.com (host.78.145.23.62.rev.coltfrance.com.\n\t[62.23.145.78]) by smtp.gmail.com with ESMTPSA id\n\tc18-v6sm29920747wrq.17.2018.07.13.02.41.03\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tFri, 13 Jul 2018 02:41:03 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=6wind-com.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:in-reply-to;\n\tbh=pBVDRproGw6M+uVk39+6Ft0dsE1RvntXrkz4O2vobnI=;\n\tb=1FpAk2NERf/XerGqxYQsHaVBKoNA2iDscJ2vVRNZSU5GQydIMrGV2nZPV4UcT0Neqo\n\t8ehk3lxm22RN5qY1P9XgjDTh+TUmbkA0rvyBQB3lPYf1Ix6hzhZT76HbNbdemgCBg0pn\n\tGJS0+ffnyJSebX/CeTM2GtxZOf9R3TO4salTGhtZ4EGaTjq8Zy+6YkoKurjlkbf6pWAd\n\thvnANPYPnTgRIdOK6uq+ueZp4Uoxb6274sMNm6RVkiezLEpRw1q/p1fwXEkd53DA61l4\n\t80XHXOeD96C/cgeBghf8OCnCKNX9Z+jYJdJkKG6wrNb1494haizibvRdRfVtQrgHcq1L\n\tnR0A==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:in-reply-to;\n\tbh=pBVDRproGw6M+uVk39+6Ft0dsE1RvntXrkz4O2vobnI=;\n\tb=QOK64oRsL3jhLg+n0p5pYCwVbVgIBsfnPtJlrDlfl0ZcPyC1Qe9Yl1YhknXHpo8u6t\n\ty6cpV+F+Pj6XTkF99up/MsJp5RuqVJOt6S5zFpT4MTbKzlgiRDOu4EUUgfUDycNz4znr\n\tDmEXpXxGME8FKD13FQ/eBakw79SPKAlvBcUGwjoc2O/h6XC0jn64SkNUuOulV2wlFYK3\n\t7UolRk2Gjywng0cXvJhg114PzDcWdNuPHstEGmsEYzB3ByHqGZCOzBuHmTaEz9S1PLov\n\t4nHWjvZs5H7XV1hj1OdhZik8D4r6qJRICHzNX+uoIK2YJSMO0PUGtWrs+scnaSrNosvS\n\tXvtQ==",
        "X-Gm-Message-State": "AOUpUlH4LdYqT/eR6lIscNQYfmwWEYzdRO5+k1NEVh8EWfLg5m70Kb7A\n\taKUX1vueBWFLbGLGcglEXSVbew==",
        "X-Google-Smtp-Source": "AAOMgpezOQe8nrADVi1PBoDyXgv6/mxEgjCzBclNMnxZfgm1EenEupKfkND1eVMPcLvkC/ZYdbGOXw==",
        "X-Received": "by 2002:a1c:14c3:: with SMTP id\n\t186-v6mr3234110wmu.21.1531474864228; \n\tFri, 13 Jul 2018 02:41:04 -0700 (PDT)",
        "Date": "Fri, 13 Jul 2018 11:40:47 +0200",
        "From": "Adrien Mazarguil <adrien.mazarguil@6wind.com>",
        "To": "Shahaf Shuler <shahafs@mellanox.com>",
        "Cc": "Nelio Laranjeiro <nelio.laranjeiro@6wind.com>,\n\tYongseok Koh <yskoh@mellanox.com>, dev@dpdk.org",
        "Message-ID": "<20180713092910.26276-7-adrien.mazarguil@6wind.com>",
        "References": "<20180627173355.4718-1-adrien.mazarguil@6wind.com>\n\t<20180713092910.26276-1-adrien.mazarguil@6wind.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=us-ascii",
        "Content-Disposition": "inline",
        "In-Reply-To": "<20180713092910.26276-1-adrien.mazarguil@6wind.com>",
        "X-Mailer": "git-send-email 2.11.0",
        "Subject": "[dpdk-dev] [PATCH v2 6/6] net/mlx5: add port ID pattern item to\n\tswitch flow rules",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "This enables flow rules to match traffic coming from a different DPDK port\nID associated with the device (PORT_ID pattern item), mainly for the\nconvenience of applications that want to deal with a single port ID for all\nflow rules associated with some physical device.\n\nTestpmd example:\n\n- Creating a flow rule on port ID 1 to consume all traffic from port ID 0\n  and direct it to port ID 2:\n\n  flow create 1 ingress transfer pattern port_id id is 0 / end actions\n     port_id id 2 / end\n\nSigned-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>\nAcked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>\nAcked-by: Yongseok Koh <yskoh@mellanox.com>\n---\n drivers/net/mlx5/mlx5_nl_flow.c | 57 +++++++++++++++++++++++++++++++++++-\n 1 file changed, 56 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/net/mlx5/mlx5_nl_flow.c b/drivers/net/mlx5/mlx5_nl_flow.c\nindex 6c7bf7119..9bad1a418 100644\n--- a/drivers/net/mlx5/mlx5_nl_flow.c\n+++ b/drivers/net/mlx5/mlx5_nl_flow.c\n@@ -154,6 +154,7 @@ enum mlx5_nl_flow_trans {\n \tATTR,\n \tPATTERN,\n \tITEM_VOID,\n+\tITEM_PORT_ID,\n \tITEM_ETH,\n \tITEM_VLAN,\n \tITEM_IPV4,\n@@ -174,7 +175,7 @@ enum mlx5_nl_flow_trans {\n #define TRANS(...) (const enum mlx5_nl_flow_trans []){ __VA_ARGS__, INVALID, }\n \n #define PATTERN_COMMON \\\n-\tITEM_VOID, ACTIONS\n+\tITEM_VOID, ITEM_PORT_ID, ACTIONS\n #define ACTIONS_COMMON \\\n \tACTION_VOID, ACTION_OF_POP_VLAN, ACTION_OF_PUSH_VLAN, \\\n \tACTION_OF_SET_VLAN_VID, ACTION_OF_SET_VLAN_PCP\n@@ -188,6 +189,7 @@ static const enum mlx5_nl_flow_trans *const mlx5_nl_flow_trans[] = {\n \t[ATTR] = TRANS(PATTERN),\n \t[PATTERN] = TRANS(ITEM_ETH, PATTERN_COMMON),\n \t[ITEM_VOID] = TRANS(BACK),\n+\t[ITEM_PORT_ID] = TRANS(BACK),\n \t[ITEM_ETH] = TRANS(ITEM_IPV4, ITEM_IPV6, ITEM_VLAN, PATTERN_COMMON),\n \t[ITEM_VLAN] = TRANS(ITEM_IPV4, ITEM_IPV6, PATTERN_COMMON),\n \t[ITEM_IPV4] = TRANS(ITEM_TCP, ITEM_UDP, PATTERN_COMMON),\n@@ -207,6 +209,7 @@ static const enum mlx5_nl_flow_trans *const mlx5_nl_flow_trans[] = {\n \n /** Empty masks for known item types. */\n static const union {\n+\tstruct rte_flow_item_port_id port_id;\n \tstruct rte_flow_item_eth eth;\n \tstruct rte_flow_item_vlan vlan;\n \tstruct rte_flow_item_ipv4 ipv4;\n@@ -217,6 +220,7 @@ static const union {\n \n /** Supported masks for known item types. */\n static const struct {\n+\tstruct rte_flow_item_port_id port_id;\n \tstruct rte_flow_item_eth eth;\n \tstruct rte_flow_item_vlan vlan;\n \tstruct rte_flow_item_ipv4 ipv4;\n@@ -224,6 +228,9 @@ static const struct {\n \tstruct rte_flow_item_tcp tcp;\n \tstruct rte_flow_item_udp udp;\n } mlx5_nl_flow_mask_supported = {\n+\t.port_id = {\n+\t\t.id = 0xffffffff,\n+\t},\n \t.eth = {\n \t\t.type = RTE_BE16(0xffff),\n \t\t.dst.addr_bytes = \"\\xff\\xff\\xff\\xff\\xff\\xff\",\n@@ -378,6 +385,7 @@ mlx5_nl_flow_transpose(void *buf,\n \tconst struct rte_flow_action *action;\n \tunsigned int n;\n \tuint32_t act_index_cur;\n+\tbool in_port_id_set;\n \tbool eth_type_set;\n \tbool vlan_present;\n \tbool vlan_eth_type_set;\n@@ -396,6 +404,7 @@ mlx5_nl_flow_transpose(void *buf,\n \taction = actions;\n \tn = 0;\n \tact_index_cur = 0;\n+\tin_port_id_set = false;\n \teth_type_set = false;\n \tvlan_present = false;\n \tvlan_eth_type_set = false;\n@@ -409,6 +418,7 @@ mlx5_nl_flow_transpose(void *buf,\n trans:\n \tswitch (trans[n++]) {\n \t\tunion {\n+\t\t\tconst struct rte_flow_item_port_id *port_id;\n \t\t\tconst struct rte_flow_item_eth *eth;\n \t\t\tconst struct rte_flow_item_vlan *vlan;\n \t\t\tconst struct rte_flow_item_ipv4 *ipv4;\n@@ -510,6 +520,51 @@ mlx5_nl_flow_transpose(void *buf,\n \t\t\tgoto trans;\n \t\t++item;\n \t\tbreak;\n+\tcase ITEM_PORT_ID:\n+\t\tif (item->type != RTE_FLOW_ITEM_TYPE_PORT_ID)\n+\t\t\tgoto trans;\n+\t\tmask.port_id = mlx5_nl_flow_item_mask\n+\t\t\t(item, &rte_flow_item_port_id_mask,\n+\t\t\t &mlx5_nl_flow_mask_supported.port_id,\n+\t\t\t &mlx5_nl_flow_mask_empty.port_id,\n+\t\t\t sizeof(mlx5_nl_flow_mask_supported.port_id), error);\n+\t\tif (!mask.port_id)\n+\t\t\treturn -rte_errno;\n+\t\tif (mask.port_id == &mlx5_nl_flow_mask_empty.port_id) {\n+\t\t\tin_port_id_set = 1;\n+\t\t\t++item;\n+\t\t\tbreak;\n+\t\t}\n+\t\tspec.port_id = item->spec;\n+\t\tif (mask.port_id->id && mask.port_id->id != 0xffffffff)\n+\t\t\treturn rte_flow_error_set\n+\t\t\t\t(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM_MASK,\n+\t\t\t\t mask.port_id,\n+\t\t\t\t \"no support for partial mask on\"\n+\t\t\t\t \" \\\"id\\\" field\");\n+\t\tif (!mask.port_id->id)\n+\t\t\ti = 0;\n+\t\telse\n+\t\t\tfor (i = 0; ptoi[i].ifindex; ++i)\n+\t\t\t\tif (ptoi[i].port_id == spec.port_id->id)\n+\t\t\t\t\tbreak;\n+\t\tif (!ptoi[i].ifindex)\n+\t\t\treturn rte_flow_error_set\n+\t\t\t\t(error, ENODEV, RTE_FLOW_ERROR_TYPE_ITEM_SPEC,\n+\t\t\t\t spec.port_id,\n+\t\t\t\t \"missing data to convert port ID to ifindex\");\n+\t\ttcm = mnl_nlmsg_get_payload(buf);\n+\t\tif (in_port_id_set &&\n+\t\t    ptoi[i].ifindex != (unsigned int)tcm->tcm_ifindex)\n+\t\t\treturn rte_flow_error_set\n+\t\t\t\t(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM_SPEC,\n+\t\t\t\t spec.port_id,\n+\t\t\t\t \"cannot match traffic for several port IDs\"\n+\t\t\t\t \" through a single flow rule\");\n+\t\ttcm->tcm_ifindex = ptoi[i].ifindex;\n+\t\tin_port_id_set = 1;\n+\t\t++item;\n+\t\tbreak;\n \tcase ITEM_ETH:\n \t\tif (item->type != RTE_FLOW_ITEM_TYPE_ETH)\n \t\t\tgoto trans;\n",
    "prefixes": [
        "v2",
        "6/6"
    ]
}