Show a cover letter.

GET /api/covers/76934/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 76934,
    "url": "http://patches.dpdk.org/api/covers/76934/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/cover/20200908201830.74206-1-cristian.dumitrescu@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": "<20200908201830.74206-1-cristian.dumitrescu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200908201830.74206-1-cristian.dumitrescu@intel.com",
    "date": "2020-09-08T20:17:49",
    "name": "[v3,00/41] Pipeline alignment with the P4 language",
    "submitter": {
        "id": 19,
        "url": "http://patches.dpdk.org/api/people/19/?format=api",
        "name": "Cristian Dumitrescu",
        "email": "cristian.dumitrescu@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/cover/20200908201830.74206-1-cristian.dumitrescu@intel.com/mbox/",
    "series": [
        {
            "id": 12034,
            "url": "http://patches.dpdk.org/api/series/12034/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12034",
            "date": "2020-09-08T20:17:52",
            "name": "Pipeline alignment with the P4 language",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/12034/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/covers/76934/comments/",
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id E8665A04B1;\n\tTue,  8 Sep 2020 22:19:01 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 7979F1C0CD;\n\tTue,  8 Sep 2020 22:18:56 +0200 (CEST)",
            "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n by dpdk.org (Postfix) with ESMTP id 3A5D71DB8\n for <dev@dpdk.org>; Tue,  8 Sep 2020 22:18:53 +0200 (CEST)",
            "from fmsmga006.fm.intel.com ([10.253.24.20])\n by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 08 Sep 2020 13:18:31 -0700",
            "from silpixa00400573.ir.intel.com (HELO\n silpixa00400573.ger.corp.intel.com) ([10.237.223.107])\n by fmsmga006.fm.intel.com with ESMTP; 08 Sep 2020 13:18:30 -0700"
        ],
        "IronPort-SDR": [
            "\n j9+sSZhZ+6C/N0qsbyAXECcmrQ6/3igw+n9kBOM64mBDJLCp1+ZK8gD9EJ8gCJfbldvCMTphbg\n t0tgD7ecFZxA==",
            "\n TYaReBAkvmoN+v2nfB9dWwm3WdVBoKvoRIpvSwEy8xnE9xhPWO1MIZ7AlwihYk1bUYLsQcMjdS\n OsfEjPjlqsbg=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9738\"; a=\"145939359\"",
            "E=Sophos;i=\"5.76,407,1592895600\"; d=\"scan'208\";a=\"145939359\"",
            "E=Sophos;i=\"5.76,406,1592895600\"; d=\"scan'208\";a=\"504493348\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Cristian Dumitrescu <cristian.dumitrescu@intel.com>",
        "To": "dev@dpdk.org",
        "Date": "Tue,  8 Sep 2020 21:17:49 +0100",
        "Message-Id": "<20200908201830.74206-1-cristian.dumitrescu@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20200907214032.95052-2-cristian.dumitrescu@intel.com>",
        "References": "<20200907214032.95052-2-cristian.dumitrescu@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v3 00/41] Pipeline alignment with the P4 language",
        "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 <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 set introduces a new pipeline type that combines the DPDK\nperformance with the flexibility of the P4-16 language[1]. The new API\ncan be used either by itself to code a complete software switch (SWX)\nor data plane app, or in combination with the open-source P4 compiler\nP4C [2], potentially acting as a P4C back-end, thus allowing the P4\nprograms to be translated to the DPDK API and run on multi-core CPUs.\n\nMain new features:\n\n* Nothing is hard-wired, everything is dynamically defined: The packet\n  headers (i.e. protocols), the packet meta-data, the actions, the\n  tables and the pipeline itself are dynamically defined instead of\n  having to be selected from a pre-defined set.\n\n* Instructions: The actions and the life of the packet through the\n  pipeline are defined with instructions that manipulate the pipeline\n  objects mentioned above. The pipeline is the main function of the\n  packet program, with actions as subroutines triggered by the tables.\n\n* Call external plugins: Extern objects and functions can be defined\n  to call functionality that cannot be efficiently implemented with\n  the existing pipeline-oriented instruction set, such as: special\n  error detecting/correcting codes, crypto, meters, stats arrays,\n  heuristics, etc.\n\n* Better control plane interaction: Transaction-oriented table update\n  mechanism that supports multi-table atomic updates. Multiple tables\n  can be updated in a single step with only the before and after table\n  sets visible to the packets. Alignment with P4Runtime [3].\n\n* Performance: Multiple packets are in-flight within the pipeline at\n  any moment. Each packet is owned by a different time-sharing thread\n  in run-to-completion, with the thread pausing before memory access\n  operations such as packet I/O and table lookup to allow the memory\n  prefetch to complete. The instructions are verified and translated\n  at initialization time with no run-time impact. The instructions are\n  also optimized to detect and \"fuse\" frequently used patterns into\n  vector-like instructions transparently to the user.\n\nAPI deprecation and maturing roadmap:\n* The existing pipeline stable API (rte_pipeline.h) to be deprecated\n  prior to and removed as part of the DPDK 21.11 LTS release. \n* The new SWX pipeline experimental API (rte_swx_pipeline.h) to mature\n  and become stable as part of the same DPDK 21.11 LTS release.\n\nV3 changes:\n* Removed the library Makefile support to align with the latest DPDK.\n\nV2 changes:\n* Updated the title and commit messages to reflect the introduction of\n  the new SWX pipeline type.\n* Added the API deprecation and maturing roadmap to the cover letter.\n* Added support for building the SWX pipeline based on specification\n  file with syntax aligned to the P4 language. The spec file may be\n  generated by the P4C compiler in the future (see patch 32). Reworked\n  the examples accordingly (see patches 39, 40 and 41).\n* Added support for the SWX sink port (used for packet drop or log)\n  when PCAP library is disabled from the build.\n* Added checks to the application CLI commands to prevent execution\n  when dependencies of the current command have previously failed (see\n  patch 38).\n* Fixed build warning for 32-bit targets due to the printing of 64-bit\n  statistics counters (see patch 38).\n\n[1] P4-16 specification: https://p4.org/p4-spec/docs/P4-16-v1.2.1.pdf\n[2] P4-16 compiler: https://github.com/p4lang/p4c\n[3] P4Runtime specification:\n    https://p4.org/p4runtime/spec/v1.2.0/P4Runtime-Spec.pdf\n\nCristian Dumitrescu (41):\n  pipeline: add new SWX pipeline type\n  pipeline: add SWX pipeline input port\n  pipeline: add SWX pipeline output port\n  pipeline: add SWX headers and meta-data\n  pipeline: add SWX extern objects and funcs\n  pipeline: add SWX pipeline action\n  pipeline: add SWX pipeline tables\n  pipeline: add SWX pipeline instructions\n  pipeline: add SWX rx and extract instructions\n  pipeline: add SWX tx and emit instructions\n  pipeline: add header validate and invalidate SWX instructions\n  pipeline: add SWX mov instruction\n  pipeline: add SWX dma instruction\n  pipeline: introduce SWX add instruction\n  pipeline: introduce SWX sub instruction\n  pipeline: introduce SWX ckadd instruction\n  pipeline: introduce SWX cksub instruction\n  pipeline: introduce SWX and instruction\n  pipeline: introduce SWX or instruction\n  pipeline: introduce SWX xor instruction\n  pipeline: introduce SWX shl instruction\n  pipeline: introduce SWX shr instruction\n  pipeline: introduce SWX table instruction\n  pipeline: introduce SWX extern instruction\n  pipeline: introduce SWX jmp and return instructions\n  pipeline: add SWX instruction description\n  pipeline: add SWX instruction verifier\n  pipeline: add SWX instruction optimizer\n  pipeline: add SWX pipeline query API\n  pipeline: add SWX pipeline flush\n  pipeline: add SWX table update high level API\n  pipeline: add SWX pipeline specification file\n  port: add ethernet device SWX port\n  port: add source and sink SWX ports\n  table: add exact match SWX table\n  examples/pipeline: add new example application\n  examples/pipeline: add message passing mechanism\n  examples/pipeline: add configuration commands\n  examples/pipeline: add l2fwd example\n  examples/pipeline: add l2fwd with MAC swap example\n  examples/pipeline: add VXLAN encapsulation example\n\n examples/meson.build                          |    1 +\n examples/pipeline/Makefile                    |   53 +\n examples/pipeline/cli.c                       | 1400 ++++\n examples/pipeline/cli.h                       |   19 +\n examples/pipeline/conn.c                      |  331 +\n examples/pipeline/conn.h                      |   50 +\n examples/pipeline/examples/l2fwd.cli          |   25 +\n examples/pipeline/examples/l2fwd.spec         |   42 +\n examples/pipeline/examples/l2fwd_macswp.cli   |   25 +\n examples/pipeline/examples/l2fwd_macswp.spec  |   59 +\n .../pipeline/examples/l2fwd_macswp_pcap.cli   |   20 +\n examples/pipeline/examples/l2fwd_pcap.cli     |   20 +\n examples/pipeline/examples/packet.txt         |  102 +\n examples/pipeline/examples/vxlan.cli          |   27 +\n examples/pipeline/examples/vxlan.spec         |  173 +\n examples/pipeline/examples/vxlan_pcap.cli     |   22 +\n examples/pipeline/examples/vxlan_table.py     |   71 +\n examples/pipeline/examples/vxlan_table.txt    |   16 +\n examples/pipeline/main.c                      |  193 +\n examples/pipeline/meson.build                 |   18 +\n examples/pipeline/obj.c                       |  470 ++\n examples/pipeline/obj.h                       |  131 +\n examples/pipeline/thread.c                    |  549 ++\n examples/pipeline/thread.h                    |   28 +\n lib/librte_pipeline/meson.build               |   14 +-\n lib/librte_pipeline/rte_pipeline_version.map  |   44 +-\n lib/librte_pipeline/rte_swx_ctl.c             | 1552 ++++\n lib/librte_pipeline/rte_swx_ctl.h             |  568 ++\n lib/librte_pipeline/rte_swx_extern.h          |   98 +\n lib/librte_pipeline/rte_swx_pipeline.c        | 7197 +++++++++++++++++\n lib/librte_pipeline/rte_swx_pipeline.h        |  711 ++\n lib/librte_pipeline/rte_swx_pipeline_spec.c   | 1439 ++++\n lib/librte_port/meson.build                   |    9 +-\n lib/librte_port/rte_port_version.map          |    5 +-\n lib/librte_port/rte_swx_port.h                |  202 +\n lib/librte_port/rte_swx_port_ethdev.c         |  313 +\n lib/librte_port/rte_swx_port_ethdev.h         |   54 +\n lib/librte_port/rte_swx_port_source_sink.c    |  335 +\n lib/librte_port/rte_swx_port_source_sink.h    |   57 +\n lib/librte_table/meson.build                  |    7 +-\n lib/librte_table/rte_swx_table.h              |  295 +\n lib/librte_table/rte_swx_table_em.c           |  851 ++\n lib/librte_table/rte_swx_table_em.h           |   30 +\n lib/librte_table/rte_table_version.map        |    7 +\n 44 files changed, 17625 insertions(+), 8 deletions(-)\n create mode 100644 examples/pipeline/Makefile\n create mode 100644 examples/pipeline/cli.c\n create mode 100644 examples/pipeline/cli.h\n create mode 100644 examples/pipeline/conn.c\n create mode 100644 examples/pipeline/conn.h\n create mode 100644 examples/pipeline/examples/l2fwd.cli\n create mode 100644 examples/pipeline/examples/l2fwd.spec\n create mode 100644 examples/pipeline/examples/l2fwd_macswp.cli\n create mode 100644 examples/pipeline/examples/l2fwd_macswp.spec\n create mode 100644 examples/pipeline/examples/l2fwd_macswp_pcap.cli\n create mode 100644 examples/pipeline/examples/l2fwd_pcap.cli\n create mode 100644 examples/pipeline/examples/packet.txt\n create mode 100644 examples/pipeline/examples/vxlan.cli\n create mode 100644 examples/pipeline/examples/vxlan.spec\n create mode 100644 examples/pipeline/examples/vxlan_pcap.cli\n create mode 100644 examples/pipeline/examples/vxlan_table.py\n create mode 100644 examples/pipeline/examples/vxlan_table.txt\n create mode 100644 examples/pipeline/main.c\n create mode 100644 examples/pipeline/meson.build\n create mode 100644 examples/pipeline/obj.c\n create mode 100644 examples/pipeline/obj.h\n create mode 100644 examples/pipeline/thread.c\n create mode 100644 examples/pipeline/thread.h\n create mode 100644 lib/librte_pipeline/rte_swx_ctl.c\n create mode 100644 lib/librte_pipeline/rte_swx_ctl.h\n create mode 100644 lib/librte_pipeline/rte_swx_extern.h\n create mode 100644 lib/librte_pipeline/rte_swx_pipeline.c\n create mode 100644 lib/librte_pipeline/rte_swx_pipeline.h\n create mode 100644 lib/librte_pipeline/rte_swx_pipeline_spec.c\n create mode 100644 lib/librte_port/rte_swx_port.h\n create mode 100644 lib/librte_port/rte_swx_port_ethdev.c\n create mode 100644 lib/librte_port/rte_swx_port_ethdev.h\n create mode 100644 lib/librte_port/rte_swx_port_source_sink.c\n create mode 100644 lib/librte_port/rte_swx_port_source_sink.h\n create mode 100644 lib/librte_table/rte_swx_table.h\n create mode 100644 lib/librte_table/rte_swx_table_em.c\n create mode 100644 lib/librte_table/rte_swx_table_em.h"
}