mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-29 18:02:35 +00:00 
			
		
		
		
	 72712ff548
			
		
	
	72712ff548
	
	
	
		
			
			These scripts will now be publicly available in a git repo for easier shared development and change tracking.
		
			
				
	
	
		
			191 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| #
 | |
| # This program is used to modify the LANforge virtual station aliases
 | |
| #
 | |
| # (C) 2016 Candela Technologies Inc.
 | |
| #
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| use diagnostics;
 | |
| 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;
 | |
| our $shelf_num     = 1;
 | |
| our $resource      = 1;
 | |
| our $quiet         = "yes";
 | |
| our $do_cmd        = "NA";
 | |
| our $lfmgr_host    = "localhost";
 | |
| our $lfmgr_port    = 4001;
 | |
| 
 | |
| ########################################################################
 | |
| # Nothing to configure below here, most likely.
 | |
| ########################################################################
 | |
| our $usage = qq<
 | |
| $0  --action { set_alias | reset_alias } ]
 | |
|      [--mgr          {host-name | IP} default: $::lfmgr_host]
 | |
|      [--resource     {lanforge resource id}]
 | |
|      [--mgr_port     {ip port}]
 | |
| 
 | |
|      [--first_dev    {actual device name with suffix number}]
 | |
|      [--last_dev     {actual device name with suffix number}]
 | |
|      [--new_prefix   {phrase to replace 'sta' with}]
 | |
|      [--old_prefix   {old prefix}]
 | |
|      [--quiet { yes | no }]
 | |
|       # spaces and punctuation are prohibitied in aliases!
 | |
|       
 | |
| Examples:
 | |
|    # alias sta100-sta149 as truck100-truck149
 | |
|  $0 --mgr 192.168.100.138 --action set_alias --first_dev sta100 --last_dev sta149 --new_prefix truck
 | |
|  
 | |
|    # reset truck* stations to original sta* names
 | |
|  $0 --mgr 192.168.100.138 --action reset_alias --old_prefix truck
 | |
|  
 | |
|    # reset a series of station aliases to original names
 | |
|  $0 --mgr 192.168.100.138 --action reset_alias --first_sta truck100 --last_sta truck110
 | |
| >;
 | |
| 
 | |
| GetOptions 
 | |
| (
 | |
|   'action|a=s'       => \$::action,
 | |
|   'cmd|c=s'          => \$::do_cmd,
 | |
|   'mgr|m=s'          => \$::lfmgr_host,
 | |
|   'mgr_port|p=i'     => \$::lfmgr_port,
 | |
|   'resource|r=i'     => \$::resource,
 | |
|   'quiet|q=s'        => \$::quiet,
 | |
|   'new_prefix=s'     => \$::new_prefix,
 | |
|   'old_prefix=s'     => \$::old_prefix,
 | |
|   'first_dev=s'      => \$::first_dev,
 | |
|   'last_dev=s'       => \$::last_dev,
 | |
| ) || (print($usage) && exit(1));
 | |
| 
 | |
| die ("Please specify manager address. $::usage")
 | |
|    if (!defined $::lfmgr_host || "$::lfmgr_host" eq "" );
 | |
|    
 | |
| die ("Please specify resource id. $::usage")
 | |
|    if (!defined $::resource || "$::resource" eq "" );
 | |
| 
 | |
| die ("Please tell me what to do with --action. " )
 | |
|    if (!defined $::action || "$::action" eq "");
 | |
|    
 | |
| if ($::action eq "set_alias" ) {
 | |
|    die( "Please specify the first station device. $::usage") 
 | |
|       if (!defined $::first_dev || "$::first_dev" eq "" );
 | |
|    die( "Please specify the last station device. $::usage") 
 | |
|       if (!defined $::last_dev || "$::last_dev" eq "" );
 | |
|    die( "Please specify the new prefix. $::usage") 
 | |
|       if (!defined $::new_prefix || "$::new_prefix" eq "" );
 | |
| }
 | |
| elsif ($::action eq "reset_alias" && !defined $::first_dev) {
 | |
|    die( "Please specify the old prefix. $::usage")
 | |
|       if (!defined $::old_prefix || "$::old_prefix" eq "");
 | |
| }
 | |
| 
 | |
| 
 | |
| # Open connection to the LANforge server.
 | |
| 
 | |
| our $telnet = new Net::Telnet(Prompt => '/default\@btbits\>\>/',
 | |
|          Timeout => 20);
 | |
| 
 | |
| $::telnet->open( Host    => $::lfmgr_host,
 | |
|           Port    => $::lfmgr_port,
 | |
|           Timeout => 10);
 | |
| 
 | |
| $::telnet->waitfor("/btbits\>\>/");
 | |
| 
 | |
| 
 | |
| # Configure our utils.
 | |
| our $utils = new LANforge::Utils();
 | |
| $::utils->telnet($::telnet);         # 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 ??
 | |
| }
 | |
| 
 | |
| my $in_bounds = 0;
 | |
| my @port_names = ();
 | |
| my @sorted_names;
 | |
| my @matching_devices = ();
 | |
| my %port_map = ();
 | |
| my $port_name;
 | |
| my $port;
 | |
| my $cmd;
 | |
| my $alias;
 | |
| my @ports;
 | |
| if ($::action eq "set_alias" || $::action eq "reset_alias") {
 | |
|    @ports = $::utils->getPortListing($::shelf_num, $::resource);
 | |
| }
 | |
| else {
 | |
|    die("Actions are set_alias and reset_alias.");
 | |
| }
 | |
| 
 | |
| for (my $i = 0; $i<@ports; $i++) {
 | |
|    $port_name              = $ports[$i]->dev();
 | |
|    push(@port_names, $port_name);
 | |
|    $port_map{ $port_name } = $i;
 | |
| }
 | |
| @sorted_names = sort { lc($a) cmp lc($b) } @port_names;
 | |
| for $port_name (@sorted_names) {
 | |
|    my $i    = $port_map{ $port_name };
 | |
|    $port    = $ports[ $i ];
 | |
|    $alias   = $port->alias();
 | |
|    if (defined $::first_dev && defined $::last_dev) {
 | |
|       if ($port_name eq $::first_dev || $alias eq $::first_dev) {
 | |
|          $in_bounds = 1;
 | |
|       }
 | |
|       if ($in_bounds) {
 | |
|          push(@matching_devices, $port);
 | |
|       }
 | |
|       if ($port_name eq $::last_dev || $alias eq $::last_dev) {
 | |
|          $in_bounds = 0;
 | |
|       }
 | |
|    }
 | |
|    if (defined $::old_prefix && "$::old_prefix" ne "") {
 | |
|       print "\nchecking $port_name ($alias)" if ($quiet eq "no");
 | |
|       if ($alias =~ /^$::old_prefix\d+/) {
 | |
|          print "* " if ($quiet eq "no");
 | |
|          push(@matching_devices, $port);
 | |
|       }
 | |
|    }
 | |
| }
 | |
| 
 | |
| ## ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- # 
 | |
| ## Note that alias is for mvlans, nothing will be found              #
 | |
| ## $cmd = $::utils->fmt_cmd("set_port_alias", $::shelf_num,          #
 | |
| ##                         $::resource, $parname, $mac, $alias);     #
 | |
| ## ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
 | |
| 
 | |
| for $port (@matching_devices) {
 | |
|    $port_name     = $port->dev();
 | |
|    my $portno     = $port->port_id();
 | |
|    my ($suffix)   = $port_name =~/^.*?(\d+)$/;
 | |
| 
 | |
|    if ($::action eq "set_alias" ) {
 | |
|       $alias      = "$::new_prefix$suffix";
 | |
|    }
 | |
|    else {
 | |
|       $alias      = $port->dev();
 | |
|    }
 | |
|    # set_port shelf resource port ip_addr netmask gateway 
 | |
|    # cmd_flags current_flags MAC MTU tx_queue_len alias interest
 | |
|    $cmd = $::utils->fmt_cmd("set_port", $::shelf_num, $::resource, $portno,
 | |
|                            "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA",
 | |
|                            $alias, 0x1000);
 | |
|    $::utils->doCmd($cmd);
 | |
| }
 | |
| 
 | |
| #
 |