[Moscow.pm] Взрыв мозга или занимательная топология
Kaltashkin Eugene
zhecka на gmail.com
Вс Ноя 25 14:20:15 PST 2007
Andrey пишет:
> Это будет гораздо обозримее, оторвано от oidов жуткого вида и ничего не
> говорящих mac. Мы гарантированно построим структуру сети.
>
текс. кажется первую стадию напрограммил, правда получилось ужасная схема.
залил в таблицу данные по свичам, по макам и по портам, оставив только
рабочие свичи.
Теперь держитесь крепче, код не оптимизировал.
while(my($sw,$port,$macaddr)= $sth->fetchrow)
{
push @{ $result->{$sw}->{$port} },$swmac{$macaddr}; # положить в массив
свича все IP адреса на нём видимые.
}
while (%{ $result })
{
foreach my $sw (sort keys %{ $result })
{
foreach my $port (keys %{ $result->{$sw} })
{
# print $sw,":",$port,' size ',$#{ $result->{$sw}->{$port} },"
data ",join ',',@{ $result->{$sw}->{$port} },"\n";
if ( $#{ $result->{$sw}->{$port} } == 0)
{
my $host = $result->{$sw}->{$port}->[0];
$path->{$sw}->{$port}->{$host} = 0;
undef @{ $result->{$sw}->{$port} };
delete $result->{$sw}->{$port};
# print "Hurray, last position, Dropping $host\n";
&drophost($host);
}
my $ttlcount = 0;
foreach my $prt (keys %{ $result->{$sw} })
{
$ttlcount += scalar @{$result->{$sw}->{$prt}};
}
# print $ttlcount," ",$sw,"\n";
if ( $ttlcount == 0)
{
undef %{$result->{$sw}};
delete $result->{$sw};
}
}
}
sub drophost
{
my $host = shift;
foreach my $sw (sort keys %{ $result })
{
foreach my $port (keys %{ $result->{$sw} })
{
my @tmparr = ();
foreach my $element (@{ $result->{$sw}->{$port} })
{
push(@tmparr,$element) if ($element ne $host);
}
@{ $result->{$sw}->{$port} } = @tmparr;
}
}
}
получил мапу начального уровня.
$VAR1 = {
'10.6.204.28' => {
'25' => {
'10.6.204.27' => 0
}
},
'10.6.204.27' => {
'25' => {
'10.6.204.26' => 0
},
'26' => {
'10.6.204.28' => 0
}
},
'10.6.204.26' => {
'6' => {
'10.6.204.31' => 0
},
'7' => {
'10.6.204.24' => 0
},
'9' => {
'10.6.204.23' => 0
},
'12' => {
'10.6.204.35' => 0
},
'14' => {
'10.6.204.25' => 0
},
'8' => {
'10.6.204.34' => 0
},
'4' => {
'10.6.204.21' => 0
},
'18' => {
'10.6.204.30' => 0
},
'16' => {
'10.6.204.32' => 0
},
'13' => {
'10.6.204.33' => 0
},
'23' => {
'10.6.204.29' => 0
},
'5' => {
'10.6.204.22' => 0
}
}
};
Всё вроде бы хорошо, но теперь нужно построить обратную связь, а с ней
как раз и возникает проблема.
нижестоящие свичи ничего не знают о вышестоящем, ибо от него данные не
пробегали.
Снова впал в ступор.
Как вариант взять ip устройства с которого идёт анализ, вычислить
принадлежность свичу и трейсить от текущего свича подключенного
к устройству, но что-то останавливает.
ЗЫ: как оптимизировать вышестоящие запросы ?
Подробная информация о списке рассылки Moscow-pm