mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-10-28 17:32:35 +00:00
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);
|
|
}
|
|
|
|
#
|