From 5a951d9435dd13b8c785969f1fd85b1c19743ab0 Mon Sep 17 00:00:00 2001 From: Hanoh Haim Date: Tue, 23 Feb 2016 16:13:46 +0200 Subject: add to mask instruction add_value field --- src/rpc-server/commands/trex_rpc_cmd_stream.cpp | 2 ++ src/stateless/cp/trex_stream_vm.cpp | 5 ++++- src/stateless/cp/trex_stream_vm.h | 7 ++++++- 3 files changed, 12 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp index 50295c7c..93a680c9 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp @@ -319,6 +319,7 @@ TrexRpcCmdAddStream::parse_vm_instr_write_mask_flow_var(const Json::Value &inst, uint16_t pkt_cast_size = parse_uint16(inst, "pkt_cast_size", result); uint32_t mask = parse_uint32(inst, "mask", result); int shift = parse_int(inst, "shift", result); + int add_value = parse_int(inst, "add_value", result); bool is_big_endian = parse_bool(inst, "is_big_endian", result); stream->m_vm.add_instruction(new StreamVmInstructionWriteMaskToPkt(flow_var_name, @@ -326,6 +327,7 @@ TrexRpcCmdAddStream::parse_vm_instr_write_mask_flow_var(const Json::Value &inst, (uint8_t)pkt_cast_size, mask, shift, + add_value, is_big_endian)); } diff --git a/src/stateless/cp/trex_stream_vm.cpp b/src/stateless/cp/trex_stream_vm.cpp index b0cadfb6..d8395ba4 100644 --- a/src/stateless/cp/trex_stream_vm.cpp +++ b/src/stateless/cp/trex_stream_vm.cpp @@ -84,7 +84,7 @@ void StreamVmInstructionFlowMan::sanity_check(uint32_t ins_id,StreamVm *lp){ void StreamVmInstructionWriteMaskToPkt::Dump(FILE *fd){ - fprintf(fd," flow_var:%s, offset:%lu, cast_size:%lu, mask:0x%lx, shift:%ld, is_big:%lu \n",m_flow_var_name.c_str(),(ulong)m_pkt_offset,(ulong)m_pkt_cast_size,(ulong)m_mask,(long)m_shift,(ulong)(m_is_big_endian?1:0)); + fprintf(fd," flow_var:%s, offset:%lu, cast_size:%lu, mask:0x%lx, shift:%ld, add:%ld, is_big:%lu \n",m_flow_var_name.c_str(),(ulong)m_pkt_offset,(ulong)m_pkt_cast_size,(ulong)m_mask,(long)m_shift,(long)m_add_value,(ulong)(m_is_big_endian?1:0)); } @@ -735,6 +735,7 @@ void StreamVm::build_program(){ pmask.m_flags = flags; pmask.m_var_offset = flow_offset; pmask.m_shift = lpPkt->m_shift; + pmask.m_add_value = lpPkt->m_add_value; pmask.m_pkt_cast_size = cast_size; pmask.m_flowv_cast_size = op_size; pmask.m_pkt_offset = lpPkt->m_pkt_offset; @@ -1343,6 +1344,8 @@ void StreamDPOpPktWrMask::wr(uint8_t * flow_var_base, assert(0); } + val+=m_add_value; + /* shift the flow var val */ if (m_shift>0) { val=val<