get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 133600,
    "url": "http://patches.dpdk.org/api/patches/133600/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20231029163202.216450-27-getelson@nvidia.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": "<20231029163202.216450-27-getelson@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231029163202.216450-27-getelson@nvidia.com",
    "date": "2023-10-29T16:31:59",
    "name": "[27/30] net/mlx5/hws: add IPv6 routing extension push remove actions",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a4569b1bf6538ec2ba71ff2edf660910842562ed",
    "submitter": {
        "id": 1882,
        "url": "http://patches.dpdk.org/api/people/1882/?format=api",
        "name": "Gregory Etelson",
        "email": "getelson@nvidia.com"
    },
    "delegate": {
        "id": 3268,
        "url": "http://patches.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20231029163202.216450-27-getelson@nvidia.com/mbox/",
    "series": [
        {
            "id": 30049,
            "url": "http://patches.dpdk.org/api/series/30049/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=30049",
            "date": "2023-10-29T16:31:33",
            "name": "[01/30] net/mlx5/hws: Definer, add mlx5dr context to definer_conv_data",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/30049/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/133600/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/133600/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 2584543238;\n\tSun, 29 Oct 2023 17:36:42 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id A565640A67;\n\tSun, 29 Oct 2023 17:34:17 +0100 (CET)",
            "from NAM10-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam10on2050.outbound.protection.outlook.com [40.107.94.50])\n by mails.dpdk.org (Postfix) with ESMTP id DCAC442DE0\n for <dev@dpdk.org>; Sun, 29 Oct 2023 17:33:55 +0100 (CET)",
            "from BL1PR13CA0104.namprd13.prod.outlook.com (2603:10b6:208:2b9::19)\n by DM4PR12MB5135.namprd12.prod.outlook.com (2603:10b6:5:392::9) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6933.26; Sun, 29 Oct\n 2023 16:33:53 +0000",
            "from BL02EPF0001A0FF.namprd03.prod.outlook.com\n (2603:10b6:208:2b9:cafe::db) by BL1PR13CA0104.outlook.office365.com\n (2603:10b6:208:2b9::19) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.15 via Frontend\n Transport; Sun, 29 Oct 2023 16:33:53 +0000",
            "from mail.nvidia.com (216.228.117.161) by\n BL02EPF0001A0FF.mail.protection.outlook.com (10.167.242.106) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.6933.15 via Frontend Transport; Sun, 29 Oct 2023 16:33:53 +0000",
            "from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com\n (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 29 Oct\n 2023 09:33:45 -0700",
            "from nvidia.com (10.126.231.35) by rnnvmail201.nvidia.com\n (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 29 Oct\n 2023 09:33:42 -0700"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=La10lPSr5EateqHXqBYcBmKEY/z0MoKQAGNDQ1brLL/YuhrzOK94/ALztiT1eB4XHi8mNX3CeJubFjeQ87YQZE5ejr1X4fpf1LizJhDuGULiYwHuEaaTI3sMphVEg9pMrMZFuM9HV5jQIGLzRBFqS49zgnwSRx8eOpUFNZlEFRS4PX5S8i6TDIOU4oW4YKoA4CnRqzlkk+U2DS1kG5D3F74o1DTsskaIvWCbE7n5GUJYgy40KsiYbAAcfbLmTvDn2MSmwH5E27yZyhNCMyyRBF+ftfTusxsoB1W5D7thOTesoyqXae+B+LLjWcNdhK2ExuBmOiHPVVdyf0S8GwpKGw==",
        "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=2BkKAhs7b/8lipODGG7K1J3DfeQvWPPRVEmyReRNXOg=;\n b=eWGBeYo1rm9wZ8DMGMtZ69iYIN8mvOHEFvvlLMkkuY69CV3kZHHnBUvOqI2AlOW8FEcFD04CM5Ewpp98cutvFfdbRh3qC/hOTunnC/yo0U3iAS92i1C6s7z5ShavwINqsmaTtVptOqPBpk7Q/iCEN8ddIqG0hLurclTjqb0Cz9XOeMbTOHTc6eZeVOP8O/lMbkhBkJdOPr/zJVwBIqvRzjqBz541gzgCipUezV1BErM4o96ov9k8yMNB0luUOIJ4fHtDjSwtXXMeW1pktZ+TcEJUU4+7nWATsUKi9YxK25R2/EbavbQdWcKGtBgjCnZLQIeRL+ZwIig9ROfJOOm15g==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.117.161) smtp.rcpttodomain=dpdk.org 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 (0)",
        "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=2BkKAhs7b/8lipODGG7K1J3DfeQvWPPRVEmyReRNXOg=;\n b=DN+JelA9nmjA4l95jzPCFdhxOay4rnjH9bcuViXcNBGhO4Jzu37bO1F3Z5uSBRJ3tm4oElQfo/0aPdlo5aCXFT5qHkwE/xxgeEbu8MG4UrFVgIz+4M3Kdkul7IifUuaPlQS+q/AmES7UEYMQUhwB5DeqRAHJ/WgTwLhPjxb7OpffwivHk53cKOagp/XiIZMGCi2AvOWkI+MQ8WIYNWG9iZSbHVM/+sOYqUoEz8+e5kipZ5ps1AQviAPMTXFLknFs+8idIujssQo0jk9QeZ+mzYajr+6FS1M8+mhxgVf8yJRsJNkEzyTFsukbxWsaHbaaAcn3k33CUz7/Umu9Rj1xXQ==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.117.161)\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.161 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C",
        "From": "Gregory Etelson <getelson@nvidia.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<getelson@nvidia.com>, <mkashani@nvidia.com>, <rasland@nvidia.com>,\n Rongwei Liu <rongweil@nvidia.com>, Alex Vesker <valex@nvidia.com>, Ori Kam\n <orika@nvidia.com>, Matan Azrad <matan@nvidia.com>, Viacheslav Ovsiienko\n <viacheslavo@nvidia.com>, Suanming Mou <suanmingm@nvidia.com>",
        "Subject": "[PATCH 27/30] net/mlx5/hws: add IPv6 routing extension push remove\n actions",
        "Date": "Sun, 29 Oct 2023 18:31:59 +0200",
        "Message-ID": "<20231029163202.216450-27-getelson@nvidia.com>",
        "X-Mailer": "git-send-email 2.39.2",
        "In-Reply-To": "<20231029163202.216450-1-getelson@nvidia.com>",
        "References": "<20231029163202.216450-1-getelson@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 rnnvmail201.nvidia.com (10.129.68.8)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "BL02EPF0001A0FF:EE_|DM4PR12MB5135:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "02cc05f7-93ef-400c-3024-08dbd89cd6d0",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n RNgoI7Kz2oPK633SBJ/2hf8RGn/A6VlnMj9ZFp3Amfat8auHLdkH+HnYIuzTpLRrco8xKBVkTiJKtqGxQF8v3tJt3k3/Zw33A6li2qjtYeKJpA5C8eBMo0B44VqFKR4PvQSNRkxsF228U1bMVjdmQN34HXjWk3owUYqwznANqI1ak9U7rw62UTaPvBBKNVHePhVSccY5xhJCWkCqlF9jwtBgjuHy7bcrflocQF3KUP44zZ05iB6cAy4MSY+ZT6gU1AFEL8Vq7WZ8MPk1Xk5cRGHSVWySEGB37a2JwxSLrAaMrOZtVvRg7EG1MuJYfD9Ni4q0bTF3Z9MI7d4KZdmcIdQ8+s3BEXqyFgCkiNZV9jU2JEkOn1USaQimlzMK2BWPEPNFgyqUdgguaiyy2fOlAb54hmOssVaOYhZBTNxmrnuJH7pR5oj/FwjdOOrtskVF4TwFLPQrB8KsdusgOa2RkHECq5MME9ozNe55lDG3oX8rL1zhIjKh/RR1E61zftdDnkFWdlJTbJ1UlELseQ1qftc3Y486kenmGmJvIBNtgyUnpuAIw26OqOZTmna01A2GVFj+7ejfLoz3T8fwxt94VaBTvzXAgm3RU0adSziyzTutKLIqAmTyq1DhCUk2HUZK5Jsk9xNcy8IZANIW/1R7wzp8MZyPUmyj6RCtapqleHLZ4BES0SUeYbNWfK/v+t1W9hsE0P6GFyvkT6dgepsPiWsF8AiRykiGybKSpRnMRgjf68jywzHXKQ3SC+ZUJFb2",
        "X-Forefront-Antispam-Report": "CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE;\n SFS:(13230031)(4636009)(346002)(39860400002)(376002)(396003)(136003)(230922051799003)(1800799009)(186009)(82310400011)(64100799003)(451199024)(40470700004)(46966006)(36840700001)(7696005)(6666004)(478600001)(83380400001)(30864003)(6286002)(47076005)(26005)(16526019)(2616005)(107886003)(1076003)(336012)(426003)(2906002)(5660300002)(54906003)(41300700001)(6916009)(70586007)(316002)(70206006)(8936002)(8676002)(4326008)(36860700001)(86362001)(36756003)(356005)(7636003)(82740400003)(40460700003)(40480700001)(55016003);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "29 Oct 2023 16:33:53.0866 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 02cc05f7-93ef-400c-3024-08dbd89cd6d0",
        "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.161];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n BL02EPF0001A0FF.namprd03.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM4PR12MB5135",
        "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": "From: Rongwei Liu <rongweil@nvidia.com>\n\nAdd two dr_actions to implement IPv6 routing extension push and\nremove, the new actions are multiple actions combination instead\nof new types.\n\nBasically, there are two modify headers plus one reformat action.\nAction order is the same as encap and decap actions.\n\nSigned-off-by: Rongwei Liu <rongweil@nvidia.com>\nReviewed-by: Alex Vesker <valex@nvidia.com>\nAcked-by: Ori Kam <orika@nvidia.com>\n---\n drivers/common/mlx5/mlx5_prm.h       |   1 +\n drivers/net/mlx5/hws/mlx5dr.h        |  29 +++\n drivers/net/mlx5/hws/mlx5dr_action.c | 358 ++++++++++++++++++++++++++-\n drivers/net/mlx5/hws/mlx5dr_action.h |   7 +\n drivers/net/mlx5/hws/mlx5dr_debug.c  |   2 +\n drivers/net/mlx5/mlx5_flow.h         |  44 ++++\n 6 files changed, 438 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h\nindex a5ecce98e9..32ec3df7ef 100644\n--- a/drivers/common/mlx5/mlx5_prm.h\n+++ b/drivers/common/mlx5/mlx5_prm.h\n@@ -3586,6 +3586,7 @@ enum mlx5_ifc_header_anchors {\n \tMLX5_HEADER_ANCHOR_PACKET_START = 0x0,\n \tMLX5_HEADER_ANCHOR_FIRST_VLAN_START = 0x2,\n \tMLX5_HEADER_ANCHOR_IPV6_IPV4 = 0x07,\n+\tMLX5_HEADER_ANCHOR_TCP_UDP = 0x09,\n \tMLX5_HEADER_ANCHOR_INNER_MAC = 0x13,\n \tMLX5_HEADER_ANCHOR_INNER_IPV6_IPV4 = 0x19,\n };\ndiff --git a/drivers/net/mlx5/hws/mlx5dr.h b/drivers/net/mlx5/hws/mlx5dr.h\nindex 2e692f76c3..9e7dd9c429 100644\n--- a/drivers/net/mlx5/hws/mlx5dr.h\n+++ b/drivers/net/mlx5/hws/mlx5dr.h\n@@ -54,6 +54,8 @@ enum mlx5dr_action_type {\n \tMLX5DR_ACTION_TYP_REMOVE_HEADER,\n \tMLX5DR_ACTION_TYP_DEST_ROOT,\n \tMLX5DR_ACTION_TYP_DEST_ARRAY,\n+\tMLX5DR_ACTION_TYP_POP_IPV6_ROUTE_EXT,\n+\tMLX5DR_ACTION_TYP_PUSH_IPV6_ROUTE_EXT,\n \tMLX5DR_ACTION_TYP_MAX,\n };\n \n@@ -278,6 +280,11 @@ struct mlx5dr_rule_action {\n \t\t\tuint8_t *data;\n \t\t} reformat;\n \n+\t\tstruct {\n+\t\t\tuint32_t offset;\n+\t\t\tuint8_t *header;\n+\t\t} ipv6_ext;\n+\n \t\tstruct {\n \t\t\trte_be32_t vlan_hdr;\n \t\t} push_vlan;\n@@ -889,6 +896,28 @@ mlx5dr_action_create_remove_header(struct mlx5dr_context *ctx,\n \t\t\t\t   struct mlx5dr_action_remove_header_attr *attr,\n \t\t\t\t   uint32_t flags);\n \n+/* Create action to push or remove IPv6 extension header.\n+ *\n+ * @param[in] ctx\n+ *\tThe context in which the new action will be created.\n+ * @param[in] type\n+ *\tType of direct rule action: MLX5DR_ACTION_TYP_PUSH_IPV6_ROUTE_EXT or\n+ *\tMLX5DR_ACTION_TYP_POP_IPV6_ROUTE_EXT.\n+ * @param[in] hdr\n+ *\tHeader for packet reformat.\n+ * @param[in] log_bulk_size\n+ *\tNumber of unique values used with this pattern.\n+ * @param[in] flags\n+ *\tAction creation flags. (enum mlx5dr_action_flags)\n+ * @return pointer to mlx5dr_action on success NULL otherwise.\n+ */\n+struct mlx5dr_action *\n+mlx5dr_action_create_reformat_ipv6_ext(struct mlx5dr_context *ctx,\n+\t\t\t\t       enum mlx5dr_action_type type,\n+\t\t\t\t       struct mlx5dr_action_reformat_header *hdr,\n+\t\t\t\t       uint32_t log_bulk_size,\n+\t\t\t\t       uint32_t flags);\n+\n /* Destroy direct rule action.\n  *\n  * @param[in] action\ndiff --git a/drivers/net/mlx5/hws/mlx5dr_action.c b/drivers/net/mlx5/hws/mlx5dr_action.c\nindex 76ca57d302..6ac3c2f782 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_action.c\n+++ b/drivers/net/mlx5/hws/mlx5dr_action.c\n@@ -26,7 +26,8 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_TRAILER),\n \t\tBIT(MLX5DR_ACTION_TYP_REMOVE_HEADER) |\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_TNL_L2_TO_L2) |\n-\t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_TNL_L3_TO_L2),\n+\t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_TNL_L3_TO_L2) |\n+\t\tBIT(MLX5DR_ACTION_TYP_POP_IPV6_ROUTE_EXT),\n \t\tBIT(MLX5DR_ACTION_TYP_POP_VLAN),\n \t\tBIT(MLX5DR_ACTION_TYP_POP_VLAN),\n \t\tBIT(MLX5DR_ACTION_TYP_CTR),\n@@ -39,6 +40,7 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_\n \t\tBIT(MLX5DR_ACTION_TYP_PUSH_VLAN),\n \t\tBIT(MLX5DR_ACTION_TYP_MODIFY_HDR),\n \t\tBIT(MLX5DR_ACTION_TYP_INSERT_HEADER) |\n+\t\tBIT(MLX5DR_ACTION_TYP_PUSH_IPV6_ROUTE_EXT) |\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_L2_TO_TNL_L2) |\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_L2_TO_TNL_L3),\n \t\tBIT(MLX5DR_ACTION_TYP_TBL) |\n@@ -61,6 +63,7 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_\n \t\tBIT(MLX5DR_ACTION_TYP_PUSH_VLAN),\n \t\tBIT(MLX5DR_ACTION_TYP_MODIFY_HDR),\n \t\tBIT(MLX5DR_ACTION_TYP_INSERT_HEADER) |\n+\t\tBIT(MLX5DR_ACTION_TYP_PUSH_IPV6_ROUTE_EXT) |\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_L2_TO_TNL_L2) |\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_L2_TO_TNL_L3),\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_TRAILER),\n@@ -75,7 +78,8 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_TRAILER),\n \t\tBIT(MLX5DR_ACTION_TYP_REMOVE_HEADER) |\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_TNL_L2_TO_L2) |\n-\t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_TNL_L3_TO_L2),\n+\t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_TNL_L3_TO_L2) |\n+\t\tBIT(MLX5DR_ACTION_TYP_POP_IPV6_ROUTE_EXT),\n \t\tBIT(MLX5DR_ACTION_TYP_POP_VLAN),\n \t\tBIT(MLX5DR_ACTION_TYP_POP_VLAN),\n \t\tBIT(MLX5DR_ACTION_TYP_CTR),\n@@ -88,6 +92,7 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_\n \t\tBIT(MLX5DR_ACTION_TYP_PUSH_VLAN),\n \t\tBIT(MLX5DR_ACTION_TYP_MODIFY_HDR),\n \t\tBIT(MLX5DR_ACTION_TYP_INSERT_HEADER) |\n+\t\tBIT(MLX5DR_ACTION_TYP_PUSH_IPV6_ROUTE_EXT) |\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_L2_TO_TNL_L2) |\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_L2_TO_TNL_L3),\n \t\tBIT(MLX5DR_ACTION_TYP_REFORMAT_TRAILER),\n@@ -1710,7 +1715,7 @@ mlx5dr_action_create_reformat(struct mlx5dr_context *ctx,\n \n \tif (!mlx5dr_action_is_hws_flags(flags) ||\n \t    ((flags & MLX5DR_ACTION_FLAG_SHARED) && (log_bulk_size || num_of_hdrs > 1))) {\n-\t\tDR_LOG(ERR, \"Reformat flags don't fit HWS (flags: %x0x)\", flags);\n+\t\tDR_LOG(ERR, \"Reformat flags don't fit HWS (flags: 0x%x)\", flags);\n \t\trte_errno = EINVAL;\n \t\tgoto free_action;\n \t}\n@@ -2382,6 +2387,347 @@ mlx5dr_action_create_remove_header(struct mlx5dr_context *ctx,\n \treturn NULL;\n }\n \n+static void *\n+mlx5dr_action_create_pop_ipv6_route_ext_mhdr1(struct mlx5dr_action *action)\n+{\n+\tstruct mlx5dr_action_mh_pattern pattern;\n+\t__be64 cmd[3] = {0};\n+\tuint16_t mod_id;\n+\n+\tmod_id = flow_hw_get_ipv6_route_ext_mod_id_from_ctx(action->ctx, 0);\n+\tif (!mod_id) {\n+\t\trte_errno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\n+\t/*\n+\t * Backup ipv6_route_ext.next_hdr to ipv6_route_ext.seg_left.\n+\t * Next_hdr will be copied to ipv6.protocol after pop done.\n+\t */\n+\tMLX5_SET(copy_action_in, &cmd[0], action_type, MLX5_MODIFICATION_TYPE_COPY);\n+\tMLX5_SET(copy_action_in, &cmd[0], length, 8);\n+\tMLX5_SET(copy_action_in, &cmd[0], src_offset, 24);\n+\tMLX5_SET(copy_action_in, &cmd[0], src_field, mod_id);\n+\tMLX5_SET(copy_action_in, &cmd[0], dst_field, mod_id);\n+\n+\t/* Add nop between the continuous same modify field id */\n+\tMLX5_SET(copy_action_in, &cmd[1], action_type, MLX5_MODIFICATION_TYPE_NOP);\n+\n+\t/* Clear next_hdr for right checksum */\n+\tMLX5_SET(set_action_in, &cmd[2], action_type, MLX5_MODIFICATION_TYPE_SET);\n+\tMLX5_SET(set_action_in, &cmd[2], length, 8);\n+\tMLX5_SET(set_action_in, &cmd[2], offset, 24);\n+\tMLX5_SET(set_action_in, &cmd[2], field, mod_id);\n+\n+\tpattern.data = cmd;\n+\tpattern.sz = sizeof(cmd);\n+\n+\treturn mlx5dr_action_create_modify_header(action->ctx, 1, &pattern,\n+\t\t\t\t\t\t  0, action->flags);\n+}\n+\n+static void *\n+mlx5dr_action_create_pop_ipv6_route_ext_mhdr2(struct mlx5dr_action *action)\n+{\n+\tenum mlx5_modification_field field[MLX5_ST_SZ_DW(definer_hl_ipv6_addr)] = {\n+\t\tMLX5_MODI_OUT_DIPV6_127_96,\n+\t\tMLX5_MODI_OUT_DIPV6_95_64,\n+\t\tMLX5_MODI_OUT_DIPV6_63_32,\n+\t\tMLX5_MODI_OUT_DIPV6_31_0\n+\t};\n+\tstruct mlx5dr_action_mh_pattern pattern;\n+\t__be64 cmd[5] = {0};\n+\tuint16_t mod_id;\n+\tuint32_t i;\n+\n+\t/* Copy ipv6_route_ext[first_segment].dst_addr by flex parser to ipv6.dst_addr */\n+\tfor (i = 0; i < MLX5_ST_SZ_DW(definer_hl_ipv6_addr); i++) {\n+\t\tmod_id = flow_hw_get_ipv6_route_ext_mod_id_from_ctx(action->ctx, i + 1);\n+\t\tif (!mod_id) {\n+\t\t\trte_errno = EINVAL;\n+\t\t\treturn NULL;\n+\t\t}\n+\n+\t\tMLX5_SET(copy_action_in, &cmd[i], action_type, MLX5_MODIFICATION_TYPE_COPY);\n+\t\tMLX5_SET(copy_action_in, &cmd[i], dst_field, field[i]);\n+\t\tMLX5_SET(copy_action_in, &cmd[i], src_field, mod_id);\n+\t}\n+\n+\tmod_id = flow_hw_get_ipv6_route_ext_mod_id_from_ctx(action->ctx, 0);\n+\tif (!mod_id) {\n+\t\trte_errno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\n+\t/* Restore next_hdr from seg_left for flex parser identifying */\n+\tMLX5_SET(copy_action_in, &cmd[4], action_type, MLX5_MODIFICATION_TYPE_COPY);\n+\tMLX5_SET(copy_action_in, &cmd[4], length, 8);\n+\tMLX5_SET(copy_action_in, &cmd[4], dst_offset, 24);\n+\tMLX5_SET(copy_action_in, &cmd[4], src_field, mod_id);\n+\tMLX5_SET(copy_action_in, &cmd[4], dst_field, mod_id);\n+\n+\tpattern.data = cmd;\n+\tpattern.sz = sizeof(cmd);\n+\n+\treturn mlx5dr_action_create_modify_header(action->ctx, 1, &pattern,\n+\t\t\t\t\t\t  0, action->flags);\n+}\n+\n+static void *\n+mlx5dr_action_create_pop_ipv6_route_ext_mhdr3(struct mlx5dr_action *action)\n+{\n+\tuint8_t cmd[MLX5DR_MODIFY_ACTION_SIZE] = {0};\n+\tstruct mlx5dr_action_mh_pattern pattern;\n+\tuint16_t mod_id;\n+\n+\tmod_id = flow_hw_get_ipv6_route_ext_mod_id_from_ctx(action->ctx, 0);\n+\tif (!mod_id) {\n+\t\trte_errno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\n+\t/* Copy ipv6_route_ext.next_hdr to ipv6.protocol */\n+\tMLX5_SET(copy_action_in, cmd, action_type, MLX5_MODIFICATION_TYPE_COPY);\n+\tMLX5_SET(copy_action_in, cmd, length, 8);\n+\tMLX5_SET(copy_action_in, cmd, src_offset, 24);\n+\tMLX5_SET(copy_action_in, cmd, src_field, mod_id);\n+\tMLX5_SET(copy_action_in, cmd, dst_field, MLX5_MODI_OUT_IPV6_NEXT_HDR);\n+\n+\tpattern.data = (__be64 *)cmd;\n+\tpattern.sz = sizeof(cmd);\n+\n+\treturn mlx5dr_action_create_modify_header(action->ctx, 1, &pattern,\n+\t\t\t\t\t\t  0, action->flags);\n+}\n+\n+static int\n+mlx5dr_action_create_pop_ipv6_route_ext(struct mlx5dr_action *action)\n+{\n+\tuint8_t anchor_id = flow_hw_get_ipv6_route_ext_anchor_from_ctx(action->ctx);\n+\tstruct mlx5dr_action_remove_header_attr hdr_attr;\n+\tuint32_t i;\n+\n+\tif (!anchor_id) {\n+\t\trte_errno = EINVAL;\n+\t\treturn rte_errno;\n+\t}\n+\n+\taction->ipv6_route_ext.action[0] =\n+\t\tmlx5dr_action_create_pop_ipv6_route_ext_mhdr1(action);\n+\taction->ipv6_route_ext.action[1] =\n+\t\tmlx5dr_action_create_pop_ipv6_route_ext_mhdr2(action);\n+\taction->ipv6_route_ext.action[2] =\n+\t\tmlx5dr_action_create_pop_ipv6_route_ext_mhdr3(action);\n+\n+\thdr_attr.by_anchor.decap = 1;\n+\thdr_attr.by_anchor.start_anchor = anchor_id;\n+\thdr_attr.by_anchor.end_anchor = MLX5_HEADER_ANCHOR_TCP_UDP;\n+\thdr_attr.type = MLX5DR_ACTION_REMOVE_HEADER_TYPE_BY_HEADER;\n+\taction->ipv6_route_ext.action[3] =\n+\t\tmlx5dr_action_create_remove_header(action->ctx, &hdr_attr, action->flags);\n+\n+\tif (!action->ipv6_route_ext.action[0] || !action->ipv6_route_ext.action[1] ||\n+\t    !action->ipv6_route_ext.action[2] || !action->ipv6_route_ext.action[3]) {\n+\t\tDR_LOG(ERR, \"Failed to create ipv6_route_ext pop subaction\");\n+\t\tgoto err;\n+\t}\n+\n+\treturn 0;\n+\n+err:\n+\tfor (i = 0; i < MLX5DR_ACTION_IPV6_EXT_MAX_SA; i++)\n+\t\tif (action->ipv6_route_ext.action[i])\n+\t\t\tmlx5dr_action_destroy(action->ipv6_route_ext.action[i]);\n+\n+\treturn rte_errno;\n+}\n+\n+static void *\n+mlx5dr_action_create_push_ipv6_route_ext_mhdr1(struct mlx5dr_action *action)\n+{\n+\tuint8_t cmd[MLX5DR_MODIFY_ACTION_SIZE] = {0};\n+\tstruct mlx5dr_action_mh_pattern pattern;\n+\n+\t/* Set ipv6.protocol to IPPROTO_ROUTING */\n+\tMLX5_SET(set_action_in, cmd, action_type, MLX5_MODIFICATION_TYPE_SET);\n+\tMLX5_SET(set_action_in, cmd, length, 8);\n+\tMLX5_SET(set_action_in, cmd, field, MLX5_MODI_OUT_IPV6_NEXT_HDR);\n+\tMLX5_SET(set_action_in, cmd, data, IPPROTO_ROUTING);\n+\n+\tpattern.data = (__be64 *)cmd;\n+\tpattern.sz = sizeof(cmd);\n+\n+\treturn mlx5dr_action_create_modify_header(action->ctx, 1, &pattern, 0,\n+\t\t\t\t\t\t  action->flags | MLX5DR_ACTION_FLAG_SHARED);\n+}\n+\n+static void *\n+mlx5dr_action_create_push_ipv6_route_ext_mhdr2(struct mlx5dr_action *action,\n+\t\t\t\t\t       uint32_t bulk_size,\n+\t\t\t\t\t       uint8_t *data)\n+{\n+\tenum mlx5_modification_field field[MLX5_ST_SZ_DW(definer_hl_ipv6_addr)] = {\n+\t\tMLX5_MODI_OUT_DIPV6_127_96,\n+\t\tMLX5_MODI_OUT_DIPV6_95_64,\n+\t\tMLX5_MODI_OUT_DIPV6_63_32,\n+\t\tMLX5_MODI_OUT_DIPV6_31_0\n+\t};\n+\tstruct mlx5dr_action_mh_pattern pattern;\n+\tuint32_t *ipv6_dst_addr = NULL;\n+\tuint8_t seg_left, next_hdr;\n+\t__be64 cmd[5] = {0};\n+\tuint16_t mod_id;\n+\tuint32_t i;\n+\n+\t/* Fetch the last IPv6 address in the segment list */\n+\tif (action->flags & MLX5DR_ACTION_FLAG_SHARED) {\n+\t\tseg_left = MLX5_GET(header_ipv6_routing_ext, data, segments_left) - 1;\n+\t\tipv6_dst_addr = (uint32_t *)data + MLX5_ST_SZ_DW(header_ipv6_routing_ext) +\n+\t\t\t\tseg_left * MLX5_ST_SZ_DW(definer_hl_ipv6_addr);\n+\t}\n+\n+\t/* Copy IPv6 destination address from ipv6_route_ext.last_segment */\n+\tfor (i = 0; i < MLX5_ST_SZ_DW(definer_hl_ipv6_addr); i++) {\n+\t\tMLX5_SET(set_action_in, &cmd[i], action_type, MLX5_MODIFICATION_TYPE_SET);\n+\t\tMLX5_SET(set_action_in, &cmd[i], field, field[i]);\n+\t\tif (action->flags & MLX5DR_ACTION_FLAG_SHARED)\n+\t\t\tMLX5_SET(set_action_in, &cmd[i], data, be32toh(*ipv6_dst_addr++));\n+\t}\n+\n+\tmod_id = flow_hw_get_ipv6_route_ext_mod_id_from_ctx(action->ctx, 0);\n+\tif (!mod_id) {\n+\t\trte_errno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\n+\t/* Set ipv6_route_ext.next_hdr since initially pushed as 0 for right checksum */\n+\tMLX5_SET(set_action_in, &cmd[4], action_type, MLX5_MODIFICATION_TYPE_SET);\n+\tMLX5_SET(set_action_in, &cmd[4], length, 8);\n+\tMLX5_SET(set_action_in, &cmd[4], offset, 24);\n+\tMLX5_SET(set_action_in, &cmd[4], field, mod_id);\n+\tif (action->flags & MLX5DR_ACTION_FLAG_SHARED) {\n+\t\tnext_hdr = MLX5_GET(header_ipv6_routing_ext, data, next_hdr);\n+\t\tMLX5_SET(set_action_in, &cmd[4], data, next_hdr);\n+\t}\n+\n+\tpattern.data = cmd;\n+\tpattern.sz = sizeof(cmd);\n+\n+\treturn mlx5dr_action_create_modify_header(action->ctx, 1, &pattern,\n+\t\t\t\t\t\t  bulk_size, action->flags);\n+}\n+\n+static int\n+mlx5dr_action_create_push_ipv6_route_ext(struct mlx5dr_action *action,\n+\t\t\t\t\t struct mlx5dr_action_reformat_header *hdr,\n+\t\t\t\t\t uint32_t bulk_size)\n+{\n+\tstruct mlx5dr_action_insert_header insert_hdr = { {0} };\n+\tuint8_t header[MLX5_PUSH_MAX_LEN];\n+\tuint32_t i;\n+\n+\tif (!hdr || !hdr->sz || hdr->sz > MLX5_PUSH_MAX_LEN ||\n+\t    ((action->flags & MLX5DR_ACTION_FLAG_SHARED) && !hdr->data)) {\n+\t\tDR_LOG(ERR, \"Invalid ipv6_route_ext header\");\n+\t\trte_errno = EINVAL;\n+\t\treturn rte_errno;\n+\t}\n+\n+\tif (action->flags & MLX5DR_ACTION_FLAG_SHARED) {\n+\t\tmemcpy(header, hdr->data, hdr->sz);\n+\t\t/* Clear ipv6_route_ext.next_hdr for right checksum */\n+\t\tMLX5_SET(header_ipv6_routing_ext, header, next_hdr, 0);\n+\t}\n+\n+\tinsert_hdr.anchor = MLX5_HEADER_ANCHOR_TCP_UDP;\n+\tinsert_hdr.encap = 1;\n+\tinsert_hdr.hdr.sz = hdr->sz;\n+\tinsert_hdr.hdr.data = header;\n+\taction->ipv6_route_ext.action[0] =\n+\t\tmlx5dr_action_create_insert_header(action->ctx, 1, &insert_hdr,\n+\t\t\t\t\t\t   bulk_size, action->flags);\n+\taction->ipv6_route_ext.action[1] =\n+\t\tmlx5dr_action_create_push_ipv6_route_ext_mhdr1(action);\n+\taction->ipv6_route_ext.action[2] =\n+\t\tmlx5dr_action_create_push_ipv6_route_ext_mhdr2(action, bulk_size, hdr->data);\n+\n+\tif (!action->ipv6_route_ext.action[0] ||\n+\t    !action->ipv6_route_ext.action[1] ||\n+\t    !action->ipv6_route_ext.action[2]) {\n+\t\tDR_LOG(ERR, \"Failed to create ipv6_route_ext push subaction\");\n+\t\tgoto err;\n+\t}\n+\n+\treturn 0;\n+\n+err:\n+\tfor (i = 0; i < MLX5DR_ACTION_IPV6_EXT_MAX_SA; i++)\n+\t\tif (action->ipv6_route_ext.action[i])\n+\t\t\tmlx5dr_action_destroy(action->ipv6_route_ext.action[i]);\n+\n+\treturn rte_errno;\n+}\n+\n+struct mlx5dr_action *\n+mlx5dr_action_create_reformat_ipv6_ext(struct mlx5dr_context *ctx,\n+\t\t\t\t       enum mlx5dr_action_type action_type,\n+\t\t\t\t       struct mlx5dr_action_reformat_header *hdr,\n+\t\t\t\t       uint32_t log_bulk_size,\n+\t\t\t\t       uint32_t flags)\n+{\n+\tstruct mlx5dr_action *action;\n+\tint ret;\n+\n+\tif (mlx5dr_context_cap_dynamic_reparse(ctx)) {\n+\t\tDR_LOG(ERR, \"IPv6 extension actions is not supported\");\n+\t\trte_errno = ENOTSUP;\n+\t\treturn NULL;\n+\t}\n+\n+\tif (!mlx5dr_action_is_hws_flags(flags) ||\n+\t    ((flags & MLX5DR_ACTION_FLAG_SHARED) && log_bulk_size)) {\n+\t\tDR_LOG(ERR, \"IPv6 extension flags don't fit HWS (flags: 0x%x)\", flags);\n+\t\trte_errno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\n+\taction = mlx5dr_action_create_generic(ctx, flags, action_type);\n+\tif (!action) {\n+\t\trte_errno = ENOMEM;\n+\t\treturn NULL;\n+\t}\n+\n+\tswitch (action_type) {\n+\tcase MLX5DR_ACTION_TYP_POP_IPV6_ROUTE_EXT:\n+\t\tif (!(flags & MLX5DR_ACTION_FLAG_SHARED)) {\n+\t\t\tDR_LOG(ERR, \"Pop ipv6_route_ext must be shared\");\n+\t\t\trte_errno = EINVAL;\n+\t\t\tgoto free_action;\n+\t\t}\n+\n+\t\tret = mlx5dr_action_create_pop_ipv6_route_ext(action);\n+\t\tbreak;\n+\tcase MLX5DR_ACTION_TYP_PUSH_IPV6_ROUTE_EXT:\n+\t\tret = mlx5dr_action_create_push_ipv6_route_ext(action, hdr, log_bulk_size);\n+\t\tbreak;\n+\tdefault:\n+\t\tDR_LOG(ERR, \"Unsupported action type %d\\n\", action_type);\n+\t\trte_errno = ENOTSUP;\n+\t\tgoto free_action;\n+\t}\n+\n+\tif (ret) {\n+\t\tDR_LOG(ERR, \"Failed to create IPv6 extension reformat action\");\n+\t\tgoto free_action;\n+\t}\n+\n+\treturn action;\n+\n+free_action:\n+\tsimple_free(action);\n+\treturn NULL;\n+}\n+\n static void mlx5dr_action_destroy_hws(struct mlx5dr_action *action)\n {\n \tstruct mlx5dr_devx_obj *obj = NULL;\n@@ -2455,6 +2801,12 @@ static void mlx5dr_action_destroy_hws(struct mlx5dr_action *action)\n \t\t\tmlx5dr_action_destroy_stcs(&action[i]);\n \t\tmlx5dr_cmd_destroy_obj(action->reformat.arg_obj);\n \t\tbreak;\n+\tcase MLX5DR_ACTION_TYP_PUSH_IPV6_ROUTE_EXT:\n+\tcase MLX5DR_ACTION_TYP_POP_IPV6_ROUTE_EXT:\n+\t\tfor (i = 0; i < MLX5DR_ACTION_IPV6_EXT_MAX_SA; i++)\n+\t\t\tif (action->ipv6_route_ext.action[i])\n+\t\t\t\tmlx5dr_action_destroy(action->ipv6_route_ext.action[i]);\n+\t\tbreak;\n \t}\n }\n \ndiff --git a/drivers/net/mlx5/hws/mlx5dr_action.h b/drivers/net/mlx5/hws/mlx5dr_action.h\nindex e56f5b59c7..d0152dde3b 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_action.h\n+++ b/drivers/net/mlx5/hws/mlx5dr_action.h\n@@ -8,6 +8,9 @@\n /* Max number of STEs needed for a rule (including match) */\n #define MLX5DR_ACTION_MAX_STE 10\n \n+/* Max number of internal subactions of ipv6_ext */\n+#define MLX5DR_ACTION_IPV6_EXT_MAX_SA 4\n+\n enum mlx5dr_action_stc_idx {\n \tMLX5DR_ACTION_STC_IDX_CTRL = 0,\n \tMLX5DR_ACTION_STC_IDX_HIT = 1,\n@@ -143,6 +146,10 @@ struct mlx5dr_action {\n \t\t\t\t\tuint8_t offset;\n \t\t\t\t\tbool encap;\n \t\t\t\t} reformat;\n+\t\t\t\tstruct {\n+\t\t\t\t\tstruct mlx5dr_action\n+\t\t\t\t\t\t*action[MLX5DR_ACTION_IPV6_EXT_MAX_SA];\n+\t\t\t\t} ipv6_route_ext;\n \t\t\t\tstruct {\n \t\t\t\t\tstruct mlx5dr_devx_obj *devx_obj;\n \t\t\t\t\tuint8_t return_reg_id;\ndiff --git a/drivers/net/mlx5/hws/mlx5dr_debug.c b/drivers/net/mlx5/hws/mlx5dr_debug.c\nindex 5111f41648..1e5ef9cf67 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_debug.c\n+++ b/drivers/net/mlx5/hws/mlx5dr_debug.c\n@@ -31,6 +31,8 @@ const char *mlx5dr_debug_action_type_str[] = {\n \t[MLX5DR_ACTION_TYP_CRYPTO_DECRYPT] = \"CRYPTO_DECRYPT\",\n \t[MLX5DR_ACTION_TYP_INSERT_HEADER] = \"INSERT_HEADER\",\n \t[MLX5DR_ACTION_TYP_REMOVE_HEADER] = \"REMOVE_HEADER\",\n+\t[MLX5DR_ACTION_TYP_POP_IPV6_ROUTE_EXT] = \"POP_IPV6_ROUTE_EXT\",\n+\t[MLX5DR_ACTION_TYP_PUSH_IPV6_ROUTE_EXT] = \"PUSH_IPV6_ROUTE_EXT\",\n };\n \n static_assert(ARRAY_SIZE(mlx5dr_debug_action_type_str) == MLX5DR_ACTION_TYP_MAX,\ndiff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h\nindex ddb3b7b6fd..8174c03d50 100644\n--- a/drivers/net/mlx5/mlx5_flow.h\n+++ b/drivers/net/mlx5/mlx5_flow.h\n@@ -589,6 +589,7 @@ struct mlx5_flow_dv_matcher {\n \tstruct mlx5_flow_dv_match_params mask; /**< Matcher mask. */\n };\n \n+#define MLX5_PUSH_MAX_LEN 128\n #define MLX5_ENCAP_MAX_LEN 132\n \n /* Encap/decap resource structure. */\n@@ -2872,6 +2873,49 @@ flow_hw_get_srh_flex_parser_byte_off_from_ctx(void *dr_ctx __rte_unused)\n #endif\n \treturn UINT32_MAX;\n }\n+\n+static __rte_always_inline uint8_t\n+flow_hw_get_ipv6_route_ext_anchor_from_ctx(void *dr_ctx)\n+{\n+#ifdef HAVE_IBV_FLOW_DV_SUPPORT\n+\tuint16_t port;\n+\tstruct mlx5_priv *priv;\n+\n+\tMLX5_ETH_FOREACH_DEV(port, NULL) {\n+\t\tpriv = rte_eth_devices[port].data->dev_private;\n+\t\tif (priv->dr_ctx == dr_ctx)\n+\t\t\treturn priv->sh->srh_flex_parser.flex.devx_fp->anchor_id;\n+\t}\n+#else\n+\tRTE_SET_USED(dr_ctx);\n+#endif\n+\treturn 0;\n+}\n+\n+static __rte_always_inline uint16_t\n+flow_hw_get_ipv6_route_ext_mod_id_from_ctx(void *dr_ctx, uint8_t idx)\n+{\n+#ifdef HAVE_IBV_FLOW_DV_SUPPORT\n+\tuint16_t port;\n+\tstruct mlx5_priv *priv;\n+\tstruct mlx5_flex_parser_devx *fp;\n+\n+\tif (idx >= MLX5_GRAPH_NODE_SAMPLE_NUM || idx >= MLX5_SRV6_SAMPLE_NUM)\n+\t\treturn 0;\n+\tMLX5_ETH_FOREACH_DEV(port, NULL) {\n+\t\tpriv = rte_eth_devices[port].data->dev_private;\n+\t\tif (priv->dr_ctx == dr_ctx) {\n+\t\t\tfp = priv->sh->srh_flex_parser.flex.devx_fp;\n+\t\t\treturn fp->sample_info[idx].modify_field_id;\n+\t\t}\n+\t}\n+#else\n+\tRTE_SET_USED(dr_ctx);\n+\tRTE_SET_USED(idx);\n+#endif\n+\treturn 0;\n+}\n+\n void\n mlx5_indirect_list_handles_release(struct rte_eth_dev *dev);\n void\n",
    "prefixes": [
        "27/30"
    ]
}