mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 18:58:01 +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(); | ||||
| @@ -62,6 +68,9 @@ if ($gen_report) { | ||||
|  | ||||
| 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
	 Ben Greear
					Ben Greear