summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaroslav Brustinov <ybrustin@cisco.com>2016-09-13 17:30:14 +0300
committerYaroslav Brustinov <ybrustin@cisco.com>2016-09-13 17:30:14 +0300
commit138686f389fe48139ddc4a57ac5de363e71b38e7 (patch)
tree35cc977a555f80ac64c6aff4bbc045819dd080a5
parent58f1ee52761a489322036f111793ddd8e85e197a (diff)
dpdk Python scripts small fixes
ensure log dir exists for trex daemon regression: add trex24 setup Sphinx docs remove "capture" tag for compatibility with 1.2 version
-rwxr-xr-xlinux/b29
-rwxr-xr-xlinux_dpdk/b29
-rw-r--r--scripts/automation/regression/setups/trex24/benchmark.yaml155
-rw-r--r--scripts/automation/regression/setups/trex24/config.yaml39
-rwxr-xr-xscripts/automation/regression/trex_unit_test.py16
-rwxr-xr-xscripts/automation/trex_control_plane/doc_stl/api/client_code.rst12
-rwxr-xr-xscripts/automation/trex_control_plane/doc_stl/api/field_engine.rst6
-rwxr-xr-xscripts/automation/trex_control_plane/doc_stl/api/profile_code.rst6
-rwxr-xr-xscripts/automation/trex_control_plane/server/CCustomLogger.py1
-rwxr-xr-xscripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py2
-rwxr-xr-xscripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py53
-rwxr-xr-xscripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py40
-rwxr-xr-xscripts/dpdk_nic_bind.py4
-rwxr-xr-xscripts/dpdk_setup_ports.py2
-rw-r--r--scripts/ko/4.4.0-36-generic/igb_uio.kobin0 -> 17320 bytes
15 files changed, 321 insertions, 73 deletions
diff --git a/linux/b b/linux/b
index 78d4ca47..e5fbbf36 100755
--- a/linux/b
+++ b/linux/b
@@ -1,13 +1,28 @@
#! /bin/bash
-if python2.7 waf-1.9.3 --help &> /dev/null ; then
- python2.7 waf-1.9.3 $@
- exit $?
-elif python3 waf-1.9.3 --help &> /dev/null ; then
- python3 waf-1.9.3 $@
- exit $?
+waf=waf-1.9.3
+p2=${PYTHON:-${PYTHON2:-python2.7}}
+p3=${PYTHON3:-python3}
+
+
+# try Pythons which can load waf
+
+if $p2 $waf --help &> /dev/null; then
+ $p2 $waf $@
+elif $p3 $waf --help &> /dev/null; then
+ $p3 $waf $@
+
+# waf can't be loaded, print the error with available Python
+
+elif which $p2 &> /dev/null; then
+ $p2 $waf $@
+elif which $p3 &> /dev/null; then
+ $p3 $waf $@
+
+# no Python available
+
else
- echo Required Python versions at least 2.7 or 3
+ echo Required Python 2.7 or 3
exit 1
fi
diff --git a/linux_dpdk/b b/linux_dpdk/b
index a6eeed6a..4ec2bfba 100755
--- a/linux_dpdk/b
+++ b/linux_dpdk/b
@@ -1,14 +1,29 @@
#! /bin/bash
export WAFLOCK=.lock-wafbuild_dpdk
-if python2.7 waf-1.9.3 --help &> /dev/null ; then
- python2.7 waf-1.9.3 $@
- exit $?
-elif python3 waf-1.9.3 --help &> /dev/null ; then
- python3 waf-1.9.3 $@
- exit $?
+waf=waf-1.9.3
+p2=${PYTHON:-${PYTHON2:-python2.7}}
+p3=${PYTHON3:-python3}
+
+
+# try Pythons which can load waf
+
+if $p2 $waf --help &> /dev/null; then
+ $p2 $waf $@
+elif $p3 $waf --help &> /dev/null; then
+ $p3 $waf $@
+
+# waf can't be loaded, print the error with available Python
+
+elif which $p2 &> /dev/null; then
+ $p2 $waf $@
+elif which $p3 &> /dev/null; then
+ $p3 $waf $@
+
+# no Python available
+
else
- echo Required Python versions at least 2.7 or 3
+ echo Required Python 2.7 or 3
exit 1
fi
diff --git a/scripts/automation/regression/setups/trex24/benchmark.yaml b/scripts/automation/regression/setups/trex24/benchmark.yaml
new file mode 100644
index 00000000..96d27981
--- /dev/null
+++ b/scripts/automation/regression/setups/trex24/benchmark.yaml
@@ -0,0 +1,155 @@
+###############################################################
+#### TRex benchmark configuration file ####
+###############################################################
+
+### stateful ###
+
+test_jumbo:
+ multiplier : 2.8
+ cores : 1
+ bw_per_core : 67.030
+
+
+test_routing_imix:
+ multiplier : 1
+ cores : 1
+ bw_per_core : 3.979
+
+
+test_routing_imix_64:
+ multiplier : 50
+ cores : 1
+ bw_per_core : .681
+
+
+test_static_routing_imix_asymmetric:
+ multiplier : 0.8
+ cores : 1
+ bw_per_core : 13.742
+
+
+
+### stateless ###
+
+test_CPU_benchmark:
+ profiles:
+ - name : stl/udp_for_benchmarks.py
+ kwargs : {packet_len: 64}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_for_benchmarks.py
+ kwargs : {packet_len: 64, stream_count: 10}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_for_benchmarks.py
+ kwargs : {packet_len: 64, stream_count: 100}
+ cpu_util : 1
+ bw_per_core : 1
+
+# causes queue full
+# - name : stl/udp_for_benchmarks.py
+# kwargs : {packet_len: 64, stream_count: 1000}
+# cpu_util : 1
+# bw_per_core : 1
+
+ - name : stl/udp_for_benchmarks.py
+ kwargs : {packet_len: 128}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_for_benchmarks.py
+ kwargs : {packet_len: 256}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_for_benchmarks.py
+ kwargs : {packet_len: 512}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_for_benchmarks.py
+ kwargs : {packet_len: 1500}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_for_benchmarks.py
+ kwargs : {packet_len: 4000}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_for_benchmarks.py
+ kwargs : {packet_len: 9000}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_for_benchmarks.py
+ kwargs : {packet_len: 9000, stream_count: 10}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_for_benchmarks.py
+ kwargs : {packet_len: 9000, stream_count: 100}
+ cpu_util : 1
+ bw_per_core : 1
+
+# not enough memory + queue full if memory increase
+# - name : stl/udp_for_benchmarks.py
+# kwargs : {packet_len: 9000, stream_count: 1000}
+# cpu_util : 1
+# bw_per_core : 1
+
+ - name : stl/imix.py
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_1pkt_tuple_gen.py
+ kwargs : {packet_len: 64}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_1pkt_tuple_gen.py
+ kwargs : {packet_len: 128}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_1pkt_tuple_gen.py
+ kwargs : {packet_len: 256}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_1pkt_tuple_gen.py
+ kwargs : {packet_len: 512}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_1pkt_tuple_gen.py
+ kwargs : {packet_len: 1500}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_1pkt_tuple_gen.py
+ kwargs : {packet_len: 4000}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_1pkt_tuple_gen.py
+ kwargs : {packet_len: 9000}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/pcap.py
+ kwargs : {ipg_usec: 2, loop_count: 0}
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/udp_rand_len_9k.py
+ cpu_util : 1
+ bw_per_core : 1
+
+ - name : stl/hlt/hlt_udp_rand_len_9k.py
+ cpu_util : 1
+ bw_per_core : 1
+
+
diff --git a/scripts/automation/regression/setups/trex24/config.yaml b/scripts/automation/regression/setups/trex24/config.yaml
new file mode 100644
index 00000000..f4eecdf9
--- /dev/null
+++ b/scripts/automation/regression/setups/trex24/config.yaml
@@ -0,0 +1,39 @@
+################################################################
+#### TRex nightly test configuration file ####
+################################################################
+
+
+### TRex configuration:
+# hostname - can be DNS name or IP for the TRex machine for ssh to the box
+# is_dual - should the TRex inject with -p ?
+# version_path - path to the TRex version and executable
+# cores - how many cores should be used
+# latency - rate of latency packets injected by the TRex
+# modes - list of modes (tagging) of this setup (loopback, virtual etc.)
+# * loopback - Trex works via loopback. Router and TFTP configurations may be skipped.
+# * VM - Virtual OS (accept low CPU utilization in tests, latency can get spikes)
+# * virt_nics - NICs are virtual (VMXNET3 etc.)
+
+### Router configuration:
+# hostname - the router hostname as apears in ______# cli prefix
+# ip_address - the router's ip that can be used to communicate with
+# image - the desired imaged wished to be loaded as the router's running config
+# line_password - router password when access via Telent
+# en_password - router password when changing to "enable" mode
+# interfaces - an array of client-server pairs, representing the interfaces configurations of the router
+# configurations - an array of configurations that could possibly loaded into the router during the test.
+# The "clean" configuration is a mandatory configuration the router will load with to run the basic test bench
+
+### TFTP configuration:
+# hostname - the tftp hostname
+# ip_address - the tftp's ip address
+# images_path - the tftp's relative path in which the router's images are located
+
+### Test_misc configuration:
+# expected_bw - the "golden" bandwidth (in Gbps) results planned on receiving from the test
+
+trex:
+ hostname : csi-trex-24
+ cores : 1
+ modes : [VM, virt_nics, loopback]
+
diff --git a/scripts/automation/regression/trex_unit_test.py b/scripts/automation/regression/trex_unit_test.py
index 4f13a50f..7c2e317b 100755
--- a/scripts/automation/regression/trex_unit_test.py
+++ b/scripts/automation/regression/trex_unit_test.py
@@ -224,9 +224,13 @@ class CTRexTestConfiguringPlugin(Plugin):
def begin (self):
- if self.pkg and self.kill_running and not CTRexScenario.is_copied:
+ client = CTRexScenario.trex
+ if self.pkg and not CTRexScenario.is_copied:
+ if client.master_daemon.is_trex_daemon_running() and client.get_trex_cmds() and not self.kill_running:
+ print("Can't update TRex, it's running")
+ sys.exit(-1)
print('Updating TRex to %s' % self.pkg)
- if not CTRexScenario.trex.master_daemon.update_trex(self.pkg):
+ if not client.master_daemon.update_trex(self.pkg):
print('Failed updating TRex')
sys.exit(-1)
else:
@@ -236,16 +240,16 @@ class CTRexTestConfiguringPlugin(Plugin):
return
if not self.no_daemon:
print('Restarting TRex daemon server')
- res = CTRexScenario.trex.restart_trex_daemon()
+ res = client.restart_trex_daemon()
if not res:
print('Could not restart TRex daemon server')
sys.exit(-1)
print('Restarted.')
if self.kill_running:
- CTRexScenario.trex.kill_all_trexes()
+ client.kill_all_trexes()
else:
- if CTRexScenario.trex.get_trex_cmds():
+ if client.get_trex_cmds():
print('TRex is already running')
sys.exit(-1)
@@ -254,7 +258,7 @@ class CTRexTestConfiguringPlugin(Plugin):
if 'virt_nics' in self.modes and cores > 1:
raise Exception('Number of cores should be 1 with virtual NICs')
if not self.no_daemon:
- CTRexScenario.trex.start_stateless(c = cores)
+ client.start_stateless(c = cores)
CTRexScenario.stl_trex = STLClient(username = 'TRexRegression',
server = self.configuration.trex['trex_name'],
verbose_level = self.json_verbose)
diff --git a/scripts/automation/trex_control_plane/doc_stl/api/client_code.rst b/scripts/automation/trex_control_plane/doc_stl/api/client_code.rst
index 08720e8d..953c5c84 100755
--- a/scripts/automation/trex_control_plane/doc_stl/api/client_code.rst
+++ b/scripts/automation/trex_control_plane/doc_stl/api/client_code.rst
@@ -69,7 +69,8 @@ STLClient snippet
.. code-block:: python
- :caption: Example 1: Minimal example of client interacting with the TRex server
+
+ # Example 1: Minimal example of client interacting with the TRex server
c = STLClient()
@@ -102,7 +103,8 @@ STLClient snippet
.. code-block:: python
- :caption: Example 2: Client can execute other functions while the TRex server is generating traffic
+
+ # Example 2: Client can execute other functions while the TRex server is generating traffic
c = STLClient()
@@ -128,7 +130,8 @@ STLClient snippet
.. code-block:: python
- :caption: Example 3: Console-like API interface
+
+ # Example 3: Console-like API interface
def simple ():
@@ -224,7 +227,8 @@ Example 4: Load profile from a file::
.. code-block:: python
- :caption: Example 5: pin cores to ports
+
+ # Example 5: pin cores to ports
c = STLClient()
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 d4f95170..39afa38b 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
@@ -153,7 +153,8 @@ Field Engine snippet
--------------------
.. code-block:: python
- :caption: FE Example1
+
+ # FE Example1
base_pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)
@@ -177,7 +178,8 @@ Field Engine snippet
.. code-block:: python
- :caption: FE Example2
+
+ # FE Example2
#range of source mac-addr
diff --git a/scripts/automation/trex_control_plane/doc_stl/api/profile_code.rst b/scripts/automation/trex_control_plane/doc_stl/api/profile_code.rst
index 335105f1..8a0d7a2a 100755
--- a/scripts/automation/trex_control_plane/doc_stl/api/profile_code.rst
+++ b/scripts/automation/trex_control_plane/doc_stl/api/profile_code.rst
@@ -88,7 +88,8 @@ STLProfile snippet
.. code-block:: python
- :caption: STLProfile Example1
+
+ # STLProfile Example1
size = self.fsize - 4; # no FCS
@@ -119,7 +120,8 @@ STLProfile snippet
.. code-block:: python
- :caption: STLProfile Example2
+
+ # STLProfile Example2
class STLS1(object):
diff --git a/scripts/automation/trex_control_plane/server/CCustomLogger.py b/scripts/automation/trex_control_plane/server/CCustomLogger.py
index 6d3974a6..fd9a32ad 100755
--- a/scripts/automation/trex_control_plane/server/CCustomLogger.py
+++ b/scripts/automation/trex_control_plane/server/CCustomLogger.py
@@ -10,6 +10,7 @@ def prepare_dir(log_path):
def setup_custom_logger(name, log_path = None):
# first make sure path availabe
+ prepare_dir(log_path)
logging.basicConfig(level = logging.INFO,
format = '%(asctime)s %(name)-10s %(module)-20s %(levelname)-8s %(message)s',
datefmt = '%m-%d %H:%M')
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 fc49bf77..3fe31d4d 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
@@ -482,8 +482,8 @@ class STLClient(object):
the ASYNC port
.. code-block:: python
- :caption: Example
+ # Example
# connect to local TRex server
c = STLClient()
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 e12efaf9..b97cc5f8 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
@@ -202,8 +202,8 @@ class STLScVmRaw(CTRexScriptsBase):
The following example splits the generated traffic by "ip_src" variable.
.. code-block:: python
- :caption: Split by
+ # Split by
# TCP SYN
base_pkt = Ether()/IP(dst="48.0.0.1")/TCP(dport=80,flags="S")
@@ -612,8 +612,8 @@ class STLVmFlowVar(CTRexVmDescBase):
Possible values: "inc", "dec", "random"
.. code-block:: python
- :caption: Example1
+ # Example1
# input
STLVmFlowVar(min_value=0, max_value=3, size=1,op="inc")
@@ -676,7 +676,8 @@ class STLVmFixIpv4(CTRexVmDescBase):
in could be string in case of scapy packet. format IP[:[id]]
.. code-block:: python
- :caption: Example2
+
+ # Example2
pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)
@@ -729,7 +730,8 @@ class STLVmWrFlowVar(CTRexVmDescBase):
How to write the variable to the the packet. True=big-endian, False=little-endian
.. code-block:: python
- :caption: Example3
+
+ # Example3
pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)
@@ -1036,7 +1038,8 @@ class STLVmTupleGen(CTRexVmDescBase):
="0.0.0.10", port_min=1025, port_max=65535, limit_flows=100000, flags=0
.. code-block:: python
- :caption: Example5
+
+ # Example5
def create_stream (self):
# pkt
@@ -1113,35 +1116,35 @@ class STLPktBuilder(CTrexPktBuilderInterface):
.. code-block:: python
- :caption: Example6
-
- # packet is scapy
- STLPktBuilder( pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)/(10*'x') )
+ # Example6
+
+ # packet is scapy
+ STLPktBuilder( pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)/(10*'x') )
- # packet is taken from pcap file relative to python
- STLPktBuilder( pkt ="stl/yaml/udp_64B_no_crc.pcap")
+ # packet is taken from pcap file relative to python
+ STLPktBuilder( pkt ="stl/yaml/udp_64B_no_crc.pcap")
- # packet is taken from pcap file relative to profile file
- STLPktBuilder( pkt ="stl/yaml/udp_64B_no_crc.pcap",
- path_relative_to_profile = True )
+ # packet is taken from pcap file relative to profile file
+ STLPktBuilder( pkt ="stl/yaml/udp_64B_no_crc.pcap",
+ path_relative_to_profile = True )
- vm = STLScVmRaw( [ STLVmTupleGen ( ip_min="16.0.0.1", ip_max="16.0.0.2",
- port_min=1025, port_max=65535,
- name="tuple"), # define tuple gen
+ vm = STLScVmRaw( [ STLVmTupleGen ( ip_min="16.0.0.1", ip_max="16.0.0.2",
+ port_min=1025, port_max=65535,
+ name="tuple"), # define tuple gen
- STLVmWrFlowVar (fv_name="tuple.ip", pkt_offset= "IP.src" ), # write ip to packet IP.src
- STLVmFixIpv4(offset = "IP"), # fix checksum
- STLVmWrFlowVar (fv_name="tuple.port", pkt_offset= "UDP.sport" ) #write udp.port
- ]
- )
+ STLVmWrFlowVar (fv_name="tuple.ip", pkt_offset= "IP.src" ), # write ip to packet IP.src
+ STLVmFixIpv4(offset = "IP"), # fix checksum
+ STLVmWrFlowVar (fv_name="tuple.port", pkt_offset= "UDP.sport" ) #write udp.port
+ ]
+ )
- base_pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)
- pad = max(0, size - len(base_pkt)) * 'x'
+ base_pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)
+ pad = max(0, size - len(base_pkt)) * 'x'
- STLPktBuilder(pkt = base_pkt/pad, vm= vm)
+ STLPktBuilder(pkt = base_pkt/pad, vm= vm)
:parameters:
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 50751111..bfcf063a 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
@@ -41,15 +41,16 @@ class STLTXMode(object):
Link interface percent (0-100). Example: 10 is 10% of the port link setup
.. code-block:: python
- :caption: STLTXMode Example
- mode = STLTXCont(pps = 10)
+ # STLTXMode Example
- mode = STLTXCont(bps_L1 = 10000000) #10mbps L1
+ mode = STLTXCont(pps = 10)
- mode = STLTXCont(bps_L2 = 10000000) #10mbps L2
+ mode = STLTXCont(bps_L1 = 10000000) #10mbps L1
- mode = STLTXCont(percentage = 10) #10%
+ mode = STLTXCont(bps_L2 = 10000000) #10mbps L2
+
+ mode = STLTXCont(percentage = 10) #10%
"""
@@ -106,9 +107,10 @@ class STLTXCont(STLTXMode):
see :class:`trex_stl_lib.trex_stl_streams.STLTXMode` for rate
.. code-block:: python
- :caption: STLTXCont Example
- mode = STLTXCont(pps = 10)
+ # STLTXCont Example
+
+ mode = STLTXCont(pps = 10)
"""
super(STLTXCont, self).__init__(**kwargs)
@@ -135,9 +137,10 @@ class STLTXSingleBurst(STLTXMode):
see :class:`trex_stl_lib.trex_stl_streams.STLTXMode` for rate
.. code-block:: python
- :caption: STLTXSingleBurst Example
- mode = STLTXSingleBurst( pps = 10, total_pkts = 1)
+ # STLTXSingleBurst Example
+
+ mode = STLTXSingleBurst( pps = 10, total_pkts = 1)
"""
@@ -180,9 +183,10 @@ class STLTXMultiBurst(STLTXMode):
see :class:`trex_stl_lib.trex_stl_streams.STLTXMode` for rate
.. code-block:: python
- :caption: STLTXMultiBurst Example
- mode = STLTXMultiBurst(pps = 10, pkts_per_burst = 1,count 10, ibg=10.0)
+ # STLTXMultiBurst Example
+
+ mode = STLTXMultiBurst(pps = 10, pkts_per_burst = 1,count 10, ibg=10.0)
"""
@@ -230,7 +234,8 @@ class STLFlowStats(STLFlowStatsInterface):
""" Define per stream basic stats
.. code-block:: python
- :caption: STLFlowStats Example
+
+ # STLFlowStats Example
flow_stats = STLFlowStats(pg_id = 7)
@@ -245,7 +250,8 @@ class STLFlowLatencyStats(STLFlowStatsInterface):
""" Define per stream basic stats + latency, jitter, packet reorder/loss
.. code-block:: python
- :caption: STLFlowLatencyStats Example
+
+ # STLFlowLatencyStats Example
flow_stats = STLFlowLatencyStats(pg_id = 7)
@@ -260,7 +266,8 @@ class STLStream(object):
""" One stream object. Includes mode, Field Engine mode packet template and Rx stats
.. code-block:: python
- :caption: STLStream Example
+
+ # STLStream Example
base_pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)
@@ -825,9 +832,10 @@ class STLProfile(object):
""" Describe a list of streams
.. code-block:: python
- :caption: STLProfile Example
- profile = STLProfile( [ STLStream( isg = 10.0, # star in delay
+ # STLProfile Example
+
+ profile = STLProfile( [ STLStream( isg = 10.0, # star in delay
name ='S0',
packet = STLPktBuilder(pkt = base_pkt/pad),
mode = STLTXSingleBurst( pps = 10, total_pkts = self.burst_size),
diff --git a/scripts/dpdk_nic_bind.py b/scripts/dpdk_nic_bind.py
index 1242e3e3..528a8132 100755
--- a/scripts/dpdk_nic_bind.py
+++ b/scripts/dpdk_nic_bind.py
@@ -368,7 +368,7 @@ def read_pid_cmdline(pid):
def confirm(msg, default = False):
if not os.isatty(1):
return default
- termios.tcflush(sys.stdin, termios.TCIOFLUSH)
+ termios.tcflush(sys.stdin, termios.TCIFLUSH)
try:
return strtobool(raw_input(msg))
except KeyboardInterrupt:
@@ -380,7 +380,7 @@ def confirm(msg, default = False):
def read_line(msg = '', default = ''):
if not os.isatty(1):
return default
- termios.tcflush(sys.stdin, termios.TCIOFLUSH)
+ termios.tcflush(sys.stdin, termios.TCIFLUSH)
try:
return raw_input(msg).strip()
except KeyboardInterrupt:
diff --git a/scripts/dpdk_setup_ports.py b/scripts/dpdk_setup_ports.py
index 84c44e4a..509de2e2 100755
--- a/scripts/dpdk_setup_ports.py
+++ b/scripts/dpdk_setup_ports.py
@@ -360,7 +360,7 @@ Other network devices
'rte_i40e_pmd': 'i40e',
'rte_em_pmd': 'e1000',
'rte_vmxnet3_pmd': 'vmxnet3',
- 'rte_virtio_pmd': 'virtio',
+ 'rte_virtio_pmd': 'virtio-pci',
'rte_enic_pmd': 'enic',
}
for pci, info in dpdk_nic_bind.get_info_from_trex(dpdk_interfaces).items():
diff --git a/scripts/ko/4.4.0-36-generic/igb_uio.ko b/scripts/ko/4.4.0-36-generic/igb_uio.ko
new file mode 100644
index 00000000..7f46079e
--- /dev/null
+++ b/scripts/ko/4.4.0-36-generic/igb_uio.ko
Binary files differ