From 138686f389fe48139ddc4a57ac5de363e71b38e7 Mon Sep 17 00:00:00 2001 From: Yaroslav Brustinov Date: Tue, 13 Sep 2016 17:30:14 +0300 Subject: [PATCH] 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 --- linux/b | 29 +++- linux_dpdk/b | 29 +++- .../regression/setups/trex24/benchmark.yaml | 155 +++++++++++++++++++++ .../regression/setups/trex24/config.yaml | 39 ++++++ scripts/automation/regression/trex_unit_test.py | 16 ++- .../trex_control_plane/doc_stl/api/client_code.rst | 12 +- .../doc_stl/api/field_engine.rst | 6 +- .../doc_stl/api/profile_code.rst | 6 +- .../trex_control_plane/server/CCustomLogger.py | 1 + .../stl/trex_stl_lib/trex_stl_client.py | 2 +- .../trex_stl_lib/trex_stl_packet_builder_scapy.py | 53 +++---- .../stl/trex_stl_lib/trex_stl_streams.py | 40 +++--- scripts/dpdk_nic_bind.py | 4 +- scripts/dpdk_setup_ports.py | 2 +- scripts/ko/4.4.0-36-generic/igb_uio.ko | Bin 0 -> 17320 bytes 15 files changed, 321 insertions(+), 73 deletions(-) create mode 100644 scripts/automation/regression/setups/trex24/benchmark.yaml create mode 100644 scripts/automation/regression/setups/trex24/config.yaml create mode 100644 scripts/ko/4.4.0-36-generic/igb_uio.ko 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 0000000000000000000000000000000000000000..7f46079e2b313a43380423896b3d305e8910251b GIT binary patch literal 17320 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 aov6R)KTMN_?AMgh1EQ~D(wE3-|Nj6b2Q~Wu literal 0 HcmV?d00001 -- 2.16.6