Show a cover letter.

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

{
    "id": 76976,
    "url": "http://patches.dpdk.org/api/covers/76976/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/cover/20200909002247.864844-1-patrick.fu@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": "<20200909002247.864844-1-patrick.fu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200909002247.864844-1-patrick.fu@intel.com",
    "date": "2020-09-09T00:22:44",
    "name": "[v1,0/3] lib: introduce traffic mirroring lib",
    "submitter": {
        "id": 1781,
        "url": "http://patches.dpdk.org/api/people/1781/?format=api",
        "name": "Patrick Fu",
        "email": "patrick.fu@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/cover/20200909002247.864844-1-patrick.fu@intel.com/mbox/",
    "series": [
        {
            "id": 12036,
            "url": "http://patches.dpdk.org/api/series/12036/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12036",
            "date": "2020-09-09T00:22:44",
            "name": "lib: introduce traffic mirroring lib",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/12036/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/covers/76976/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 45C93A04B1;\n\tWed,  9 Sep 2020 02:28:26 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 914BD4C99;\n\tWed,  9 Sep 2020 02:28:25 +0200 (CEST)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n by dpdk.org (Postfix) with ESMTP id F2B3AA3\n for <dev@dpdk.org>; Wed,  9 Sep 2020 02:28:22 +0200 (CEST)",
            "from fmsmga008.fm.intel.com ([10.253.24.58])\n by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 08 Sep 2020 17:28:21 -0700",
            "from npg-dpdk-patrickfu-casc2.sh.intel.com ([10.67.119.92])\n by fmsmga008.fm.intel.com with ESMTP; 08 Sep 2020 17:28:18 -0700"
        ],
        "IronPort-SDR": [
            "\n dA07BK+o7+l8zB1hILFDBjm+ULNcP9SIYUEDgZqkJ0SFHqa9v7AUqM3nC/JMTmgos6s3GL9iDS\n yffJjG4PSTUA==",
            "\n L2Zw7FCeuYA+JF+yzF614eaXPjusaq3AEguEEcEaJGK6do/6SHVjlkzJqDUVsiR9ypZvI/GpLR\n ma4PK5ZYFc+A=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9738\"; a=\"155729881\"",
            "E=Sophos;i=\"5.76,407,1592895600\"; d=\"scan'208\";a=\"155729881\"",
            "E=Sophos;i=\"5.76,407,1592895600\"; d=\"scan'208\";a=\"286051320\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Patrick Fu <patrick.fu@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "thomas@monjalon.net, ferruh.yigit@intel.com, maxime.coquelin@redhat.com,\n bruce.richardson@intel.com, mm6021@att.com, zhihong.wang@intel.com,\n liang-min.wang@intel.com, konstantin.ananyev@intel.com,\n timothy.miskell@intel.com, cunming.liang@intel.com, patrick.fu@intel.com",
        "Date": "Wed,  9 Sep 2020 08:22:44 +0800",
        "Message-Id": "<20200909002247.864844-1-patrick.fu@intel.com>",
        "X-Mailer": "git-send-email 2.18.4",
        "Subject": "[dpdk-dev] [PATCH v1 0/3] lib: introduce traffic mirroring lib",
        "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": "Network Test Access Point (TAP) is the network monitoring service\ncommonly adotpted in SDN-based network infrastructures. When VMs are\ninter-connected over virtual switches, TAP requires vSwitch to mirror\nout network traffics from specific workload VM ports to the TAP\ndevice/VM ports. Classical mirroring impmentations in vSwitch make an\nextra copy of the source packets, which results in significant degradation\nin the throughput levels vSwitch could normally archieve. Therefore, we\npropose a new set of APIs to support high-throughput packet mirroring\nthrough hardware offloading.\n\nThe proposal is consisted of three major parts:\n - Mirror registration APIs\n - Mirror offload/customization callbacks\n - Shared mirror data path\n\nIn this patch set, mirroring happens between a pair of ethdev ports (one for\nthe source port and the other for the mirror port), which is configurable\non a per-port per-direction basis. i.e. applications invoke the mirroring\nAPI to register source ports and traffic directions (tx or rx). The\nregistration API will then attach the mirror data path to the source port\nas a standard ethdev tx or rx callback. If any custom mirror offload\nfunctions are specified by applications, the offload function will be\nexecuted within the mirror data path.\n\nThe mirror data path intercepts the packets flowing over the registered\nsource ports and, rather than doing extra packets copy operations, simply\ntransmits packets to the destination (mirror) port with an incremented\nmbuf reference count. In this way, an identical copy of the packet data is\ntransmitted to both the mirror port and the original traffic destination.\n\nIn addition, with the proposed APIs we can implement even more complicated\nmirrorings scenarios. Two examples include flow based mirroring and MAC\naddress matching, both of which have common usage within the industry.\n\nOur prior studies demonstrate that this methedology is capble of doubling\nthe mirroring performance as compared to the default OVS port mirroring\nperformance (refer to the paper in IEEE xplore for further details:\nhttps://ieeexplore.ieee.org/document/9110293)\nAn OVS implementation was also suggested to the OVS community for review\nand comments (refer to the following OVS RFC patch:\nhttps://patchwork.ozlabs.org/project/openvswitch/patch/\n1595596858-78846-2-git-send-email-emma.finn@intel.com/)\n\nWe are considering implementing the mirroring APIs as a standalone library\nin DPDK, but it's also reasonble to place it inside ethdev layer or within\nthe vhost-pmd considering the potential usage scenarios.\n\nPatrick Fu (3):\n  lib/mirror: introduce traffic mirror API\n  lib/mirror: add port based mirroring\n  lib/mirror: add flow based mirroring\n\n config/common_base                       |   5 +\n lib/Makefile                             |   2 +\n lib/librte_mirror/Makefile               |  20 +\n lib/librte_mirror/meson.build            |   6 +\n lib/librte_mirror/rte_mirror.c           | 461 +++++++++++++++++++++++\n lib/librte_mirror/rte_mirror.h           | 111 ++++++\n lib/librte_mirror/rte_mirror_version.map |   7 +\n lib/meson.build                          |   2 +-\n 8 files changed, 613 insertions(+), 1 deletion(-)\n create mode 100644 lib/librte_mirror/Makefile\n create mode 100644 lib/librte_mirror/meson.build\n create mode 100644 lib/librte_mirror/rte_mirror.c\n create mode 100644 lib/librte_mirror/rte_mirror.h\n create mode 100644 lib/librte_mirror/rte_mirror_version.map"
}