--- lib/MDAP/ChangeIP.pm 2007/12/05 22:53:21 84 +++ lib/MDAP/ChangeIP.pm 2007/12/05 23:13:38 85 @@ -5,13 +5,24 @@ use Module::Pluggable; use MDAP; +use NetAddr::IP; -my $serial2ip = { - 'CP0636JT3SH' => '192.168.1.242;10.0.0.1', - 'CP0644JTHJ4' => '192.168.1.243;10.0.0.2', - 'CP0624BH55U' => '192.168.1.244;10.0.0.3', - 'CP0703KT3PP' => '10.0.0.4', -}; +# start IPs +my $ip1 = NetAddr::IP->new('192.168.1.242/24'); +my $ip2 = NetAddr::IP->new('10.0.0.1/8'); + +my @serials = ( qw/ + CP0636JT3SH + CP0644JTHJ4 + CP0624BH55U + CP0703KT3PP +/); + +my $serial2ip; + +foreach my $serial ( @serials ) { + $serial2ip->{$serial} = $ip1++ . ';' . $ip2++; +} sub check { my ( $self, $h ) = @_; @@ -20,7 +31,9 @@ my $ip_list = $h->{'IP_LIST'} || die "no IP_LIST"; if ( my $ip = $serial2ip->{$serial} ) { - if ( $ip eq $ip_list ) { + my $ip_only = $ip; + $ip_only =~ s/\/\d+//g; + if ( $ip eq $ip_list || $ip_only eq $ip_list ) { once "OK ",__PACKAGE__," $serial $ip_list"; return; } @@ -33,22 +46,20 @@ my $ip_status; $ip_status->{$_}-- foreach ( split(/;/, $ip_list ) ); - $ip_status->{$_}++ foreach ( split(/;/, $ip ) ); + $ip_status->{$_}++ foreach ( split(/;/, $ip_only ) ); foreach my $current_ip ( sort { $ip_status->{$b} <=> $ip_status->{$a} } keys %$ip_status ) { if ( $ip_status->{$current_ip} < 0 ) { warn "-- remove IP $current_ip\n" if $debug; return "ip ipdelete addr=$current_ip"; } elsif ( $ip_status->{$current_ip} > 0 ) { - my $mask = ''; - $mask = '/8' if $current_ip =~ m/^10\./; - $mask = '/24' if $current_ip =~ m/^192\.168\./; - warn "++ add IP $current_ip$mask\n" if $debug; - return "ip ipadd intf=LocalNetwork addr=$current_ip$mask"; + warn "++ add IP $current_ip\n" if $debug; + return "ip ipadd intf=LocalNetwork addr=$current_ip"; } } return; } else { - once "ERROR: can't find serial2ip mapping for $serial IP $ip_list"; + once "WARNING: unknown serial $serial assigning $ip1;$ip2"; + $serial2ip->{$serial} = $ip1++ . ';' . $ip2++; return; } }