mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-10-30 18:27:53 +00:00
wifi-diag: Plot mcs and retransmit scatter plots.
This commit is contained in:
@@ -3,6 +3,9 @@ package Packet;
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use bignum;
|
||||
use bigint;
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
my %options = @_;
|
||||
@@ -96,7 +99,7 @@ sub append {
|
||||
($ln =~ /^\s*Data Rate: (.*)/)) {
|
||||
my $dr = $1;
|
||||
if ($dr =~ /(\S+) Mb/) {
|
||||
$self->{datarate} = $1 * 1000000;
|
||||
$self->{datarate} = $1;
|
||||
}
|
||||
else {
|
||||
print "ERROR: Unknown datarate: $dr for frame: " . $self->frame_num() . "\n";
|
||||
|
||||
@@ -48,8 +48,9 @@ sub add_pkt {
|
||||
$tid->add_pkt($pkt);
|
||||
|
||||
# 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 "" . $pkt->timestamp() . "\t$tidno\t" . $pkt->datarate() . "\t" . $pkt->retrans() . "\n";
|
||||
print $fh $ln;
|
||||
}
|
||||
|
||||
sub find_or_create_tid {
|
||||
@@ -64,6 +65,9 @@ sub find_or_create_tid {
|
||||
else {
|
||||
$tid = Tid->new(glb_fh_ba_tx => $self->{glb_fh_ba_tx},
|
||||
glb_fh_ba_rx => $self->{glb_fh_ba_rx},
|
||||
glb_fh_mcs_ps => $self->{glb_fh_mcs_ps},
|
||||
glb_fh_mcs_tx => $self->{glb_fh_mcs_tx},
|
||||
glb_fh_mcs_rx => $self->{glb_fh_mcs_rx},
|
||||
tidno => $tidno,
|
||||
report_prefix => $self->{report_prefix},
|
||||
addr_a => $self->local_addr(),
|
||||
|
||||
@@ -4,6 +4,7 @@ use warnings;
|
||||
use strict;
|
||||
|
||||
use bigint;
|
||||
use bignum;
|
||||
|
||||
my $warn_dup_ba_once = 1;
|
||||
my $max_pkt_store = 250;
|
||||
@@ -25,13 +26,13 @@ sub new {
|
||||
dummy_rx_pkts => 0,
|
||||
dummy_tx_pkts => 0,
|
||||
tot_pkts => 0,
|
||||
last_tot_pks => 0,
|
||||
last_rx_pks => 0,
|
||||
last_tx_pks => 0,
|
||||
last_rx_retrans_pks => 0,
|
||||
last_tx_retrans_pks => 0,
|
||||
last_dummy_rx_pks => 0,
|
||||
last_dummy_tx_pks => 0,
|
||||
last_tot_pkts => 0,
|
||||
last_rx_pkts => 0,
|
||||
last_tx_pkts => 0,
|
||||
last_rx_retrans_pkts => 0,
|
||||
last_tx_retrans_pkts => 0,
|
||||
last_dummy_rx_pkts => 0,
|
||||
last_dummy_tx_pkts => 0,
|
||||
last_ps_timestamp => 0,
|
||||
last_rx_amsdu_pkts => 0,
|
||||
last_tx_amsdu_pkts => 0,
|
||||
@@ -68,9 +69,11 @@ sub tidno {
|
||||
sub add_pkt {
|
||||
my $self = shift;
|
||||
my $pkt = shift;
|
||||
my $fhg;
|
||||
|
||||
$self->{tot_pkts}++;
|
||||
if ($pkt->receiver() eq $self->{addr_a}) {
|
||||
$fhg = $self->{glb_fh_mcs_rx};
|
||||
$self->{rx_pkts}++;
|
||||
$self->{rx_amsdu_pkts} += $pkt->{amsdu_frame_count};
|
||||
if ($pkt->retrans()) {
|
||||
@@ -79,6 +82,7 @@ sub add_pkt {
|
||||
}
|
||||
}
|
||||
else {
|
||||
$fhg = $self->{glb_fh_mcs_tx};
|
||||
$self->{tx_pkts}++;
|
||||
$self->{tx_amsdu_pkts} += $pkt->{amsdu_frame_count};
|
||||
if ($pkt->retrans()) {
|
||||
@@ -228,17 +232,21 @@ sub add_pkt {
|
||||
last;
|
||||
}
|
||||
|
||||
if ($self->{last_ps_timestamp} + 1.0 < $pkt->{timestamp}) {
|
||||
my $tsp1 = $self->{last_ps_timestamp} + 1.0;
|
||||
my $gen_ps = $tsp1 < $pkt->{timestamp};
|
||||
#print STDERR "last-ps-timestamp: " . $self->{last_ps_timestamp} . " tsp1: $tsp1 gen-ps: $gen_ps "
|
||||
# . $self->{last_ps_timestamp} . " pkt-ts: " . $pkt->{timestamp} . "\n";
|
||||
if ($gen_ps) {
|
||||
my $diff = $pkt->{timestamp} - $self->{last_ps_timestamp};
|
||||
my $period_tot_pkts = $self->{tot_pkts} - $self->{last_tot_pkts};
|
||||
my $period_rx_pkts = $self->{rx_pkts} - $self->{last_rx_pkts};
|
||||
my $period_rx_amsdu_pkts = $self->{rx_amsdu_pkts} - $self->{last_rx_amsdu_pkts};
|
||||
my $period_rx_retrans_pkts = $self->{rx_retrans_pkts} - $self->{last_rx_retrans_pkts};
|
||||
my $period_rx_retrans_amsdu_pkts = $self->{rx_retrans_amsdu_pkts} - $self->{last_rx_retrans_amsdu_pkts};
|
||||
my $period_rx_retrans_amsdu_pkts = $self->{rx_amsdu_retrans_pkts} - $self->{last_rx_amsdu_retrans_pkts};
|
||||
my $period_tx_pkts = $self->{tx_pkts} - $self->{last_tx_pkts};
|
||||
my $period_tx_amsdu_pkts = $self->{tx_amsdu_pkts} - $self->{last_tx_amsdu_pkts};
|
||||
my $period_tx_retrans_pkts = $self->{tx_retrans_pkts} - $self->{last_tx_retrans_pkts};
|
||||
my $period_tx_retrans_amsdu_pkts = $self->{tx_retrans_amsdu_pkts} - $self->{last_tx_retrans_amsdu_pkts};
|
||||
my $period_tx_retrans_amsdu_pkts = $self->{tx_amsdu_retrans_pkts} - $self->{last_tx_amsdu_retrans_pkts};
|
||||
my $period_dummy_rx_pkts = $self->{dummy_rx_pkts} - $self->{last_dummy_rx_pkts};
|
||||
my $period_dummy_tx_pkts = $self->{dummy_tx_pkts} - $self->{last_dummy_tx_pkts};
|
||||
|
||||
@@ -259,23 +267,30 @@ sub add_pkt {
|
||||
$self->{last_rx_pkts} = $self->{rx_pkts};
|
||||
$self->{last_rx_amsdu_pkts} = $self->{rx_amsdu_pkts};
|
||||
$self->{last_rx_retrans_pkts} = $self->{rx_retrans_pkts};
|
||||
$self->{last_rx_retrans_amsdu_pkts} = $self->{rx_retrans_amsdu_pkts};
|
||||
$self->{last_rx_amsdu_retrans_pkts} = $self->{rx_amsdu_retrans_pkts};
|
||||
$self->{last_tx_pkts} = $self->{tx_pkts};
|
||||
$self->{last_tx_amsdu_pkts} = $self->{tx_amsdu_pkts};
|
||||
$self->{last_tx_retrans_pkts} = $self->{tx_retrans_pkts};
|
||||
$self->{last_tx_retrans_amsdu_pkts} = $self->{tx_retrans_amsdu_pkts};
|
||||
$self->{last_tx_amsdu_retrans_pkts} = $self->{tx_amsdu_retrans_pkts};
|
||||
$self->{last_dummy_rx_pkts} = $self->{dummy_rx_pkts};
|
||||
$self->{last_dummy_tx_pkts} = $self->{dummy_tx_pkts};
|
||||
|
||||
my $fh_ps = $self->{mcs_fh_ps};
|
||||
print $fh_ps "" . $pkt->timestamp() . "\t" . $self->tidno() . "\t$diff\t$period_tot_pkts_ps\t" .
|
||||
my $glb_mcs_ps = $self->{glb_fh_mcs_ps};
|
||||
|
||||
my $ln = "" . $pkt->timestamp() . "\t" . $self->tidno() . "\t$diff\t$period_tot_pkts_ps\t" .
|
||||
"$period_rx_pkts_ps\t$period_rx_retrans_pkts_ps\t$period_rx_amsdu_pkts_ps\t$period_rx_retrans_amsdu_pkts_ps\t$period_dummy_rx_pkts_ps\t" .
|
||||
"$period_tx_pkts_ps\t$period_tx_retrans_pkts_ps\t$period_tx_amsdu_pkts_ps\t$period_tx_retrans_amsdu_pkts_ps\t$period_dummy_tx_pkts_ps\n";
|
||||
print $fh_ps $ln;
|
||||
print $glb_mcs_ps $ln;
|
||||
}
|
||||
|
||||
# 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";
|
||||
my $ln = "" . $pkt->timestamp() . "\t" . $self->tidno() . "\t" . $pkt->datarate() . "\t" . $pkt->retrans() . "\n";
|
||||
|
||||
print $fh $ln;
|
||||
print $fhg $ln;
|
||||
|
||||
push(@{$self->{pkts}}, $pkt);
|
||||
}
|
||||
|
||||
@@ -21,6 +21,9 @@ my $cur_pkt = Packet->new(raw_pkt => "");
|
||||
my $last_pkt = Packet->new(raw_pkt => "");
|
||||
my $glb_fh_ba_tx;
|
||||
my $glb_fh_ba_rx;
|
||||
my $glb_fh_mcs_ps;
|
||||
my $glb_fh_mcs_tx;
|
||||
my $glb_fh_mcs_rx;
|
||||
|
||||
my $dut = "";
|
||||
my $report_prefix = "wifi-diag-";
|
||||
@@ -53,6 +56,9 @@ if ($show_help) {
|
||||
|
||||
my $glb_ba_tx_fname = $report_prefix . "glb-ba-tx-rpt.txt";
|
||||
my $glb_ba_rx_fname = $report_prefix . "glb-ba-rx-rpt.txt";
|
||||
my $glb_mcs_ps_fname = $report_prefix . "glb-mcs-ps-rpt.txt";
|
||||
my $glb_mcs_tx_fname = $report_prefix . "glb-mcs-tx-rpt.txt";
|
||||
my $glb_mcs_rx_fname = $report_prefix . "glb-mcs-rx-rpt.txt";
|
||||
|
||||
if ($gen_report) {
|
||||
$report_html .= genGlobalReports();
|
||||
@@ -60,8 +66,11 @@ if ($gen_report) {
|
||||
exit 0;
|
||||
}
|
||||
|
||||
open($glb_fh_ba_tx, ">", $glb_ba_tx_fname) or die("Can't open $glb_ba_tx_fname for writing: $!\n");
|
||||
open($glb_fh_ba_rx, ">", $glb_ba_rx_fname) or die("Can't open $glb_ba_rx_fname for writing: $!\n");
|
||||
open($glb_fh_ba_tx, ">", $glb_ba_tx_fname) or die("Can't open $glb_ba_tx_fname for writing: $!\n");
|
||||
open($glb_fh_ba_rx, ">", $glb_ba_rx_fname) or die("Can't open $glb_ba_rx_fname for writing: $!\n");
|
||||
open($glb_fh_mcs_ps, ">", $glb_mcs_ps_fname) or die("Can't open $glb_mcs_ps_fname for writing: $!\n");
|
||||
open($glb_fh_mcs_tx, ">", $glb_mcs_tx_fname) or die("Can't open $glb_mcs_tx_fname for writing: $!\n");
|
||||
open($glb_fh_mcs_rx, ">", $glb_mcs_rx_fname) or die("Can't open $glb_mcs_rx_fname for writing: $!\n");
|
||||
|
||||
while (<>) {
|
||||
my $ln = $_;
|
||||
@@ -178,15 +187,21 @@ sub genGlobalReports {
|
||||
my $html = "";
|
||||
|
||||
# General idea is to write out gnumeric scripts and run them.
|
||||
# First, block-ack response time graphs.
|
||||
|
||||
$html .= "\n\n<P>MCS/Encoding Rates over time<P>\n";
|
||||
$html .= doTimeGraph("Encoding Rate", "TX Packet encoding rate over time", "1:3", $glb_mcs_tx_fname, "glb-mcs-tx.png");
|
||||
$html .= doTimeGraph("Encoding Rate", "RX Packet encoding rate over time", "1:3", $glb_mcs_rx_fname, "glb-mcs-rx.png");
|
||||
$html .= doTimeGraph("Retransmits", "TX Packet Retransmits over time", "1:4", $glb_mcs_tx_fname, "glb-mcs-tx-retrans.png");
|
||||
$html .= doTimeGraph("Retransmits", "RX Packet Retransmits over time", "1:4", $glb_mcs_rx_fname, "glb-mcs-rx-retrans.png");
|
||||
|
||||
# Local peer sending BA back to DUT
|
||||
$html .= "<P>Block-Acks sent from all local endpoints to DUT.<P>";
|
||||
$html .= "\n\n<P>Block-Acks sent from all local endpoints to DUT.<P>\n";
|
||||
$html .= doTimeGraph("BA Latency", "Block-Ack latency from last known frame", "1:6", $glb_ba_tx_fname, "glb-ba-tx-latency.png");
|
||||
$html .= doTimeGraph("Packets Acked", "Block-Ack packets Acked per Pkt", "1:3", $glb_ba_tx_fname, "glb-ba-tx-pkts-per-ack.png");
|
||||
$html .= doTimeGraph("Duplicate Packets Acked", "Block-Ack packets DUP-Acked per Pkt", "1:4", $glb_ba_tx_fname, "glb-ba-tx-pkts-dup-per-ack.png");
|
||||
|
||||
# DUT sending BA to local peer
|
||||
$html .= "<P>Block-Acks sent from DUT to all local endpoints.<P>";
|
||||
$html .= "\n\n<P>Block-Acks sent from DUT to all local endpoints.<P>\n";
|
||||
$html .= doTimeGraph("BA Latency", "Block-Ack latency from last known frame", "1:6", $glb_ba_rx_fname, "glb-ba-rx-latency.png");
|
||||
$html .= doTimeGraph("Packets Acked", "Block-Ack packets Acked per Pkt", "1:3", $glb_ba_rx_fname, "glb-ba-rx-pkts-per-ack.png");
|
||||
$html .= doTimeGraph("Duplicate Packets Acked", "Block-Ack packets DUP-Acked per Pkt", "1:4", $glb_ba_rx_fname, "glb-ba-rx-pkts-dup-per-ack.png");
|
||||
@@ -265,6 +280,9 @@ sub processPkt {
|
||||
if ($dut eq $pkt->receiver()) {
|
||||
$peer_conn = PeerConn->new(glb_fh_ba_tx => $glb_fh_ba_tx,
|
||||
glb_fh_ba_rx => $glb_fh_ba_rx,
|
||||
glb_fh_mcs_ps => $glb_fh_mcs_ps,
|
||||
glb_fh_mcs_tx => $glb_fh_mcs_tx,
|
||||
glb_fh_mcs_rx => $glb_fh_mcs_rx,
|
||||
report_prefix => $report_prefix,
|
||||
local_addr => $pkt->transmitter(),
|
||||
peer_addr => $pkt->receiver());
|
||||
@@ -272,6 +290,9 @@ sub processPkt {
|
||||
else {
|
||||
$peer_conn = PeerConn->new(glb_fh_ba_tx => $glb_fh_ba_tx,
|
||||
glb_fh_ba_rx => $glb_fh_ba_rx,
|
||||
glb_fh_mcs_ps => $glb_fh_mcs_ps,
|
||||
glb_fh_mcs_tx => $glb_fh_mcs_tx,
|
||||
glb_fh_mcs_rx => $glb_fh_mcs_rx,
|
||||
report_prefix => $report_prefix,
|
||||
local_addr => $pkt->receiver(),
|
||||
peer_addr => $pkt->transmitter());
|
||||
|
||||
Reference in New Issue
Block a user