From 9dfebdb7499c2d927ca63100f45535926198c106 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 14 May 2019 11:41:19 +0100 Subject: topology and update master from slaves --- INF/DSRx020.pm | 68 ++++++++++++++++++++++++++++++++++++- update_master_from_slaves.pl | 80 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 update_master_from_slaves.pl diff --git a/INF/DSRx020.pm b/INF/DSRx020.pm index 2c67ec4..191f4bf 100644 --- a/INF/DSRx020.pm +++ b/INF/DSRx020.pm @@ -399,7 +399,27 @@ sub port_name_set($$$) { if ( $port =~ /P(\d+)\.(\d+)/ ) { return $self->spc_set_name( $1, $2, $name ); } - else { + elsif ($port =~ /K(\d+)/ ) { + my $index= $1; + my $res = $self->do_post( + { file => 'view-units-by-target-devices' }, + [ + file => 'overview-dsr', + saveParms => 'overview-dsr', + name => '', + index => $index, + targetname => $name, + action => 'SAVE', + ] + ); + + #oid => '141057', + + $self->flush(); + + return undef unless $res->is_success; + return "Success"; + } else { return undef; } } @@ -443,6 +463,52 @@ sub port_count($) { return scalar( @{ $self->{ports} } ); } +sub port_get_topology($$) +{ + my ( $self, $port ) = @_; + + return unless $port =~ /K(\d+)/; + + my $res = $self->do_get( + { + file => 'jnlp', + index => $1 + } + ); + + return undef unless defined $res; + + my $xml = new XML::Simple; + + my $c = $res->content; + + $c =~ s/^[\s\n\r]+//s; + + my $data = $xml->XMLin($c); + + return undef unless defined $data->{'application-desc'}; + + my $args = $data->{'application-desc'}->{'argument'}; + + return undef unless defined $args; + + my $ret = undef ; + + for my $arg (@$args) { + + + next unless $arg =~ /^path=a:[^,]*,p:([0-9]+),c:([0-9]+),/; + print $arg," -> ", $1, " ",$2 ,"\n"; + return [$1,$2]; + } + + + return undef; + +} + + + sub view($$) { my ( $self, $port ) = @_; diff --git a/update_master_from_slaves.pl b/update_master_from_slaves.pl new file mode 100644 index 0000000..5746049 --- /dev/null +++ b/update_master_from_slaves.pl @@ -0,0 +1,80 @@ +#!/usr/bin/env perl + +BEGIN { push @INC, "/usr/local/share/inf"; } + +use INF; +use Data::Dumper; + +sub get_inf_by_name($) { + my $name = shift; + for my $h (@$INF::infs) { + if ( ( $h->{nice_name} eq $name ) + or ( $h->{host} eq $name ) ) + { + return INF->new($h); + } + } +} + +my $master = get_inf_by_name("slithrugtanni"); + +#print Dumper($inf); +# +# + +my $slaves = { + 'ottar' => 1, + 'fjathrhams' => 2, + 'fressa' => 3, + 'gullinbursti' => 4, + 'hildisvini' => 5 +}; + +my $slave_map = []; + +for my $slave_name ( keys %$slaves ) { + my $slave = get_inf_by_name($slave_name); + my $slave_port = $slaves->{$slave_name}; + + for ( my $i = 1 ; $i <= 16 ; ++$i ) { + $slave_map->[$slave_port]->[$i] = + $slave_name . sprintf( "%02d", $i ); + } + + my $n = $slave->port_count(); + for ( my $i = 1 ; $i <= $n ; ++$i ) { + my $port_id = $slave->port_id_get_by_number($i); + next unless $port_id =~ /^K/; + my $port_name = $slave->port_name_get($port_id); + my $port_topology = $slave->port_get_topology($port_id); + next unless defined $port_topology; + next unless $port_topology->[1] == 0; + $slave_map->[$slave_port]->[ $port_topology->[0] ] = $port_name; + } + print Dumper($slave_map); +} + +print Dumper($slave_map); + +my $n = $master->port_count(); +for ( my $i = 1 ; $i <= $n ; ++$i ) { + my $port_id = $master->port_id_get_by_number($i); + my $port_name = $master->port_name_get($port_id); + my $port_topology = $master->port_get_topology($port_id); + + next unless defined $port_topology; + next unless $port_topology->[1] != 0; + + $slave_name = $slave_map->[ $port_topology->[0] ]->[ $port_topology->[1] ]; + + next unless defined $slave_name; + + printf "| +---%-5s %-30s %d.%d => %s\n", $port_id, $port_name, + $port_topology->[0], $port_topology->[1], $slave_name; + + next if $slave_name eq $port_name; + + $master->port_name_set( $port_id, $slave_name ); + $master->get_names(); +} + -- cgit v1.2.3