mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-30 02:12:38 +00:00 
			
		
		
		
	 72712ff548
			
		
	
	72712ff548
	
	
	
		
			
			These scripts will now be publicly available in a git repo for easier shared development and change tracking.
		
			
				
	
	
		
			251 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			251 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| 
 | |
| # This program is used to create a hunt-script 
 | |
| # used for matrix load emulation on LANforge
 | |
| # (C) Candela Technologies 2015
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| #use Carp;
 | |
| #$SIG{ __DIE__ } = sub { Carp::confess( @_ ) };
 | |
| 
 | |
| # Un-buffer output
 | |
| $| = 1;
 | |
| use lib '/home/lanforge/scripts';
 | |
| use LANforge::Endpoint;
 | |
| use LANforge::Port;
 | |
| use LANforge::Utils;
 | |
| use Net::Telnet ();
 | |
| use Getopt::Long;
 | |
| 
 | |
| use constant      NA          => "NA";
 | |
| use constant      NL          => "\n";
 | |
| use constant      shelf_num   => 1;
 | |
| 
 | |
| # Default values for ye ole cmd-line args.
 | |
| our $resource         = 1;
 | |
| our $quiet            = "yes";
 | |
| our $endp_name        = "";
 | |
| our $action           = "";
 | |
| our $lfmgr_host       = "localhost";
 | |
| our $lfmgr_port       = 4001;
 | |
| 
 | |
| our $script_name     = undef;
 | |
| our $script_type     = "";
 | |
| our $flags           = "";
 | |
| our $loops           = 0;
 | |
| our $private         = "";
 | |
| our $group_action    = "ALL";
 | |
| our $log_cli         = "unset"; # use ENV{LOG_CLI} elsewhere
 | |
| 
 | |
| ########################################################################
 | |
| # Nothing to configure below here, most likely.
 | |
| ########################################################################
 | |
| 
 | |
| =pod
 | |
| Below is an example of a set_script for script name bunny 
 | |
| set_script hunt-sta-A bunny 4096 ScriptHunt '60000 1000 50000,100000,500000,20,56000,30000,1,100000, 60,128,256,512,1024,1280,1460,1472,1514 60,128,256,512,1024,1280,1460,1472,1514 100,300,400,600,800,955 NONE' ALL 0
 | |
| which should follow this syntax:
 | |
| 
 | |
|    endp:          hunt-sta-A
 | |
|    name:          bunny
 | |
|    flags:         4096
 | |
|    type:          ScriptHunt
 | |
|    private:       '60000 1000 50000,100000,500000,20,56000,30000,1,100000, 60,128,256,512,1024,1280,1460,1472,1514 60,128,256,512,1024,1280,1460,1472,1514 100,300,400,600,800,955 NONE' 
 | |
|    group_action:  ALL
 | |
|    loop_count:    0
 | |
| 
 | |
| The private syntax is very opaque
 | |
|    ScriptHunt syntax is: run_duration pause_duration constraints payload_sizes_a payload_sizes_b attenuations attenuator
 | |
|    run_duration      60000
 | |
|    pause_duration    1000
 | |
|    constraints       50000,100000,500000,20,56000,30000,1,100000,
 | |
|    payload_sizes_a   60,128,256,512,1024,1280,1460,1472,1514 60,128,256,512,1024,1280,1460,1472,1514 100,300,400,600,800,955
 | |
|    payload_sizes_b   NONE
 | |
|    attenuations      ?
 | |
|    attenuator        ?
 | |
| =cut
 | |
| 
 | |
| 
 | |
| our $usage = qq<$0 ...
 | |
|   [--action { set_script|start_cx|quiece_cx|stop_cx|show_report|del_script } ]
 | |
|    set_script: configure a cx with script parameters set in script_type, script_flags
 | |
|    show_port:  show script report for cx
 | |
|    del_script: remove script from cx
 | |
|    start_cx:   start traffic on a connection (thus starting script)
 | |
|    quiece_cx:  stop transmitting traffic and wait a period before stopping connection recieve
 | |
|    stop_cx:    stop transmit and recieve immediately
 | |
|    # --action start_cx --cx_name bunbun
 | |
|   [--mgr          {host-name | IP}]
 | |
|   [--mgr_port     {ip port}]
 | |
|   [--resource     {number}]
 | |
|   [--quiet        { yes | no }]
 | |
|   [--endp_name    {endpoint name}]
 | |
|   [--cx_name      {endpoint name}]
 | |
|   [--script_type  {2544|Hunt|WanLink|Atten} ]
 | |
|                      2544        - RFC 2544 type script
 | |
|                      Hunt        - Hunt for maximum speed with constraints
 | |
|                      WanLink     - iterate thru wanlink settings
 | |
|                      Atten       - use with attenuators
 | |
|   [--flags        - see LF CLI User Guide script flags for set_port]
 | |
|   [--script_name  - script name]
 | |
|   [--loops        - how many time to loop before stopping; (0 is infinite)]
 | |
|   [--private      - the nested script-type parameters in a single string]
 | |
|   [--log_cli      {1|filename}]
 | |
| 
 | |
| Please refer to LANforge CLI Users Guide: http://www.candelatech.com/lfcli_ug.php#set_script
 | |
| 
 | |
| Examples:
 | |
| # add a script to an endpoint
 | |
| $0 --action set_script --script_type Hunt \\
 | |
|    --script_name bunny --endp_name cx3eth0 -loops 1 --flags 4096 \\
 | |
|    --private '60000 1000 50000,100000,500000,20,56000,30000,1,100000, 60,128,256,512,1024,1280,1460,1472,1514 60,128,256,512,1024,1280,1460,1472,1514 100,300,400,600,800,955 NONE' 
 | |
| 
 | |
| # start the cx to start the script:
 | |
| $0 --action start_cx --cx_name hunt-sta 
 | |
| 
 | |
| # quiesce the cx
 | |
| $0 --action quiece_cx --cx_name hunt-sta
 | |
| 
 | |
| # show the report
 | |
| $0 --action show_report --endp_name hunt-sta-A
 | |
| 
 | |
| # stop the cx
 | |
| $0 --action stop_cx --cx_name hunt-sta
 | |
| 
 | |
| # remove endpoint script
 | |
| $0 --action del_script --endp_name hunt-sta-A
 | |
| >;
 | |
| 
 | |
| my $i = 0;
 | |
| my $cmd;
 | |
| die($::usage) if (@ARGV < 2);
 | |
| 
 | |
| GetOptions
 | |
| (
 | |
|      'action|a=s'       => \$::action,
 | |
|      'mgr|m=s'          => \$::lfmgr_host,
 | |
|      'mgr_port|p=i'     => \$::lfmgr_port,
 | |
|      'resource|r=i'     => \$::resource,
 | |
|      'quiet|q=s'        => \$::quiet,
 | |
|      'endp_name|e=s'    => \$::endp_name,
 | |
|      'cx_name|c=s'      => \$::cx_name,
 | |
|      'script_type|t=s'  => \$::script_type,
 | |
|      'flags|f=i'        => \$::flags,
 | |
|      'script_name|n=s'  => \$::script_name,
 | |
|      'loops|l=i'        => \$::loops,
 | |
|      'private|b=s'      => \$::private,
 | |
|      'log_cli=s{0,1}'=> \$log_cli,
 | |
| ) || die("$::usage");
 | |
| 
 | |
| 
 | |
| die("please specify action\n$usage")
 | |
|    if (!defined $::action || $::action eq "");
 | |
| 
 | |
| if ($::action eq "set_script"
 | |
|    || $::action eq "show_report"
 | |
|    || $::action eq "del_script") {
 | |
|    die("please specify endpoint name\n$usage")
 | |
|       if (!defined $::endp_name || $::endp_name eq "");
 | |
| }
 | |
| if ($::action eq "set_script"
 | |
|    || $::action eq "del_script") {
 | |
| 
 | |
|    die("please specify script name\n$usage")
 | |
|       if (!defined $::script_name || $::script_name eq "");
 | |
| }
 | |
| 
 | |
| if (defined $log_cli) {
 | |
|   if ($log_cli ne "unset") {
 | |
|     # here is how we reset the variable if it was used as a flag
 | |
|     if ($log_cli eq "") {
 | |
|       $ENV{'LOG_CLI'} = 1;
 | |
|     }
 | |
|     else {
 | |
|       $ENV{'LOG_CLI'} = $log_cli;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| # Open connection to the LANforge server.
 | |
| 
 | |
| our $t = new Net::Telnet(Prompt => '/default\@btbits\>\>/',
 | |
|           Timeout => 20);
 | |
| $t->open(Host    => $lfmgr_host,
 | |
|          Port    => $lfmgr_port,
 | |
|          Timeout => 10);
 | |
| $t->waitfor("/btbits\>\>/");
 | |
| 
 | |
| # Configure our utils.
 | |
| our $utils = new LANforge::Utils();
 | |
| $utils->telnet($t);         # Set our telnet object.
 | |
| if ($::quiet eq "yes") {
 | |
|   $utils->cli_send_silent(1); # Do show input to CLI
 | |
|   $utils->cli_rcv_silent(1);  # Repress output from CLI ??
 | |
| }
 | |
| else {
 | |
|   $utils->cli_send_silent(0); # Do show input to CLI
 | |
|   $utils->cli_rcv_silent(0);  # Repress output from CLI ??
 | |
| }
 | |
| 
 | |
| $::utils->log_cli("# $0 ".`date "+%Y-%m-%d %H:%M:%S"`);
 | |
| our %script_types = (
 | |
|    "2544"         => "Script2544",
 | |
|    "Atten"        => "ScriptAtten",
 | |
|    "Hunt"         => "ScriptHunt",
 | |
|    "Script2544"   => "Script2544",
 | |
|    "ScriptAtten"  => "ScriptAtten",
 | |
|    "ScriptHunt"   => "ScriptHunt",
 | |
|    "ScriptWanLink"=> "ScriptWL",
 | |
|    "ScriptWL"     => "ScriptWL",
 | |
|    "WanLink"      => "ScriptWL",
 | |
| );
 | |
| 
 | |
| if ($::action eq "start_cx" 
 | |
|    || $::action eq "stop_cx"
 | |
|    || $::action eq "quiece_cx") {
 | |
|    die("Please state cx_name")
 | |
|       if (  !defined $::cx_name || $::cx_name eq "" );
 | |
| }
 | |
| 
 | |
| if ($::action eq "set_script") {
 | |
|    my $scr_type = $::script_types{ $::script_type };
 | |
|    die("Unknown script type [$::script_type]")
 | |
|       if (  !defined $::script_type
 | |
|          || !defined $scr_type
 | |
|          || $::script_type eq ""
 | |
|          || $scr_type eq "" );
 | |
|    die("Cannot use blank action.")
 | |
|       if (! defined $::private || $::private eq "");
 | |
| 
 | |
|    $cmd = $::utils->fmt_cmd("set_script", $::endp_name, "$::script_name", $::flags, $scr_type, "$::private", $::group_action, $::loops);
 | |
|    $::utils->doAsyncCmd($cmd);
 | |
| }
 | |
| elsif ($::action eq "show_report") {
 | |
|    $cmd = $::utils->fmt_cmd("show_script_results", $::endp_name);
 | |
|    $::utils->doAsyncCmd($cmd);
 | |
| }
 | |
| elsif ($::action eq "del_script") {
 | |
|    $cmd = $::utils->fmt_cmd("set_script", $::endp_name, "$::script_name", "0", "NA", "NONE");
 | |
|    $::utils->doAsyncCmd($cmd);
 | |
| }
 | |
| elsif ($::action eq "start_cx") {
 | |
|    $cmd = $::utils->fmt_cmd("set_cx_state", "ALL", $::cx_name, "RUNNING");
 | |
|    $::utils->doAsyncCmd($cmd);
 | |
| }
 | |
| elsif ($::action eq "quiece_cx") {
 | |
|    $cmd = $::utils->fmt_cmd("set_cx_state", "ALL", $::cx_name, "QUIESCE");
 | |
|    $::utils->doAsyncCmd($cmd);
 | |
| }
 | |
| elsif ($::action eq "stop_cx") {
 | |
|    $cmd = $::utils->fmt_cmd("set_cx_state", "ALL", $::cx_name, "STOPPED");
 | |
|    $::utils->doAsyncCmd($cmd);
 | |
| }
 | |
| else {
 | |
|    die( "Unknown action.\n$usage");
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| #eof
 |