From 418fd3d0a7169f2d8934e8be82d11e1a388d681c Mon Sep 17 00:00:00 2001 From: imarom Date: Mon, 23 Jan 2017 16:45:01 +0200 Subject: service mode is now by message to RX core Signed-off-by: imarom --- .../messaging/trex_stateless_messaging.cpp | 37 +++++++++++++++++++++ src/stateless/messaging/trex_stateless_messaging.h | 38 ++++++++++++++++++++++ 2 files changed, 75 insertions(+) (limited to 'src/stateless/messaging') diff --git a/src/stateless/messaging/trex_stateless_messaging.cpp b/src/stateless/messaging/trex_stateless_messaging.cpp index 2452487c..21fe7a13 100644 --- a/src/stateless/messaging/trex_stateless_messaging.cpp +++ b/src/stateless/messaging/trex_stateless_messaging.cpp @@ -381,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 3535ad4f..ed14b100 100644 --- a/src/stateless/messaging/trex_stateless_messaging.h +++ b/src/stateless/messaging/trex_stateless_messaging.h @@ -677,4 +677,42 @@ private: MsgReply &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 &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 &m_reply; +}; + #endif /* __TREX_STATELESS_MESSAGING_H__ */ -- cgit 1.2.3-korg