Show a cover letter.

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

{
    "id": 75995,
    "url": "http://patches.dpdk.org/api/covers/75995/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/cover/20200826151445.51500-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": "<20200826151445.51500-1-cristian.dumitrescu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200826151445.51500-1-cristian.dumitrescu@intel.com",
    "date": "2020-08-26T15:14:05",
    "name": "[00/40] 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/20200826151445.51500-1-cristian.dumitrescu@intel.com/mbox/",
    "series": [
        {
            "id": 11806,
            "url": "http://patches.dpdk.org/api/series/11806/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=11806",
            "date": "2020-08-26T15:14:05",
            "name": "Pipeline alignment with the P4 language",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/11806/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/covers/75995/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 615B6A04B4;\n\tWed, 26 Aug 2020 17:15:04 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id B310C58C4;\n\tWed, 26 Aug 2020 17:15:03 +0200 (CEST)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n by dpdk.org (Postfix) with ESMTP id E5D84B62\n for <dev@dpdk.org>; Wed, 26 Aug 2020 17:15:01 +0200 (CEST)",
            "from orsmga004.jf.intel.com ([10.7.209.38])\n by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 26 Aug 2020 08:14:47 -0700",
            "from silpixa00400573.ir.intel.com (HELO\n silpixa00400573.ger.corp.intel.com) ([10.237.223.107])\n by orsmga004.jf.intel.com with ESMTP; 26 Aug 2020 08:14:46 -0700"
        ],
        "IronPort-SDR": [
            "\n W7gDkcdv+6XPxxbd1JmGJgchdjENPCVC5MON+/ENUYhBPcFlffj+9nnNv6TlgZyFqe7+83COl1\n J5a2NChKJw0A==",
            "\n LRZnt+Sw/cGA/UmeDVkBOaDDyi7YG0NynL8GRFei3ndsi6ATB+CYYKTfuY5AfN3G+232+/JlIw\n 1CXaM4imgD4A=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9725\"; a=\"153879474\"",
            "E=Sophos;i=\"5.76,356,1592895600\"; d=\"scan'208\";a=\"153879474\"",
            "E=Sophos;i=\"5.76,356,1592895600\"; d=\"scan'208\";a=\"444081247\""
        ],
        "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": "Wed, 26 Aug 2020 16:14:05 +0100",
        "Message-Id": "<20200826151445.51500-1-cristian.dumitrescu@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "Subject": "[dpdk-dev] [PATCH 00/40] 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\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 (40):\n  pipeline: add pipeline\n  pipeline: add input port\n  pipeline: add output port\n  pipeline: add headers and meta-data\n  pipeline: add extern objects and functions\n  pipeline: add action\n  pipeline: add tables\n  pipeline: add pipeline instructions\n  pipeline: add rx and extract instructions\n  pipeline: add tx and emit instructions\n  pipeline: add header validate and invalidate instructions\n  pipeline: add mov instruction\n  pipeline: add dma instruction\n  pipeline: introduce add instruction\n  pipeline: introduce sub instruction\n  pipeline: introduce ckadd instruction\n  pipeline: introduce cksub instruction\n  pipeline: introduce and instruction\n  pipeline: introduce or instruction\n  pipeline: introduce xor instruction\n  pipeline: introduce shl instruction\n  pipeline: introduce shr instruction\n  pipeline: introduce table instruction\n  pipeline: introduce extern instruction\n  pipeline: introduce jmp and return instructions\n  pipeline: add instruction verifier\n  pipeline: add instruction optimizer\n  pipeline: add pipeline query API\n  pipeline: add pipeline flush\n  pipeline: add instruction description\n  pipeline: add table update high level API\n  port: add ethernet device port\n  port: add source and sink ports\n  table: add exact match 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 encap example\n\n examples/Makefile                             |    1 +\n examples/meson.build                          |    1 +\n examples/pipeline/Makefile                    |   85 +\n examples/pipeline/cli.c                       | 1394 ++++\n examples/pipeline/cli.h                       |   19 +\n examples/pipeline/conn.c                      |  331 +\n examples/pipeline/conn.h                      |   50 +\n examples/pipeline/example_l2fwd.c             |  125 +\n examples/pipeline/example_l2fwd_macswp.c      |  146 +\n examples/pipeline/example_vxlan.c             |  318 +\n examples/pipeline/examples/l2fwd.cli          |   25 +\n examples/pipeline/examples/l2fwd_macswp.cli   |   25 +\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.py           |   71 +\n examples/pipeline/examples/vxlan.txt          |   16 +\n examples/pipeline/examples/vxlan_pcap.cli     |   22 +\n examples/pipeline/main.c                      |  193 +\n examples/pipeline/meson.build                 |   21 +\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/Makefile                  |    5 +\n lib/librte_pipeline/meson.build               |   13 +-\n lib/librte_pipeline/rte_pipeline_version.map  |   43 +-\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        |  685 ++\n lib/librte_port/Makefile                      |    5 +\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/Makefile                     |    3 +\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 47 files changed, 16516 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/example_l2fwd.c\n create mode 100644 examples/pipeline/example_l2fwd_macswp.c\n create mode 100644 examples/pipeline/example_vxlan.c\n create mode 100644 examples/pipeline/examples/l2fwd.cli\n create mode 100644 examples/pipeline/examples/l2fwd_macswp.cli\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.py\n create mode 100644 examples/pipeline/examples/vxlan.txt\n create mode 100644 examples/pipeline/examples/vxlan_pcap.cli\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_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"
}