get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 76154,
    "url": "http://patches.dpdk.org/api/patches/76154/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200830111544.4190-5-wisamm@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": "<20200830111544.4190-5-wisamm@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200830111544.4190-5-wisamm@mellanox.com",
    "date": "2020-08-30T11:15:35",
    "name": "[04/13] app/flow-perf: add header modify actions support",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "a313be1423062894b83ed8419fd5e24d964fa0f2",
    "submitter": {
        "id": 938,
        "url": "http://patches.dpdk.org/api/people/938/?format=api",
        "name": "Wisam Jaddo",
        "email": "wisamm@mellanox.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200830111544.4190-5-wisamm@mellanox.com/mbox/",
    "series": [
        {
            "id": 11848,
            "url": "http://patches.dpdk.org/api/series/11848/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=11848",
            "date": "2020-08-30T11:15:31",
            "name": "app/flow-perf: add support for new items/actions",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/11848/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/76154/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/76154/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 642E6A04AB;\n\tSun, 30 Aug 2020 13:20:09 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 5F4F21C0C4;\n\tSun, 30 Aug 2020 13:16:31 +0200 (CEST)",
            "from EUR02-AM5-obe.outbound.protection.outlook.com\n (mail-eopbgr00078.outbound.protection.outlook.com [40.107.0.78])\n by dpdk.org (Postfix) with ESMTP id 9E3DE1C0B3\n for <dev@dpdk.org>; Sun, 30 Aug 2020 13:16:27 +0200 (CEST)",
            "from AM0PR05MB6610.eurprd05.prod.outlook.com (2603:10a6:208:12f::18)\n by AM0PR0502MB3762.eurprd05.prod.outlook.com (2603:10a6:208:1b::31)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3326.21; Sun, 30 Aug\n 2020 11:16:26 +0000",
            "from AM0PR05MB6610.eurprd05.prod.outlook.com\n ([fe80::4c8a:9848:2e2a:3598]) by AM0PR05MB6610.eurprd05.prod.outlook.com\n ([fe80::4c8a:9848:2e2a:3598%6]) with mapi id 15.20.3326.025; Sun, 30 Aug 2020\n 11:16:26 +0000",
            "from mellanox.com (37.142.13.130) by\n AM4PR05CA0008.eurprd05.prod.outlook.com (2603:10a6:205::21) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.3326.19 via Frontend Transport; Sun, 30 Aug 2020 11:16:25 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=Y9gyG4nIFvD13GlfFoZ4O2pdRCPxjBdAK3P3qhCKFj4+ia8tPLKcfa7qz8RcQo2AuCAy7qK8X2tB0Op/8RRulrRZ/6uAK5D4coPic9bWShrowII0D5UQEi/GKwR7Zat+q1LL8ytnJs88biMupbiGLl89SB0y3GjBsxmyxFdgIQ5Hh4Zq9dozPlPfbmOMvlwccyaKQpvRg4Uz9KnUzb/+Pr1IdLiY6yJ9XP8vYhbdnxGOfiJv6mFA3gTjOSv4Uv5V6QImWzE5Jl4tl/ZUOGfWKutdf7gIiB5HeHfvYk+TD41VBJgkjSgdDj85RoUfzZaHKpVMTVLnt65AOSx6cbc1Uw==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=W2PKFjq9wr9Mu1HzPpQiBnZ3HwI3i+7i3Io8I6uO6n0=;\n b=LMzfFib9WYfz6LIphgMsl1F7MMJemN/Uevzb2lAXw5RJi6Aac6k9iKZzpJlwU+PkEIp0HmP798Q1uh9cFQEs3yZ17NcxvUcLRfOOmAaoq9xexLa4DeQY6VV1ui28zmRxr7knkb8zw9G7uqcrB7Vc50WoejoygnKVqS3pCzIULt3vMQZ2SbY83ZXE/qLQpP3MTznWe8oMVV3nG6vHAwDTXYJ4hzBM3M2Euqg9fAUcO+vmnTvG7Ra0ALLDtTH19IM4Ja/7ILQTr6WdEJnQGVT95/sHfnhacO1YQO3S6Dz9gpiIAYCgpKXj97aeDo3y0ppWjOtmye9iZOdWqadg2KoPcw==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com;\n dkim=pass header.d=mellanox.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=W2PKFjq9wr9Mu1HzPpQiBnZ3HwI3i+7i3Io8I6uO6n0=;\n b=i5Wgp5hLTnm6iw5SFAgFeIKDQTllL27gZk7O9SU+VdkbhCbeZedx0mAlmvG+Qbr/QvvCPIeYZ4KANPUwUi7Am64gUb2D7QPvgQ13J2YIMGK9X4BUesJnXpJ3bQSR2MhM9YddZ39dsrlS0gM9vUbFQRKWuV9/lkmN7NZzoJdNusE=",
        "Authentication-Results": "dpdk.org; dkim=none (message not signed)\n header.d=none;dpdk.org; dmarc=none action=none header.from=mellanox.com;",
        "From": "Wisam Jaddo <wisamm@mellanox.com>",
        "To": "dev@dpdk.org, thomas@monjalon.net, asafp@mellanox.com,\n akozyrev@nvidia.com,\n akozyrev@mellanox.com, arybchenko@solarflare.com, jackmin@mellanox.com",
        "Date": "Sun, 30 Aug 2020 11:15:35 +0000",
        "Message-Id": "<20200830111544.4190-5-wisamm@mellanox.com>",
        "X-Mailer": [
            "git-send-email 2.17.1",
            "git-send-email 2.17.1"
        ],
        "In-Reply-To": "<20200830111544.4190-1-wisamm@mellanox.com>",
        "References": "<20200830111544.4190-1-wisamm@mellanox.com>",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "AM4PR05CA0008.eurprd05.prod.outlook.com (2603:10a6:205::21)\n To AM0PR05MB6610.eurprd05.prod.outlook.com\n (2603:10a6:208:12f::18)",
        "MIME-Version": "1.0",
        "X-MS-Exchange-MessageSentRepresentingType": "1",
        "X-Originating-IP": "[37.142.13.130]",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-HT": "Tenant",
        "X-MS-Office365-Filtering-Correlation-Id": "6aac7d01-1c43-4593-9735-08d84cd62271",
        "X-MS-TrafficTypeDiagnostic": "AM0PR0502MB3762:",
        "X-LD-Processed": "a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtFwd,ExtAddr",
        "X-MS-Exchange-Transport-Forked": "True",
        "X-Microsoft-Antispam-PRVS": "\n <AM0PR0502MB37623F7CFDF8BE22B79CF059A9500@AM0PR0502MB3762.eurprd05.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:6430;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n 4XzYdu5WoIVeut5gb1ZkvNAbJEQpTfhYQImXAshCiBzLxMvYwG89NRpM3v8VyVtGpHE3nXDxQCR0GBJ3oUcKcRiXkSTr11q1wLbOquh7etOFDFgodz1AOfIOhLqgcJZUvPvaLuJRHPxF2qISC+C7nkhpdh/sHWGl3GrTfyuNlVDZvAQhsKtrL9lYul/v+mXPZfzYxd302AXp8X4QmPmZwnT5mE+eS0MmjepakvtibPcKQeNH5Sur0y5XjH38DHpTCloysngn1Kss2WdPuFqaAgTmXOXKgGGeumvQCJJM/aLLx2m9E++jJcUF8IPyhnlG",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:AM0PR05MB6610.eurprd05.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(4636009)(366004)(396003)(136003)(39860400002)(376002)(346002)(478600001)(316002)(5660300002)(8886007)(30864003)(2906002)(6636002)(86362001)(36756003)(6666004)(1076003)(55016002)(8936002)(26005)(2616005)(7696005)(66946007)(66556008)(52116002)(83380400001)(16526019)(8676002)(186003)(956004)(66476007);\n DIR:OUT; SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData": "\n utQ78gGiLB0KyS4Af7jZ5/oP34pKam3CTJCn7V1ldElqMYztRrhRx8iomMvCQ7b6D25kOeBs7efLbuGnGbWu8xYlcsGoK8uxuAd0kKJsfkTZzR14TMtEI/zYeDOUyqjf9R2s6q98x/DMGUzl6dv9uRH4HwVCv7DOaDY+uZ1L1ms3btFteHtjXCEkH/dvPf14VlyPWTuxxViQf7bcFtMlhCsDYH2JsFis1YOPXJ8FX0YfIjUFKFVvcrpc0K9tSCYgJZmGv5MidCLZYZn+XNsuLLRmFddTl3t7Vn+IobPO5qwaMM2/sYjQ0zsSWwAHC7COG2mYeH/OyHGOAxCnXkEgyLZIbCYEdXx0mga++IznWmdxiIayn/+xH4nJUKYNyDlmYYsRkkYGvMhGcZw+mMBz3DphRFI/5xgQm0ertuRSRLeFo4K4VhIJov60Gkmsr4L1Vl5uX1NLcYqin+TzphrHr/zoyvScZfaAs/HM4Po02NBQPiD/OSyMfqca/gWwJ+PszRoeLbC1bkOSLjhjj7bMxhZa+lGmQv8rTmZmqbo1pkHW9/Hbct4L7LR09GDQBrzdLMVcet8Cwnzyi8pIlRgVtGml5TjZBIYD+UuntU2VAqKeDgZNhxyJ/zN71bWxuoZ9kHUqGYaVXT/dHKr4jNQoCg==",
        "X-OriginatorOrg": "Mellanox.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 6aac7d01-1c43-4593-9735-08d84cd62271",
        "X-MS-Exchange-CrossTenant-AuthSource": "AM0PR05MB6610.eurprd05.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "30 Aug 2020 11:16:25.9915 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "a652971c-7d2e-4d9b-a6a4-d149256f461b",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n eI8Il2houJLjV12BvS+4BGI24p+00wRIAyfijtZgB/oq8VmHDaQZmpEas34vnE65pOM33o6XB9hZGk4WcOwmYA==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "AM0PR0502MB3762",
        "Subject": "[dpdk-dev] [PATCH 04/13] app/flow-perf: add header modify actions\n\tsupport",
        "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": "Introduce headers modify actions in the app.\nAll header modify actions will add different value\nfor each flow, to make sure each flow will create\nand use it's own actions.\n\nSigned-off-by: Wisam Jaddo <wisamm@mellanox.com>\nAcked-by: Alexander Kozyrev <akozyrev@nvidia.com>\n---\n app/test-flow-perf/actions_gen.c       | 344 +++++++++++++++++++++++++\n app/test-flow-perf/main.c              | 180 ++++++++++++-\n doc/guides/rel_notes/release_20_08.rst |   2 +\n doc/guides/tools/flow-perf.rst         |  59 +++++\n 4 files changed, 583 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/app/test-flow-perf/actions_gen.c b/app/test-flow-perf/actions_gen.c\nindex d115cdd723..7e0637595a 100644\n--- a/app/test-flow-perf/actions_gen.c\n+++ b/app/test-flow-perf/actions_gen.c\n@@ -21,6 +21,7 @@ struct additional_para {\n \tuint16_t next_table;\n \tuint16_t *queues;\n \tuint16_t queues_number;\n+\tuint32_t counter;\n };\n \n /* Storage for struct rte_flow_action_rss including external data. */\n@@ -181,6 +182,252 @@ add_count(struct rte_flow_action *actions,\n \tactions[actions_counter].conf = &count_action;\n }\n \n+static void\n+add_set_src_mac(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic struct rte_flow_action_set_mac set_mac;\n+\tuint32_t mac = para.counter;\n+\tuint16_t i;\n+\n+\t/* Mac address to be set is random each time */\n+\tfor (i = 0; i < RTE_ETHER_ADDR_LEN; i++) {\n+\t\tset_mac.mac_addr[i] = mac & 0xff;\n+\t\tmac = mac >> 8;\n+\t}\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_MAC_SRC;\n+\tactions[actions_counter].conf = &set_mac;\n+}\n+\n+static void\n+add_set_dst_mac(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic struct rte_flow_action_set_mac set_mac;\n+\tuint32_t mac = para.counter;\n+\tuint16_t i;\n+\n+\t/* Mac address to be set is random each time */\n+\tfor (i = 0; i < RTE_ETHER_ADDR_LEN; i++) {\n+\t\tset_mac.mac_addr[i] = mac & 0xff;\n+\t\tmac = mac >> 8;\n+\t}\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_MAC_DST;\n+\tactions[actions_counter].conf = &set_mac;\n+}\n+\n+static void\n+add_set_src_ipv4(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic struct rte_flow_action_set_ipv4 set_ipv4;\n+\n+\t/* IPv4 value to be set is random each time */\n+\tset_ipv4.ipv4_addr = RTE_BE32(para.counter + 1);\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC;\n+\tactions[actions_counter].conf = &set_ipv4;\n+}\n+\n+static void\n+add_set_dst_ipv4(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic struct rte_flow_action_set_ipv4 set_ipv4;\n+\n+\t/* IPv4 value to be set is random each time */\n+\tset_ipv4.ipv4_addr = RTE_BE32(para.counter + 1);\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV4_DST;\n+\tactions[actions_counter].conf = &set_ipv4;\n+}\n+\n+static void\n+add_set_src_ipv6(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic struct rte_flow_action_set_ipv6 set_ipv6;\n+\tuint32_t ipv6 = para.counter;\n+\tuint8_t i;\n+\n+\t/* IPv6 value to set is random each time */\n+\tfor (i = 0; i < 16; i++) {\n+\t\tset_ipv6.ipv6_addr[i] = ipv6 & 0xff;\n+\t\tipv6 = ipv6 >> 8;\n+\t}\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC;\n+\tactions[actions_counter].conf = &set_ipv6;\n+}\n+\n+static void\n+add_set_dst_ipv6(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic struct rte_flow_action_set_ipv6 set_ipv6;\n+\tuint32_t ipv6 = para.counter;\n+\tuint8_t i;\n+\n+\t/* IPv6 value to set is random each time */\n+\tfor (i = 0; i < 16; i++) {\n+\t\tset_ipv6.ipv6_addr[i] = ipv6 & 0xff;\n+\t\tipv6 = ipv6 >> 8;\n+\t}\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV6_DST;\n+\tactions[actions_counter].conf = &set_ipv6;\n+}\n+\n+static void\n+add_set_src_tp(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic struct rte_flow_action_set_tp set_tp;\n+\tuint32_t tp = para.counter;\n+\n+\t/* TP src port is random each time */\n+\tif (tp > 0xffff)\n+\t\ttp = tp >> 16;\n+\n+\tset_tp.port = RTE_BE16(tp & 0xffff);\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_TP_SRC;\n+\tactions[actions_counter].conf = &set_tp;\n+}\n+\n+static void\n+add_set_dst_tp(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic struct rte_flow_action_set_tp set_tp;\n+\tuint32_t tp = para.counter;\n+\n+\t/* TP src port is random each time */\n+\tif (tp > 0xffff)\n+\t\ttp = tp >> 16;\n+\n+\tset_tp.port = RTE_BE16(tp & 0xffff);\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_TP_DST;\n+\tactions[actions_counter].conf = &set_tp;\n+}\n+\n+static void\n+add_inc_tcp_ack(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic rte_be32_t value = RTE_BE32(1);\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_INC_TCP_ACK;\n+\tactions[actions_counter].conf = &value;\n+}\n+\n+static void\n+add_dec_tcp_ack(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic rte_be32_t value = RTE_BE32(1);\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK;\n+\tactions[actions_counter].conf = &value;\n+}\n+\n+static void\n+add_inc_tcp_seq(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic rte_be32_t value = RTE_BE32(1);\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ;\n+\tactions[actions_counter].conf = &value;\n+}\n+\n+static void\n+add_dec_tcp_seq(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic rte_be32_t value = RTE_BE32(1);\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ;\n+\tactions[actions_counter].conf = &value;\n+}\n+\n+static void\n+add_set_ttl(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic struct rte_flow_action_set_ttl set_ttl;\n+\tuint32_t ttl_value = para.counter;\n+\n+\t/* Set ttl to random value each time */\n+\twhile (ttl_value > 0xff)\n+\t\tttl_value = ttl_value >> 8;\n+\n+\tset_ttl.ttl_value = ttl_value;\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_TTL;\n+\tactions[actions_counter].conf = &set_ttl;\n+}\n+\n+static void\n+add_dec_ttl(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_DEC_TTL;\n+}\n+\n+static void\n+add_set_ipv4_dscp(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic struct rte_flow_action_set_dscp set_dscp;\n+\tuint32_t dscp_value = para.counter;\n+\n+\t/* Set dscp to random value each time */\n+\twhile (dscp_value > 0xff)\n+\t\tdscp_value = dscp_value >> 8;\n+\n+\tset_dscp.dscp = dscp_value;\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP;\n+\tactions[actions_counter].conf = &set_dscp;\n+}\n+\n+static void\n+add_set_ipv6_dscp(struct rte_flow_action *actions,\n+\tuint8_t actions_counter,\n+\t__rte_unused struct additional_para para)\n+{\n+\tstatic struct rte_flow_action_set_dscp set_dscp;\n+\tuint32_t dscp_value = para.counter;\n+\n+\t/* Set dscp to random value each time */\n+\twhile (dscp_value > 0xff)\n+\t\tdscp_value = dscp_value >> 8;\n+\n+\tset_dscp.dscp = dscp_value;\n+\n+\tactions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP;\n+\tactions[actions_counter].conf = &set_dscp;\n+}\n+\n void\n fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,\n \tuint32_t counter, uint16_t next_table, uint16_t hairpinq)\n@@ -202,6 +449,7 @@ fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,\n \t\t.next_table = next_table,\n \t\t.queues = queues,\n \t\t.queues_number = RXQ_NUM,\n+\t\t.counter = counter,\n \t};\n \n \tif (hairpinq != 0) {\n@@ -234,6 +482,102 @@ fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,\n \t\t\t.mask = FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_SET_TAG),\n \t\t\t.funct = add_set_tag,\n \t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_MAC_SRC\n+\t\t\t),\n+\t\t\t.funct = add_set_src_mac,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_MAC_DST\n+\t\t\t),\n+\t\t\t.funct = add_set_dst_mac,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV4_SRC\n+\t\t\t),\n+\t\t\t.funct = add_set_src_ipv4,\n+\t\t},\n+\t\t{\n+\t\t\t.mask =\tFLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV4_DST\n+\t\t\t),\n+\t\t\t.funct = add_set_dst_ipv4,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV6_SRC\n+\t\t\t),\n+\t\t\t.funct = add_set_src_ipv6,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV6_DST\n+\t\t\t),\n+\t\t\t.funct = add_set_dst_ipv6,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_TP_SRC\n+\t\t\t),\n+\t\t\t.funct = add_set_src_tp,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_TP_DST\n+\t\t\t),\n+\t\t\t.funct = add_set_dst_tp,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_INC_TCP_ACK\n+\t\t\t),\n+\t\t\t.funct = add_inc_tcp_ack,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_DEC_TCP_ACK\n+\t\t\t),\n+\t\t\t.funct = add_dec_tcp_ack,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_INC_TCP_SEQ\n+\t\t\t),\n+\t\t\t.funct = add_inc_tcp_seq,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ\n+\t\t\t),\n+\t\t\t.funct = add_dec_tcp_seq,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_TTL\n+\t\t\t),\n+\t\t\t.funct = add_set_ttl,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_DEC_TTL\n+\t\t\t),\n+\t\t\t.funct = add_dec_ttl,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP\n+\t\t\t),\n+\t\t\t.funct = add_set_ipv4_dscp,\n+\t\t},\n+\t\t{\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP\n+\t\t\t),\n+\t\t\t.funct = add_set_ipv6_dscp,\n+\t\t},\n \t\t{\n \t\t\t.mask = FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_QUEUE),\n \t\t\t.funct = add_queue,\ndiff --git a/app/test-flow-perf/main.c b/app/test-flow-perf/main.c\nindex 0ff8080aa0..1f693d4ed1 100644\n--- a/app/test-flow-perf/main.c\n+++ b/app/test-flow-perf/main.c\n@@ -138,6 +138,38 @@ usage(char *progname)\n \tprintf(\"  --drop: add drop action in flow actions\\n\");\n \tprintf(\"  --hairpin-queue=N: add hairpin-queue action in flow actions\\n\");\n \tprintf(\"  --hairpin-rss=N: add hairpin-rss action in flow actions\\n\");\n+\tprintf(\"  --set-src-mac: add set src mac action to flow actions\\n\"\n+\t\t\"Src mac to be set is random each flow\\n\");\n+\tprintf(\"  --set-dst-mac: add set dst mac action to flow actions\\n\"\n+\t\t \"Dst mac to be set is random each flow\\n\");\n+\tprintf(\"  --set-src-ipv4: add set src ipv4 action to flow actions\\n\"\n+\t\t\"Src ipv4 to be set is random each flow\\n\");\n+\tprintf(\"  --set-dst-ipv4 add set dst ipv4 action to flow actions\\n\"\n+\t\t\"Dst ipv4 to be set is random each flow\\n\");\n+\tprintf(\"  --set-src-ipv6: add set src ipv6 action to flow actions\\n\"\n+\t\t\"Src ipv6 to be set is random each flow\\n\");\n+\tprintf(\"  --set-dst-ipv6: add set dst ipv6 action to flow actions\\n\"\n+\t\t\"Dst ipv6 to be set is random each flow\\n\");\n+\tprintf(\"  --set-src-tp: add set src tp action to flow actions\\n\"\n+\t\t\"Src tp to be set is random each flow\\n\");\n+\tprintf(\"  --set-dst-tp: add set dst tp action to flow actions\\n\"\n+\t\t\"Dst tp to be set is random each flow\\n\");\n+\tprintf(\"  --inc-tcp-ack: add inc tcp ack action to flow actions\\n\"\n+\t\t\"tcp ack will be increments by 1\\n\");\n+\tprintf(\"  --dec-tcp-ack: add dec tcp ack action to flow actions\\n\"\n+\t\t\"tcp ack will be decrements by 1\\n\");\n+\tprintf(\"  --inc-tcp-seq: add inc tcp seq action to flow actions\\n\"\n+\t\t\"tcp seq will be increments by 1\\n\");\n+\tprintf(\"  --dec-tcp-seq: add dec tcp seq action to flow actions\\n\"\n+\t\t\"tcp seq will be decrements by 1\\n\");\n+\tprintf(\"  --set-ttl: add set ttl action to flow actions\\n\"\n+\t\t\"L3 ttl to be set is random each flow\\n\");\n+\tprintf(\"  --dec-ttl: add dec ttl action to flow actions\\n\"\n+\t\t\"L3 ttl will be decrements by 1\\n\");\n+\tprintf(\"  --set-ipv4-dscp: add set ipv4 dscp action to flow actions\\n\"\n+\t\t\"ipv4 dscp value to be set is random each flow\\n\");\n+\tprintf(\"  --set-ipv6-dscp: add set ipv6 dscp action to flow actions\\n\"\n+\t\t\"ipv6 dscp value to be set is random each flow\\n\");\n }\n \n static void\n@@ -304,7 +336,135 @@ args_parse(int argc, char **argv)\n \t\t\t.mask = FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_DROP),\n \t\t\t.map = &flow_actions[0],\n \t\t\t.map_idx = &actions_idx\n-\t\t}\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"set-src-mac\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_MAC_SRC\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"set-dst-mac\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_MAC_DST\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"set-src-ipv4\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV4_SRC\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"set-dst-ipv4\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV4_DST\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"set-src-ipv6\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV6_SRC\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"set-dst-ipv6\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV6_DST\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"set-src-tp\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_TP_SRC\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"set-dst-tp\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_TP_DST\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"inc-tcp-ack\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_INC_TCP_ACK\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"dec-tcp-ack\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_DEC_TCP_ACK\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"inc-tcp-seq\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_INC_TCP_SEQ\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"dec-tcp-seq\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"set-ttl\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_TTL\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"dec-ttl\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_DEC_TTL\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"set-ipv4-dscp\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n+\t\t{\n+\t\t\t.str = \"set-ipv6-dscp\",\n+\t\t\t.mask = FLOW_ACTION_MASK(\n+\t\t\t\tRTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP\n+\t\t\t),\n+\t\t\t.map = &flow_actions[0],\n+\t\t\t.map_idx = &actions_idx\n+\t\t},\n \t};\n \n \tstatic const struct option lgopts[] = {\n@@ -346,6 +506,22 @@ args_parse(int argc, char **argv)\n \t\t{ \"drop\",                       0, 0, 0 },\n \t\t{ \"hairpin-queue\",              1, 0, 0 },\n \t\t{ \"hairpin-rss\",                1, 0, 0 },\n+\t\t{ \"set-src-mac\",                0, 0, 0 },\n+\t\t{ \"set-dst-mac\",                0, 0, 0 },\n+\t\t{ \"set-src-ipv4\",               0, 0, 0 },\n+\t\t{ \"set-dst-ipv4\",               0, 0, 0 },\n+\t\t{ \"set-src-ipv6\",               0, 0, 0 },\n+\t\t{ \"set-dst-ipv6\",               0, 0, 0 },\n+\t\t{ \"set-src-tp\",                 0, 0, 0 },\n+\t\t{ \"set-dst-tp\",                 0, 0, 0 },\n+\t\t{ \"inc-tcp-ack\",                0, 0, 0 },\n+\t\t{ \"dec-tcp-ack\",                0, 0, 0 },\n+\t\t{ \"inc-tcp-seq\",                0, 0, 0 },\n+\t\t{ \"dec-tcp-seq\",                0, 0, 0 },\n+\t\t{ \"set-ttl\",                    0, 0, 0 },\n+\t\t{ \"dec-ttl\",                    0, 0, 0 },\n+\t\t{ \"set-ipv4-dscp\",              0, 0, 0 },\n+\t\t{ \"set-ipv6-dscp\",              0, 0, 0 },\n \t};\n \n \thairpin_queues_num = 0;\n@@ -368,7 +544,7 @@ args_parse(int argc, char **argv)\n \t\t\t\telse\n \t\t\t\t\trte_exit(EXIT_SUCCESS,\n \t\t\t\t\t\t\"flow group should be >= 0\\n\");\n-\t\t\t\tprintf(\"group %d \", flow_group);\n+\t\t\t\tprintf(\"group %d / \", flow_group);\n \t\t\t}\n \n \t\t\tfor (i = 0; i < RTE_DIM(flow_options); i++)\ndiff --git a/doc/guides/rel_notes/release_20_08.rst b/doc/guides/rel_notes/release_20_08.rst\nindex d3ba4cd1d0..7c9d508a07 100644\n--- a/doc/guides/rel_notes/release_20_08.rst\n+++ b/doc/guides/rel_notes/release_20_08.rst\n@@ -280,6 +280,8 @@ New Features\n     moreover the app also now starts to support inner\n     items matching as well.\n \n+  * Start supporting header modify actions.\n+\n \n Removed Items\n -------------\ndiff --git a/doc/guides/tools/flow-perf.rst b/doc/guides/tools/flow-perf.rst\nindex 6941155fee..e225550e40 100644\n--- a/doc/guides/tools/flow-perf.rst\n+++ b/doc/guides/tools/flow-perf.rst\n@@ -244,3 +244,62 @@ Actions:\n \tAdd hairpin RSS action to all flows actions.\n \tThe queues in RSS action will be all hairpin queues configured\n \tin the app.\n+\n+*\t``--set-src-mac``\n+\tAdd set source mac action to all flows actions.\n+\tThe mac to be set is random each flow.\n+\n+*\t``--set-dst-mac``\n+\tAdd set destination mac action to all flows actions.\n+\tThe mac to be set is random each flow.\n+\n+*\t``-set-src-ipv4``\n+\tAdd set source ipv4 action to all flows actions.\n+\tThe ipv4 header to be set is random each flow.\n+\n+*\t``--set-dst-ipv4``\n+\tAdd set destination ipv4 action to all flows actions.\n+\tThe ipv4 header to be set is random each flow.\n+\n+*\t``--set-src-ipv6``\n+\tAdd set source ipv6 action to all flows actions.\n+\tThe ipv6 header to be set is random each flow.\n+\n+*\t``--set-dst-ipv6``\n+\tAdd set destination ipv6 action to all flows actions.\n+\tThe ipv6 header to be set is random each flow.\n+\n+*\t``--set-src-tp``\n+\tAdd set source tp action to all flows actions.\n+\tThe tp sport header to be set is random each flow.\n+\n+*\t``--set-dst-tp``\n+\tAdd set destination tp action to all flows actions.\n+\tThe tp dport header to be set is random each flow.\n+\n+*\t``--inc-tcp-ack``\n+\tAdd increment TCP acknowledgment by one to all flows actions.\n+\n+*\t``--dec-tcp-ack``\n+\tAdd decrement TCP acknowledgment by one to all flows actions.\n+\n+*\t``--inc-tcp-seq``\n+\tAdd increment TCP sequence by one to all flows actions.\n+\n+*\t``--dec-tcp-seq``\n+\tAdd decrement TCP sequence by one to all flows actions.\n+\n+*\t``--set-ttl``\n+\tAdd set IP ttl action to all flows actions.\n+\tThe ttl value to be set is random each flow.\n+\n+*\t``--dec-ttl``\n+\tAdd decrement IP ttl by one to all flows actions.\n+\n+*\t``--set-ipv4-dscp``\n+\tAdd set IPv4 dscp action to all flows actions.\n+\tThe dscp value to be is random each flow.\n+\n+*\t``--set-ipv6-dscp``\n+\tAdd set IPv6 dscp action to all flows actions.\n+\tThe dscp value to be is random each flow.\n",
    "prefixes": [
        "04/13"
    ]
}