summaryrefslogtreecommitdiffstats
path: root/api/stl/examples/stl_simple_burst.py
blob: 3b394d104ca9c8175a7b50f317a02cbed5a9df50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import sys
sys.path.insert(0, "../")

from trex_stl_api import *
import dpkt
import time

def simple_burst ():
    
    # build a simple packet

    pkt_bld = STLPktBuilder()
    pkt_bld.add_pkt_layer("l2", dpkt.ethernet.Ethernet())
    # set Ethernet layer attributes
    pkt_bld.set_eth_layer_addr("l2", "src", "00:15:17:a7:75:a3")
    pkt_bld.set_eth_layer_addr("l2", "dst", "e0:5f:b9:69:e9:22")
    pkt_bld.set_layer_attr("l2", "type", dpkt.ethernet.ETH_TYPE_IP)
    # set IP layer attributes
    pkt_bld.add_pkt_layer("l3_ip", dpkt.ip.IP())
    pkt_bld.set_ip_layer_addr("l3_ip", "src", "21.0.0.2")
    pkt_bld.set_ip_layer_addr("l3_ip", "dst", "22.0.0.12")
    pkt_bld.set_layer_attr("l3_ip", "p", dpkt.ip.IP_PROTO_TCP)
    # set TCP layer attributes
    pkt_bld.add_pkt_layer("l4_tcp", dpkt.tcp.TCP())
    pkt_bld.set_layer_attr("l4_tcp", "sport", 13311)
    pkt_bld.set_layer_attr("l4_tcp", "dport", 80)
    pkt_bld.set_layer_attr("l4_tcp", "flags", 0)
    pkt_bld.set_layer_attr("l4_tcp", "win", 32768)
    pkt_bld.set_layer_attr("l4_tcp", "seq", 0)
    #pkt_bld.set_pkt_payload("abcdefgh")
    pkt_bld.set_layer_attr("l3_ip", "len", len(pkt_bld.get_layer('l3_ip')))

   
    # create client
    c = STLClient()
    passed = True

    try:
        
        #c.logger.set_verbose(c.logger.VERBOSE_NORMAL)

        # create two bursts and link them
        s1 = STLStream(packet = pkt_bld,
                       mode = STLTXSingleBurst(total_pkts = 5000)
                       )

        s2 = STLStream(packet = pkt_bld,
                       mode = STLTXSingleBurst(total_pkts = 3000),
                       next_stream_id = s1.get_id())


        # connect to server
        c.connect()

        # prepare our ports
        c.reset(ports = [0, 1])

        # add both streams to ports
        c.add_streams([s1, s2], ports = [0, 1])

        # run 5 times
        for i in xrange(1, 6):
            c.clear_stats()
            c.start(ports = [0, 1], mult = "1gbps")
            c.wait_on_traffic(ports = [0, 1])

            stats = c.get_stats()
            ipackets  = stats['total']['ipackets']

            print "Test iteration {0} - Packets Received: {1} ".format(i, ipackets)
            # (5000 + 3000) * 2 ports = 16,000
            if (ipackets != (16000)):
                passed = False

    except STLError as e:
        passed = False
        print e

    finally:
        c.disconnect()

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


# run the tests
simple_burst()