mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-10-30 02:12:38 +00:00
182 lines
3.5 KiB
Perl
182 lines
3.5 KiB
Perl
package PeerConn;
|
|
|
|
use warnings;
|
|
use strict;
|
|
|
|
use Tid;
|
|
|
|
sub new {
|
|
my $class = shift;
|
|
my %options = @_;
|
|
|
|
my $self = {
|
|
%options,
|
|
tids => [],
|
|
};
|
|
|
|
bless($self, $class);
|
|
|
|
my $mcs_fname = $self->{report_prefix} . "conn-" . $self->hash_str() . "-rpt.txt";
|
|
open(my $MCS, ">", $mcs_fname) or die("Can't open $mcs_fname for writing: $!\n");
|
|
$self->{mcs_fh} = $MCS;
|
|
|
|
return $self;
|
|
}
|
|
|
|
sub hash_str {
|
|
my $self = shift;
|
|
return $self->{local_addr} . "." . $self->{peer_addr};
|
|
}
|
|
|
|
sub local_addr {
|
|
my $self = shift;
|
|
return $self->{local_addr};
|
|
}
|
|
|
|
sub peer_addr {
|
|
my $self = shift;
|
|
return $self->{peer_addr};
|
|
}
|
|
|
|
sub add_pkt {
|
|
my $self = shift;
|
|
my $pkt = shift;
|
|
|
|
my $tidno = $pkt->tid();
|
|
|
|
my $tid = $self->find_or_create_tid($tidno);
|
|
$tid->add_pkt($pkt);
|
|
$pkt->{tid} = $tid;
|
|
|
|
# Generate reporting data for this pkt
|
|
my $ln = "" . $pkt->timestamp() . "\t$tidno\t" . $pkt->datarate() . "\t" . $pkt->retrans() . "\n";
|
|
my $fh = $self->{mcs_fh};
|
|
print $fh $ln;
|
|
}
|
|
|
|
sub find_or_create_tid {
|
|
my $self = shift;
|
|
my $tidno = shift;
|
|
|
|
if ($tidno =~ m/^0x/) {
|
|
print STDERR "PeerConn::find_or_create_tid: converting hex tidno $tidno to dec: ".hex($tidno)."\n";
|
|
$tidno = hex($tidno);
|
|
}
|
|
|
|
my $tid;
|
|
|
|
if (exists $self->{tids}[$tidno]) {
|
|
$tid = $self->{tids}[$tidno];
|
|
}
|
|
else {
|
|
$tid = Tid->new(glb_fh_ba_tx => $self->{glb_fh_ba_tx},
|
|
glb_fh_ba_rx => $self->{glb_fh_ba_rx},
|
|
tidno => $tidno,
|
|
report_prefix => $self->{report_prefix},
|
|
addr_a => $self->local_addr(),
|
|
addr_b => $self->peer_addr(),
|
|
);
|
|
$self->{tids}[$tidno] = $tid;
|
|
}
|
|
return $tid;
|
|
}
|
|
|
|
sub sum_tids {
|
|
my $self = shift;
|
|
my $var = shift;
|
|
|
|
my $tid_count = @{$self->{tids}};
|
|
|
|
my $rv = 0;
|
|
|
|
my $i;
|
|
for ($i = 0; $i < $tid_count; $i++) {
|
|
if (exists $self->{tids}[$i]) {
|
|
if ($var == 0) {
|
|
$rv += $self->{tids}[$i]->tx_no_ack_found_all();
|
|
}
|
|
elsif ($var == 1) {
|
|
$rv += $self->{tids}[$i]->tx_no_ack_found_big();
|
|
}
|
|
elsif ($var == 2) {
|
|
$rv += $self->{tids}[$i]->rx_no_ack_found_all();
|
|
}
|
|
elsif ($var == 3) {
|
|
$rv += $self->{tids}[$i]->rx_no_ack_found_big();
|
|
}
|
|
}
|
|
}
|
|
return $rv;
|
|
}
|
|
|
|
sub tx_no_ack_found_all {
|
|
my $self = shift;
|
|
return $self->sum_tids(0);
|
|
}
|
|
|
|
sub tx_no_ack_found_big {
|
|
my $self = shift;
|
|
return $self->sum_tids(1);
|
|
}
|
|
|
|
sub rx_no_ack_found_all {
|
|
my $self = shift;
|
|
return $self->sum_tids(2);
|
|
}
|
|
|
|
sub rx_no_ack_found_big {
|
|
my $self = shift;
|
|
return $self->sum_tids(3);
|
|
}
|
|
|
|
sub notify_done {
|
|
my $self = shift;
|
|
my $tid_count = @{$self->{tids}};
|
|
|
|
my $i;
|
|
for ($i = 0; $i < $tid_count; $i++) {
|
|
#print "Checking tid: $i\n";
|
|
if (exists $self->{tids}[$i]) {
|
|
$self->{tids}[$i]->check_remaining_pkts();
|
|
}
|
|
}
|
|
}
|
|
|
|
sub printme {
|
|
my $self = shift;
|
|
my $tid_count = @{$self->{tids}};
|
|
|
|
print "hash-key: " . $self->hash_str() . " tid-count: " . $tid_count . "\n";
|
|
my $i;
|
|
for ($i = 0; $i < $tid_count; $i++) {
|
|
#print "Checking tid: $i\n";
|
|
if (exists $self->{tids}[$i]) {
|
|
#print "Printing tid: $i\n";
|
|
$self->{tids}[$i]->printme();
|
|
#print "Done printing tid: $i\n";
|
|
}
|
|
}
|
|
#print "Done peer-conn printme\n";
|
|
return;
|
|
}
|
|
|
|
sub gen_graphs {
|
|
my $self = shift;
|
|
my $tid_count = @{$self->{tids}};
|
|
|
|
my $i;
|
|
for ($i = 0; $i < $tid_count; $i++) {
|
|
#print "Checking tid: $i\n";
|
|
if (exists $self->{tids}[$i]) {
|
|
#print "Printing tid: $i\n";
|
|
$self->{tids}[$i]->printme();
|
|
#print "Done printing tid: $i\n";
|
|
}
|
|
}
|
|
#print "Done peer-conn printme\n";
|
|
return;
|
|
|
|
}
|
|
|
|
1;
|