mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 18:58:01 +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
	 Ben Greear
					Ben Greear