mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 10:48:02 +00:00 
			
		
		
		
	firemod: migrates endp_vals logic to looking up values in hashmap rather than parsing all strange line patterns
This commit is contained in:
		
							
								
								
									
										310
									
								
								lf_firemod.pl
									
									
									
									
									
								
							
							
						
						
									
										310
									
								
								lf_firemod.pl
									
									
									
									
									
								
							| @@ -347,34 +347,41 @@ if (grep {$_ eq $::action} split(',', "show_endp,set_endp,create_endp,create_arm | |||||||
|    elsif ($::action eq "show_endp") { |    elsif ($::action eq "show_endp") { | ||||||
|       if ((defined $::endp_vals) && ("$::endp_vals" ne "")) { |       if ((defined $::endp_vals) && ("$::endp_vals" ne "")) { | ||||||
|  |  | ||||||
|  |  | ||||||
|          my %option_map    = (); |          my %option_map    = (); | ||||||
|          my $option        = ''; |          my $option        = ''; | ||||||
|          for $option (split(',', $::endp_vals)) { |          for $option (split(',', $::endp_vals)) { | ||||||
|             #print "OPTION[$option]\n"; |             #print "OPTION[$option]\n"; | ||||||
|             #next if ($option =~ /\s/); |             #next if ($option =~ /\s/); | ||||||
|             if ($option =~ /rx_pps/    ) { $option = "Rx Pkts"; } |             if ($option =~ /rx[_-]pps/    ) { $option = "Rx-Pkts-Per-Sec"; } | ||||||
|             if ($option =~ /tx_pps/    ) { $option = "Tx Pkts"; } |             if ($option =~ /tx[_-]pps/    ) { $option = "Tx-Pkts-Per-Sec"; } | ||||||
|             if ($option =~ /rx_pkts/   ) { $option = "Rx Pkts"; } |             if ($option =~ /rx[_-]pkts/   ) { $option = "Rx-Pkts-Total"; } | ||||||
|             if ($option =~ /tx_pkts/   ) { $option = "Tx Pkts"; } |             if ($option =~ /tx[_-]pkts/   ) { $option = "Tx-Pkts-Total"; } | ||||||
|  |             if ($option =~ /rx[_-]bps/    ) { $option = "Rx-Bytes-bps"; } | ||||||
|  |             if ($option =~ /tx[_-]bps/    ) { $option = "Tx-Bytes-bps"; } | ||||||
|  |  | ||||||
|  |             if ($option =~ /^Rx[ _-]Bytes$/  ) { $option = "Rx-Bytes-Total"; } | ||||||
|  |             if ($option =~ /^Tx[ _-]Bytes$/  ) { $option = "Tx-Bytes-Total"; } | ||||||
|  |             if ($option =~ /^Rx[ _-]Pkts$/   ) { $option = "Rx-Pkts-Total"; } | ||||||
|  |             if ($option =~ /^Tx[ _-]Pkts$/   ) { $option = "Tx-Pkts-Total"; } | ||||||
|  |  | ||||||
|             # we don't know if we're armageddon or layer 3 |             # we don't know if we're armageddon or layer 3 | ||||||
|             if ($option =~ /tx_bytes/  ) { |             if ($option =~ /tx_bytes/  ) { | ||||||
|                $option_map{ "Tx Bytes" } = ''; |                $option_map{ "Tx-Bytes-Total" } = ''; | ||||||
|                $option = "Bytes Transmitted"; |                $option = "Bytes Transmitted"; | ||||||
|             } |             } | ||||||
|             if ($option =~ /rx_b(ps|ytes)/  ) { |             if ($option =~ /rx_b(ps|ytes)/  ) { | ||||||
|                $option_map{ "Rx Bytes" } = ''; |                $option_map{ "Rx-Bytes-Total" } = ''; | ||||||
|                $option = "Bytes Rcvd"; |                $option = "Bytes Rcvd"; | ||||||
|             } |             } | ||||||
|             if ($option =~ /tx_packets/) { |             if ($option =~ /tx_packets/) { | ||||||
|                $option_map{ "Tx Pkts" } = ''; |                $option_map{ "Tx-Pkts-Total" } = ''; | ||||||
|                $option = "Packets Transmitted"; |                $option = "Packets Transmitted"; | ||||||
|             } |             } | ||||||
|             if ($option =~ /rx_packets/) { |             if ($option =~ /rx_packets/) { | ||||||
|                $option_map{ "Rx Pkts" } = ''; |                $option_map{ "Rx-Pkts-Total" } = ''; | ||||||
|                $option = "Packets Rcvd"; |                $option = "Packets Rcvd"; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             $option_map{ $option } = ''; |             $option_map{ $option } = ''; | ||||||
|          } |          } | ||||||
|          # options are reformatted |          # options are reformatted | ||||||
| @@ -387,165 +394,165 @@ if (grep {$_ eq $::action} split(',', "show_endp,set_endp,create_endp,create_arm | |||||||
|          else { |          else { | ||||||
|            @lines = split(/\r?\n/, $::utils->doAsyncCmd("nc_show_endp $endp_name")); |            @lines = split(/\r?\n/, $::utils->doAsyncCmd("nc_show_endp $endp_name")); | ||||||
|          } |          } | ||||||
|  |          my $rh_value_map = $::utils->show_as_hash(\@lines); | ||||||
|  |  | ||||||
|          for($i=0; $i<@lines; $i++) { |          for my $option (keys %option_map) { | ||||||
|             $lines[$i] = $lines[$i]." #"; |             my $val = '-'; | ||||||
|          } |  | ||||||
|          my $matcher = " (".join('|', keys %option_map)."):"; |  | ||||||
|          my @parts; |  | ||||||
|          my @matches = grep( /$matcher/, @lines); |  | ||||||
|          my $match; |  | ||||||
|          #print "MATCHER $matcher  matches:\n" . join("\n", @matches) . NL; |  | ||||||
|          for my $end_val (split(',', $::endp_vals)) { |  | ||||||
|             my $endval_done = 0; |  | ||||||
|             for $match (@matches) { |  | ||||||
|                last if ($endval_done); |  | ||||||
|                #print "\nMatch-line: $end_val> $match\n"; |  | ||||||
|  |  | ||||||
|                # no value between colon separated tags can be very |             if (defined $rh_value_map->{$option}) { | ||||||
|                # confusing to parse, let's force a dumb value in if we find that |                $val = $rh_value_map->{$option}; | ||||||
|                if ($match =~ /[^ ]+:\s+[^ ]+:/) { |  | ||||||
|                   $match =~ s/([^ ]+:)\s+([^ ]+:\s+)/$1 ""  $2/g; |  | ||||||
|                   #print "\n M> $match\n"; |  | ||||||
|                } |  | ||||||
|  |  | ||||||
|                ## ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- # |                if ($option =~ /Latency/) { | ||||||
|                ##    special cases                                                  # |                   $val = $rh_value_map->{$option}; | ||||||
|                ## ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- # |  | ||||||
|                if ($end_val =~ /Latency/) { |  | ||||||
|                   if ($match =~ /.*Latency:\s+(.*)\s+#/) { |  | ||||||
|                      my $val = $1; |  | ||||||
|                      #print "val -:$val:-\n"; |  | ||||||
|                   $option_map{"Normalized-Hdr"} = $::utils->normalize_bucket_hdr(17); |                   $option_map{"Normalized-Hdr"} = $::utils->normalize_bucket_hdr(17); | ||||||
|                   $option_map{"Latency"} = $val; |                   $option_map{"Latency"} = $val; | ||||||
|                } |                } | ||||||
|                } |                elsif ($option =~ /Pkt-Gaps/) { | ||||||
|                elsif ($end_val =~ /Pkt-Gaps/) { |                   $val = $rh_value_map->{$option}; | ||||||
|                   if ($match =~ /.*Pkt-Gaps:\s+(.*)\s+#/) { |  | ||||||
|                      my $val = $1; |  | ||||||
|                   $option_map{"Normalized-Hdr"} = $::utils->normalize_bucket_hdr(17); |                   $option_map{"Normalized-Hdr"} = $::utils->normalize_bucket_hdr(17); | ||||||
|                   $option_map{"Pkt-Gaps"} = $val; |                   $option_map{"Pkt-Gaps"} = $val; | ||||||
|                } |                } | ||||||
|                } |                elsif ($option =~ /RX-Silence/) { | ||||||
|                elsif ($end_val =~ /RX-Silence/) { |                   $val = $rh_value_map->{$option}; | ||||||
|                   if ($match =~ /.*RX-Silence:\s+(.*)\s+#/) { |  | ||||||
|                      my $val = $1; |  | ||||||
|                   $option_map{"Normalized-Hdr"} = $::utils->normalize_bucket_hdr(17); |                   $option_map{"Normalized-Hdr"} = $::utils->normalize_bucket_hdr(17); | ||||||
|                   $option_map{"RX-Silence"} = $val; |                   $option_map{"RX-Silence"} = $val; | ||||||
|                } |                } | ||||||
|             } |             } | ||||||
|                elsif ($end_val =~ /Cx Detected/) { |  | ||||||
|                   my $value = 0; |  | ||||||
|                   #print "# case 2\n"; |  | ||||||
|                   ($option) = ($match =~ /(Cx Detected)/); |  | ||||||
|                   if (defined $option_map{ $option } ) { |  | ||||||
|                      $value = 0 + ($match =~ /:\s+(\d+)/)[0]; |  | ||||||
|                      $option_map{ $option } = $value; |  | ||||||
|                      $endval_done++; |  | ||||||
|                      last; |  | ||||||
|                   } |  | ||||||
|                } |  | ||||||
|                elsif (($match =~ /Tx (Bytes|Pkts)/ && (($end_val =~ /tx_(bps|pps)/) || ($end_val =~ /Tx (Bytes|Pkts)/) || ($end_val =~ /(Pkts|Bytes) Sent/))) || |  | ||||||
|                      ($match =~ /Rx (Bytes|Pkts)/ && (($end_val =~ /rx_(bps|pps)/) || ($end_val =~ /Rx (Bytes|Pkts)/)|| ($end_val =~ /(Pkts|Bytes) Rcvd/)))) { |  | ||||||
|                   my $value = 0; |  | ||||||
|                   ($option) = ($match =~ /([TR]x (Bytes|Pkts))/); |  | ||||||
|                   #print "# case 3, Option: $option" . NL; |  | ||||||
|                   @parts      = ($match =~ m{ Total: (\d+) +Time: \d+s\s+ Cur: (\d+) +(\d+)\/s \#$}); |  | ||||||
|                   #print "\n TX: ".join(",",@parts)."\n"; |  | ||||||
|                   if (defined $option_map{ $option } ) { |  | ||||||
|                      if (($end_val =~ /tx_(bps|pps)/ ) || |  | ||||||
|                          ($end_val =~ /rx_(bps|pps)/ )) { |  | ||||||
|                         $value = 0 + $parts[2]; |  | ||||||
|                         if ($end_val =~ /bps/) { |  | ||||||
|                           $value *= 8; |  | ||||||
|                         } |  | ||||||
|                      } |  | ||||||
|             else { |             else { | ||||||
|                         $value = 0 + $parts[0]; |                $val = 'not found'; | ||||||
|             } |             } | ||||||
|                      print "\n    B end_val[$end_val] option[$option] now ".$value."\n"; |             $option_map{ $option } = $val; | ||||||
|                      $option_map{ $end_val } = $value; |  | ||||||
|  |  | ||||||
|                      # For backwards compat with older logic |  | ||||||
|                      if (defined($option_map{"Bytes Rcvd"})) { |  | ||||||
|                        if ($end_val eq "Rx Bytes") { |  | ||||||
|                          $option_map{"Bytes Rcvd"} = $value; |  | ||||||
|          } |          } | ||||||
|                      } | # | ||||||
|                      $endval_done++; | #            my $endval_done = 0; | ||||||
|                      last; | #            for $match (@matches) { | ||||||
|                   } | #               last if ($endval_done); | ||||||
|                } | #               print "\nMatch-line: $end_val> $match\n"; | ||||||
|                elsif ($match =~ / [TR][Xx] (((OOO|Duplicate|Failed) (Bytes|Pkts))|Wrong Dev|CRC Failed|Bit Errors|Dropped)/ | # | ||||||
|                      || $match =~ /Conn (Established|Timeouts)|TCP Retransmits/) { | #               # no value between colon separated tags can be very | ||||||
|                   my $value = 0; | #               # confusing to parse, let's force a dumb value in if we find that | ||||||
|                   ($option) = ($match =~ /([TR][Xx] (((OOO|Duplicate|Failed) (Bytes|Pkts))|Wrong Dev|CRC Failed|Bit Errors|Dropped)|Conn (Established|Timeouts)|TCP Retransmits)/); | #               #if ($match =~ /[^ ]+:\s+[^ ]+:/) { | ||||||
|                   @parts      = $match =~ m{ Total: (\d+) +Time: \d+s\s+ Cur: (\d+) +(\d+)\/s \#$}; | #               #   $match =~ s/([^ ]+:)\s+([^ ]+:\s+)/$1 ""  $2/g; | ||||||
|                   #print "\n# case 4 TX: ".join(",",@parts)."\n"; | #               #   #print "\n M> $match\n"; | ||||||
|                   if (defined $option_map{ $option } ) { | #               #} | ||||||
|                      #print "$match\n"; | # | ||||||
|                      $match =~ s/""/ /g; | # | ||||||
|                      ($option_map{ $option }) = $match =~/.*?:\s+(.*?)\s+\#$/; | #               ## ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- # | ||||||
|                      $endval_done++; | #               ##    special cases                                                  # | ||||||
|                      last; | #               ## ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- # | ||||||
|                   } | # | ||||||
|                } | #               elsif ($end_val =~ /Cx Detected/) { | ||||||
|                elsif ($match =~ /(Bytes|Packets) (Rcvd|Transmitted)/ ) { | #                  my $value = 0; | ||||||
|                   ($option) = ($match =~ /((Bytes|Packets) (Rcvd|Transmitted))/); | #                  #print "# case 2\n"; | ||||||
|                   @parts      = ($match =~ m{ Total: (\d+) +Time: \d+s\s+ Cur: (\d+) +(\d+)\/s \#$}); | #                  ($option) = ($match =~ /(Cx Detected)/); | ||||||
|                   #print "\n# case 5 TX: ".join(",",@parts)."\n"; | #                  if (defined $option_map{ $option } ) { | ||||||
|                   my $value = 0; | #                     $value = 0 + ($match =~ /:\s+(\d+)/)[0]; | ||||||
|                   if (defined $option_map{ $option } ) { | #                     $option_map{ $option } = $value; | ||||||
|                      if ($end_val =~ /rx_(bps|pps)/ ) { | #                     $endval_done++; | ||||||
|                         $value = 0 + $parts[2]; | #                     last; | ||||||
|                      } | #                  } | ||||||
|                      elsif ($end_val =~ /rx_(byte|pkt|packet)s/ ) { | #               } | ||||||
|                         $value = 0 + $parts[0]; | #               elsif (($match =~ /Tx (Bytes|Pkts)/ && (($end_val =~ /tx_(bps|pps)/) || ($end_val =~ /Tx (Bytes|Pkts)/) || ($end_val =~ /(Pkts|Bytes) Sent/))) || | ||||||
|                      } | #                     ($match =~ /Rx (Bytes|Pkts)/ && (($end_val =~ /rx_(bps|pps)/) || ($end_val =~ /Rx (Bytes|Pkts)/)|| ($end_val =~ /(Pkts|Bytes) Rcvd/)))) { | ||||||
|                      if ($option eq "Bytes Rcvd") { | #                  my $value = 0; | ||||||
|                         if ($end_val =~ /rx_bps/ ) { | #                  ($option) = ($match =~ /([TR]x (Bytes|Pkts))/); | ||||||
|                            $value   *= 8; | #                  #print "# case 3, Option: $option" . NL; | ||||||
|                         } | #                  @parts      = ($match =~ m{ Total: (\d+) +Time: \d+s\s+ Cur: (\d+) +(\d+)\/s \#$}); | ||||||
|                      } | #                  #print "\n TX: ".join(",",@parts)."\n"; | ||||||
|                      $option_map{ $option } = $value; | #                  if (defined $option_map{ $option } ) { | ||||||
|                      $endval_done++; | #                     if (($end_val =~ /tx_(bps|pps)/ ) || | ||||||
|                      last; | #                         ($end_val =~ /rx_(bps|pps)/ )) { | ||||||
|                   } | #                        $value = 0 + $parts[2]; | ||||||
|                } | #                        if ($end_val =~ /bps/) { | ||||||
|                else { | #                          $value *= 8; | ||||||
|                   $match =~ s/Shelf: (\d+), /Shelf: $1  / | #                        } | ||||||
|                      if ($match =~ /^\s*Shelf:/ ); | #                     } | ||||||
|  | #                     else { | ||||||
|                   $match =~ s/(Endpoint|PktsToSend): (\d+) /$1: $2  / | #                        $value = 0 + $parts[0]; | ||||||
|                      if ($match =~ /\s*(Endpoint|PktsToSend):/ ); | #                     } | ||||||
|  | #                     print "\n    B end_val[$end_val] option[$option] now ".$value."\n"; | ||||||
|                   if ($match =~ /((Src|Dst)Mac): /) { | #                     $option_map{ $end_val } = $value; | ||||||
|                      my ($name1, $mac1) = ( $match =~ /(...Mac): (.*?)  /); | # | ||||||
|                      $mac1 =~ s/ /-/g; | #                     # For backwards compat with older logic | ||||||
|                      $match =~ s/(...Mac): (.. .. .. .. .. ..) /$1: $mac1 /; | #                     if (defined($option_map{"Bytes Rcvd"})) { | ||||||
|                   } | #                       if ($end_val eq "Rx Bytes") { | ||||||
|                   if ($match =~ /FileName: .*? SendBadCrc: /) { | #                         $option_map{"Bytes Rcvd"} = $value; | ||||||
|                      my $filename1 = ''; | #                       } | ||||||
|                      ($filename1) =~ /FileName: (.*?) SendBadCrc.*$/; | #                     } | ||||||
|                      $filename1 = '""' if ($filename1 =~ /^ *$/); | #                     $endval_done++; | ||||||
|                      $match =~ s/(FileName): (.*?) (SendBadCrc.*)$/$1: $filename1  $3/; | #                     last; | ||||||
|                   } | #                  } | ||||||
|                   $match =~ s/CWND: (\d+) /CWND: $1  / | #               } | ||||||
|                      if ($match =~/CWND: (\d+) /); | #               elsif ($match =~ / [TR][Xx] (((OOO|Duplicate|Failed) (Bytes|Pkts))|Wrong Dev|CRC Failed|Bit Errors|Dropped)/ | ||||||
|                   # ~specials | #                     || $match =~ /Conn (Established|Timeouts)|TCP Retransmits/) { | ||||||
|  | #                  my $value = 0; | ||||||
|                   #print "  match: $match\n"; | #                  ($option) = ($match =~ /([TR][Xx] (((OOO|Duplicate|Failed) (Bytes|Pkts))|Wrong Dev|CRC Failed|Bit Errors|Dropped)|Conn (Established|Timeouts)|TCP Retransmits)/); | ||||||
|                   if ($match =~ /.*$end_val:\s+(\S+)/) { | #                  @parts      = $match =~ m{ Total: (\d+) +Time: \d+s\s+ Cur: (\d+) +(\d+)\/s \#$}; | ||||||
|                     my $value = $1; | #                  #print "\n# case 4 TX: ".join(",",@parts)."\n"; | ||||||
|                     #print " Found value: $value for key: $end_val\n"; | #                  if (defined $option_map{ $option } ) { | ||||||
|                     $option_map{ $end_val } = $value; | #                     #print "$match\n"; | ||||||
|                     $endval_done++; | #                     $match =~ s/""/ /g; | ||||||
|                   } | #                     ($option_map{ $option }) = $match =~/.*?:\s+(.*?)\s+\#$/; | ||||||
|                } | #                     $endval_done++; | ||||||
|             } # ~matches | #                     last; | ||||||
|          } # ~endp_vals | #                  } | ||||||
|  | #               } | ||||||
|  | #               elsif ($match =~ /(Bytes|Packets) (Rcvd|Transmitted)/ ) { | ||||||
|  | #                  ($option) = ($match =~ /((Bytes|Packets) (Rcvd|Transmitted))/); | ||||||
|  | #                  @parts      = ($match =~ m{ Total: (\d+) +Time: \d+s\s+ Cur: (\d+) +(\d+)\/s \#$}); | ||||||
|  | #                  #print "\n# case 5 TX: ".join(",",@parts)."\n"; | ||||||
|  | #                  my $value = 0; | ||||||
|  | #                  if (defined $option_map{ $option } ) { | ||||||
|  | #                     if ($end_val =~ /rx_(bps|pps)/ ) { | ||||||
|  | #                        $value = 0 + $parts[2]; | ||||||
|  | #                     } | ||||||
|  | #                     elsif ($end_val =~ /rx_(byte|pkt|packet)s/ ) { | ||||||
|  | #                        $value = 0 + $parts[0]; | ||||||
|  | #                     } | ||||||
|  | #                     if ($option eq "Bytes Rcvd") { | ||||||
|  | #                        if ($end_val =~ /rx_bps/ ) { | ||||||
|  | #                           $value   *= 8; | ||||||
|  | #                        } | ||||||
|  | #                     } | ||||||
|  | #                     $option_map{ $option } = $value; | ||||||
|  | #                     $endval_done++; | ||||||
|  | #                     last; | ||||||
|  | #                  } | ||||||
|  | #               } | ||||||
|  | #               else { | ||||||
|  | #                  $match =~ s/Shelf: (\d+), /Shelf: $1  / | ||||||
|  | #                     if ($match =~ /^\s*Shelf:/ ); | ||||||
|  | # | ||||||
|  | #                  $match =~ s/(Endpoint|PktsToSend): (\d+) /$1: $2  / | ||||||
|  | #                     if ($match =~ /\s*(Endpoint|PktsToSend):/ ); | ||||||
|  | # | ||||||
|  | #                  if ($match =~ /((Src|Dst)Mac): /) { | ||||||
|  | #                     my ($name1, $mac1) = ( $match =~ /(...Mac): (.*?)  /); | ||||||
|  | #                     $mac1 =~ s/ /-/g; | ||||||
|  | #                     $match =~ s/(...Mac): (.. .. .. .. .. ..) /$1: $mac1 /; | ||||||
|  | #                  } | ||||||
|  | #                  if ($match =~ /FileName: .*? SendBadCrc: /) { | ||||||
|  | #                     my $filename1 = ''; | ||||||
|  | #                     ($filename1) =~ /FileName: (.*?) SendBadCrc.*$/; | ||||||
|  | #                     $filename1 = '""' if ($filename1 =~ /^ *$/); | ||||||
|  | #                     $match =~ s/(FileName): (.*?) (SendBadCrc.*)$/$1: $filename1  $3/; | ||||||
|  | #                  } | ||||||
|  | #                  $match =~ s/CWND: (\d+) /CWND: $1  / | ||||||
|  | #                     if ($match =~/CWND: (\d+) /); | ||||||
|  | #                  # ~specials | ||||||
|  | # | ||||||
|  | #                  #print "  match: $match\n"; | ||||||
|  | #                  if ($match =~ /.*$end_val:\s+(\S+)/) { | ||||||
|  | #                    my $value = $1; | ||||||
|  | #                    #print " Found value: $value for key: $end_val\n"; | ||||||
|  | #                    $option_map{ $end_val } = $value; | ||||||
|  | #                    $endval_done++; | ||||||
|  | #                  } | ||||||
|  | #               } | ||||||
|  | #            } # ~matches | ||||||
|  | #         } # ~endp_vals | ||||||
|          for $option ( sort keys %option_map ) { |          for $option ( sort keys %option_map ) { | ||||||
|             print $option.": ".$option_map{ $option }.$::NL; |             print $option.": ".$option_map{ $option }."\n"; | ||||||
|          } |          } | ||||||
|       } |       } | ||||||
|       else { |       else { | ||||||
| @@ -682,6 +689,7 @@ elsif ($::action eq "show_cx") { | |||||||
|       $::test_mgr = "default_tm"; |       $::test_mgr = "default_tm"; | ||||||
|    } |    } | ||||||
|    my $cmd = $::utils->fmt_cmd("show_cxe", $::test_mgr, $::cx_name ); |    my $cmd = $::utils->fmt_cmd("show_cxe", $::test_mgr, $::cx_name ); | ||||||
|  |    #print "$cmd\n"; | ||||||
|    print $::utils->doAsyncCmd($cmd)."\n"; |    print $::utils->doAsyncCmd($cmd)."\n"; | ||||||
| } | } | ||||||
| elsif ($::action eq "create_cx") { | elsif ($::action eq "create_cx") { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user