summaryrefslogtreecommitdiffstats
path: root/src/stateless/messaging
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2017-01-23 16:45:01 +0200
committerimarom <imarom@cisco.com>2017-01-23 16:45:01 +0200
commit418fd3d0a7169f2d8934e8be82d11e1a388d681c (patch)
tree25aa5c50cde307d69e664f0034bb05e8d79b8a0e /src/stateless/messaging
parent2fd0f893a70649cfb71708c367724c5ba1ca0125 (diff)
service mode is now by message to RX core
Signed-off-by: imarom <imarom@cisco.com>
Diffstat (limited to 'src/stateless/messaging')
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.cpp37
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.h38
2 files changed, 75 insertions, 0 deletions
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<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__ */