From patchwork Fri Dec 16 14:39:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ferruh Yigit X-Patchwork-Id: 18069 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 1438EFA55; Fri, 16 Dec 2016 15:42:14 +0100 (CET) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 7724AFA61 for ; Fri, 16 Dec 2016 15:42:12 +0100 (CET) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP; 16 Dec 2016 06:42:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,358,1477983600"; d="scan'208";a="43277939" Received: from sivswdev02.ir.intel.com ([10.237.217.46]) by fmsmga005.fm.intel.com with ESMTP; 16 Dec 2016 06:42:10 -0800 From: Ferruh Yigit To: dev@dpdk.org Cc: Jingjing Wu ; Helin Zhang , Wenzhuo Lu , Chen Jing D , Bernard Iremonger Date: Fri, 16 Dec 2016 14:39:08 +0000 Message-Id: <20161216143919.4909-19-ferruh.yigit@intel.com> X-Mailer: git-send-email 2.8.4 In-Reply-To: <20161216143919.4909-1-ferruh.yigit@intel.com> References: <1481835919-36488-1-git-send-email-qi.z.zhang@intel.com> <20161216143919.4909-1-ferruh.yigit@intel.com> Subject: [dpdk-dev] [PATCH v4 18/29] app/testpmd: use VFD APIs on i40e 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Wenzhuo Lu The new VF Daemon (VFD) APIs is implemented on i40e. Change testpmd code to use them, including VF MAC anti-spoofing, VF VLAN anti-spoofing, TX loopback, VF VLAN strip, VF VLAN insert. Signed-off-by: Wenzhuo Lu Signed-off-by: Chen Jing D(Mark) Signed-off-by: Bernard Iremonger --- app/test-pmd/Makefile | 2 + app/test-pmd/cmdline.c | 125 ++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 100 insertions(+), 27 deletions(-) diff --git a/app/test-pmd/Makefile b/app/test-pmd/Makefile index 891b85a..a0c3366 100644 --- a/app/test-pmd/Makefile +++ b/app/test-pmd/Makefile @@ -58,7 +58,9 @@ SRCS-y += csumonly.c SRCS-y += icmpecho.c SRCS-$(CONFIG_RTE_LIBRTE_IEEE1588) += ieee1588fwd.c +_LDLIBS-y += --whole-archive _LDLIBS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) += -lrte_pmd_ixgbe +_LDLIBS-$(CONFIG_RTE_LIBRTE_I40E_PMD) += -lrte_pmd_i40e CFLAGS_cmdline.o := -D_GNU_SOURCE diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index ed84d7a..5d2cdc7 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -262,7 +262,6 @@ static void cmd_help_long_parsed(void *parsed_result, "set portlist (x[,y]*)\n" " Set the list of forwarding ports.\n\n" -#ifdef RTE_LIBRTE_IXGBE_PMD "set tx loopback (port_id) (on|off)\n" " Enable or disable tx loopback.\n\n" @@ -274,7 +273,6 @@ static void cmd_help_long_parsed(void *parsed_result, "set vf mac antispoof (port_id) (vf_id) (on|off).\n" " Set MAC antispoof for a VF from the PF.\n\n" -#endif "vlan set strip (on|off) (port_id)\n" " Set the VLAN strip on a port.\n\n" @@ -282,7 +280,6 @@ static void cmd_help_long_parsed(void *parsed_result, "vlan set stripq (on|off) (port_id,queue_id)\n" " Set the VLAN strip for a queue on a port.\n\n" -#ifdef RTE_LIBRTE_IXGBE_PMD "set vf vlan stripq (port_id) (vf_id) (on|off)\n" " Set the VLAN strip for all queues in a pool for a VF from the PF.\n\n" @@ -291,7 +288,6 @@ static void cmd_help_long_parsed(void *parsed_result, "set vf vlan antispoof (port_id) (vf_id) (on|off)\n" " Set VLAN antispoof for a VF from the PF.\n\n" -#endif "vlan set filter (on|off) (port_id)\n" " Set the VLAN filter on a port.\n\n" @@ -386,10 +382,8 @@ static void cmd_help_long_parsed(void *parsed_result, "mac_addr add port (port_id) vf (vf_id) (mac_address)\n" " Add a MAC address for a VF on the port.\n\n" -#ifdef RTE_LIBRTE_IXGBE_PMD "set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)\n" " Set the MAC address for a VF from the PF.\n\n" -#endif "set port (port_id) uta (mac_address|all) (on|off)\n" " Add/Remove a or all unicast hash filter(s)" @@ -6614,7 +6608,6 @@ cmdline_parse_inst_t cmd_set_vf_macvlan_filter = { }, }; -#ifdef RTE_LIBRTE_IXGBE_PMD /* *** CONFIGURE VF TRAFFIC CONTROL *** */ struct cmd_set_vf_traffic { cmdline_fixed_string_t set; @@ -6675,9 +6668,7 @@ cmdline_parse_inst_t cmd_set_vf_traffic = { NULL, }, }; -#endif -#ifdef RTE_LIBRTE_IXGBE_PMD /* *** CONFIGURE VF RECEIVE MODE *** */ struct cmd_set_vf_rxmode { cmdline_fixed_string_t set; @@ -6759,7 +6750,6 @@ cmdline_parse_inst_t cmd_set_vf_rxmode = { NULL, }, }; -#endif /* *** ADD MAC ADDRESS FILTER FOR A VF OF A PORT *** */ struct cmd_vf_mac_addr_result { @@ -6826,7 +6816,6 @@ cmdline_parse_inst_t cmd_vf_mac_addr_filter = { }, }; -#ifdef RTE_LIBRTE_IXGBE_PMD /* *** ADD/REMOVE A VLAN IDENTIFIER TO/FROM A PORT VLAN RX FILTER *** */ struct cmd_vf_rx_vlan_filter { cmdline_fixed_string_t rx_vlan; @@ -6889,7 +6878,6 @@ cmdline_parse_inst_t cmd_vf_rxvlan_filter = { NULL, }, }; -#endif /* *** SET RATE LIMIT FOR A QUEUE OF A PORT *** */ struct cmd_queue_rate_limit_result { @@ -6958,7 +6946,6 @@ cmdline_parse_inst_t cmd_queue_rate_limit = { }, }; -#ifdef RTE_LIBRTE_IXGBE_PMD /* *** SET RATE LIMIT FOR A VF OF A PORT *** */ struct cmd_vf_rate_limit_result { cmdline_fixed_string_t set; @@ -7037,7 +7024,6 @@ cmdline_parse_inst_t cmd_vf_rate_limit = { NULL, }, }; -#endif /* *** ADD TUNNEL FILTER OF A PORT *** */ struct cmd_tunnel_filter_result { @@ -10808,7 +10794,6 @@ cmdline_parse_inst_t cmd_config_e_tag_filter_del = { NULL, }, }; -#ifdef RTE_LIBRTE_IXGBE_PMD /* vf vlan anti spoof configuration */ @@ -10862,9 +10847,22 @@ cmd_set_vf_vlan_anti_spoof_parsed( struct cmd_vf_vlan_anti_spoof_result *res = parsed_result; int ret = 0; int is_on = (strcmp(res->on_off, "on") == 0) ? 1 : 0; + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(dev_info)); + rte_eth_dev_info_get(res->port_id, &dev_info); + + if (strstr(dev_info.driver_name, "ixgbe") != NULL) + ret = rte_pmd_ixgbe_set_vf_vlan_anti_spoof(res->port_id, + res->vf_id, + is_on); + else if (strstr(dev_info.driver_name, "i40e") != NULL) + ret = rte_pmd_i40e_set_vf_vlan_anti_spoof(res->port_id, + res->vf_id, + is_on); + else + ret = -ENOTSUP; - ret = rte_pmd_ixgbe_set_vf_vlan_anti_spoof(res->port_id, res->vf_id, - is_on); switch (ret) { case 0: break; @@ -10874,6 +10872,9 @@ cmd_set_vf_vlan_anti_spoof_parsed( case -ENODEV: printf("invalid port_id %d\n", res->port_id); break; + case -ENOTSUP: + printf("function not implemented\n"); + break; default: printf("programming error: (%s)\n", strerror(-ret)); } @@ -10947,9 +10948,22 @@ cmd_set_vf_mac_anti_spoof_parsed( struct cmd_vf_mac_anti_spoof_result *res = parsed_result; int ret; int is_on = (strcmp(res->on_off, "on") == 0) ? 1 : 0; + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(dev_info)); + rte_eth_dev_info_get(res->port_id, &dev_info); + + if (strstr(dev_info.driver_name, "ixgbe") != NULL) + ret = rte_pmd_ixgbe_set_vf_mac_anti_spoof(res->port_id, + res->vf_id, + is_on); + else if (strstr(dev_info.driver_name, "i40e") != NULL) + ret = rte_pmd_i40e_set_vf_mac_anti_spoof(res->port_id, + res->vf_id, + is_on); + else + ret = -ENOTSUP; - ret = rte_pmd_ixgbe_set_vf_mac_anti_spoof(res->port_id, res->vf_id, - is_on); switch (ret) { case 0: break; @@ -10959,6 +10973,9 @@ cmd_set_vf_mac_anti_spoof_parsed( case -ENODEV: printf("invalid port_id %d\n", res->port_id); break; + case -ENOTSUP: + printf("function not implemented\n"); + break; default: printf("programming error: (%s)\n", strerror(-ret)); } @@ -11032,8 +11049,20 @@ cmd_set_vf_vlan_stripq_parsed( struct cmd_vf_vlan_stripq_result *res = parsed_result; int ret = 0; int is_on = (strcmp(res->on_off, "on") == 0) ? 1 : 0; + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(dev_info)); + rte_eth_dev_info_get(res->port_id, &dev_info); + + if (strstr(dev_info.driver_name, "ixgbe") != NULL) + ret = rte_pmd_ixgbe_set_vf_vlan_stripq(res->port_id, + res->vf_id, is_on); + else if (strstr(dev_info.driver_name, "i40e") != NULL) + ret = rte_pmd_i40e_set_vf_vlan_stripq(res->port_id, + res->vf_id, is_on); + else + ret = -ENOTSUP; - ret = rte_pmd_ixgbe_set_vf_vlan_stripq(res->port_id, res->vf_id, is_on); switch (ret) { case 0: break; @@ -11115,8 +11144,20 @@ cmd_set_vf_vlan_insert_parsed( { struct cmd_vf_vlan_insert_result *res = parsed_result; int ret; + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(dev_info)); + rte_eth_dev_info_get(res->port_id, &dev_info); + + if (strstr(dev_info.driver_name, "ixgbe") != NULL) + ret = rte_pmd_ixgbe_set_vf_vlan_insert(res->port_id, res->vf_id, + res->vlan_id); + else if (strstr(dev_info.driver_name, "i40e") != NULL) + ret = rte_pmd_i40e_set_vf_vlan_insert(res->port_id, res->vf_id, + res->vlan_id); + else + ret = -ENOTSUP; - ret = rte_pmd_ixgbe_set_vf_vlan_insert(res->port_id, res->vf_id, res->vlan_id); switch (ret) { case 0: break; @@ -11126,6 +11167,9 @@ cmd_set_vf_vlan_insert_parsed( case -ENODEV: printf("invalid port_id %d\n", res->port_id); break; + case -ENOTSUP: + printf("function not implemented\n"); + break; default: printf("programming error: (%s)\n", strerror(-ret)); } @@ -11189,8 +11233,18 @@ cmd_set_tx_loopback_parsed( struct cmd_tx_loopback_result *res = parsed_result; int ret; int is_on = (strcmp(res->on_off, "on") == 0) ? 1 : 0; + struct rte_eth_dev_info dev_info; + + memset(&dev_info, 0, sizeof(dev_info)); + rte_eth_dev_info_get(res->port_id, &dev_info); + + if (strstr(dev_info.driver_name, "ixgbe") != NULL) + ret = rte_pmd_ixgbe_set_tx_loopback(res->port_id, is_on); + else if (strstr(dev_info.driver_name, "i40e") != NULL) + ret = rte_pmd_i40e_set_tx_loopback(res->port_id, is_on); + else + ret = -ENOTSUP; - ret = rte_pmd_ixgbe_set_tx_loopback(res->port_id, is_on); switch (ret) { case 0: break; @@ -11200,6 +11254,9 @@ cmd_set_tx_loopback_parsed( case -ENODEV: printf("invalid port_id %d\n", res->port_id); break; + case -ENOTSUP: + printf("function not implemented\n"); + break; default: printf("programming error: (%s)\n", strerror(-ret)); } @@ -11277,6 +11334,9 @@ cmd_set_all_queues_drop_en_parsed( case -ENODEV: printf("invalid port_id %d\n", res->port_id); break; + case -ENOTSUP: + printf("function not implemented\n"); + break; default: printf("programming error: (%s)\n", strerror(-ret)); } @@ -11432,10 +11492,21 @@ cmd_set_vf_mac_addr_parsed( __attribute__((unused)) void *data) { struct cmd_set_vf_mac_addr_result *res = parsed_result; + struct rte_eth_dev_info dev_info; int ret; - ret = rte_pmd_ixgbe_set_vf_mac_addr(res->port_id, res->vf_id, - &res->mac_addr); + memset(&dev_info, 0, sizeof(dev_info)); + rte_eth_dev_info_get(res->port_id, &dev_info); + + if (strstr(dev_info.driver_name, "ixgbe") != NULL) + ret = rte_pmd_ixgbe_set_vf_mac_addr(res->port_id, res->vf_id, + &res->mac_addr); + else if (strstr(dev_info.driver_name, "i40e") != NULL) + ret = rte_pmd_i40e_set_vf_mac_addr(res->port_id, res->vf_id, + &res->mac_addr); + else + ret = -ENOTSUP; + switch (ret) { case 0: break; @@ -11445,6 +11516,9 @@ cmd_set_vf_mac_addr_parsed( case -ENODEV: printf("invalid port_id %d\n", res->port_id); break; + case -ENOTSUP: + printf("function not implemented\n"); + break; default: printf("programming error: (%s)\n", strerror(-ret)); } @@ -11465,7 +11539,6 @@ cmdline_parse_inst_t cmd_set_vf_mac_addr = { NULL, }, }; -#endif /* ******************************************************************************** */ @@ -11619,7 +11692,6 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_config_e_tag_forwarding_en_dis, (cmdline_parse_inst_t *)&cmd_config_e_tag_filter_add, (cmdline_parse_inst_t *)&cmd_config_e_tag_filter_del, -#ifdef RTE_LIBRTE_IXGBE_PMD (cmdline_parse_inst_t *)&cmd_set_vf_vlan_anti_spoof, (cmdline_parse_inst_t *)&cmd_set_vf_mac_anti_spoof, (cmdline_parse_inst_t *)&cmd_set_vf_vlan_stripq, @@ -11632,7 +11704,6 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_set_vf_traffic, (cmdline_parse_inst_t *)&cmd_vf_rxvlan_filter, (cmdline_parse_inst_t *)&cmd_vf_rate_limit, -#endif NULL, };