return 10G instead of 40G on x710 cards
authorIdo Barnea <[email protected]>
Sun, 21 Feb 2016 16:35:44 +0000 (18:35 +0200)
committerIdo Barnea <[email protected]>
Sun, 21 Feb 2016 16:35:44 +0000 (18:35 +0200)
src/dpdk22/drivers/net/i40e/i40e_ethdev.c
src/dpdk22/lib/librte_ether/rte_ethdev.c
src/dpdk22/lib/librte_ether/rte_ethdev.h
src/main_dpdk.cpp

index 7542ade..0a1e9ef 100644 (file)
@@ -2071,6 +2071,19 @@ i40e_read_stats_registers(struct i40e_pf *pf, struct i40e_hw *hw)
                i40e_update_vsi_stats(pf->main_vsi);
 }
 
+// TREX_PATCH
+int
+i40e_trex_get_speed(struct rte_eth_dev *dev)
+{
+    struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+
+    if (i40e_is_40G_device(hw->device_id)) {
+        return 40;
+    } else {
+        return 10;
+    }
+}
+
 /* Get all statistics of a port */
 static void
 i40e_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
index ed971b4..43ec026 100644 (file)
@@ -1430,6 +1430,21 @@ rte_eth_link_get_nowait(uint8_t port_id, struct rte_eth_link *eth_link)
        }
 }
 
+// TREX_PATCH
+int
+rte_eth_get_speed(uint8_t port_id, int *speed)
+{
+       struct rte_eth_dev *dev;
+
+       RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL);
+
+       dev = &rte_eth_devices[port_id];
+
+    // Only xl710 support this
+    *speed = i40e_trex_get_speed(dev);
+    return 0;
+}
+
 int
 rte_eth_stats_get(uint8_t port_id, struct rte_eth_stats *stats)
 {
index f8c7c86..e4bc974 100644 (file)
@@ -2150,6 +2150,8 @@ extern void rte_eth_link_get(uint8_t port_id, struct rte_eth_link *link);
 extern void rte_eth_link_get_nowait(uint8_t port_id,
                                struct rte_eth_link *link);
 
+extern int rte_eth_get_speed(uint8_t port_id, int *speed);
+
 /**
  * Retrieve the general I/O statistics of an Ethernet device.
  *
index d40c4c8..701ae13 100755 (executable)
@@ -125,7 +125,7 @@ struct port_cfg_t;
 class CTRexExtendedDriverBase {
 public:
 
-    virtual TrexPlatformApi::driver_speed_e get_driver_speed() = 0;
+    virtual TrexPlatformApi::driver_speed_e get_driver_speed(uint8_t port_id) = 0;
 
     virtual int get_min_sample_rate(void)=0;
     virtual void update_configuration(port_cfg_t * cfg)=0;
@@ -155,7 +155,7 @@ public:
     CTRexExtendedDriverBase1G(){
     }
 
-    TrexPlatformApi::driver_speed_e get_driver_speed() {
+    TrexPlatformApi::driver_speed_e get_driver_speed(uint8_t port_id) {
         return TrexPlatformApi::SPEED_1G;
     }
 
@@ -197,7 +197,7 @@ public:
         CGlobalInfo::m_options.preview.set_vm_one_queue_enable(true);
     }
 
-    TrexPlatformApi::driver_speed_e get_driver_speed() {
+    TrexPlatformApi::driver_speed_e get_driver_speed(uint8_t port_id) {
         return TrexPlatformApi::SPEED_1G;
     }
 
@@ -240,7 +240,7 @@ public:
     CTRexExtendedDriverBase10G(){
     }
 
-    TrexPlatformApi::driver_speed_e get_driver_speed() {
+    TrexPlatformApi::driver_speed_e get_driver_speed(uint8_t port_id) {
         return TrexPlatformApi::SPEED_10G;
     }
 
@@ -274,8 +274,15 @@ public:
     CTRexExtendedDriverBase40G(){
     }
 
-    TrexPlatformApi::driver_speed_e get_driver_speed() {
-        return TrexPlatformApi::SPEED_40G;
+    TrexPlatformApi::driver_speed_e get_driver_speed(uint8_t port_id) {
+        int speed;
+
+        rte_eth_get_speed(port_id, &speed);
+        if (speed == 10) {
+            return TrexPlatformApi::SPEED_10G;
+        } else {
+            return TrexPlatformApi::SPEED_40G;
+        }
     }
 
     static CTRexExtendedDriverBase * create(){
@@ -4277,8 +4284,8 @@ int main_test(int argc , char * argv[]){
 
     if (CGlobalInfo::m_options.m_debug_pkt_proto != 0) {
         CTrexDebug debug = CTrexDebug(g_trex.m_ports, g_trex.m_max_ports);
-       debug.test_send(CGlobalInfo::m_options.m_debug_pkt_proto);
-       exit(1);
+        debug.test_send(CGlobalInfo::m_options.m_debug_pkt_proto);
+        exit(1);
     }
 
     if ( CGlobalInfo::m_options.preview.getOnlyLatency() ){
@@ -4918,12 +4925,12 @@ TrexDpdkPlatformApi::port_id_to_cores(uint8_t port_id, std::vector<std::pair<uin
 }
 
 void
-TrexDpdkPlatformApi::get_interface_info(uint8_t interface_id,
+TrexDpdkPlatformApi::get_interface_info(uint8_t port_id,
                                         std::string &driver_name,
                                         driver_speed_e &speed) const {
 
     driver_name = CTRexExtendedDriverDb::Ins()->get_driver_name();
-    speed = CTRexExtendedDriverDb::Ins()->get_drv()->get_driver_speed();
+    speed = CTRexExtendedDriverDb::Ins()->get_drv()->get_driver_speed(port_id);
 }
 
 void