get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 132362,
    "url": "http://patches.dpdk.org/api/patches/132362/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20231007013440.1309422-2-chaoyong.he@corigine.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": "<20231007013440.1309422-2-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231007013440.1309422-2-chaoyong.he@corigine.com",
    "date": "2023-10-07T01:34:33",
    "name": "[v2,1/8] ethdev: add member notification for bonding port",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "7f4383a0c75b12500d60a452c40e111aa5378105",
    "submitter": {
        "id": 2554,
        "url": "http://patches.dpdk.org/api/people/2554/?format=api",
        "name": "Chaoyong He",
        "email": "chaoyong.he@corigine.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20231007013440.1309422-2-chaoyong.he@corigine.com/mbox/",
    "series": [
        {
            "id": 29756,
            "url": "http://patches.dpdk.org/api/series/29756/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=29756",
            "date": "2023-10-07T01:34:32",
            "name": "Enhance the bond framework to support offload",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/29756/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/132362/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/132362/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 564E3426D6;\n\tSat,  7 Oct 2023 03:35:13 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 0D066402CB;\n\tSat,  7 Oct 2023 03:35:06 +0200 (CEST)",
            "from NAM10-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam10on2117.outbound.protection.outlook.com [40.107.94.117])\n by mails.dpdk.org (Postfix) with ESMTP id A3500402A7\n for <dev@dpdk.org>; Sat,  7 Oct 2023 03:35:03 +0200 (CEST)",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by BY3PR13MB4913.namprd13.prod.outlook.com (2603:10b6:a03:364::7)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.37; Sat, 7 Oct\n 2023 01:35:02 +0000",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::28c0:63e2:ecd1:9314]) by SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::28c0:63e2:ecd1:9314%4]) with mapi id 15.20.6813.027; Sat, 7 Oct 2023\n 01:35:02 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=TiVh/pc4kBcwPEE7a7IHCLecuuvBOuywaGAUhenpNE9aG6BIVJn/o1PPVA8TxtAw7a0T/28YFdP2hM9t26KeA2jdWlpJt1P7hvOcYpsbcc/FYU0ZP5RUKb4s/Mrajc/CoJRS7gpwUZDdRFRp/6hlPTCymHY3EIw9p5QNA57R8vKG+4pmHufb6yyJdDxiT+y2MRkr/veLazH9pbJHtfpNV7DNpDXiv4Uisnp8p8CAR8Gjb2hRNPlD+DnpUOfGfwTbYflWQ5ylcbzy0f2fjXD8utMDoYRULOWfnVb3kcblyLrQXQO5gILNlY1f3OYZul/nIp9s0sCUAVJkAotkGa3hvA==",
        "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=VmMQX1GouZR8x912n78gq/0eSZt7STQOa9dXC6u7gYY=;\n b=XelkCXWqhmoQQjH4Yb6vVS3/Afc8iLj3omdWTs9XC5lvpJsgRsBAAWZ3Re5M0SiLQ9XfCHCB0A3+8s86AVXMqo/OiTHm0l+yXGaZNyZmaYJVH+NQwiKoNaJ6lDe8jxNiiW3pGnhO/TU/zvHAyPxSwH+tDQnITKvtfzTC4p8veKqAAnW0Q8xqfmspLvIXm9YNCBG5YDnAnkMjxMl8NIJvRCNQpkr8iyCv2lQ4Mfoxss49kULANxjAhR1Yv/koIrE+m5HkfQuDE89S3WUz5bZSlU9zOCI+enXzKNRiBZyEM3UaEirOP1yy6vgOpjc+5oyTe18SYl9kOWHGyCa/xYF83Q==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com;\n dkim=pass header.d=corigine.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=VmMQX1GouZR8x912n78gq/0eSZt7STQOa9dXC6u7gYY=;\n b=mo+WFu2U5eUX9HgKK3p9HDaDTNMlHZAiVC3ldqPanQ0UNu2dOMvEY6JQ0TDIyriYvcI6v9vrNsmXTVB3cgMI8SC4A9dfGF0fIw7b+Gol1V78qRAsUO1dLwB8onU0BJwE/ULUkuJmWZlLjjpcfh7SwOEzN0zfz7xVmSHF9Uaht/4=",
        "Authentication-Results": "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=corigine.com;",
        "From": "Chaoyong He <chaoyong.he@corigine.com>",
        "To": "dev@dpdk.org",
        "Cc": "oss-drivers@corigine.com, Long Wu <long.wu@corigine.com>,\n James Hershaw <james.hershaw@corigine.com>,\n Chaoyong He <chaoyong.he@corigine.com>",
        "Subject": "[PATCH v2 1/8] ethdev: add member notification for bonding port",
        "Date": "Sat,  7 Oct 2023 09:34:33 +0800",
        "Message-Id": "<20231007013440.1309422-2-chaoyong.he@corigine.com>",
        "X-Mailer": "git-send-email 2.39.1",
        "In-Reply-To": "<20231007013440.1309422-1-chaoyong.he@corigine.com>",
        "References": "<20231005024012.1279810-1-chaoyong.he@corigine.com>\n <20231007013440.1309422-1-chaoyong.he@corigine.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "PH8PR20CA0008.namprd20.prod.outlook.com\n (2603:10b6:510:23c::18) To SJ0PR13MB5545.namprd13.prod.outlook.com\n (2603:10b6:a03:424::5)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "SJ0PR13MB5545:EE_|BY3PR13MB4913:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "6b50f759-5cbf-4a88-0e0f-08dbc6d5a024",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n 9lo8bd4tUZhDIwJJSVArlMadTptJck+gbbKzeNH7/tHXcIcF8zybqzwT3pfjqQArTHgWHwVZT+uNcdOlAN/MJ3dPJM5OinI7XAXZoMlZI89IwQkgV9lIIVCuvH9m5jFj1tWD9Ei/Cr6EC6zzOQsMSQr5k3tOAKbF29XC1pJMkSBqHpNe9ZKT4ckgNfg+OcKX+QEag0xPShpRLSRAL8k0PDhUJUVy200hwEWcmljs0Xxcc0lGznRm4W+kuHhGaeCCBDQa5jMWxHWS8LSCSjp6aza6NZ5FzdEBxDJBiQNQZ4gODlf+0LN0XpeOZ+pcsM2NEm76vDfB6RGHNAQbkMd6hOjGGZFrWKx/OYY2STkCyaJv7VqUhTJhCVSEd7VEICTCUcoc4yFDR3jvXf2Rnt0PNz+wYpE7eLErx0eZvuaFDJwdIevAKbyZ98yJiy2TuTXxKh+ef9G8PsvlprsTdk91+z2nxylAOiFdAOMRs5zXcm4s8Zwyk+cWCvcMsLgnOqdMAyK9rLEGXnF0Id+B6uLQIzYOHeq4TvXAkSkPw03mIrcdPIRDmRgOHr/d/zugMUONl4HlX5QpB3m5qBrlPf127Uhg1kvcSwMJE/2q3D2N7RJNT7w1/CMiJJaNsGqqs7fOEjSkrwxojwkNp9/9rsJQzGp3R5R36gcQtzvM2QJivig=",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230031)(136003)(396003)(366004)(376002)(346002)(39830400003)(230922051799003)(186009)(451199024)(1800799009)(64100799003)(30864003)(15650500001)(2906002)(44832011)(8676002)(8936002)(5660300002)(4326008)(54906003)(41300700001)(66946007)(316002)(6916009)(2616005)(66556008)(66476007)(6666004)(26005)(36756003)(52116002)(107886003)(1076003)(6512007)(6506007)(86362001)(38350700002)(478600001)(38100700002)(83380400001)(6486002);\n DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n eeYdCkgIPDvwuRv2IFJa7nLDkduDZt1CinaCCFsFSwLm09Rqj9qnlXSPAOubS04Ueag5trssPgkwBA3wavBqXmdKKsOi9MWp1HTeOTZkNKsnnhoEOYFUn3XYdabfyCg+anjuFP5UvSXgUc8IGnpsNUqka3dMvtcqnhSuRV49Ai2UCCzmzdEoUoB78RQ9Dtd0KLD5gKo9nCl7OEZnZNhESAbHdbGVbfK3utDySpH5L9pantEnKN7bZa17nbzWnyORMkwAkS2rPrfQCGL7BgfSxQjMBCWC09Ab072bVCxVqsiNkdQ/lLfwtsFq633QEM6yCfchtH9i6CucolfqVYzws+5tg1n6smsrLr5wuo9pmZ6GLdBorcCD0o9E9f5gnbesBCGBSzTHIRqNmTLN6Ycixl0LKSwzVsumJGHBpea5ZZkzWR/CR0p4qwtf9rVKnjLeF7CLDJZMUxdfGkzkwPupk7RUvpxhq2AwSBgFTVHG9GLjWPKglpi6LpeJIVGGUPeFnYAwB/2HFe7NYufn51sI4xioRCGAu1/EWr+zIsE8E213vmC/6mx2H3Qk+7k6ZgFWqBFkF6jcTco0CagLiCtgw0AMaDEkMSjEFx15GJh6RjZSVVYYdDNfvY6nexnlxZAgELm2e/RpMrM/jSIyWMDcB5yo24q4uJ/XpMYE0Ox7OiIsRT+sCwTF8gasB0jAkWXfWyc9083uJCGDlEyW16VsWpACUsJpTf+hGtODbUjzZXFgvVX6jkGh1aEw+XAXI1Q7hMoCzNpj8fWgsJu2q6ppxzUhAmdML3PJEtLZff/bD0IIBAUqPVXuk/Gf8sNVRd04rK2LXh2Fl9aCjTsJ3WeuTKVGwYeVI3+POmDVatkiHukeLEm5KYoBWJ+KQUckKkWwc0SpmE4yKPj4a3EoKzh2sNxAEAmnBqJWDSTefykAKldi6lsDDxvyYS/So7RDYw5lPjHeVubWFSrcx5zQ/l6NNHJNzX0/3IDTRTIyUWcFGQKeNjNBpOSnptqaEW7eAOp1sgtburiQfPHcBWXOvu64SxPTX5qPJ+rv8nUFdi0x8ExEcxqICSdCEyqnZc1nMIrAWmKQPqx6xa5crRtruUU/gOHexVf753e0QQ9GDgpe0y3PZOMlBWfz23ZpZdMPivEzAfNwJbPn/BXdJ/MQe18K5/gBZYDZXI9MMs0x5Jf+enGSZne9i3ZTMwP3sYBvZo0VP/h/Bw0KXfD2R04IgWythYizq6bQXSiJA8kFZ6B7MrUttFWGy11riG13HiZxH9umcNhlOxTCuUQzYwHKEKRjkbCHceENIWljOqGo8w81sypwg/ugDVx0d2K/pfklN3re9UM0ipLWABOR57yndg7CLmTqawM50YZ89h1Fj7jWGJVhVkntTwSvVyXW1bHs94wGvh3Wrq6ec1yi4jpEJaI/fsPLwDzMTZCB5MA2jeCp0BQCMzdZ49ivkmjN4InyVQTaLyGiy85dqFySkMXLsa1PEU46rEvIhQZt2ozztzMaSxHsuwU55dY2Ft4ao/41B3M67uAhI1IS/FMBENgSuyenxoJTdOnl3fwhVH5mWS24u4DXTT4fktRR1WSPk0cIZxZzI0Td37hJPYOUkvWa+ku1fA==",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 6b50f759-5cbf-4a88-0e0f-08dbc6d5a024",
        "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "07 Oct 2023 01:35:02.3482 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "fe128f2c-073b-4c20-818e-7246a585940c",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n OLMhST7H/TVWUC/8tJ3y+O2Pwi3U5AVZwFQDUU/45lGGjm+mYwRdw8CB55F7DwFiuJiAqI9cZ4PYsPopmLsOpDbfvK0vK1uY/XaDqrrh9EM=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BY3PR13MB4913",
        "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: Long Wu <long.wu@corigine.com>\n\nBonding PMD does not let member ports know the bonding port's\ninformation, like how many member ports the bonding port has,\nwhat mode the bonding port is in and so on.\n\nAdd the notification interface for bonding port to let member\nport know it is added to a bonding port and what the bonding\nport's configuration is. If so the member ports have chance to\nachieve its bond-flow-offlod or other private bonding functions.\n\nSigned-off-by: Long Wu <long.wu@corigine.com>\nReviewed-by: James Hershaw <james.hershaw@corigine.com>\nReviewed-by: Chaoyong He <chaoyong.he@corigine.com>\n---\n drivers/net/bonding/eth_bond_private.h |  2 +\n drivers/net/bonding/rte_eth_bond.h     | 46 ++++++++++++++++\n drivers/net/bonding/rte_eth_bond_api.c | 73 ++++++++++++++++++++++++++\n drivers/net/bonding/rte_eth_bond_pmd.c | 27 ++++++++--\n drivers/net/bonding/version.map        |  3 ++\n lib/ethdev/ethdev_driver.h             | 18 +++++++\n 6 files changed, 166 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/drivers/net/bonding/eth_bond_private.h b/drivers/net/bonding/eth_bond_private.h\nindex e688894210..1344f8c002 100644\n--- a/drivers/net/bonding/eth_bond_private.h\n+++ b/drivers/net/bonding/eth_bond_private.h\n@@ -186,6 +186,8 @@ struct bond_dev_private {\n \n \tvoid *vlan_filter_bmpmem;\t\t/* enabled vlan filter bitmap */\n \tstruct rte_bitmap *vlan_filter_bmp;\n+\n+\tbool notify_member; /**< Enable member notification of bonding port. */\n };\n \n extern const struct eth_dev_ops default_dev_ops;\ndiff --git a/drivers/net/bonding/rte_eth_bond.h b/drivers/net/bonding/rte_eth_bond.h\nindex f10165f2c6..737beca446 100644\n--- a/drivers/net/bonding/rte_eth_bond.h\n+++ b/drivers/net/bonding/rte_eth_bond.h\n@@ -351,6 +351,52 @@ rte_eth_bond_link_up_prop_delay_set(uint16_t bonding_port_id,\n int\n rte_eth_bond_link_up_prop_delay_get(uint16_t bonding_port_id);\n \n+/**\n+ * Set the flag of whether bonding port notifies member ports.\n+ *\n+ * @param bonding_port_id\n+ *   Port ID of bonding device.\n+ * @param notify_member\n+ *   Flag of whether bonding port notifies member ports.\n+ *\n+ * @return\n+ *   0 on success, negative value otherwise.\n+ */\n+__rte_experimental\n+int\n+rte_eth_bond_notify_member_flag_set(uint16_t bonding_port_id, bool notify_member);\n+\n+/**\n+ * Get the flag of whether bonding port notifies member ports.\n+ *\n+ * @param bonding_port_id\n+ *   Port ID of bonding device.\n+ * @param notify_member\n+ *   Flag of whether bonding port notifies member ports.\n+ *\n+ * @return\n+ *   0 on success, negative value otherwise.\n+ */\n+__rte_experimental\n+int\n+rte_eth_bond_notify_member_flag_get(uint16_t bonding_port_id, bool *notify_member);\n+\n+/**\n+ * Notify the member ports of bonding port's information.\n+ *\n+ * This interface is called in the following functions:\n+ * - bond_ethdev_lsc_event_callback()\n+ * - bond_ethdev_configure()\n+ *\n+ * @param bonding_port_id\n+ *   Port ID of bonding device.\n+ *\n+ * @return\n+ *   0 on success, negative value otherwise.\n+ */\n+__rte_experimental\n+int\n+rte_eth_bond_notify_members(uint16_t bonding_port_id);\n \n #ifdef __cplusplus\n }\ndiff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c\nindex 99e496556a..48c1d050fd 100644\n--- a/drivers/net/bonding/rte_eth_bond_api.c\n+++ b/drivers/net/bonding/rte_eth_bond_api.c\n@@ -627,6 +627,17 @@ __eth_bond_member_add_lock_free(uint16_t bonding_port_id, uint16_t member_port_i\n \n \tmember_vlan_filter_set(bonding_port_id, member_port_id);\n \n+\tif (internals->notify_member &&\n+\t\t\t*member_eth_dev->dev_ops->bond_notify_member != NULL) {\n+\t\tret = member_eth_dev->dev_ops->bond_notify_member(member_eth_dev,\n+\t\t\t\tbonding_eth_dev);\n+\t\tif (ret < 0) {\n+\t\t\tRTE_BOND_LOG(ERR, \"Add member (port %u) notify failed!\",\n+\t\t\t\t\tmember_port_id);\n+\t\t\treturn -1;\n+\t\t}\n+\t}\n+\n \treturn 0;\n \n }\n@@ -733,6 +744,10 @@ __eth_bond_member_remove_lock_free(uint16_t bonding_port_id,\n \tmember_eth_dev = &rte_eth_devices[member_port_id];\n \tmember_remove(internals, member_eth_dev);\n \tmember_eth_dev->data->dev_flags &= (~RTE_ETH_DEV_BONDING_MEMBER);\n+\tif (internals->notify_member &&\n+\t\t\t*member_eth_dev->dev_ops->bond_notify_member != NULL)\n+\t\tmember_eth_dev->dev_ops->bond_notify_member(member_eth_dev,\n+\t\t\t\tbonding_eth_dev);\n \n \t/*  first member in the active list will be the primary by default,\n \t *  otherwise use first device in list */\n@@ -1098,3 +1113,61 @@ rte_eth_bond_link_up_prop_delay_get(uint16_t bonding_port_id)\n \n \treturn internals->link_up_delay_ms;\n }\n+\n+int\n+rte_eth_bond_notify_member_flag_set(uint16_t bonding_port_id, bool notify_member)\n+{\n+\tstruct bond_dev_private *internals;\n+\n+\tif (valid_bonding_port_id(bonding_port_id) != 0)\n+\t\treturn -EINVAL;\n+\n+\tinternals = rte_eth_devices[bonding_port_id].data->dev_private;\n+\n+\tinternals->notify_member = notify_member;\n+\n+\treturn 0;\n+}\n+\n+int\n+rte_eth_bond_notify_member_flag_get(uint16_t bonding_port_id, bool *notify_member)\n+{\n+\tstruct bond_dev_private *internals;\n+\n+\tif (valid_bonding_port_id(bonding_port_id) != 0)\n+\t\treturn -EINVAL;\n+\n+\tinternals = rte_eth_devices[bonding_port_id].data->dev_private;\n+\n+\t*notify_member = internals->notify_member;\n+\n+\treturn 0;\n+}\n+\n+int\n+rte_eth_bond_notify_members(uint16_t bonding_port_id)\n+{\n+\tuint32_t i;\n+\tuint16_t member_port_id;\n+\tstruct rte_eth_dev *bond_dev;\n+\tstruct bond_dev_private *internals;\n+\tstruct rte_eth_dev *member_dev[RTE_MAX_ETHPORTS];\n+\n+\tif (valid_bonding_port_id(bonding_port_id) != 0)\n+\t\treturn -EINVAL;\n+\n+\tbond_dev = &rte_eth_devices[bonding_port_id];\n+\tinternals = bond_dev->data->dev_private;\n+\n+\tfor (i = 0; i < internals->member_count; i++) {\n+\t\tmember_port_id = internals->members[i].port_id;\n+\t\tmember_dev[i] = &rte_eth_devices[member_port_id];\n+\t\tif (*member_dev[i]->dev_ops->bond_notify_member == NULL)\n+\t\t\treturn -ENOTSUP;\n+\t}\n+\n+\tfor (i = 0; i < internals->member_count; i++)\n+\t\tmember_dev[i]->dev_ops->bond_notify_member(member_dev[i], bond_dev);\n+\n+\treturn 0;\n+}\ndiff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c\nindex 122b1187fd..b99b8b8938 100644\n--- a/drivers/net/bonding/rte_eth_bond_pmd.c\n+++ b/drivers/net/bonding/rte_eth_bond_pmd.c\n@@ -2968,11 +2968,13 @@ bond_ethdev_lsc_event_callback(uint16_t port_id, enum rte_eth_event_type type,\n \tint valid_member = 0;\n \tuint16_t active_pos, member_idx;\n \tuint16_t i;\n+\tuint16_t bonding_port_id;\n \n \tif (type != RTE_ETH_EVENT_INTR_LSC || param == NULL)\n \t\treturn rc;\n \n-\tbonding_eth_dev = &rte_eth_devices[*(uint16_t *)param];\n+\tbonding_port_id = *(uint16_t *)param;\n+\tbonding_eth_dev = &rte_eth_devices[bonding_port_id];\n \n \tif (check_for_bonding_ethdev(bonding_eth_dev))\n \t\treturn rc;\n@@ -3044,8 +3046,10 @@ bond_ethdev_lsc_event_callback(uint16_t port_id, enum rte_eth_event_type type,\n \t\t * using it.\n \t\t */\n \t\tif (internals->user_defined_primary_port &&\n-\t\t\t\tinternals->primary_port == port_id)\n+\t\t\t\tinternals->primary_port == port_id) {\n \t\t\tbond_ethdev_primary_set(internals, port_id);\n+\t\t\trte_eth_bond_notify_members(bonding_port_id);\n+\t\t}\n \t} else {\n \t\tif (active_pos == internals->active_member_count)\n \t\t\tgoto link_update;\n@@ -3064,6 +3068,7 @@ bond_ethdev_lsc_event_callback(uint16_t port_id, enum rte_eth_event_type type,\n \t\t\t\t\t\tinternals->active_members[0]);\n \t\t\telse\n \t\t\t\tinternals->current_primary_port = internals->primary_port;\n+\t\t\trte_eth_bond_notify_members(bonding_port_id);\n \t\t\tmac_address_members_update(bonding_eth_dev);\n \t\t\tbond_ethdev_promiscuous_update(bonding_eth_dev);\n \t\t\tbond_ethdev_allmulticast_update(bonding_eth_dev);\n@@ -3362,6 +3367,7 @@ dump_basic(const struct rte_eth_dev *dev, FILE *f)\n \tstruct bond_dev_private instant_priv;\n \tconst struct bond_dev_private *internals = &instant_priv;\n \tint mode, i;\n+\tbool notify_member;\n \n \t/* Obtain a instance of dev_private to prevent data from being modified. */\n \tmemcpy(&instant_priv, dev->data->dev_private, sizeof(struct bond_dev_private));\n@@ -3431,6 +3437,13 @@ dump_basic(const struct rte_eth_dev *dev, FILE *f)\n \t\tfprintf(f, \"\\tUser Defined Primary: [%u]\\n\", internals->primary_port);\n \tif (internals->member_count > 0)\n \t\tfprintf(f, \"\\tCurrent Primary: [%u]\\n\", internals->current_primary_port);\n+\n+\tif (rte_eth_bond_notify_member_flag_get(internals->port_id, &notify_member) == 0)\n+\t\tfprintf(f, \"\\tNotify Member Ports Flag: %s\\n\",\n+\t\t\tnotify_member ? \"enable\" : \"disable\");\n+\telse\n+\t\tfprintf(f, \"\\tFailed to get notify member ports flag for bonding port %d\\n\",\n+\t\t\tinternals->port_id);\n }\n \n static void\n@@ -3983,8 +3996,12 @@ bond_ethdev_configure(struct rte_eth_dev *dev)\n \t * if no kvlist, it means that this bonding device has been created\n \t * through the bonding api.\n \t */\n-\tif (!kvlist || internals->kvargs_processing_is_done)\n+\tif (!kvlist || internals->kvargs_processing_is_done) {\n+\t\tif (internals->notify_member && rte_eth_bond_notify_members(port_id) != 0)\n+\t\t\tRTE_BOND_LOG(ERR, \"Notify member ports failed\");\n+\n \t\treturn 0;\n+\t}\n \n \tinternals->kvargs_processing_is_done = true;\n \n@@ -4222,6 +4239,10 @@ bond_ethdev_configure(struct rte_eth_dev *dev)\n \t\t\treturn -1;\n \t\t}\n \t}\n+\n+\tif (internals->notify_member && rte_eth_bond_notify_members(port_id) != 0)\n+\t\tRTE_BOND_LOG(ERR, \"Notify member ports failed\");\n+\n \treturn 0;\n }\n \ndiff --git a/drivers/net/bonding/version.map b/drivers/net/bonding/version.map\nindex 09ee21c55f..3bd5e8ad11 100644\n--- a/drivers/net/bonding/version.map\n+++ b/drivers/net/bonding/version.map\n@@ -35,4 +35,7 @@ EXPERIMENTAL {\n \trte_eth_bond_member_add;\n \trte_eth_bond_member_remove;\n \trte_eth_bond_members_get;\n+\trte_eth_bond_notify_member_flag_get;\n+\trte_eth_bond_notify_member_flag_set;\n+\trte_eth_bond_notify_members;\n };\ndiff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h\nindex deb23ada18..f626f971e5 100644\n--- a/lib/ethdev/ethdev_driver.h\n+++ b/lib/ethdev/ethdev_driver.h\n@@ -1216,6 +1216,21 @@ typedef int (*eth_count_aggr_ports_t)(struct rte_eth_dev *dev);\n typedef int (*eth_map_aggr_tx_affinity_t)(struct rte_eth_dev *dev, uint16_t tx_queue_id,\n \t\t\t\t\t  uint8_t affinity);\n \n+/**\n+ * @internal\n+ * Bonding port notifies the member ports.\n+ *\n+ * @param dev\n+ *   Member port (ethdev) handle.\n+ * @param bonding_dev\n+ *   Bonding port (ethdev) handle.\n+ *\n+ * @return\n+ *   Negative on error, 0 on success.\n+ */\n+typedef int (*eth_bond_notify_member)(struct rte_eth_dev *dev,\n+\t\t\t\t      struct rte_eth_dev *bonding_dev);\n+\n /**\n  * @internal A structure containing the functions exported by an Ethernet driver.\n  */\n@@ -1455,6 +1470,9 @@ struct eth_dev_ops {\n \teth_count_aggr_ports_t count_aggr_ports;\n \t/** Map a Tx queue with an aggregated port of the DPDK port */\n \teth_map_aggr_tx_affinity_t map_aggr_tx_affinity;\n+\n+\t/** Notify the member port of bonding port information */\n+\teth_bond_notify_member bond_notify_member;\n };\n \n /**\n",
    "prefixes": [
        "v2",
        "1/8"
    ]
}