mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 18:58:01 +00:00 
			
		
		
		
	Merge branch 'master' of github.com:greearb/lanforge-scripts
This commit is contained in:
		| @@ -106,6 +106,22 @@ sub flatten_list { | |||||||
|    my $rh_list = shift; |    my $rh_list = shift; | ||||||
|    my $list_name = shift; |    my $list_name = shift; | ||||||
|    my $rh_irefs = {}; |    my $rh_irefs = {}; | ||||||
|  |    return if (!defined $rh_list); | ||||||
|  |        | ||||||
|  |    if (!defined $rh_list->{$list_name}) { | ||||||
|  |       warn "flatten_list: $list_name not found"; | ||||||
|  |       return; | ||||||
|  |    } | ||||||
|  |    if (ref $rh_list->{$list_name} eq "HASH") { | ||||||
|  |       return if ( (keys %{$rh_list->{$list_name}} < 1)); | ||||||
|  |    } | ||||||
|  |    if (ref $rh_list->{$list_name} ne "ARRAY") { | ||||||
|  |       print "flatten_list: $list_name not Array Ref:\n"; | ||||||
|  |       print "-------------------------------------------------\n"; | ||||||
|  |       print Dumper($rh_list); | ||||||
|  |       print "-------------------------------------------------\n"; | ||||||
|  |       return; | ||||||
|  |    } | ||||||
|    for (my $i=0; $i < @{$rh_list->{$list_name}}; $i++) { |    for (my $i=0; $i < @{$rh_list->{$list_name}}; $i++) { | ||||||
|       my @k = keys(%{$rh_list->{$list_name}[$i]}); |       my @k = keys(%{$rh_list->{$list_name}[$i]}); | ||||||
|       #print Dumper(\@k); |       #print Dumper(\@k); | ||||||
|   | |||||||
							
								
								
									
										303
									
								
								json/l4_test.pl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										303
									
								
								json/l4_test.pl
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,303 @@ | |||||||
|  | #!/usr/bin/perl -w | ||||||
|  | use strict; | ||||||
|  | use warnings; | ||||||
|  | use diagnostics; | ||||||
|  | use Carp; | ||||||
|  | $SIG{ __DIE__  } = sub { Carp::confess( @_ ) }; | ||||||
|  | $SIG{ __WARN__ } = sub { Carp::confess( @_ ) }; | ||||||
|  |  | ||||||
|  | # Un-buffer output | ||||||
|  | $| = 1; | ||||||
|  | use Getopt::Long; | ||||||
|  | use JSON::XS; | ||||||
|  | use HTTP::Request; | ||||||
|  | use LWP; | ||||||
|  | use LWP::UserAgent; | ||||||
|  | use Data::Dumper; | ||||||
|  | use Time::HiRes qw(usleep); | ||||||
|  | use JSON; | ||||||
|  | use lib '/home/lanforge/scripts'; | ||||||
|  | use LANforge::JsonUtils qw(logg err json_request get_links_from get_thru json_post get_port_names flatten_list); | ||||||
|  |  | ||||||
|  | package main; | ||||||
|  | # Default values for ye ole cmd-line args. | ||||||
|  | our $Resource  = 1; | ||||||
|  | our $quiet     = "yes"; | ||||||
|  | our $Host      = "localhost"; | ||||||
|  | our $Port      = 8080; | ||||||
|  | our $HostUri   = "http://$Host:$Port"; | ||||||
|  | our $Web       = LWP::UserAgent->new; | ||||||
|  | our $Decoder   = JSON->new->utf8; | ||||||
|  | our $ssid; | ||||||
|  | our $security; | ||||||
|  | our $passphrase; | ||||||
|  |  | ||||||
|  | my $usage = qq("$0 --host {ip or hostname} # connect to this | ||||||
|  |    --port {port number} # defaults to 8080 | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | my $des_resource = 6; | ||||||
|  |  | ||||||
|  | ## | ||||||
|  | ##    M A I N | ||||||
|  | ## | ||||||
|  |  | ||||||
|  | GetOptions | ||||||
|  | ( | ||||||
|  |   'host=s'        => \$::Host, | ||||||
|  |   'port=i'        => \$::Port | ||||||
|  | ) || (print($usage) && exit(1)); | ||||||
|  |  | ||||||
|  | $::HostUri = "http://$Host:$Port"; | ||||||
|  |  | ||||||
|  | my $uri = "/shelf/1"; | ||||||
|  | my $rh = json_request($uri); | ||||||
|  | my $ra_links = get_links_from($rh, 'resources'); | ||||||
|  | my @ports_up= (); | ||||||
|  |  | ||||||
|  | # TODO: make this a JsonUtils::list_ports() | ||||||
|  | $uri = "/port/1/6/list?fields=alias,device,down,phantom,port"; | ||||||
|  | #logg("requesting $uri"); | ||||||
|  | $rh = json_request($uri); | ||||||
|  | flatten_list($rh, 'interfaces'); | ||||||
|  | for my $rh_p (keys %{$rh->{'flat_list'}}) { | ||||||
|  |    if (!$rh->{'flat_list'}->{$rh_p}->{'down'}) { | ||||||
|  |       push(@ports_up, $rh_p); | ||||||
|  |    } | ||||||
|  | } | ||||||
|  | # find first station | ||||||
|  | my $rh_sta; | ||||||
|  | for my $rh_up (@ports_up) { | ||||||
|  |    my $eid = $rh->{'flat_list'}->{$rh_up}->{'port'}; | ||||||
|  |    my @hunks = split(/[.]/, $eid); | ||||||
|  |    if ($hunks[1]) { | ||||||
|  |       $rh_sta = $rh_up; | ||||||
|  |    } | ||||||
|  | } | ||||||
|  | if (!defined $rh_sta) { | ||||||
|  |    die("Unable to find a virtual station. Is one up?"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # delete old CXes and old endpoints | ||||||
|  | # TODO: collect_l4cx_names | ||||||
|  |  | ||||||
|  | my $rh_endplist = json_request("/layer4/list"); | ||||||
|  | print "\nRemoving L4: "; | ||||||
|  | my @endp_names = (); | ||||||
|  | print Dumper($rh_endplist); | ||||||
|  |  | ||||||
|  | if (defined $rh_endplist->{"endpoint"} | ||||||
|  |    && (ref $rh_endplist->{"endpoint"} eq "HASH")) { | ||||||
|  |    # indicates we only have one | ||||||
|  |    push(@endp_names, $rh_endplist->{"endpoint"}->{"name"}); | ||||||
|  | } | ||||||
|  | elsif (defined $rh_endplist->{"endpoint"}) { | ||||||
|  |    flatten_list($rh_endplist, 'endpoint'); | ||||||
|  |    print "FLAT LIST:\n"; | ||||||
|  |    print Dumper($rh_endplist->{'flat_list'}); | ||||||
|  |    for my $ep_name (keys %{$rh_endplist->{'flat_list'}}) { | ||||||
|  |       next if (!defined $ep_name); | ||||||
|  |       next if ($ep_name eq ""); | ||||||
|  |       next if ((ref $ep_name) eq "ARRAY"); | ||||||
|  |       next if (!defined $rh_endplist->{'flat_list'}->{$ep_name}->{"name"}); | ||||||
|  |       next if ($rh_endplist->{'flat_list'}->{$ep_name}->{"name"} eq ""); | ||||||
|  |       print "epn:".Dumper($rh_endplist->{'flat_list'}->{$ep_name}->{"name"}); | ||||||
|  |       push(@endp_names, $ep_name); | ||||||
|  |    } | ||||||
|  | } | ||||||
|  | if ((@endp_names < 1) && (defined $rh_endplist->{"endpoint"})) { | ||||||
|  |    # check for mutated L4endp entries that only exist in EID form | ||||||
|  |    #die "Unknown L4 endpoint state" | ||||||
|  |    #   if (!(defined $rh_endplist->{"endpoint"})); | ||||||
|  |    die "No endpoint entries" | ||||||
|  |       if (scalar @{$rh_endplist->{"endpoint"}} < 1); | ||||||
|  |    for $rh (@{$rh_endplist->{"endpoint"}}) { | ||||||
|  |       print Dumper($rh); | ||||||
|  |       my @k = keys(%$rh); | ||||||
|  |       print "$k[0] "; | ||||||
|  |       push(@endp_names, $k[0]); | ||||||
|  |    } | ||||||
|  | } | ||||||
|  | #print Dumper(\@endp_names); | ||||||
|  |  | ||||||
|  | my @cx_names = (); | ||||||
|  | if (@endp_names > 0) { | ||||||
|  |    for my $endp_name (@endp_names) { | ||||||
|  |       print " endp_name[$endp_name]"; | ||||||
|  |       push(@cx_names, "CX_".$endp_name); | ||||||
|  |    } | ||||||
|  | } | ||||||
|  | my $rh_req = { "test_mgr" => "all" }; | ||||||
|  | for my $cx_name (@cx_names) { | ||||||
|  |    $rh_req->{"cx_name"} = $cx_name; | ||||||
|  |    json_post("/cli-json/rm_cx", $rh_req); | ||||||
|  | } | ||||||
|  | my $rh_show_cxe = { "test_mgr"=>"all", "cross_connect"=>"all"}; | ||||||
|  | json_post("/cli-json/show_cxe", $rh_show_cxe); | ||||||
|  | sleep 1; | ||||||
|  |  | ||||||
|  | $uri = "/cli-json/rm_endp"; | ||||||
|  | for my $ep_name (@endp_names) { | ||||||
|  |    if (!defined $ep_name || $ep_name =~/^\s*$/ || (ref $ep_name) eq "ARRAY") { | ||||||
|  |       print " [$ep_name]"; #skipping | ||||||
|  |       print Dumper(\$ep_name); | ||||||
|  |       next; | ||||||
|  |    } | ||||||
|  |    print "-$ep_name "; | ||||||
|  |    $rh = { "endp_name" => $ep_name }; | ||||||
|  |    json_post($uri, $rh); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | print "\nRefreshing..."; | ||||||
|  | my $h = {"endpoint"=>"all"}; | ||||||
|  | json_request("/cli-json/nc_show_endpoints", $h); | ||||||
|  | sleep 1; | ||||||
|  | $h = {"test_mgr"=>"all", "cross_connect"=>"all"}; | ||||||
|  | json_request("/cli-json/show_cxe", $h); | ||||||
|  |  | ||||||
|  | # assume resource 1, eth1 is present, and create an endpoint to it | ||||||
|  | # -A and -B are expected convention for endpoint names | ||||||
|  |  | ||||||
|  | # create 10 endpoints | ||||||
|  | my $rh_ports = json_request("/port/1/${des_resource}/list"); | ||||||
|  | flatten_list($rh_ports, 'interfaces'); | ||||||
|  |  | ||||||
|  | my $rh_endp_A = { | ||||||
|  |       'alias'           => 'udp_json', | ||||||
|  |       'shelf'           => 1, | ||||||
|  |       'resource'        => 1, | ||||||
|  |       'port'            => 'b1000', # or eth1 | ||||||
|  |       'type'            => 'lf_udp', | ||||||
|  |       'ip_port'         => -1, | ||||||
|  |       'is_rate_bursty'  => 'NO', | ||||||
|  |       'min_rate'        => 1000000, | ||||||
|  |       'min_pkt'         => -1, | ||||||
|  |       'max_pkt'         => -1, | ||||||
|  |       'payload_pattern' => 'increasing', | ||||||
|  |       'multi_conn'      => 0 | ||||||
|  |    }; | ||||||
|  |  | ||||||
|  | my $rh_endp_B = { | ||||||
|  |       'alias'           => "untitled", | ||||||
|  |       'shelf'           => 1, | ||||||
|  |       'resource'        => $des_resource, | ||||||
|  |       #'port'            => 'unset', | ||||||
|  |       'type'            => 'l4_generic', | ||||||
|  |       'timeout'         => '2000', | ||||||
|  |       'url_rate'        => '600', | ||||||
|  |       'url'             => 'DL http://10.41.0.3/', | ||||||
|  |       'max_speed'       => '1000000' | ||||||
|  |    }; | ||||||
|  |  | ||||||
|  | $h = {"endpoint"=>"all"}; | ||||||
|  | json_request("/cli-json/nc_show_endpoints", $h); | ||||||
|  | $h = {"test_mgr"=>"all", "cross_connect"=>"all"}; | ||||||
|  | json_request("/cli-json/show_cxe", $h); | ||||||
|  | sleep 1; | ||||||
|  | print "\nConstructing new Endpoints: "; | ||||||
|  | my $num_ports = scalar keys(%{$rh_ports->{'flat_list'}}); | ||||||
|  | my $num_cx = 0; | ||||||
|  | my $disp_num = $des_resource * 1000; | ||||||
|  | for my $rh_p (values %{$rh_ports->{'flat_list'}}) { | ||||||
|  |  | ||||||
|  |    last if ($num_cx >= ($num_ports-1)); | ||||||
|  |    next if ($rh_p->{'alias'} !~ /^v*sta/); | ||||||
|  |  | ||||||
|  |    #my $end_a_alias = "udp_json_${disp_num}-A"; | ||||||
|  |    my $end_b_alias = "l4json_${disp_num}";  | ||||||
|  |    my $port_b = $rh_p->{'alias'}; | ||||||
|  |    print " ${port_b}:$end_b_alias"; | ||||||
|  |    $rh_endp_B->{'port'} = $port_b; | ||||||
|  |    $rh_endp_B->{'alias'} = $end_b_alias; | ||||||
|  |    $num_cx++; | ||||||
|  |    $disp_num++; | ||||||
|  |  | ||||||
|  |    #json_post("/cli-json/add_endp", $rh_endp_A); | ||||||
|  |    print Dumper($rh_endp_B); | ||||||
|  |    sleep 5; | ||||||
|  |     | ||||||
|  |    json_post("/cli-json/add_l4_endp", $rh_endp_B); | ||||||
|  | } | ||||||
|  | print "\nRefreshing..."; | ||||||
|  | $h = {"endpoint"=>"all"}; | ||||||
|  | json_request("/cli-json/nc_show_endpoints", $h); | ||||||
|  | sleep 1; | ||||||
|  | print "\nConstructing new CX: "; | ||||||
|  | $num_cx = 0; | ||||||
|  | my $rh_endpoints = json_request("/layer4/list"); | ||||||
|  | flatten_list($rh_endpoints, 'endpoint'); | ||||||
|  | for my $rh_e (values %{$rh_endpoints->{'flat_list'}}) { | ||||||
|  |    last if ($num_cx >= ($num_ports-1)); | ||||||
|  |    #next if ($rh_e->{'alias'} !~ /^v*sta/); | ||||||
|  |    print Dumper($rh_e); | ||||||
|  |    # my $end_a_alias = "udp_json_${num_cx}-A"; | ||||||
|  |    # my $end_b_alias = "udp_json_${num_cx}-B";  | ||||||
|  |    # my $port_b = $rh_p->{'alias'}; | ||||||
|  |    # my $cx_alias = "udp_json_".$num_cx; | ||||||
|  |    # $rh_cx->{'alias'} = $cx_alias;  | ||||||
|  |    # $rh_cx->{'tx_endp'} = $end_a_alias; | ||||||
|  |    # $rh_cx->{'rx_endp'} = $end_b_alias; | ||||||
|  |    # json_post("/cli-json/add_cx", $rh_cx); | ||||||
|  |    # print " $cx_alias"; | ||||||
|  |    # $num_cx++; | ||||||
|  | } | ||||||
|  | # print "\nRefreshing..."; | ||||||
|  | $h = {"endpoint"=>"all"}; | ||||||
|  | json_request("/cli-json/nc_show_endpoints", $h); | ||||||
|  |  | ||||||
|  | #my $rh_cxlist = json_request("/cx/list"); | ||||||
|  | #@cx_names = (); | ||||||
|  | #for my $cx_name (sort keys %$rh_cxlist) { | ||||||
|  | #   next if (ref $rh_cxlist->{$cx_name} ne "HASH"); | ||||||
|  | #   next if (!defined $rh_cxlist->{$cx_name}->{"name"}); | ||||||
|  | #   push(@cx_names, $rh_cxlist->{$cx_name}->{"name"}); | ||||||
|  | #} | ||||||
|  | #for my $cx_alias (sort @cx_names) { | ||||||
|  | #   my $rh_cx_t = { | ||||||
|  | #      'test_mgr'  => 'default_tm', | ||||||
|  | #      'cx_name'   => $cx_alias, | ||||||
|  | #      'milliseconds'=> 1000, | ||||||
|  | #   }; | ||||||
|  | #   json_post("/cli-json/set_cx_report_timer", $rh_cx_t); | ||||||
|  | #} | ||||||
|  | print "\nRefreshing..."; | ||||||
|  | $h = {"endpoint"=>"all"}; | ||||||
|  | json_request("/cli-json/nc_show_endpoints", $h); | ||||||
|  | sleep 1; | ||||||
|  | $h = {"test_mgr"=>"all", "cross_connect"=>"all"}; | ||||||
|  | json_request("/cli-json/show_cxe", $h); | ||||||
|  |  | ||||||
|  | #my $set_state = { | ||||||
|  | #   'test_mgr'  => 'default_tm', | ||||||
|  | #   'cx_name'   => 'udp_ex', | ||||||
|  | #   'cx_state'  => 'RUNNING' | ||||||
|  | #}; | ||||||
|  | #my @cx_names = (); | ||||||
|  | #$rh_cxlist = json_request("/cx/list"); | ||||||
|  | #for my $cx_name (sort keys %$rh_cxlist) { | ||||||
|  | #   next if (ref $rh_cxlist->{$cx_name} ne "HASH"); | ||||||
|  | #   next if (!defined $rh_cxlist->{$cx_name}->{"name"}); | ||||||
|  | #   push(@cx_names, $rh_cxlist->{$cx_name}->{"name"}); | ||||||
|  | #} | ||||||
|  | #print "\nStarting: "; | ||||||
|  | #for my $cxname (@cx_names) { | ||||||
|  | #   print " $cxname"; | ||||||
|  | #   $set_state->{'cx_name'} = $cxname; | ||||||
|  | #   json_post("/cli-json/set_cx_state", $set_state); | ||||||
|  | #} | ||||||
|  | #sleep 10; | ||||||
|  |  | ||||||
|  | #my $set_state = { | ||||||
|  | #   'test_mgr'  => 'default_tm', | ||||||
|  | #   'cx_name'   => 'udp_ex', | ||||||
|  | #   'cx_state'  => 'STOPPED' | ||||||
|  | #}; | ||||||
|  | #print "\nStopping: "; | ||||||
|  | #for my $cxname (@cx_names) { | ||||||
|  | #   $set_state->{'cx_name'} = $cxname; | ||||||
|  | #   print " $cxname"; | ||||||
|  | #   json_post("/cli-json/set_cx_state", $set_state); | ||||||
|  | #} | ||||||
|  | #print "...done\n"; | ||||||
|  | # | ||||||
|  | # | ||||||
| @@ -34,6 +34,8 @@ my $usage = qq("$0 --host {ip or hostname} # connect to this | |||||||
| ); | ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | my $num_sta = 30; | ||||||
|  | my $des_resource = 6; | ||||||
| ## | ## | ||||||
| ##    M A I N | ##    M A I N | ||||||
| ## | ## | ||||||
| @@ -72,13 +74,13 @@ my @radios = (); | |||||||
| my @destroy_me = (); | my @destroy_me = (); | ||||||
| for my $rh_alias_link (@$ra_alias_links) { | for my $rh_alias_link (@$ra_alias_links) { | ||||||
|    for my $rh_link (@$rh_alias_link) { |    for my $rh_link (@$rh_alias_link) { | ||||||
|       if (  ($rh_link->{'uri'} =~m{^/port/1/[3]/}) |       if (  ($rh_link->{'uri'} =~m{^/port/1/$des_resource/}) | ||||||
|          && ($rh_link->{'device'} =~m{^sta})) { |          && ($rh_link->{'device'} =~m{^sta})) { | ||||||
|          push(@destroy_me, $rh_link); |          push(@destroy_me, $rh_link); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       push(@radios, $rh_link) |       push(@radios, $rh_link) | ||||||
|          if (($rh_link->{'uri'} =~m{^/port/1/[3]/}) |          if (($rh_link->{'uri'} =~m{^/port/1/$des_resource/}) | ||||||
|             && ($rh_link->{'device'} =~m{^wiphy})); |             && ($rh_link->{'device'} =~m{^wiphy})); | ||||||
|    } |    } | ||||||
| } | } | ||||||
| @@ -100,13 +102,13 @@ for my $rh_target (@destroy_me) { | |||||||
|    usleep (15000); |    usleep (15000); | ||||||
| } | } | ||||||
| my $rh_update = { | my $rh_update = { | ||||||
|    'shelf'=>1, 'resource'=>3, 'port'=>'all', 'probe_flags'=>'0x1' |    'shelf'=>1, 'resource'=>$des_resource, 'port'=>'all', 'probe_flags'=>'0x1' | ||||||
| }; | }; | ||||||
| logg("\nRefreshing: "); | logg("\nRefreshing: "); | ||||||
| my $rh_response =  json_post("/cli-json/nc_show_ports", $rh_update); | my $rh_response =  json_post("/cli-json/nc_show_ports", $rh_update); | ||||||
| my $remaining = 1; | my $remaining = 1; | ||||||
| while ($remaining > 0) { | while ($remaining > 0) { | ||||||
|    $rh = json_request("/port/1/3/list"); |    $rh = json_request("/port/1/$des_resource/list"); | ||||||
|    flatten_list($rh, 'interfaces'); |    flatten_list($rh, 'interfaces'); | ||||||
|    $remaining = 0; |    $remaining = 0; | ||||||
|    for my $name (keys %{$rh->{'flat_list'}}) { |    for my $name (keys %{$rh->{'flat_list'}}) { | ||||||
| @@ -129,7 +131,6 @@ my $rh_radio; | |||||||
| my $radio_name; | my $radio_name; | ||||||
| my $resource; | my $resource; | ||||||
| my $range; | my $range; | ||||||
| my $num_sta = 160; |  | ||||||
| my $radio_num; | my $radio_num; | ||||||
| my $radio_counter = 0; | my $radio_counter = 0; | ||||||
| $rh_response =  json_post("/cli-json/nc_show_ports", $rh_update); | $rh_response =  json_post("/cli-json/nc_show_ports", $rh_update); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ben Greear
					Ben Greear