From 7c362a7c7355d4487d4d6eefc188c16a56418373 Mon Sep 17 00:00:00 2001 From: Hanoh Haim Date: Sun, 5 Mar 2017 15:09:57 +0200 Subject: [PATCH] fix STLVmFlowVarRepetableRandom typo instruction Signed-off-by: Hanoh Haim --- .../doc_stl/api/field_engine.rst | 6 +++--- .../trex_stl_lib/trex_stl_packet_builder_scapy.py | 23 +++++++++++++++++---- scripts/exp/rtsp_short3-0.erf | Bin 0 -> 20032 bytes scripts/stl/udp_1pkt_repeat_random.py | 2 +- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/scripts/automation/trex_control_plane/doc_stl/api/field_engine.rst b/scripts/automation/trex_control_plane/doc_stl/api/field_engine.rst index cac2f5ab..47222aa2 100755 --- a/scripts/automation/trex_control_plane/doc_stl/api/field_engine.rst +++ b/scripts/automation/trex_control_plane/doc_stl/api/field_engine.rst @@ -163,10 +163,10 @@ STLVmTupleGen :members: :member-order: bysource -STLVmFlowVarRepetableRandom +STLVmFlowVarRepeatableRandom ---------------------------- -.. autoclass:: trex_stl_lib.trex_stl_packet_builder_scapy.STLVmFlowVarRepetableRandom +.. autoclass:: trex_stl_lib.trex_stl_packet_builder_scapy.STLVmFlowVarRepeatableRandom :members: :member-order: bysource @@ -236,7 +236,7 @@ Field Engine snippet vm = STLScVmRaw( [ STLVmFlowVar ( "ip_src", min_value="10.0.0.1", max_value="10.0.0.255", size=4, step=1,op="inc"), - STLVmFlowVarRepetableRandom ( "ip_dst", + STLVmFlowVarRepeatableRandom ( "ip_dst", min_value="48.0.0.1", max_value="48.0.0.255", size=4, diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py index edd3d91e..d50f4050 100755 --- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py +++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py @@ -743,13 +743,16 @@ class STLVmFlowVar(CTRexVmDescBase): def get_var_name(self): return [self.name] -class STLVmFlowVarRepetableRandom(CTRexVmDescBase): +class STLVmFlowVarRepeatableRandom(CTRexVmDescBase): def __init__(self, name, size=4, limit=100, seed=None, min_value=0, max_value=None): """ Flow variable instruction for repeatable random with limit number of generating numbers. Allocates memory on a stream context. The size argument determines the variable size. Could be 1,2,4 or 8 + 1. The maximum number of distinct values will 'limit'. There could be a case of repetition + 2. The values will be repeated after 'limit' number of values. + :parameters: name : string Name of the stream variable @@ -775,15 +778,15 @@ class STLVmFlowVarRepetableRandom(CTRexVmDescBase): # Example1 # input , 1 byte or random with limit of 5 - STLVmFlowVarRepetableRandom("var1",size=1,limit=5) + STLVmFlowVarRepeatableRandom("var1",size=1,limit=5) # output 255,1,7,129,8, ==> repeat 255,1,7,129,8 - STLVmFlowVarRepetableRandom("var1",size=4,limit=100,min_value=0x12345678, max_value=0x32345678) + STLVmFlowVarRepeatableRandom("var1",size=4,limit=100,min_value=0x12345678, max_value=0x32345678) """ - super(STLVmFlowVarRepetableRandom, self).__init__() + super(STLVmFlowVarRepeatableRandom, self).__init__() self.name = name; validate_type('name', name, str) self.size =size @@ -811,6 +814,18 @@ class STLVmFlowVarRepetableRandom(CTRexVmDescBase): def get_var_name(self): return [self.name] +class STLVmFlowVarRepetableRandom(STLVmFlowVarRepeatableRandom): + + def __init__(self, name, size=4, limit=100, seed=None, min_value=0, max_value=None): + super(STLVmFlowVarRepetableRandom, self).__init__(name, size, limit, seed, min_value, max_value) + + def get_obj (self): + return CTRexVmInsFlowVarRandLimit(self.name, self.size, self.limit, self.seed, self.min_value, self.max_value); + + def get_var_name(self): + return [self.name] + + class STLVmFixChecksumHw(CTRexVmDescBase): def __init__(self, l3_offset,l4_offset,l4_type): """ diff --git a/scripts/exp/rtsp_short3-0.erf b/scripts/exp/rtsp_short3-0.erf index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1b178df9ceae7e4303cd67501c7543255687f2fe 100644 GIT binary patch literal 20032 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