#!/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(); }