From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by dpdk.org (Postfix) with ESMTP id CF3FA1C0B for ; Tue, 22 May 2018 11:48:08 +0200 (CEST) Received: by mail-wm0-f68.google.com with SMTP id j4-v6so30208683wme.1 for ; Tue, 22 May 2018 02:48:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=R60ee53nML7nDV/aZ0zVN+INIVhuwZ6PgZ+gYWK/l2c=; b=jAlbPFAfi2W/9zmV+JkUFe4IM16rNVTM1bA3gg/iGL8SmwFYoJAU8TJcEHo9ZLAoab llSA6A+6vzo/xfubKJpHw3ZT9hLzekC+dV4LBZGE6nOHqAe/+4IAnlFF/ixnTo8HCiV8 WhTDzQqK2sCvb0qWbULg5oy01Ivx150y9WALK/SYQwmCZnEUGANgzolpIFjRaqPowsAd tBT8lj962/XLUr1Mp51wTniXLYlMFICInF3uPrhCT9ROeZUAU026YZEVKddlwFW0z7AM TJhM04AGA83UHGiK4qEiff/nB9LSkSa0/p7NNXUz8WsFF3xZWEkUrDIh9DqXDVjS82xl Uiag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=R60ee53nML7nDV/aZ0zVN+INIVhuwZ6PgZ+gYWK/l2c=; b=WC4sD8A9dzcyDx4XMEuXIIamOERF6VfSUtM3T7+nFxi/GHEJRg60RsT38KtkEDf1i5 YT0Bn03Lf53OLUKI7Dfmuw/eONFFpsoKw4gKmSEvRszWs+WUf4Hh9sU0w/+APdjC7Edk 30z11asI8D4+bhsNlEN78/tTD73bBob2+7YLK4EYq/ZLlqVT8z35UteJP8TBlogQJPOn Qgu/ryvt8H6WHbuT/ZiPfAxSSdLtPwFtUHqOA1HmJYiVeXMMwaeClm/RnATsu7dY/mVL Ars5jRbLmuBS49IWmYlK5W0PlUzlEF2Gu18wjz7lUwmzOALK2g0gkAVItjqoiXNGLasm cWVw== X-Gm-Message-State: ALKqPwcBIukmh/Ue4dbQGe/QaXDrje5mBsm6bLiBNkx12fXQf4jEI2+c O3EFWStwyhuqGWvDEijBA3rIOg== X-Google-Smtp-Source: AB8JxZoHQWlREH5xNdgpC2+NUwc/I5mWXhQvF8LM/fQPSBCvvaAkc4NLyjIBBr1Zo/4L6Zmm2SIApg== X-Received: by 2002:a1c:37c2:: with SMTP id e185-v6mr624469wma.20.1526982488428; Tue, 22 May 2018 02:48:08 -0700 (PDT) Received: from [10.16.0.207] (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.googlemail.com with ESMTPSA id 141-v6sm25409544wmf.35.2018.05.22.02.48.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 May 2018 02:48:07 -0700 (PDT) To: "Zhang, Qi Z" , Zijie Pan , "dev@dpdk.org" Cc: "Xing, Beilei" References: <1526638447-31246-1-git-send-email-zijie.pan@6wind.com> <039ED4275CED7440929022BC67E70611531B55D5@SHSMSX103.ccr.corp.intel.com> From: Laurent Hardy Message-ID: Date: Tue, 22 May 2018 11:47:53 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <039ED4275CED7440929022BC67E70611531B55D5@SHSMSX103.ccr.corp.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Subject: Re: [dpdk-dev] [PATCH] net/i40e: add a specific API to control the LLDP agent X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 May 2018 09:48:09 -0000 Hi Qi, On 05/21/2018 03:11 PM, Zhang, Qi Z wrote: > Hi Zijie: > >> -----Original Message----- >> From: Zijie Pan [mailto:zijie.pan@6wind.com] >> Sent: Friday, May 18, 2018 6:14 PM >> To: dev@dpdk.org >> Cc: Xing, Beilei ; Zhang, Qi Z ; >> Laurent Hardy >> Subject: [PATCH] net/i40e: add a specific API to control the LLDP agent >> >> Add a new API rte_pmd_i40e_set_lldp_cmd to control LLDP agent for i40e. >> It supports the following i40e debug lldp commands: > I'm not very sure if it is necessary to expose more APIs just for debug? > As you know we have the patch Fixes: 4861cde46116 ("i40e: new poll mode driver") for the knowing issue. > Now, if new firmware fix this, we properly can add LLDP disable back with properly firmware check branch (of cause with enough test first) There is actually a real need (from customers) to have some control on the LLDP agent. In kernel driver, this feature exists as it is currently possible to control the LLDP agent through a sysfs entry (/sys/kernel/debug/i40e/[INTERFACE]/cmd). The purpose of this debug API is to provide same level of support via dpdk. best regards, Laurent > Regards > Qi > > >> - start/stop of the LLDP agent. >> - get local/remote of the LLDP MIB (Management Information Base). >> >> Signed-off-by: Laurent Hardy >> Signed-off-by: Zijie Pan >> --- >> drivers/net/i40e/i40e_ethdev.h | 19 +++++++++ >> drivers/net/i40e/rte_pmd_i40e.c | 64 >> +++++++++++++++++++++++++++++ >> drivers/net/i40e/rte_pmd_i40e.h | 22 ++++++++++ >> drivers/net/i40e/rte_pmd_i40e_version.map | 8 +++- >> 4 files changed, 112 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h >> index 55c8875..459b3ff 100644 >> --- a/drivers/net/i40e/i40e_ethdev.h >> +++ b/drivers/net/i40e/i40e_ethdev.h >> @@ -267,6 +267,25 @@ enum i40e_flxpld_layer_idx { struct i40e_adapter; >> >> /** >> + * LLDP command type >> + */ >> +enum i40_lldp_cmd_type { >> + I40E_LLDP_CMD_START = 0, >> + I40E_LLDP_CMD_STOP, >> + I40E_LLDP_CMD_GET_LOCAL, >> + I40E_LLDP_CMD_GET_REMOTE, >> + I40E_LLDP_CMD_UNKNOWN, >> +}; >> + >> +/** >> + * LLDP command structure >> + */ >> +struct i40e_lldp_cmd { >> + const char *name; >> + enum i40_lldp_cmd_type cmd; >> +}; >> + >> +/** >> * MAC filter structure >> */ >> struct i40e_mac_filter_info { >> diff --git a/drivers/net/i40e/rte_pmd_i40e.c >> b/drivers/net/i40e/rte_pmd_i40e.c index 7aa1a75..307c597 100644 >> --- a/drivers/net/i40e/rte_pmd_i40e.c >> +++ b/drivers/net/i40e/rte_pmd_i40e.c >> @@ -12,6 +12,14 @@ >> #include "i40e_rxtx.h" >> #include "rte_pmd_i40e.h" >> >> +static const struct i40e_lldp_cmd lldp_cmds_table[] = { >> + {"start", I40E_LLDP_CMD_START}, >> + {"stop", I40E_LLDP_CMD_STOP}, >> + {"get local", I40E_LLDP_CMD_GET_LOCAL}, >> + {"get remote", I40E_LLDP_CMD_GET_REMOTE}, >> + {"", I40E_LLDP_CMD_UNKNOWN}, >> +}; >> + >> int >> rte_pmd_i40e_ping_vfs(uint16_t port, uint16_t vf) { @@ -3192,3 +3200,59 >> @@ int rte_pmd_i40e_flow_add_del_packet_template( >> I40E_WRITE_FLUSH(hw); >> return 0; >> } >> + >> +int __rte_experimental >> +rte_pmd_i40e_set_lldp_cmd(uint16_t port, const char *cmd, void >> +*lldpmib) { >> + struct rte_eth_dev *dev; >> + struct i40e_hw *hw; >> + uint8_t br_type; >> + int i, ret; >> + >> + RTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV); >> + >> + dev = &rte_eth_devices[port]; >> + >> + if (!is_i40e_supported(dev)) >> + return -ENOTSUP; >> + >> + hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); >> + >> + for (i = 0; i < I40E_LLDP_CMD_UNKNOWN; i++) { >> + if (!strcmp(cmd, lldp_cmds_table[i].name)) >> + break; >> + } >> + >> + if (lldp_cmds_table[i].cmd == I40E_LLDP_CMD_UNKNOWN) { >> + PMD_DRV_LOG(ERR, "Unknown LLDP command\n"); >> + return -EINVAL; >> + } >> + >> + switch (lldp_cmds_table[i].cmd) { >> + case I40E_LLDP_CMD_START: >> + ret = i40e_aq_start_lldp(hw, NULL); >> + break; >> + case I40E_LLDP_CMD_STOP: >> + ret = i40e_aq_stop_lldp(hw, true, NULL); >> + break; >> + case I40E_LLDP_CMD_GET_LOCAL: >> + ret = i40e_aq_get_lldp_mib(hw, 0, >> + I40E_AQ_LLDP_MIB_LOCAL, >> + lldpmib, I40E_LLDPDU_SIZE, >> + NULL, NULL, NULL); >> + break; >> + case I40E_LLDP_CMD_GET_REMOTE: >> + br_type = I40E_AQ_LLDP_BRIDGE_TYPE_NEAREST_BRIDGE; >> + ret = i40e_aq_get_lldp_mib(hw, br_type, >> + I40E_AQ_LLDP_MIB_REMOTE, >> + lldpmib, I40E_LLDPDU_SIZE, >> + NULL, NULL, NULL); >> + break; >> + default: >> + PMD_DRV_LOG(ERR, "Unknown LLDP command\n"); >> + ret = -EINVAL; >> + break; >> + } >> + >> + return ret; >> +} >> diff --git a/drivers/net/i40e/rte_pmd_i40e.h >> b/drivers/net/i40e/rte_pmd_i40e.h index be4a602..59b2eee 100644 >> --- a/drivers/net/i40e/rte_pmd_i40e.h >> +++ b/drivers/net/i40e/rte_pmd_i40e.h >> @@ -1061,4 +1061,26 @@ int rte_pmd_i40e_inset_set(uint16_t port, uint8_t >> pctype, >> return 0; >> } >> >> +/** >> + * @warning >> + * @b EXPERIMENTAL: this API may change without prior notice. >> + * >> + * Process the LLDP commands, including "lldp start", "lldp stop", >> + * "lldp get local" and "lldp get remote". >> + * >> + * @param port >> + * The port identifier of the Ethernet device. >> + * @param cmd >> + * The LLDP command. >> + * @param lldpmib >> + * The pointer to return the LLDP MIB. >> + * @return >> + * - (0) if successful. >> + * - (-ENODEV) if *port* invalid. >> + * - (-EINVAL) if *cmd* invalid. >> + * - (-ENOTSUP) not supported by firmware. >> + */ >> +int __rte_experimental >> +rte_pmd_i40e_set_lldp_cmd(uint16_t port, const char *cmd, void >> +*lldpmib); >> + >> #endif /* _PMD_I40E_H_ */ >> diff --git a/drivers/net/i40e/rte_pmd_i40e_version.map >> b/drivers/net/i40e/rte_pmd_i40e_version.map >> index cccd576..1ffa02a 100644 >> --- a/drivers/net/i40e/rte_pmd_i40e_version.map >> +++ b/drivers/net/i40e/rte_pmd_i40e_version.map >> @@ -64,4 +64,10 @@ DPDK_18.02 { >> >> rte_pmd_i40e_inset_get; >> rte_pmd_i40e_inset_set; >> -} DPDK_17.11; >> \ No newline at end of file >> +} DPDK_17.11; >> + >> +EXPERIMENTAL { >> + global: >> + >> + rte_pmd_i40e_set_lldp_cmd; >> +}; >> -- >> 1.7.10.4