get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 86511,
    "url": "http://patches.dpdk.org/api/patches/86511/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20210114062512.45462-4-chenbo.xia@intel.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": "<20210114062512.45462-4-chenbo.xia@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210114062512.45462-4-chenbo.xia@intel.com",
    "date": "2021-01-14T06:25:07",
    "name": "[v3,3/8] emu: introduce emulated iavf driver",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "cb81bbaf0f128d7df948a9091a3983676e8ea4ee",
    "submitter": {
        "id": 1276,
        "url": "http://patches.dpdk.org/api/people/1276/?format=api",
        "name": "Chenbo Xia",
        "email": "chenbo.xia@intel.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20210114062512.45462-4-chenbo.xia@intel.com/mbox/",
    "series": [
        {
            "id": 14712,
            "url": "http://patches.dpdk.org/api/series/14712/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=14712",
            "date": "2021-01-14T06:25:04",
            "name": "Introduce emudev library and iavf emudev driver",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/14712/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/86511/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/86511/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 05970A0A02;\n\tThu, 14 Jan 2021 07:30:35 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id CBF92140E2A;\n\tThu, 14 Jan 2021 07:30:17 +0100 (CET)",
            "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n by mails.dpdk.org (Postfix) with ESMTP id 13250140E2A\n for <dev@dpdk.org>; Thu, 14 Jan 2021 07:30:15 +0100 (CET)",
            "from fmsmga002.fm.intel.com ([10.253.24.26])\n by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 13 Jan 2021 22:30:15 -0800",
            "from npg-dpdk-virtio-xiachenbo-nw.sh.intel.com ([10.67.119.123])\n by fmsmga002.fm.intel.com with ESMTP; 13 Jan 2021 22:30:13 -0800"
        ],
        "IronPort-SDR": [
            "\n 8W5evIHYEZssBdWsPmw3mPC+NXKJHwQFyakKqO19aodTwBiBgdiDD4aLZ8u2szl7dWpRxA5SBk\n A5uUq7yvQdKQ==",
            "\n rOKE2NHOnsqkqQbD14Rfv3TW2pRL4VDDUsfofL1FOPUyDlUeoYYqaNcgcUQ770/akiI8dxDL8l\n RABrH2Q79zDw=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9863\"; a=\"178407163\"",
            "E=Sophos;i=\"5.79,346,1602572400\"; d=\"scan'208\";a=\"178407163\"",
            "E=Sophos;i=\"5.79,346,1602572400\"; d=\"scan'208\";a=\"400799423\""
        ],
        "X-ExtLoop1": "1",
        "From": "Chenbo Xia <chenbo.xia@intel.com>",
        "To": "dev@dpdk.org,\n\tthomas@monjalon.net,\n\tdavid.marchand@redhat.com",
        "Cc": "stephen@networkplumber.org, cunming.liang@intel.com, xiuchun.lu@intel.com,\n miao.li@intel.com, jingjing.wu@intel.com, beilei.xing@intel.com",
        "Date": "Thu, 14 Jan 2021 14:25:07 +0800",
        "Message-Id": "<20210114062512.45462-4-chenbo.xia@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20210114062512.45462-1-chenbo.xia@intel.com>",
        "References": "<20201219062806.56477-1-chenbo.xia@intel.com>\n <20210114062512.45462-1-chenbo.xia@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v3 3/8] emu: introduce emulated iavf driver",
        "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": "This patch introduces emulated iavf driver. It is a vdev driver\nemulating all iavf device behavior except data path handling.\n\nSigned-off-by: Chenbo Xia <chenbo.xia@intel.com>\nSigned-off-by: Xiuchun Lu <xiuchun.lu@intel.com>\n---\n MAINTAINERS                          |   7 +\n drivers/emu/iavf/iavf_emu.c          |  30 ++++\n drivers/emu/iavf/iavf_emu_internal.h |  49 +++++++\n drivers/emu/iavf/iavf_emudev.c       | 209 +++++++++++++++++++++++++++\n drivers/emu/iavf/meson.build         |   8 +\n drivers/emu/iavf/rte_iavf_emu.h      |  43 ++++++\n drivers/emu/iavf/version.map         |   3 +\n drivers/emu/meson.build              |   6 +\n drivers/meson.build                  |   1 +\n 9 files changed, 356 insertions(+)\n create mode 100644 drivers/emu/iavf/iavf_emu.c\n create mode 100644 drivers/emu/iavf/iavf_emu_internal.h\n create mode 100644 drivers/emu/iavf/iavf_emudev.c\n create mode 100644 drivers/emu/iavf/meson.build\n create mode 100644 drivers/emu/iavf/rte_iavf_emu.h\n create mode 100644 drivers/emu/iavf/version.map\n create mode 100644 drivers/emu/meson.build",
    "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex f5f2c4fe15..3ef8bd1999 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -1276,6 +1276,13 @@ F: doc/guides/rawdevs/ntb.rst\n F: examples/ntb/\n F: doc/guides/sample_app_ug/ntb.rst\n \n+Emudev Drivers\n+--------------\n+\n+Intel iavf\n+M: Chenbo Xia <chenbo.xia@intel.com>\n+M: Xiuchun Lu <xiuchun.lu@intel.com>\n+F: drivers/emulation/iavf/\n \n Packet processing\n -----------------\ndiff --git a/drivers/emu/iavf/iavf_emu.c b/drivers/emu/iavf/iavf_emu.c\nnew file mode 100644\nindex 0000000000..98abfcdca2\n--- /dev/null\n+++ b/drivers/emu/iavf/iavf_emu.c\n@@ -0,0 +1,30 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2020 Intel Corporation\n+ */\n+\n+#include \"iavf_emu_internal.h\"\n+\n+static int\n+iavf_emu_dev_close(struct rte_emudev *dev)\n+{\n+\tstruct iavf_emudev *iavf;\n+\n+\t/* For now, we don't support device close when data\n+\t * path driver is attached\n+\t */\n+\tif (dev->backend_priv) {\n+\t\tEMU_IAVF_LOG(ERR, \"Close failed because of \"\n+\t\t\t\"data path attached\\n\");\n+\t\treturn -EPERM;\n+\t}\n+\n+\tiavf = (struct iavf_emudev *)dev->priv_data;\n+\tiavf_emu_uninit_device(iavf);\n+\tdev->priv_data = NULL;\n+\n+\treturn 0;\n+}\n+\n+struct rte_emudev_ops emu_iavf_ops = {\n+\t.dev_close = iavf_emu_dev_close,\n+};\ndiff --git a/drivers/emu/iavf/iavf_emu_internal.h b/drivers/emu/iavf/iavf_emu_internal.h\nnew file mode 100644\nindex 0000000000..a726bfe577\n--- /dev/null\n+++ b/drivers/emu/iavf/iavf_emu_internal.h\n@@ -0,0 +1,49 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2020 Intel Corporation\n+ */\n+\n+#ifndef _IAVF_EMU_ITNL_H\n+#define _IAVF_EMU_ITNL_H\n+\n+#include <stdint.h>\n+\n+#include <rte_log.h>\n+\n+#include \"rte_iavf_emu.h\"\n+\n+extern struct rte_emudev_ops emu_iavf_ops;\n+\n+extern int emu_iavf_logtype;\n+#define EMU_IAVF_LOG(level, ...) \\\n+\trte_log(RTE_LOG_ ## level, emu_iavf_logtype, \"EMU_IAVF: \" __VA_ARGS__)\n+\n+struct iavf_emu_intr_info {\n+\tint enable;\n+\tint fd;\n+};\n+\n+struct iavf_emu_intr {\n+\tuint32_t intr_num;\n+\tstruct iavf_emu_intr_info info[RTE_IAVF_EMU_MAX_INTR];\n+};\n+\n+struct iavf_emu_lanQ {\n+\tuint16_t db_size;\n+\tvoid *doorbell;\n+};\n+\n+struct iavf_emudev {\n+\tstruct rte_emudev *edev;\n+\t/* Maximum LANQ queue pair that this emulated iavf has */\n+\tuint16_t max_lanqp;\n+\t/* Maximum LANQ queue pair number that back-end driver can use */\n+\tuint16_t max_be_lanqp;\n+\tunsigned int numa_node;\n+\tchar *sock_addr;\n+\tstruct rte_iavf_emu_mem *mem;\n+\tstruct iavf_emu_intr *intr;\n+\tstruct iavf_emu_lanQ *lanq;\n+};\n+\n+void iavf_emu_uninit_device(struct iavf_emudev *dev);\n+#endif\ndiff --git a/drivers/emu/iavf/iavf_emudev.c b/drivers/emu/iavf/iavf_emudev.c\nnew file mode 100644\nindex 0000000000..35c3557188\n--- /dev/null\n+++ b/drivers/emu/iavf/iavf_emudev.c\n@@ -0,0 +1,209 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2020 Intel Corporation\n+ */\n+\n+#include <rte_kvargs.h>\n+#include <rte_emudev.h>\n+#include <rte_emudev_vdev.h>\n+\n+#include \"iavf_emu_internal.h\"\n+\n+#define EMU_IAVF_SOCK_ARG \"sock\"\n+#define EMU_IAVF_QUEUES_ARG \"queues\"\n+\n+static const char * const emu_iavf_valid_arg[] = {\n+\tEMU_IAVF_SOCK_ARG,\n+\tEMU_IAVF_QUEUES_ARG,\n+\tNULL\n+};\n+\n+static inline int\n+save_sockaddr(const char *key __rte_unused, const char *value,\n+\tvoid *extra_args)\n+{\n+\tconst char **sock_addr = extra_args;\n+\n+\tif (value == NULL)\n+\t\treturn -1;\n+\n+\t*sock_addr = value;\n+\n+\treturn 0;\n+}\n+\n+static inline int\n+save_int(const char *key __rte_unused, const char *value, void *extra_args)\n+{\n+\tuint16_t *n = extra_args;\n+\n+\tif (value == NULL || extra_args == NULL)\n+\t\treturn -EINVAL;\n+\n+\t*n = (uint16_t)strtoul(value, NULL, 0);\n+\tif (*n == USHRT_MAX && errno == ERANGE)\n+\t\treturn -1;\n+\n+\treturn 0;\n+}\n+\n+static int\n+iavf_emu_init_device(struct iavf_emudev *dev,\n+\tchar *sock_addr, uint16_t queues, unsigned int numa_node)\n+{\n+\tdev->sock_addr = rte_malloc_socket(\"sock_addr\",\n+\t\tstrlen(sock_addr) + 1, 0, numa_node);\n+\tif (!dev->sock_addr) {\n+\t\tEMU_IAVF_LOG(ERR, \"Failed to alloc sock addr\\n\");\n+\t\tgoto exit;\n+\t}\n+\tstrcpy(dev->sock_addr, sock_addr);\n+\n+\tdev->mem = rte_zmalloc_socket(\"iavf_emu_mem\",\n+\t\t\tsizeof(struct rte_iavf_emu_mem),\n+\t\t\t0, numa_node);\n+\tif (!dev->mem) {\n+\t\tEMU_IAVF_LOG(ERR, \"Unable to alloc iavf_emu_mem.\\n\");\n+\t\tgoto err_mem;\n+\t}\n+\n+\tdev->intr = rte_zmalloc_socket(\"iavf_emu_intr\",\n+\t\t\tsizeof(struct iavf_emu_intr),\n+\t\t\t0, numa_node);\n+\tif (!dev->intr) {\n+\t\tEMU_IAVF_LOG(ERR, \"Unable to alloc iavf_emu_intr.\\n\");\n+\t\tgoto err_intr;\n+\t}\n+\n+\tdev->lanq = rte_zmalloc_socket(\"iavf_emu_lanQ\",\n+\t\t\tsizeof(struct iavf_emu_lanQ) * queues * 2,\n+\t\t\t0, numa_node);\n+\tif (!dev->lanq) {\n+\t\tEMU_IAVF_LOG(ERR, \"Unable to alloc iavf_emu_lanQ.\\n\");\n+\t\tgoto err_lanq;\n+\t}\n+\n+\tdev->numa_node = numa_node;\n+\n+\treturn 0;\n+\n+err_lanq:\n+\trte_free(dev->lanq);\n+err_intr:\n+\trte_free(dev->intr);\n+err_mem:\n+\trte_free(dev->sock_addr);\n+exit:\n+\treturn -1;\n+}\n+\n+void\n+iavf_emu_uninit_device(struct iavf_emudev *dev)\n+{\n+\trte_free(dev->sock_addr);\n+\trte_free(dev->mem);\n+\trte_free(dev->intr);\n+\trte_free(dev->lanq);\n+}\n+\n+static int\n+rte_emu_iavf_probe(struct rte_vdev_device *dev)\n+{\n+\tstruct rte_kvargs *kvlist = NULL;\n+\tstruct rte_emudev *edev;\n+\tstruct iavf_emudev *iavf;\n+\tchar *sock_addr;\n+\tuint16_t queues;\n+\tint ret = 0;\n+\n+\tkvlist = rte_kvargs_parse(rte_vdev_device_args(dev),\n+\t\temu_iavf_valid_arg);\n+\tif (kvlist == NULL)\n+\t\treturn -1;\n+\n+\tif (rte_kvargs_count(kvlist, EMU_IAVF_SOCK_ARG) == 1) {\n+\t\tret = rte_kvargs_process(kvlist, EMU_IAVF_SOCK_ARG,\n+\t\t\t\t\t &save_sockaddr, &sock_addr);\n+\t\tif (ret < 0)\n+\t\t\tgoto err;\n+\t} else {\n+\t\tret = -1;\n+\t\tgoto err;\n+\t}\n+\n+\tif (rte_kvargs_count(kvlist, EMU_IAVF_QUEUES_ARG) == 1) {\n+\t\tret = rte_kvargs_process(kvlist, EMU_IAVF_QUEUES_ARG,\n+\t\t\t\t\t &save_int, &queues);\n+\t\tif (ret < 0 || queues > RTE_MAX_QUEUES_PER_PORT ||\n+\t\t\tqueues > RTE_IAVF_EMU_MAX_QP_NUM)\n+\t\t\tgoto err;\n+\n+\t} else\n+\t\tqueues = 1;\n+\n+\tif (dev->device.numa_node == SOCKET_ID_ANY)\n+\t\tdev->device.numa_node = rte_socket_id();\n+\n+\tedev = rte_emu_vdev_allocate(dev, sizeof(*iavf));\n+\tif (!edev) {\n+\t\tEMU_IAVF_LOG(ERR, \"Failed to allocate emu_vdev\\n\");\n+\t\tret = -1;\n+\t\tgoto err;\n+\t}\n+\tedev->dev_ops = &emu_iavf_ops;\n+\tedev->dev_info.region_num = RTE_IAVF_EMU_MAPPABLE_REG_NUM;\n+\tedev->dev_info.max_qp_num = queues + RTE_IAVF_EMU_ADMINQ_NUM / 2;\n+\n+\tstrcpy(edev->dev_info.dev_type, RTE_IAVF_EMUDEV_TYPE);\n+\n+\tiavf = (struct iavf_emudev *)edev->priv_data;\n+\tret = iavf_emu_init_device(iavf, sock_addr, queues,\n+\t\tdev->device.numa_node);\n+\tif (ret) {\n+\t\tEMU_IAVF_LOG(ERR, \"Failed to init new iavf device\\n\");\n+\t\tret = -1;\n+\t\tgoto err_ndev;\n+\t}\n+\n+\tiavf->edev = edev;\n+\t/* If not configured, we assume back-end driver\n+\t * can use all queues of emulated iavf\n+\t */\n+\tiavf->max_be_lanqp = queues;\n+\tiavf->max_lanqp = queues;\n+\tedev->priv_data = (void *)iavf;\n+\n+\tedev->started = 1;\n+\trte_kvargs_free(kvlist);\n+\treturn 0;\n+\n+err_ndev:\n+\trte_emudev_release(edev);\n+err:\n+\trte_kvargs_free(kvlist);\n+\treturn ret;\n+}\n+\n+static int\n+rte_emu_iavf_remove(struct rte_vdev_device *dev)\n+{\n+\tstruct rte_emudev *emu_dev;\n+\n+\t/* Find the emudev entry */\n+\temu_dev = rte_emudev_allocated(rte_vdev_device_name(dev));\n+\tif (!emu_dev)\n+\t\treturn 0;\n+\n+\treturn rte_emudev_close(emu_dev->dev_id);\n+}\n+\n+static struct rte_vdev_driver emu_iavf_drv = {\n+\t.probe = rte_emu_iavf_probe,\n+\t.remove = rte_emu_iavf_remove,\n+};\n+\n+RTE_PMD_REGISTER_VDEV(emu_iavf, emu_iavf_drv);\n+RTE_PMD_REGISTER_PARAM_STRING(emu_iavf,\n+\t\"sock=<path> \"\n+\t\"queues=<int> \");\n+\n+RTE_LOG_REGISTER(emu_iavf_logtype, emu.iavf, INFO);\ndiff --git a/drivers/emu/iavf/meson.build b/drivers/emu/iavf/meson.build\nnew file mode 100644\nindex 0000000000..58c2a90383\n--- /dev/null\n+++ b/drivers/emu/iavf/meson.build\n@@ -0,0 +1,8 @@\n+# SPDX-License-Identifier: BSD-3-Clause\n+# Copyright(c) 2020 Intel Corporation\n+\n+sources = files('iavf_emu.c', 'iavf_emudev.c')\n+\n+deps += ['bus_vdev', 'emudev']\n+\n+headers = files('rte_iavf_emu.h')\ndiff --git a/drivers/emu/iavf/rte_iavf_emu.h b/drivers/emu/iavf/rte_iavf_emu.h\nnew file mode 100644\nindex 0000000000..623c3c5d99\n--- /dev/null\n+++ b/drivers/emu/iavf/rte_iavf_emu.h\n@@ -0,0 +1,43 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2020 Intel Corporation\n+ */\n+\n+#ifndef _IAVF_EMU_H\n+#define _IAVF_EMU_H\n+\n+#include <stdint.h>\n+\n+#include <rte_emudev.h>\n+\n+#define RTE_IAVF_EMUDEV_TYPE \"iavf\"\n+#define RTE_IAVF_EMU_MAX_MEM_REGIONS 256\n+#define RTE_IAVF_EMU_MAX_QP_NUM 256\n+#define RTE_IAVF_EMU_MAX_INTR 32\n+\n+enum {\n+\tRTE_IAVF_EMU_ADMINQ_TXQ = 0,\n+\tRTE_IAVF_EMU_ADMINQ_RXQ = 1,\n+\tRTE_IAVF_EMU_ADMINQ_NUM = 2,\n+};\n+\n+enum {\n+\tRTE_IAVF_EMU_MAPPABLE_REG_BAR0 = 0,\n+\tRTE_IAVF_EMU_MAPPABLE_REG_BAR3 = 1,\n+\tRTE_IAVF_EMU_MAPPABLE_REG_NUM = 2,\n+};\n+\n+struct rte_iavf_emu_mem_reg {\n+\tuint64_t guest_phys_addr;\n+\tuint64_t host_user_addr;\n+\tuint64_t size;\n+\tvoid\t *mmap_addr;\n+\tuint64_t mmap_size;\n+\tint fd;\n+};\n+\n+struct rte_iavf_emu_mem {\n+\tuint32_t region_num;\n+\tstruct rte_iavf_emu_mem_reg regions[RTE_IAVF_EMU_MAX_MEM_REGIONS];\n+};\n+\n+#endif\ndiff --git a/drivers/emu/iavf/version.map b/drivers/emu/iavf/version.map\nnew file mode 100644\nindex 0000000000..4a76d1d52d\n--- /dev/null\n+++ b/drivers/emu/iavf/version.map\n@@ -0,0 +1,3 @@\n+DPDK_21 {\n+\tlocal: *;\n+};\ndiff --git a/drivers/emu/meson.build b/drivers/emu/meson.build\nnew file mode 100644\nindex 0000000000..acc8c395ef\n--- /dev/null\n+++ b/drivers/emu/meson.build\n@@ -0,0 +1,6 @@\n+# SPDX-License-Identifier: BSD-3-Clause\n+# Copyright(c) 2020 Intel Corporation\n+\n+drivers = ['iavf']\n+std_deps = ['emudev']\n+config_flag_fmt = 'RTE_LIBRTE_PMD_@0@_EMUDEV'\ndiff --git a/drivers/meson.build b/drivers/meson.build\nindex f9febc579e..64c34d2f9f 100644\n--- a/drivers/meson.build\n+++ b/drivers/meson.build\n@@ -8,6 +8,7 @@ subdirs = [\n \t'common/mlx5', # depends on bus.\n \t'common/qat', # depends on bus.\n \t'mempool', # depends on common and bus.\n+\t'emu', # depends on common and bus.\n \t'net',     # depends on common, bus, mempool\n \t'raw',     # depends on common, bus and net.\n \t'crypto',  # depends on common, bus and mempool (net in future).\n",
    "prefixes": [
        "v3",
        "3/8"
    ]
}