diff options
Diffstat (limited to 'src/stateless/messaging')
-rw-r--r-- | src/stateless/messaging/trex_stateless_messaging.cpp | 98 | ||||
-rw-r--r-- | src/stateless/messaging/trex_stateless_messaging.h | 124 |
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__ */ |