get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 100778,
    "url": "https://patches.dpdk.org/api/patches/100778/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20211007184350.73858-11-srikanth.k@oneconvergence.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": "<20211007184350.73858-11-srikanth.k@oneconvergence.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20211007184350.73858-11-srikanth.k@oneconvergence.com",
    "date": "2021-10-07T18:43:19",
    "name": "[v2,10/41] net/mlx5: socket for inter-process communication",
    "commit_ref": null,
    "pull_url": null,
    "state": "deferred",
    "archived": false,
    "hash": "ccabbcc97d4efebe245db27aa71b1e9928164438",
    "submitter": {
        "id": 2368,
        "url": "https://patches.dpdk.org/api/people/2368/?format=api",
        "name": "Srikanth Kaka",
        "email": "srikanth.k@oneconvergence.com"
    },
    "delegate": {
        "id": 3268,
        "url": "https://patches.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20211007184350.73858-11-srikanth.k@oneconvergence.com/mbox/",
    "series": [
        {
            "id": 19455,
            "url": "https://patches.dpdk.org/api/series/19455/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=19455",
            "date": "2021-10-07T18:43:09",
            "name": "add MLX5 FreeBSD support",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/19455/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/100778/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/100778/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 26816A034F;\n\tFri,  8 Oct 2021 12:56:54 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 6CA074115F;\n\tFri,  8 Oct 2021 12:56:08 +0200 (CEST)",
            "from mail-pg1-f182.google.com (mail-pg1-f182.google.com\n [209.85.215.182])\n by mails.dpdk.org (Postfix) with ESMTP id 13F27411E0\n for <dev@dpdk.org>; Thu,  7 Oct 2021 20:44:41 +0200 (CEST)",
            "by mail-pg1-f182.google.com with SMTP id s75so652451pgs.5\n for <dev@dpdk.org>; Thu, 07 Oct 2021 11:44:41 -0700 (PDT)",
            "from srikanth-ThinkPad-T450.domain.name ([136.185.113.102])\n by smtp.gmail.com with ESMTPSA id c11sm3311586pji.38.2021.10.07.11.44.37\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 07 Oct 2021 11:44:39 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oneconvergence.com; s=google;\n h=from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-transfer-encoding;\n bh=yIejI0MtrgjFXIVeGJ+hPZwwtTwbMIY31H+ZhfzUP5A=;\n b=bqveofUcT55fahTkiuBl/vQF1bWGi07igBqPpyBZmUxSyMMIPkXw9FCtVPATAMkm5s\n a+qDyz0rSsvcjdbrcPtQXmrySQajXixB4JLvR6YH1T8z0rsjtD7XXVTYLGXlmq93aJGT\n kLLq5VR/R3DXKAE3++MqpCUbjTAn9KEffVvgY=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20210112;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n :references:mime-version:content-transfer-encoding;\n bh=yIejI0MtrgjFXIVeGJ+hPZwwtTwbMIY31H+ZhfzUP5A=;\n b=UmcjsnWG7Aj1rVnSUq+HacMEZQeAY+awMWme5III9yKbElx8hs++M5kCxt+cT40bsv\n ryGzNwnX8gKSCr4edKiaTS9X0BZTR6UaMBxd2oUmxMpeSKL0XV75L4fADnXwLoc2UK/f\n V32j/OLyCkJGq6XYVBxDFktLTPMF3romNHmc4Z7cwz0a6R7JG3A7AIPyxI9fMTMHCIQ8\n CJvAkWUTS7hWur+5BqJMCToM5YWIGOMZUtWyd39Ie0vgCAQWKIzMvqC9ovPltpwjCmzA\n L88Rdf+T56rxll0HU2JPhQeYn1fncsssDzDQ5LQN2Id/jMxok6AIC9IblpkYsWY1KEX3\n BIpA==",
        "X-Gm-Message-State": "AOAM533APdLhXR9JPNB8IPeR4QLHCVcTxBHkLdJthnAO1DYZcIJVrsff\n SxpRsxdszAEK/gylTkzwUCnaaQ==",
        "X-Google-Smtp-Source": "\n ABdhPJzDNV4FuKpBJszfAygSPquXR/3DG/CprzZ5zDgg4mXzwg2XMIFpn2pzINX+3lSOxAp/ykkZVw==",
        "X-Received": "by 2002:a63:ec0f:: with SMTP id j15mr989361pgh.476.1633632280162;\n Thu, 07 Oct 2021 11:44:40 -0700 (PDT)",
        "From": "Srikanth Kaka <srikanth.k@oneconvergence.com>",
        "To": "Matan Azrad <matan@nvidia.com>,\n Viacheslav Ovsiienko <viacheslavo@nvidia.com>",
        "Cc": "dev@dpdk.org, Vag Singh <vag.singh@oneconvergence.com>,\n Anand Thulasiram <avelu@juniper.net>,\n Srikanth Kaka <srikanth.k@oneconvergence.com>",
        "Date": "Fri,  8 Oct 2021 00:13:19 +0530",
        "Message-Id": "<20211007184350.73858-11-srikanth.k@oneconvergence.com>",
        "X-Mailer": "git-send-email 2.30.2",
        "In-Reply-To": "<20211007184350.73858-1-srikanth.k@oneconvergence.com>",
        "References": "<20211007184350.73858-1-srikanth.k@oneconvergence.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Mailman-Approved-At": "Fri, 08 Oct 2021 12:55:54 +0200",
        "Subject": "[dpdk-dev] [PATCH v2 10/41] net/mlx5: socket for inter-process\n communication",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <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 <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Initialise the socket to communicate with the secondary process\n\nmlx5_os.h and mlx5_socket.c are equivalent to Linux files\nof the same name\n\nSigned-off-by: Srikanth Kaka <srikanth.k@oneconvergence.com>\nSigned-off-by: Vag Singh <vag.singh@oneconvergence.com>\nSigned-off-by: Anand Thulasiram <avelu@juniper.net>\n---\n drivers/net/mlx5/freebsd/mlx5_os.h     |  22 +++\n drivers/net/mlx5/freebsd/mlx5_socket.c | 249 +++++++++++++++++++++++++\n 2 files changed, 271 insertions(+)\n create mode 100644 drivers/net/mlx5/freebsd/mlx5_os.h\n create mode 100644 drivers/net/mlx5/freebsd/mlx5_socket.c",
    "diff": "diff --git a/drivers/net/mlx5/freebsd/mlx5_os.h b/drivers/net/mlx5/freebsd/mlx5_os.h\nnew file mode 100644\nindex 0000000000..af7cbeb418\n--- /dev/null\n+++ b/drivers/net/mlx5/freebsd/mlx5_os.h\n@@ -0,0 +1,22 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright 2015 6WIND S.A.\n+ * Copyright 2020 Mellanox Technologies, Ltd\n+ */\n+\n+#ifndef RTE_PMD_MLX5_OS_H_\n+#define RTE_PMD_MLX5_OS_H_\n+\n+#include <net/if.h>\n+\n+/* verb enumerations translations to local enums. */\n+enum {\n+\tMLX5_FS_NAME_MAX = IBV_SYSFS_NAME_MAX + 1,\n+\tMLX5_FS_PATH_MAX = IBV_SYSFS_PATH_MAX + 1\n+};\n+\n+/* Maximal data of sendmsg message(in bytes). */\n+#define MLX5_SENDMSG_MAX 64\n+\n+#define MLX5_NAMESIZE IF_NAMESIZE\n+\n+#endif /* RTE_PMD_MLX5_OS_H_ */\ndiff --git a/drivers/net/mlx5/freebsd/mlx5_socket.c b/drivers/net/mlx5/freebsd/mlx5_socket.c\nnew file mode 100644\nindex 0000000000..6356b66dc4\n--- /dev/null\n+++ b/drivers/net/mlx5/freebsd/mlx5_socket.c\n@@ -0,0 +1,249 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright 2019 Mellanox Technologies, Ltd\n+ */\n+\n+#ifndef _GNU_SOURCE\n+#define _GNU_SOURCE\n+#endif\n+\n+#include <sys/types.h>\n+#include <sys/socket.h>\n+#include <sys/un.h>\n+#include <fcntl.h>\n+#include <stdio.h>\n+#include <unistd.h>\n+#include <sys/stat.h>\n+\n+#include \"rte_eal.h\"\n+#include \"mlx5_utils.h\"\n+#include \"mlx5.h\"\n+\n+/* PMD socket service for tools. */\n+\n+#define MLX5_SOCKET_PATH \"/var/tmp/dpdk_net_mlx5_%d\"\n+\n+int server_socket; /* Unix socket for primary process. */\n+struct rte_intr_handle server_intr_handle; /* Interrupt handler. */\n+\n+/**\n+ * Handle server pmd socket interrupts.\n+ */\n+static void\n+mlx5_pmd_socket_handle(void *cb __rte_unused)\n+{\n+\tint conn_sock;\n+\tint ret;\n+\tstruct cmsghdr *cmsg = NULL;\n+\tuint32_t data[MLX5_SENDMSG_MAX / sizeof(uint32_t)];\n+\tuint64_t flow_ptr = 0;\n+\tuint8_t  buf[CMSG_SPACE(sizeof(int))] = { 0 };\n+\tstruct iovec io = {\n+\t\t.iov_base = data,\n+\t\t.iov_len = sizeof(data),\n+\t};\n+\tstruct msghdr msg = {\n+\t\t.msg_iov = &io,\n+\t\t.msg_iovlen = 1,\n+\t\t.msg_control = buf,\n+\t\t.msg_controllen = sizeof(buf),\n+\t};\n+\n+\tuint32_t port_id;\n+\tint fd;\n+\tFILE *file = NULL;\n+\tstruct rte_eth_dev *dev;\n+\tstruct rte_flow_error err;\n+\tstruct mlx5_flow_dump_req  *dump_req;\n+\tstruct mlx5_flow_dump_ack  *dump_ack;\n+\n+\tmemset(data, 0, sizeof(data));\n+\t/* Accept the connection from the client. */\n+\tconn_sock = accept(server_socket, NULL, NULL);\n+\tif (conn_sock < 0) {\n+\t\tDRV_LOG(WARNING, \"connection failed: %s\", strerror(errno));\n+\t\treturn;\n+\t}\n+\tret = recvmsg(conn_sock, &msg, MSG_WAITALL);\n+\tif (ret != sizeof(struct mlx5_flow_dump_req)) {\n+\t\tDRV_LOG(WARNING, \"wrong message received: %s\",\n+\t\t\tstrerror(errno));\n+\t\tgoto error;\n+\t}\n+\n+\t/* Receive file descriptor. */\n+\tcmsg = CMSG_FIRSTHDR(&msg);\n+\tif (cmsg == NULL || cmsg->cmsg_type != SCM_RIGHTS ||\n+\t    cmsg->cmsg_len < sizeof(int)) {\n+\t\tDRV_LOG(WARNING, \"invalid file descriptor message\");\n+\t\tgoto error;\n+\t}\n+\tmemcpy(&fd, CMSG_DATA(cmsg), sizeof(fd));\n+\tfile = fdopen(fd, \"w\");\n+\tif (!file) {\n+\t\tDRV_LOG(WARNING, \"Failed to open file\");\n+\t\tgoto error;\n+\t}\n+\t/* Receive port number. */\n+\tif (msg.msg_iovlen != 1 || msg.msg_iov->iov_len < sizeof(uint16_t)) {\n+\t\tDRV_LOG(WARNING, \"wrong port number message\");\n+\t\tgoto error;\n+\t}\n+\n+\tdump_req = (struct mlx5_flow_dump_req *)msg.msg_iov->iov_base;\n+\tif (dump_req) {\n+\t\tport_id = dump_req->port_id;\n+\t\tflow_ptr = dump_req->flow_id;\n+\t} else {\n+\t\tDRV_LOG(WARNING, \"Invalid message\");\n+\t\tgoto error;\n+\t}\n+\n+\tif (!rte_eth_dev_is_valid_port(port_id)) {\n+\t\tDRV_LOG(WARNING, \"Invalid port %u\", port_id);\n+\t\tgoto error;\n+\t}\n+\n+\t/* Dump flow. */\n+\tdev = &rte_eth_devices[port_id];\n+\tif (flow_ptr == 0)\n+\t\tret = mlx5_flow_dev_dump(dev, NULL, file, NULL);\n+\telse\n+\t\tret = mlx5_flow_dev_dump(dev,\n+\t\t\t(struct rte_flow *)((uintptr_t)flow_ptr), file, &err);\n+\n+\t/* Set-up the ancillary data and reply. */\n+\tmsg.msg_controllen = 0;\n+\tmsg.msg_control = NULL;\n+\tmsg.msg_iovlen = 1;\n+\tmsg.msg_iov = &io;\n+\tdump_ack = (struct mlx5_flow_dump_ack *)data;\n+\tdump_ack->rc = -ret;\n+\tio.iov_len = sizeof(struct mlx5_flow_dump_ack);\n+\tio.iov_base = dump_ack;\n+\tdo {\n+\t\tret = sendmsg(conn_sock, &msg, 0);\n+\t} while (ret < 0 && errno == EINTR);\n+\tif (ret < 0)\n+\t\tDRV_LOG(WARNING, \"failed to send response %s\",\n+\t\t\tstrerror(errno));\n+error:\n+\tif (conn_sock >= 0)\n+\t\tclose(conn_sock);\n+\tif (file)\n+\t\tfclose(file);\n+}\n+\n+/**\n+ * Install interrupt handler.\n+ *\n+ * @param dev\n+ *   Pointer to Ethernet device.\n+ * @return\n+ *   0 on success, a negative errno value otherwise.\n+ */\n+static int\n+mlx5_pmd_interrupt_handler_install(void)\n+{\n+\tMLX5_ASSERT(server_socket);\n+\tserver_intr_handle.fd = server_socket;\n+\tserver_intr_handle.type = RTE_INTR_HANDLE_EXT;\n+\treturn rte_intr_callback_register(&server_intr_handle,\n+\t\t\t\t\t  mlx5_pmd_socket_handle, NULL);\n+}\n+\n+/**\n+ * Uninstall interrupt handler.\n+ */\n+static void\n+mlx5_pmd_interrupt_handler_uninstall(void)\n+{\n+\tif (server_socket) {\n+\t\tmlx5_intr_callback_unregister(&server_intr_handle,\n+\t\t\t\t\t      mlx5_pmd_socket_handle,\n+\t\t\t\t\t      NULL);\n+\t}\n+\tserver_intr_handle.fd = 0;\n+\tserver_intr_handle.type = RTE_INTR_HANDLE_UNKNOWN;\n+}\n+\n+/**\n+ * Initialise the socket to communicate with the secondary process\n+ *\n+ * @param[in] dev\n+ *   Pointer to Ethernet device.\n+ *\n+ * @return\n+ *   0 on success, a negative value otherwise.\n+ */\n+int\n+mlx5_pmd_socket_init(void)\n+{\n+\tstruct sockaddr_un sun = {\n+\t\t.sun_family = AF_UNIX,\n+\t};\n+\tint ret;\n+\tint flags;\n+\n+\tMLX5_ASSERT(rte_eal_process_type() == RTE_PROC_PRIMARY);\n+\tif (server_socket)\n+\t\treturn 0;\n+\t/*\n+\t * Initialize the socket to communicate with the secondary\n+\t * process.\n+\t */\n+\tret = socket(AF_UNIX, SOCK_STREAM, 0);\n+\tif (ret < 0) {\n+\t\tDRV_LOG(WARNING, \"Failed to open mlx5 socket: %s\",\n+\t\t\tstrerror(errno));\n+\t\tgoto error;\n+\t}\n+\tserver_socket = ret;\n+\tflags = fcntl(server_socket, F_GETFL, 0);\n+\tif (flags == -1)\n+\t\tgoto error;\n+\tret = fcntl(server_socket, F_SETFL, flags | O_NONBLOCK);\n+\tif (ret < 0)\n+\t\tgoto error;\n+\tsnprintf(sun.sun_path, sizeof(sun.sun_path), MLX5_SOCKET_PATH,\n+\t\t getpid());\n+\tremove(sun.sun_path);\n+\tret = bind(server_socket, (const struct sockaddr *)&sun, sizeof(sun));\n+\tif (ret < 0) {\n+\t\tDRV_LOG(WARNING,\n+\t\t\t\"cannot bind mlx5 socket: %s\", strerror(errno));\n+\t\tgoto close;\n+\t}\n+\tret = listen(server_socket, 0);\n+\tif (ret < 0) {\n+\t\tDRV_LOG(WARNING, \"cannot listen on mlx5 socket: %s\",\n+\t\t\tstrerror(errno));\n+\t\tgoto close;\n+\t}\n+\tif (mlx5_pmd_interrupt_handler_install()) {\n+\t\tDRV_LOG(WARNING, \"cannot register interrupt handler for mlx5 socket: %s\",\n+\t\t\tstrerror(errno));\n+\t\tgoto close;\n+\t}\n+\treturn 0;\n+close:\n+\tremove(sun.sun_path);\n+error:\n+\tclaim_zero(close(server_socket));\n+\tserver_socket = 0;\n+\tDRV_LOG(ERR, \"Cannot initialize socket: %s\", strerror(errno));\n+\treturn -errno;\n+}\n+\n+/**\n+ * Un-Initialize the pmd socket\n+ */\n+RTE_FINI(mlx5_pmd_socket_uninit)\n+{\n+\tif (!server_socket)\n+\t\treturn;\n+\tmlx5_pmd_interrupt_handler_uninstall();\n+\tclaim_zero(close(server_socket));\n+\tserver_socket = 0;\n+\tMKSTR(path, MLX5_SOCKET_PATH, getpid());\n+\tclaim_zero(remove(path));\n+}\n",
    "prefixes": [
        "v2",
        "10/41"
    ]
}