get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 44455,
    "url": "https://patches.dpdk.org/api/patches/44455/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1536438666-22184-13-git-send-email-rasesh.mody@cavium.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<1536438666-22184-13-git-send-email-rasesh.mody@cavium.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1536438666-22184-13-git-send-email-rasesh.mody@cavium.com",
    "date": "2018-09-08T20:31:01",
    "name": "[12/17] net/qede: refactor fdir code into generic aRFS",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "10ab259a911f5c84a7469b9e222de80f548d203d",
    "submitter": {
        "id": 569,
        "url": "https://patches.dpdk.org/api/people/569/?format=api",
        "name": "Mody, Rasesh",
        "email": "rasesh.mody@cavium.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1536438666-22184-13-git-send-email-rasesh.mody@cavium.com/mbox/",
    "series": [
        {
            "id": 1239,
            "url": "https://patches.dpdk.org/api/series/1239/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=1239",
            "date": "2018-09-08T20:30:49",
            "name": "net/qede: add enhancements and fixes",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/1239/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/44455/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/44455/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 6129B5F32;\n\tSat,  8 Sep 2018 22:32:09 +0200 (CEST)",
            "from NAM04-BN3-obe.outbound.protection.outlook.com\n\t(mail-eopbgr680074.outbound.protection.outlook.com [40.107.68.74])\n\tby dpdk.org (Postfix) with ESMTP id 03D9F5398\n\tfor <dev@dpdk.org>; Sat,  8 Sep 2018 22:31:56 +0200 (CEST)",
            "from cavium.com (198.186.1.5) by\n\tDM6PR07MB5372.namprd07.prod.outlook.com (2603:10b6:5:44::17) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.1101.18; Sat, 8 Sep 2018 20:31:53 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=q2GmL9f21JsH7el5mKTt0j1e1OM2kLYpQhBe6nhg910=;\n\tb=XQqY3bqvRYP175aH45wdrQmt9zPelmFmZ+Tx++a04jW/wtXE6WYTlABStqvGrWdG7LxcUuLwcTANsnPEPxLggZA0beCyU4dbhgcY+Y813+lnG1+f6SRwVhN8d0MpA8CB/8T6SW8PcLIsIb3NE2W2qiATuQu5sefDE+w9WiW/SVo=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Rasesh.Mody@cavium.com; ",
        "From": "Rasesh Mody <rasesh.mody@cavium.com>",
        "To": "dev@dpdk.org",
        "Cc": "Shahed Shaikh <shahed.shaikh@cavium.com>, ferruh.yigit@intel.com,\n\tDept-EngDPDKDev@cavium.com",
        "Date": "Sat,  8 Sep 2018 13:31:01 -0700",
        "Message-Id": "<1536438666-22184-13-git-send-email-rasesh.mody@cavium.com>",
        "X-Mailer": "git-send-email 1.7.10.3",
        "In-Reply-To": "<1536438666-22184-1-git-send-email-rasesh.mody@cavium.com>",
        "References": "<1536438666-22184-1-git-send-email-rasesh.mody@cavium.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[198.186.1.5]",
        "X-ClientProxiedBy": "BYAPR02CA0031.namprd02.prod.outlook.com\n\t(2603:10b6:a02:ee::44) To DM6PR07MB5372.namprd07.prod.outlook.com\n\t(2603:10b6:5:44::17)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "5651dea0-082c-489f-f52f-08d615ca1d8c",
        "X-Microsoft-Antispam": "BCL:0; PCL:0;\n\tRULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(2017052603328)(7153060)(7193020);\n\tSRVR:DM6PR07MB5372; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; DM6PR07MB5372;\n\t3:ZtKsfAtLtpX8XUCdsga/R7GdwsT3Ly3ego1zRqraDyhfO8Hsdromo2LEPmLHywosvApV8tQkCZwoz4HU+s7/FXDn4zjZr+YuSIr6ICxBjg7xHtklHXlgH6AmTo9v5OtF17hDMAxnO7tWdHCFCMXDGvDgrZGBlw4Tuh7TGsCjZwRlOOTtUU6XVWIPHXbIQnJ2byFcFSHLcDbUuMm28orbYovfEwCzTxloTDGJ38x2m09Ov1EMcLSdZJC1+Sqp7CyT;\n\t25:v+KG89/alpdS2lUpedzMkbsg68K54BijwkXBHqOVKIFdtwG5rBe6hB6d2RAJ1QVoNx2Pr2Cq9bN0rZSJZXSyXwrRtwU3Je5hwvR2wO7Gj7a7UjwX4IvQmBz+LjvRE6xVH5+boVepHD3Nq05PprTEp8uuMjteD+tUu0iAZ3WRkqchuazEoD90MYOAushCQy6rFDMem5Rlvdv/j8OLIyW+v1GF2NjAymWMYBE4H3FmyksN9wRlpWdrePnWHNhsgeWH6w6Xm12O2X/3UNAV8VO4ulfwrRki5c032l13SC3RrJZYa+SuHj8AsQWfGyKBGJOieJbGsy8Vpo5fJ5KNioRoRg==;\n\t31:eEhjhOqst1vAlTaEdZIO05yyC8Uva9/SLXuaWmgkNuy0anlg9hE17MCTG8sYtn+pBsiqeLMET+TuxtAGj3MuG78XpBA+X7pEAZxdOH4mKCSIqZ0UTWmSa4PaHsdwD4Xg9/k9ihzjjNx4JqzeAK3CvGyxsPF7wKDlEewOBDkADAJqMivCjxSzUn3gZQ3giEPLtQYKdGJbL5oMx6G4F519UxcPcg+ITd+THNMtbHbBvkw=",
            "1; DM6PR07MB5372;\n\t20:uAtBU7urOKMYfLL/LKHYiU/lm76uRAZU5H+bC+qyF7/wVGo5sM0SjG/ckpeL+fDZJLcljWDj6LtDFSn0oVEybCV1Gd7E8Eh1sv4vNFnGrFwtJ9GJX0YirKmYn1GtT6/n/Wm5PMhlHYUxwC1uMUH7MKpfyYBf4emqmlWSO1dm6+/VJpCMuud1ZBdUZsBlWQ1ycJX0clIj3hcWoL55gh/mAwdI4QWT6mqzJj3U8/HCxyzcRg5YOif3IN1Mg/3ih/J2B1I2ilt78VocrGV9/O6A9JqGXjPZgGWHZMg/vrwQ6nE5hkR6W6yJg33JgvYBE3wjF21wm2vS6u44otxYjPRtticUgbN5/X5Rhgi26sEykwyZ2+vMFlsomFCNlPCUci1afp6SnVBCRabxs1b1igXfjd29h61C3vuJUljqEV/MY1mHRzzsieP6E1E/bHVnkrsLQnCPWgDgMv4Gc3Ops/tMIhs6qH7vhw2ptqj/9Vnxuv4lCTXAxxq3x75X/bY6rNIn;\n\t4:mi2JtFo1XLra5sqlYwSBBM15oqkMz6Cg5TtLA7UeOuocGL5IST9A62mj4wliJW/+50e1tyj1zLXJrcovZvabxbCwZs5wfaH7N4A3wLRGI6NXg15cVa2Hc7otGnFBE4e6LzIPoMVwvDYOv7oU81nQ18J5IgmNr1YzspjC6kmGpGMr317vSrlgfRuMmPfDCAZ5WRSHzEHrvE1k2EqnB6AUGmrOQFgfzYmzHU1lSRLR58l79Lh6cYTaey+yYrZL4DX3qD8J7LtJc9eApmn3HVeXhw==",
            "=?us-ascii?Q?1; DM6PR07MB5372;\n\t23:wp8NHGJleLpX3VJkXr3th7SkRzZQQYe7QZCz22fGX?=\n\tyM8/4dAfWMjNSS9djou6FnYU/WPQqAV1UNqimNcB6XHMBiXg2qfPR5XZxwKq2TZCNxquyiMWTmdAYCrtEvE8DAydm5lf/izuT0nj79kE1p/Q9mN8Q/xWrFMVxdvLOxssRowm6kri/qBKawnidk8yjShtcN+EPqBSUKu5rGYpCDdo4d0/ULyuqo6xbR+MS4Ct6+2GZccnSKYCc/5KamUbvuL2OddHvinjqKqlXwD/lNdRx0/ckOLM4FD2UQAA1T7X7WZbcFFP+/puq3gbixTZFWYNnRpBcZSRmtYLMWokdKZc3HSNQNjSeNOhhvXi5O0Gkd5/JGH1WYMHc3U+bn2BE6boHBs5SHYIzEbr8hEWNdYAD1UeyXRcY55Yk3ie26qGJCX/pNpz8ijgdOCx7cFyMPhgnOGRBYgNRNOll3vV086To450b7RQbScMFW0/yG2IzJYNIyJKNefAJYqApUxEJK3dnkBbJjVF7mdIBZ5LBBbQrZxA6nDoybJwk3gj9Y4P5gPjoMCK9eT/LL1VtSh+qBYfwWFMbNH+TxUgugS86vLm3Nau9mzh3c6z6Wcf2EtQvlq/Ru745205SwXzNaZc3E7amDVbr8ULAWGDwuaZAh6yGN3qPZA7eO75JPBn5f4L6l0DKFDWvkxrRj1SgQEB/IICvToTvxQAOHD6SPYFK3kzYH7iS8uUDHikuSxfIvIhUE/sagNBXAZ+YjQaY7XmlbVW6I9QjkT7Ms68+uIXyRTPVfSoteCV9zlnvntbCzNkJL+ToNuyS4zu2yu5I6HQEM12mBhuvNConXOAxp28fD2hqcgfdm+UKJO0Qahrhlx/WIiE3BZ9so2q1UjCc2viHK4oqz59i/89nyPR0l4aqqNrxMvhQ20EBf0m+RfIzKW5cUoDQqzCMbL90zSGuO0H/FiX+lR5jMvqxd5FOgvy88n+du/jhTz44KTE6oa2p33JKQHOD9Qgk5e2CI0ApyBtndIbbvbVGA2kFjkvGXntsSZFC/tay/uEQhebcDwJhGXZrCtFPz+/NlQNXh//YFAEY2tTfjBJhShQp8iHLmB4cL8x+47voPCEcPQPDTgUG0r0UzSgcVe4t8XmTkEnT+AXe3VzxmlDMYkYssuh+wM6sudtgeU7ZfBDCINvJV2gE+HWVnMsdmY+WzMk/5E3yp41GQU6P5fwaLpkxSqu9oGG1GyDGBfKrNrIVnwvRODFwHqHAB0IX51mlF87ZDRPapAQ89djeIqZvnPwMzXGIlatmJpsqtmTBLZVfpzpe6Szhh9I7/IvQtjWaLgtw9JqdRHT6xIXS+9zZYVVxz0klAAtPACNhd6GXO74CB7lElK7dkjlIodTqks2O9te0tTl59ZGNbh/r6Vg9khLsrNaOxzyJlpKFSB9ugIP/JhpKWRsHgsFRUedVbCWoD4V0pjucdInvWW",
            "1; DM6PR07MB5372;\n\t6:OqKwyR+/u2RobygOWv8VLaE5+3W1JyN/jHMQPW40eEHN1MuA4reDROVfLDbunNFqUncMnynZcwdGnwxApMfOA91Q7eQ8eWHT8OkqDbnaQyV/vzmGLoNEeX0Ve485XEowAii2n31C6Xt0uWjEXAFp2AiUYRVcnU8WCMbohkucfV8u7xhN20Bjfkq9YM6mWmSW99M2ybM4jsebWV3f30zdiuhD78M9Trj+hO9jzLJbBwdypETCRhHP2Wb4mgRDll187CNYEwjQxpIERqtpFstiig5r32SMo5BNcBjgJ4zrw2vRmGYdkVcExGa5qNWm0K1Aas8VrtUcjvGjD5ETYolbFeLt991S5Hj1sbqVJR5J5Cv7ibeUk3E0CcOegzf5X32pcOVMX5x7LUgZ08fLK6uSfeWy7VMoqfzKcSGEY6fk9g62vSHyOMzaliJgEb8RQwkTGLL27pjpSryoqfRW+fGcNA==;\n\t5:7xdmLfRvO8/MLqP7KxDyCTrOgjV82m83RQBhQrTL+8qv2H0hZ0HAJARN28VrRueI4p1FU3FOnoabfA9deHYQxCuaQzh6pH8tlic60IUfiBbEL9cZ9el72mEBSCjMzMfpDMevMlcppLZTDL5IbHa8pK5tIIgFlnhHIXE+1eORZjc=;\n\t7:DPfidLC+QKg93r0L6oVav+03QrANK46h1/NcMLWjyntMoqdGR2AdwblXGhWFxvIfy9ZDJywxsZRTJgcQ52FMjid3xBvaXYFDIB5Qf1Pnlz6I6MXpsbpg8yq98pMymy84Q1sOr9CSKL5VCmVixc98iRt8O+eOkvfewAJCN2QujkPo1jFozjkSKNfQ35ON4PhfTiKPIJnHjvbRD36/JRtkt5rbvsSRoNgV32LQpySR6sc1xXu+W3fwCkB1nL3MJubi"
        ],
        "X-MS-TrafficTypeDiagnostic": "DM6PR07MB5372:",
        "X-Microsoft-Antispam-PRVS": "<DM6PR07MB537262888EF0F444568EDBBE9F070@DM6PR07MB5372.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(823301075)(3002001)(10201501046)(3231311)(944501410)(52105095)(93006095)(93001095)(149027)(150027)(6041310)(20161123562045)(20161123564045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699050);\n\tSRVR:DM6PR07MB5372; BCL:0; PCL:0; RULEID:; SRVR:DM6PR07MB5372; ",
        "X-Forefront-PRVS": "07891BF289",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(979002)(396003)(366004)(136003)(346002)(376002)(39860400002)(199004)(189003)(4720700003)(97736004)(2351001)(106356001)(105586002)(72206003)(66066001)(47776003)(4326008)(50466002)(48376002)(25786009)(305945005)(7736002)(2361001)(8676002)(478600001)(316002)(52116002)(69596002)(107886003)(186003)(50226002)(44832011)(16526019)(486006)(21086003)(2906002)(55016002)(26005)(8936002)(476003)(956004)(81156014)(81166006)(86362001)(5660300001)(6666003)(36756003)(16586007)(11346002)(446003)(2616005)(76176011)(3846002)(6116002)(6916009)(68736007)(14444005)(386003)(51416003)(53936002)(7696005)(41533002)(969003)(989001)(999001)(1009001)(1019001);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR07MB5372; H:cavium.com; FPR:;\n\tSPF:None; \n\tLANG:en; PTR:InfoNoRecords; A:1; MX:1; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "7hf2+yyACHIQUKVX0XlOajMSk9VOJu0ot0AVFmI5eIv1y6RxeF4QNHzSmSb+E9e48uyFWJYXoxuXNkyfdBCj8BPNey1afp3kps47OQBo24m1gS4kFRoXnkD6N//XiYMZ+BhooDQOKI/bPsKhXPZGiXjW9+4uBp9sEjqKLMyRPT9NNhY6IpO9MfSo3spt+2+c6m4uQxiXYB2DJPnjk2WwbPIi3PrPyLpTglZVM4rh/G7dVRAn8vnbcl7vzlMx8DqhPDqeEOOUI/9bgXqfe0ZO/Wdj1L1mG08KanZIws+ywx5T3CrzkZ+Ih48UqIdAsXZKeEMdUVqgnNJ2sVH2OCayJX4MNAME+FimBD6XHmpNis0=",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "cavium.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "08 Sep 2018 20:31:53.9107\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "5651dea0-082c-489f-f52f-08d615ca1d8c",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM6PR07MB5372",
        "Subject": "[dpdk-dev] [PATCH 12/17] net/qede: refactor fdir code into generic\n\taRFS",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Shahed Shaikh <shahed.shaikh@cavium.com>\n\n- In order to prepare the base for RTE FLOW support,\n  convert common code used for flow director support\n  into common aRFS code.\n\nSigned-off-by: Shahed Shaikh <shahed.shaikh@cavium.com>\n---\n drivers/net/qede/base/ecore_l2.c     |   26 ++-\n drivers/net/qede/base/ecore_l2_api.h |   11 +-\n drivers/net/qede/qede_ethdev.c       |    2 +-\n drivers/net/qede/qede_ethdev.h       |   35 +++-\n drivers/net/qede/qede_filter.c       |  291 +++++++++++++++++++++-------------\n 5 files changed, 240 insertions(+), 125 deletions(-)",
    "diff": "diff --git a/drivers/net/qede/base/ecore_l2.c b/drivers/net/qede/base/ecore_l2.c\nindex d71f461..ca4d901 100644\n--- a/drivers/net/qede/base/ecore_l2.c\n+++ b/drivers/net/qede/base/ecore_l2.c\n@@ -2084,6 +2084,24 @@ void ecore_reset_vport_stats(struct ecore_dev *p_dev)\n \t}\n }\n \n+static enum gft_profile_type\n+ecore_arfs_mode_to_hsi(enum ecore_filter_config_mode mode)\n+{\n+\tif (mode == ECORE_FILTER_CONFIG_MODE_5_TUPLE)\n+\t\treturn GFT_PROFILE_TYPE_4_TUPLE;\n+\n+\tif (mode == ECORE_FILTER_CONFIG_MODE_IP_DEST)\n+\t\treturn GFT_PROFILE_TYPE_IP_DST_ADDR;\n+\n+\tif (mode == ECORE_FILTER_CONFIG_MODE_TUNN_TYPE)\n+\t\treturn GFT_PROFILE_TYPE_TUNNEL_TYPE;\n+\n+\tif (mode == ECORE_FILTER_CONFIG_MODE_IP_SRC)\n+\t\treturn GFT_PROFILE_TYPE_IP_SRC_ADDR;\n+\n+\treturn GFT_PROFILE_TYPE_L4_DST_PORT;\n+}\n+\n void ecore_arfs_mode_configure(struct ecore_hwfn *p_hwfn,\n \t\t\t       struct ecore_ptt *p_ptt,\n \t\t\t       struct ecore_arfs_config_params *p_cfg_params)\n@@ -2091,13 +2109,13 @@ void ecore_arfs_mode_configure(struct ecore_hwfn *p_hwfn,\n \tif (OSAL_TEST_BIT(ECORE_MF_DISABLE_ARFS, &p_hwfn->p_dev->mf_bits))\n \t\treturn;\n \n-\tif (p_cfg_params->arfs_enable) {\n+\tif (p_cfg_params->mode != ECORE_FILTER_CONFIG_MODE_DISABLE) {\n \t\tecore_gft_config(p_hwfn, p_ptt, p_hwfn->rel_pf_id,\n \t\t\t\t p_cfg_params->tcp,\n \t\t\t\t p_cfg_params->udp,\n \t\t\t\t p_cfg_params->ipv4,\n \t\t\t\t p_cfg_params->ipv6,\n-\t\t\t\t GFT_PROFILE_TYPE_4_TUPLE);\n+\t\t\t\t ecore_arfs_mode_to_hsi(p_cfg_params->mode));\n \t\tDP_VERBOSE(p_hwfn, ECORE_MSG_SP,\n \t\t\t   \"tcp = %s, udp = %s, ipv4 = %s, ipv6 =%s\\n\",\n \t\t\t   p_cfg_params->tcp ? \"Enable\" : \"Disable\",\n@@ -2107,8 +2125,8 @@ void ecore_arfs_mode_configure(struct ecore_hwfn *p_hwfn,\n \t} else {\n \t\tecore_gft_disable(p_hwfn, p_ptt, p_hwfn->rel_pf_id);\n \t}\n-\tDP_VERBOSE(p_hwfn, ECORE_MSG_SP, \"Configured ARFS mode : %s\\n\",\n-\t\t   p_cfg_params->arfs_enable ? \"Enable\" : \"Disable\");\n+\tDP_VERBOSE(p_hwfn, ECORE_MSG_SP, \"Configured ARFS mode : %d\\n\",\n+\t\t   (int)p_cfg_params->mode);\n }\n \n enum _ecore_status_t\ndiff --git a/drivers/net/qede/base/ecore_l2_api.h b/drivers/net/qede/base/ecore_l2_api.h\nindex 575b9e3..85034e6 100644\n--- a/drivers/net/qede/base/ecore_l2_api.h\n+++ b/drivers/net/qede/base/ecore_l2_api.h\n@@ -139,12 +139,21 @@ struct ecore_filter_accept_flags {\n #define ECORE_ACCEPT_BCAST\t\t0x20\n };\n \n+enum ecore_filter_config_mode {\n+\tECORE_FILTER_CONFIG_MODE_DISABLE,\n+\tECORE_FILTER_CONFIG_MODE_5_TUPLE,\n+\tECORE_FILTER_CONFIG_MODE_L4_PORT,\n+\tECORE_FILTER_CONFIG_MODE_IP_DEST,\n+\tECORE_FILTER_CONFIG_MODE_TUNN_TYPE,\n+\tECORE_FILTER_CONFIG_MODE_IP_SRC,\n+};\n+\n struct ecore_arfs_config_params {\n \tbool tcp;\n \tbool udp;\n \tbool ipv4;\n \tbool ipv6;\n-\tbool arfs_enable;\t/* Enable or disable arfs mode */\n+\tenum ecore_filter_config_mode mode;\n };\n \n /* Add / remove / move / remove-all unicast MAC-VLAN filters.\ndiff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c\nindex 3a7c466..d5e162c 100644\n--- a/drivers/net/qede/qede_ethdev.c\n+++ b/drivers/net/qede/qede_ethdev.c\n@@ -2576,7 +2576,7 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)\n \n \tadapter->num_tx_queues = 0;\n \tadapter->num_rx_queues = 0;\n-\tSLIST_INIT(&adapter->fdir_info.fdir_list_head);\n+\tSLIST_INIT(&adapter->arfs_info.arfs_list_head);\n \tSLIST_INIT(&adapter->vlan_list_head);\n \tSLIST_INIT(&adapter->uc_list_head);\n \tSLIST_INIT(&adapter->mc_list_head);\ndiff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h\nindex d54f19b..59828f8 100644\n--- a/drivers/net/qede/qede_ethdev.h\n+++ b/drivers/net/qede/qede_ethdev.h\n@@ -151,18 +151,43 @@ struct qede_ucast_entry {\n \tSLIST_ENTRY(qede_ucast_entry) list;\n };\n \n-struct qede_fdir_entry {\n+#ifndef IPV6_ADDR_LEN\n+#define IPV6_ADDR_LEN\t\t\t\t(16)\n+#endif\n+\n+struct qede_arfs_tuple {\n+\tunion {\n+\t\tuint32_t src_ipv4;\n+\t\tuint8_t src_ipv6[IPV6_ADDR_LEN];\n+\t};\n+\n+\tunion {\n+\t\tuint32_t dst_ipv4;\n+\t\tuint8_t dst_ipv6[IPV6_ADDR_LEN];\n+\t};\n+\n+\tuint16_t\tsrc_port;\n+\tuint16_t\tdst_port;\n+\tuint16_t\teth_proto;\n+\tuint8_t\t\tip_proto;\n+\n+\t/* Describe filtering mode needed for this kind of filter */\n+\tenum ecore_filter_config_mode mode;\n+};\n+\n+struct qede_arfs_entry {\n \tuint32_t soft_id; /* unused for now */\n \tuint16_t pkt_len; /* actual packet length to match */\n \tuint16_t rx_queue; /* queue to be steered to */\n \tconst struct rte_memzone *mz; /* mz used to hold L2 frame */\n-\tSLIST_ENTRY(qede_fdir_entry) list;\n+\tstruct qede_arfs_tuple tuple;\n+\tSLIST_ENTRY(qede_arfs_entry) list;\n };\n \n-struct qede_fdir_info {\n+struct qede_arfs_info {\n \tstruct ecore_arfs_config_params arfs;\n \tuint16_t filter_count;\n-\tSLIST_HEAD(fdir_list_head, qede_fdir_entry)fdir_list_head;\n+\tSLIST_HEAD(arfs_list_head, qede_arfs_entry)arfs_list_head;\n };\n \n /* IANA assigned default UDP ports for encapsulation protocols */\n@@ -207,7 +232,7 @@ struct qede_dev {\n \tstruct qede_tunn_params vxlan;\n \tstruct qede_tunn_params geneve;\n \tstruct qede_tunn_params ipgre;\n-\tstruct qede_fdir_info fdir_info;\n+\tstruct qede_arfs_info arfs_info;\n \tbool vlan_strip_flg;\n \tchar drv_ver[QEDE_PMD_DRV_VER_STR_SIZE];\n \tbool vport_started;\ndiff --git a/drivers/net/qede/qede_filter.c b/drivers/net/qede/qede_filter.c\nindex 4b709e6..bdf2885 100644\n--- a/drivers/net/qede/qede_filter.c\n+++ b/drivers/net/qede/qede_filter.c\n@@ -129,10 +129,6 @@\n  */\n #define QEDE_MAX_FDIR_PKT_LEN\t\t\t(86)\n \n-#ifndef IPV6_ADDR_LEN\n-#define IPV6_ADDR_LEN\t\t\t\t(16)\n-#endif\n-\n static inline bool qede_valid_flow(uint16_t flow_type)\n {\n \treturn  ((flow_type == RTE_ETH_FLOW_NONFRAG_IPV4_TCP) ||\n@@ -141,6 +137,12 @@ static inline bool qede_valid_flow(uint16_t flow_type)\n \t\t (flow_type == RTE_ETH_FLOW_NONFRAG_IPV6_UDP));\n }\n \n+static uint16_t\n+qede_arfs_construct_pkt(struct rte_eth_dev *eth_dev,\n+\t\t\tstruct qede_arfs_entry *arfs,\n+\t\t\tvoid *buff,\n+\t\t\tstruct ecore_arfs_config_params *params);\n+\n /* Note: Flowdir support is only partial.\n  * For ex: drop_queue, FDIR masks, flex_conf are not supported.\n  * Parameters like pballoc/status fields are irrelevant here.\n@@ -154,17 +156,19 @@ int qede_check_fdir_support(struct rte_eth_dev *eth_dev)\n \t/* check FDIR modes */\n \tswitch (fdir->mode) {\n \tcase RTE_FDIR_MODE_NONE:\n-\t\tqdev->fdir_info.arfs.arfs_enable = false;\n+\t\tqdev->arfs_info.arfs.mode = ECORE_FILTER_CONFIG_MODE_DISABLE;\n \t\tDP_INFO(edev, \"flowdir is disabled\\n\");\n \tbreak;\n \tcase RTE_FDIR_MODE_PERFECT:\n \t\tif (ECORE_IS_CMT(edev)) {\n \t\t\tDP_ERR(edev, \"flowdir is not supported in 100G mode\\n\");\n-\t\t\tqdev->fdir_info.arfs.arfs_enable = false;\n+\t\t\tqdev->arfs_info.arfs.mode =\n+\t\t\t\tECORE_FILTER_CONFIG_MODE_DISABLE;\n \t\t\treturn -ENOTSUP;\n \t\t}\n-\t\tqdev->fdir_info.arfs.arfs_enable = true;\n-\t\tDP_INFO(edev, \"flowdir is enabled\\n\");\n+\t\tqdev->arfs_info.arfs.mode =\n+\t\t\t\tECORE_FILTER_CONFIG_MODE_5_TUPLE;\n+\t\tDP_INFO(edev, \"flowdir is enabled (5 Tuple mode)\\n\");\n \tbreak;\n \tcase RTE_FDIR_MODE_PERFECT_TUNNEL:\n \tcase RTE_FDIR_MODE_SIGNATURE:\n@@ -179,29 +183,96 @@ int qede_check_fdir_support(struct rte_eth_dev *eth_dev)\n void qede_fdir_dealloc_resc(struct rte_eth_dev *eth_dev)\n {\n \tstruct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);\n-\tstruct qede_fdir_entry *tmp = NULL;\n+\tstruct qede_arfs_entry *tmp = NULL;\n \n-\tSLIST_FOREACH(tmp, &qdev->fdir_info.fdir_list_head, list) {\n+\tSLIST_FOREACH(tmp, &qdev->arfs_info.arfs_list_head, list) {\n \t\tif (tmp) {\n \t\t\tif (tmp->mz)\n \t\t\t\trte_memzone_free(tmp->mz);\n-\t\t\tSLIST_REMOVE(&qdev->fdir_info.fdir_list_head, tmp,\n-\t\t\t\t     qede_fdir_entry, list);\n+\t\t\tSLIST_REMOVE(&qdev->arfs_info.arfs_list_head, tmp,\n+\t\t\t\t     qede_arfs_entry, list);\n \t\t\trte_free(tmp);\n \t\t}\n \t}\n }\n \n static int\n-qede_config_cmn_fdir_filter(struct rte_eth_dev *eth_dev,\n-\t\t\t    struct rte_eth_fdir_filter *fdir_filter,\n-\t\t\t    bool add)\n+qede_fdir_to_arfs_filter(struct rte_eth_dev *eth_dev,\n+\t\t\t struct rte_eth_fdir_filter *fdir,\n+\t\t\t struct qede_arfs_entry *arfs)\n+{\n+\tstruct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);\n+\tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n+\tstruct rte_eth_fdir_input *input;\n+\n+\tstatic const uint8_t next_proto[] = {\n+\t\t[RTE_ETH_FLOW_NONFRAG_IPV4_TCP] = IPPROTO_TCP,\n+\t\t[RTE_ETH_FLOW_NONFRAG_IPV4_UDP] = IPPROTO_UDP,\n+\t\t[RTE_ETH_FLOW_NONFRAG_IPV6_TCP] = IPPROTO_TCP,\n+\t\t[RTE_ETH_FLOW_NONFRAG_IPV6_UDP] = IPPROTO_UDP,\n+\t};\n+\n+\tinput = &fdir->input;\n+\n+\tDP_INFO(edev, \"flow_type %d\\n\", input->flow_type);\n+\n+\tswitch (input->flow_type) {\n+\tcase RTE_ETH_FLOW_NONFRAG_IPV4_TCP:\n+\tcase RTE_ETH_FLOW_NONFRAG_IPV4_UDP:\n+\t\t/* fill the common ip header */\n+\t\tarfs->tuple.eth_proto = ETHER_TYPE_IPv4;\n+\t\tarfs->tuple.dst_ipv4 = input->flow.ip4_flow.dst_ip;\n+\t\tarfs->tuple.src_ipv4 = input->flow.ip4_flow.src_ip;\n+\t\tarfs->tuple.ip_proto = next_proto[input->flow_type];\n+\n+\t\t/* UDP */\n+\t\tif (input->flow_type == RTE_ETH_FLOW_NONFRAG_IPV4_UDP) {\n+\t\t\tarfs->tuple.dst_port = input->flow.udp4_flow.dst_port;\n+\t\t\tarfs->tuple.src_port = input->flow.udp4_flow.src_port;\n+\t\t} else { /* TCP */\n+\t\t\tarfs->tuple.dst_port = input->flow.tcp4_flow.dst_port;\n+\t\t\tarfs->tuple.src_port = input->flow.tcp4_flow.src_port;\n+\t\t}\n+\t\tbreak;\n+\tcase RTE_ETH_FLOW_NONFRAG_IPV6_TCP:\n+\tcase RTE_ETH_FLOW_NONFRAG_IPV6_UDP:\n+\t\tarfs->tuple.eth_proto = ETHER_TYPE_IPv6;\n+\t\tarfs->tuple.ip_proto = next_proto[input->flow_type];\n+\t\trte_memcpy(arfs->tuple.dst_ipv6,\n+\t\t\t   &input->flow.ipv6_flow.dst_ip,\n+\t\t\t   IPV6_ADDR_LEN);\n+\t\trte_memcpy(arfs->tuple.src_ipv6,\n+\t\t\t   &input->flow.ipv6_flow.src_ip,\n+\t\t\t   IPV6_ADDR_LEN);\n+\n+\t\t/* UDP */\n+\t\tif (input->flow_type == RTE_ETH_FLOW_NONFRAG_IPV6_UDP) {\n+\t\t\tarfs->tuple.dst_port = input->flow.udp6_flow.dst_port;\n+\t\t\tarfs->tuple.src_port = input->flow.udp6_flow.src_port;\n+\t\t} else { /* TCP */\n+\t\t\tarfs->tuple.dst_port = input->flow.tcp6_flow.dst_port;\n+\t\t\tarfs->tuple.src_port = input->flow.tcp6_flow.src_port;\n+\t\t}\n+\t\tbreak;\n+\tdefault:\n+\t\tDP_ERR(edev, \"Unsupported flow_type %u\\n\",\n+\t\t       input->flow_type);\n+\t\treturn -ENOTSUP;\n+\t}\n+\n+\tarfs->rx_queue = fdir->action.rx_queue;\n+\treturn 0;\n+}\n+\n+static int\n+qede_config_arfs_filter(struct rte_eth_dev *eth_dev,\n+\t\t\tstruct qede_arfs_entry *arfs,\n+\t\t\tbool add)\n {\n \tstruct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);\n \tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n \tchar mz_name[RTE_MEMZONE_NAMESIZE] = {0};\n-\tstruct qede_fdir_entry *tmp = NULL;\n-\tstruct qede_fdir_entry *fdir = NULL;\n+\tstruct qede_arfs_entry *tmp = NULL;\n \tconst struct rte_memzone *mz;\n \tstruct ecore_hwfn *p_hwfn;\n \tenum _ecore_status_t rc;\n@@ -209,17 +280,12 @@ void qede_fdir_dealloc_resc(struct rte_eth_dev *eth_dev)\n \tvoid *pkt;\n \n \tif (add) {\n-\t\tif (qdev->fdir_info.filter_count == QEDE_RFS_MAX_FLTR - 1) {\n+\t\tif (qdev->arfs_info.filter_count == QEDE_RFS_MAX_FLTR - 1) {\n \t\t\tDP_ERR(edev, \"Reached max flowdir filter limit\\n\");\n \t\t\treturn -EINVAL;\n \t\t}\n-\t\tfdir = rte_malloc(NULL, sizeof(struct qede_fdir_entry),\n-\t\t\t\t  RTE_CACHE_LINE_SIZE);\n-\t\tif (!fdir) {\n-\t\t\tDP_ERR(edev, \"Did not allocate memory for fdir\\n\");\n-\t\t\treturn -ENOMEM;\n-\t\t}\n \t}\n+\n \t/* soft_id could have been used as memzone string, but soft_id is\n \t * not currently used so it has no significance.\n \t */\n@@ -230,98 +296,124 @@ void qede_fdir_dealloc_resc(struct rte_eth_dev *eth_dev)\n \tif (!mz) {\n \t\tDP_ERR(edev, \"Failed to allocate memzone for fdir, err = %s\\n\",\n \t\t       rte_strerror(rte_errno));\n-\t\trc = -rte_errno;\n-\t\tgoto err1;\n+\t\treturn -rte_errno;\n \t}\n \n \tpkt = mz->addr;\n \tmemset(pkt, 0, QEDE_MAX_FDIR_PKT_LEN);\n-\tpkt_len = qede_fdir_construct_pkt(eth_dev, fdir_filter, pkt,\n-\t\t\t\t\t  &qdev->fdir_info.arfs);\n+\tpkt_len = qede_arfs_construct_pkt(eth_dev, arfs, pkt,\n+\t\t\t\t\t  &qdev->arfs_info.arfs);\n \tif (pkt_len == 0) {\n \t\trc = -EINVAL;\n-\t\tgoto err2;\n+\t\tgoto err1;\n \t}\n+\n \tDP_INFO(edev, \"pkt_len = %u memzone = %s\\n\", pkt_len, mz_name);\n \tif (add) {\n-\t\tSLIST_FOREACH(tmp, &qdev->fdir_info.fdir_list_head, list) {\n+\t\tSLIST_FOREACH(tmp, &qdev->arfs_info.arfs_list_head, list) {\n \t\t\tif (memcmp(tmp->mz->addr, pkt, pkt_len) == 0) {\n \t\t\t\tDP_INFO(edev, \"flowdir filter exist\\n\");\n-\t\t\t\trc = 0;\n-\t\t\t\tgoto err2;\n+\t\t\t\trc = -EEXIST;\n+\t\t\t\tgoto err1;\n \t\t\t}\n \t\t}\n \t} else {\n-\t\tSLIST_FOREACH(tmp, &qdev->fdir_info.fdir_list_head, list) {\n+\t\tSLIST_FOREACH(tmp, &qdev->arfs_info.arfs_list_head, list) {\n \t\t\tif (memcmp(tmp->mz->addr, pkt, pkt_len) == 0)\n \t\t\t\tbreak;\n \t\t}\n \t\tif (!tmp) {\n \t\t\tDP_ERR(edev, \"flowdir filter does not exist\\n\");\n \t\t\trc = -EEXIST;\n-\t\t\tgoto err2;\n+\t\t\tgoto err1;\n \t\t}\n \t}\n \tp_hwfn = ECORE_LEADING_HWFN(edev);\n \tif (add) {\n-\t\tif (!qdev->fdir_info.arfs.arfs_enable) {\n+\t\tif (qdev->arfs_info.arfs.mode ==\n+\t\t\tECORE_FILTER_CONFIG_MODE_DISABLE) {\n \t\t\t/* Force update */\n \t\t\teth_dev->data->dev_conf.fdir_conf.mode =\n \t\t\t\t\t\tRTE_FDIR_MODE_PERFECT;\n-\t\t\tqdev->fdir_info.arfs.arfs_enable = true;\n+\t\t\tqdev->arfs_info.arfs.mode =\n+\t\t\t\t\tECORE_FILTER_CONFIG_MODE_5_TUPLE;\n \t\t\tDP_INFO(edev, \"Force enable flowdir in perfect mode\\n\");\n \t\t}\n \t\t/* Enable ARFS searcher with updated flow_types */\n \t\tecore_arfs_mode_configure(p_hwfn, p_hwfn->p_arfs_ptt,\n-\t\t\t\t\t  &qdev->fdir_info.arfs);\n+\t\t\t\t\t  &qdev->arfs_info.arfs);\n \t}\n \t/* configure filter with ECORE_SPQ_MODE_EBLOCK */\n \trc = ecore_configure_rfs_ntuple_filter(p_hwfn, NULL,\n \t\t\t\t\t       (dma_addr_t)mz->iova,\n \t\t\t\t\t       pkt_len,\n-\t\t\t\t\t       fdir_filter->action.rx_queue,\n+\t\t\t\t\t       arfs->rx_queue,\n \t\t\t\t\t       0, add);\n \tif (rc == ECORE_SUCCESS) {\n \t\tif (add) {\n-\t\t\tfdir->rx_queue = fdir_filter->action.rx_queue;\n-\t\t\tfdir->pkt_len = pkt_len;\n-\t\t\tfdir->mz = mz;\n-\t\t\tSLIST_INSERT_HEAD(&qdev->fdir_info.fdir_list_head,\n-\t\t\t\t\t  fdir, list);\n-\t\t\tqdev->fdir_info.filter_count++;\n+\t\t\tarfs->pkt_len = pkt_len;\n+\t\t\tarfs->mz = mz;\n+\t\t\tSLIST_INSERT_HEAD(&qdev->arfs_info.arfs_list_head,\n+\t\t\t\t\t  arfs, list);\n+\t\t\tqdev->arfs_info.filter_count++;\n \t\t\tDP_INFO(edev, \"flowdir filter added, count = %d\\n\",\n-\t\t\t\tqdev->fdir_info.filter_count);\n+\t\t\t\tqdev->arfs_info.filter_count);\n \t\t} else {\n \t\t\trte_memzone_free(tmp->mz);\n-\t\t\tSLIST_REMOVE(&qdev->fdir_info.fdir_list_head, tmp,\n-\t\t\t\t     qede_fdir_entry, list);\n+\t\t\tSLIST_REMOVE(&qdev->arfs_info.arfs_list_head, tmp,\n+\t\t\t\t     qede_arfs_entry, list);\n \t\t\trte_free(tmp); /* the node deleted */\n \t\t\trte_memzone_free(mz); /* temp node allocated */\n-\t\t\tqdev->fdir_info.filter_count--;\n+\t\t\tqdev->arfs_info.filter_count--;\n \t\t\tDP_INFO(edev, \"Fdir filter deleted, count = %d\\n\",\n-\t\t\t\tqdev->fdir_info.filter_count);\n+\t\t\t\tqdev->arfs_info.filter_count);\n \t\t}\n \t} else {\n \t\tDP_ERR(edev, \"flowdir filter failed, rc=%d filter_count=%d\\n\",\n-\t\t       rc, qdev->fdir_info.filter_count);\n+\t\t       rc, qdev->arfs_info.filter_count);\n \t}\n \n \t/* Disable ARFS searcher if there are no more filters */\n-\tif (qdev->fdir_info.filter_count == 0) {\n-\t\tmemset(&qdev->fdir_info.arfs, 0,\n+\tif (qdev->arfs_info.filter_count == 0) {\n+\t\tmemset(&qdev->arfs_info.arfs, 0,\n \t\t       sizeof(struct ecore_arfs_config_params));\n \t\tDP_INFO(edev, \"Disabling flowdir\\n\");\n-\t\tqdev->fdir_info.arfs.arfs_enable = false;\n+\t\tqdev->arfs_info.arfs.mode = ECORE_FILTER_CONFIG_MODE_DISABLE;\n \t\tecore_arfs_mode_configure(p_hwfn, p_hwfn->p_arfs_ptt,\n-\t\t\t\t\t  &qdev->fdir_info.arfs);\n+\t\t\t\t\t  &qdev->arfs_info.arfs);\n \t}\n \treturn 0;\n \n-err2:\n-\trte_memzone_free(mz);\n err1:\n-\tif (add)\n-\t\trte_free(fdir);\n+\trte_memzone_free(mz);\n+\treturn rc;\n+}\n+\n+static int\n+qede_config_cmn_fdir_filter(struct rte_eth_dev *eth_dev,\n+\t\t\t    struct rte_eth_fdir_filter *fdir_filter,\n+\t\t\t    bool add)\n+{\n+\tstruct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);\n+\tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n+\tstruct qede_arfs_entry *arfs = NULL;\n+\tint rc = 0;\n+\n+\tarfs = rte_malloc(NULL, sizeof(struct qede_arfs_entry),\n+\t\t\t\t  RTE_CACHE_LINE_SIZE);\n+\tif (!arfs) {\n+\t\tDP_ERR(edev, \"Did not allocate memory for arfs\\n\");\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\trc = qede_fdir_to_arfs_filter(eth_dev, fdir_filter, arfs);\n+\tif (rc < 0)\n+\t\treturn rc;\n+\n+\trc = qede_config_arfs_filter(eth_dev, arfs, add);\n+\tif (rc < 0)\n+\t\trte_free(arfs);\n+\n \treturn rc;\n }\n \n@@ -353,9 +445,9 @@ void qede_fdir_dealloc_resc(struct rte_eth_dev *eth_dev)\n }\n \n /* Fills the L3/L4 headers and returns the actual length  of flowdir packet */\n-uint16_t\n-qede_fdir_construct_pkt(struct rte_eth_dev *eth_dev,\n-\t\t\tstruct rte_eth_fdir_filter *fdir,\n+static uint16_t\n+qede_arfs_construct_pkt(struct rte_eth_dev *eth_dev,\n+\t\t\tstruct qede_arfs_entry *arfs,\n \t\t\tvoid *buff,\n \t\t\tstruct ecore_arfs_config_params *params)\n \n@@ -364,64 +456,39 @@ void qede_fdir_dealloc_resc(struct rte_eth_dev *eth_dev)\n \tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n \tuint16_t *ether_type;\n \tuint8_t *raw_pkt;\n-\tstruct rte_eth_fdir_input *input;\n-\tstatic uint8_t vlan_frame[] = {0x81, 0, 0, 0};\n \tstruct ipv4_hdr *ip;\n \tstruct ipv6_hdr *ip6;\n \tstruct udp_hdr *udp;\n \tstruct tcp_hdr *tcp;\n \tuint16_t len;\n-\tstatic const uint8_t next_proto[] = {\n-\t\t[RTE_ETH_FLOW_NONFRAG_IPV4_TCP] = IPPROTO_TCP,\n-\t\t[RTE_ETH_FLOW_NONFRAG_IPV4_UDP] = IPPROTO_UDP,\n-\t\t[RTE_ETH_FLOW_NONFRAG_IPV6_TCP] = IPPROTO_TCP,\n-\t\t[RTE_ETH_FLOW_NONFRAG_IPV6_UDP] = IPPROTO_UDP,\n-\t};\n+\n \traw_pkt = (uint8_t *)buff;\n-\tinput = &fdir->input;\n-\tDP_INFO(edev, \"flow_type %d\\n\", input->flow_type);\n \n \tlen =  2 * sizeof(struct ether_addr);\n \traw_pkt += 2 * sizeof(struct ether_addr);\n-\tif (input->flow_ext.vlan_tci) {\n-\t\tDP_INFO(edev, \"adding VLAN header\\n\");\n-\t\trte_memcpy(raw_pkt, vlan_frame, sizeof(vlan_frame));\n-\t\trte_memcpy(raw_pkt + sizeof(uint16_t),\n-\t\t\t   &input->flow_ext.vlan_tci,\n-\t\t\t   sizeof(uint16_t));\n-\t\traw_pkt += sizeof(vlan_frame);\n-\t\tlen += sizeof(vlan_frame);\n-\t}\n \tether_type = (uint16_t *)raw_pkt;\n \traw_pkt += sizeof(uint16_t);\n \tlen += sizeof(uint16_t);\n \n-\tswitch (input->flow_type) {\n-\tcase RTE_ETH_FLOW_NONFRAG_IPV4_TCP:\n-\tcase RTE_ETH_FLOW_NONFRAG_IPV4_UDP:\n-\t\t/* fill the common ip header */\n+\t*ether_type = rte_cpu_to_be_16(arfs->tuple.eth_proto);\n+\tswitch (arfs->tuple.eth_proto) {\n+\tcase ETHER_TYPE_IPv4:\n \t\tip = (struct ipv4_hdr *)raw_pkt;\n-\t\t*ether_type = rte_cpu_to_be_16(ETHER_TYPE_IPv4);\n \t\tip->version_ihl = QEDE_FDIR_IP_DEFAULT_VERSION_IHL;\n \t\tip->total_length = sizeof(struct ipv4_hdr);\n-\t\tip->next_proto_id = input->flow.ip4_flow.proto ?\n-\t\t\t\t    input->flow.ip4_flow.proto :\n-\t\t\t\t    next_proto[input->flow_type];\n-\t\tip->time_to_live = input->flow.ip4_flow.ttl ?\n-\t\t\t\t   input->flow.ip4_flow.ttl :\n-\t\t\t\t   QEDE_FDIR_IPV4_DEF_TTL;\n-\t\tip->type_of_service = input->flow.ip4_flow.tos;\n-\t\tip->dst_addr = input->flow.ip4_flow.dst_ip;\n-\t\tip->src_addr = input->flow.ip4_flow.src_ip;\n+\t\tip->next_proto_id = arfs->tuple.ip_proto;\n+\t\tip->time_to_live = QEDE_FDIR_IPV4_DEF_TTL;\n+\t\tip->dst_addr = arfs->tuple.dst_ipv4;\n+\t\tip->src_addr = arfs->tuple.src_ipv4;\n \t\tlen += sizeof(struct ipv4_hdr);\n \t\tparams->ipv4 = true;\n \n \t\traw_pkt = (uint8_t *)buff;\n \t\t/* UDP */\n-\t\tif (input->flow_type == RTE_ETH_FLOW_NONFRAG_IPV4_UDP) {\n+\t\tif (arfs->tuple.ip_proto == IPPROTO_UDP) {\n \t\t\tudp = (struct udp_hdr *)(raw_pkt + len);\n-\t\t\tudp->dst_port = input->flow.udp4_flow.dst_port;\n-\t\t\tudp->src_port = input->flow.udp4_flow.src_port;\n+\t\t\tudp->dst_port = arfs->tuple.dst_port;\n+\t\t\tudp->src_port = arfs->tuple.src_port;\n \t\t\tudp->dgram_len = sizeof(struct udp_hdr);\n \t\t\tlen += sizeof(struct udp_hdr);\n \t\t\t/* adjust ip total_length */\n@@ -429,8 +496,8 @@ void qede_fdir_dealloc_resc(struct rte_eth_dev *eth_dev)\n \t\t\tparams->udp = true;\n \t\t} else { /* TCP */\n \t\t\ttcp = (struct tcp_hdr *)(raw_pkt + len);\n-\t\t\ttcp->src_port = input->flow.tcp4_flow.src_port;\n-\t\t\ttcp->dst_port = input->flow.tcp4_flow.dst_port;\n+\t\t\ttcp->src_port = arfs->tuple.src_port;\n+\t\t\ttcp->dst_port = arfs->tuple.dst_port;\n \t\t\ttcp->data_off = QEDE_FDIR_TCP_DEFAULT_DATAOFF;\n \t\t\tlen += sizeof(struct tcp_hdr);\n \t\t\t/* adjust ip total_length */\n@@ -438,43 +505,39 @@ void qede_fdir_dealloc_resc(struct rte_eth_dev *eth_dev)\n \t\t\tparams->tcp = true;\n \t\t}\n \t\tbreak;\n-\tcase RTE_ETH_FLOW_NONFRAG_IPV6_TCP:\n-\tcase RTE_ETH_FLOW_NONFRAG_IPV6_UDP:\n+\tcase ETHER_TYPE_IPv6:\n \t\tip6 = (struct ipv6_hdr *)raw_pkt;\n-\t\t*ether_type = rte_cpu_to_be_16(ETHER_TYPE_IPv6);\n-\t\tip6->proto = input->flow.ipv6_flow.proto ?\n-\t\t\t\t\tinput->flow.ipv6_flow.proto :\n-\t\t\t\t\tnext_proto[input->flow_type];\n+\t\tip6->proto = arfs->tuple.ip_proto;\n \t\tip6->vtc_flow =\n \t\t\trte_cpu_to_be_32(QEDE_FDIR_IPV6_DEFAULT_VTC_FLOW);\n \n-\t\trte_memcpy(&ip6->src_addr, &input->flow.ipv6_flow.src_ip,\n+\t\trte_memcpy(&ip6->src_addr, arfs->tuple.src_ipv6,\n \t\t\t   IPV6_ADDR_LEN);\n-\t\trte_memcpy(&ip6->dst_addr, &input->flow.ipv6_flow.dst_ip,\n+\t\trte_memcpy(&ip6->dst_addr, arfs->tuple.dst_ipv6,\n \t\t\t   IPV6_ADDR_LEN);\n \t\tlen += sizeof(struct ipv6_hdr);\n \t\tparams->ipv6 = true;\n \n \t\traw_pkt = (uint8_t *)buff;\n \t\t/* UDP */\n-\t\tif (input->flow_type == RTE_ETH_FLOW_NONFRAG_IPV6_UDP) {\n+\t\tif (arfs->tuple.ip_proto == IPPROTO_UDP) {\n \t\t\tudp = (struct udp_hdr *)(raw_pkt + len);\n-\t\t\tudp->src_port = input->flow.udp6_flow.src_port;\n-\t\t\tudp->dst_port = input->flow.udp6_flow.dst_port;\n+\t\t\tudp->src_port = arfs->tuple.src_port;\n+\t\t\tudp->dst_port = arfs->tuple.dst_port;\n \t\t\tlen += sizeof(struct udp_hdr);\n \t\t\tparams->udp = true;\n \t\t} else { /* TCP */\n \t\t\ttcp = (struct tcp_hdr *)(raw_pkt + len);\n-\t\t\ttcp->src_port = input->flow.tcp6_flow.src_port;\n-\t\t\ttcp->dst_port = input->flow.tcp6_flow.dst_port;\n+\t\t\ttcp->src_port = arfs->tuple.src_port;\n+\t\t\ttcp->dst_port = arfs->tuple.dst_port;\n \t\t\ttcp->data_off = QEDE_FDIR_TCP_DEFAULT_DATAOFF;\n \t\t\tlen += sizeof(struct tcp_hdr);\n \t\t\tparams->tcp = true;\n \t\t}\n \t\tbreak;\n \tdefault:\n-\t\tDP_ERR(edev, \"Unsupported flow_type %u\\n\",\n-\t\t       input->flow_type);\n+\t\tDP_ERR(edev, \"Unsupported eth_proto %u\\n\",\n+\t\t       arfs->tuple.eth_proto);\n \t\treturn 0;\n \t}\n \n",
    "prefixes": [
        "12/17"
    ]
}