summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2017-01-18 13:08:41 +0200
committerimarom <imarom@cisco.com>2017-01-18 13:08:41 +0200
commit951b09ef1b892594840f091f861f11ad274541ec (patch)
tree1fe935fb6cdbf22308971b081e7685fdb1f185bb /src
parent9f72a19a6bb0edf7ad54129f7ad06e8e288a61d7 (diff)
many capture modes in Python console
Signed-off-by: imarom <imarom@cisco.com>
Diffstat (limited to 'src')
-rw-r--r--src/rpc-server/commands/trex_rpc_cmd_general.cpp43
-rw-r--r--src/rpc-server/commands/trex_rpc_cmds.h1
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.cpp13
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.h15
-rw-r--r--src/stateless/rx/trex_stateless_capture.cpp9
-rw-r--r--src/stateless/rx/trex_stateless_capture.h2
6 files changed, 68 insertions, 15 deletions
diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
index 80f69fa3..8f7431e4 100644
--- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp
+++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
@@ -853,7 +853,7 @@ TrexRpcCmdSetL3::_run(const Json::Value &params, Json::Value &result) {
*/
trex_rpc_cmd_rc_e
TrexRpcCmdCapture::_run(const Json::Value &params, Json::Value &result) {
- const std::string cmd = parse_choice(params, "command", {"start", "stop", "fetch", "status"}, result);
+ const std::string cmd = parse_choice(params, "command", {"start", "stop", "fetch", "status", "remove"}, result);
if (cmd == "start") {
parse_cmd_start(params, result);
@@ -863,6 +863,8 @@ TrexRpcCmdCapture::_run(const Json::Value &params, Json::Value &result) {
parse_cmd_fetch(params, result);
} else if (cmd == "status") {
parse_cmd_status(params, result);
+ } else if (cmd == "remove") {
+ parse_cmd_remove(params, result);
} else {
/* can't happen */
assert(0);
@@ -878,10 +880,9 @@ TrexRpcCmdCapture::_run(const Json::Value &params, Json::Value &result) {
void
TrexRpcCmdCapture::parse_cmd_start(const Json::Value &params, Json::Value &result) {
- uint32_t limit = parse_uint32(params, "limit", result);
- const Json::Value &tx_json = parse_array(params, "tx", result);
- const Json::Value &rx_json = parse_array(params, "rx", result);
-
+ uint32_t limit = parse_uint32(params, "limit", result);
+ const Json::Value &tx_json = parse_array(params, "tx", result);
+ const Json::Value &rx_json = parse_array(params, "rx", result);
CaptureFilter filter;
std::set<uint8_t> ports;
@@ -909,7 +910,7 @@ TrexRpcCmdCapture::parse_cmd_start(const Json::Value &params, Json::Value &resul
static MsgReply<TrexCaptureRCStart> reply;
reply.reset();
-
+
TrexStatelessRxCaptureStart *start_msg = new TrexStatelessRxCaptureStart(filter, limit, reply);
get_stateless_obj()->send_msg_to_rx(start_msg);
@@ -918,7 +919,7 @@ TrexRpcCmdCapture::parse_cmd_start(const Json::Value &params, Json::Value &resul
generate_execute_err(result, rc.get_err());
}
- result["result"] = Json::objectValue;
+ result["result"]["capture_id"] = rc.get_new_id();
}
/**
@@ -990,7 +991,33 @@ TrexRpcCmdCapture::parse_cmd_fetch(const Json::Value &params, Json::Value &resul
generate_execute_err(result, rc.get_err());
}
- result["result"]["pkts"] = rc.get_pkt_buffer()->to_json();
+ const TrexPktBuffer *pkt_buffer = rc.get_pkt_buffer();
+
result["result"]["pending"] = rc.get_pending();
+ result["result"]["pkts"] = pkt_buffer->to_json();
+
+ /* delete the buffer */
+ delete pkt_buffer;
+}
+
+void
+TrexRpcCmdCapture::parse_cmd_remove(const Json::Value &params, Json::Value &result) {
+
+ uint32_t capture_id = parse_uint32(params, "capture_id", result);
+
+ /* generate a remove command */
+
+ static MsgReply<TrexCaptureRCRemove> reply;
+ reply.reset();
+
+ TrexStatelessRxCaptureRemove *remove_msg = new TrexStatelessRxCaptureRemove(capture_id, reply);
+ get_stateless_obj()->send_msg_to_rx(remove_msg);
+
+ TrexCaptureRCRemove rc = reply.wait_for_reply();
+ if (!rc) {
+ generate_execute_err(result, rc.get_err());
+ }
+
+ result["result"] = Json::objectValue;
}
diff --git a/src/rpc-server/commands/trex_rpc_cmds.h b/src/rpc-server/commands/trex_rpc_cmds.h
index bf78ff80..54797bdf 100644
--- a/src/rpc-server/commands/trex_rpc_cmds.h
+++ b/src/rpc-server/commands/trex_rpc_cmds.h
@@ -165,6 +165,7 @@ TREX_RPC_CMD_DEFINE_EXTENDED(TrexRpcCmdCapture, "capture", 1, false, APIClass::
void parse_cmd_stop(const Json::Value &msg, Json::Value &result);
void parse_cmd_status(const Json::Value &msg, Json::Value &result);
void parse_cmd_fetch(const Json::Value &msg, Json::Value &result);
+ void parse_cmd_remove(const Json::Value &params, Json::Value &result);
);
diff --git a/src/stateless/messaging/trex_stateless_messaging.cpp b/src/stateless/messaging/trex_stateless_messaging.cpp
index b9bb1d1c..2452487c 100644
--- a/src/stateless/messaging/trex_stateless_messaging.cpp
+++ b/src/stateless/messaging/trex_stateless_messaging.cpp
@@ -313,6 +313,19 @@ TrexStatelessRxCaptureStatus::handle(CRxCoreStateless *rx_core) {
return true;
}
+bool
+TrexStatelessRxCaptureRemove::handle(CRxCoreStateless *rx_core) {
+
+ TrexCaptureRCRemove remove_rc;
+
+ TrexStatelessCaptureMngr::getInstance().remove(m_capture_id, remove_rc);
+
+ /* mark as done */
+ m_reply.set_reply(remove_rc);
+
+ return true;
+}
+
bool
TrexStatelessRxStartQueue::handle(CRxCoreStateless *rx_core) {
diff --git a/src/stateless/messaging/trex_stateless_messaging.h b/src/stateless/messaging/trex_stateless_messaging.h
index 4027d075..3535ad4f 100644
--- a/src/stateless/messaging/trex_stateless_messaging.h
+++ b/src/stateless/messaging/trex_stateless_messaging.h
@@ -552,6 +552,21 @@ private:
};
+
+class TrexStatelessRxCaptureRemove : public TrexStatelessRxCapture {
+public:
+ TrexStatelessRxCaptureRemove(capture_id_t capture_id, MsgReply<TrexCaptureRCRemove> &reply) : m_reply(reply) {
+ m_capture_id = capture_id;
+ }
+
+ virtual bool handle(CRxCoreStateless *rx_core);
+
+private:
+ capture_id_t m_capture_id;
+ MsgReply<TrexCaptureRCRemove> &m_reply;
+};
+
+
class TrexStatelessRxStartQueue : public TrexStatelessCpToRxMsgBase {
public:
TrexStatelessRxStartQueue(uint8_t port_id,
diff --git a/src/stateless/rx/trex_stateless_capture.cpp b/src/stateless/rx/trex_stateless_capture.cpp
index 85be7aef..5d43cede 100644
--- a/src/stateless/rx/trex_stateless_capture.cpp
+++ b/src/stateless/rx/trex_stateless_capture.cpp
@@ -62,7 +62,7 @@ TrexStatelessCapture::handle_pkt_rx(const rte_mbuf_t *m, int port) {
return;
}
- m_pkt_buffer->push(m);
+ m_pkt_buffer->push(m, port, TrexPkt::ORIGIN_RX);
}
@@ -87,7 +87,6 @@ TrexStatelessCapture::to_json() const {
default:
assert(0);
-
}
return output;
@@ -178,10 +177,6 @@ TrexStatelessCaptureMngr::fetch(capture_id_t capture_id, uint32_t pkt_limit, Tre
rc.set_err(TrexCaptureRC::RC_CAPTURE_NOT_FOUND);
return;
}
- if (capture->is_active()) {
- rc.set_err(TrexCaptureRC::RC_CAPTURE_FETCH_UNDER_ACTIVE);
- return;
- }
uint32_t pending = 0;
TrexPktBuffer *pkt_buffer = capture->fetch(pkt_limit, pending);
@@ -214,6 +209,8 @@ TrexStatelessCaptureMngr::remove(capture_id_t capture_id, TrexCaptureRCRemove &r
/* update global filter */
update_global_filter();
+
+ rc.set_ok();
}
void
diff --git a/src/stateless/rx/trex_stateless_capture.h b/src/stateless/rx/trex_stateless_capture.h
index 6cd25a94..4a9efea7 100644
--- a/src/stateless/rx/trex_stateless_capture.h
+++ b/src/stateless/rx/trex_stateless_capture.h
@@ -27,7 +27,7 @@ limitations under the License.
#include "trex_stateless_pkt.h"
#include "trex_stateless_capture_msg.h"
-typedef int64_t capture_id_t;
+typedef int32_t capture_id_t;
class TrexCaptureRC {
public: