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 --- update_master_from_slaves.pl | 80 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 update_master_from_slaves.pl (limited to 'update_master_from_slaves.pl') 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