mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-10-29 09:52:35 +00:00
lf_associate_ap gains ability to set antenna and frequency
This commit is contained in:
@@ -73,8 +73,8 @@ my $log_cli = "unset"; # use ENV{'LOG_CLI'}
|
||||
# and we're assuming the port is on the same resource (1).
|
||||
our $upstream_port = "eth1"; # Step 1 upstream port
|
||||
our $sta_wiphy = "wiphy0"; # physical parent (radio) of virtual stations
|
||||
our $phy_channel = -1; # channel number
|
||||
our $phy_antenna = -1; # number of antennas
|
||||
our $phy_channel = -1; # channel number
|
||||
our $phy_antenna = 0; # number of antennas, all
|
||||
our %wiphy_bssids = ();
|
||||
our $admin_down_on_add = 0;
|
||||
our $ssid;
|
||||
@@ -118,6 +118,31 @@ our %cx_types = (
|
||||
"tcp6" => "lf_tcp6",
|
||||
"udp6" => "lf_udp6",
|
||||
);
|
||||
our %antenna_table = (
|
||||
0 => 0,
|
||||
"0" => 0,
|
||||
-1 => 0,
|
||||
'0' => 0,
|
||||
'-1' => 0,
|
||||
'ALL' => 0,
|
||||
|
||||
'1' => 1,
|
||||
'1x1' => 1,
|
||||
'A' => 1,
|
||||
|
||||
'2' => 4,
|
||||
'2x2' => 4,
|
||||
'AB' => 4,
|
||||
|
||||
'3' => 7,
|
||||
'3x3' => 7,
|
||||
'ABC' => 7,
|
||||
|
||||
'4' => 8,
|
||||
'4x4' => 8,
|
||||
'ABCD' => 8,
|
||||
);
|
||||
|
||||
our $duration = 30; # seconds to transmit in step 1
|
||||
our $db_preload = ""; # use for loading before station creation
|
||||
our $db_save = ""; # use for saving a scenario that we just ran
|
||||
@@ -153,8 +178,9 @@ my $usage = qq($0 [--mgr {host-name | IP}]
|
||||
# same effect when setting env var LOG_CLI=STDOUT
|
||||
## AP selection
|
||||
[--radio {name}] # e.g. wiphy2
|
||||
[--chan {channel}] # e.g. 52, 161, 153
|
||||
[--channel {channel}] # e.g. 52, 161, 153
|
||||
# please check the LANforge GUI to verify resulting selection
|
||||
# center channels might be selected differently than you intended
|
||||
[--antenna {1,2,3,4}] # select number of antennas
|
||||
[--ssid {ssid}] # e.g. jedtest
|
||||
[--bssid {aa:bb:cc:00:11:22, or DEFAULT} # AP BSSID to connect to
|
||||
@@ -300,51 +326,53 @@ our $vrad_chan = -1; # default channel (AUTO)
|
||||
# ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
||||
my $lfmgr_port = 4001; # LANforge manager port
|
||||
our $quiesce_sec = 3; # pretty standard
|
||||
#if(Scalar::Util::looks_like_number( $hunk) && $hunk == 0);
|
||||
# please use $::utils->fmt_cmd
|
||||
sub fmt_cmd {
|
||||
my $rv;
|
||||
if ($::utils->can('fmt_cmd')) {
|
||||
#print "fmt_cmd passing down to Utils::fmt_cmd()\n";
|
||||
$rv = $::utils->fmt_cmd(@_);
|
||||
return $rv;
|
||||
}
|
||||
|
||||
for my $hunk (@_) {
|
||||
die("fmt_cmd called with empty space or null argument, bye.") unless(defined $hunk && $hunk ne '');
|
||||
die("rv[${rv}]\n --> fmt_cmd passed an array, bye.") if(ref($hunk) eq 'ARRAY');
|
||||
die("rv[${rv}]\n --> fmt_cmd passed a hash, bye.") if(ref($hunk) eq 'HASH');
|
||||
$hunk = "0" if($hunk eq "0" || $hunk eq "+0");
|
||||
|
||||
if( $hunk eq "" ) {
|
||||
#print "hunk[".$hunk."] --> ";
|
||||
$hunk = 'NA';
|
||||
#print "hunk[".$hunk."]\n";
|
||||
#print "fmt_cmd: warning: hunk was blank, now NA. Prev hunks: $rv\n"
|
||||
}
|
||||
$rv .= ( $hunk =~m/ +/) ? "'$hunk' " : "$hunk ";
|
||||
}
|
||||
chomp $rv;
|
||||
print "cmd formatted to: $rv\n" unless($::utils->isQuiet());
|
||||
return $rv;
|
||||
}
|
||||
=pod
|
||||
this fmt_cmd subroutine is now disabled, please use utils->fmt_cmd
|
||||
=cut
|
||||
#sub fmt_cmd {
|
||||
# my $rv;
|
||||
# if ($::utils->can('fmt_cmd')) {
|
||||
# #print "fmt_cmd passing down to Utils::fmt_cmd()\n";
|
||||
# $rv = $::utils->fmt_cmd(@_);
|
||||
# return $rv;
|
||||
# }
|
||||
#
|
||||
# for my $hunk (@_) {
|
||||
# die("fmt_cmd called with empty space or null argument, bye.") unless(defined $hunk && $hunk ne '');
|
||||
# die("rv[${rv}]\n --> fmt_cmd passed an array, bye.") if(ref($hunk) eq 'ARRAY');
|
||||
# die("rv[${rv}]\n --> fmt_cmd passed a hash, bye.") if(ref($hunk) eq 'HASH');
|
||||
# $hunk = "0" if($hunk eq "0" || $hunk eq "+0");
|
||||
#
|
||||
# if( $hunk eq "" ) {
|
||||
# #print "hunk[".$hunk."] --> ";
|
||||
# $hunk = 'NA';
|
||||
# #print "hunk[".$hunk."]\n";
|
||||
# #print "fmt_cmd: warning: hunk was blank, now NA. Prev hunks: $rv\n"
|
||||
# }
|
||||
# $rv .= ( $hunk =~m/ +/) ? "'$hunk' " : "$hunk ";
|
||||
# }
|
||||
# chomp $rv;
|
||||
# print "cmd formatted to: $rv\n" unless($::utils->isQuiet());
|
||||
# return $rv;
|
||||
#}
|
||||
|
||||
# deprecated, please use utils->doCmd()
|
||||
sub doCmd {
|
||||
my $cmd = shift;
|
||||
die("doCmd: Blank command, bye.") unless ($cmd);
|
||||
die("doCmd: Telnet uninitialized, check that '\$t' is set. Bye." ) unless ($main::t);
|
||||
|
||||
if ($::utils->can('doCmd')) {
|
||||
#print "doCmd passing down to Utils::doCmd($cmd)\n";
|
||||
$::utils->doCmd($cmd);
|
||||
}
|
||||
else {
|
||||
$main::t->print($cmd);
|
||||
my @rslt = $::t->waitfor('/ \>\>RSLT:(.*)/');
|
||||
print "**************\n @rslt ................\n\n" unless($::utils->isQuiet());
|
||||
}
|
||||
}
|
||||
#sub doCmd {
|
||||
# my $cmd = shift;
|
||||
# die("doCmd: Blank command, bye.") unless ($cmd);
|
||||
# die("doCmd: Telnet uninitialized, check that '\$t' is set. Bye." ) unless ($main::t);
|
||||
#
|
||||
# if ($::utils->can('doCmd')) {
|
||||
# #print "doCmd passing down to Utils::doCmd($cmd)\n";
|
||||
# $::utils->doCmd($cmd);
|
||||
# }
|
||||
# else {
|
||||
# $main::t->print($cmd);
|
||||
# my @rslt = $::t->waitfor('/ \>\>RSLT:(.*)/');
|
||||
# print "**************\n @rslt ................\n\n" unless($::utils->isQuiet());
|
||||
# }
|
||||
#}
|
||||
|
||||
sub db_exists {
|
||||
my $db_name = shift;
|
||||
@@ -362,7 +390,7 @@ sub load_db {
|
||||
my $db_name = shift;
|
||||
die ("::load_db: called with blank database name. Did you mean EMPTY?") if ($db_name eq "");
|
||||
print "Loading database $db_name ...";
|
||||
doCmd(fmt_cmd("load", $db_name, "overwrite"));
|
||||
$::utils->doCmd(fmt_cmd("load", $db_name, "overwrite"));
|
||||
|
||||
for (my $i = 20 ; $i>0; $i--) {
|
||||
sleep(1);
|
||||
@@ -396,10 +424,10 @@ sub save_db {
|
||||
my $db_name = shift;
|
||||
die ("::save_db: called with blank database name. Please debug.") if ($db_name eq "");
|
||||
print "Saving database $db_name ...";
|
||||
if (db_exists($db_name)==1){
|
||||
if (db_exists($db_name)==1) {
|
||||
print "Warning: will over-write database $db_name! ";
|
||||
}
|
||||
doCmd(fmt_cmd("save", $db_name));
|
||||
$::utils->doCmd($::utils->fmt_cmd("save", $db_name));
|
||||
print "done\n";
|
||||
}
|
||||
|
||||
@@ -411,7 +439,7 @@ sub get_radio_bssid {
|
||||
if (exists($::wiphy_bssids{ $radio_name }));
|
||||
|
||||
#print "* looking up $radio_name for bssid...";
|
||||
my @status_lines = split("\n", $::utils->doAsyncCmd(fmt_cmd("show_port", 1, $::resource, $radio_name)));
|
||||
my @status_lines = split("\n", $::utils->doAsyncCmd($::utils->fmt_cmd("show_port", 1, $::resource, $radio_name)));
|
||||
my @mac_lines = grep { / MAC: [^ ]+/ } @status_lines;
|
||||
die ("::get_radio_bssid: failed to find radio bssid, no MAC lines")
|
||||
if (@mac_lines < 1);
|
||||
@@ -499,7 +527,7 @@ sub fmt_vsta_cmd {
|
||||
$flags = "+0" if ($flags == 0); # perl goes funny on zeros
|
||||
$flags_mask = "+0" if ($flags_mask == 0);
|
||||
$flags = "NA" if ($flags eq "");
|
||||
return fmt_cmd("add_sta", 1, $resource, $sta_wiphy, $sta_name, "$flags",
|
||||
return $::utils->fmt_cmd("add_sta", 1, $resource, $sta_wiphy, $sta_name, "$flags",
|
||||
"$ssid", "NA", "$key", $ap, $cfg_file, $mac,
|
||||
$mode, $rate, $amsdu, $ampdu_factor, $ampdu_density,
|
||||
$sta_br_id, "$flags_mask" );
|
||||
@@ -519,7 +547,7 @@ sub fmt_vrad_cmd {
|
||||
my $antenna = "NA";
|
||||
my $flags = "0x1";
|
||||
my $flags_mask = "NA";
|
||||
return fmt_cmd("set_wifi_radio", 1, $resource, $sta_wiphy, $mode, $vrad_chan,
|
||||
return $::utils->fmt_cmd("set_wifi_radio", 1, $resource, $sta_wiphy, $mode, $vrad_chan,
|
||||
$country, $frequency, $frag_thresh, $rate, $rts, $txpower,
|
||||
$mac, "$antenna", "$flags", "$flags_mask" );
|
||||
}
|
||||
@@ -558,23 +586,23 @@ sub createEpPair {
|
||||
die("createEpPair: wants ep1 name, bye.") unless(defined $ep1 && $ep1 ne '');
|
||||
die("createEpPair: wants ep2 name, bye.") unless(defined $ep2 && $ep2 ne '');
|
||||
|
||||
my $cmd = fmt_cmd("add_endp", $ep1, 1, $::resource, $port_a, $cxtype,
|
||||
my $cmd = $::utils->fmt_cmd("add_endp", $ep1, 1, $::resource, $port_a, $cxtype,
|
||||
-1, "NA", "$rate_min", "$rate_max", "NA",
|
||||
$min_pkt_szs{$::cx_type}[0], @{$max_pkt_szs{$::cx_type}}[0],
|
||||
"increasing", "NO", "NA", "NA", "NA");
|
||||
print "EP1: $cmd\n" unless($::utils->isQuiet());
|
||||
doCmd($cmd);
|
||||
$::utils->doCmd($cmd);
|
||||
|
||||
$cmd = fmt_cmd("add_endp", $ep2, 1, $::resource2, $port_b, $cxtype,
|
||||
$cmd = $::utils->fmt_cmd("add_endp", $ep2, 1, $::resource2, $port_b, $cxtype,
|
||||
-1, "NA", "$rate_min", "$rate_max", "NA",
|
||||
$min_pkt_szs{$::cx_type}[1], @{$max_pkt_szs{$::cx_type}}[1],
|
||||
"increasing", "NO", "NA", "NA", "NA");
|
||||
print "EP2: $cmd\n" unless($::utils->isQuiet());
|
||||
doCmd($cmd);
|
||||
$::utils->doCmd($cmd);
|
||||
|
||||
# Now, add the cross-connect
|
||||
doCmd(fmt_cmd("add_cx", $cx_name, $::test_mgr, $ep1, $ep2));
|
||||
doCmd(fmt_cmd("set_cx_report_timer", $::test_mgr, $cx_name, $::report_timer));
|
||||
$::utils->doCmd($::utils->fmt_cmd("add_cx", $cx_name, $::test_mgr, $ep1, $ep2));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_cx_report_timer", $::test_mgr, $cx_name, $::report_timer));
|
||||
}
|
||||
|
||||
sub fmt_port_cmd {
|
||||
@@ -604,7 +632,7 @@ sub fmt_port_cmd {
|
||||
$cur_flags = "+0" if(!$cur_flags);
|
||||
$cmd_flags = "+0" if(!$cmd_flags);
|
||||
$ist_flags = "+0" if(!$ist_flags);
|
||||
my $cmd = fmt_cmd("set_port", 1, $::resource, $port_id, $ip, $::netmask,
|
||||
my $cmd = $::utils->fmt_cmd("set_port", 1, $::resource, $port_id, $ip, $::netmask,
|
||||
$gateway, "$cmd_flags", "$cur_flags",
|
||||
"$mac_addr", "NA", "NA", "NA", "$ist_flags", $::report_timer, "$flags2",
|
||||
"NA","NA","NA","NA","NA","NA","NA","NA","NA","NA","NA","NA","NA",
|
||||
@@ -638,7 +666,7 @@ sub fmt_port_down {
|
||||
$cmd_flags = "+0" if(!$cmd_flags); # zeros are falsy in perl
|
||||
$cur_flags = "+0" if(!$cur_flags);
|
||||
$ist_flags = "+0" if(!$ist_flags);
|
||||
my $cmd = fmt_cmd("set_port", 1, $resource, $port_id, $ip_addr,
|
||||
my $cmd = $::utils->fmt_cmd("set_port", 1, $resource, $port_id, $ip_addr,
|
||||
$netmask, $gateway, "$cmd_flags", "$cur_flags",
|
||||
"NA", "NA", "NA", "NA", "$ist_flags", $::report_timer, "$flags2",
|
||||
"NA","NA","NA","NA","NA","NA","NA","NA","NA","NA","NA","NA","NA",
|
||||
@@ -687,7 +715,7 @@ sub new_wifi_station {
|
||||
print "## new-wifi-station, sta-name: $sta_name change-mac: $change_mac" unless($::utils->isQuiet());
|
||||
|
||||
if (! $::change_mac) {
|
||||
my $status = $::utils->doAsyncCmd(fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
my $status = $::utils->doAsyncCmd($::utils->fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
if ($status =~ /MAC:\s+(\S+)\s+/) {
|
||||
$mac_addr = $1;
|
||||
}
|
||||
@@ -739,16 +767,16 @@ sub new_wifi_station {
|
||||
my $sta1_cmd = fmt_vsta_cmd($::resource, $::sta_wiphy, $sta_name,
|
||||
"$flags", "$::ssid", "$::passphrase",
|
||||
$mac_addr, "$flagsmask", $wifi_m, $::bssid);
|
||||
doCmd($sta1_cmd);
|
||||
$::utils->doCmd($sta1_cmd);
|
||||
$sta1_cmd = fmt_port_cmd($resource, $sta_name, $ip_addr, $mac_addr);
|
||||
doCmd($sta1_cmd);
|
||||
$::utils->doCmd($sta1_cmd);
|
||||
if ($::admin_down_on_add) {
|
||||
my $cur_flags = 0x1; # port down
|
||||
my $ist_flags = 0x800000; # port down
|
||||
$sta1_cmd = fmt_cmd("set_port", 1, $resource, $sta_name, "NA",
|
||||
$sta1_cmd = $::utils->fmt_cmd("set_port", 1, $resource, $sta_name, "NA",
|
||||
"NA", "NA", "NA", "$cur_flags",
|
||||
"NA", "NA", "NA", "NA", "$ist_flags");
|
||||
doCmd($sta1_cmd);
|
||||
$::utils->doCmd($sta1_cmd);
|
||||
}
|
||||
|
||||
if ($sleep_amt > 0) {
|
||||
@@ -760,13 +788,13 @@ sub new_wifi_station {
|
||||
|
||||
sub new_wifi_radio {
|
||||
my $cmd = fmt_vrad_cmd($::resource, $::sta_wiphy, $::vrad_chan );
|
||||
doCmd($cmd);
|
||||
$::utils->doCmd($cmd);
|
||||
}
|
||||
|
||||
sub delete_port {
|
||||
if (defined $::port_del) {
|
||||
print "deleting port $::port_del\n" unless($::utils->isQuiet());
|
||||
$::utils->doCmd(fmt_cmd("rm_vlan", 1, $::resource, $::port_del));
|
||||
$::utils->doCmd($::utils->fmt_cmd("rm_vlan", 1, $::resource, $::port_del));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -837,7 +865,7 @@ sub awaitStationRemoval {
|
||||
$old_sta_count = (keys %::sta_names);
|
||||
for my $sta_name (sort(keys %::sta_names)) {
|
||||
print " $sta_name,";
|
||||
my $status = $::utils->doAsyncCmd(fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
my $status = $::utils->doAsyncCmd($::utils->fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
$old_sta_count-- if( $status =~ m/Could not find/);
|
||||
}
|
||||
if ($old_sta_count > 0) {
|
||||
@@ -855,9 +883,9 @@ sub removeOldCrossConnects {
|
||||
my $cx_name = $::cx_names{$sta_name}->{"cx"};
|
||||
my $ep1 = $::cx_names{$sta_name}->{"ep1"};
|
||||
my $ep2 = $::cx_names{$sta_name}->{"ep2"};
|
||||
doCmd("rm_cx $::test_mgr $cx_name");
|
||||
doCmd("rm_endp $ep1");
|
||||
doCmd("rm_endp $ep2");
|
||||
$::utils->doCmd("rm_cx $::test_mgr $cx_name");
|
||||
$::utils->doCmd("rm_endp $ep1");
|
||||
$::utils->doCmd("rm_endp $ep2");
|
||||
print " $cx_name ($ep1 - $ep2)...";
|
||||
}
|
||||
print " done.\n";
|
||||
@@ -866,12 +894,12 @@ sub removeOldCrossConnects {
|
||||
sub removeOldStations {
|
||||
print "Deleting ports:";
|
||||
foreach my $sta_name (reverse sort(keys %::sta_names)) {
|
||||
my $status = $::utils->doAsyncCmd(fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
my $status = $::utils->doAsyncCmd($::utils->fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
if ($status =~ /Type:/) {
|
||||
# It exists, remove it
|
||||
#
|
||||
print "...$sta_name ";
|
||||
$::utils->doCmd(fmt_cmd("rm_vlan", 1, $::resource, $sta_name));
|
||||
$::utils->doCmd($::utils->fmt_cmd("rm_vlan", 1, $::resource, $sta_name));
|
||||
}
|
||||
}
|
||||
print " done.\n";
|
||||
@@ -886,7 +914,7 @@ sub awaitNewStations {
|
||||
my @are_assoc = ();
|
||||
my @not_assoc = ();
|
||||
for my $sta_name (sort(keys(%::sta_names))) {
|
||||
my $status = $::utils->doAsyncCmd(fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
my $status = $::utils->doAsyncCmd($::utils->fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
my %sta_status = get_sta_state(\$status);
|
||||
#print " $sta_name ".$sta_status{"assoc"};
|
||||
if( $sta_status{"assoc"} ne "Not-Associated") {
|
||||
@@ -909,7 +937,7 @@ sub endpointReport {
|
||||
my $ep = shift;
|
||||
my ($ep_name, $tx_rate, $rx_rate,$rx_bps);
|
||||
die("endpointReport: should be passed name of endpoint, bye.") unless ( $ep ne '' );
|
||||
my $blob = $::utils->doAsyncCmd(fmt_cmd("nc_show_endpoints", "$ep"), "\n");
|
||||
my $blob = $::utils->doAsyncCmd($::utils->fmt_cmd("nc_show_endpoints", "$ep"), "\n");
|
||||
#print "BLOB: $blob\n\n\n";
|
||||
( $ep_name ) = ($blob =~ m/^Endpoint \[(.*?)\] /mg);
|
||||
( $tx_rate ) = ($blob =~ m/(Tx Bytes: .*$)/mg);
|
||||
@@ -983,17 +1011,17 @@ sub adjustForSimultaneous {
|
||||
my $ep1 = $::cx_names{$sta_name}->{"ep1"};
|
||||
my $ep2 = $::cx_names{$sta_name}->{"ep2"};
|
||||
|
||||
#print "UPLOAD: ".fmt_cmd("set_endp_tx_bounds", $ep1, "$rate_min", "$rate_max")."\n";
|
||||
#print "UPLOAD: ".fmt_cmd("set_endp_tx_bounds", $ep2, "$no_rate", "$no_rate")."\n";
|
||||
#print "UPLOAD: ".$::utils->fmt_cmd("set_endp_tx_bounds", $ep1, "$rate_min", "$rate_max")."\n";
|
||||
#print "UPLOAD: ".$::utils->fmt_cmd("set_endp_tx_bounds", $ep2, "$no_rate", "$no_rate")."\n";
|
||||
|
||||
doCmd(fmt_cmd("set_endp_tx_bounds", $ep1, "$rate_min", "$rate_max"));
|
||||
doCmd(fmt_cmd("set_endp_tx_bounds", $ep2, "$rate_min", "$rate_max"));
|
||||
doCmd(fmt_cmd("set_endp_quiesce", $ep1, "$::quiesce_sec"));
|
||||
doCmd(fmt_cmd("set_endp_quiesce", $ep2, "$::quiesce_sec"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_tx_bounds", $ep1, "$rate_min", "$rate_max"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_tx_bounds", $ep2, "$rate_min", "$rate_max"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_quiesce", $ep1, "$::quiesce_sec"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_quiesce", $ep2, "$::quiesce_sec"));
|
||||
}
|
||||
for my $sta_name (sort(keys(%::sta_names))) {
|
||||
my $cx = $::cx_names{$sta_name}->{"cx"};
|
||||
doCmd(fmt_cmd("set_cx_state", $::test_mgr, $cx, "RUNNING"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_cx_state", $::test_mgr, $cx, "RUNNING"));
|
||||
print " $cx...";
|
||||
}
|
||||
print "done.\n";
|
||||
@@ -1021,14 +1049,14 @@ sub adjustForUpload {
|
||||
#print "UPLOAD: ".fmt_cmd("set_endp_tx_bounds", $ep1, "$rate_min", "$rate_max")."\n";
|
||||
#print "UPLOAD: ".fmt_cmd("set_endp_tx_bounds", $ep2, "$no_rate", "$no_rate")."\n";
|
||||
|
||||
doCmd(fmt_cmd("set_endp_tx_bounds", $ep1, "$rate_min", "$rate_max"));
|
||||
doCmd(fmt_cmd("set_endp_tx_bounds", $ep2, "$no_rate", "$no_rate"));
|
||||
doCmd(fmt_cmd("set_endp_quiesce", $ep1, "$::quiesce_sec"));
|
||||
doCmd(fmt_cmd("set_endp_quiesce", $ep2, "$::quiesce_sec"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_tx_bounds", $ep1, "$rate_min", "$rate_max"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_tx_bounds", $ep2, "$no_rate", "$no_rate"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_quiesce", $ep1, "$::quiesce_sec"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_quiesce", $ep2, "$::quiesce_sec"));
|
||||
}
|
||||
for my $sta_name (sort(keys(%::sta_names))) {
|
||||
my $cx = $::cx_names{$sta_name}->{"cx"};
|
||||
doCmd(fmt_cmd("set_cx_state", $::test_mgr, $cx, "RUNNING"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_cx_state", $::test_mgr, $cx, "RUNNING"));
|
||||
print " $cx...";
|
||||
}
|
||||
print "done.\n";
|
||||
@@ -1083,9 +1111,9 @@ sub awaitTransfers {
|
||||
my $ep1 = $::cx_names{$sta_name}->{"ep1"};
|
||||
my $ep2 = $::cx_names{$sta_name}->{"ep2"};
|
||||
|
||||
$lines = $::utils->doAsyncCmd(fmt_cmd("nc_show_endpoints", "$ep1"), "\n");
|
||||
$lines = $::utils->doAsyncCmd($::utils->fmt_cmd("nc_show_endpoints", "$ep1"), "\n");
|
||||
printShowEndpointStats($lines);
|
||||
$lines = $::utils->doAsyncCmd(fmt_cmd("nc_show_endpoints", "$ep2"), "\n");
|
||||
$lines = $::utils->doAsyncCmd($::utils->fmt_cmd("nc_show_endpoints", "$ep2"), "\n");
|
||||
printShowEndpointStats($lines);
|
||||
print " |";
|
||||
}
|
||||
@@ -1114,14 +1142,14 @@ sub adjustForDownload {
|
||||
#print "Download: ".fmt_cmd("set_endp_tx_bounds", $ep1, "$no_rate", "$no_rate")."\n";
|
||||
#print "Download: ".fmt_cmd("set_endp_tx_bounds", $ep2, "$rate_min", "$rate_max")."\n";
|
||||
|
||||
doCmd(fmt_cmd("set_endp_tx_bounds", $ep1, "$no_rate", "$no_rate"));
|
||||
doCmd(fmt_cmd("set_endp_tx_bounds", $ep2, "$rate_min", "$rate_max"));
|
||||
doCmd(fmt_cmd("set_endp_quiesce", $ep1, "$::quiesce_sec"));
|
||||
doCmd(fmt_cmd("set_endp_quiesce", $ep2, "$::quiesce_sec"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_tx_bounds", $ep1, "$no_rate", "$no_rate"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_tx_bounds", $ep2, "$rate_min", "$rate_max"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_quiesce", $ep1, "$::quiesce_sec"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_endp_quiesce", $ep2, "$::quiesce_sec"));
|
||||
}
|
||||
for my $sta_name (sort(keys(%::sta_names))) {
|
||||
my $cx = $::cx_names{$sta_name}->{"cx"};
|
||||
doCmd(fmt_cmd("set_cx_state", $::test_mgr, $cx, "RUNNING"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_cx_state", $::test_mgr, $cx, "RUNNING"));
|
||||
print " $cx..."
|
||||
}
|
||||
print "done\n";
|
||||
@@ -1130,16 +1158,16 @@ sub adjustForDownload {
|
||||
sub quiesceConnections {
|
||||
for my $sta_name (sort(keys(%::sta_names))) {
|
||||
my $cx = $::cx_names{$sta_name}->{"cx"};
|
||||
doCmd(fmt_cmd("set_cx_state", $::test_mgr, $cx, "QUIESCE"));
|
||||
$::utils->doCmd($::utils->fmt_cmd("set_cx_state", $::test_mgr, $cx, "QUIESCE"));
|
||||
}
|
||||
}
|
||||
|
||||
sub resetCounters {
|
||||
for my $sta_name (sort(keys(%::sta_names))) {
|
||||
my $cx = $::cx_names{$sta_name}->{"cx"};
|
||||
doCmd("clear_cx_counters $cx");
|
||||
$::utils->doCmd("clear_cx_counters $cx");
|
||||
}
|
||||
doCmd("clear_endp_counters all");
|
||||
$::utils->doCmd("clear_endp_counters all");
|
||||
}
|
||||
|
||||
## ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
||||
@@ -1231,9 +1259,9 @@ sub doStep_2 {
|
||||
print "Removing old stations...";
|
||||
for my $sta_name (sort(keys %::sta_names)) {
|
||||
# if we have a port eid for this station, let's delete the port so we can start fresh
|
||||
my $del_cmd = fmt_cmd("rm_vlan", 1, $::resource, $sta_name);
|
||||
my $del_cmd = $::utils->fmt_cmd("rm_vlan", 1, $::resource, $sta_name);
|
||||
print "$sta_name " unless($::utils->isQuiet());
|
||||
doCmd($del_cmd);
|
||||
$::utils->doCmd($del_cmd);
|
||||
}
|
||||
# poll until they are gone
|
||||
my $old_sta_count = (keys(%::sta_names));
|
||||
@@ -1241,7 +1269,7 @@ sub doStep_2 {
|
||||
$old_sta_count = (keys(%::sta_names));
|
||||
sleep 1;
|
||||
for my $sta_name (sort(keys %::sta_names)) {
|
||||
my $status = $::utils->doAsyncCmd(fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
my $status = $::utils->doAsyncCmd($::utils->fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
#print ">>status>>$status\n";
|
||||
$old_sta_count-- if( $status =~ /Could not find/); # ??
|
||||
}
|
||||
@@ -1285,7 +1313,7 @@ sub doStep_2 {
|
||||
$num_assoc = 0;
|
||||
$num_ip = 0;
|
||||
for my $sta_name (sort(keys %::sta_names)) {
|
||||
my $status = $::utils->doAsyncCmd(fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
my $status = $::utils->doAsyncCmd($::utils->fmt_cmd("show_port", 1, $::resource, $sta_name));
|
||||
my %state = get_sta_state(\$status);
|
||||
#print $state{"name"}.": ".$state{"assoc"}." ";
|
||||
$num_assoc++ if($state{"assoc"} ne "Not-Associated");
|
||||
@@ -1302,12 +1330,11 @@ sub doStep_2 {
|
||||
print "Bringing those stations down now: ";
|
||||
for my $sta_name (keys %::sta_names) {
|
||||
my $cmd = fmt_port_down($::resource, $sta_name, "0.0.0.0", "0.0.0.0"); #$::netmask
|
||||
doCmd($cmd);
|
||||
$::utils->doCmd($cmd);
|
||||
print "$sta_name " unless ($::utils->isQuiet());
|
||||
}
|
||||
print "...stations down. Done.\n"
|
||||
}
|
||||
|
||||
## ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
||||
##
|
||||
## Create a station
|
||||
@@ -1348,7 +1375,7 @@ sub doDelWiphyVdevs {
|
||||
my $parent = $ports[$i]->parent();
|
||||
if ($parent eq $::port_del) {
|
||||
print "deleting port $dev\n" unless($::utils->isQuiet());
|
||||
$::utils->doCmd(fmt_cmd("rm_vlan", 1, $::resource, $dev));
|
||||
$::utils->doCmd($::utils->fmt_cmd("rm_vlan", 1, $::resource, $dev));
|
||||
$found++;
|
||||
}
|
||||
}
|
||||
@@ -1428,6 +1455,67 @@ sub initStationAddr {
|
||||
}
|
||||
} # ~initStationAddr
|
||||
|
||||
## ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
||||
##
|
||||
## Set phy channel, antennas
|
||||
##
|
||||
## ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
||||
sub set_channel {
|
||||
my $res = shift;
|
||||
my $phy = shift;
|
||||
my $chan = shift;
|
||||
|
||||
die("set_channel: unset resource") unless ((defined $res) && ("" ne $res));
|
||||
die("set_channel: unset radio") unless ((defined $phy) && ("" ne $phy));
|
||||
die("set_channel: unset channel") unless ((defined $chan) && ("" ne $chan));
|
||||
|
||||
my $mode = 'NA';
|
||||
my $cmd = $::utils->fmt_cmd("set_wifi_radio", 1, $res,
|
||||
$phy,
|
||||
$mode,
|
||||
$chan);
|
||||
$::utils->doAsyncCmd($cmd);
|
||||
}
|
||||
|
||||
sub set_antenna {
|
||||
my $res = shift;
|
||||
my $phy = shift;
|
||||
my $ant = shift;
|
||||
die("set_channel: unset resource") unless ((defined $res) && ("" ne $res));
|
||||
die("set_channel: unset radio") unless ((defined $phy) && ("" ne $phy));
|
||||
die("Antenna mode [$ant] does not exist.")
|
||||
if (! exists $::antenna_table{$ant});
|
||||
my $mode = 'NA';
|
||||
my $chan = 'NA';
|
||||
my $country = 'NA';
|
||||
my $freq = '0xFFFF';
|
||||
my $frag = 'NA';
|
||||
my $rate = 'NA';
|
||||
my $rts = 'NA';
|
||||
my $txpower = 'DEFAULT';
|
||||
my $mac = 'NA';
|
||||
|
||||
my $antenna = $::antenna_table{$ant};
|
||||
#print "ANTENNA: $ant -> $antenna\n";
|
||||
my $cmd = $::utils->fmt_cmd("set_wifi_radio", 1, $::resource,
|
||||
$phy,
|
||||
$mode,
|
||||
$chan,
|
||||
$country,
|
||||
$freq,
|
||||
$frag,
|
||||
$rate,
|
||||
$rts,
|
||||
$txpower,
|
||||
$mac,
|
||||
$antenna);
|
||||
$::utils->doAsyncCmd($cmd);
|
||||
sleep 2;
|
||||
exit 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
## ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
||||
##
|
||||
## M A I N
|
||||
@@ -1449,7 +1537,7 @@ GetOptions
|
||||
'quiet|q=s' => \$::quiet,
|
||||
'radio|o=s' => \$::sta_wiphy,
|
||||
'channel|chan=i' => \$::phy_channel,
|
||||
'antenna|ant=i' => \$::phy_antenna,
|
||||
'antenna|ant=s' => \$::phy_antenna,
|
||||
'ssid|s=s' => \$::ssid,
|
||||
'security=s' => \$::security,
|
||||
'xsec=s' => \$::xsec,
|
||||
@@ -1582,6 +1670,15 @@ if (!($action =~ /del/)) { # Below steps are unrelated to deleting objects
|
||||
}
|
||||
}
|
||||
|
||||
if ($action =~ /step|add/) {
|
||||
if (defined $::phy_channel && $::phy_channel > 0) {
|
||||
set_channel($::resource, $::sta_wiphy, $::phy_channel);
|
||||
}
|
||||
if (defined $::phy_antenna) {
|
||||
set_antenna($::resource, $::sta_wiphy, $::phy_antenna);
|
||||
}
|
||||
}
|
||||
|
||||
# take first station and associate it or fail
|
||||
if ($action eq "step1" ) {
|
||||
if ($traffic_type !~ /^(concurrent|separate)$/ ) {
|
||||
@@ -1622,7 +1719,7 @@ elsif ($action eq "del_all_phy" ) {
|
||||
}
|
||||
}
|
||||
elsif ($action eq "show_port") {
|
||||
print $utils->doAsyncCmd(fmt_cmd("nc_show_port", 1, $resource, (sort(keys %sta_names))[0])) . "\n";
|
||||
print $utils->doAsyncCmd($::utils->fmt_cmd("nc_show_port", 1, $resource, (sort(keys %sta_names))[0])) . "\n";
|
||||
}
|
||||
|
||||
exit(0);
|
||||
|
||||
Reference in New Issue
Block a user