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 | 107 +++++++++++++++++++++++++++++++++++++------------
 2 files changed, 84 insertions(+), 25 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 2028173..e08edcc 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -265,7 +265,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"
 
@@ -277,7 +276,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"
@@ -285,7 +283,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"
 
@@ -294,7 +291,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"
@@ -389,10 +385,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)"
@@ -6617,7 +6611,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;
@@ -6678,9 +6671,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;
@@ -6762,7 +6753,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 {
@@ -6829,7 +6819,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;
@@ -6892,7 +6881,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 {
@@ -6961,7 +6949,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;
@@ -7040,7 +7027,6 @@ cmdline_parse_inst_t cmd_vf_rate_limit = {
                NULL,
        },
 };
-#endif
 
 /* *** ADD TUNNEL FILTER OF A PORT *** */
 struct cmd_tunnel_filter_result {
@@ -10811,7 +10797,6 @@ cmdline_parse_inst_t cmd_config_e_tag_filter_del = {
                NULL,
        },
 };
-#ifdef RTE_LIBRTE_IXGBE_PMD
 
 /* vf vlan anti spoof configuration */
 
@@ -10865,12 +10850,25 @@ 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;
 
        if (port_id_is_invalid(res->port_id, ENABLED_WARN))
                return;
 
-       ret = rte_pmd_ixgbe_set_vf_vlan_anti_spoof(res->port_id, res->vf_id,
-                       is_on);
+       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;
+
        switch (ret) {
        case 0:
                break;
@@ -10880,6 +10878,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));
        }
@@ -10953,12 +10954,25 @@ 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;
 
        if (port_id_is_invalid(res->port_id, ENABLED_WARN))
                return;
 
-       ret = rte_pmd_ixgbe_set_vf_mac_anti_spoof(res->port_id, res->vf_id,
-                       is_on);
+       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;
+
        switch (ret) {
        case 0:
                break;
@@ -10968,6 +10982,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));
        }
@@ -11041,11 +11058,23 @@ 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;
 
        if (port_id_is_invalid(res->port_id, ENABLED_WARN))
                return;
 
-       ret = rte_pmd_ixgbe_set_vf_vlan_stripq(res->port_id, res->vf_id, is_on);
+       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;
+
        switch (ret) {
        case 0:
                break;
@@ -11055,6 +11084,9 @@ cmd_set_vf_vlan_stripq_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));
        }
@@ -11127,11 +11159,23 @@ cmd_set_vf_vlan_insert_parsed(
 {
        struct cmd_vf_vlan_insert_result *res = parsed_result;
        int ret;
+       struct rte_eth_dev_info dev_info;
 
        if (port_id_is_invalid(res->port_id, ENABLED_WARN))
                return;
 
-       ret = rte_pmd_ixgbe_set_vf_vlan_insert(res->port_id, res->vf_id, 
res->vlan_id);
+       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;
+
        switch (ret) {
        case 0:
                break;
@@ -11141,6 +11185,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));
        }
@@ -11204,11 +11251,21 @@ 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;
 
        if (port_id_is_invalid(res->port_id, ENABLED_WARN))
                return;
 
-       ret = rte_pmd_ixgbe_set_tx_loopback(res->port_id, is_on);
+       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;
+
        switch (ret) {
        case 0:
                break;
@@ -11218,6 +11275,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));
        }
@@ -11503,7 +11563,6 @@ cmdline_parse_inst_t cmd_set_vf_mac_addr = {
                NULL,
        },
 };
-#endif
 
 /* 
********************************************************************************
 */
 
@@ -11657,7 +11716,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,
@@ -11670,7 +11728,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.7.4

Reply via email to