get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 131726,
    "url": "http://patchwork.dpdk.org/api/patches/131726/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20230920125250.804055-3-tshmilovich@nvidia.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20230920125250.804055-3-tshmilovich@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230920125250.804055-3-tshmilovich@nvidia.com",
    "date": "2023-09-20T12:52:49",
    "name": "[2/2] app/testpmd: add group set miss actions CLI commands",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "ddb39e377ec4329373ed6e173efdf2bb0e94e71d",
    "submitter": {
        "id": 3144,
        "url": "http://patchwork.dpdk.org/api/people/3144/?format=api",
        "name": "Tomer Shmilovich",
        "email": "tshmilovich@nvidia.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patchwork.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20230920125250.804055-3-tshmilovich@nvidia.com/mbox/",
    "series": [
        {
            "id": 29572,
            "url": "http://patchwork.dpdk.org/api/series/29572/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=29572",
            "date": "2023-09-20T12:52:47",
            "name": "ethdev: add group set miss actions API",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/29572/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/131726/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/131726/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 29FB7425F0;\n\tWed, 20 Sep 2023 14:53:37 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id D5853427D8;\n\tWed, 20 Sep 2023 14:53:30 +0200 (CEST)",
            "from NAM02-BN1-obe.outbound.protection.outlook.com\n (mail-bn1nam02on2069.outbound.protection.outlook.com [40.107.212.69])\n by mails.dpdk.org (Postfix) with ESMTP id 039C8410D3\n for <dev@dpdk.org>; Wed, 20 Sep 2023 14:53:29 +0200 (CEST)",
            "from BL0PR02CA0135.namprd02.prod.outlook.com (2603:10b6:208:35::40)\n by DM4PR12MB5359.namprd12.prod.outlook.com (2603:10b6:5:39e::24) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.27; Wed, 20 Sep\n 2023 12:53:26 +0000",
            "from BL6PEPF0001AB4E.namprd04.prod.outlook.com\n (2603:10b6:208:35:cafe::6f) by BL0PR02CA0135.outlook.office365.com\n (2603:10b6:208:35::40) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.30 via Frontend\n Transport; Wed, 20 Sep 2023 12:53:26 +0000",
            "from mail.nvidia.com (216.228.117.160) by\n BL6PEPF0001AB4E.mail.protection.outlook.com (10.167.242.72) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.6792.19 via Frontend Transport; Wed, 20 Sep 2023 12:53:25 +0000",
            "from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com\n (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Wed, 20 Sep\n 2023 05:53:14 -0700",
            "from nvidia.com (10.126.231.35) by rnnvmail202.nvidia.com\n (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Wed, 20 Sep\n 2023 05:53:12 -0700"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=GzTMo1Q3CqdjLlCYjuhkvTDE2KDUEkbpYugRqrn/d0cRDcXtK2qY4v51JwaGsoQwwwGFEsJijQCnzWMmQ9NrrmnfaOsxq3ZQ72gQKWLU9gOmx/GtZDZx1/7jQa0Ah5BVAofvjoyss6fnr/qaSpFyIFZaEREhgLFUBjCoEW4SREJOho5O+x1WDGBf6l0dbraMjmAR51xXWmhUQyYWUSWDKId26wG7Va5fgx9hfx8U/Ja/FtZBZAa1GylYotOTBzhZyrvbErgk2Ze0HH05Tg8CwIuqETiCSO94dhX3TG3XB+DsC3Z/b2jqxJwYV+2/+AqL0Jl+1b7+DcwLuWpxpYcPoA==",
        "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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=i3DqfKxe6u23E/EQU0RTmSAFFlVK4ULUEDWUXyn6Ido=;\n b=GM/BLcM/ox6rBG7/9AHWNRNztw3YZxem14HHvcLr/GBdfTrRUUbbZy7enM5yru6XRWwsr9cV4PMejLVMl+VgwfNDdfitRVx7OQKX7pTpO9afT49A3zheQhC75ACUhUAG21VNWry/Rj67EntoSDGV8HNF7620H93o8LOwlJDFSOTxy/XkCn2ZmbLS3uwnGyyT9g8VaMAPHuVKH54wVXvo8kyoG6Pj8y0SdTdGdp3qZ3hULW4tSUs8Qy7mHNQGX8KB/t3bkIAgpZ6GS4tJ+1+qjadFXqanTVdfiKpfyEzzxUpV25KWzlwAfXk/nKvK0LBnmZgdGOxFOwYnDxKAee1u6Q==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.117.160) smtp.rcpttodomain=intel.com smtp.mailfrom=nvidia.com;\n dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com;\n dkim=none (message not signed); arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=i3DqfKxe6u23E/EQU0RTmSAFFlVK4ULUEDWUXyn6Ido=;\n b=I8Iq1f7YNi2wgCxGWRNZA4dM+8VqKTG/VHZeJ/Gotqb8voMUWzNsizfJ9EW728+yuWZpQLnd1hItE+hibeRlNb3Kjok6yQSfUibAzZcjcG70UlbXElUNQ45ztDp9coMceoMrgSox6xVxGF/IsyyZPNC5kPdBxPWpPbPmZLjrLfB8AiFeD4/8SvaLXkogLAwFp+ZeEmOl2OvScUXzh8h+W3NiKf7rcLZegRmBXKSuYGlfRmTR8/P7rO2RcnhQlIqlzoz8fgYAq9F4fs6FU6k+R2fBZwNhzgBSiQBjg+xIGyw9IGLfLo2o8NNwgdC7DQxEabvz9t90+JZlJnidf1Nvrg==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.117.160)\n smtp.mailfrom=nvidia.com;\n dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=nvidia.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.117.160 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C",
        "From": "Tomer Shmilovich <tshmilovich@nvidia.com>",
        "To": "Ori Kam <orika@nvidia.com>, Aman Singh <aman.deep.singh@intel.com>,\n \"Yuying Zhang\" <yuying.zhang@intel.com>",
        "CC": "<dev@dpdk.org>",
        "Subject": "[PATCH 2/2] app/testpmd: add group set miss actions CLI commands",
        "Date": "Wed, 20 Sep 2023 12:52:49 +0000",
        "Message-ID": "<20230920125250.804055-3-tshmilovich@nvidia.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20230920125250.804055-1-tshmilovich@nvidia.com>",
        "References": "<20230920125250.804055-1-tshmilovich@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.126.231.35]",
        "X-ClientProxiedBy": "rnnvmail203.nvidia.com (10.129.68.9) To\n rnnvmail202.nvidia.com (10.129.68.7)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "BL6PEPF0001AB4E:EE_|DM4PR12MB5359:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "3b6ba7dc-6746-4c94-5908-08dbb9d8946d",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n qudafzn0T3CbL/PeLHWxUr/VdFEv3VdqAbTjZizf3oskhItKz2ZQ7f4OGiDavT2MVtW/lGRKpi66PhWBAsXg/GBLAWxOU9vjfPDHy1ObAjzDYxKBlHKWcZEz4SqrlUKKbxJXLQ82xJWJZzWw6mc98UP6Yx+XqPF++8n+q4Ob2IBhFqRiDbti7XecscbdMymnYn6rnVhhouk7qWIEnhmRCG3V5W0+XiTWFbmuk1E8uNicXpMGw0gcGBcj3sAtIbVxpYf9lAYLplWKW4FxYMesUn+eTQJZVFFmrBashH0jsVLMOJUu6wlzdqU8DrnmVkCMnkcXx5oaYOlqn7mqeFHMWqLE5z1e87XtHKYj4ScaH3M4Q5QI4jSWX6H6mWFiy3DUto8qdpeXudizHCRwc1Z7FZpPy8yWkjEExY+uLtHGW4x6mSu1jy6EQdy2g9ebU+82GmJGF6oydpsCL9YjsL2EP4cw2dXrw98mUYF2Rew2z8awplg+GYkkc2EyjXuG2auN4CS5yo3TEyllUNcSAXB3E4c4kE1Lftqx8ryswSXDiYKhE3Rg2TEwdBFjHZvwRsWEzyEp9rFBD81bWJtWIH5L1YuiccGw5kEjc8LnmNCQmAh/qZu/1dd4wCohCbouNh5b130Cbf5rTZnWckRvzmxiznxOwujhIuEBW0N3N82n2UAGJJb/ZwxP2UI1JH7ezZg2yQom/UWS4LDClOo0oFSNL5OyMCJk/VxZuTUO+Gf6B1Fz/2vSIUxat3GjxJr657Ca",
        "X-Forefront-Antispam-Report": "CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE;\n SFS:(13230031)(4636009)(396003)(346002)(376002)(136003)(39860400002)(186009)(1800799009)(451199024)(82310400011)(46966006)(40470700004)(36840700001)(8936002)(8676002)(2906002)(316002)(41300700001)(16526019)(6286002)(55016003)(336012)(26005)(40480700001)(426003)(1076003)(110136005)(478600001)(70206006)(70586007)(4326008)(5660300002)(36860700001)(7696005)(40460700003)(47076005)(2616005)(36756003)(6666004)(83380400001)(86362001)(356005)(7636003)(82740400003);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "20 Sep 2023 12:53:25.5450 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 3b6ba7dc-6746-4c94-5908-08dbb9d8946d",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n BL6PEPF0001AB4E.namprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM4PR12MB5359",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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"
    },
    "content": "Add testpmd CLI interface for the group set miss actions API:\n\n\tflow group 0 group_id 1 ingress set_miss_actions jump group 3 / end\n\tflow group 0 group_id 1 ingress set_miss_actions end\n\nSigned-off-by: Tomer Shmilovich <tshmilovich@nvidia.com>\nAcked-by: Ori Kam <orika@nvidia.com>\n---\n app/test-pmd/cmdline_flow.c | 112 ++++++++++++++++++++++++++++++++++++\n app/test-pmd/config.c       |  27 +++++++++\n app/test-pmd/testpmd.h      |   2 +\n 3 files changed, 141 insertions(+)",
    "diff": "diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c\nindex 94827bcc4a..b3b8893e37 100644\n--- a/app/test-pmd/cmdline_flow.c\n+++ b/app/test-pmd/cmdline_flow.c\n@@ -86,6 +86,7 @@ enum index {\n \tPATTERN_TEMPLATE,\n \tACTIONS_TEMPLATE,\n \tTABLE,\n+\tFLOW_GROUP,\n \tINDIRECT_ACTION,\n \tVALIDATE,\n \tCREATE,\n@@ -206,6 +207,13 @@ enum index {\n \tTABLE_PATTERN_TEMPLATE,\n \tTABLE_ACTIONS_TEMPLATE,\n \n+\t/* Group arguments */\n+\tGROUP_ID,\n+\tGROUP_INGRESS,\n+\tGROUP_EGRESS,\n+\tGROUP_TRANSFER,\n+\tGROUP_SET_MISS_ACTIONS,\n+\n \t/* Tunnel arguments. */\n \tTUNNEL_CREATE,\n \tTUNNEL_CREATE_TYPE,\n@@ -1293,6 +1301,14 @@ static const enum index next_at_destroy_attr[] = {\n \tZERO,\n };\n \n+static const enum index next_group_attr[] = {\n+\tGROUP_INGRESS,\n+\tGROUP_EGRESS,\n+\tGROUP_TRANSFER,\n+\tGROUP_SET_MISS_ACTIONS,\n+\tZERO,\n+};\n+\n static const enum index next_table_subcmd[] = {\n \tTABLE_CREATE,\n \tTABLE_DESTROY,\n@@ -2678,6 +2694,9 @@ static int parse_push(struct context *, const struct token *,\n static int parse_pull(struct context *, const struct token *,\n \t\t      const char *, unsigned int,\n \t\t      void *, unsigned int);\n+static int parse_group(struct context *, const struct token *,\n+\t\t       const char *, unsigned int,\n+\t\t       void *, unsigned int);\n static int parse_tunnel(struct context *, const struct token *,\n \t\t\tconst char *, unsigned int,\n \t\t\tvoid *, unsigned int);\n@@ -3021,6 +3040,7 @@ static const struct token token_list[] = {\n \t\t\t      PATTERN_TEMPLATE,\n \t\t\t      ACTIONS_TEMPLATE,\n \t\t\t      TABLE,\n+\t\t\t      FLOW_GROUP,\n \t\t\t      INDIRECT_ACTION,\n \t\t\t      VALIDATE,\n \t\t\t      CREATE,\n@@ -3411,6 +3431,46 @@ static const struct token token_list[] = {\n \t\t.call = parse_table,\n \t},\n \t/* Top-level command. */\n+\t[FLOW_GROUP] = {\n+\t\t.name = \"group\",\n+\t\t.help = \"manage flow groups\",\n+\t\t.next = NEXT(NEXT_ENTRY(GROUP_ID), NEXT_ENTRY(COMMON_PORT_ID)),\n+\t\t.args = ARGS(ARGS_ENTRY(struct buffer, port)),\n+\t\t.call = parse_group,\n+\t},\n+\t/* Sub-level commands. */\n+\t[GROUP_SET_MISS_ACTIONS] = {\n+\t\t.name = \"set_miss_actions\",\n+\t\t.help = \"set group miss actions\",\n+\t\t.next = NEXT(next_action),\n+\t\t.call = parse_group,\n+\t},\n+\t/* Group arguments */\n+\t[GROUP_ID]\t= {\n+\t\t.name = \"group_id\",\n+\t\t.help = \"group id\",\n+\t\t.next = NEXT(next_group_attr, NEXT_ENTRY(COMMON_GROUP_ID)),\n+\t\t.args = ARGS(ARGS_ENTRY(struct buffer, args.vc.attr.group)),\n+\t},\n+\t[GROUP_INGRESS] = {\n+\t\t.name = \"ingress\",\n+\t\t.help = \"group ingress attr\",\n+\t\t.next = NEXT(next_group_attr),\n+\t\t.call = parse_group,\n+\t},\n+\t[GROUP_EGRESS] = {\n+\t\t.name = \"egress\",\n+\t\t.help = \"group egress attr\",\n+\t\t.next = NEXT(next_group_attr),\n+\t\t.call = parse_group,\n+\t},\n+\t[GROUP_TRANSFER] = {\n+\t\t.name = \"transfer\",\n+\t\t.help = \"group transfer attr\",\n+\t\t.next = NEXT(next_group_attr),\n+\t\t.call = parse_group,\n+\t},\n+\t/* Top-level command. */\n \t[QUEUE] = {\n \t\t.name = \"queue\",\n \t\t.help = \"queue a flow rule operation\",\n@@ -10449,6 +10509,54 @@ parse_pull(struct context *ctx, const struct token *token,\n \treturn len;\n }\n \n+static int\n+parse_group(struct context *ctx, const struct token *token,\n+\t    const char *str, unsigned int len,\n+\t    void *buf, unsigned int size)\n+{\n+\tstruct buffer *out = buf;\n+\n+\t/* Token name must match. */\n+\tif (parse_default(ctx, token, str, len, NULL, 0) < 0)\n+\t\treturn -1;\n+\t/* Nothing else to do if there is no buffer. */\n+\tif (!out)\n+\t\treturn len;\n+\tif (!out->command) {\n+\t\tif (ctx->curr != FLOW_GROUP)\n+\t\t\treturn -1;\n+\t\tif (sizeof(*out) > size)\n+\t\t\treturn -1;\n+\t\tout->command = ctx->curr;\n+\t\tctx->objdata = 0;\n+\t\tctx->object = out;\n+\t\tctx->objmask = NULL;\n+\t\tout->args.vc.data = (uint8_t *)out + size;\n+\t\treturn len;\n+\t}\n+\tswitch (ctx->curr) {\n+\tcase GROUP_INGRESS:\n+\t\tout->args.vc.attr.ingress = 1;\n+\t\treturn len;\n+\tcase GROUP_EGRESS:\n+\t\tout->args.vc.attr.egress = 1;\n+\t\treturn len;\n+\tcase GROUP_TRANSFER:\n+\t\tout->args.vc.attr.transfer = 1;\n+\t\treturn len;\n+\tcase GROUP_SET_MISS_ACTIONS:\n+\t\tout->command = ctx->curr;\n+\t\tctx->objdata = 0;\n+\t\tctx->object = out;\n+\t\tctx->objmask = NULL;\n+\t\tout->args.vc.actions = (void *)RTE_ALIGN_CEIL((uintptr_t)(out + 1),\n+\t\t\t\t\t\t\t       sizeof(double));\n+\t\treturn len;\n+\tdefault:\n+\t\treturn -1;\n+\t}\n+}\n+\n static int\n parse_flex(struct context *ctx, const struct token *token,\n \t     const char *str, unsigned int len,\n@@ -12329,6 +12437,10 @@ cmd_flow_parsed(const struct buffer *in)\n \t\t\t\t\tin->args.table_destroy.table_id_n,\n \t\t\t\t\tin->args.table_destroy.table_id);\n \t\tbreak;\n+\tcase GROUP_SET_MISS_ACTIONS:\n+\t\tport_queue_group_set_miss_actions(in->port, &in->args.vc.attr,\n+\t\t\t\t\t\t  in->args.vc.actions);\n+\t\tbreak;\n \tcase QUEUE_CREATE:\n \t\tport_queue_flow_create(in->port, in->queue, in->postpone,\n \t\t\tin->args.vc.table_id, in->args.vc.rule_id,\ndiff --git a/app/test-pmd/config.c b/app/test-pmd/config.c\nindex 3d1da99307..709864bb44 100644\n--- a/app/test-pmd/config.c\n+++ b/app/test-pmd/config.c\n@@ -3514,6 +3514,33 @@ port_queue_flow_pull(portid_t port_id, queueid_t queue_id)\n \treturn ret;\n }\n \n+/* Set group miss actions */\n+int\n+port_queue_group_set_miss_actions(portid_t port_id, const struct rte_flow_attr *attr,\n+\t\t\t\t  const struct rte_flow_action *actions)\n+{\n+\tstruct rte_flow_group_attr gattr = {\n+\t\t.ingress = attr->ingress,\n+\t\t.egress = attr->egress,\n+\t\t.transfer = attr->transfer,\n+\t};\n+\tstruct rte_flow_error error;\n+\tint ret = 0;\n+\n+\tif (port_id_is_invalid(port_id, ENABLED_WARN) ||\n+\t    port_id == (portid_t)RTE_PORT_ALL)\n+\t\treturn -EINVAL;\n+\n+\tmemset(&error, 0x66, sizeof(error));\n+\tret = rte_flow_group_set_miss_actions(port_id, attr->group, &gattr, actions, &error);\n+\n+\tif (ret < 0)\n+\t\treturn port_flow_complain(&error);\n+\n+\tprintf(\"Group #%u set miss actions succeeded\\n\", attr->group);\n+\treturn ret;\n+}\n+\n /** Create flow rule. */\n int\n port_flow_create(portid_t port_id,\ndiff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h\nindex f1df6a8faf..e69b76f380 100644\n--- a/app/test-pmd/testpmd.h\n+++ b/app/test-pmd/testpmd.h\n@@ -979,6 +979,8 @@ int port_flow_template_table_create(portid_t port_id, uint32_t id,\n int port_flow_template_table_destroy(portid_t port_id,\n \t\t\t    uint32_t n, const uint32_t *table);\n int port_flow_template_table_flush(portid_t port_id);\n+int port_queue_group_set_miss_actions(portid_t port_id, const struct rte_flow_attr *attr,\n+\t\t\t\t      const struct rte_flow_action *actions);\n int port_queue_flow_create(portid_t port_id, queueid_t queue_id,\n \t\t\t   bool postpone, uint32_t table_id, uint32_t rule_idx,\n \t\t\t   uint32_t pattern_idx, uint32_t actions_idx,\n",
    "prefixes": [
        "2/2"
    ]
}