diff options
Diffstat (limited to 'src/rpc-server')
-rw-r--r-- | src/rpc-server/commands/trex_rpc_cmd_stream.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp index d8f7e772..51db0b20 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp @@ -82,7 +82,7 @@ TrexRpcCmdAddStream::_run(const Json::Value ¶ms, Json::Value &result) { stream->m_pkt.meta = parse_string(pkt, "meta", result); /* parse VM */ - const Json::Value &vm = parse_array(section ,"vm", result); + const Json::Value &vm = parse_object(section ,"vm", result); parse_vm(vm, stream, result); /* parse RX info */ @@ -230,8 +230,7 @@ TrexRpcCmdAddStream::parse_vm_instr_flow_var(const Json::Value &inst, TrexStream op_type, init_value, min_value, - max_value - )); + max_value)); } void @@ -249,9 +248,12 @@ TrexRpcCmdAddStream::parse_vm_instr_write_flow_var(const Json::Value &inst, Trex void TrexRpcCmdAddStream::parse_vm(const Json::Value &vm, TrexStream *stream, Json::Value &result) { + + const Json::Value &instructions = parse_array(vm ,"instructions", result); + /* array of VM instructions on vm */ - for (int i = 0; i < vm.size(); i++) { - const Json::Value & inst = parse_object(vm, i, result); + for (int i = 0; i < instructions.size(); i++) { + const Json::Value & inst = parse_object(instructions, i, result); auto vm_types = {"fix_checksum_ipv4", "flow_var", "write_flow_var","tuple_flow_var"}; std::string vm_type = parse_choice(inst, "type", vm_types, result); @@ -273,6 +275,17 @@ TrexRpcCmdAddStream::parse_vm(const Json::Value &vm, TrexStream *stream, Json::V throw TrexRpcException("internal error"); } } + + const std::string &var_name = parse_string(vm, "split_by_var", result); + if (var_name != "") { + StreamVmInstructionVar *instr = stream->m_vm.lookup_var_by_name(var_name); + if (!instr) { + std::stringstream ss; + ss << "VM: request to split by variable '" << var_name << "' but does not exists"; + generate_parse_err(result, ss.str()); + } + stream->m_vm.set_split_instruction(instr); + } } void |