get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 133594,
    "url": "http://patchwork.dpdk.org/api/patches/133594/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20231029163202.216450-21-getelson@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": "<20231029163202.216450-21-getelson@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231029163202.216450-21-getelson@nvidia.com",
    "date": "2023-10-29T16:31:53",
    "name": "[21/30] net/mlx5/hws: support remove header action",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "61e23a28a7b892e58c46ca74e6c8964ca4024845",
    "submitter": {
        "id": 1882,
        "url": "http://patchwork.dpdk.org/api/people/1882/?format=api",
        "name": "Gregory Etelson",
        "email": "getelson@nvidia.com"
    },
    "delegate": {
        "id": 3268,
        "url": "http://patchwork.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20231029163202.216450-21-getelson@nvidia.com/mbox/",
    "series": [
        {
            "id": 30049,
            "url": "http://patchwork.dpdk.org/api/series/30049/?format=api",
            "web_url": "http://patchwork.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://patchwork.dpdk.org/series/30049/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/133594/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/133594/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 4B22D43238;\n\tSun, 29 Oct 2023 17:35:37 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 662E441141;\n\tSun, 29 Oct 2023 17:33:41 +0100 (CET)",
            "from NAM04-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam04on2067.outbound.protection.outlook.com [40.107.102.67])\n by mails.dpdk.org (Postfix) with ESMTP id 68DC640E6E\n for <dev@dpdk.org>; Sun, 29 Oct 2023 17:33:40 +0100 (CET)",
            "from DM6PR07CA0042.namprd07.prod.outlook.com (2603:10b6:5:74::19) by\n DM4PR12MB5117.namprd12.prod.outlook.com (2603:10b6:5:390::15) with\n Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.6933.26; Sun, 29 Oct 2023 16:33:37 +0000",
            "from DS2PEPF00003447.namprd04.prod.outlook.com\n (2603:10b6:5:74:cafe::b5) by DM6PR07CA0042.outlook.office365.com\n (2603:10b6:5:74::19) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6933.26 via Frontend\n Transport; Sun, 29 Oct 2023 16:33:37 +0000",
            "from mail.nvidia.com (216.228.117.160) by\n DS2PEPF00003447.mail.protection.outlook.com (10.167.17.74) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.6933.18 via Frontend Transport; Sun, 29 Oct 2023 16:33:37 +0000",
            "from rnnvmail201.nvidia.com (10.129.68.8) 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; Sun, 29 Oct\n 2023 09:33:25 -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:21 -0700"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=Dp9yvO2XtyLQGKWXmpgQ3LYMD7+gFUPrZracFsA5/5pQWvBGjEIonCAmUfC+ETMA6mQ272W/byrHcwSFTAlCxeSLBxN++pjGkYb2V5139Qat8a4Y87erBzZhIquV5bK2nLg65hLGbXE0WLeUrvpTZLBCa3tVsCFt71DmkJDDMxUznMBlvL+2bXgw4autKPZgeenOOypuvchUg0nHf1hcwZwRwaIAL9znovWFBuvf15tCJt40XJB6juNjPqZRfRIiKm1eZ8hAo3GMVRlzoPhw2e9e2AXTT3WPw7EyG17lRDZwliD7rWpBUjfbc1rwadlDMZ+0SoYZbwAdpE9BHSFRVQ==",
        "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=pc/mjrr8zIt5fX/zSTDnKpHzvzHXd9u5tbIVQaxxR0U=;\n b=W2WD3iaNVDgZcfjp+aq+Ty9wd5ltsNE3WgvaAZy+OVShVGlwqdeYVN7+0x5+zZPFVTBuRokVrpGDfPy+M6yz5irett6GOZao1GUAbZBu2jUks5TcF90pDSgKilQPftWp+FtWHNesyRgMysdOee8XaEQTqecsArX0hXINgJifQ1iPHchbfoQ3xAlOFtO+P8YQlLFioA9dzh4CvqtNjYrrw/CBay4qMUu7za61eFET7LpytLEenpLJxE49AMLpJuBG861uxpUX/2lRHy3R1dqK89t9H38wMGBc5U+TDS5VJSG64wVnpGxZmrTgxfz3jQc6AMy/WNuQRsYlX4dwAApvzw==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.117.160) 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=pc/mjrr8zIt5fX/zSTDnKpHzvzHXd9u5tbIVQaxxR0U=;\n b=cvPHu14iE/iaC83JELeliu15Z12hceVf/wTKF8tYuv3AdBiM+rrD9eotqi4wQhSGfwwBZqyVGpm3Me47VkMO4hZfEcJsWDns0g19SVky46dM0yvtXuLDQtM50m6g/cEMqQUgs/Mj19buEe8NzLxUMzKyhLqZA0gt8nD8onk9VyAB8EzyQ4MalUZM3S7VJVZS5dSK+QGhlijicUfRngepITvzteHFPJFIkkRAMIDWDHUlycyWGOVg+YnkFXzFj+2RC9buMzw/PedycmykGFoRV5Bd3d7yx5/tVL/vHgClHDQyat6+kPVV4qMLZubJVVcuN9zO3pOiRaAMKBI9YimOfw==",
        "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": "Gregory Etelson <getelson@nvidia.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<getelson@nvidia.com>, <mkashani@nvidia.com>, <rasland@nvidia.com>,\n \"Hamdan Igbaria\" <hamdani@nvidia.com>, Alex Vesker <valex@nvidia.com>, Matan\n Azrad <matan@nvidia.com>, Viacheslav Ovsiienko <viacheslavo@nvidia.com>, Ori\n Kam <orika@nvidia.com>, Suanming Mou <suanmingm@nvidia.com>",
        "Subject": "[PATCH 21/30] net/mlx5/hws: support remove header action",
        "Date": "Sun, 29 Oct 2023 18:31:53 +0200",
        "Message-ID": "<20231029163202.216450-21-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": "DS2PEPF00003447:EE_|DM4PR12MB5117:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "79331c70-5c2a-4841-9db6-08dbd89ccd2f",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n gHCSQ+ctekLm5MBejBScJCxiG/jkyyn97vCcpc87JARerXxL6ClPvVsJpADEmvmACIbPpib3W8Ll74WR1bYcX9d2iga+yWMTXOZs53/ypncOgvhaLG40FU9aCPclQVeWNDC+GcSomiLXX39m94JktLWsejSeOKqFqF5+EKKFJ4LxvS654oYUfXnl3IGjh4DYmI/N7cJCRMxVf5lhFGf+vwjZUS21W/EU63K1WXp84JpIF/BB3ieJ2+e33CFJ5WN2azY/8ugZhzvHYU2d4G1rcLcoXKbdkSTCFE5EqJhAoa1hs4XV8T1PbdMJEJWqNykqP2HLM8On+IHDlZMcGvdvjH50R7A/Qht4PHA3tBYRzvA9FX50t3GfZyjcJr7sm+lYSx5gBJaoN6nKYmJzvae8Z6XzcI/jIEs1Jch3d0dqx4xp80Xlr2rUbU2z/HYAhtbRAD0FQ5UXdr25vfd+dYdK8LqayrAvADkt+xSdVCS+lAqJRKKaWc2cIl1MTlviAysUS/gPjhzS/3N1PaXb37q2634li3+d3Zpb/EACIXLgNjJcK7NiHGeY9ih04bp6x0YgxJoMMQF10dgXdRfn9CRWG5XyvA9tko5vKgqXPoeUEV62ruGmP44tI35c2lZLixmu4Y9ISUnGAK38bNMyCnDvh8B5W8BCLA9kJcxCSc92zmr2F2k1jbwMcmiciDsc5H5YvcYTsvJpBDipaejdB13Pi/OmZjCYzvVOUGY4mCExPsb4D+7zSbhOeFXpiauepghn",
        "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)(136003)(346002)(376002)(39860400002)(396003)(230922051799003)(186009)(451199024)(1800799009)(64100799003)(82310400011)(36840700001)(40470700004)(46966006)(5660300002)(41300700001)(2906002)(54906003)(70206006)(70586007)(40460700003)(8936002)(8676002)(4326008)(40480700001)(478600001)(316002)(6916009)(83380400001)(356005)(7636003)(107886003)(36860700001)(47076005)(86362001)(36756003)(7696005)(6666004)(55016003)(1076003)(426003)(336012)(26005)(2616005)(82740400003)(16526019)(6286002);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "29 Oct 2023 16:33:37.0442 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 79331c70-5c2a-4841-9db6-08dbd89ccd2f",
        "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 DS2PEPF00003447.namprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM4PR12MB5117",
        "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: Hamdan Igbaria <hamdani@nvidia.com>\n\nSupport remove header action, this action will allow the user\nto execute dynamic decaps by choosing to decap by providing a\nstart anchor and number of words to remove, or providing a\nstart anchor and end anchor.\n\nSigned-off-by: Hamdan Igbaria <hamdani@nvidia.com>\nReviewed-by: Alex Vesker <valex@nvidia.com>\nAcked-by: Matan Azrad <matan@nvidia.com>\n---\n drivers/net/mlx5/hws/mlx5dr.h        | 40 ++++++++++++++\n drivers/net/mlx5/hws/mlx5dr_action.c | 78 ++++++++++++++++++++++++++++\n drivers/net/mlx5/hws/mlx5dr_action.h |  7 +++\n drivers/net/mlx5/hws/mlx5dr_debug.c  |  1 +\n 4 files changed, 126 insertions(+)",
    "diff": "diff --git a/drivers/net/mlx5/hws/mlx5dr.h b/drivers/net/mlx5/hws/mlx5dr.h\nindex a6bbb85eed..2e692f76c3 100644\n--- a/drivers/net/mlx5/hws/mlx5dr.h\n+++ b/drivers/net/mlx5/hws/mlx5dr.h\n@@ -51,6 +51,7 @@ enum mlx5dr_action_type {\n \tMLX5DR_ACTION_TYP_CRYPTO_ENCRYPT,\n \tMLX5DR_ACTION_TYP_CRYPTO_DECRYPT,\n \tMLX5DR_ACTION_TYP_INSERT_HEADER,\n+\tMLX5DR_ACTION_TYP_REMOVE_HEADER,\n \tMLX5DR_ACTION_TYP_DEST_ROOT,\n \tMLX5DR_ACTION_TYP_DEST_ARRAY,\n \tMLX5DR_ACTION_TYP_MAX,\n@@ -189,6 +190,29 @@ struct mlx5dr_action_insert_header {\n \tbool encap;\n };\n \n+enum mlx5dr_action_remove_header_type {\n+\tMLX5DR_ACTION_REMOVE_HEADER_TYPE_BY_OFFSET,\n+\tMLX5DR_ACTION_REMOVE_HEADER_TYPE_BY_HEADER,\n+};\n+\n+struct mlx5dr_action_remove_header_attr {\n+\tenum mlx5dr_action_remove_header_type type;\n+\tunion {\n+\t\tstruct {\n+\t\t\t/* PRM start anchor from which header will be removed */\n+\t\t\tuint8_t start_anchor;\n+\t\t\t/* PRM end anchor till which header will be removed */\n+\t\t\tuint8_t end_anchor;\n+\t\t\tbool decap;\n+\t\t} by_anchor;\n+\t\tstruct {\n+\t\t\t/* PRM start anchor from which header will be removed */\n+\t\t\tuint8_t start_anchor;\n+\t\t\tuint8_t size;\n+\t\t} by_offset;\n+\t};\n+};\n+\n struct mlx5dr_action_mh_pattern {\n \t/* Byte size of modify actions provided by \"data\" */\n \tsize_t sz;\n@@ -849,6 +873,22 @@ mlx5dr_action_create_insert_header(struct mlx5dr_context *ctx,\n \t\t\t\t   uint32_t log_bulk_size,\n \t\t\t\t   uint32_t flags);\n \n+/* Create remove header action.\n+ *\n+ * @param[in] ctx\n+ *\tThe context in which the new action will be created.\n+ * @param[in] attr\n+ *\tattributes: specifies the remove header type, PRM start anchor and\n+ *\tthe PRM end anchor or the PRM start anchor and remove size in bytes.\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_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 /* 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 9885555a8f..1a6296a728 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_action.c\n+++ b/drivers/net/mlx5/hws/mlx5dr_action.c\n@@ -9,6 +9,9 @@\n #define MLX5DR_ACTION_METER_INIT_COLOR_OFFSET 1\n #define MLX5DR_ACTION_ASO_FIRST_HIT_SET_OFFSET 9\n \n+/* Header removal size limited to 128B (64 words) */\n+#define MLX5DR_ACTION_REMOVE_HEADER_MAX_SIZE 128\n+\n /* This is the maximum allowed action order for each table type:\n  *\t TX: POP_VLAN, CTR, ASO, PUSH_VLAN, MODIFY, ENCAP, TRAILER, ENCRYPT,\n  *\t     Term\n@@ -21,6 +24,7 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_\n \t[MLX5DR_TABLE_TYPE_NIC_RX] = {\n \t\tBIT(MLX5DR_ACTION_TYP_TAG),\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_POP_VLAN),\n@@ -69,6 +73,7 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_\n \t},\n \t[MLX5DR_TABLE_TYPE_FDB] = {\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_POP_VLAN),\n@@ -719,6 +724,19 @@ static void mlx5dr_action_fill_stc_attr(struct mlx5dr_action *action,\n \t\tattr->reformat_trailer.op = action->reformat_trailer.op;\n \t\tattr->reformat_trailer.size = action->reformat_trailer.size;\n \t\tbreak;\n+\tcase MLX5DR_ACTION_TYP_REMOVE_HEADER:\n+\t\tif (action->remove_header.type == MLX5DR_ACTION_REMOVE_HEADER_TYPE_BY_HEADER) {\n+\t\t\tattr->action_type = MLX5_IFC_STC_ACTION_TYPE_HEADER_REMOVE;\n+\t\t\tattr->remove_header.decap = action->remove_header.decap;\n+\t\t\tattr->remove_header.start_anchor = action->remove_header.start_anchor;\n+\t\t\tattr->remove_header.end_anchor = action->remove_header.end_anchor;\n+\t\t} else {\n+\t\t\tattr->action_type = MLX5_IFC_STC_ACTION_TYPE_REMOVE_WORDS;\n+\t\t\tattr->remove_words.start_anchor = action->remove_header.start_anchor;\n+\t\t\tattr->remove_words.num_of_words = action->remove_header.num_of_words;\n+\t\t}\n+\t\tattr->action_offset = MLX5DR_ACTION_OFFSET_DW5;\n+\t\tbreak;\n \tdefault:\n \t\tDR_LOG(ERR, \"Invalid action type %d\", action->type);\n \t\tassert(false);\n@@ -2266,6 +2284,64 @@ mlx5dr_action_create_insert_header(struct mlx5dr_context *ctx,\n \treturn NULL;\n }\n \n+struct mlx5dr_action *\n+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+\tstruct mlx5dr_action *action;\n+\n+\tif (mlx5dr_action_is_root_flags(flags)) {\n+\t\tDR_LOG(ERR, \"Remove header action not supported over root\");\n+\t\trte_errno = ENOTSUP;\n+\t\treturn NULL;\n+\t}\n+\n+\taction = mlx5dr_action_create_generic(ctx, flags, MLX5DR_ACTION_TYP_REMOVE_HEADER);\n+\tif (!action)\n+\t\treturn NULL;\n+\n+\tswitch (attr->type) {\n+\tcase MLX5DR_ACTION_REMOVE_HEADER_TYPE_BY_HEADER:\n+\t\taction->remove_header.type = MLX5DR_ACTION_REMOVE_HEADER_TYPE_BY_HEADER;\n+\t\taction->remove_header.start_anchor = attr->by_anchor.start_anchor;\n+\t\taction->remove_header.end_anchor = attr->by_anchor.end_anchor;\n+\t\taction->remove_header.decap = attr->by_anchor.decap;\n+\t\tbreak;\n+\tcase MLX5DR_ACTION_REMOVE_HEADER_TYPE_BY_OFFSET:\n+\t\tif (attr->by_offset.size % W_SIZE != 0) {\n+\t\t\tDR_LOG(ERR, \"Invalid size, HW supports header remove in WORD granularity\");\n+\t\t\trte_errno = EINVAL;\n+\t\t\tgoto free_action;\n+\t\t}\n+\n+\t\tif (attr->by_offset.size > MLX5DR_ACTION_REMOVE_HEADER_MAX_SIZE) {\n+\t\t\tDR_LOG(ERR, \"Header removal size limited to %u bytes\",\n+\t\t\t       MLX5DR_ACTION_REMOVE_HEADER_MAX_SIZE);\n+\t\t\trte_errno = EINVAL;\n+\t\t\tgoto free_action;\n+\t\t}\n+\n+\t\taction->remove_header.type = MLX5DR_ACTION_REMOVE_HEADER_TYPE_BY_OFFSET;\n+\t\taction->remove_header.start_anchor = attr->by_offset.start_anchor;\n+\t\taction->remove_header.num_of_words = attr->by_offset.size / W_SIZE;\n+\t\tbreak;\n+\tdefault:\n+\t\tDR_LOG(ERR, \"Unsupported remove header type %u\", attr->type);\n+\t\trte_errno = ENOTSUP;\n+\t\tgoto free_action;\n+\t}\n+\n+\tif (mlx5dr_action_create_stcs(action, NULL))\n+\t\tgoto free_action;\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@@ -2291,6 +2367,7 @@ static void mlx5dr_action_destroy_hws(struct mlx5dr_action *action)\n \tcase MLX5DR_ACTION_TYP_CRYPTO_ENCRYPT:\n \tcase MLX5DR_ACTION_TYP_CRYPTO_DECRYPT:\n \tcase MLX5DR_ACTION_TYP_REFORMAT_TRAILER:\n+\tcase MLX5DR_ACTION_TYP_REMOVE_HEADER:\n \t\tmlx5dr_action_destroy_stcs(action);\n \t\tbreak;\n \tcase MLX5DR_ACTION_TYP_DEST_ROOT:\n@@ -2923,6 +3000,7 @@ int mlx5dr_action_template_process(struct mlx5dr_action_template *at)\n \t\t\tsetter->idx_double = i;\n \t\t\tbreak;\n \n+\t\tcase MLX5DR_ACTION_TYP_REMOVE_HEADER:\n \t\tcase MLX5DR_ACTION_TYP_REFORMAT_TNL_L2_TO_L2:\n \t\t\t/* Single remove header to header */\n \t\t\tsetter = mlx5dr_action_setter_find_first(last_setter, ASF_SINGLE1 | ASF_MODIFY);\ndiff --git a/drivers/net/mlx5/hws/mlx5dr_action.h b/drivers/net/mlx5/hws/mlx5dr_action.h\nindex 02358da4cb..4046f658e6 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_action.h\n+++ b/drivers/net/mlx5/hws/mlx5dr_action.h\n@@ -161,6 +161,13 @@ struct mlx5dr_action {\n \t\t\t\t\tuint8_t op;\n \t\t\t\t\tuint8_t size;\n \t\t\t\t} reformat_trailer;\n+\t\t\t\tstruct {\n+\t\t\t\t\tuint8_t type;\n+\t\t\t\t\tuint8_t start_anchor;\n+\t\t\t\t\tuint8_t end_anchor;\n+\t\t\t\t\tuint8_t num_of_words;\n+\t\t\t\t\tbool decap;\n+\t\t\t\t} remove_header;\n \t\t\t\tstruct {\n \t\t\t\t\tstruct mlx5dr_devx_obj *devx_obj;\n \t\t\t\t} devx_dest;\ndiff --git a/drivers/net/mlx5/hws/mlx5dr_debug.c b/drivers/net/mlx5/hws/mlx5dr_debug.c\nindex 29e207765b..5111f41648 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_debug.c\n+++ b/drivers/net/mlx5/hws/mlx5dr_debug.c\n@@ -30,6 +30,7 @@ const char *mlx5dr_debug_action_type_str[] = {\n \t[MLX5DR_ACTION_TYP_CRYPTO_ENCRYPT] = \"CRYPTO_ENCRYPT\",\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 };\n \n static_assert(ARRAY_SIZE(mlx5dr_debug_action_type_str) == MLX5DR_ACTION_TYP_MAX,\n",
    "prefixes": [
        "21/30"
    ]
}