Zero rx stream stats in STL mode (while using vm in STLPktBuilder)

85 views
Skip to first unread message

Sergei Karimov

unread,
Apr 12, 2018, 5:37:06 AM4/12/18
to TRex Traffic Generator
Test case: i send 6 stream ( with different protocols ) to 1 interface in STL mode and then check RX stats  per stream.
If i not use vm in STLPktBuilder ,  i can get  rx_pckts stats per stream.
but when i use vm , all rx stats in streams = 0.

example python script :
```
# Example showing how to define stream for getting per flow statistics, and how to parse the received statistics

import stl_path
from trex_stl_lib.api import *
import subprocess
import json

import time
import pprint

def rx_example (tx_port, rx_port, burst_size, bw):

    print("\nGoing to inject {0} packets on port {1} - checking RX stats on port {2}\n".format(burst_size, tx_port, rx_port))

    # create client
    c = STLClient()
    passed = True
    
    try:
        vm = STLScVmRaw( [ STLVmFlowVar( 
#                                      min_value=1488, max_value=65300,
                                      min_value="16.0.0.1", max_value="16.0.0.5",
      size=4, 
      name="UDP_PORT"),                     


#                   STLVmWrFlowVar(fv_name="tuple.ip", pkt_offset= "IP.src" ),  
                   
   STLVmWrFlowVar(fv_name="UDP_PORT", pkt_offset= "IP.src" ),

                   STLVmFixIpv4(offset = "IP") # fix checksum              
           
                  ]
               )
        pkt = STLPktBuilder(pkt = "pcaps/snmp.pcap" )
#pkt2 = STLPktBuilder(pkt = "/tmp/v2.37/avl/http_browsin(.pcap")
pkt2 = STLPktBuilder(pkt = "pcaps/sipv2.pcap" )
pkt3 = STLPktBuilder(pkt = "pcaps/dns_port.pcap" )
pkt4 = STLPktBuilder(pkt = "pcaps/ISAKMP_sa_setup.cap" )
# pkt5 = STLPktBuilder(pkt = "pcaps/udpgmd.pcap", vm = vm)
pkt5 = STLPktBuilder(pkt = "pcaps/tftpv2.pcap")
pkt6 = STLPktBuilder(pkt = "pcaps/NTP_sync.pcap")
# pkt6 = STLPktBuilder(pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)/'a_aaaaaa')
        
s1 = STLStream(name = 'rx',
                       packet = pkt,
                       flow_stats = STLFlowStats(pg_id = 0),
mode = STLTXCont(percentage = 10))
        s2 = STLStream(name = 'rx2',
                       packet = pkt2,
                       flow_stats = STLFlowStats(pg_id = 2),
mode = STLTXCont(percentage = 10))

        s3 = STLStream(name = 'rx3',
                       packet = pkt3,
                       flow_stats = STLFlowStats(pg_id = 3),
mode = STLTXCont(percentage = 10))
        s4 = STLStream(name = 'rx4',
                       packet = pkt4,
                       flow_stats = STLFlowStats(pg_id = 4),
mode = STLTXCont(percentage = 10))

        s5 = STLStream(name = 'rx5',
                       packet = pkt5,
                       flow_stats = STLFlowStats(pg_id = 5),
mode = STLTXCont(pps = 4801))

        s6 = STLStream(name = 'rx6',
                       packet = pkt6,
                       flow_stats = STLFlowStats(pg_id = 6),
mode = STLTXSingleBurst(total_pkts = 100000, percentage = 10))
streams = [s1,s2 ,s3,s4, s5, s6]
        # connect to server
        c.connect()

        # prepare our ports
        c.reset(ports = [tx_port, rx_port])

        # add stream to port
        c.add_streams(streams, ports = [tx_port])


        rc = rx_iteration(c, tx_port, rx_port, s1.get_pkt_len())
        if not rc:
            passed = False

#print c.get_stats()

    except STLError as e:
        passed = False
        print(e)

    finally:
        c.disconnect()

    if passed:
        print("\nTest passed :-)\n")
    else:
        print("\nTest failed :-(\n")

# RX one iteration
def rx_iteration (c, tx_port, rx_port, pkt_len):
    ret = True

    c.clear_stats()

    c.start(ports = [tx_port],duration=500)
    c.wait_on_traffic(ports = [tx_port])

    global_flow_stats = c.get_pgid_stats()['flow_stats']
    print global_flow_stats
 #   print json.dumps(flow_stats, indent = 4)
    print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
#    print json.dumps(flow_stats2, indent = 4)
    print global_flow_stats.get(0)["rx_pkts"]
    print global_flow_stats.get(2)["rx_pkts"]
    print global_flow_stats.get(3)["rx_pkts"]
    print global_flow_stats.get(5)



# run the tests
rx_example(tx_port = 0, rx_port = 1, burst_size = 1000, bw = 40)

```
Reply all
Reply to author
Forward
0 new messages