コード例 #1
0
def main():
    c_debug = 0
    c_pe = 2
    c_repeat = 0
    c_conn = 1000
    c_len = 1460

    try:
        opts, args = getopt.getopt(sys.argv[1:], "hde:r:n:s:")
    except getopt.GetoptError:
        helptext()

    for opt, arg in opts:
        if opt == '-h':
            helptext()
        elif opt in ("-d"):
            c_debug = 1
        elif opt in ("-e"):
            c_pe = int(arg)
        elif opt in ("-r"):
            c_repeat = int(arg)
        elif opt in ("-n"):
            c_conn = int(arg)
        elif opt in ("-s"):
            c_len = int(arg)

    arglen = len(args)
    if arglen < 3 or (arglen - 1) % 2 != 0:
        helptext()

    ip_address = args[0]

    # Build list of server and client ports
    for i in range(arglen - 1):
        if i % 2 == 0:
            svrs.append(args[i + 1])
        else:
            clis.append(args[i + 1])

    ports = svrs + clis

    xm = XenaScriptTools(ip_address)
    if c_debug:
        xm.debugOn()
    xm.haltOn()

    lp = LoadProfile(0, 1000, 8000, 1000, "msecs")

    s_repeat = str(c_repeat)
    if c_repeat == 0:
        s_repeat = "INFINITE"

    print
    print "==CONFIGURATION==========================================="
    print "CFG connections : %d" % (c_conn)
    print "CFG server ports: " + " ".join(svrs)
    print "CFG client ports: " + " ".join(clis)
    print "CFG repeats     : %s" % (s_repeat)
    print "CFG payload size: %d" % (c_len)
    print "CFG duration    : %ds" % (lp.duration_sec())
    print "CFG pkteng      : %d" % (c_pe)
    print "CFG debug       : %d" % (c_debug)
    print

    print "==TEST EXECUTION=========================================="

    xm.Comment("Logon, reserve and reset ports")
    xm.LogonSetOwner("xena", "s_reqres")

    xm.PortReserve(ports)
    xm.PortReset(ports)

    xm.Comment("Configure %d clients - total %d CC" % (c_conn, c_conn))
    xm.PortAddConnGroup(ports, 1, "10.0.1.1 " + str(c_conn) + " 40001 1",
                        "11.0.1.1 1 80 1", 4)
    xm.PortRole(svrs, 1, "server")
    xm.PortRole(clis, 1, "client")
    xm.PortAddLoadProfile(ports, 1, lp.shape(), lp.timescale)

    xm.Comment("Configure application")
    for port in ports:
        xm.SendExpectOK(port + " P4E_ALLOCATE " + str(c_pe))
        xm.SendExpectOK(port + " P4G_TEST_APPLICATION [1] raw")
        xm.SendExpectOK(port + " P4G_RAW_TEST_SCENARIO [1] download")
        xm.SendExpectOK(port + " P4G_RAW_HAS_DOWNLOAD_REQ [1] yes")
        xm.SendExpectOK(port + " P4G_RAW_CLOSE_CONN [1] no")
        xm.SendExpectOK(port + " P4G_RAW_TX_DURING_RAMP [1] no no")
        xm.SendExpectOK(port + " P4G_RAW_TX_TIME_OFFSET [1] 100 100")
        if c_repeat:
            xm.SendExpectOK(port + " P4G_RAW_REQUEST_REPEAT [1] FINITE " +
                            str(c_repeat))
        else:
            xm.SendExpectOK(port + " P4G_RAW_REQUEST_REPEAT [1] INFINITE 1")
        xm.SendExpectOK(port + " P4G_RAW_PAYLOAD_TYPE [1] fixed")
        xm.SendExpectOK(port + " P4G_RAW_PAYLOAD_TOTAL_LEN [1] FINITE " +
                        str(c_len))
        xm.SendExpectOK(port + " P4G_RAW_PAYLOAD_REPEAT_LEN [1] 1")

    xm.Comment("Configure Request")
    for port in ports:
        #xm.SendExpectOK(port + " p4g_raw_download_request [1] 86 0x474554202F706174682F66696C652E68746D6C20485454502F312E300D0A46726F6D3A20736F6D6575736572406A6D61727368616C6C2E636F6D0D0A557365722D4167656E743A2048545450546F6F6C2F312E300D0A")
        xm.SendExpectOK(port + " p4g_raw_download_request [1] 1 0xCC")

    xm.Comment("Configure Response")
    for port in svrs:
        xm.SendExpectOK(port + " P4G_RAW_PAYLOAD [1] 0 1 0xAA")
        if c_len > 1:
            xm.SendExpectOK(port + " P4G_RAW_PAYLOAD [1] " + str(c_len - 1) +
                            " 1 0xBB")

    for port in clis:
        xm.SendExpectOK(port + " P4G_RAW_RX_PAYLOAD_LEN [1] FINITE " +
                        str(c_len))

    xm.Comment("Setup utilization and prepare for testrun")
    for port in clis:
        xm.SendExpectOK(port + " P4G_RAW_UTILIZATION [1] 999900")
    for port in svrs:
        xm.SendExpectOK(port + " P4G_RAW_UTILIZATION [1] 999900")

    xm.Comment("Prepare ports and run tests, start with servers")
    xm.PortPrepare(ports)

    xm.PortSetTraffic(ports, "prerun")
    xm.PortWaitState(ports, "PRERUN_RDY")

    xm.PortSetTraffic(svrs, "ON")
    xm.PortWaitState(svrs, "RUNNING")
    xm.PortSetTraffic(clis, "ON")

    waitsec = lp.duration_sec() + 2
    while waitsec != 0:
        acc = 0
        rate = 0
        for port in clis:
            trans = xm.Send(port +
                            " p4g_app_transaction_counters [1] ?").split()
            acc = int(trans[5])
            rate = int(trans[6])
            print "Port %s: Transactions: %12u, Rate: %12u " % (port, acc,
                                                                rate)

        time.sleep(1)
        waitsec -= 1

    for port in ports:
        xm.Send(port + " P4_TRAFFIC stop")

    #xm.PortRelease(ports)
    print "==DONE==================================================="

    return 0
コード例 #2
0
def main(argv):
    c_debug = 0
    c_lp = "0 1000 5000 1000"
    c_conns = 1
    c_pe = 1
    c_cap = 0
    c_nat = 0
    c_noarp = 0

    try:
        opts, args = getopt.getopt(sys.argv[1:], "dhl:n:e:", ["cap=", "noarp"])
    except getopt.GetoptError:
        helptext()
        return

    for opt, arg in opts:
        if opt == '-h':
            helptext()
            return
        elif opt in ("-d"):
            c_debug = 1
        elif opt in ("-e"):
            c_pe = arg
        elif opt in ("--cap"):
            c_cap = int(arg)
        elif opt in ("-n"):
            c_conns = int(arg)
        elif opt in ("--noarp"):
            c_noarp = 1
        elif opt in ("-l"):
            c_lp = arg

    arglen = len(args)
    if arglen != 6:
        helptext()
        return

    l47_server = args[0]
    cln_ip = args[1]
    svr_ip = args[2]
    nat_ip = args[3]
    svrp = args[4]
    clnp = args[5]

    if cln_ip == svr_ip:
        c_routed = 0
        c_topo = "switched"
    else:
        c_routed = 1
        c_topo = "routed"

    if nat_ip != "0.0.0":
        c_nat = 1
        c_topo = "nat"

    ports = [svrp] + [clnp]

    LOADPROFILE = c_lp

    xm = XenaScriptTools(l47_server)

    if c_debug:
        xm.debugOn()
    xm.haltOn()

    arpps = 1000 * c_conns / int(c_lp.split()[1])

    if c_nat:
        if c_routed:
            print "Combination of NAT and Routed NW not supported"
            return

    SVR_GW = svr_ip + ".1"
    SVR_IP = svr_ip + ".2"

    CLN_GW = cln_ip + ".1"
    CLN_IP = cln_ip + ".3"

    NAT_GW = nat_ip + ".1"
    NAT_IP = nat_ip + ".2"

    print "==CONFIGURATION==========================================="
    print "CFG connections     %d" % (c_conns)
    print "CFG loadprofile     %s" % (c_lp)
    print "CFG arp rate        %d" % (arpps)
    print "CFG Suppress ARP    %d" % (c_noarp)
    print "CFG debug           %d" % (c_debug)
    print "CFG ports           %s" % (" ".join(ports))
    print "CFG pkteng          %s" % (c_pe)
    print "CFG capture         %d" % (c_cap)
    print "CFG NW Topo         %s" % (c_topo)
    print "CFG cln_ip          %s" % (CLN_IP)
    print "CFG svr_ip          %s" % (SVR_IP)

    if c_nat:
        print "CFG NAT_IP          %s" % (NAT_IP)
        print "CFG NAT_GW          %s" % (NAT_GW)
    else:
        if c_routed:
            print "CFG svr_gw          %s" % (SVR_GW)
            print "CFG cln_gw          %s" % (CLN_GW)
    print

    print "==TEST EXECUTION=========================================="

    xm.Comment("Logon and Reserve")

    xm.LogonAndReserve(ports, "xena", "s_route")

    xm.PortReset(ports)

    CLI_RNG = CLN_IP + " " + str(c_conns) + " 10000 1"
    SVR_RNG = SVR_IP + " 1 80 1"
    NAT_RNG = NAT_IP + " 1 80 1"

    xm.Comment("Configure")
    xm.PortAddConnGroup(clnp, 1, CLI_RNG, SVR_RNG, 4)
    if c_nat:
        xm.PortAddConnGroup(svrp, 1, CLI_RNG, NAT_RNG, 4)
    else:
        xm.PortAddConnGroup(svrp, 1, CLI_RNG, SVR_RNG, 4)

    xm.PortRole(clnp, 1, "client")
    xm.PortRole(svrp, 1, "server")

    if c_topo == "routed":
        xm.SendExpectOK(clnp + " P4G_L2_GW [1] " + CLN_GW + " 0x010101010101")
        xm.SendExpectOK(clnp + " P4G_L2_USE_GW [1] YES")
        xm.SendExpectOK(svrp + " P4G_L2_GW [1] " + SVR_GW + " 0x020202020202")
        xm.SendExpectOK(svrp + " P4G_L2_USE_GW [1] YES")
        if not c_noarp:
            xm.SendExpectOK(clnp + " P4G_L2_USE_ARP [1] YES")
            xm.SendExpectOK(svrp + " P4G_L2_USE_ARP [1] YES")
    elif c_topo == "switched":
        if not c_noarp:
            xm.SendExpectOK(clnp + " P4G_L2_USE_ARP [1] YES")
            xm.SendExpectOK(svrp + " P4G_L2_USE_ARP [1] YES")
    elif c_topo == "nat":
        xm.SendExpectOK(svrp + " P4G_PROXY [1] ON")
        if not c_noarp:
            xm.SendExpectOK(clnp + " P4G_L2_USE_ARP [1] YES")
    else:
        print "Internal Error"
        return

    for port in ports:
        xm.SendExpectOK(port + " P4_ARP_REQUEST " + str(arpps) + " 1000 3")
        xm.SendExpectOK(port + " P4E_ALLOCATE " + str(c_pe))
        xm.PortAddLoadProfile(port, 1, LOADPROFILE, "msec")
        if c_cap:
            xm.SendExpectOK(port + " P4_CAPTURE ON")
        xm.SendExpectOK(port + " P4_CLEAR_COUNTERS")
        xm.SendExpectOK(port + " P4G_TEST_APPLICATION [1] NONE")

    t = 0
    for dt in c_lp.split():
        t = t + int(dt)
    slp = t / 1000 + 1

    xm.Comment("Prepare and Run")
    print "Traffic PREPARE"
    xm.PortPrepare(ports)
    xm.PortWaitState(ports, "PREPARE_RDY")

    print "Traffic PRERUN"
    xm.PortSetTraffic(ports, "prerun")
    xm.PortWaitState(ports, "PRERUN_RDY")

    print "Traffic ON (servers)"
    xm.PortSetTraffic(svrp, "on")
    xm.PortWaitState(svrp, "RUNNING")

    print "Traffic ON (clients)"
    xm.PortSetTraffic(clnp, "on")
    xm.PortWaitState(clnp, "RUNNING")

    print "Sleeping " + str(slp) + " seconds"
    time.sleep(slp)

    xm.Comment("Stop traffic, and collect statistics")
    print "Traffic STOP"
    xm.PortSetTraffic(ports, "stop")
    xm.PortWaitState(ports, "STOPPED")
    for port in ports:
        if c_cap:
            xm.SendExpectOK(port + " P4_CAPTURE OFF")

    print "Getting TCP stats"
    n_est = 0
    print "==SERVER======================================="
    stats = xm.Send(svrp + " P4G_TCP_STATE_TOTAL [1] ?")
    n_est = n_est + int(stats.split()[9])
    print stats
    print "==CLIENT======================================="
    stats = xm.Send(clnp + " P4G_TCP_STATE_TOTAL [1] ?")
    n_est = n_est + int(stats.split()[9])
    print stats
    print "Requested conns: %d, established: %d" % (c_conns * len(svrp),
                                                    n_est / 2)
    xm.PrintPortStatistics(ports)

    if c_cap:
        xm.Comment("Extract captured packets")
        print "==CAPTURE============================================"
        xm.PortGetPackets(ports, c_cap)
        for port in ports:
            xm.SendExpectOK(port + " P4_CAPTURE OFF")

    print "==DONE============================================"

    xm.PortStateOff(ports)

    xm.PortRelease(ports)
コード例 #3
0
ファイル: Bisect.py プロジェクト: stearny/xenascriptlibs
def main():
    global ports
    c_res = 5
    c_nat = 0
    c_pe = 2
    c_debug = 0
    c_arp = 0
    c_ipver = 4
    s_ipver = "IPv4"

    cg_id = 0

    try:
        opts, args = getopt.getopt(sys.argv[1:], "46adhr:pe:",
                                   ["nat", "pkteng=", "arp"])
    except getopt.GetoptError:
        helptext()
        return

    for opt, arg in opts:
        if opt == '-h':
            helptext()
            return
        elif opt in ("-r"):
            c_res = int(arg)
        elif opt in ("-n", "--nat"):
            c_nat = 1
        elif opt in ("-a", "--arp"):
            c_arp = 1
        elif opt in ("-d"):
            c_debug = 1
        elif opt in ("-6"):
            c_ipver = 6
            s_ipver = "IPv6"
        elif opt in ("-4"):
            c_ipver = 4
            s_ipver = "IPv4"
        elif opt in ("-e", "--pkteng"):
            c_pe = int(arg)

    if len(args) != 7:
        helptext()

    ports.append(args[5])
    ports.append(args[6])

    ip_address = args[0]
    nip = int(args[1])
    nprt = int(args[2])
    n = nip * nprt
    ru_max = max(int(args[3]), int(args[4]))
    ru_min = min(int(args[3]), int(args[4]))
    rd_max = ru_max
    rd_min = ru_min

    print "==CONFIGURATION==========================================="
    print "CFG Ports:       " + " ".join(ports)
    print "CFG Connections: " + str(n)
    print "CFG IPversion:   " + s_ipver
    print "CFG NAT:       " + str(c_nat)
    print "CFG Prerun arp:  " + str(c_arp)
    print "CFG Resolution:  " + str(c_res)
    print "CFG Pkteng/Port: " + str(c_pe)
    print "CFG Debug:       " + str(c_debug)
    print

    xm = XenaScriptTools(ip_address)
    if c_debug:
        xm.debugOn()
    xm.haltOn()

    print "==PREPARATION==========================================="
    xm.Comment("Preparation")

    xm.LogonSetOwner("xena", "s_bisect")
    xm.PortReserve(ports)
    xm.PortReset(ports)

    if c_ipver == 6:
        CLIENT_RANGE = "0xaa01aa02aa03aa04aa05aa060a000001 " + str(
            nip) + " 10000 " + str(nprt) + " 65535"
        SERVER_RANGE = "0xbb01bb02bb03bb04bb05bb06bb07bb08 1 80 1"
    else:
        CLIENT_RANGE = "10.0.1.2 " + str(nip) + " 10000 " + str(
            nprt) + " 65535"
        SERVER_RANGE = "10.0.0.1 1 80 1"

    xm.PortAddConnGroup(ports, cg_id, CLIENT_RANGE, SERVER_RANGE, c_ipver)

    xm.PortRole(ports[1], cg_id, "client")
    xm.PortRole(ports[0], cg_id, "server")
    if c_nat:
        xm.SendExpectOK(ports[0] + " P4G_NAT [{0}] on".format(cg_id))

    xm.PortAllocatePE(ports, str(c_pe))

    for port in ports:
        #xm.SendExpectOK(port + " P4G_TCP_SYN_RTO [1] 10000 1 3")
        ##xm.SendExpectOK(port + " P4G_TCP_RTO [1] static 10000 1 3")
        if c_arp:
            xm.SendExpectOK(port +
                            " P4G_L2_USE_ADDRESS_RES [{0}] YES".format(cg_id))
        xm.SendExpectOK(port + " P4G_LP_TIME_SCALE [{0}] msec".format(cg_id))
        xm.SendExpectOK(port +
                        " P4G_TEST_APPLICATION [{0}] NONE".format(cg_id))

    print "==EXECUTION==========================================="
    xm.Comment("Fast limit")

    print "== Phase 1: Fast Limit   ==             - Ramp up   %d CPS (%s ms)" % (
        n * 1000 / ru_min, ru_min)
    print "                                          Ramp down %d CPS (%d ms)" % (
        n * 1000 / rd_min, rd_min)
    res = oneramp(xm, cg_id, ru_min, 2000, ru_min, n)

    if res[0] == 1:
        errexit("Max ramp up   (fastest ramp passed) - rerun")
    if res[1] == 1:
        errexit("Max ramp down (fastest ramp passed) - rerun")

    ru = ru_max
    rd = rd_max

    for i in range(1, 21):
        xm.Comment("Ramp Up - Iteration %2d" % (i))
        print "== Phase 2: Ramp Up - iteration %2d ==   - Ramp up   %d CPS (%d ms)" % (
            i, n * 1000 / ru, ru)
        print "                                          Ramp down %d CPS (%d ms)" % (
            n * 1000 / rd, rd)
        res = oneramp(xm, cg_id, ru, 2000, rd, n)

        if res[0] == 1:
            if res[1] == 1:
                rd_max = rd
            else:
                if rd == rd_max:
                    errexit("Max ramp down (slowest ramp failed)")
                rd_min = rd
            rd = (rd_max + rd_min) / 2
            ru_max = ru
        else:
            ru_min = ru
        ru = (ru_max + ru_min) / 2

        if (ru_max - ru_min) <= c_res:
            break

        print

    if (i == 20):
        errexit("Max Iterations reached")

    if ru_max == ru and res[0] == 0:
        errexit("Max ramp up (slowest ramp failed) - rerun")

    print
    for i in range(1, 21):
        xm.Comment("Ramp Down -Iteration %2d" % (i))
        print "== Phase 3: Ramp Down - iteration %2d == - Ramp down %d CPS (%d ms)" % (
            i, n * 1000 / rd, rd)

        res = oneramp(xm, cg_id, ru_max + 1000, 2000, rd, n)

        if (res[1] == 1):
            rd_max = rd
        else:
            rd_min = rd
        rd = (rd_max + rd_min) / 2

        if (rd_max - rd_min) <= c_res:
            break

        print

    xm.Comment("Done")
    if (i == 20):
        errexit("Status FAILED: Max iterations reached - rerun")

    if rd_max == rd and res[1] == 0:
        errexit("Max ramp down (slowest ramp failed) - rerun")

    xm.PortRelease(ports)

    print "==RESULT=================================================="
    print "Max ramp up    %d CPS (%d ms)" % (n * 1000 / ru_max, ru_max)
    print "Max ramp down  %d CPS (%d ms)" % (n * 1000 / rd_max, rd_max)
    print "=========================================================="
    print "Status PASSED"
コード例 #4
0
def main():
    c_debug = 0
    c_pe = 2
    c_repeat = 0
    c_conn = 1000

    cg_id = 0

    try:
        opts, args = getopt.getopt(sys.argv[1:], "hde:r:n:s:")
    except getopt.GetoptError:
        helptext()

    for opt, arg in opts:
        if opt == '-h':
            helptext()
        elif opt in ("-d"):
            c_debug = 1
        elif opt in ("-e"):
            c_pe = int(arg)
        elif opt in ("-r"):
            c_repeat = int(arg)
        elif opt in ("-n"):
            c_conn = int(arg)
        elif opt in ("-s"):
            c_len = int(arg)

    arglen = len(args)
    if arglen < 3 or (arglen - 1) % 2 != 0:
        helptext()

    ip_address = args[0]

    # Build list of server and client ports
    for i in range(arglen - 1):
        if i % 2 == 0:
            svrs.append(args[i + 1])
        else:
            clis.append(args[i + 1])

    ports = svrs + clis

    xm = XenaScriptTools(ip_address)
    if c_debug:
        xm.debugOn()
    xm.haltOn()

    lp = LoadProfile(0, 1000, 8000, 1000, "msecs")

    s_repeat = str(c_repeat)
    if c_repeat == 0:
        s_repeat = "INFINITE"

    print
    print "==CONFIGURATION==========================================="
    print "CFG connections : %d" % (c_conn)
    print "CFG server ports: " + " ".join(svrs)
    print "CFG client ports: " + " ".join(clis)
    print "CFG repeats     : %s" % (s_repeat)
    print "CFG duration    : %ds" % (lp.duration_sec())
    print "CFG pkteng      : %d" % (c_pe)
    print "CFG debug       : %d" % (c_debug)
    print

    print "==TEST EXECUTION=========================================="

    xm.Comment("Logon, reserve and reset ports")
    xm.LogonSetOwner("xena", "s_reqres")

    xm.PortReserve(ports)
    xm.PortReset(ports)

    xm.Comment("Configure %d clients - total %d CC" % (c_conn, c_conn))
    xm.PortAddConnGroup(ports, cg_id, "10.0.1.1 " + str(c_conn) + " 40001 1",
                        "11.0.1.1 1 80 1", 4)
    xm.PortRole(svrs, cg_id, "server")
    xm.PortRole(clis, cg_id, "client")
    xm.PortAddLoadProfile(ports, cg_id, lp.shape(), lp.timescale)

    xm.Comment("Configure application")
    for port in ports:
        xm.SendExpectOK(port + " P4E_ALLOCATE " + str(c_pe))
        xm.SendExpectOK(port + " P4G_TEST_APPLICATION [{0}] RAW".format(cg_id))
        xm.SendExpectOK(port +
                        " P4G_RAW_TEST_SCENARIO [{0}] DOWNLOAD".format(cg_id))
        xm.SendExpectOK(port +
                        " P4G_RAW_HAS_DOWNLOAD_REQ [{0}] YES".format(cg_id))
        xm.SendExpectOK(port + " P4G_RAW_CLOSE_CONN [{0}] NONE".format(cg_id))
        xm.SendExpectOK(port +
                        " P4G_RAW_TX_DURING_RAMP [{0}] YES YES".format(cg_id))
        if c_repeat:
            xm.SendExpectOK(port +
                            " P4G_RAW_REQUEST_REPEAT [{0}] FINITE {1}".format(
                                cg_id, c_repeat))
        else:
            xm.SendExpectOK(
                port +
                " P4G_RAW_REQUEST_REPEAT [{0}] INFINITE 0".format(cg_id))
        xm.SendExpectOK(port +
                        " P4G_RAW_PAYLOAD_TYPE [{0}] fixed".format(cg_id))
        xm.SendExpectOK(
            port +
            " P4G_RAW_PAYLOAD_TOTAL_LEN [{0}] FINITE {1}".format(cg_id, c_len))
        xm.SendExpectOK(port +
                        " P4G_RAW_PAYLOAD_REPEAT_LEN [{0}] 1".format(cg_id))

    xm.Comment("Configure Request")
    request_content = b"GET / HTTP/1.1\r\nHost: www.myhost.com\r\n\r\n"
    len_req = str(len(request_content))
    request_hex = "0x" + binascii.hexlify(request_content).decode('utf_8')

    for port in ports:
        xm.SendExpectOK(port +
                        " P4G_RAW_DOWNLOAD_REQUEST [{0}] {1} {2}".format(
                            cg_id, len_req, request_hex))

    xm.Comment("Configure Response")
    response_content = b"HTTP/1.1 200 OK\r\nContent-Length: 1\r\nContent-Type: text/plain\r\n\r\nA\r\n"
    len_res = str(len(response_content))
    response_hex = "0x" + binascii.hexlify(response_content).decode('utf_8')
    for port in svrs:
        xm.SendExpectOK(port + " P4G_RAW_PAYLOAD [{0}] 0 {1} {2}".format(
            cg_id, len_res, response_hex))

    for port in clis:
        xm.SendExpectOK(
            port +
            " P4G_RAW_RX_PAYLOAD_LEN [{0}] FINITE {1}".format(cg_id, len_res))

    xm.Comment("Setup utilization and prepare for testrun")
    for port in clis:
        xm.SendExpectOK(port +
                        " P4G_RAW_UTILIZATION [{0}] 999900".format(cg_id))
    for port in svrs:
        xm.SendExpectOK(port +
                        " P4G_RAW_UTILIZATION [{0}] 999900".format(cg_id))

    xm.Comment("Prepare ports and run tests, start with servers")
    xm.PortPrepare(ports)

    xm.PortSetTraffic(ports, "prerun")
    xm.PortWaitState(ports, "PRERUN_RDY")

    xm.PortSetTraffic(svrs, "ON")
    xm.PortWaitState(svrs, "RUNNING")
    xm.PortSetTraffic(clis, "ON")

    waitsec = lp.duration_sec() + 2
    while waitsec != 0:
        acc = 0
        rate = 0
        for port in clis:
            trans = xm.Send(
                port +
                " p4g_app_transaction_counters [{0}] ?".format(cg_id)).split()
            acc = int(trans[5])
            rate = int(trans[6])
            print "Port %s: Transactions: %12u, Rate: %12u " % (port, acc,
                                                                rate)

        time.sleep(1)
        waitsec -= 1

    for port in ports:
        xm.Send(port + " P4_TRAFFIC stop")

    #xm.PortRelease(ports)
    print "==DONE==================================================="

    return 0