summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/stl/trex_stl_lib
diff options
context:
space:
mode:
authorHanoh Haim <hhaim@cisco.com>2016-03-31 16:20:20 +0300
committerHanoh Haim <hhaim@cisco.com>2016-03-31 16:20:20 +0300
commita6f72a194d47e5df1e822cbcec22f1f4df1da482 (patch)
treec6fe8e0c65925707c5cb107ef5ee9b877a014fa1 /scripts/automation/trex_control_plane/stl/trex_stl_lib
parent300ca9bcaa3309665421efd5ed51c49f9b81006d (diff)
parenta627a1d4a35f27e0da4599fbeddae97bc5470010 (diff)
Merge David4 branch
Diffstat (limited to 'scripts/automation/trex_control_plane/stl/trex_stl_lib')
-rwxr-xr-x[-rw-r--r--]scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py196
-rwxr-xr-x[-rw-r--r--]scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py185
-rwxr-xr-x[-rw-r--r--]scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py110
3 files changed, 250 insertions, 241 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 d5e1e44a..7fbd2808 100644..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
@@ -40,15 +40,15 @@ class LoggerApi(object):
# implemented by specific logger
def write(self, msg, newline = True):
- raise Exception("implement this")
+ raise Exception("Implement this")
# implemented by specific logger
def flush(self):
- raise Exception("implement this")
+ raise Exception("Implement this")
def set_verbose (self, level):
if not level in range(self.VERBOSE_QUIET, self.VERBOSE_HIGH + 1):
- raise ValueError("bad value provided for logger")
+ raise ValueError("Bad value provided for logger")
self.level = level
@@ -146,7 +146,7 @@ class AsyncEventHandler(object):
def on_async_dead (self):
if self.client.connected:
- msg = 'lost connection to server'
+ msg = 'Lost connection to server'
self.__add_event_log(msg, 'local', True)
self.client.connected = False
@@ -319,7 +319,7 @@ class AsyncEventHandler(object):
############################ #############################
class CCommLink(object):
- """describes the connectivity of the stateless client method"""
+ """Describes the connectivity of the stateless client method"""
def __init__(self, server="localhost", port=5050, virtual=False, prn_func = None):
self.virtual = virtual
self.server = server
@@ -380,7 +380,7 @@ class CCommLink(object):
############################ #############################
class STLClient(object):
- """TRex Stateless client object- gives operations per TRex/user"""
+ """TRex Stateless client object - gives operations per TRex/user"""
def __init__(self,
username = common.get_current_user(),
@@ -391,7 +391,7 @@ class STLClient(object):
logger = None,
virtual = False):
"""
- Set the connection setting
+ Configure the connection settings
:parameters:
username : string
@@ -496,11 +496,11 @@ class STLClient(object):
port_id_list = [port_id_list]
if not isinstance(port_id_list, list):
- raise ValueError("bad port id list: {0}".format(port_id_list))
+ raise ValueError("Bad port id list: {0}".format(port_id_list))
for port_id in port_id_list:
if not isinstance(port_id, int) or (port_id < 0) or (port_id > self.get_port_count()):
- raise ValueError("bad port id {0}".format(port_id))
+ raise ValueError("Bad port id {0}".format(port_id))
return port_id_list
@@ -727,7 +727,7 @@ class STLClient(object):
# connect async channel
- self.logger.pre_cmd("connecting to publisher server on {0}:{1}".format(self.connection_info['server'], self.connection_info['async_port']))
+ self.logger.pre_cmd("Connecting to publisher server on {0}:{1}".format(self.connection_info['server'], self.connection_info['async_port']))
rc = self.async_client.connect()
self.logger.post_cmd(rc)
@@ -765,7 +765,7 @@ class STLClient(object):
if clear_flow_stats:
self.flow_stats.clear_stats()
- self.logger.log_cmd("clearing stats on port(s) {0}:".format(port_id_list))
+ self.logger.log_cmd("Clearing stats on port(s) {0}:".format(port_id_list))
return RC
@@ -932,13 +932,13 @@ class STLClient(object):
# return verbose level of the logger
def get_verbose (self):
"""
- get the verbose mode
+ Get the verbose mode
:parameters:
none
:return:
- get the verbose mode as Bool
+ Get the verbose mode as Bool
:raises:
None
@@ -952,10 +952,10 @@ class STLClient(object):
is_all_ports_acquired
:parameters:
- none
+ None
:return:
- return True if all ports are acquired
+ Returns True if all ports are acquired
:raises:
None
@@ -969,7 +969,7 @@ class STLClient(object):
"""
:parameters:
- none
+ None
:return:
is_connected
@@ -987,10 +987,10 @@ class STLClient(object):
"""
:parameters:
- none
+ None
:return:
- connection dict
+ Connection dict
:raises:
None
@@ -1005,10 +1005,10 @@ class STLClient(object):
"""
:parameters:
- none
+ None
:return:
- connection dict
+ Connection dict
:raises:
None
@@ -1022,10 +1022,10 @@ class STLClient(object):
"""
:parameters:
- none
+ None
:return:
- connection dict
+ Connection dict
:raises:
None
@@ -1039,10 +1039,10 @@ class STLClient(object):
"""
:parameters:
- none
+ None
:return:
- connection dict
+ Connection dict
:raises:
None
@@ -1056,10 +1056,10 @@ class STLClient(object):
"""
:parameters:
- none
+ None
:return:
- connection dict
+ Connection dict
:raises:
None
@@ -1083,10 +1083,10 @@ class STLClient(object):
"""
:parameters:
- none
+ None
:return:
- connection dict
+ Connection dict
:raises:
None
@@ -1208,9 +1208,9 @@ class STLClient(object):
:parameters:
stop_traffic : bool
- tries to stop traffic before disconnecting
+ Attempts to stop traffic before disconnecting.
release_ports : bool
- tries to release all the acquired ports
+ Attempts to release all the acquired ports.
"""
@@ -1236,9 +1236,9 @@ class STLClient(object):
:parameters:
ports : list
- ports to execute the command
+ Ports on which to execute the command
force : bool
- force acquire the ports
+ Force acquire the ports.
:raises:
+ :exc:`STLError`
@@ -1271,7 +1271,7 @@ class STLClient(object):
:parameters:
ports : list
- ports to execute the command
+ Ports on which to execute the command
:raises:
+ :exc:`STLError`
@@ -1314,7 +1314,7 @@ class STLClient(object):
@__api_check(True)
def get_active_pgids(self):
"""
- Get active group ids
+ Get active group IDs
:parameters:
None
@@ -1338,11 +1338,11 @@ class STLClient(object):
@__api_check(True)
def reset(self, ports = None):
"""
- force acquire ports, stop the traffic, remove all streams and clear stats
+ Force acquire ports, stop the traffic, remove all streams and clear stats
:parameters:
ports : list
- ports to execute the command
+ Ports on which to execute the command
:raises:
@@ -1367,7 +1367,7 @@ class STLClient(object):
:parameters:
ports : list
- ports to execute the command
+ Ports on which to execute the command
:raises:
@@ -1390,16 +1390,16 @@ class STLClient(object):
@__api_check(True)
def add_streams (self, streams, ports = None):
"""
- add a list of streams to port(s)
+ Add a list of streams to port(s)
:parameters:
ports : list
- ports to execute the command
+ Ports on which to execute the command
streams: list
- streams to attach (or profile)
+ Streams to attach (or profile)
:returns:
- list of stream IDs in order of the stream list
+ List of stream IDs in order of the stream list
:raises:
+ :exc:`STLError`
@@ -1435,13 +1435,13 @@ class STLClient(object):
@__api_check(True)
def remove_streams (self, stream_id_list, ports = None):
"""
- remove a list of streams from ports
+ Remove a list of streams from ports
:parameters:
ports : list
- ports to execute the command
+ Ports on which to execute the command
stream_id_list: list
- stream id list to remove
+ Stream id list to remove
:raises:
@@ -1479,27 +1479,29 @@ class STLClient(object):
duration = -1,
total = False):
"""
- start traffic on port(s)
+ Start traffic on port(s)
:parameters:
ports : list
- ports to execute command
+ Ports on which to execute the command
mult : str
- multiplier in a form of pps, bps, or line util in %
- examples: "5kpps", "10gbps", "85%", "32mbps"
+ Multiplier in a form of pps, bps, or line util in %
+ Examples: "5kpps", "10gbps", "85%", "32mbps"
force : bool
- imply stopping the port of active and also
- forces a profile that exceeds the L1 BW
+ If the ports are not in stopped mode or do not have sufficient bandwidth for the traffic, determines whether to stop the current traffic and force start.
+ True: Force start
+ False: Do not force start
duration : int
- limit the run for time in seconds
- -1 means unlimited
+ Limit the run time (seconds)
+ -1 = unlimited
total : bool
- should the B/W be divided by the ports
- or duplicated for each
+ Determines whether to divide the configured bandwidth among the ports, or to duplicate the bandwidth for each port.
+ True: Divide bandwidth among the ports
+ False: Duplicate
:raises:
@@ -1556,11 +1558,11 @@ class STLClient(object):
@__api_check(True)
def stop (self, ports = None, rx_delay_ms = 10):
"""
- stop port(s)
+ Stop port(s)
:parameters:
ports : list
- ports to execute the command
+ Ports on which to execute the command
rx_delay_ms : int
time to wait until RX filters are removed
@@ -1596,23 +1598,26 @@ class STLClient(object):
@__api_check(True)
def update (self, ports = None, mult = "1", total = False, force = False):
"""
- update traffic on port(s)
+ Update traffic on port(s)
:parameters:
ports : list
- ports to execute command
+ Ports on which to execute the command
mult : str
- multiplier in a form of pps, bps, or line util in %
- and also with +/-
- examples: "5kpps+", "10gbps-", "85%", "32mbps", "20%+"
+ Multiplier in a form of pps, bps, or line util in %
+ Can also specify +/-
+ Examples: "5kpps+", "10gbps-", "85%", "32mbps", "20%+"
force : bool
- forces a profile that exceeds the L1 BW
+ If the ports are not in stopped mode or do not have sufficient bandwidth for the traffic, determines whether to stop the current traffic and force start.
+ True: Force start
+ False: Do not force start
total : bool
- should the B/W be divided by the ports
- or duplicated for each
+ Determines whether to divide the configured bandwidth among the ports, or to duplicate the bandwidth for each port.
+ True: Divide bandwidth among the ports
+ False: Duplicate
:raises:
@@ -1650,11 +1655,11 @@ class STLClient(object):
@__api_check(True)
def pause (self, ports = None):
"""
- pause traffic on port(s). works only for ports that are active and all streams are in cont mode
+ Pause traffic on port(s). Works only for ports that are active, and only if all streams are in Continuous mode.
:parameters:
ports : list
- ports to execute command
+ Ports on which to execute the command
:raises:
+ :exc:`STLError`
@@ -1675,11 +1680,11 @@ class STLClient(object):
@__api_check(True)
def resume (self, ports = None):
"""
- resume traffic on port(s)
+ Resume traffic on port(s)
:parameters:
ports : list
- ports to execute command
+ Ports on which to execute the command
:raises:
+ :exc:`STLError`
@@ -1702,23 +1707,24 @@ class STLClient(object):
@__api_check(True)
def validate (self, ports = None, mult = "1", duration = "-1", total = False):
"""
- validate port(s) configuration
+ Validate port(s) configuration
:parameters:
ports : list
- ports to execute command
+ Ports on which to execute the command
mult : str
- multiplier in a form of pps, bps, or line util in %
- examples: "5kpps", "10gbps", "85%", "32mbps"
+ Multiplier in a form of pps, bps, or line util in %
+ Examples: "5kpps", "10gbps", "85%", "32mbps"
duration : int
- limit the run for time in seconds
- -1 means unlimited
+ Limit the run time (seconds)
+ -1 = unlimited
total : bool
- should the B/W be divided by the ports
- or duplicated for each
+ Determines whether to divide the configured bandwidth among the ports, or to duplicate the bandwidth for each port.
+ True: Divide bandwidth among the ports
+ False: Duplicate
:raises:
+ :exc:`STLError`
@@ -1754,17 +1760,17 @@ class STLClient(object):
@__api_check(False)
def clear_stats (self, ports = None, clear_global = True, clear_flow_stats = True):
"""
- clear stats on port(s)
+ Clear stats on port(s)
:parameters:
ports : list
- ports to execute command
+ Ports on which to execute the command
clear_global : bool
- clear the global stats
+ Clear the global stats
clear_flow_stats : bool
- clear the flow stats
+ Clear the flow stats
:raises:
+ :exc:`STLError`
@@ -1788,11 +1794,11 @@ class STLClient(object):
@__api_check(True)
def is_traffic_active (self, ports = None):
"""
- retrun if specify port(s) has traffic
+ Return if specified port(s) have traffic
:parameters:
ports : list
- ports to execute command
+ Ports on which to execute the command
:raises:
@@ -1811,11 +1817,11 @@ class STLClient(object):
@__api_check(True)
def wait_on_traffic (self, ports = None, timeout = 60, rx_delay_ms = 10):
"""
- block until specify port(s) traffic has ended
+ Block until traffic on specified port(s) has ended
:parameters:
ports : list
- ports to execute command
+ Ports on which to execute the command
timeout : int
timeout in seconds
@@ -1855,10 +1861,10 @@ class STLClient(object):
@__api_check(True)
def set_port_attr (self, ports = None, promiscuous = None):
"""
- set port(s) attributes
+ Set port attributes
:parameters:
- promiscuous - set this to True or False
+ promiscuous - True or False
:raises:
None
@@ -1889,7 +1895,7 @@ class STLClient(object):
def clear_events (self):
"""
- clear all events
+ Clear all events
:parameters:
None
@@ -1965,7 +1971,7 @@ class STLClient(object):
@__console
def start_line (self, line):
- '''Start selected traffic in specified ports on TRex\n'''
+ '''Start selected traffic on specified ports on TRex\n'''
# define a parser
parser = parsing_opts.gen_parser(self,
"start",
@@ -2052,7 +2058,7 @@ class STLClient(object):
@__console
def stop_line (self, line):
- '''Stop active traffic in specified ports on TRex\n'''
+ '''Stop active traffic on specified ports on TRex\n'''
parser = parsing_opts.gen_parser(self,
"stop",
self.stop_line.__doc__,
@@ -2105,7 +2111,7 @@ class STLClient(object):
@__console
def pause_line (self, line):
- '''Pause active traffic in specified ports on TRex\n'''
+ '''Pause active traffic on specified ports on TRex\n'''
parser = parsing_opts.gen_parser(self,
"pause",
self.pause_line.__doc__,
@@ -2130,7 +2136,7 @@ class STLClient(object):
@__console
def resume_line (self, line):
- '''Resume active traffic in specified ports on TRex\n'''
+ '''Resume active traffic on specified ports on TRex\n'''
parser = parsing_opts.gen_parser(self,
"resume",
self.resume_line.__doc__,
@@ -2174,7 +2180,7 @@ class STLClient(object):
@__console
def show_stats_line (self, line):
- '''Fetch statistics from TRex server by port\n'''
+ '''Get statistics from TRex server by port\n'''
# define a parser
parser = parsing_opts.gen_parser(self,
"stats",
@@ -2205,7 +2211,7 @@ class STLClient(object):
@__console
def show_streams_line(self, line):
- '''Fetch streams statistics from TRex server by port\n'''
+ '''Get stream statistics from TRex server by port\n'''
# define a parser
parser = parsing_opts.gen_parser(self,
"streams",
@@ -2234,7 +2240,7 @@ class STLClient(object):
@__console
def validate_line (self, line):
- '''validates port(s) stream configuration\n'''
+ '''Validates port(s) stream configuration\n'''
parser = parsing_opts.gen_parser(self,
"validate",
@@ -2252,7 +2258,7 @@ class STLClient(object):
@__console
def push_line (self, line):
- '''Push a PCAP file '''
+ '''Push a pcap file '''
parser = parsing_opts.gen_parser(self,
"push",
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 a7064853..f8517a47 100644..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
@@ -35,7 +35,7 @@ def safe_ord (c):
elif type(c) is int:
return c
else:
- raise TypeError("cannot convert: {0} of type: {1}".format(c, type(c)))
+ raise TypeError("Cannot convert: {0} of type: {1}".format(c, type(c)))
def _buffer_to_num(str_buffer):
validate_type('str_buffer', str_buffer, bytes)
@@ -48,18 +48,18 @@ def _buffer_to_num(str_buffer):
def ipv4_str_to_num (ipv4_buffer):
validate_type('ipv4_buffer', ipv4_buffer, bytes)
- assert len(ipv4_buffer)==4, 'size of ipv4_buffer is not 4'
+ assert len(ipv4_buffer)==4, 'Size of ipv4_buffer is not 4'
return _buffer_to_num(ipv4_buffer)
def mac_str_to_num (mac_buffer):
validate_type('mac_buffer', mac_buffer, bytes)
- assert len(mac_buffer)==6, 'size of mac_buffer is not 6'
+ assert len(mac_buffer)==6, 'Size of mac_buffer is not 6'
return _buffer_to_num(mac_buffer)
def is_valid_ipv4(ip_addr):
"""
- return buffer in network order
+ Return buffer in network order
"""
if type(ip_addr) == bytes and len(ip_addr) == 4:
return ip_addr
@@ -72,12 +72,12 @@ def is_valid_ipv4(ip_addr):
except AttributeError: # no inet_pton here, sorry
return socket.inet_aton(ip_addr)
except socket.error: # not a valid address
- raise CTRexPacketBuildException(-10,"not valid ipv4 format");
+ raise CTRexPacketBuildException(-10,"Not valid ipv4 format");
def is_valid_ipv6(ipv6_addr):
"""
- return buffer in network order
+ Return buffer in network order
"""
if type(ipv6_addr) == bytes and len(ipv6_addr) == 16:
return ipv6_addr
@@ -107,12 +107,12 @@ class CTRexScFieldRangeBase(CTRexScriptsBase):
self.field_name =field_name
self.field_type =field_type
if not self.field_type in CTRexScFieldRangeBase.FILED_TYPES :
- raise CTRexPacketBuildException(-12, 'field type should be in %s' % FILED_TYPES);
+ raise CTRexPacketBuildException(-12, 'Field type should be in %s' % FILED_TYPES);
class CTRexScFieldRangeValue(CTRexScFieldRangeBase):
"""
- range of field value
+ Range of field values
"""
def __init__(self, field_name,
field_type,
@@ -123,14 +123,14 @@ class CTRexScFieldRangeValue(CTRexScFieldRangeBase):
self.min_value =min_value;
self.max_value =max_value;
if min_value > max_value:
- raise CTRexPacketBuildException(-12, 'min is greater than max');
+ raise CTRexPacketBuildException(-12, 'Invalid range: min is greater than max.');
if min_value == max_value:
- raise CTRexPacketBuildException(-13, "min value is equal to max value, you can't use this type of range");
+ raise CTRexPacketBuildException(-13, "Invalid range: min value is equal to max value.");
class CTRexScIpv4SimpleRange(CTRexScFieldRangeBase):
"""
- range of ipv4 ip
+ Range of ipv4 ip
"""
def __init__(self, field_name, field_type, min_ip, max_ip):
super(CTRexScIpv4SimpleRange, self).__init__(field_name,field_type)
@@ -144,7 +144,7 @@ class CTRexScIpv4SimpleRange(CTRexScFieldRangeBase):
class CTRexScIpv4TupleGen(CTRexScriptsBase):
"""
- range tuple
+ Range tuple
"""
FLAGS_ULIMIT_FLOWS =1
@@ -166,7 +166,7 @@ class CTRexScIpv4TupleGen(CTRexScriptsBase):
class CTRexScTrimPacketSize(CTRexScriptsBase):
"""
- trim packet size. field type is CTRexScFieldRangeBase.FILED_TYPES = ["inc","dec","rand"]
+ Trim packet size. Field type is CTRexScFieldRangeBase.FILED_TYPES = ["inc","dec","rand"]
"""
def __init__(self,field_type="rand",min_pkt_size=None, max_pkt_size=None):
super(CTRexScTrimPacketSize, self).__init__()
@@ -183,11 +183,11 @@ class CTRexScTrimPacketSize(CTRexScriptsBase):
class STLScVmRaw(CTRexScriptsBase):
"""
- raw instructions
+ Raw instructions
"""
def __init__(self,list_of_commands=None,split_by_field=None):
"""
- include a list of a basic instructions objects
+ Include a list of a basic instructions objects.
:parameters:
list_of_commands : list
@@ -197,7 +197,7 @@ class STLScVmRaw(CTRexScriptsBase):
by which field to split to threads
- The following example will split the generated traffic by "ip_src" variable
+ The following example splits the generated traffic by "ip_src" variable.
.. code-block:: python
:caption: Split by
@@ -241,7 +241,7 @@ class STLScVmRaw(CTRexScriptsBase):
class CTRexVmInsBase(object):
"""
- instruction base
+ Instruction base
"""
def __init__(self, ins_type):
self.type = ins_type
@@ -334,7 +334,7 @@ class CTRexVmEngine(object):
def __init__(self):
"""
- inlcude list of instruction
+ Inlcude list of instructions.
"""
super(CTRexVmEngine, self).__init__()
self.ins=[]
@@ -390,7 +390,7 @@ class CTRexScapyPktUtl(object):
def get_pkt_layers(self):
"""
- return string 'IP:UDP:TCP'
+ Return string 'IP:UDP:TCP'
"""
l=self.get_list_iter ();
l1=map(lambda p: p.name,l );
@@ -398,7 +398,7 @@ class CTRexScapyPktUtl(object):
def _layer_offset(self, name, cnt = 0):
"""
- return offset of layer e.g 'IP',1 will return offfset of layer ip:1
+ Return offset of layer. Example: 'IP',1 returns offfset of layer ip:1
"""
save_cnt=cnt
for pkt in self.pkt_iter ():
@@ -413,7 +413,7 @@ class CTRexScapyPktUtl(object):
def layer_offset(self, name, cnt = 0):
"""
- return offset of layer e.g 'IP',1 will return offfset of layer ip:1
+ Return offset of layer. Example: 'IP',1 returns offfset of layer ip:1
"""
save_cnt=cnt
for pkt in self.pkt_iter ():
@@ -427,7 +427,7 @@ class CTRexScapyPktUtl(object):
def get_field_offet(self, layer, layer_cnt, field_name):
"""
- return offset of layer e.g 'IP',1 will return offfset of layer ip:1
+ Return offset of layer. Example: 'IP',1 returns offfset of layer ip:1
"""
t=self._layer_offset(layer,layer_cnt);
l_offset=t[1];
@@ -439,11 +439,11 @@ class CTRexScapyPktUtl(object):
if f.name == field_name:
return (l_offset+f.offset,f.get_size_bytes ());
- raise CTRexPacketBuildException(-11, "no layer %s-%d." % (name, save_cnt, field_name));
+ raise CTRexPacketBuildException(-11, "No layer %s-%d." % (name, save_cnt, field_name));
def get_layer_offet_by_str(self, layer_des):
"""
- return layer offset by string
+ Return layer offset by string.
:parameters:
@@ -469,21 +469,21 @@ class CTRexScapyPktUtl(object):
def get_field_offet_by_str(self, field_des):
"""
- return field_des (offset,size) layer:cnt.field
- for example
+ Return field_des (offset,size) layer:cnt.field
+ Example:
802|1Q.vlan get 802.1Q->valn replace | with .
IP.src
IP:0.src (first IP.src like IP.src)
- for example IP:1.src for internal IP
+ Example: IP:1.src for internal IP
- return (offset, size) as tuple
+ Return (offset, size) as tuple.
"""
s=field_des.split(".");
if len(s)!=2:
- raise CTRexPacketBuildException(-11, ("field desription should be layer:cnt.field e.g IP.src or IP:1.src"));
+ raise CTRexPacketBuildException(-11, ("Field desription should be layer:cnt.field Example: IP.src or IP:1.src"));
layer_ex = s[0].replace("|",".")
@@ -514,7 +514,7 @@ class CTRexScapyPktUtl(object):
class CTRexVmDescBase(object):
"""
- instruction base
+ Instruction base
"""
def __init__(self):
pass;
@@ -534,37 +534,37 @@ class CTRexVmDescBase(object):
def get_var_ref (self):
'''
- virtual function return a ref var name
+ Virtual function returns a ref var name.
'''
return None
def get_var_name(self):
'''
- virtual function return the varible name if exists
+ Virtual function returns the varible name if it exists.
'''
return None
def compile(self,parent):
'''
- virtual function to take parent than has function name_to_offset
+ Virtual function to take parent that has function name_to_offset.
'''
pass;
def valid_fv_size (size):
if not (size in CTRexVmInsFlowVar.VALID_SIZES):
- raise CTRexPacketBuildException(-11,("flow var has not valid size %d ") % size );
+ raise CTRexPacketBuildException(-11,("Flow var has invalid size %d ") % size );
def valid_fv_ops (op):
if not (op in CTRexVmInsFlowVar.OPERATIONS):
- raise CTRexPacketBuildException(-11,("flow var does not have a valid op %s ") % op );
+ raise CTRexPacketBuildException(-11,("Flow var has invalid op %s ") % op );
def convert_val (val):
if is_integer(val):
return val
if type(val) == str:
return ipv4_str_to_num (is_valid_ipv4(val))
- raise CTRexPacketBuildException(-11,("init val not valid %s ") % val );
+ raise CTRexPacketBuildException(-11,("init val invalid %s ") % val );
def check_for_int (val):
validate_type('val', val, int)
@@ -574,31 +574,32 @@ class STLVmFlowVar(CTRexVmDescBase):
def __init__(self, name, init_value=None, min_value=0, max_value=255, size=4, step=1,op="inc"):
"""
- Flow variable instruction. Allocate a variable on a stream context. The size of the variable could be determined
- The operation can be inc, dec and random. In case of increment and decrement operation, it is possible to set the "step" size.
- Initialization value, minimum and maximum value could be set too.
+ Flow variable instruction. Allocates a variable on a stream context. The size argument determines the variable size.
+ The operation can be inc, dec, and random.
+ For increment and decrement operations, can set the "step" size.
+ For all operations, can set initialization value, minimum and maximum value.
:parameters:
name : string
- The name of the stream variable
+ Name of the stream variable
init_value : int
- The init value of the variable. in case of None it will be min_value
+ Init value of the variable. If not specified, it will be min_value
min_value : int
- The min value
+ Min value
max_value : int
- The max value
+ Max value
size : int
- the number of bytes of the variable. could be 1,2,4,8 for uint8_t, uint16_t, uint32_t, uint64_t
+ Number of bytes of the variable. Possible values: 1,2,4,8 for uint8_t, uint16_t, uint32_t, uint64_t
step : int
- step in case of "inc","dec" operation
+ Step in case of "inc" or "dec" operations
op : string
- could be "inc", "dec", "random"
+ Possible values: "inc", "dec", "random"
.. code-block:: python
:caption: Example1
@@ -657,7 +658,7 @@ class STLVmFlowVar(CTRexVmDescBase):
class STLVmFixIpv4(CTRexVmDescBase):
def __init__(self, offset):
"""
- Fix IPv4 header checksum. should be added if the packet header was changed and there is a need to fix he checksum
+ Fix IPv4 header checksum. Use this if the packet header has changed and it is necessary to change the checksum.
:parameters:
offset : uint16_t or string
@@ -694,26 +695,28 @@ class STLVmWrFlowVar(CTRexVmDescBase):
def __init__(self, fv_name, pkt_offset, offset_fixup=0, add_val=0, is_big=True):
"""
Write a stream variable into a packet field.
- The write is done in size of the stream variable.
- In case there is a need to change the write have a look into the command `STLVmWrMaskFlowVar`.
- The Field name/offset can be given by name in this format ``header[:id].field``.
+ The write position is determined by the packet offset + offset fixup. The size of the write is determined by the stream variable.
+ Example: Offset 10, fixup 0, variable size 4. This function writes at 10, 11, 12, and 13.
+
+ For inromation about chaning the write size, offset, or fixup, see the `STLVmWrMaskFlowVar` command.
+ The Field name/offset can be given by name in the following format: ``header[:id].field``.
:parameters:
fv_name : string
- the stream variable to write to a packet offset
+ Stream variable to write to a packet offset.
pkt_offset : string or in
- the name of the field or offset in byte from packet start.
+ Name of the field or offset in bytes from packet start.
offset_fixup : int
- how many bytes to go forward. In case of a negative value go backward
+ Number of bytes to move forward. If negative, move backward.
add_val : int
- value to add to stream variable before writing it to packet field. can be used as a constant offset
+ Value to add to the stream variable before writing it to the packet field. Can be used as a constant offset.
is_big : bool
- how to write the variable to the the packet. is it big-edian or little edian
+ How to write the variable to the the packet. True=big-endian, False=little-endian
.. code-block:: python
:caption: Example3
@@ -759,7 +762,7 @@ class STLVmWrMaskFlowVar(CTRexVmDescBase):
"""
Write a stream variable into a packet field with some operations.
- Using this instruction the variable size and the field could be with different size.
+ Using this instruction, the variable size and the field can have different sizes.
Pseudocode of this code::
@@ -805,7 +808,7 @@ class STLVmWrMaskFlowVar(CTRexVmDescBase):
is_big : bool
how to write the variable to the the packet. is it big-edian or little edian
- Example 1- casting from uint16_t (var) to uint8_t (pkt)::
+ Example 1 - Cast from uint16_t (var) to uint8_t (pkt)::
base_pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)
@@ -824,7 +827,7 @@ class STLVmWrMaskFlowVar(CTRexVmDescBase):
pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)
- Example 2- change MSB of uint16_t variable::
+ Example 2 - Change MSB of uint16_t variable::
vm = STLScVmRaw( [ STLVmFlowVar(name="mac_src",
@@ -841,7 +844,7 @@ class STLVmWrMaskFlowVar(CTRexVmDescBase):
- Example 3- Every 2 packet change the MAC (shift right)::
+ Example 3 - Every 2 packets, change the MAC (shift right)::
vm = STLScVmRaw( [ STLVmFlowVar(name="mac_src",
min_value=1,
@@ -893,12 +896,12 @@ class STLVmWrMaskFlowVar(CTRexVmDescBase):
class STLVmTrimPktSize(CTRexVmDescBase):
"""
- Trim packet size by stream variable size. This instruction will only change the total packet size and will not fix up the fields to match the new size.
+ Trim the packet size by the stream variable size. This instruction only changes the total packet size, and does not repair the fields to match the new size.
:parameters:
fv_name : string
- the stream variable name. the value from this variable would be the new total packet size.
+ Stream variable name. The value of this variable is the new total packet size.
For Example::
@@ -959,8 +962,8 @@ class STLVmTrimPktSize(CTRexVmDescBase):
class STLVmTupleGen(CTRexVmDescBase):
def __init__(self,name, ip_min="0.0.0.1", ip_max="0.0.0.10", port_min=1025, port_max=65535, limit_flows=100000, flags=0):
"""
- Generate a struct with two varibles. ``var_name.ip`` as uint32_t and ``var_name.port`` as uint16_t
- The variable are dependent. When the ip variable is wrapped the port is getting increment.
+ Generate a struct with two variables: ``var_name.ip`` as uint32_t and ``var_name.port`` as uint16_t
+ The variables are dependent. When the ip variable value reaches its maximum, the port is incremented.
For:
@@ -1001,22 +1004,22 @@ class STLVmTupleGen(CTRexVmDescBase):
:parameters:
name : string
- The name of the stream struct.
+ Name of the stream struct.
ip_min : string or int
- The min value of the ip value. It can be in IPv4 format
+ Min value of the ip value. Number or IPv4 format.
ip_max : string or int
- The max value of the ip value. It can be in IPv4 format
+ Max value of the ip value. Number or IPv4 format.
port_min : int
- min value for port variable
+ Min value of port variable.
port_max : int
- max value for port variable
+ Max value of port variable.
limit_flows : int
- The limit of number of flows
+ Limit of number of flows.
flags : 0
@@ -1093,10 +1096,10 @@ class STLPktBuilder(CTrexPktBuilderInterface):
def __init__(self, pkt = None, pkt_buffer = None, vm = None, path_relative_to_profile = False, build_raw = False, remove_fcs = True):
"""
- This class defines a way to build a template packet, and Field Engine using scapy package.
- Using this class the user can also define how TRex will handle the packet by specifying the Field engine setting.
- pkt could be Scapy pkt or pcap file name
- When path_relative_to_profile is a True load pcap file from a path relative to the profile
+ This class defines a method for building a template packet and Field Engine using the Scapy package.
+ Using this class the user can also define how TRex will handle the packet by specifying the Field engine settings.
+ The pkt can be a Scapy pkt or pcap file name.
+ If using a pcap file, and path_relative_to_profile is True, then the function loads the pcap file from a path relative to the profile.
.. code-block:: python
@@ -1134,22 +1137,22 @@ class STLPktBuilder(CTrexPktBuilderInterface):
:parameters:
pkt : string,
- Scapy or pcap file filename a scapy packet
+ Scapy object or pcap filename.
pkt_buffer : bytes
- a packet as buffer
+ Packet as buffer.
vm : list or base on :class:`trex_stl_lib.trex_stl_packet_builder_scapy.STLScVmRaw`
- a list of instructions to manipolate packet fields
+ List of instructions to manipulate packet fields.
path_relative_to_profile : bool
- in case pkt is pcap file, do we want to load it relative to profile file
+ If pkt is a pcap file, determines whether to load it relative to profile file.
build_raw : bool
- Do we want to build scapy in case buffer was given. good for cases we want offset to be taken from scapy
+ If a buffer is specified (by pkt_buffer), determines whether to build Scapy. Useful in cases where it is necessary to take the offset from Scapy.
remove_fcs : bool
- in case of buffer do we want to remove fcs
+ If a buffer is specified (by pkt_buffer), determines whether to remove FCS.
@@ -1171,7 +1174,7 @@ class STLPktBuilder(CTrexPktBuilderInterface):
if pkt != None and pkt_buffer != None:
- raise CTRexPacketBuildException(-15, "packet builder cannot be provided with both pkt and pkt_buffer")
+ raise CTRexPacketBuildException(-15, "Packet builder cannot be provided with both pkt and pkt_buffer.")
# process packet
if pkt != None:
@@ -1183,7 +1186,7 @@ class STLPktBuilder(CTrexPktBuilderInterface):
# process VM
if vm != None:
if not isinstance(vm, (STLScVmRaw, list)):
- raise CTRexPacketBuildException(-14, "bad value for variable vm")
+ raise CTRexPacketBuildException(-14, "Bad value for variable vm.")
self.add_command(vm if isinstance(vm, STLScVmRaw) else STLScVmRaw(vm))
@@ -1219,7 +1222,7 @@ class STLPktBuilder(CTrexPktBuilderInterface):
def dump_pkt(self, encode = True):
"""
- Dumps the packet as a decimal array of bytes (each item x gets value between 0-255)
+ Dumps the packet as a decimal array of bytes (each item x gets value in range 0-255)
:parameters:
encode : bool
@@ -1254,7 +1257,7 @@ class STLPktBuilder(CTrexPktBuilderInterface):
def pkt_layers_desc (self):
"""
- return layer description like this IP:TCP:Pyload
+ Return layer description in this format: IP:TCP:Pyload
"""
pkt_buf = self._get_pkt_as_str()
@@ -1274,13 +1277,13 @@ class STLPktBuilder(CTrexPktBuilderInterface):
def set_pcap_file (self, pcap_file):
"""
- load raw pcap file into a buffer. load only the first packet
+ Load raw pcap file into a buffer. Loads only the first packet.
:parameters:
pcap_file : file_name
:raises:
- + :exc:`AssertionError`, in case packet is empty.
+ + :exc:`AssertionError`, if packet is empty.
"""
f_path = self._get_pcap_file_path (pcap_file)
@@ -1293,7 +1296,7 @@ class STLPktBuilder(CTrexPktBuilderInterface):
self.pkt_raw = pkt[0]
break
if not was_set :
- raise CTRexPacketBuildException(-14, "no buffer inside the pcap file {0}".format(f_path))
+ raise CTRexPacketBuildException(-14, "No buffer inside the pcap file {0}".format(f_path))
def to_pkt_dump(self):
p = self.pkt
@@ -1312,7 +1315,7 @@ class STLPktBuilder(CTrexPktBuilderInterface):
"""
Scapy packet
- For Example::
+ Example::
pkt =Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)/IP()/('x'*10)
@@ -1401,7 +1404,7 @@ class STLPktBuilder(CTrexPktBuilderInterface):
if var_names :
for var_name in var_names:
if var_name in vars:
- raise CTRexPacketBuildException(-11,("variable %s define twice ") % (var_name) );
+ raise CTRexPacketBuildException(-11,("Variable %s defined twice ") % (var_name) );
else:
vars[var_name]=1
@@ -1410,7 +1413,7 @@ class STLPktBuilder(CTrexPktBuilderInterface):
var_name = desc.get_var_ref()
if var_name :
if not var_name in vars:
- raise CTRexPacketBuildException(-11,("variable %s does not exists ") % (var_name) );
+ raise CTRexPacketBuildException(-11,("Variable %s does not exist ") % (var_name) );
desc.compile(self);
for desc in obj.commands:
@@ -1439,7 +1442,7 @@ class STLPktBuilder(CTrexPktBuilderInterface):
# regular scapy packet
elif not self.pkt:
# should not reach here
- raise CTRexPacketBuildException(-11, 'empty packet')
+ raise CTRexPacketBuildException(-11, 'Empty packet')
if self.remove_fcs and self.pkt.lastlayer().name == 'Padding':
self.pkt.lastlayer().underlayer.remove_payload()
@@ -1469,7 +1472,7 @@ class STLPktBuilder(CTrexPktBuilderInterface):
if self.pkt_raw:
return self.pkt_raw
- raise CTRexPacketBuildException(-11, 'empty packet');
+ raise CTRexPacketBuildException(-11, 'Empty packet');
def _add_tuple_gen(self,tuple_gen):
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py
index 2bd98d4a..78f51ec6 100644..100755
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py
@@ -21,22 +21,22 @@ class STLTXMode(object):
def __init__ (self, pps = None, bps_L1 = None, bps_L2 = None, percentage = None):
"""
- Speed could be in packet per second (pps) or L2/L1 bps or port precent
- only one of them is valid.
+ Speed can be given in packets per second (pps), L2/L1 bps, or port percent
+ Use only one unit.
you can enter pps =10000 oe bps_L1=10
:parameters:
pps : float
- packet per second
+ Packets per second
bps_L1 : float
- bit per second L1 (with IPG)
+ Bits per second L1 (with IPG)
bps_L2 : float
- bit per second L2 (Ethernet-FCS)
+ Bits per second L2 (Ethernet-FCS)
percentage : float
- link interface precent 0-100 e.g. 10 is 10%% of the port link setup
+ Link interface percent (0-100). Example: 10 is 10% of the port link setup
.. code-block:: python
:caption: STLTXMode Example
@@ -95,11 +95,11 @@ class STLTXMode(object):
# continuous mode
class STLTXCont(STLTXMode):
- """ continuous mode """
+ """ Continuous mode """
def __init__ (self, **kwargs):
"""
- continuous mode
+ Continuous mode
see :class:`trex_stl_lib.trex_stl_streams.STLTXMode` for rate
@@ -112,7 +112,7 @@ class STLTXCont(STLTXMode):
super(STLTXCont, self).__init__(**kwargs)
- self.fields['type'] = 'continuous'
+ self.fields['type'] = 'Continuous'
@staticmethod
def __str__ ():
@@ -124,11 +124,11 @@ class STLTXSingleBurst(STLTXMode):
def __init__ (self, total_pkts = 1, **kwargs):
"""
- single burst mode
+ Single burst mode
:parameters:
total_pkts : int
- how many packets for this burst
+ Number of packets for this burst
see :class:`trex_stl_lib.trex_stl_streams.STLTXMode` for rate
@@ -154,7 +154,7 @@ class STLTXSingleBurst(STLTXMode):
# multi burst mode
class STLTXMultiBurst(STLTXMode):
- """ Multi burst mode """
+ """ Multi-burst mode """
def __init__ (self,
pkts_per_burst = 1,
@@ -162,18 +162,18 @@ class STLTXMultiBurst(STLTXMode):
count = 1,
**kwargs):
"""
- Multi burst mode
+ Multi-burst mode
:parameters:
pkts_per_burst: int
- how many packets per burst
+ Number of packets per burst
ibg : float
- inter burst gap in usec 1000,000.0 is 1 sec
+ Inter-burst gap in usec 1,000,000.0 is 1 sec
count : int
- how many bursts
+ Number of bursts
see :class:`trex_stl_lib.trex_stl_streams.STLTXMode` for rate
@@ -230,7 +230,7 @@ class STLFlowStats(object):
def to_json (self):
- """ dump as json"""
+ """ Dump as json"""
return dict(self.fields)
@staticmethod
@@ -238,7 +238,7 @@ class STLFlowStats(object):
return {'enabled' : False}
class STLStream(object):
- """ One stream object, include mode, Field Engine mode packet template and Rx stats
+ """ One stream object. Includes mode, Field Engine mode packet template and Rx stats
.. code-block:: python
:caption: STLStream Example
@@ -277,42 +277,42 @@ class STLStream(object):
:parameters:
name : string
- The name of the stream. Needed if this stream is dependent on another stream and another stream need to refer to this stream by its name.
+ Name of the stream. Required if this stream is dependent on another stream, and another stream needs to refer to this stream by name.
packet : STLPktBuilder see :class:`trex_stl_lib.trex_stl_packet_builder_scapy.STLPktBuilder`
- The template packet and field engine program e.g. packet = STLPktBuilder(pkt = base_pkt/pad)
+ Template packet and field engine program. Example: packet = STLPktBuilder(pkt = base_pkt/pad)
mode : :class:`trex_stl_lib.trex_stl_streams.STLTXCont` or :class:`trex_stl_lib.trex_stl_streams.STLTXSingleBurst` or :class:`trex_stl_lib.trex_stl_streams.STLTXMultiBurst`
enabled : bool
- if the stream is enabled.
+ Indicates whether the stream is enabled.
self_start : bool
- In case it is False another stream will activate it
+ If False, another stream activates it.
isg : float
- Inter stream gap in usec. time to wait until stream will send the first packet
+ Inter-stream gap in usec. Time to wait until the stream sends the first packet.
flow_stats : :class:`trex_stl_lib.trex_stl_streams.STLFlowStats`
- Per stream statistic object see STLFlowStats
+ Per stream statistic object. See: STLFlowStats
next : string
- The name of the stream to activate
+ Name of the stream to activate.
stream_id :
- for HLTAPI usage
+ For use by HLTAPI.
action_count : uint16_t
- In case there is a next stream how many loops until stopping. Default is zero, which mean unlimited
+ If there is a next stream, number of loops before stopping. Default: 0 (unlimited).
random_seed: uint16_t
- If given the seed for this stream will be this value. Good in case you need a deterministic random value
+ If given, the seed for this stream will be this value. Useful if you need a deterministic random value.
mac_src_override_by_pkt : bool
- Template packet will set src MAC
+ Template packet sets src MAC.
mac_dst_override_mode=None : STLStreamDstMAC_xx
- Template packet will set dst MAC
+ Template packet sets dst MAC.
"""
@@ -326,7 +326,7 @@ class STLStream(object):
validate_type('random_seed',random_seed,int);
if (type(mode) == STLTXCont) and (next != None):
- raise STLError("continuous stream cannot have a next stream ID")
+ raise STLError("Continuous stream cannot have a next stream ID")
# tag for the stream and next - can be anything
self.name = name
@@ -412,7 +412,7 @@ class STLStream(object):
def to_json (self):
"""
- return json format
+ Return json format
"""
return dict(self.fields)
@@ -448,7 +448,7 @@ class STLStream(object):
def get_pkt_type (self):
- """ Get packet description for example IP:UDP """
+ """ Get packet description. Example: IP:UDP """
if self.packet_desc == None:
self.packet_desc = STLPktBuilder.pkt_layers_desc_from_buffer(self.get_pkt())
@@ -476,7 +476,7 @@ class STLStream(object):
return self.get_rate_from_field(self.fields['mode']['rate'])
def to_pkt_dump (self):
- """ print packet description from scapy """
+ """ Print packet description from Scapy """
if self.name:
print("Stream Name: ",self.name)
scapy_b = self.scapy_pkt_builder;
@@ -488,7 +488,7 @@ class STLStream(object):
def to_yaml (self):
- """ convert to YAML """
+ """ Convert to YAML """
y = {}
if self.name:
@@ -510,7 +510,7 @@ class STLStream(object):
# returns the Python code (text) to build this stream, inside the code it will be in variable "stream"
def to_code (self):
- """ convert to Python code as profile """
+ """ Convert to Python code as profile """
packet = Ether(self.pkt)
layer = packet
while layer: # remove checksums
@@ -625,7 +625,7 @@ class STLStream(object):
return r'\x{0:02x}'.format(ord(match.group()))
def dump_to_yaml (self, yaml_file = None):
- """ print as yaml """
+ """ Print as yaml """
yaml_dump = yaml.dump([self.to_yaml()], default_flow_style = False)
# write to file if provided
@@ -646,7 +646,7 @@ class YAMLLoader(object):
packet_type = set(packet_dict).intersection(['binary', 'pcap'])
if len(packet_type) != 1:
- raise STLError("packet section must contain either 'binary' or 'pcap'")
+ raise STLError("Packet section must contain either 'binary' or 'pcap'")
if 'binary' in packet_type:
try:
@@ -711,7 +711,7 @@ class YAMLLoader(object):
pg_id = flow_stats_obj.get('stream_id')
if pg_id == None:
- raise STLError("enabled RX stats section must contain 'stream_id' field")
+ raise STLError("Enabled RX stats section must contain 'stream_id' field")
return STLFlowStats(pg_id = pg_id)
@@ -826,7 +826,7 @@ class STLProfile(object):
def get_streams (self):
- """ Get the list of stream"""
+ """ Get the list of streams"""
return self.streams
def __str__ (self):
@@ -840,7 +840,7 @@ class STLProfile(object):
@staticmethod
def load_yaml (yaml_file):
- """ load from YAML file a profile with number of streams"""
+ """ Load (from YAML file) a profile with a number of streams"""
# check filename
if not os.path.isfile(yaml_file):
@@ -875,11 +875,11 @@ class STLProfile(object):
@staticmethod
def load_py (python_file, direction = 0, port_id = 0, **kwargs):
- """ load from Python profile """
+ """ Load from Python profile """
# check filename
if not os.path.isfile(python_file):
- raise STLError("file '{0}' does not exists".format(python_file))
+ raise STLError("File '{0}' does not exist".format(python_file))
basedir = os.path.dirname(python_file)
sys.path.append(basedir)
@@ -892,7 +892,7 @@ class STLProfile(object):
t = STLProfile.get_module_tunables(module)
for arg in kwargs:
if not arg in t:
- raise STLError("profile {0} does not support tunable '{1}' - supported tunables are: '{2}'".format(python_file, arg, t))
+ raise STLError("Profile {0} does not support tunable '{1}' - supported tunables are: '{2}'".format(python_file, arg, t))
streams = module.register().get_streams(direction = direction,
port_id = port_id,
@@ -919,26 +919,26 @@ class STLProfile(object):
# loop_count = 0 means loop forever
@staticmethod
def load_pcap (pcap_file, ipg_usec = None, speedup = 1.0, loop_count = 1, vm = None):
- """ Convert a pcap file with a number of packets to a list of connected streams
+ """ Convert a pcap file with a number of packets to a list of connected streams.
packet1->packet2->packet3 etc
:parameters:
pcap_file : string
- The name of the pcap file
+ Name of the pcap file
ipg_usec : float
- The inter packet gap in usec. in case of None IPG is taken from pcap file
+ Inter packet gap in usec. If IPG=0, IPG is taken from pcap file
speedup : float
- By which factor to get IPG smaller so we will send pcap file in speedup
+ When reading the pcap file, divide IPG by this "speedup" factor. Resulting IPG is sped up by this factor.
loop_count : uint16_t
- how many loops to repeat the pcap file
+ Number of loops to repeat the pcap file
vm : list
- A list of Field engine instructions
+ List of Field engine instructions
:return: STLProfile
@@ -996,12 +996,12 @@ class STLProfile(object):
@staticmethod
def load (filename, direction = 0, port_id = 0, **kwargs):
- """ load a profile by its type supported type are
+ """ Load a profile by its type. Supported types are:
* py
* yaml
* pcap file that converted to profile automaticly
- :parameters:
+ :Parameters:
filename : string as filename
direction : profile's direction (if supported by the profile)
port_id : which port ID this profile is being loaded to
@@ -1033,7 +1033,7 @@ class STLProfile(object):
return profile.meta
def dump_as_pkt (self):
- """ dump the profile as scapy packet. in case it is raw convert to scapy and dump it"""
+ """ Dump the profile as Scapy packet. If the packet is raw, convert it to Scapy before dumping it."""
cnt=0;
for stream in self.streams:
print("=======================")
@@ -1043,7 +1043,7 @@ class STLProfile(object):
stream.to_pkt_dump()
def dump_to_yaml (self, yaml_file = None):
- """ convert it to yaml """
+ """ Convert the profile to yaml """
yaml_list = [stream.to_yaml() for stream in self.streams]
yaml_str = yaml.dump(yaml_list, default_flow_style = False)
@@ -1055,7 +1055,7 @@ class STLProfile(object):
return yaml_str
def dump_to_code (self, profile_file = None):
- """ convert it to Python native profile. yeah this is cool """
+ """ Convert the profile to Python native profile. """
profile_dump = '''# !!! Auto-generated code !!!
from trex_stl_lib.api import *