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