mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-01 03:07:56 +00:00
wifi-diag: Add some initial reporting per conn and per tid.
This commit is contained in:
@@ -8,6 +8,9 @@ sub new {
|
||||
my %options = @_;
|
||||
|
||||
my $self = {
|
||||
retrans => 0,
|
||||
timestamp => 0,
|
||||
datarate => 0,
|
||||
type_subtype => "UNKNOWN",
|
||||
receiver => "UNKNOWN",
|
||||
transmitter => "UNKNOWN",
|
||||
@@ -32,19 +35,25 @@ sub append {
|
||||
|
||||
$self->{raw_pkt} .= $ln;
|
||||
|
||||
if ($ln =~ /\s*Transmitter address: .*\((\S+)\)/) {
|
||||
#print "ln: $ln\n";
|
||||
|
||||
if ($ln =~ /^\s*Transmitter address: .*\((\S+)\)/) {
|
||||
$self->{transmitter} = $1;
|
||||
}
|
||||
elsif ($ln =~ /\s*Receiver address: .*\((\S+)\)/) {
|
||||
elsif ($ln =~ /^\s*Epoch Time:\s+(\S+)/) {
|
||||
#print "timestamp: $1\n";
|
||||
$self->{timestamp} = $1;
|
||||
}
|
||||
elsif ($ln =~ /^\s*Receiver address: .*\((\S+)\)/) {
|
||||
$self->{receiver} = $1;
|
||||
}
|
||||
elsif ($ln =~ /\s*Fragment number: (\d+)/) {
|
||||
elsif ($ln =~ /^\s*Fragment number: (\d+)/) {
|
||||
$self->{fragno} = $1;
|
||||
}
|
||||
elsif ($ln =~ /\s*Sequence number: (\d+)/) {
|
||||
elsif ($ln =~ /^\s*Sequence number: (\d+)/) {
|
||||
$self->{seqno} = $1;
|
||||
}
|
||||
elsif ($ln =~ /\s*Type\/Subtype: (.*)/) {
|
||||
elsif ($ln =~ /^\s*Type\/Subtype: (.*)/) {
|
||||
$self->{type_subtype} = $1;
|
||||
}
|
||||
elsif ($ln =~ /.* = Starting Sequence Number: (\d+)/) {
|
||||
@@ -53,19 +62,19 @@ sub append {
|
||||
elsif ($ln =~ /.* = TID for which a Basic BlockAck frame is requested: (\S+)/) {
|
||||
$self->{ba_tid} = $1;
|
||||
}
|
||||
elsif ($ln =~ /.*Block Ack Bitmap: (\S+)/) {
|
||||
elsif ($ln =~ /^\s*Block Ack Bitmap: (\S+)/) {
|
||||
$self->{ba_bitmap} = $1;
|
||||
}
|
||||
elsif ($ln =~ /\s*Data Rate: (.*)/) {
|
||||
$self->{datarate} = $1;
|
||||
elsif ($ln =~ /.* = Retry: Frame is being retransmitted/) {
|
||||
$self->{retrans} = 1;
|
||||
}
|
||||
elsif ($ln =~ /\s*VHT information/) {
|
||||
elsif ($ln =~ /^\s*VHT information/) {
|
||||
$self->{is_vht} = 1;
|
||||
}
|
||||
elsif ($ln =~ /\s*Bandwidth: (.*)/) {
|
||||
elsif ($ln =~ /^\s*Bandwidth: (.*)/) {
|
||||
$self->{bandwidth} = $1;
|
||||
}
|
||||
elsif ($ln =~ /\s*User 0: MCS (.*)/) {
|
||||
elsif ($ln =~ /^\s*User 0: MCS (.*)/) {
|
||||
$self->{mcs} = $1;
|
||||
}
|
||||
elsif ($ln =~ /.* = Spatial streams 0: (.*)/) {
|
||||
@@ -77,10 +86,18 @@ sub append {
|
||||
elsif ($ln =~ /.* = Payload Type: (.*)/) {
|
||||
$self->{payload_type} = $1;
|
||||
}
|
||||
elsif ($ln =~ /\s+\[Data Rate: (.*)\]/) {
|
||||
$self->{datarate} = $1;
|
||||
elsif (($ln =~ /^\s+\[Data Rate: (.*)\]/) ||
|
||||
($ln =~ /^\s*Data Rate: (.*)/)) {
|
||||
my $dr = $1;
|
||||
if ($dr =~ /(\S+) Mb/) {
|
||||
$self->{datarate} = $1 * 1000000;
|
||||
}
|
||||
else {
|
||||
print "ERROR: Unknown datarate: $dr for frame: " . $self->frame_num() . "\n";
|
||||
$self->{datarate} = 0;
|
||||
}
|
||||
}
|
||||
elsif ($ln =~ /\s*SSI Signal: (.*)/) {
|
||||
elsif ($ln =~ /^\s*SSI Signal: (.*)/) {
|
||||
if ($self->{ssi_sig_found} == 0) {
|
||||
$self->{ssi_combined} = $1;
|
||||
$self->{ssi_sig_found}++;
|
||||
@@ -103,7 +120,7 @@ sub append {
|
||||
}
|
||||
}
|
||||
# AMPDU and such...
|
||||
elsif ($ln =~ /\s*A-MSDU Subframe #(\d+)/) {
|
||||
elsif ($ln =~ /^\s*A-MSDU Subframe #(\d+)/) {
|
||||
if ($1 > $self->{amsdu_frame_count}) {
|
||||
$self->{amsdu_frame_count} = $1;
|
||||
}
|
||||
@@ -125,6 +142,21 @@ sub transmitter {
|
||||
return $self->{transmitter};
|
||||
}
|
||||
|
||||
sub datarate {
|
||||
my $self = shift;
|
||||
return $self->{datarate};
|
||||
}
|
||||
|
||||
sub retrans {
|
||||
my $self = shift;
|
||||
return $self->{retrans};
|
||||
}
|
||||
|
||||
sub timestamp {
|
||||
my $self = shift;
|
||||
return $self->{timestamp};
|
||||
}
|
||||
|
||||
sub receiver {
|
||||
my $self = shift;
|
||||
return $self->{receiver};
|
||||
|
||||
@@ -15,7 +15,12 @@ sub new {
|
||||
};
|
||||
|
||||
bless($self, $class);
|
||||
return($self);
|
||||
|
||||
my $mcs_fname = $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 {
|
||||
@@ -41,6 +46,10 @@ sub add_pkt {
|
||||
|
||||
my $tid = $self->find_or_create_tid($tidno);
|
||||
$tid->add_pkt($pkt);
|
||||
|
||||
# Generate reporting data for this pkt
|
||||
my $fh = $self->{mcs_fh};
|
||||
print $fh "" . $pkt->timestamp() . "\t$tidno\t" . $pkt->datarate() . "\t" . $pkt->retrans() . "\n";
|
||||
}
|
||||
|
||||
sub find_or_create_tid {
|
||||
@@ -53,7 +62,10 @@ sub find_or_create_tid {
|
||||
$tid = $self->{tids}[$tidno];
|
||||
}
|
||||
else {
|
||||
$tid = Tid->new(tidno => $tidno);
|
||||
$tid = Tid->new(tidno => $tidno,
|
||||
addr_a => $self->local_addr(),
|
||||
addr_b => $self->peer_addr(),
|
||||
);
|
||||
$self->{tids}[$tidno] = $tid;
|
||||
}
|
||||
return $tid;
|
||||
@@ -77,4 +89,22 @@ sub printme {
|
||||
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;
|
||||
|
||||
@@ -9,11 +9,21 @@ sub new {
|
||||
|
||||
my $self = {
|
||||
pkts => [],
|
||||
tx_retrans => 0,
|
||||
rx_retrans => 0,
|
||||
rx_pkts => 0,
|
||||
tx_pkts => 0,
|
||||
tot_pkts => 0,
|
||||
%options,
|
||||
};
|
||||
|
||||
bless($self, $class);
|
||||
return($self);
|
||||
|
||||
my $rpt_fname = $self->{addr_a} . "." . $self->{addr_b} . "-" . $self->tidno() . "-" . "rpt.txt";
|
||||
open(my $MCS, ">", $rpt_fname) or die("Can't open $rpt_fname for writing: $!\n");
|
||||
$self->{mcs_fh} = $MCS;
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub tidno {
|
||||
@@ -25,6 +35,22 @@ sub add_pkt {
|
||||
my $self = shift;
|
||||
my $pkt = shift;
|
||||
|
||||
$self->{tot_pkts}++;
|
||||
if ($pkt->receiver() eq $self->{addr_a}) {
|
||||
$self->{rx_pkts}++;
|
||||
if ($pkt->retrans()) {
|
||||
$self->{rx_retrans}++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$self->{tx_pkts}++;
|
||||
$self->{tx_retrans}++;
|
||||
}
|
||||
|
||||
# Generate reporting data for this pkt
|
||||
my $fh = $self->{mcs_fh};
|
||||
print $fh "" . $pkt->timestamp() . "\t" . $self->tidno() . "\t" . $pkt->datarate() . "\t" . $pkt->retrans() . "\n";
|
||||
|
||||
push(@{$self->{pkts}}, $pkt);
|
||||
}
|
||||
|
||||
@@ -35,8 +61,9 @@ sub get_pkts {
|
||||
|
||||
sub printme {
|
||||
my $self = shift;
|
||||
print " tidno: " . $self->tidno() . "\n";
|
||||
print " pkt-count: " . $self->get_pkts() . "\n";
|
||||
print " tidno: " . $self->tidno() . " pkt-count: " . $self->get_pkts()
|
||||
. " tx-pkts: " . $self->{tx_pkts} . " tx-retrans: " . $self->{tx_retrans}
|
||||
. " rx-pkts: " . $self->{rx_pkts} . " rx-retrans: " . $self->{rx_retrans} . "\n";
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
@@ -37,6 +37,7 @@ if ($cur_pkt->raw_pkt() ne "") {
|
||||
# Print out all peer-conns we found
|
||||
for my $conn (values %peer_conns) {
|
||||
$conn->printme();
|
||||
$conn->gen_graphs();
|
||||
}
|
||||
|
||||
exit 0;
|
||||
|
||||
Reference in New Issue
Block a user