get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 45310,
    "url": "http://patches.dpdk.org/api/patches/45310/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180925115107.12242-1-jackmin@mellanox.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": "<20180925115107.12242-1-jackmin@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180925115107.12242-1-jackmin@mellanox.com",
    "date": "2018-09-25T11:51:06",
    "name": "net/mlx5: eswitch-IP address UDP/TCP port rewrite",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "35b8e313334468f1360c005ba1bbc5b07ba32724",
    "submitter": {
        "id": 1065,
        "url": "http://patches.dpdk.org/api/people/1065/?format=api",
        "name": "Xiaoyu Min",
        "email": "jackmin@mellanox.com"
    },
    "delegate": {
        "id": 6624,
        "url": "http://patches.dpdk.org/api/users/6624/?format=api",
        "username": "shahafs",
        "first_name": "Shahaf",
        "last_name": "Shuler",
        "email": "shahafs@mellanox.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180925115107.12242-1-jackmin@mellanox.com/mbox/",
    "series": [
        {
            "id": 1490,
            "url": "http://patches.dpdk.org/api/series/1490/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=1490",
            "date": "2018-09-25T11:51:06",
            "name": "net/mlx5: eswitch-IP address UDP/TCP port rewrite",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/1490/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/45310/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/45310/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 3AA7A1B113;\n\tTue, 25 Sep 2018 13:52:17 +0200 (CEST)",
            "from EUR01-VE1-obe.outbound.protection.outlook.com\n\t(mail-ve1eur01on0087.outbound.protection.outlook.com [104.47.1.87])\n\tby dpdk.org (Postfix) with ESMTP id 8B3A51B100\n\tfor <dev@dpdk.org>; Tue, 25 Sep 2018 13:52:15 +0200 (CEST)",
            "from dev-r630-08.mtbc.labs.mlnx (118.201.220.138) by\n\tVI1PR0501MB2029.eurprd05.prod.outlook.com (2603:10a6:800:36::15) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1164.22;\n\tTue, 25 Sep 2018 11:52:11 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;\n\ts=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=Sojj+Akfuk0A1eRKUFAGdjHBe+8CVtw0Kk7Pl8TQFJM=;\n\tb=UTUsyY4kTqkNGGc3bpZipTKLhY4EJ+4Jsq3oVtQBhZ6V56deDKO898IJgRNaN3Ej/R6o6seKabcQQ5H3Ca5i9AzIGsax4os0NbwavTvNRywJxY1xr5v0drZnvWiUXqks5qgU0V1VkDJUdTDWSH+ph2a0HlSFEtqqncwuvyAWjTU=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=jackmin@mellanox.com; ",
        "From": "Xiaoyu Min <jackmin@mellanox.com>",
        "To": "Shahaf Shuler <shahafs@mellanox.com>, Yongseok Koh <yskoh@mellanox.com>",
        "Cc": "dev@dpdk.org",
        "Date": "Tue, 25 Sep 2018 19:51:06 +0800",
        "Message-Id": "<20180925115107.12242-1-jackmin@mellanox.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[118.201.220.138]",
        "X-ClientProxiedBy": "SG2PR01CA0111.apcprd01.prod.exchangelabs.com\n\t(2603:1096:4:40::15) To VI1PR0501MB2029.eurprd05.prod.outlook.com\n\t(2603:10a6:800:36::15)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "22a15d1a-0748-4a7d-1f2f-08d622dd553c",
        "X-MS-Office365-Filtering-HT": "Tenant",
        "X-Microsoft-Antispam": "BCL:0; PCL:0;\n\tRULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020);\n\tSRVR:VI1PR0501MB2029; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; VI1PR0501MB2029;\n\t3:j8P+OMkSW3Gvc1jIYUsEN0SbAsgFKZkoPTZ45KLsOTldk/8M8rcomzi3MTRc7+WOjnQFZnICwgcVFMXlmb49ynKmMhTl7GyXwhZ4xoH9sE8Hwv3UNZOfOCGXeePIY+3xXS/ql2MyRFh1YapzHQAKHQa4h3TWqeo7o9KybcZ3rhWJj0ezrK47B86obEnsPWqPa4a8vuXj2nqxWjG6GbxXFr1Zy/g/MW7SHoNEu91oCwJCtPwukpwpOcMm9wYkJGRc;\n\t25:EhkhAzlVASYGKjtSLBvyQPaeNSTksVIfsZF8ovj+q8to4b/NgVbMJSL5zalrTfbartpne9QxEURIWvAWsRjoqfAYYVf9dbPbXM8AooG9L770x7iPqRPM+UkORQOqedUcBntAa+cwkkW4KzQHsnHgaw+5ry4IQCcRGTI8G96CM4jXnc11bzilfZ5Bpzds1yZwJ7Gdrl4ciGdxW/j/ZQD7R1y9IIMcc9zQB4NCQrUKIpe84K8TtVhJN50puTwZijw2lCVxGpUvb+TjkiWugc9ZqZgabc82f9qJyf/I0iZMVjr76aiR1jlQohiLPetpJ7GmvB5Rm90aP9SJCjMJoTlN2Q==;\n\t31:9z3q6I8PCapO8w6BSyH/hC9O3wCWpb+ruwHSayg+5CcjAWleCL1N9GYZv5dSUWmrZOfkUHLC95fS6M6i9YO1qvl4d5VO2JEi9qeA8+h7q5+SzhHFBchFRXIt7SiiY/7Cg5gE6N7CMPx5HTIkXhvnPDmYJdMjG/s0Sxdnnn9jiCBmXsUDFis9FIf95xkb+3yuqgnf00epQwBW9nErBlu6HDtkLKmIfkm4Ox43IxsHnG4=",
            "1; VI1PR0501MB2029;\n\t20:d/Mqbp5ck+VJ9CQlAUyKQvX8j46qz6HLrfT0195EHWcwRgUOa6vkEkbzg3bHhQlTFxl4GBoNpceCpEixhYXAoWijPjB0FZW8Z7xeKpd7lHK0K3bMsW6QLoKzV5kbnjX4aKn+4V0T6xVcbZ8dnvF2OJDyCoZtAZvSboUpvwFKe36/Lm4a8Sxl3TrnwZ3Qug7aZVW12UfKFvztCMd0+s1GYaxqc0TMZkc4psu9rSG4l+f/gPv6vtf1jK8l+YMIlozK1wwTNyVLtAFjtHGTadbS3AJ7I2ySMNQI89gNHGDZXu67i+d0JlX+D85xTJGlkgwFCmjG4BOrwUp8OhfDHtiPnBU9p6XBELjamSUSanE5wLEZEDSEcXbMYx8hvfFvDI2vjmgt7JsllaXhuE46MlmiOwPFzrTi/AmGN9PPhD9JhCZrnfSCmAXLRKbu2/ogEfCvv16eMeie6Y3FHvXqIFKoT8jyoWOxwB+t81D8blYLRv3W0FGeWn6bPV9AXDBqQAHL;\n\t4:wx2pnQV1Dz1LHql4V0AoZbLbe0eGQ2WxhZjuM1nTm0HZe3DT6oK+Fyf4rJSuvz9TJMLRk/iWMJeXC45SSx3c2y2vngV6Z2NNsKvb1tkSvLIgv7HqquJhRFJVnHv6S5HgyMBMEfaDq/yauHqlid8TsWeWcWh/CNRlmKNUW6zKeBE5qJe03e+OFITGAwinHu6CU/320sCKn5tjor391+NDAfTTmt1uTaYUhkElW75015q2sTmH+wmEgBe14BaTW2zZ6RBCEo+QzdAdiUXR0emVtg==",
            "=?us-ascii?Q?1; VI1PR0501MB2029;\n\t23:f+pc4Npl3vbvbA5fb8jRqq2aPnkDe3LMfWjjQ6/?=\n\tK6vYu+dq3C8swyIzC4nvkjzQmI/hExL2pCCnMCR+C2H4M3pa7kh0PclP2jBSIHFyCzNQV/fkg5s7R44wXUqeocOqsWlG11O0V9prOJCM7s6jbaqOyezSKMmrRqY2z1GgfvCfH/w0YdIl/KJqgjkCfW8FPDrMwJ87anXY/ytT3vOkCFfoyWM+apZQ+BzfKNtIfD/9CSQBqiXQAMFUlm5xO1CsV4qCKuAZ9/9JOP18uOsOaPaUBreQylZbGMPznHlSX/sNtgw5cbaqFku14EbxNL2JY4h2sFvugyI6SWBiCh/J9wgUNLmVZUSiJMeCONv+U0KV3xOjn2GNFMUJAPVrsTRaxrW21zr2vykam/jDTV0oL5EXIYUzpm2RqxQbbFBuBbtdc15UJnlYE3U6J9Y8AbI3StcmYhW7YVWsYwBuGGHCX07yVTTK/dF8EO/vna7OGHGHHcB8MrK6ZhzcqU8gxrXwHDUFUOeY9nl7Znq9sBzsPvQWr342b7RI/xghnWpRur/auYx3JiPE9uLGle1dSBibnV/5+HtPVFslFlkrvkRpk64LkLbQCytYKdtgsClKiAOiJYUzJbb0nBMt4hlCpsR2ssSHEJRnTQYYcq/NM65J07TqljNYwfc2yIjdY2paMg81Y9wBZV7f1wnoja6ygVQWn7I5MRLFzu+c1tNt+Z9Z0FT8YI54uytr3AI9FDm8NvqS+7s6JjAG+sd7fgrsKsZ8q3+5cxY+XVtnprXlWdc5A79aghz2gdIEvw69gy0icA1eCK1WaCnyd2le9tpkpytRYqYJBU2gwsPMtmXKWlArwzzs+/yc/Ndt5iyI/Jq3G1Yz1bGs5eStLNfxfUwXlAuj5exK3Ehs4HxLUyMtzhkV/KFqGOFdE/HYN5auK5uDx+1w+Ob8kdW3y5k9MpJpaMS6XHYg4PVehsICftEoO/1RmZfBAsqqp2ke7TrO/9O2Tjvdmk/mNfJRpBtUH0qBWPdXLYmGtu8waO6ZEGYdO4HevOhHxFZ39qElvcYNYmC2RT5BugFTPLEjx25FC08JuLuemKrHNQxl21KgCnXgQq2VDmGbVz1Jk9he/EKk8GZCVfj9IQVwikXiV1dxDhjTVtkHVm/qvonhl8+CQCj/KijfJPYhiCUaAcrzio2/cqqo8a/HHERTDjKX5rUuv14G1+YM61pfdfFy4IoAiwOo/jHmfIiPNtmJvqP8ZjUZymHAkgJb5SX4O31bmKh8vuHjHVn2Q",
            "1; VI1PR0501MB2029;\n\t6:+hpwSaxEAW9U9URuvvEr8PTD53wEyEW88IVgKredQL3P8GFYPKU8L3JU0twrdw5dNIrEcYf+BVNfD+4DyYVxaddP/Rx6vPd65ytnXDob/0xlCzmxQwbXwOZgZgeI35/E1RDvdZOFPuw22XXxoxh9Y4d+Hk9Ihi5Po7N4C2wQ9YfTS5jiiWl9NH/3NlKnPOYtcyZeVEOm2jc0E46QPCygOgYFeL37JJWiZq2j7pUagNfC9laPGl0cVhBQ7VrE7tN1ZR3EZ3dhf+dzk/l/r+8uMKKpCJEQIjxQx+XrWGiXGfRBlYrEu5+73TJBRjjQky7mMywnloVJfW3ER3nVXqQAFyhhSvsTGM95/ZOIGPsTNc9T8acOiE9aG3sOjqFVMuFy0V8yZq04RNisZM7Mll5e2tsYiI1+fUm93b1W/gw1P6lRuTrHHLwIDoYaXO9honFxEbJ3s3kkREavSkRDvCIoVA==;\n\t5:A5n2+4tKqvyPO2fnvsxnPdiwSvumIhfSXUNi3yw5HDIPnUNMhp0Qhlvxiu8NJA41/MJGfpM6tSfOPs8qzdMkPK8frkt3YKS/55tavjhra+7PNGkXvvwiEaCsTVG6khTFpGglKqcbIQ9Uo5SqMT0Ezm0vPUYTkfIT7zIaBFdUw2U=;\n\t7:nkTibkZlp8KZDSrvXeshBqJH07yUz9uMYl48vRdo02QZXqB/m9F21guqnxjFqV9gv5qeCQkRk//4KZ4QkmrSYqGRqRdgo0/gUHk88k7PQ14JThS1Dm7UnPWhnvIlpiB6m6VUELt646oYCYtfKhR1QeXkaTrQsTogfk3fNIklDcILkSJwArcuy0Bnew5SjYwdRBoJWbGnF4+R62uqAj7q3AYRQ6hRLAdEAvQ1ktMzyVYU5qRCrwkcbQgCjWlfy71S"
        ],
        "X-MS-TrafficTypeDiagnostic": "VI1PR0501MB2029:",
        "X-Microsoft-Antispam-PRVS": "<VI1PR0501MB2029961EB1A2247883854513CC160@VI1PR0501MB2029.eurprd05.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3231355)(944501410)(52105095)(3002001)(6055026)(149066)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123562045)(20161123558120)(201708071742011)(7699051);\n\tSRVR:VI1PR0501MB2029; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2029; ",
        "X-Forefront-PRVS": "08062C429B",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(366004)(376002)(39860400002)(346002)(136003)(396003)(199004)(189003)(486006)(66066001)(6506007)(6486002)(6306002)(97736004)(16586007)(53936002)(110136005)(386003)(6512007)(86362001)(34290500001)(36756003)(316002)(2906002)(51416003)(50466002)(85306007)(52116002)(105586002)(48376002)(14444005)(5660300001)(106356001)(1857600001)(25786009)(966005)(16526019)(4326008)(26005)(2616005)(6116002)(3846002)(1076002)(305945005)(6666003)(81166006)(476003)(8676002)(81156014)(50226002)(68736007)(47776003)(956004)(7736002)(8936002)(478600001)(6636002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2029;\n\tH:dev-r630-08.mtbc.labs.mlnx; \n\tFPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; ",
        "Received-SPF": "None (protection.outlook.com: mellanox.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "cx0a5LGm9uHq+xK+w63bdC0iUfqUPK61YEj3y+dEVaxACDC6xWZNtjfaUfGvZakGgOiKdWtDBZT0mUPqWCZYJcWcJBAD++pzUGy9X1tmoXSOqqgSLnQHoDJ3EjzZDAUtWK28Qope4Acm8DLRYjJQ51leamA+xVzLXQB3bbhCDEXGESPupnp7ZIDOIsksYosXDITNhu3ZeiXPxjYuCIR+6ILQn7YiKxtNFcJEmjw9e4ncvrREgnQU8YBy4S5B41x+MsHtGeB8eDezObz4JCo5Z5Y/MpRsRnw0KmO5N0FDpGLT3YKdPdfRZ6ywc/xJNorvgN3TaGH3oVo1bFfawddFGJkh9VgIpmtKWZ7eBc2ELbw=",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "Mellanox.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "25 Sep 2018 11:52:11.5433\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "22a15d1a-0748-4a7d-1f2f-08d622dd553c",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "a652971c-7d2e-4d9b-a6a4-d149256f461b",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "VI1PR0501MB2029",
        "Subject": "[dpdk-dev] [PATCH] net/mlx5: eswitch-IP address UDP/TCP port rewrite",
        "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\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Offload the following rte_flow actions by inserting accordingly\nE-Switch rules via TC Flower driver\n\n - RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC\n - RTE_FLOW_ACTION_TYPE_SET_IPV4_DST\n - RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC\n - RTE_FLOW_ACTION_TYPE_SET_IPV6_DST\n - RTE_FLOW_ACTION_TYPE_SET_TP_SRC\n - RTE_FLOW_ACTION_TYPE_SET_TP_DST\n\nSigned-off-by: Xiaoyu Min <jackmin@mellanox.com>\n---\nThis patch bases on Rahul Lakkireddy's patchs[1][2] and\nYongseok Koh's patchset [3]\n\n[1] https://patches.dpdk.org/patch/45191/\n[2] https://patches.dpdk.org/patch/45192/\n[3] https://patches.dpdk.org/project/dpdk/list/?series=1474\n\n\n drivers/net/mlx5/Makefile        |   5 +\n drivers/net/mlx5/meson.build     |   2 +\n drivers/net/mlx5/mlx5_flow.h     |   6 +\n drivers/net/mlx5/mlx5_flow_tcf.c | 356 +++++++++++++++++++++++++++++++\n 4 files changed, 369 insertions(+)",
    "diff": "diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile\nindex ca1de9f21..49b95e78e 100644\n--- a/drivers/net/mlx5/Makefile\n+++ b/drivers/net/mlx5/Makefile\n@@ -346,6 +346,11 @@ mlx5_autoconf.h.new: $(RTE_SDK)/buildtools/auto-config-h.sh\n \t\tlinux/tc_act/tc_vlan.h \\\n \t\tenum TCA_VLAN_PUSH_VLAN_PRIORITY \\\n \t\t$(AUTOCONF_OUTPUT)\n+\t$Q sh -- '$<' '$@' \\\n+\t\tHAVE_TC_ACT_PEDIT \\\n+\t\tlinux/tc_act/tc_pedit.h \\\n+\t\tenum TCA_PEDIT_KEY_EX_HDR_TYPE_UDP \\\n+\t\t$(AUTOCONF_OUTPUT)\n \t$Q sh -- '$<' '$@' \\\n \t\tHAVE_SUPPORTED_40000baseKR4_Full \\\n \t\t/usr/include/linux/ethtool.h \\\ndiff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build\nindex fd93ac162..ef6a85101 100644\n--- a/drivers/net/mlx5/meson.build\n+++ b/drivers/net/mlx5/meson.build\n@@ -182,6 +182,8 @@ if build\n \t\t'TCA_FLOWER_KEY_VLAN_ETH_TYPE' ],\n \t\t[ 'HAVE_TC_ACT_VLAN', 'linux/tc_act/tc_vlan.h',\n \t\t'TCA_VLAN_PUSH_VLAN_PRIORITY' ],\n+\t\t[ 'HAVE_TC_ACT_PEDIT', 'linux/tc_act/tc_pedit.h',\n+\t\t'TCA_PEDIT_KEY_EX_HDR_TYPE_UDP' ],\n \t\t[ 'HAVE_RDMA_NL_NLDEV', 'rdma/rdma_netlink.h',\n \t\t'RDMA_NL_NLDEV' ],\n \t\t[ 'HAVE_RDMA_NLDEV_CMD_GET', 'rdma/rdma_netlink.h',\ndiff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h\nindex 10d700a7f..be182a643 100644\n--- a/drivers/net/mlx5/mlx5_flow.h\n+++ b/drivers/net/mlx5/mlx5_flow.h\n@@ -87,6 +87,12 @@\n #define MLX5_ACTION_OF_PUSH_VLAN (1u << 8)\n #define MLX5_ACTION_OF_SET_VLAN_VID (1u << 9)\n #define MLX5_ACTION_OF_SET_VLAN_PCP (1u << 10)\n+#define MLX5_ACTION_SET_IPV4_SRC (1u << 11)\n+#define MLX5_ACTION_SET_IPV4_DST (1u << 12)\n+#define MLX5_ACTION_SET_IPV6_SRC (1u << 13)\n+#define MLX5_ACTION_SET_IPV6_DST (1u << 14)\n+#define MLX5_ACTION_SET_TP_SRC (1u << 15)\n+#define MLX5_ACTION_SET_TP_DST (1u << 16)\n \n /* possible L3 layers protocols filtering. */\n #define MLX5_IP_PROTOCOL_TCP 6\ndiff --git a/drivers/net/mlx5/mlx5_flow_tcf.c b/drivers/net/mlx5/mlx5_flow_tcf.c\nindex 14376188e..85c92f369 100644\n--- a/drivers/net/mlx5/mlx5_flow_tcf.c\n+++ b/drivers/net/mlx5/mlx5_flow_tcf.c\n@@ -53,6 +53,62 @@ struct tc_vlan {\n \n #endif /* HAVE_TC_ACT_VLAN */\n \n+#ifdef HAVE_TC_ACT_PEDIT\n+\n+#include <linux/tc_act/tc_pedit.h>\n+\n+#else /* HAVE_TC_ACT_VLAN */\n+enum {\n+\tTCA_PEDIT_UNSPEC,\n+\tTCA_PEDIT_TM,\n+\tTCA_PEDIT_PARMS,\n+\tTCA_PEDIT_PAD,\n+\tTCA_PEDIT_PARMS_EX,\n+\tTCA_PEDIT_KEYS_EX,\n+\tTCA_PEDIT_KEY_EX,\n+\t__TCA_PEDIT_MAX\n+};\n+\n+enum {\n+\tTCA_PEDIT_KEY_EX_HTYPE = 1,\n+\tTCA_PEDIT_KEY_EX_CMD = 2,\n+\t__TCA_PEDIT_KEY_EX_MAX\n+};\n+\n+enum pedit_header_type {\n+\tTCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,\n+\tTCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,\n+\tTCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,\n+\tTCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,\n+\tTCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,\n+\tTCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,\n+\t__PEDIT_HDR_TYPE_MAX,\n+};\n+\n+enum pedit_cmd {\n+\tTCA_PEDIT_KEY_EX_CMD_SET = 0,\n+\tTCA_PEDIT_KEY_EX_CMD_ADD = 1,\n+\t__PEDIT_CMD_MAX,\n+};\n+\n+struct tc_pedit_key {\n+\t__u32           mask;  /* AND */\n+\t__u32           val;   /*XOR */\n+\t__u32           off;  /*offset */\n+\t__u32           at;\n+\t__u32           offmask;\n+\t__u32           shift;\n+};\n+\n+struct tc_pedit_sel {\n+\ttc_gen;\n+\tunsigned char           nkeys;\n+\tunsigned char           flags;\n+\tstruct tc_pedit_key     keys[0];\n+};\n+\n+#endif /* HAVE_TC_ACT_VLAN */\n+\n /* Normally found in linux/netlink.h. */\n #ifndef NETLINK_CAP_ACK\n #define NETLINK_CAP_ACK 10\n@@ -153,6 +209,14 @@ struct tc_vlan {\n #define IPV6_ADDR_LEN 16\n #endif\n \n+#ifndef IPV4_ADDR_LEN\n+#define IPV4_ADDR_LEN 4\n+#endif\n+\n+#ifndef TP_PORT_LEN\n+#define TP_PORT_LEN 2 /* Transport Port (UDP/TCP) Length */\n+#endif\n+\n /** Empty masks for known item types. */\n static const union {\n \tstruct rte_flow_item_port_id port_id;\n@@ -227,6 +291,220 @@ struct flow_tcf_ptoi {\n \n #define MLX5_TCF_FATE_ACTIONS (MLX5_ACTION_DROP | MLX5_ACTION_PORT_ID)\n \n+#define IS_MODIFY_ACTION(act_) ({typeof(act_) act = (act_); \\\n+\t\t((act) == RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC || \\\n+\t\t(act) == RTE_FLOW_ACTION_TYPE_SET_IPV4_DST  || \\\n+\t\t(act) == RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC  || \\\n+\t\t(act) == RTE_FLOW_ACTION_TYPE_SET_IPV6_DST  || \\\n+\t\t(act) == RTE_FLOW_ACTION_TYPE_SET_TP_SRC    || \\\n+\t\t(act) == RTE_FLOW_ACTION_TYPE_SET_TP_DST) ?    \\\n+\t\t1 : 0; })\n+#define MAX_PEDIT_KEYS (128)\n+#define SZ_PEDIT_KEY_VAL (4)\n+\n+struct pedit_key_ex {\n+\tenum pedit_header_type htype;\n+\tenum pedit_cmd cmd;\n+};\n+\n+struct pedit_parser {\n+\tstruct tc_pedit_sel sel;\n+\tstruct tc_pedit_key keys[MAX_PEDIT_KEYS];\n+\tstruct pedit_key_ex keys_ex[MAX_PEDIT_KEYS];\n+};\n+\n+static int\n+flow_tcf_calc_pedit_keys(const uint64_t size)\n+{\n+\tint keys = (size / SZ_PEDIT_KEY_VAL) +\n+\t\t((size % SZ_PEDIT_KEY_VAL) ? 1 : 0);\n+\treturn keys;\n+}\n+\n+static void\n+flow_tcf_pedit_key_set_tp_port(const struct rte_flow_action *actions,\n+\t\t\t\tstruct pedit_parser *p_parser,\n+\t\t\t\tuint64_t item_flags)\n+{\n+\tint idx = p_parser->sel.nkeys;\n+\n+\tif (item_flags & MLX5_FLOW_LAYER_OUTER_L4_UDP)\n+\t\tp_parser->keys_ex[idx].htype = TCA_PEDIT_KEY_EX_HDR_TYPE_UDP;\n+\tif (item_flags & MLX5_FLOW_LAYER_OUTER_L4_TCP)\n+\t\tp_parser->keys_ex[idx].htype = TCA_PEDIT_KEY_EX_HDR_TYPE_TCP;\n+\tp_parser->keys_ex[idx].cmd = TCA_PEDIT_KEY_EX_CMD_SET;\n+\tp_parser->keys[idx].off =\n+\t\tactions->type == RTE_FLOW_ACTION_TYPE_SET_TP_DST ? 2 : 0;\n+\tp_parser->keys[idx].mask = 0xFFFF0000;\n+\tp_parser->keys[idx].val = ((const struct rte_flow_action_set_tp *)\n+\t\t\tactions->conf)->port;\n+\tp_parser->sel.nkeys = (++idx);\n+}\n+\n+static void\n+flow_tcf_pedit_key_set_ipv6_addr(const struct rte_flow_action *actions,\n+\t\t\t\t struct pedit_parser *p_parser)\n+{\n+\tint idx = p_parser->sel.nkeys;\n+\tint keys = flow_tcf_calc_pedit_keys(IPV6_ADDR_LEN);\n+\tint off_base =\n+\t\tactions->type == RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC ? 8 : 24;\n+\tconst struct rte_flow_action_set_ipv6 *conf =\n+\t\t(const struct rte_flow_action_set_ipv6 *)actions->conf;\n+\n+\tfor (int i = 0; i < keys; i++, idx++) {\n+\t\tp_parser->keys_ex[idx].htype = TCA_PEDIT_KEY_EX_HDR_TYPE_IP6;\n+\t\tp_parser->keys_ex[idx].cmd = TCA_PEDIT_KEY_EX_CMD_SET;\n+\t\tp_parser->keys[idx].off = off_base + i * SZ_PEDIT_KEY_VAL;\n+\t\tp_parser->keys[idx].mask = ~UINT32_MAX;\n+\t\tmemcpy(&p_parser->keys[idx].val,\n+\t\t\tconf->ipv6_addr + i *  SZ_PEDIT_KEY_VAL,\n+\t\t\tSZ_PEDIT_KEY_VAL);\n+\t}\n+\tp_parser->sel.nkeys += keys;\n+}\n+\n+static void\n+flow_tcf_pedit_key_set_ipv4_addr(const struct rte_flow_action *actions,\n+\t\t\t\t struct pedit_parser *p_parser)\n+{\n+\tint idx = p_parser->sel.nkeys;\n+\n+\tp_parser->keys_ex[idx].htype = TCA_PEDIT_KEY_EX_HDR_TYPE_IP4;\n+\tp_parser->keys_ex[idx].cmd = TCA_PEDIT_KEY_EX_CMD_SET;\n+\tp_parser->keys[idx].off =\n+\t\t(actions->type == RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC ? 12 : 16);\n+\tp_parser->keys[idx].mask = ~UINT32_MAX;\n+\tp_parser->keys[idx].val =\n+\t\t((const struct rte_flow_action_set_ipv4 *)\n+\t\t actions->conf)->ipv4_addr;\n+\tp_parser->sel.nkeys = (++idx);\n+}\n+\n+static int\n+flow_tcf_create_pedit_mnl_msg(struct nlmsghdr *nl,\n+\t\t\t      const struct rte_flow_action **actions,\n+\t\t\t      uint64_t item_flags)\n+{\n+\tstruct pedit_parser p_parser;\n+\n+\tmemset(&p_parser, 0, sizeof(p_parser));\n+\tmnl_attr_put_strz(nl, TCA_ACT_KIND, \"pedit\");\n+\tstruct nlattr *na_act_options = mnl_attr_nest_start(nl,\n+\t\t\t\t\t\t\t    TCA_ACT_OPTIONS);\n+\t/* all modify header actions should be in one tc-pedit action */\n+\tfor (; (*actions)->type != RTE_FLOW_ACTION_TYPE_END; (*actions)++) {\n+\t\tswitch ((*actions)->type) {\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV4_DST:\n+\t\t\tflow_tcf_pedit_key_set_ipv4_addr(*actions, &p_parser);\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV6_DST:\n+\t\t\tflow_tcf_pedit_key_set_ipv6_addr(*actions, &p_parser);\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_TP_SRC:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_TP_DST:\n+\t\t\tflow_tcf_pedit_key_set_tp_port(*actions,\n+\t\t\t\t\t\t\t&p_parser, item_flags);\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tgoto pedit_mnl_msg_done;\n+\t\t}\n+\t}\n+pedit_mnl_msg_done:\n+\tp_parser.sel.action = TC_ACT_PIPE;\n+\tmnl_attr_put(nl, TCA_PEDIT_PARMS_EX,\n+\t\t\tsizeof(p_parser.sel) +\n+\t\t\tp_parser.sel.nkeys * sizeof(struct tc_pedit_key),\n+\t\t\t&p_parser);\n+\tstruct nlattr *na_pedit_keys = mnl_attr_nest_start(nl,\n+\t\t\t\t\tTCA_PEDIT_KEYS_EX | NLA_F_NESTED);\n+\tfor (int i = 0; i < p_parser.sel.nkeys; i++) {\n+\t\tstruct nlattr *na_pedit_key = mnl_attr_nest_start(nl,\n+\t\t\t\t\tTCA_PEDIT_KEY_EX | NLA_F_NESTED);\n+\t\tmnl_attr_put_u16(nl, TCA_PEDIT_KEY_EX_HTYPE,\n+\t\t\t\t p_parser.keys_ex[i].htype);\n+\t\tmnl_attr_put_u16(nl, TCA_PEDIT_KEY_EX_CMD,\n+\t\t\t\t p_parser.keys_ex[i].cmd);\n+\t\tmnl_attr_nest_end(nl, na_pedit_key);\n+\t}\n+\tmnl_attr_nest_end(nl, na_pedit_keys);\n+\tmnl_attr_nest_end(nl, na_act_options);\n+\t(*actions)--;\n+\treturn 0;\n+}\n+\n+/**\n+ * Calculate max memory size of one TC-pedit actions.\n+ * One TC-pedit action can contain set of keys each defining\n+ * a rewrite element (rte_flow action)\n+ *\n+ * @param[in] actions\n+ *   actions specification.\n+ * @param[inout] action_flags\n+ *   actions flags\n+ * @param[inout] size\n+ *   accumulated size\n+ * @return\n+ *   Max memory size of one TC-pedit action\n+ */\n+static int\n+flow_tcf_get_pedit_actions_size(const struct rte_flow_action **actions,\n+\t\t\t\tuint64_t *action_flags)\n+{\n+\tint pedit_size = 0;\n+\tint keys = 0;\n+\tuint64_t flags = 0;\n+\n+\tpedit_size += SZ_NLATTR_NEST + /* na_act_index. */\n+\t\t      SZ_NLATTR_STRZ_OF(\"pedit\") +\n+\t\t      SZ_NLATTR_NEST; /* TCA_ACT_OPTIONS. */\n+\tfor (; (*actions)->type != RTE_FLOW_ACTION_TYPE_END; (*actions)++) {\n+\t\tswitch ((*actions)->type) {\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC:\n+\t\t\tkeys += flow_tcf_calc_pedit_keys(IPV4_ADDR_LEN);\n+\t\t\tflags |= MLX5_ACTION_SET_IPV4_SRC;\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV4_DST:\n+\t\t\tkeys += flow_tcf_calc_pedit_keys(IPV4_ADDR_LEN);\n+\t\t\tflags |= MLX5_ACTION_SET_IPV4_DST;\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC:\n+\t\t\tkeys += flow_tcf_calc_pedit_keys(IPV6_ADDR_LEN);\n+\t\t\tflags |= MLX5_ACTION_SET_IPV6_SRC;\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV6_DST:\n+\t\t\tkeys += flow_tcf_calc_pedit_keys(IPV6_ADDR_LEN);\n+\t\t\tflags |= MLX5_ACTION_SET_IPV6_DST;\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_TP_SRC:\n+\t\t\t/* TCP is as same as UDP */\n+\t\t\tkeys += flow_tcf_calc_pedit_keys(TP_PORT_LEN);\n+\t\t\tflags |= MLX5_ACTION_SET_TP_SRC;\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_TP_DST:\n+\t\t\t/* TCP is as same as UDP */\n+\t\t\tkeys += flow_tcf_calc_pedit_keys(TP_PORT_LEN);\n+\t\t\tflags |= MLX5_ACTION_SET_TP_DST;\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tgoto get_pedit_action_size_done;\n+\t\t}\n+\t}\n+get_pedit_action_size_done:\n+\t/* TCA_PEDIT_PARAMS_EX */\n+\tpedit_size += SZ_NLATTR_DATA_OF(sizeof(struct tc_pedit_sel) +\n+\t\t\tkeys * sizeof(struct tc_pedit_key));\n+\tpedit_size += SZ_NLATTR_NEST; /* TCA_PEDIT_KEYS */\n+\tpedit_size += keys *\n+\t\t/* TCA_PEDIT_KEY_EX + HTYPE + CMD */\n+\t\t(SZ_NLATTR_NEST + SZ_NLATTR_DATA_OF(2) + SZ_NLATTR_DATA_OF(2));\n+\t(*action_flags) |= flags;\n+\t(*actions)--;\n+\treturn pedit_size;\n+}\n+\n /**\n  * Retrieve mask for pattern item.\n  *\n@@ -430,6 +708,8 @@ flow_tcf_validate(struct rte_eth_dev *dev,\n \t\t\tof_set_vlan_vid;\n \t\tconst struct rte_flow_action_of_set_vlan_pcp *\n \t\t\tof_set_vlan_pcp;\n+\t\tconst struct rte_flow_action_set_ipv4 *set_ipv4;\n+\t\tconst struct rte_flow_action_set_ipv6 *set_ipv6;\n \t} conf;\n \tuint32_t item_flags = 0;\n \tuint32_t action_flags = 0;\n@@ -690,12 +970,64 @@ flow_tcf_validate(struct rte_eth_dev *dev,\n \t\tcase RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP:\n \t\t\taction_flags |= MLX5_ACTION_OF_SET_VLAN_PCP;\n \t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC:\n+\t\t\taction_flags |= MLX5_ACTION_SET_IPV4_SRC;\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV4_DST:\n+\t\t\taction_flags |= MLX5_ACTION_SET_IPV4_DST;\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC:\n+\t\t\taction_flags |= MLX5_ACTION_SET_IPV6_SRC;\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV6_DST:\n+\t\t\taction_flags |= MLX5_ACTION_SET_IPV6_DST;\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_TP_SRC:\n+\t\t\taction_flags |= MLX5_ACTION_SET_TP_SRC;\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_TP_DST:\n+\t\t\taction_flags |= MLX5_ACTION_SET_TP_DST;\n+\t\t\tbreak;\n \t\tdefault:\n \t\t\treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ACTION,\n \t\t\t\t\t\t  actions,\n \t\t\t\t\t\t  \"action not supported\");\n \t\t}\n+\t\tif (IS_MODIFY_ACTION(actions->type)) {\n+\t\t\tif (!actions->conf)\n+\t\t\t\treturn rte_flow_error_set(error, ENOTSUP,\n+\t\t\t\t\t\tRTE_FLOW_ERROR_TYPE_ACTION_CONF,\n+\t\t\t\t\t\tactions,\n+\t\t\t\t\t\t\"action configuration not set\");\n+\t\t}\n+\t}\n+\tif (action_flags &\n+\t   (MLX5_ACTION_SET_IPV4_SRC | MLX5_ACTION_SET_IPV4_DST)) {\n+\t\tif (!(item_flags & MLX5_FLOW_LAYER_OUTER_L3_IPV4))\n+\t\t\treturn rte_flow_error_set(error, ENOTSUP,\n+\t\t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ACTION,\n+\t\t\t\t\t\t  actions,\n+\t\t\t\t\t\t  \"no ipv4 item found in\"\n+\t\t\t\t\t\t  \" pattern\");\n+\t}\n+\tif (action_flags &\n+\t   (MLX5_ACTION_SET_IPV6_SRC | MLX5_ACTION_SET_IPV6_DST)) {\n+\t\tif (!(item_flags & MLX5_FLOW_LAYER_OUTER_L3_IPV6))\n+\t\t\treturn rte_flow_error_set(error, ENOTSUP,\n+\t\t\t\tRTE_FLOW_ERROR_TYPE_ACTION,\n+\t\t\t\tactions,\n+\t\t\t\t\"no ipv6 item found in pattern\");\n+\t}\n+\tif (action_flags & (MLX5_ACTION_SET_TP_SRC | MLX5_ACTION_SET_TP_DST)) {\n+\t\tif (!(item_flags &\n+\t\t     (MLX5_FLOW_LAYER_OUTER_L4_UDP |\n+\t\t      MLX5_FLOW_LAYER_OUTER_L4_TCP)))\n+\t\t\treturn rte_flow_error_set(error, ENOTSUP,\n+\t\t\t\t\t\tRTE_FLOW_ERROR_TYPE_ACTION,\n+\t\t\t\t\t\tactions,\n+\t\t\t\t\t\t\"no TCP/UDP item found in\"\n+\t\t\t\t\t\t\" pattern\");\n \t}\n \treturn 0;\n }\n@@ -840,6 +1172,15 @@ flow_tcf_get_actions_and_size(const struct rte_flow_action actions[],\n \t\t\t\tSZ_NLATTR_TYPE_OF(uint16_t) + /* VLAN ID. */\n \t\t\t\tSZ_NLATTR_TYPE_OF(uint8_t); /* VLAN prio. */\n \t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV4_DST:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV6_DST:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_TP_SRC:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_TP_DST:\n+\t\t\tsize += flow_tcf_get_pedit_actions_size(&actions,\n+\t\t\t\t\t\t\t\t&flags);\n+\t\t\tbreak;\n \t\tdefault:\n \t\t\tDRV_LOG(WARNING,\n \t\t\t\t\"unsupported action %p type %d,\"\n@@ -998,6 +1339,7 @@ flow_tcf_translate(struct rte_eth_dev *dev, struct mlx5_flow *dev_flow,\n \tstruct nlattr *na_flower_act;\n \tstruct nlattr *na_vlan_id = NULL;\n \tstruct nlattr *na_vlan_priority = NULL;\n+\tuint64_t item_flags = 0;\n \n \tclaim_nonzero(flow_tcf_build_ptoi_table(dev, ptoi,\n \t\t\t\t\t\tPTOI_TABLE_SZ_MAX(dev)));\n@@ -1189,6 +1531,7 @@ flow_tcf_translate(struct rte_eth_dev *dev, struct mlx5_flow *dev_flow,\n \t\t\t}\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ITEM_TYPE_UDP:\n+\t\t\titem_flags |= MLX5_FLOW_LAYER_OUTER_L4_UDP;\n \t\t\tmask.udp = flow_tcf_item_mask\n \t\t\t\t(items, &rte_flow_item_udp_mask,\n \t\t\t\t &flow_tcf_mask_supported.udp,\n@@ -1218,6 +1561,7 @@ flow_tcf_translate(struct rte_eth_dev *dev, struct mlx5_flow *dev_flow,\n \t\t\t}\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ITEM_TYPE_TCP:\n+\t\t\titem_flags |= MLX5_FLOW_LAYER_OUTER_L4_TCP;\n \t\t\tmask.tcp = flow_tcf_item_mask\n \t\t\t\t(items, &rte_flow_item_tcp_mask,\n \t\t\t\t &flow_tcf_mask_supported.tcp,\n@@ -1368,6 +1712,18 @@ flow_tcf_translate(struct rte_eth_dev *dev, struct mlx5_flow *dev_flow,\n \t\t\t\t\tconf.of_set_vlan_pcp->vlan_pcp;\n \t\t\t}\n \t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV4_DST:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_IPV6_DST:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_TP_SRC:\n+\t\tcase RTE_FLOW_ACTION_TYPE_SET_TP_DST:\n+\t\t\tna_act_index =\n+\t\t\t\tmnl_attr_nest_start(nlh, na_act_index_cur++);\n+\t\t\tflow_tcf_create_pedit_mnl_msg(nlh,\n+\t\t\t\t\t\t      &actions, item_flags);\n+\t\t\tmnl_attr_nest_end(nlh, na_act_index);\n+\t\t\tbreak;\n \t\tdefault:\n \t\t\treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ACTION,\n",
    "prefixes": []
}