Guckst Du:
Draußen steht ein Switch(1) mit vielen Ports. Den fragst Du über SNMP ab und erstelltst für jeden Port (If) ein Objekt. Jedes IF-Object tust Du in einen Hash. Fürs Management musst Du dann nur noch den Hash durchlaufen:
Na, knapp daneben, um eine Management-Anwendung geht es nicht. Da haben wir schon was gutes (nicht von mir ;) ). Geht um die andere Seite, die Konfigerstellung, und da muss ich mehr oder weniger alles eintüten und loopen können, was der Router so hergibt: PE, CE, NAS, RADIUS, Kaskaden, Plattformkopplungen etc. etc.. Mit Interfaces alleine ist es also wirklich nicht getan.
Ich hab jetzt aber eine Lösung für das Problem gefunden:
Wenn ich die Counter einzeln dereferenziere geht es:
#/usr/bin/perl
use strict;
my %I;
$I{'ce'}{'lan'}{1}{'ifc'}="FastEthernet0/2-3";
$I{'ce'}{'lan'}{1}{'ip'}="1.1.1.1";
$I{'ce'}{'lan'}{1}{'sec'}{1}{'ip'}="10.1.1.1";
$I{'ce'}{'lan'}{2}{'ifc'}="GigabitEthernet0/1-2";
$I{'ce'}{'lan'}{2}{'ip'}="2.2.2.2";
$I{'ce'}{'lan'}{2}{'sec'}{1}{'ip'}="20.2.2.2";
my %old_lan_hash;
%{$old_lan_hash{1}}=%{$I{'ce'}{'lan'}{1}};
%{$old_lan_hash{2}}=%{$I{'ce'}{'lan'}{2}};
my $count_lan=1; my $count_lan_new=1;
while ($old_lan_hash{$count_lan}{'ifc'})
{
print "\nTesting interface: ".$old_lan_hash{$count_lan}{'ifc'};
if ($old_lan_hash{$count_lan}{'ifc'}=~/^(.*)(\d+)-(\d+)/)
{
my $main=$1; my $start=$2; my $end=$3;
for (my $a=$start;$a<=$end;$a++)
{
%{$I{'ce'}{'lan'}{$count_lan_new}}=%{$old_lan_hash{$count_lan}};
$I{'ce'}{'lan'}{$count_lan_new}{'ifc'}= $main.$a;
print "\nNew LAN interface: ".$count_lan_new.": ".$I{'ce'}{'lan'}{$count_lan_new}{'ifc'}." (IP:".$I{'ce'}{'lan'}{$count_lan_new}{'ip'}."/SEC:".$I{'ce'}{'lan'}{$count_lan_new}{'sec'}{1}{'ip'}.")";
$count_lan_new++;
}
}
$count_lan++;
}
print "\n\n";
Da musste ich jetzt zwar eine kleine Schleife vorschalten, ist aber immernoch viel besser, als jeden Wert einzeln zu mappen!
(insgesamt trotzdem nicht schön, ich weiß, aber ich bekomm meinen Code evtl. bis Montag fertig um ein Kundenprojekt nicht zu gefährden)