From patchwork Fri Mar 3 01:59:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zhang X-Patchwork-Id: 21155 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 AD975BD30; Fri, 3 Mar 2017 02:08:57 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 91AE23DC for ; Fri, 3 Mar 2017 02:08:35 +0100 (CET) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Mar 2017 17:08:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,234,1484035200"; d="scan'208";a="830354708" Received: from unknown (HELO localhost.localdomain.sh.intel.com) ([10.239.129.167]) by FMSMGA003.fm.intel.com with ESMTP; 02 Mar 2017 17:08:34 -0800 From: Qi Zhang To: jingjing.wu@intel.com, helin.zhang@intel.com Cc: dev@dpdk.org, Qi Zhang Date: Thu, 2 Mar 2017 20:59:24 -0500 Message-Id: <20170303015924.68986-3-qi.z.zhang@intel.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170303015924.68986-1-qi.z.zhang@intel.com> References: <20170303015924.68986-1-qi.z.zhang@intel.com> Subject: [dpdk-dev] [PATCH 2/2] app/testpmd: enable VF untag drop in testpmd 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" Add command line to support untag drop to specific VF in testpmd. Signed-off-by: Qi Zhang --- app/test-pmd/cmdline.c | 104 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 43fc636..4ddc2c9 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -311,6 +311,10 @@ 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" +#ifdef RTE_LIBRTE_I40E_PMD + "set vf vlan untagdrop (port_id) (vf_id) (on|off)\n" + " Set VLAN untag drop for a VF from the PF.\n\n" +#endif "set vf vlan tag (port_id) (vf_id) (on|off)\n" " Set VLAN tag for a VF from the PF.\n\n" @@ -10995,6 +10999,103 @@ cmdline_parse_inst_t cmd_set_vf_vlan_anti_spoof = { }, }; +#ifdef RTE_LIBRTE_I40E_PMD +/* vf vlan untag drop configuration */ + +/* Common result structure for vf vlan untag drop */ +struct cmd_vf_vlan_untag_drop_result { + cmdline_fixed_string_t set; + cmdline_fixed_string_t vf; + cmdline_fixed_string_t vlan; + cmdline_fixed_string_t untagdrop; + uint8_t port_id; + uint32_t vf_id; + cmdline_fixed_string_t on_off; +}; + +/* Common CLI fields for vf vlan untag drop enable disable */ +cmdline_parse_token_string_t cmd_vf_vlan_untag_drop_set = + TOKEN_STRING_INITIALIZER + (struct cmd_vf_vlan_untag_drop_result, + set, "set"); +cmdline_parse_token_string_t cmd_vf_vlan_untag_drop_vf = + TOKEN_STRING_INITIALIZER + (struct cmd_vf_vlan_untag_drop_result, + vf, "vf"); +cmdline_parse_token_string_t cmd_vf_vlan_untag_drop_vlan = + TOKEN_STRING_INITIALIZER + (struct cmd_vf_vlan_untag_drop_result, + vlan, "vlan"); +cmdline_parse_token_string_t cmd_vf_vlan_untag_drop_untagdrop = + TOKEN_STRING_INITIALIZER + (struct cmd_vf_vlan_untag_drop_result, + untagdrop, "untagdrop"); +cmdline_parse_token_num_t cmd_vf_vlan_untag_drop_port_id = + TOKEN_NUM_INITIALIZER + (struct cmd_vf_vlan_untag_drop_result, + port_id, UINT8); +cmdline_parse_token_num_t cmd_vf_vlan_untag_drop_vf_id = + TOKEN_NUM_INITIALIZER + (struct cmd_vf_vlan_untag_drop_result, + vf_id, UINT32); +cmdline_parse_token_string_t cmd_vf_vlan_untag_drop_on_off = + TOKEN_STRING_INITIALIZER + (struct cmd_vf_vlan_untag_drop_result, + on_off, "on#off"); + +static void +cmd_set_vf_vlan_untag_drop_parsed( + void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_vf_vlan_untag_drop_result *res = parsed_result; + int ret = -ENOTSUP; + + __rte_unused int is_on = (strcmp(res->on_off, "on") == 0) ? 1 : 0; + + if (port_id_is_invalid(res->port_id, ENABLED_WARN)) + return; + + if (ret == -ENOTSUP) + ret = rte_pmd_i40e_set_vf_vlan_untag_drop(res->port_id, + res->vf_id, is_on); + + switch (ret) { + case 0: + break; + case -EINVAL: + printf("invalid vf_id %d\n", res->vf_id); + break; + 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)); + } +} + +cmdline_parse_inst_t cmd_set_vf_vlan_untag_drop = { + .f = cmd_set_vf_vlan_untag_drop_parsed, + .data = NULL, + .help_str = "set vf vlan untagdrop on|off", + .tokens = { + (void *)&cmd_vf_vlan_untag_drop_set, + (void *)&cmd_vf_vlan_untag_drop_vf, + (void *)&cmd_vf_vlan_untag_drop_vlan, + (void *)&cmd_vf_vlan_untag_drop_untagdrop, + (void *)&cmd_vf_vlan_untag_drop_port_id, + (void *)&cmd_vf_vlan_untag_drop_vf_id, + (void *)&cmd_vf_vlan_untag_drop_on_off, + NULL, + }, +}; + +#endif + /* vf mac anti spoof configuration */ /* Common result structure for vf mac anti spoof */ @@ -12549,6 +12650,9 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_config_e_tag_filter_add, (cmdline_parse_inst_t *)&cmd_config_e_tag_filter_del, (cmdline_parse_inst_t *)&cmd_set_vf_vlan_anti_spoof, +#ifdef RTE_LIBRTE_I40E_PMD + (cmdline_parse_inst_t *)&cmd_set_vf_vlan_untag_drop, +#endif (cmdline_parse_inst_t *)&cmd_set_vf_mac_anti_spoof, (cmdline_parse_inst_t *)&cmd_set_vf_vlan_stripq, (cmdline_parse_inst_t *)&cmd_set_vf_vlan_insert,