mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-03 20:27:54 +00:00
Utils: adds mac_add and uses it in lf_associate_ap
This commit is contained in:
@@ -3,6 +3,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Carp;
|
use Carp;
|
||||||
use Net::Telnet;
|
use Net::Telnet;
|
||||||
|
use bigint;
|
||||||
$| = 1;
|
$| = 1;
|
||||||
#$SIG{ __DIE__ } = sub { Carp::confess( @_ ) };
|
#$SIG{ __DIE__ } = sub { Carp::confess( @_ ) };
|
||||||
#$SIG{ __WARN__ } = sub { Carp::confess( @_ ) };
|
#$SIG{ __WARN__ } = sub { Carp::confess( @_ ) };
|
||||||
@@ -1158,6 +1159,23 @@ sub expand_unit_str {
|
|||||||
return int($num) * $multiplier;
|
return int($num) * $multiplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub mac_add {
|
||||||
|
my ($first_mac, $second_dec) = @_;
|
||||||
|
$first_mac =~ s/[:]//g if ($first_mac =~ /[:]/);
|
||||||
|
|
||||||
|
$first_mac = "0x".$first_mac if ($first_mac !~ /^0x/);
|
||||||
|
|
||||||
|
my $newdec = (0+$second_dec) + hex($first_mac);
|
||||||
|
my $newhex = sprintf("%x", $newdec);
|
||||||
|
my $rv = "";
|
||||||
|
for (my $i = length($newhex); $i > 0; $i-=2) {
|
||||||
|
$rv = substr($newhex, $i-2, 2).":$rv";
|
||||||
|
}
|
||||||
|
return substr($newhex, 0, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####
|
####
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ use Carp;
|
|||||||
use POSIX qw(ceil floor);
|
use POSIX qw(ceil floor);
|
||||||
use Scalar::Util; #::looks_like_number;
|
use Scalar::Util; #::looks_like_number;
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
|
|
||||||
no warnings 'portable'; # Support for 64-bit ints required
|
no warnings 'portable'; # Support for 64-bit ints required
|
||||||
use Socket;
|
use Socket;
|
||||||
#use Data::Dumper;
|
#use Data::Dumper;
|
||||||
@@ -83,7 +84,7 @@ use List::Util qw(first);
|
|||||||
use LANforge::Endpoint;
|
use LANforge::Endpoint;
|
||||||
use LANforge::Port;
|
use LANforge::Port;
|
||||||
use LANforge::Utils;
|
use LANforge::Utils;
|
||||||
use Net::Telnet ();
|
#use Net::Telnet ();
|
||||||
|
|
||||||
our $num_stations = 1;
|
our $num_stations = 1;
|
||||||
our $netmask = "255.255.0.0";
|
our $netmask = "255.255.0.0";
|
||||||
@@ -288,6 +289,10 @@ Examples:
|
|||||||
$0 --action step2 --radio wiphy2 --ssid jedtest \\
|
$0 --action step2 --radio wiphy2 --ssid jedtest \\
|
||||||
--first_sta sta100 --first_ip DHCP --num_stations 3 \\
|
--first_sta sta100 --first_ip DHCP --num_stations 3 \\
|
||||||
--security wpa2 --passphrase jedtest1 --mac_pattern 'xx:xx:xx:*:*:*'
|
--security wpa2 --passphrase jedtest1 --mac_pattern 'xx:xx:xx:*:*:*'
|
||||||
|
Note: mac_pattern is NOT a regex, it is octet based tokens:
|
||||||
|
* = rand(256)
|
||||||
|
xx = parent mac octet
|
||||||
|
You can specify a numeric mac address (d0:01:00:00:af:ff) and it can get incremented
|
||||||
|
|
||||||
## using a second lanforge system to connect to wpa2 AP:
|
## using a second lanforge system to connect to wpa2 AP:
|
||||||
$0 --mgr 192.168.100.1 --resource 2 --radio wiphy2 \\
|
$0 --mgr 192.168.100.1 --resource 2 --radio wiphy2 \\
|
||||||
@@ -454,6 +459,10 @@ sub new_mac_from_pattern {
|
|||||||
die ("::new_mac_pattern: blank parent_mac. Please debug.") if ($parent_mac eq "");
|
die ("::new_mac_pattern: blank parent_mac. Please debug.") if ($parent_mac eq "");
|
||||||
die ("::new_mac_pattern: blank pattern. Please debug.") if ($pattern eq "");
|
die ("::new_mac_pattern: blank pattern. Please debug.") if ($pattern eq "");
|
||||||
|
|
||||||
|
if (($pattern !~ /x+/i) && ($pattern !~ /[*]+/)) {
|
||||||
|
return $pattern;
|
||||||
|
}
|
||||||
|
|
||||||
my @parent_hunks = split(":", $parent_mac);
|
my @parent_hunks = split(":", $parent_mac);
|
||||||
my @pattern_hunks = split(":", $pattern);
|
my @pattern_hunks = split(":", $pattern);
|
||||||
|
|
||||||
@@ -710,7 +719,7 @@ sub new_wifi_station {
|
|||||||
my $rh_results = shift;
|
my $rh_results = shift;
|
||||||
die("new_wifi_station wants hash ref to place results, bye.") unless(defined $rh_results);
|
die("new_wifi_station wants hash ref to place results, bye.") unless(defined $rh_results);
|
||||||
my $wifi_m = shift;
|
my $wifi_m = shift;
|
||||||
my $sleep_amt = shift;
|
my $num_in_series = shift; # use this to add to non-patterned mac-address
|
||||||
my $mac_addr = "";
|
my $mac_addr = "";
|
||||||
|
|
||||||
#print "## new-wifi-station, sta-name: $sta_name change-mac: $change_mac" unless($::utils->isQuiet());
|
#print "## new-wifi-station, sta-name: $sta_name change-mac: $change_mac" unless($::utils->isQuiet());
|
||||||
@@ -728,6 +737,9 @@ sub new_wifi_station {
|
|||||||
my $parent_mac = get_radio_bssid($::sta_wiphy);
|
my $parent_mac = get_radio_bssid($::sta_wiphy);
|
||||||
die("new_wifi_station: unable to find bssid of parent radio") if ($parent_mac eq "");
|
die("new_wifi_station: unable to find bssid of parent radio") if ($parent_mac eq "");
|
||||||
$mac_addr = new_mac_from_pattern($parent_mac, $::mac_pattern);
|
$mac_addr = new_mac_from_pattern($parent_mac, $::mac_pattern);
|
||||||
|
if (($mac_addr eq $parent_mac) && ($::num_stations > 1)) {
|
||||||
|
$mac_addr = $::utils->mac_add($parent_mac, $num_in_series);
|
||||||
|
}
|
||||||
#print "new_wifi_station->new_mac_from_pattern: $mac_addr\n";
|
#print "new_wifi_station->new_mac_from_pattern: $mac_addr\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -787,9 +799,9 @@ sub new_wifi_station {
|
|||||||
#$::utils->sleep_ms(20);
|
#$::utils->sleep_ms(20);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($sleep_amt > 0) {
|
#if ($sleep_amt > 0) {
|
||||||
sleep $sleep_amt;
|
# sleep $sleep_amt;
|
||||||
}
|
#}
|
||||||
my $data = [ $mac_addr, $sta_name, $sta1_cmd ];
|
my $data = [ $mac_addr, $sta_name, $sta1_cmd ];
|
||||||
$rh_results->{$sta_name} = $data;
|
$rh_results->{$sta_name} = $data;
|
||||||
}
|
}
|
||||||
@@ -1227,7 +1239,7 @@ sub doStep_1 {
|
|||||||
for $sta_name (sort(keys %::sta_names)) {
|
for $sta_name (sort(keys %::sta_names)) {
|
||||||
# sta, ip, rh, $ip_addr
|
# sta, ip, rh, $ip_addr
|
||||||
print " $sta_name ";
|
print " $sta_name ";
|
||||||
new_wifi_station( $sta_name, $::sta_names{$sta_name}, \%results1, $::wifi_mode, 0);
|
new_wifi_station( $sta_name, $::sta_names{$sta_name}, \%results1, $::wifi_mode, $i);
|
||||||
altsleep(0.12);
|
altsleep(0.12);
|
||||||
altsleep(0.6) if (($i % 5) == 0);
|
altsleep(0.6) if (($i % 5) == 0);
|
||||||
$i++;
|
$i++;
|
||||||
@@ -1316,11 +1328,13 @@ sub doStep_2 {
|
|||||||
print "Creating new stations...";
|
print "Creating new stations...";
|
||||||
|
|
||||||
# create new stations
|
# create new stations
|
||||||
|
my $i = 0;
|
||||||
for my $sta_name (sort(keys %::sta_names)) {
|
for my $sta_name (sort(keys %::sta_names)) {
|
||||||
die("misconfiguration! ") if( ref($sta_name) eq "HASH");
|
die("misconfiguration! ") if( ref($sta_name) eq "HASH");
|
||||||
my $ip = $::sta_names{$sta_name};
|
my $ip = $::sta_names{$sta_name};
|
||||||
print "$sta_name " unless($::utils->isQuiet());
|
print "$sta_name " unless($::utils->isQuiet());
|
||||||
new_wifi_station( $sta_name, $ip, \%results2, $::wifi_mode, 0);
|
new_wifi_station( $sta_name, $ip, \%results2, $::wifi_mode, $i);
|
||||||
|
$i++;
|
||||||
|
|
||||||
# Uncomment to diagnose connection results. The IPs assigned
|
# Uncomment to diagnose connection results. The IPs assigned
|
||||||
# are unlikely to appear instantly, but the mac and entity id
|
# are unlikely to appear instantly, but the mac and entity id
|
||||||
@@ -1389,7 +1403,7 @@ sub doAdd {
|
|||||||
die("misconfiguration! ") if( ref($sta_name) eq "HASH");
|
die("misconfiguration! ") if( ref($sta_name) eq "HASH");
|
||||||
my $ip = $::sta_names{$sta_name};
|
my $ip = $::sta_names{$sta_name};
|
||||||
print " $sta_name";
|
print " $sta_name";
|
||||||
new_wifi_station( $sta_name, $ip, \%results2, $::wifi_mode, 0);
|
new_wifi_station( $sta_name, $ip, \%results2, $::wifi_mode, $i);
|
||||||
if (($i % 10) == 9) {
|
if (($i % 10) == 9) {
|
||||||
$::utils->sleep_ms(120);
|
$::utils->sleep_ms(120);
|
||||||
}
|
}
|
||||||
@@ -1583,7 +1597,7 @@ if (@ARGV < 2) {
|
|||||||
GetOptions
|
GetOptions
|
||||||
(
|
(
|
||||||
'mgr|m=s' => \$::lfmgr_host,
|
'mgr|m=s' => \$::lfmgr_host,
|
||||||
'mgr_port|p=i' => \$lfmgr_port,
|
'lf_mgr_port|lf_port|mgr_port|p=i' => \$lfmgr_port,
|
||||||
'resource|r=i' => \$::resource,
|
'resource|r=i' => \$::resource,
|
||||||
'resource2|r2=i' => \$::resource2,
|
'resource2|r2=i' => \$::resource2,
|
||||||
'quiet|q=s' => \$::quiet,
|
'quiet|q=s' => \$::quiet,
|
||||||
@@ -1648,6 +1662,7 @@ if (defined $log_cli) {
|
|||||||
|
|
||||||
# Configure our utils.
|
# Configure our utils.
|
||||||
our $utils = new LANforge::Utils();
|
our $utils = new LANforge::Utils();
|
||||||
|
print "Connecting to $lfmgr_host, $lfmgr_port\n";
|
||||||
$::utils->connect($lfmgr_host, $lfmgr_port);
|
$::utils->connect($lfmgr_host, $lfmgr_port);
|
||||||
|
|
||||||
if ($db_postload ne "" && db_exists($::db_postload)==0) {
|
if ($db_postload ne "" && db_exists($::db_postload)==0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user