summaryrefslogtreecommitdiffstats
path: root/src/stateless/dp/trex_stateless_dp_core.h
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2015-10-27 19:25:03 +0200
committerimarom <imarom@cisco.com>2015-10-27 19:27:57 +0200
commitea0b6efc3a41f425e46d81f4b6b8bbbf3238add1 (patch)
treea566d14e5869fd71068912438b9ec88d9fde12b5 /src/stateless/dp/trex_stateless_dp_core.h
parent99109fa49c9a4d09a69172367911758892203ee2 (diff)
working cont. stream on 1 core
Diffstat (limited to 'src/stateless/dp/trex_stateless_dp_core.h')
-rw-r--r--src/stateless/dp/trex_stateless_dp_core.h120
1 files changed, 120 insertions, 0 deletions
diff --git a/src/stateless/dp/trex_stateless_dp_core.h b/src/stateless/dp/trex_stateless_dp_core.h
new file mode 100644
index 00000000..65d894d2
--- /dev/null
+++ b/src/stateless/dp/trex_stateless_dp_core.h
@@ -0,0 +1,120 @@
+/*
+ Itay Marom
+ Cisco Systems, Inc.
+*/
+
+/*
+Copyright (c) 2015-2015 Cisco Systems, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+#ifndef __TREX_STATELESS_DP_CORE_H__
+#define __TREX_STATELESS_DP_CORE_H__
+
+#include <msg_manager.h>
+#include <pal_utl.h>
+
+class TrexStatelessCpToDpMsgBase;
+class TrexStatelessDpStart;
+class CFlowGenListPerThread;
+class CGenNode;
+
+class TrexStatelessDpCore {
+
+public:
+
+ /* states */
+ enum state_e {
+ STATE_IDLE,
+ STATE_TRANSMITTING
+ };
+
+ TrexStatelessDpCore(uint8_t thread_id, CFlowGenListPerThread *core);
+
+ /**
+ * launch the stateless DP core code
+ *
+ */
+ void start();
+
+ /**
+ * handle pkt event
+ *
+ * @author imarom (27-Oct-15)
+ */
+ void handle_pkt_event(CGenNode *node);
+
+ /**
+ * dummy traffic creator
+ *
+ * @author imarom (27-Oct-15)
+ *
+ * @param pkt
+ * @param pkt_len
+ */
+ void start_const_traffic(const uint8_t *pkt, uint16_t pkt_len, double pps);
+
+ /**
+ * stop all traffic for this core
+ *
+ */
+ void stop_traffic();
+
+ /**
+ * check for and handle messages from CP
+ *
+ * @author imarom (27-Oct-15)
+ */
+ void periodic_check_for_cp_messages() {
+ // doing this inline for performance reasons
+
+ /* fast path */
+ if ( likely ( m_ring_from_cp->isEmpty() ) ) {
+ return;
+ }
+
+ while ( true ) {
+ CGenNode * node;
+ if (m_ring_from_cp->Dequeue(node) != 0) {
+ break;
+ }
+
+ assert(node);
+
+ TrexStatelessCpToDpMsgBase * msg = (TrexStatelessCpToDpMsgBase *)node;
+ handle_cp_msg(msg);
+ }
+
+ }
+
+private:
+ /**
+ * handles a CP to DP message
+ *
+ * @author imarom (27-Oct-15)
+ *
+ * @param msg
+ */
+ void handle_cp_msg(TrexStatelessCpToDpMsgBase *msg);
+
+ uint8_t m_thread_id;
+ state_e m_state;
+ CNodeRing *m_ring_from_cp;
+ CNodeRing *m_ring_to_cp;
+
+ /* pointer to the main object */
+ CFlowGenListPerThread *m_core;
+};
+
+#endif /* __TREX_STATELESS_DP_CORE_H__ */
+