RX - for not supported interfaces gives an error in JSON
authorimarom <[email protected]>
Wed, 24 Feb 2016 13:58:54 +0000 (08:58 -0500)
committerimarom <[email protected]>
Wed, 24 Feb 2016 13:58:54 +0000 (08:58 -0500)
src/rpc-server/commands/trex_rpc_cmd_general.cpp
src/rpc-server/commands/trex_rpc_cmd_stream.cpp
src/stateless/cp/trex_stateless_port.cpp
src/stateless/cp/trex_stateless_port.h

index 6ac8835..9b3b59a 100644 (file)
@@ -178,6 +178,10 @@ TrexRpcCmdGetSysInfo::_run(const Json::Value &params, Json::Value &result) {
 
         section["ports"][i]["driver"]  = driver;
 
+        section["ports"][i]["rx"]["caps"]      = port->get_rx_caps();
+        section["ports"][i]["rx"]["counters"]  = port->get_rx_count_num();
+            
+
         switch (speed) {
         case TrexPlatformApi::SPEED_1G:
             section["ports"][i]["speed"]   = 1;
index 984c3f8..86759f9 100644 (file)
@@ -105,18 +105,23 @@ TrexRpcCmdAddStream::_run(const Json::Value &params, Json::Value &result) {
 
     stream->m_rx_check.m_enabled = parse_bool(rx, "enabled", result);
 
+    TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(stream->m_port_id);
+
     /* if it is enabled - we need more fields */
     if (stream->m_rx_check.m_enabled) {
-        stream->m_rx_check.m_user_id   = parse_int(rx, "stream_id", result);
-        stream->m_rx_check.m_seq_enabled = parse_bool(rx, "seq_enabled", result);
-        stream->m_rx_check.m_latency     = parse_bool(rx, "latency_enabled", result);
+
+        if (port->get_rx_caps() == 0) {
+            generate_parse_err(result, "RX stats is not supported on this interface");
+        }
+
+        stream->m_rx_check.m_user_id      = parse_int(rx, "stream_id", result);
+        stream->m_rx_check.m_seq_enabled  = parse_bool(rx, "seq_enabled", result);
+        stream->m_rx_check.m_latency      = parse_bool(rx, "latency_enabled", result);
     }
 
     /* make sure this is a valid stream to add */
     validate_stream(stream, result);
 
-    TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(stream->m_port_id);
-
     try {
         port->add_stream(stream.get());
         stream.release();
index 88c3811..d246392 100644 (file)
@@ -61,6 +61,9 @@ TrexStatelessPort::TrexStatelessPort(uint8_t port_id, const TrexPlatformApi *api
     /* get the platform specific data */
     api->get_interface_info(port_id, m_driver_name, m_speed, m_has_crc);
 
+    /* get RX caps */
+    api->get_interface_stat_info(port_id, m_rx_count_num, m_rx_caps);
+
     /* get the DP cores belonging to this port */
     api->port_id_to_cores(m_port_id, core_pair_list);
 
index 434181c..a956c42 100644 (file)
@@ -283,6 +283,18 @@ public:
      */
     uint64_t get_port_speed_bps() const;
 
+    /**
+     * return RX caps
+     * 
+     */
+    int get_rx_caps() const {
+        return m_rx_caps;
+    }
+
+    uint16_t get_rx_count_num() const {
+        return m_rx_count_num;
+    }
+
     /**
      * return true if port adds CRC to a packet (not occurs for 
      * VNICs) 
@@ -376,6 +388,8 @@ private:
     port_state_e       m_port_state;
     std::string        m_driver_name;
     bool               m_has_crc;
+    uint16_t           m_rx_count_num;
+    uint16_t           m_rx_caps;
 
     TrexPlatformApi::driver_speed_e m_speed;