From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7BBD1A0C46; Thu, 23 Sep 2021 05:20:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1A4FD410D7; Thu, 23 Sep 2021 05:20:47 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 88D0640E64 for ; Thu, 23 Sep 2021 05:20:44 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10115"; a="203251823" X-IronPort-AV: E=Sophos;i="5.85,315,1624345200"; d="scan'208";a="203251823" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Sep 2021 20:20:29 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,315,1624345200"; d="scan'208";a="550601777" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by FMSMGA003.fm.intel.com with ESMTP; 22 Sep 2021 20:20:29 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Wed, 22 Sep 2021 20:20:29 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12 via Frontend Transport; Wed, 22 Sep 2021 20:20:29 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.57.42) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.12; Wed, 22 Sep 2021 20:20:28 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=G7Pun4pGw7HxFEGW4T6FZ/WtnN3mVOc+/8k85Pf9Fj1/8CUBF9oPDWWnB0YSH9wB0sva9ZXw04QbLvttpwNKEi+lE36CUPs0YbwPlbYlICZs2fIAgniB/Via29HjjubGS9HCJDT5D2j1vnAForEK8fQiTPQ5J0ZRqnDsATsvFC+61mfzJAYJvADl9pcBgCE/dKhiylNPxR4qRM+IG7wxOtwrw2YB2u/WP0IknO1TRNL7GtE/uJvWCr3MR9658fSUCHUOQsxTW+7Ik2SwGZ2YcjFGvAEOP/YRSgKV6oPMpX55GiSlDGjvG19S/VJpMp3+0+F1PTSGQLs69FwP1nGQEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=y8f014rlOmwhSKQP4Cn6XtMxmNXY4QlMxZrHmqjowgY=; b=X8/yQxh7XUI0CooS8sZHi7Arpgh84Wt+Ls4mRtwvoLh3jLdIy/exGoyef2vpJ6PJPr4hWrilMhuTW6vVECeZx6coG5dHPnfjM/+whN7UWK0di+pRYRivp3LJhsNOnsCaRdRn0q+QR/mb8Mgt5bDs8tUsjVEyk7UX0VK1jE1XpPbaIBQM15TIe/MELhvJGfu5Ijv0kwesUIrcAqNk9QScNf7rAP+g0O9UK241rde90sNpkTwIsBlSmrmVM05E4oMhMu9Jap+Ea5QfJtOkmblkBYI7iPlbLhYbrBET7VgMpbd07JxovCVgV3lMV6gWKHieG7TL1KlNuLFgO4xjXWwv6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=y8f014rlOmwhSKQP4Cn6XtMxmNXY4QlMxZrHmqjowgY=; b=rVKtAa5N078Y95fX41+pkc7GCo9/kwKJpxakc4wQuXT8szCuDkds0jR/ZQ4wK4LaR1Gi/ioEdwKGhvjGi10+VUIRyQ75u39RZ2XSKs7yomwkbUi+/Nq99jr1D7JpEjw7jPac/LWBf8xuEHsekf4RZ7zw+kANBmTm+bNyQ6gI1Zw= Received: from DM4PR11MB5534.namprd11.prod.outlook.com (2603:10b6:5:391::22) by DM6PR11MB3578.namprd11.prod.outlook.com (2603:10b6:5:143::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.16; Thu, 23 Sep 2021 03:20:27 +0000 Received: from DM4PR11MB5534.namprd11.prod.outlook.com ([fe80::3d9b:76d7:e274:bad3]) by DM4PR11MB5534.namprd11.prod.outlook.com ([fe80::3d9b:76d7:e274:bad3%3]) with mapi id 15.20.4544.015; Thu, 23 Sep 2021 03:20:27 +0000 From: "Li, Xiaoyun" To: "Min Hu (Connor)" , "dev@dpdk.org" CC: "Yigit, Ferruh" , "thomas@monjalon.net" Thread-Topic: [dpdk-dev] [PATCH] app/testpmd: add cmdline to show LACP bonding info Thread-Index: AQHXr3rS3UHl1TkDi0SM4AZ8moXo+6uvwf0Q Date: Thu, 23 Sep 2021 03:20:26 +0000 Message-ID: References: <20210922062443.34088-1-humin29@huawei.com> In-Reply-To: <20210922062443.34088-1-humin29@huawei.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: huawei.com; dkim=none (message not signed) header.d=none;huawei.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: aac77aca-c3c9-454b-c11a-08d97e41173e x-ms-traffictypediagnostic: DM6PR11MB3578: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:230; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: tmbE0K8hl1aCkkdkTKWExm+6uJn13gQArznjxtqmqiCZZhNyRSaMSEyKtifhcegv5PXG1vFKaqEhNVMthd599qTzkyGJAhRKEN73TTx8EmwhsBvpzcmJYsG9lWn7rz3MeO9d9A/e+QjifdAw21AyJKbPkRgKTZLpJ+OeyiD29D75C1dNrMAQ2zMOB2F9mQrsMj/AeHhNoUpV1Jn7tkvndWoujqzaKuWaaGComPwz57OxOQ2YCfzXJOyfigtrmHLCCUXdFPTDp4Ij+3UM+b+YPvESrCWq8FANrdoWO9poZAJ6DA8kHChCq2k+LvnEQvXMAoBniB7Cu2VFipAUAJnOmDIBYo+OxDhx633QlER67NP0tnUBbu+4HXtfPG8iU0t2Fcz/15MGkvnAnpkF2zrmJJj4+YzPifV2bAyClYF7CoAA+MdFQpfXnavJdgd9l3C1T1G1N/AtfD/RIQZRND3HUu7H279WjMkml7BV5xBYWwVk9azZb0oHddgrqdCLxCyjS30vNBJdDeoP4SmvhZU6/eABakjlDSM4d7ancaO2HJU0URNA+Tg7Mgbd5U1M+r6XMgEqoQkuKRBAy6oTBLFPhJ5DjUgkG3+aaZfXuBC6FSuCLqiSpy1IqdI2MYdFJYNyj2vPp+Eqz5H4Wu6hiak+eUdm7BRnbDhLKKCQzdJYI9fAh5ptFvYI384hLyMMJl/cCuhQbaL9SLlDN2Q2ilHEmw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR11MB5534.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(38100700002)(5660300002)(8936002)(186003)(55016002)(54906003)(7696005)(52536014)(76116006)(8676002)(83380400001)(4326008)(9686003)(66476007)(71200400001)(2906002)(26005)(86362001)(316002)(33656002)(38070700005)(110136005)(6506007)(66556008)(45080400002)(508600001)(64756008)(53546011)(66446008)(66946007)(122000001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?eruiwEnBbeEAwL13+bvrSkIp+3c5ES8ZPt/F7+o0mTbpwcyDxyFSuIxaxLot?= =?us-ascii?Q?ucNiDRGLQxMXEwIic51IAoz+LS2LMRkYFCawNET9Ezf4dFZ9Oug16lMwijQq?= =?us-ascii?Q?LsTxqQpArFzn/kV94ShurC9ApNB8Ruxuk59yAJeh3N37ORYA37BeWQP4oGMb?= =?us-ascii?Q?WxHLTAtRKy6VlPrkIacunBdewMV8IyVg532dyqd/SwEwu3hQ+g6RGNYaKixa?= =?us-ascii?Q?MmtxtmYMi+xWnKooQ8kbphcrR+AwAQdak9586LAzZM7LSg4z0zncV5yO+INA?= =?us-ascii?Q?7rlS6d4QNcnD9YnLCYVmhObz4DSzBZbgwT/JHSymTu/3nYLaZFYyLx+FoUHL?= =?us-ascii?Q?2Slq5x9inQ3sQ8r0Zq7Vf4XlRQxnwjLHQ9G8xtxjUGDaYSa/j+zVUjMbFpSF?= =?us-ascii?Q?gRexjm+HhhoP/Y/M83hp8qEUt/ogAQUynCuzZDoZ5gWg15kJ6hEBCvNgHuvg?= =?us-ascii?Q?yNuupZg8cehOq5VDAqwNfxOixEteU/9N0u9NpbN0gfdH2XVztfHOUmmepiww?= =?us-ascii?Q?RB+PuEnckF3YriF+Bd+T298V8y12UGKrUpYz/4BvYoU+uFex6+D7b1MctDEI?= =?us-ascii?Q?nay+TctxE36wTGVgsqNQTQnTyIjmJKME8emO70uojkWfn9WI/v1CLN1cVaMI?= =?us-ascii?Q?E8AcL5iUgLDzd/b9R8irq1HdI4hK6PX7ZVJFcQR1JDX7by0zUqy+MeSa3Ts/?= =?us-ascii?Q?OzbAsAsKUxHcmPzts63b6XT5UKgKAerKrbDuGfNz9IGnJPxn5n0RlpStaRIb?= =?us-ascii?Q?6a6XeL/nIleYS0xa7zJ2x2vrTX/rMi88P4FMQknHQBiPUouDd3OdG9Vdbqf8?= =?us-ascii?Q?0AEnEADrIKaCRnDHCDtD8H6RzFldf/6Dq2gfCqym6176eGRRiJeu2yL17cXK?= =?us-ascii?Q?HOTBPo4zxuXKQoYtQCoXmGHb2fF7xW/qiveyncyIbnXVb1IJAi+X24ufl561?= =?us-ascii?Q?hXKroBEisvWhgRcFrfyIoRp0D8kUqot8tEgT8Icz6E+pz3ZGeSDsf1AyE2lY?= =?us-ascii?Q?2DGXVe4VSp0AY+mKBC45pTI+7kWi6ORZEpiUF2nLOCnGnjR+cqxszO/wO9lp?= =?us-ascii?Q?N91Wa9cOQa+2VnE43Wb3UOwbEEuZ1dFloX2cq1A1Pxaz8g8DcCWgbk+KVSIC?= =?us-ascii?Q?pz3keCrgvB7Xc0fMdxOQc8Xj2R4QV0dT724irxc7gB2N7kvizYGM8tz3y22E?= =?us-ascii?Q?VI691x2fxKllrdxEor946fT+W9ik/j+oYuRpb84aj9Rg2TBN3nW7bcAV1ZDI?= =?us-ascii?Q?fZgWAWGhyHkgDj6dpTdahCwrdRTqj7nhppSDxySelj+h9Ve3ySQfFiHmVyEc?= =?us-ascii?Q?3M/d28bmjHiTFShD/gFn36q4?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5534.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: aac77aca-c3c9-454b-c11a-08d97e41173e X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Sep 2021 03:20:27.6503 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: kd85yhuW4jbfQqsUCARDWASXhq6igYp/jU/C4swVMSRrzYr0g5NCXd1kHqJn8OBaG5V0U54734wJ0FdCefLFTA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB3578 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH] app/testpmd: add cmdline to show LACP bonding info X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi > -----Original Message----- > From: dev On Behalf Of Min Hu (Connor) > Sent: Wednesday, September 22, 2021 14:25 > To: dev@dpdk.org > Cc: Yigit, Ferruh ; thomas@monjalon.net > Subject: [dpdk-dev] [PATCH] app/testpmd: add cmdline to show LACP bonding > info >=20 > From: Chengchang Tang >=20 > Add a new cmdline to help diagnostic the bonding mode 4 in testpmd. >=20 > Show the lacp information about the bonded device and its slaves: > show bonding lacp info >=20 > Signed-off-by: Chengchang Tang > Signed-off-by: Min Hu(Connor) > --- > app/test-pmd/cmdline.c | 175 ++++++++++++++++++++ > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 6 + > 2 files changed, 181 insertions(+) >=20 > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index > a9efd027c3..c596690eed 100644 > --- a/app/test-pmd/cmdline.c > +++ b/app/test-pmd/cmdline.c > @@ -631,6 +631,9 @@ static void cmd_help_long_parsed(void *parsed_result, > "show bonding config (port_id)\n" > " Show the bonding config for port_id.\n\n" >=20 > + "show bonding lacp info (port_id)\n" > + " Show the bonding lacp information for > port_id.\n\n" > + > "set bonding mac_addr (port_id) (address)\n" > " Set the MAC address of a bonded device.\n\n" >=20 > @@ -6107,6 +6110,177 @@ cmdline_parse_inst_t > cmd_set_balance_xmit_policy =3D { > } > }; >=20 > +/* *** SHOW IEEE802.3 BONDING INFORMATION *** */ struct > +cmd_show_bonding_lacp_info_result { > + cmdline_fixed_string_t show; > + cmdline_fixed_string_t bonding; > + cmdline_fixed_string_t lacp; > + cmdline_fixed_string_t info; > + portid_t port_id; > +}; > + > +static void port_param_show(struct port_params *params) { > + char buf[RTE_ETHER_ADDR_FMT_SIZE]; > + > + printf("\t\tsystem priority: %u\n", params->system_priority); > + rte_ether_format_addr(buf, RTE_ETHER_ADDR_FMT_SIZE, ¶ms- > >system); > + printf("\t\tsystem mac address: %s\n", buf); > + printf("\t\tport key: %u\n", params->key); > + printf("\t\tport priority: %u\n", params->port_priority); > + printf("\t\tport number: %u\n", params->port_number); } > + > +static void lacp_slave_info_show(struct rte_eth_bond_8023ad_slave_info > +*info) { > + char a_state[256] =3D { 0 }; > + char p_state[256] =3D { 0 }; > + int a_len =3D 0; > + int p_len =3D 0; > + uint32_t i; > + > + static const char * const state[] =3D { > + "ACT", "TIMEOUT", "AGG", "SYNC", "COL", "DIST", "DEF", "EXP" > + }; > + static const char * const selection[] =3D { > + "UNSELECTED", "STANDBY", "SELECTED" > + }; > + > + for (i =3D 0; i < RTE_DIM(state); i++) { > + if ((info->actor_state >> i) & 1) { > + a_len +=3D snprintf(&a_state[a_len], > + RTE_DIM(a_state) - a_len, "%s > ", > + state[i]); > + } You can remove {} since it's only one sentence. > + > + if ((info->partner_state >> i) & 1) { > + p_len +=3D snprintf(&p_state[p_len], > + RTE_DIM(p_state) - p_len, "%s > ", > + state[i]); > + } Same as above > + } Also, I understand you want to make it more generic. But it looks not strai= ghtforward and hard to read. (People who first touch bonding may not unders= tand which state you're referring to) What about abstracting a function state_to_str(state): state_to_str(state){ switch(state) case STATE_LACP_ACTIVE: return "active"; case ... } This is just a suggestion. And it only works with one state not several sta= tes co-exist. But I'm sure you can do similar things. My point is only show= ing "STATE_LACP_ACTIVE" will be better. I'm not familiar with bonding, will it only have one state? If not, your pr= int will look like "ACTTIMEOUTAGG"? > + printf("\tAggregator port id: %u\n", info->agg_port_id); > + printf("\tselection: %s\n", selection[info->selected]); > + printf("\tActor detail info:\n"); > + port_param_show(&info->actor); > + printf("\t\tport state: %s\n", a_state); > + printf("\tPartner detail info:\n"); > + port_param_show(&info->partner); > + printf("\t\tport state: %s\n", p_state); > + printf("\n"); > +} > + > +static void lacp_conf_show(struct rte_eth_bond_8023ad_conf *conf) { > + printf("\tfast period: %u ms\n", conf->fast_periodic_ms); > + printf("\tslow period: %u ms\n", conf->slow_periodic_ms); > + printf("\tshort timeout: %u ms\n", conf->short_timeout_ms); > + printf("\tlong timeout: %u ms\n", conf->long_timeout_ms); > + printf("\taggregate wait timeout: %u ms\n", > + conf->aggregate_wait_timeout_ms); > + printf("\ttx period: %u ms\n", conf->tx_period_ms); > + printf("\trx marker period: %u ms\n", conf->rx_marker_period_ms); > + printf("\tupdate timeout: %u ms\n", conf->update_timeout_ms); > + switch (conf->agg_selection) { > + case AGG_BANDWIDTH: > + printf("\taggregation mode: bandwidth\n"); > + break; > + case AGG_STABLE: > + printf("\taggregation mode: stable\n"); > + break; > + case AGG_COUNT: > + printf("\taggregation mode: count\n"); > + break; > + default: > + printf("\taggregation mode: invalid\n"); > + break; > + } > + > + printf("\n"); > +} > + > +static void cmd_show_bonding_lacp_info_parsed(void *parsed_result, > + __rte_unused struct cmdline *cl, > + __rte_unused void *data) > +{ > + struct cmd_show_bonding_lacp_info_result *res =3D parsed_result; > + struct rte_eth_bond_8023ad_slave_info slave_info; > + struct rte_eth_bond_8023ad_conf port_conf; > + portid_t slaves[RTE_MAX_ETHPORTS]; > + portid_t port_id =3D res->port_id; > + int num_active_slaves; > + int bonding_mode; > + int i; > + int ret; > + > + bonding_mode =3D rte_eth_bond_mode_get(port_id); > + if (bonding_mode !=3D BONDING_MODE_8023AD) { Please follow the format to use fprintf(stderr, "err message") for all err = messages print. You can refer to other print in cmdline.c > + printf("\tBonding mode is not mode 4\n"); > + return; > + } > + > + num_active_slaves =3D rte_eth_bond_active_slaves_get(port_id, slaves, > + RTE_MAX_ETHPORTS); > + if (num_active_slaves < 0) { > + printf("\tFailed to get active slave list for port =3D %u\n", > + port_id); Same as above. > + return; > + } > + if (num_active_slaves =3D=3D 0) > + printf("\tIEEE802.3 port %u has no active slave\n", port_id); Same as above. > + > + printf("\tIEEE802.3 port: %u\n", port_id); > + ret =3D rte_eth_bond_8023ad_conf_get(port_id, &port_conf); > + if (ret) { > + printf("\tGet bonded device %u info failed\n", port_id); Same as above. > + return; > + } > + lacp_conf_show(&port_conf); > + > + for (i =3D 0; i < num_active_slaves; i++) { > + ret =3D rte_eth_bond_8023ad_slave_info(port_id, slaves[i], > + &slave_info); > + if (ret) { > + printf("\tGet slave device %u info failed\n", > + slaves[i]); Same as above. > + return; > + } > + printf("\tSlave Port: %u\n", slaves[i]); > + lacp_slave_info_show(&slave_info); > + } > +} > + > +cmdline_parse_token_string_t cmd_show_bonding_lacp_info_show =3D > +TOKEN_STRING_INITIALIZER(struct cmd_show_bonding_lacp_info_result, > + show, "show"); > +cmdline_parse_token_string_t cmd_show_bonding_lacp_info_bonding =3D > +TOKEN_STRING_INITIALIZER(struct cmd_show_bonding_lacp_info_result, > + bonding, "bonding"); > +cmdline_parse_token_string_t cmd_show_bonding_lacp_info_lacp =3D > +TOKEN_STRING_INITIALIZER(struct cmd_show_bonding_lacp_info_result, > + bonding, "lacp"); > +cmdline_parse_token_string_t cmd_show_bonding_lacp_info_info =3D > +TOKEN_STRING_INITIALIZER(struct cmd_show_bonding_lacp_info_result, > + info, "info"); > +cmdline_parse_token_num_t cmd_show_bonding_lacp_info_port_id =3D > +TOKEN_NUM_INITIALIZER(struct cmd_show_bonding_lacp_info_result, > + port_id, RTE_UINT16); > + > +cmdline_parse_inst_t cmd_show_bonding_lacp_info =3D { > + .f =3D cmd_show_bonding_lacp_info_parsed, > + .help_str =3D "show bonding lacp info : " > + "Show bonding IEEE802.3 information for port_id", > + .data =3D NULL, > + .tokens =3D { > + (void *)&cmd_show_bonding_lacp_info_show, > + (void *)&cmd_show_bonding_lacp_info_bonding, > + (void *)&cmd_show_bonding_lacp_info_lacp, > + (void *)&cmd_show_bonding_lacp_info_info, > + (void *)&cmd_show_bonding_lacp_info_port_id, > + NULL > + } > +}; > + > /* *** SHOW NIC BONDING CONFIGURATION *** */ struct > cmd_show_bonding_config_result { > cmdline_fixed_string_t show; > @@ -17589,6 +17763,7 @@ cmdline_parse_ctx_t main_ctx[] =3D { #ifdef > RTE_NET_BOND > (cmdline_parse_inst_t *) &cmd_set_bonding_mode, > (cmdline_parse_inst_t *) &cmd_show_bonding_config, > + (cmdline_parse_inst_t *) &cmd_show_bonding_lacp_info, > (cmdline_parse_inst_t *) &cmd_set_bonding_primary, > (cmdline_parse_inst_t *) &cmd_add_bonding_slave, > (cmdline_parse_inst_t *) &cmd_remove_bonding_slave, diff --git > a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > index 4f8751be1c..8e64f09c11 100644 > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > @@ -2630,6 +2630,12 @@ in balance mode with a transmission policy of laye= r > 2+3:: > Active Slaves (3): [1 3 4] > Primary: [3] >=20 > +show bonding lacp info > +~~~~~~~~~~~~~~~~~~~~~~ > + > +Show information about the Link Bonding device in mode 4 (link-aggregati= on- > 802.3ad):: > + > + testpmd> show bonding lacp info (port_id) >=20 > Register Functions > ------------------ > -- > 2.33.0