summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/examples
diff options
context:
space:
mode:
authorDan Klein <danklei@cisco.com>2015-10-12 08:45:06 +0300
committerDan Klein <danklei@cisco.com>2015-10-12 08:45:06 +0300
commitfba9663980d600d9c54c90f5ebd4afc346a007db (patch)
tree2b83fedde188e442ebc8e54eac00e4d33decafe5 /scripts/automation/trex_control_plane/examples
parentca479ac9bb1e4d1a5953e9d121ab39a29f7b8b8e (diff)
parente6bf849809c1ff84eb887973576611f2457774eb (diff)
Merge branch 'dan_stateless' into dan_latest
Diffstat (limited to 'scripts/automation/trex_control_plane/examples')
-rw-r--r--scripts/automation/trex_control_plane/examples/interactive_stateless.py128
-rwxr-xr-xscripts/automation/trex_control_plane/examples/pkt_generation_for_trex.py20
2 files changed, 138 insertions, 10 deletions
diff --git a/scripts/automation/trex_control_plane/examples/interactive_stateless.py b/scripts/automation/trex_control_plane/examples/interactive_stateless.py
new file mode 100644
index 00000000..7c25b4ef
--- /dev/null
+++ b/scripts/automation/trex_control_plane/examples/interactive_stateless.py
@@ -0,0 +1,128 @@
+#!/router/bin/python
+
+import trex_root_path
+from client.trex_stateless_client import *
+from common.trex_exceptions import *
+import cmd
+from termstyle import termstyle
+# import termstyle
+import os
+from argparse import ArgumentParser
+import socket
+import errno
+import ast
+import json
+
+
+class InteractiveStatelessTRex(cmd.Cmd):
+
+ intro = termstyle.green("\nInteractive shell to play with Cisco's TRex stateless API.\
+ \nType help to view available pre-defined scenarios\n(c) All rights reserved.\n")
+ prompt = '> '
+
+ def __init__(self, trex_host, trex_port, virtual, verbose):
+ cmd.Cmd.__init__(self)
+
+ self.verbose = verbose
+ self.virtual = virtual
+ self.trex = CTRexStatelessClient(trex_host, trex_port, self.virtual)
+ self.DEFAULT_RUN_PARAMS = dict(m=1.5,
+ nc=True,
+ p=True,
+ d=100,
+ f='avl/sfr_delay_10_1g.yaml',
+ l=1000)
+ self.run_params = dict(self.DEFAULT_RUN_PARAMS)
+
+ def do_transmit(self, line):
+ """Transmits a request over using a given link to server.\
+ \nuse: transmit [method_name] [method_params]"""
+ if line == "":
+ print "\nUsage: [method name] [param dict as string]\n"
+ print "Example: rpc test_add {'x': 12, 'y': 17}\n"
+ return
+
+ args = line.split(' ', 1) # args will have max length of 2
+ method_name = args[0]
+ params = None
+ bad_parse = False
+
+ try:
+ params = ast.literal_eval(args[1])
+ if not isinstance(params, dict):
+ bad_parse = True
+ except ValueError as e1:
+ bad_parse = True
+ except SyntaxError as e2:
+ bad_parse = True
+
+ if bad_parse:
+ print "\nValue should be a valid dict: '{0}'".format(args[1])
+ print "\nUsage: [method name] [param dict as string]\n"
+ print "Example: rpc test_add {'x': 12, 'y': 17}\n"
+ return
+
+ response = self.trex.transmit(method_name, params)
+ if not self.virtual:
+ # expect response
+ rc, msg = response
+ if rc:
+ print "\nServer Response:\n\n" + json.dumps(msg) + "\n"
+ else:
+ print "\n*** " + msg + "\n"
+
+
+
+
+
+ def do_push_files(self, filepaths):
+ """Pushes a custom file to be stored locally on T-Rex server.\
+ \nPush multiple files by specifying their path separated by ' ' (space)."""
+ try:
+ filepaths = filepaths.split(' ')
+ print termstyle.green("*** Starting pushing files ({trex_files}) to T-Rex. ***".format(
+ trex_files=', '.join(filepaths))
+ )
+ ret_val = self.trex.push_files(filepaths)
+ if ret_val:
+ print termstyle.green("*** End of T-Rex push_files method (success) ***")
+ else:
+ print termstyle.magenta("*** End of T-Rex push_files method (failed) ***")
+
+ except IOError as inst:
+ print termstyle.magenta(inst)
+
+if __name__ == "__main__":
+ parser = ArgumentParser(description=termstyle.cyan('Run TRex client stateless API demos and scenarios.'),
+ usage="client_interactive_example [options]")
+
+ parser.add_argument('-v', '--version', action='version', version='%(prog)s 1.0 \t (C) Cisco Systems Inc.\n')
+
+ parser.add_argument("-t", "--trex-host", required = True, dest="trex_host",
+ action="store", help="Specify the hostname or ip to connect with T-Rex server.",
+ metavar="HOST" )
+ parser.add_argument("-p", "--trex-port", type=int, default = 5050, metavar="PORT", dest="trex_port",
+ help="Select port on which the T-Rex server listens. Default port is 5050.", action="store")
+ # parser.add_argument("-m", "--maxhist", type=int, default = 100, metavar="SIZE", dest="hist_size",
+ # help="Specify maximum history size saved at client side. Default size is 100.", action="store")
+ parser.add_argument("--virtual", dest="virtual",
+ action="store_true",
+ help="Switch ON virtual option at TRex client. Default is: OFF.",
+ default=False)
+ parser.add_argument("--verbose", dest="verbose",
+ action="store_true",
+ help="Switch ON verbose option at TRex client. Default is: OFF.",
+ default=False)
+ args = parser.parse_args()
+
+ try:
+ InteractiveStatelessTRex(**vars(args)).cmdloop()
+
+ except KeyboardInterrupt:
+ print termstyle.cyan('Bye Bye!')
+ exit(-1)
+ except socket.error, e:
+ if e.errno == errno.ECONNREFUSED:
+ raise socket.error(errno.ECONNREFUSED,
+ "Connection from T-Rex server was terminated. \
+ Please make sure the server is up.")
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
index 7e7f6139..acaa95d3 100755
--- a/scripts/automation/trex_control_plane/examples/pkt_generation_for_trex.py
+++ b/scripts/automation/trex_control_plane/examples/pkt_generation_for_trex.py
@@ -2,7 +2,7 @@
######################################################################################
### ###
-### T-Rex end-to-end demo script, written by T-Rex dev-team ###
+### TRex end-to-end demo script, written by TRex 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) ###
### ###
@@ -33,13 +33,13 @@ def pkts_to_pcap (pcap_filename, packets):
def main (args):
- # instantiate T-Rex client
+ # instantiate TRex 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.
+ # generate TRex traffic.
pkts = generate_dns_packets('21.0.0.2', '22.0.0.12') # In this case - DNS traffic (request-response)
print "\ngenerated traffic:"
print "=================="
@@ -50,7 +50,7 @@ def main (args):
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
+ trex_files_path = trex.get_trex_files_path() # fetch the path in which packets are saved on TRex server
yaml_obj = CTRexYaml(trex_files_path) # instantiate CTRexYaml obj
# set .yaml file parameters according to need and use
@@ -65,12 +65,12 @@ def main (args):
yaml_obj.dump()
if args.steps:
- print "\nNext step: run T-Rex with provided files."
+ print "\nNext step: run TRex 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..."
+ print "\nStarting TRex..."
trex.start_trex(c = 2,
m = 1.5,
nc = True,
@@ -80,8 +80,8 @@ def main (args):
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)"
+ print "TRex state changed to 'Running'."
+ print "Sampling TRex in 0.2 samples/sec (single sample every 5 secs)"
last_res = dict()
while trex.is_running(dump_out = last_res):
@@ -92,14 +92,14 @@ def main (args):
if __name__ == "__main__":
- parser = ArgumentParser(description = 'Run T-Rex client API end-to-end example.',
+ parser = ArgumentParser(description = 'Run TRex 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.",
+ action="store_true", help="Switch ON verbose option at TRex client. Default is: OFF.",
default = False )
args = parser.parse_args()
main(args) \ No newline at end of file