dpdk Python scripts small fixes
authorYaroslav Brustinov <[email protected]>
Tue, 13 Sep 2016 14:30:14 +0000 (17:30 +0300)
committerYaroslav Brustinov <[email protected]>
Tue, 13 Sep 2016 14:30:14 +0000 (17:30 +0300)
ensure log dir exists for trex daemon
regression: add trex24 setup
Sphinx docs remove "capture" tag for compatibility with 1.2 version

15 files changed:
linux/b
linux_dpdk/b
scripts/automation/regression/setups/trex24/benchmark.yaml [new file with mode: 0644]
scripts/automation/regression/setups/trex24/config.yaml [new file with mode: 0644]
scripts/automation/regression/trex_unit_test.py
scripts/automation/trex_control_plane/doc_stl/api/client_code.rst
scripts/automation/trex_control_plane/doc_stl/api/field_engine.rst
scripts/automation/trex_control_plane/doc_stl/api/profile_code.rst
scripts/automation/trex_control_plane/server/CCustomLogger.py
scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py
scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py
scripts/dpdk_nic_bind.py
scripts/dpdk_setup_ports.py
scripts/ko/4.4.0-36-generic/igb_uio.ko [new file with mode: 0644]

diff --git a/linux/b b/linux/b
index 78d4ca4..e5fbbf3 100755 (executable)
--- 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
 
index a6eeed6..4ec2bfb 100755 (executable)
@@ -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 (file)
index 0000000..96d2798
--- /dev/null
@@ -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 (file)
index 0000000..f4eecdf
--- /dev/null
@@ -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]
+
index 4f13a50..7c2e317 100755 (executable)
@@ -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)
index 08720e8..953c5c8 100755 (executable)
@@ -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()
 
index d4f9517..39afa38 100755 (executable)
@@ -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
index 335105f..8a0d7a2 100755 (executable)
@@ -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):
index 6d3974a..fd9a32a 100755 (executable)
@@ -10,6 +10,7 @@ def prepare_dir(log_path):
 \r
 def setup_custom_logger(name, log_path = None):\r
     # first make sure path availabe\r
+    prepare_dir(log_path)\r
     logging.basicConfig(level   = logging.INFO, \r
                         format  = '%(asctime)s %(name)-10s %(module)-20s %(levelname)-8s %(message)s',\r
                         datefmt = '%m-%d %H:%M')\r
index fc49bf7..3fe31d4 100755 (executable)
@@ -482,8 +482,8 @@ class STLClient(object):
                 the ASYNC port 
 
         .. code-block:: python
-            :caption: Example
 
+            # Example
 
             # connect to local TRex server 
             c = STLClient()
index e12efaf..b97cc5f 100755 (executable)
@@ -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:
index 5075111..bfcf063 100755 (executable)
@@ -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),
index 1242e3e..528a813 100755 (executable)
@@ -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:
index 84c44e4..509de2e 100755 (executable)
@@ -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 (file)
index 0000000..7f46079
Binary files /dev/null and b/scripts/ko/4.4.0-36-generic/igb_uio.ko differ