summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-09-04 17:42:48 +0300
committerimarom <imarom@cisco.com>2016-09-07 14:02:56 +0300
commit540da82e6df983c36f54b9f48dfa251b348d8e38 (patch)
tree65af3119543151262b75b8145fcd75327a9cfe92
parent04eae221e7c0089ae974f86e3f6fe156d4cb56ce (diff)
dual mode - check for ERF only
-rwxr-xr-xscripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py3
-rwxr-xr-xscripts/automation/trex_control_plane/stl/trex_stl_lib/utils/parsing_opts.py2
-rwxr-xr-xsrc/common/captureFile.h3
-rwxr-xr-xsrc/common/erf.h5
-rwxr-xr-xsrc/common/pcap.h6
-rw-r--r--src/rpc-server/commands/trex_rpc_cmd_general.cpp10
-rw-r--r--src/stateless/cp/trex_stateless_port.cpp3
7 files changed, 28 insertions, 4 deletions
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
index 2c1fa5e9..b4a7b4c1 100755
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
@@ -2234,6 +2234,9 @@ class STLClient(object):
# for dual mode check that all are masters
if is_dual:
+ if not pcap_filename.endswith('erf'):
+ raise STLError("dual mode: only ERF format is supported for dual mode")
+
for port in ports:
master = port
slave = port ^ 0x1
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/parsing_opts.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/parsing_opts.py
index 4e57aae3..779f35db 100755
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/parsing_opts.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/parsing_opts.py
@@ -317,7 +317,7 @@ OPTIONS_DB = {MULTIPLIER: ArgumentPack(['-m', '--multiplier'],
DUAL: ArgumentPack(['--dual'],
{"action": "store_true",
'default': False,
- 'help': "Transmit in a dual mode - requires a slave attached to the port"}),
+ 'help': "Transmit in a dual mode - requires ownership on the adjacent port"}),
FILE_PATH: ArgumentPack(['-f'],
{'metavar': 'FILE',
diff --git a/src/common/captureFile.h b/src/common/captureFile.h
index 32b98272..fefa62bd 100755
--- a/src/common/captureFile.h
+++ b/src/common/captureFile.h
@@ -183,6 +183,9 @@ public:
* open file for reading.
*/
virtual bool Create(char * name, int loops = 0) = 0;
+
+ virtual capture_type_e get_type() = 0;
+
protected:
int m_loops;
uint64_t m_file_size;
diff --git a/src/common/erf.h b/src/common/erf.h
index 299bcdc5..2feb4fd6 100755
--- a/src/common/erf.h
+++ b/src/common/erf.h
@@ -248,6 +248,11 @@ public:
bool Create(char *filename, int loops = 0);
void Delete();
virtual bool ReadPacket(CCapPktRaw * lpPacket);
+
+ virtual capture_type_e get_type() {
+ return ERF;
+ }
+
private:
FILE * m_handle;
};
diff --git a/src/common/pcap.h b/src/common/pcap.h
index fb266e31..01c981d7 100755
--- a/src/common/pcap.h
+++ b/src/common/pcap.h
@@ -79,9 +79,13 @@ public:
* otherwise (reached eof)
*/
virtual bool ReadPacket(CCapPktRaw *lpPacket);
- virtual void Rewind();
+ virtual void Rewind();
+ virtual capture_type_e get_type() {
+ return LIBPCAP;
+ }
+
private:
LibPCapReader(LibPCapReader &);
diff --git a/src/rpc-server/commands/trex_rpc_cmd_general.cpp b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
index ba3c1658..85f77a7f 100644
--- a/src/rpc-server/commands/trex_rpc_cmd_general.cpp
+++ b/src/rpc-server/commands/trex_rpc_cmd_general.cpp
@@ -525,8 +525,18 @@ TrexRpcCmdPushRemote::_run(const Json::Value &params, Json::Value &result) {
if (!slave->get_owner().verify(slave_handler)) {
generate_execute_err(result, "incorrect or missing slave port handler");
}
+
+ std::stringstream ss;
+ CCapReaderBase *reader = CCapReaderFactory::CreateReader((char *)pcap_filename.c_str(), 0, ss);
+ if (!reader) {
+ generate_execute_err(result, ss.str());
+ }
+ if (reader->get_type() != ERF) {
+ generate_execute_err(result, "dual mode is only supported on ERF format");
+ }
}
+
try {
port->push_remote(pcap_filename, ipg_usec, speedup, count, duration, is_dual);
} catch (const TrexException &ex) {
diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp
index df50d3e2..5162c477 100644
--- a/src/stateless/cp/trex_stateless_port.cpp
+++ b/src/stateless/cp/trex_stateless_port.cpp
@@ -504,9 +504,8 @@ TrexStatelessPort::push_remote(const std::string &pcap_filename,
verify_state(PORT_STATE_IDLE | PORT_STATE_STREAMS, "push_remote");
/* check that file exists */
- CCapReaderBase *reader;
std::stringstream ss;
- reader = CCapReaderFactory::CreateReader((char *)pcap_filename.c_str(), 0, ss);
+ CCapReaderBase *reader = CCapReaderFactory::CreateReader((char *)pcap_filename.c_str(), 0, ss);
if (!reader) {
throw TrexException(ss.str());
}