summaryrefslogtreecommitdiffstats
path: root/src/stateless/messaging
diff options
context:
space:
mode:
Diffstat (limited to 'src/stateless/messaging')
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.cpp98
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.h124
2 files changed, 198 insertions, 24 deletions
diff --git a/src/stateless/messaging/trex_stateless_messaging.cpp b/src/stateless/messaging/trex_stateless_messaging.cpp
index aeb1e677..f89ca343 100644
--- a/src/stateless/messaging/trex_stateless_messaging.cpp
+++ b/src/stateless/messaging/trex_stateless_messaging.cpp
@@ -262,22 +262,71 @@ bool TrexStatelessRxQuit::handle (CRxCoreStateless *rx_core) {
bool
-TrexStatelessRxStartCapture::handle(CRxCoreStateless *rx_core) {
- rx_core->start_recorder(m_port_id, m_pcap_filename, m_limit);
+TrexStatelessRxCaptureStart::handle(CRxCoreStateless *rx_core) {
+
+ TrexCaptureRCStart start_rc;
+
+ TrexStatelessCaptureMngr::getInstance().start(m_filter, m_limit, m_mode, start_rc);
+
+ /* mark as done */
+ m_reply.set_reply(start_rc);
+
+ return true;
+}
+
+bool
+TrexStatelessRxCaptureStop::handle(CRxCoreStateless *rx_core) {
+
+ TrexCaptureRCStop stop_rc;
+
+ TrexStatelessCaptureMngr::getInstance().stop(m_capture_id, stop_rc);
+
+ /* mark as done */
+ m_reply.set_reply(stop_rc);
+
+ return true;
+}
+bool
+TrexStatelessRxCaptureFetch::handle(CRxCoreStateless *rx_core) {
+
+ TrexCaptureRCFetch fetch_rc;
+
+ TrexStatelessCaptureMngr::getInstance().fetch(m_capture_id, m_pkt_limit, fetch_rc);
+
/* mark as done */
- m_reply.set_reply(true);
+ m_reply.set_reply(fetch_rc);
return true;
}
bool
-TrexStatelessRxStopCapture::handle(CRxCoreStateless *rx_core) {
- rx_core->stop_recorder(m_port_id);
+TrexStatelessRxCaptureStatus::handle(CRxCoreStateless *rx_core) {
+
+ TrexCaptureRCStatus status_rc;
+
+ status_rc.set_rc(TrexStatelessCaptureMngr::getInstance().to_json());
+
+ /* mark as done */
+ m_reply.set_reply(status_rc);
+
+ 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) {
rx_core->start_queue(m_port_id, m_size);
@@ -299,7 +348,7 @@ TrexStatelessRxStopQueue::handle(CRxCoreStateless *rx_core) {
bool
TrexStatelessRxQueueGetPkts::handle(CRxCoreStateless *rx_core) {
- const RXPacketBuffer *pkt_buffer = rx_core->get_rx_queue_pkts(m_port_id);
+ const TrexPktBuffer *pkt_buffer = rx_core->get_rx_queue_pkts(m_port_id);
/* set the reply */
m_reply.set_reply(pkt_buffer);
@@ -332,3 +381,40 @@ TrexStatelessRxSetL3Mode::handle(CRxCoreStateless *rx_core) {
return true;
}
+bool
+TrexStatelessRxQuery::handle(CRxCoreStateless *rx_core) {
+
+ query_rc_e rc = RC_OK;
+
+ switch (m_query_type) {
+
+ case SERVICE_MODE_ON:
+ /* for service mode on - always allow this */
+ rc = RC_OK;
+ break;
+
+ case SERVICE_MODE_OFF:
+ /* cannot leave service mode when RX queue is active */
+ if (rx_core->get_rx_port_mngr(m_port_id).is_feature_set(RXPortManager::QUEUE)) {
+ rc = RC_FAIL_RX_QUEUE_ACTIVE;
+ break;
+ }
+
+ /* cannot leave service mode if PCAP capturing is active */
+ if (TrexStatelessCaptureMngr::getInstance().is_active(m_port_id)) {
+ rc = RC_FAIL_CAPTURE_ACTIVE;
+ break;
+ }
+
+ break;
+
+ default:
+ assert(0);
+ break;
+
+ }
+
+ m_reply.set_reply(rc);
+
+ return true;
+}
diff --git a/src/stateless/messaging/trex_stateless_messaging.h b/src/stateless/messaging/trex_stateless_messaging.h
index 72b92d11..cd79d6e7 100644
--- a/src/stateless/messaging/trex_stateless_messaging.h
+++ b/src/stateless/messaging/trex_stateless_messaging.h
@@ -28,12 +28,13 @@ limitations under the License.
#include "trex_stateless_rx_defs.h"
#include "os_time.h"
#include "utl_ip.h"
+#include "trex_stateless_capture.h"
class TrexStatelessDpCore;
class CRxCoreStateless;
class TrexStreamsCompiledObj;
class CFlowGenListPerThread;
-class RXPacketBuffer;
+class TrexPktBuffer;
/**
* Generic message reply object
@@ -484,39 +485,88 @@ class TrexStatelessRxQuit : public TrexStatelessCpToRxMsgBase {
};
+class TrexStatelessRxCapture : public TrexStatelessCpToRxMsgBase {
+public:
+ virtual bool handle (CRxCoreStateless *rx_core) = 0;
+};
-class TrexStatelessRxStartCapture : public TrexStatelessCpToRxMsgBase {
+class TrexStatelessRxCaptureStart : public TrexStatelessRxCapture {
public:
- TrexStatelessRxStartCapture(uint8_t port_id,
- const std::string &pcap_filename,
+ TrexStatelessRxCaptureStart(const CaptureFilter& filter,
uint64_t limit,
- MsgReply<bool> &reply) : m_reply(reply) {
+ TrexPktBuffer::mode_e mode,
+ MsgReply<TrexCaptureRCStart> &reply) : m_reply(reply) {
- m_port_id = port_id;
- m_limit = limit;
- m_pcap_filename = pcap_filename;
+ m_limit = limit;
+ m_filter = filter;
+ m_mode = mode;
}
virtual bool handle(CRxCoreStateless *rx_core);
private:
- uint8_t m_port_id;
- std::string m_pcap_filename;
- uint64_t m_limit;
- MsgReply<bool> &m_reply;
+ uint8_t m_port_id;
+ uint64_t m_limit;
+ CaptureFilter m_filter;
+ TrexPktBuffer::mode_e m_mode;
+ MsgReply<TrexCaptureRCStart> &m_reply;
};
-class TrexStatelessRxStopCapture : public TrexStatelessCpToRxMsgBase {
+class TrexStatelessRxCaptureStop : public TrexStatelessRxCapture {
public:
- TrexStatelessRxStopCapture(uint8_t port_id) {
- m_port_id = port_id;
+ TrexStatelessRxCaptureStop(capture_id_t capture_id, MsgReply<TrexCaptureRCStop> &reply) : m_reply(reply) {
+ m_capture_id = capture_id;
}
virtual bool handle(CRxCoreStateless *rx_core);
private:
- uint8_t m_port_id;
+ capture_id_t m_capture_id;
+ MsgReply<TrexCaptureRCStop> &m_reply;
+};
+
+
+class TrexStatelessRxCaptureFetch : public TrexStatelessRxCapture {
+public:
+ TrexStatelessRxCaptureFetch(capture_id_t capture_id, uint32_t pkt_limit, MsgReply<TrexCaptureRCFetch> &reply) : m_reply(reply) {
+ m_capture_id = capture_id;
+ m_pkt_limit = pkt_limit;
+ }
+
+ virtual bool handle(CRxCoreStateless *rx_core);
+
+private:
+ capture_id_t m_capture_id;
+ uint32_t m_pkt_limit;
+ MsgReply<TrexCaptureRCFetch> &m_reply;
+};
+
+
+class TrexStatelessRxCaptureStatus : public TrexStatelessRxCapture {
+public:
+ TrexStatelessRxCaptureStatus(MsgReply<TrexCaptureRCStatus> &reply) : m_reply(reply) {
+ }
+
+ virtual bool handle(CRxCoreStateless *rx_core);
+
+private:
+ MsgReply<TrexCaptureRCStatus> &m_reply;
+};
+
+
+
+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;
};
@@ -556,7 +606,7 @@ private:
class TrexStatelessRxQueueGetPkts : public TrexStatelessCpToRxMsgBase {
public:
- TrexStatelessRxQueueGetPkts(uint8_t port_id, MsgReply<const RXPacketBuffer *> &reply) : m_reply(reply) {
+ TrexStatelessRxQueueGetPkts(uint8_t port_id, MsgReply<const TrexPktBuffer *> &reply) : m_reply(reply) {
m_port_id = port_id;
}
@@ -568,7 +618,7 @@ public:
private:
uint8_t m_port_id;
- MsgReply<const RXPacketBuffer *> &m_reply;
+ MsgReply<const TrexPktBuffer *> &m_reply;
};
@@ -630,4 +680,42 @@ private:
MsgReply<Json::Value> &m_reply;
};
+
+class TrexStatelessRxQuery : public TrexStatelessCpToRxMsgBase {
+public:
+
+ /**
+ * query type to request
+ */
+ enum query_type_e {
+ SERVICE_MODE_ON,
+ SERVICE_MODE_OFF,
+ };
+
+ /**
+ * RC types for queries
+ */
+ enum query_rc_e {
+ RC_OK,
+ RC_FAIL_RX_QUEUE_ACTIVE,
+ RC_FAIL_CAPTURE_ACTIVE,
+ };
+
+ TrexStatelessRxQuery(uint8_t port_id, query_type_e query_type, MsgReply<query_rc_e> &reply) : m_reply(reply) {
+ m_port_id = port_id;
+ m_query_type = query_type;
+ }
+
+ /**
+ * virtual function to handle a message
+ *
+ */
+ virtual bool handle(CRxCoreStateless *rx_core);
+
+private:
+ uint8_t m_port_id;
+ query_type_e m_query_type;
+ MsgReply<query_rc_e> &m_reply;
+};
+
#endif /* __TREX_STATELESS_MESSAGING_H__ */