summaryrefslogtreecommitdiffstats
path: root/update_master_from_slaves.pl
blob: 57460498b4c326213b5abc636dc0c11ed8d12a25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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();
}