From: Wenzhuo Lu <wenzhuo...@intel.com>

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 <wenzhuo...@intel.com>
Signed-off-by: Chen Jing D(Mark) <jing.d.c...@intel.com>
Signed-off-by: Bernard Iremonger <bernard.iremon...@intel.com>
---
 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,
 };
 
-- 
2.9.3

Reply via email to