Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/100778/?format=api
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" ] }{ "id": 100778, "url": "