diff options
Diffstat (limited to 'scripts/automation/trex_control_plane/examples/pkt_generation_for_trex.py')
-rwxr-xr-x | scripts/automation/trex_control_plane/examples/pkt_generation_for_trex.py | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/scripts/automation/trex_control_plane/examples/pkt_generation_for_trex.py b/scripts/automation/trex_control_plane/examples/pkt_generation_for_trex.py new file mode 100755 index 00000000..7e7f6139 --- /dev/null +++ b/scripts/automation/trex_control_plane/examples/pkt_generation_for_trex.py @@ -0,0 +1,105 @@ +#!/router/bin/python + +###################################################################################### +### ### +### T-Rex end-to-end demo script, written by T-Rex dev-team ### +### THIS SCRIPT ASSUMES PyYaml and Scapy INSTALLED ON PYTHON'S RUNNING MACHINE ### +### (for any question please contact trex-dev team @ trex-dev@cisco.com) ### +### ### +###################################################################################### + + +import logging +import time +import trex_root_path +from client.trex_client import * +from client_utils.general_utils import * +from client_utils.trex_yaml_gen import * +from pprint import pprint +from argparse import ArgumentParser + +# import scapy package +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) # supress scapy import warnings from being displayed +from scapy.all import * + + +def generate_dns_packets (src_ip, dst_ip): + dns_rqst = Ether(src='00:15:17:a7:75:a3', dst='e0:5f:b9:69:e9:22')/IP(src=src_ip,dst=dst_ip,version=4L)/UDP(dport=53, sport=1030)/DNS(rd=1,qd=DNSQR(qname="www.cisco.com")) + dns_resp = Ether(src='e0:5f:b9:69:e9:22', dst='00:15:17:a7:75:a3')/IP(src=dst_ip,dst=src_ip,version=4L)/UDP(dport=1030, sport=53)/DNS(aa=1L, qr=1L, an=DNSRR(rclass=1, rrname='www.cisco.com.', rdata='100.100.100.100', type=1), ad=0L, qdcount=1, ns=None, tc=0L, rd=0L, ar=None, opcode=0L, ra=1L, cd=0L, z=0L, rcode=0L, qd=DNSQR(qclass=1, qtype=1, qname='www.cisco.com.')) + return [dns_rqst, dns_resp] + +def pkts_to_pcap (pcap_filename, packets): + wrpcap(pcap_filename, packets) + + +def main (args): + # instantiate T-Rex client + trex = CTRexClient('trex-dan', verbose = args.verbose) + + if args.steps: + print "\nNext step: .pcap generation." + raw_input("Press Enter to continue...") + # generate T-Rex traffic. + pkts = generate_dns_packets('21.0.0.2', '22.0.0.12') # In this case - DNS traffic (request-response) + print "\ngenerated traffic:" + print "==================" + map(lambda x: pprint(x.summary()) , pkts) + pkts_to_pcap("dns_traffic.pcap", pkts) # Export the generated to a .pcap file + + if args.steps: + print "\nNext step: .yaml generation." + raw_input("Press Enter to continue...") + # Generate .yaml file that uses the generated .pcap file + trex_files_path = trex.get_trex_files_path() # fetch the path in which packets are saved on T-Rex server + yaml_obj = CTRexYaml(trex_files_path) # instantiate CTRexYaml obj + + # set .yaml file parameters according to need and use + ret_idx = yaml_obj.add_pcap_file("dns_traffic.pcap") + yaml_obj.set_cap_info_param('cps', 1.1, ret_idx) + + # export yaml_ob to .yaml file + yaml_file_path = trex_files_path + 'dns_traffic.yaml' + yaml_obj.to_yaml('dns_traffic.yaml') + print "\ngenerated .yaml file:" + print "====================" + yaml_obj.dump() + + if args.steps: + print "\nNext step: run T-Rex with provided files." + raw_input("Press Enter to continue...") + # push all relevant files to server + trex.push_files( yaml_obj.get_file_list() ) + + print "\nStarting T-Rex..." + trex.start_trex(c = 2, + m = 1.5, + nc = True, + p = True, + d = 30, + f = yaml_file_path, # <-- we use out generated .yaml file here + l = 1000) + + if args.verbose: + print "T-Rex state changed to 'Running'." + print "Sampling T-Rex in 0.2 samples/sec (single sample every 5 secs)" + + last_res = dict() + while trex.is_running(dump_out = last_res): + print "CURRENT RESULT OBJECT:" + obj = trex.get_result_obj() + print obj + time.sleep(5) + + +if __name__ == "__main__": + parser = ArgumentParser(description = 'Run T-Rex client API end-to-end example.', + usage = """pkt_generation_for_trex [options]""" ) + + parser.add_argument("-s", "--step-by-step", dest="steps", + action="store_false", help="Switch OFF step-by-step script overview. Default is: ON.", + default = True ) + parser.add_argument("--verbose", dest="verbose", + action="store_true", help="Switch ON verbose option at T-Rex client. Default is: OFF.", + default = False ) + args = parser.parse_args() + main(args)
\ No newline at end of file |