app/testpmd: add --flow-isolate-all option
[dpdk.git] / app / test-pmd / testpmd.c
index 132ce81..e754d12 100644 (file)
@@ -90,6 +90,7 @@
 #ifdef RTE_LIBRTE_LATENCY_STATS
 #include <rte_latencystats.h>
 #endif
+#include <rte_gro.h>
 
 #include "testpmd.h"
 
@@ -270,6 +271,11 @@ uint16_t port_topology = PORT_TOPOLOGY_PAIRED; /* Ports are paired by default */
  */
 uint8_t no_flush_rx = 0; /* flush by default */
 
+/*
+ * Flow API isolated mode.
+ */
+uint8_t flow_isolate_all;
+
 /*
  * Avoids to check link status when starting/stopping a port.
  */
@@ -379,6 +385,8 @@ lcoreid_t bitrate_lcore_id;
 uint8_t bitrate_enabled;
 #endif
 
+struct gro_status gro_ports[RTE_MAX_ETHPORTS];
+
 /* Forward function declarations */
 static void map_port_queue_stats_mapping_registers(uint8_t pi, struct rte_port *port);
 static void check_all_ports_link_status(uint32_t port_mask);
@@ -1426,6 +1434,15 @@ start_port(portid_t pid)
                if (port->need_reconfig > 0) {
                        port->need_reconfig = 0;
 
+                       if (flow_isolate_all) {
+                               int ret = port_flow_isolate(pi, 1);
+                               if (ret) {
+                                       printf("Failed to apply isolated"
+                                              " mode on port %d\n", pi);
+                                       return -1;
+                               }
+                       }
+
                        printf("Configuring Port %d (socket %u)\n", pi,
                                        port->socket_id);
                        /* configure port */
@@ -1810,21 +1827,14 @@ static void
 rmv_event_callback(void *arg)
 {
        struct rte_eth_dev *dev;
-       struct rte_devargs *da;
-       char name[32] = "";
        uint8_t port_id = (intptr_t)arg;
 
        RTE_ETH_VALID_PORTID_OR_RET(port_id);
        dev = &rte_eth_devices[port_id];
-       da = dev->device->devargs;
 
        stop_port(port_id);
        close_port(port_id);
-       if (da->type == RTE_DEVTYPE_VIRTUAL)
-               snprintf(name, sizeof(name), "%s", da->virt.drv_name);
-       else if (da->type == RTE_DEVTYPE_WHITELISTED_PCI)
-               rte_pci_device_name(&da->pci.addr, name, sizeof(name));
-       printf("removing device %s\n", name);
+       printf("removing device %s\n", dev->device->name);
        rte_eal_dev_detach(dev->device);
        dev->state = RTE_ETH_DEV_UNUSED;
 }