get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 36277,
    "url": "https://patches.dpdk.org/api/patches/36277/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/7fb0c0b3f11aca8d2b9594b808b753561cb8837b.1521472647.git.nelio.laranjeiro@6wind.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<7fb0c0b3f11aca8d2b9594b808b753561cb8837b.1521472647.git.nelio.laranjeiro@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/7fb0c0b3f11aca8d2b9594b808b753561cb8837b.1521472647.git.nelio.laranjeiro@6wind.com",
    "date": "2018-03-19T15:20:54",
    "name": "[dpdk-dev,v2,2/3] net/mlx5: use Netlink to enable promisc / all multicast mode",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "21a831f2e09b957c31f947693ca603390e663363",
    "submitter": {
        "id": 243,
        "url": "https://patches.dpdk.org/api/people/243/?format=api",
        "name": "Nélio Laranjeiro",
        "email": "nelio.laranjeiro@6wind.com"
    },
    "delegate": {
        "id": 6624,
        "url": "https://patches.dpdk.org/api/users/6624/?format=api",
        "username": "shahafs",
        "first_name": "Shahaf",
        "last_name": "Shuler",
        "email": "shahafs@mellanox.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/7fb0c0b3f11aca8d2b9594b808b753561cb8837b.1521472647.git.nelio.laranjeiro@6wind.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/36277/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/36277/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 2D2601AFF4;\n\tMon, 19 Mar 2018 16:22:05 +0100 (CET)",
            "from mail-wm0-f67.google.com (mail-wm0-f67.google.com\n\t[74.125.82.67]) by dpdk.org (Postfix) with ESMTP id 3F86DAAEB\n\tfor <dev@dpdk.org>; Mon, 19 Mar 2018 16:22:02 +0100 (CET)",
            "by mail-wm0-f67.google.com with SMTP id x82so3621726wmg.1\n\tfor <dev@dpdk.org>; Mon, 19 Mar 2018 08:22:02 -0700 (PDT)",
            "from laranjeiro-vm.dev.6wind.com\n\t(host.78.145.23.62.rev.coltfrance.com. [62.23.145.78])\n\tby smtp.gmail.com with ESMTPSA id\n\t59sm392566wro.35.2018.03.19.08.22.01\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tMon, 19 Mar 2018 08:22:01 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=6wind-com.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references\n\t:in-reply-to:references;\n\tbh=YF6PXmFCVEQIXiX1cqHqxAYjY7UDc1/P6Pw3hRe7eP4=;\n\tb=Is92Kkutori8Gz5BTggo3bNhLyGpLEDHUiWEsGnrPGkb+8hmE5PbXWuxXqnmtgtuh5\n\t5bJ7Hx8DyKKVrp6ckUOWn0Vc9VTLUzDOwddd+obvPvepeAevJCu0kYr4SuKSFTeXKKXO\n\tX+j8+z7Um7ZnvFlAfoSlctTCoDc5bfd92KKC95wqMrFIDDYT0vVVHhgBlnirV3TEzug1\n\tA0KrdDuywsPapGSLDexNyJLhLM8yMRIIzpTKYyuLBnQN0PhySmShEr/qkUuDmE4Us7FW\n\tsTazVMQkI8QKobiglrMO9MBKX1Log/H31H0S8dE+JeSdhqtPh/Nx4KMeKP9GJvN1SEeG\n\tx+xQ==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:in-reply-to:references;\n\tbh=YF6PXmFCVEQIXiX1cqHqxAYjY7UDc1/P6Pw3hRe7eP4=;\n\tb=ZgskrK+XddomUbDFleqf8XC/Ow6D229g8xzTzrLO8qt/YvKdfbFyV3067z6Iy3AANo\n\tAQXQbKmAtwbWK3oNW0cG+gKrVHPRCrimHhQc/n0MUsTOQYXtuxb35uXtOoJAhKNmdGOW\n\tYj7zkBoQU9362zXyv8m+ZXI/EtFmb9YGh1B0EYPbZrVA2RxZMBVaWmmdWw4D8OPd8Wo2\n\tf9rAUVPwUIW6//ceFv+gyaKfyvTq6lIJAY+tjTEjqf1ZHurnvHNxrLg72FZPjd6ScHB7\n\tuURQXPqp8xDL9SzHpoGLDFxre1oSwe+qB7GcLl08BABM+GwtMqTdG/rFjKM/WigemLko\n\tF+BA==",
        "X-Gm-Message-State": "AElRT7HGrR2rElzT9FJsoyxfM6vlwFJZli4Rki77od/7KpJmEICnGaul\n\tBbpBkxWXUwZ+6J9qzPzO44Ql",
        "X-Google-Smtp-Source": "AG47ELsL68KHY2YvpOqgA+ENJc10IVUBLwDCEuTUDa/Qn9rdXOFcDzbrlf+LTBUmpamdW4mpNGWrxA==",
        "X-Received": "by 10.28.94.75 with SMTP id s72mr9572658wmb.126.1521472921884;\n\tMon, 19 Mar 2018 08:22:01 -0700 (PDT)",
        "From": "Nelio Laranjeiro <nelio.laranjeiro@6wind.com>",
        "To": "Adrien Mazarguil <adrien.mazarguil@6wind.com>,\n\tYongseok Koh <yskoh@mellanox.com>",
        "Cc": "dev@dpdk.org",
        "Date": "Mon, 19 Mar 2018 16:20:54 +0100",
        "Message-Id": "<7fb0c0b3f11aca8d2b9594b808b753561cb8837b.1521472647.git.nelio.laranjeiro@6wind.com>",
        "X-Mailer": "git-send-email 2.11.0",
        "In-Reply-To": [
            "<cover.1521472647.git.nelio.laranjeiro@6wind.com>",
            "<cover.1521472647.git.nelio.laranjeiro@6wind.com>"
        ],
        "References": [
            "<cover.1521472647.git.nelio.laranjeiro@6wind.com>",
            "<cover.1520944256.git.nelio.laranjeiro@6wind.com>\n\t<cover.1521472647.git.nelio.laranjeiro@6wind.com>"
        ],
        "Subject": "[dpdk-dev] [PATCH v2 2/3] net/mlx5: use Netlink to enable promisc /\n\tall multicast mode",
        "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://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "VF devices are not able to receive promisc or allmulti traffic unless it\nfully requests it though Netlink.  This will cause the request to be\nprocessed by the PF which will handle the request and enable it.\n\nThis requires the VF to be trusted by the PF.\n\nSigned-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>\nAcked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>\n---\n drivers/net/mlx5/mlx5_nl.c     | 94 ++++++++++++++++++++++++++++++++++++++++++\n drivers/net/mlx5/mlx5_rxmode.c |  8 ++++\n 2 files changed, 102 insertions(+)",
    "diff": "diff --git a/drivers/net/mlx5/mlx5_nl.c b/drivers/net/mlx5/mlx5_nl.c\nindex 21edefc0f..562d219fa 100644\n--- a/drivers/net/mlx5/mlx5_nl.c\n+++ b/drivers/net/mlx5/mlx5_nl.c\n@@ -527,3 +527,97 @@ mlx5_nl_mac_addr_flush(struct rte_eth_dev *dev)\n \t\t\tmlx5_nl_mac_addr_remove(dev, m);\n \t}\n }\n+\n+/**\n+ * Enable promiscuous / all multicast mode through Netlink.\n+ *\n+ * @param dev\n+ *   Pointer to Ethernet device structure.\n+ * @param flags\n+ *   IFF_PROMISC for promiscuous, IFF_ALLMULTI for allmulti.\n+ * @param enable\n+ *   Nonzero to enable, disable otherwise.\n+ *\n+ * @return\n+ *   0 on success, a negative errno value otherwise and rte_errno is set.\n+ */\n+static int\n+mlx5_nl_device_flags(struct rte_eth_dev *dev, uint32_t flags, int enable)\n+{\n+\tstruct priv *priv = dev->data->dev_private;\n+\tint iface_idx = mlx5_ifindex(dev);\n+\tstruct {\n+\t\tstruct nlmsghdr hdr;\n+\t\tstruct ifinfomsg ifi;\n+\t} req = {\n+\t\t.hdr = {\n+\t\t\t.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)),\n+\t\t\t.nlmsg_type = RTM_NEWLINK,\n+\t\t\t.nlmsg_flags = NLM_F_REQUEST,\n+\t\t},\n+\t\t.ifi = {\n+\t\t\t.ifi_flags = enable ? flags : 0,\n+\t\t\t.ifi_change = flags,\n+\t\t\t.ifi_index = iface_idx,\n+\t\t},\n+\t};\n+\tint fd;\n+\tint ret;\n+\n+\tassert(!(flags & ~(IFF_PROMISC | IFF_ALLMULTI)));\n+\tif (priv->nl_socket < 0)\n+\t\treturn 0;\n+\tfd = priv->nl_socket;\n+\tret = mlx5_nl_send(fd, &req.hdr, priv->nl_sn++);\n+\tif (ret < 0)\n+\t\treturn ret;\n+\treturn 0;\n+}\n+\n+/**\n+ * Enable promiscuous mode through Netlink.\n+ *\n+ * @param dev\n+ *   Pointer to Ethernet device structure.\n+ * @param enable\n+ *   Nonzero to enable, disable otherwise.\n+ *\n+ * @return\n+ *   0 on success, a negative errno value otherwise and rte_errno is set.\n+ */\n+int\n+mlx5_nl_promisc(struct rte_eth_dev *dev, int enable)\n+{\n+\tint ret = mlx5_nl_device_flags(dev, IFF_PROMISC, enable);\n+\n+\tif (ret)\n+\t\tDRV_LOG(DEBUG,\n+\t\t\t\"port %u cannot %s promisc mode: Netlink error %s\",\n+\t\t\tdev->data->port_id, enable ? \"enable\" : \"disable\",\n+\t\t\tstrerror(rte_errno));\n+\treturn ret;\n+}\n+\n+/**\n+ * Enable all multicast mode through Netlink.\n+ *\n+ * @param dev\n+ *   Pointer to Ethernet device structure.\n+ * @param enable\n+ *   Nonzero to enable, disable otherwise.\n+ *\n+ * @return\n+ *   0 on success, a negative errno value otherwise and rte_errno is set.\n+ */\n+int\n+mlx5_nl_allmulti(struct rte_eth_dev *dev, int enable)\n+{\n+\tint ret = mlx5_nl_device_flags(dev, IFF_ALLMULTI, enable);\n+\n+\tif (ret)\n+\t\tDRV_LOG(DEBUG,\n+\t\t\t\"port %u cannot %s allmulti mode: Netlink error %s\",\n+\t\t\tdev->data->port_id, enable ? \"enable\" : \"disable\",\n+\t\t\tstrerror(rte_errno));\n+\treturn ret;\n+}\ndiff --git a/drivers/net/mlx5/mlx5_rxmode.c b/drivers/net/mlx5/mlx5_rxmode.c\nindex e43a4b030..c1c0f21c7 100644\n--- a/drivers/net/mlx5/mlx5_rxmode.c\n+++ b/drivers/net/mlx5/mlx5_rxmode.c\n@@ -35,6 +35,8 @@ mlx5_promiscuous_enable(struct rte_eth_dev *dev)\n \tint ret;\n \n \tdev->data->promiscuous = 1;\n+\tif (((struct priv *)dev->data->dev_private)->config.vf)\n+\t\tmlx5_nl_promisc(dev, 1);\n \tret = mlx5_traffic_restart(dev);\n \tif (ret)\n \t\tDRV_LOG(ERR, \"port %u cannot enable promiscuous mode: %s\",\n@@ -53,6 +55,8 @@ mlx5_promiscuous_disable(struct rte_eth_dev *dev)\n \tint ret;\n \n \tdev->data->promiscuous = 0;\n+\tif (((struct priv *)dev->data->dev_private)->config.vf)\n+\t\tmlx5_nl_promisc(dev, 0);\n \tret = mlx5_traffic_restart(dev);\n \tif (ret)\n \t\tDRV_LOG(ERR, \"port %u cannot disable promiscuous mode: %s\",\n@@ -71,6 +75,8 @@ mlx5_allmulticast_enable(struct rte_eth_dev *dev)\n \tint ret;\n \n \tdev->data->all_multicast = 1;\n+\tif (((struct priv *)dev->data->dev_private)->config.vf)\n+\t\tmlx5_nl_allmulti(dev, 1);\n \tret = mlx5_traffic_restart(dev);\n \tif (ret)\n \t\tDRV_LOG(ERR, \"port %u cannot enable allmulicast mode: %s\",\n@@ -89,6 +95,8 @@ mlx5_allmulticast_disable(struct rte_eth_dev *dev)\n \tint ret;\n \n \tdev->data->all_multicast = 0;\n+\tif (((struct priv *)dev->data->dev_private)->config.vf)\n+\t\tmlx5_nl_allmulti(dev, 0);\n \tret = mlx5_traffic_restart(dev);\n \tif (ret)\n \t\tDRV_LOG(ERR, \"port %u cannot disable allmulicast mode: %s\",\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "2/3"
    ]
}