X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=lib%2FCWMP%2FVendor.pm;h=e0cb1d3125594feee06730e12cb7c3a59c80bfeb;hb=7adaf1ae075abb79226ae0d563c0c0156491ecec;hp=2cf6a0173c6be1fecbabd40a610463839c53aac4;hpb=c65d35f21aa8ffd43d5c993f710cd2d6c377591f;p=perl-cwmp.git diff --git a/lib/CWMP/Vendor.pm b/lib/CWMP/Vendor.pm index 2cf6a01..e0cb1d3 100644 --- a/lib/CWMP/Vendor.pm +++ b/lib/CWMP/Vendor.pm @@ -39,35 +39,56 @@ sub new { return $self; } -my $cpe_faulty; +our $cpe_faulty; my $serial2ip = { - 'CP0636JT3SH' => '192.168.1.242', - 'CP0644JTHJ4' => '192.168.1.253', + 'CP0636JT3SH' => '10.0.0.1', + 'CP0644JTHJ4' => '10.0.0.2', + 'CP0624BH55U' => '10.0.0.3', }; my ( $last_ip, $last_serial ); +=head2 state2serial + + my $serial = state2serial( $state ); + +=cut + sub state2serial { my $state = shift; - my $serial = $state->{DeviceID}->{SerialNumber} || die "no serial?"; - my $ip = $state->{Parameter}->{'.ExternalIPAddress'} || die "no ip?"; + my $serial = $state->{DeviceID}->{SerialNumber} || die "no DeviceID.SerialNumber in ",dump($state); + my $ip = + $state->{Parameter}->{'.ExternalIPAddress'} || + $state->{Parameter}->{ + # fix for firmware 5.3.3.4 which returns full path + ( grep { m/\.ExternalIPAddress/ } keys %{ $state->{Parameter} } )[0] + } || + die "no .ExternalIPAddress in ",dump($state); - warn "## state2serial $serial $ip\n"; + warn "## state2serial $serial $ip\n" if $debug; ( $last_ip, $last_serial ) = ( $ip, $serial ); return ( $serial, $ip ); } +=head2 add_triggers + +Install all custom triggers + + CWMP::Vendor->add_triggers; + +=cut + sub add_triggers { - warn __PACKAGE__, "->add_triggers\n"; + warn __PACKAGE__, "->add_triggers\n" if $debug; CWMP::Request->add_trigger( name => 'Fault', callback => sub { my ( $self, $state ) = @_; - warn "## Fault trigger state = ",dump( $self, $state ); + warn "## Fault trigger state = ",dump( $self, $state ) if $debug; die "can't map fault to serial!" unless $last_serial; warn "ERROR: got Fault and ingoring $last_ip $last_serial\n"; $cpe_faulty->{$last_serial}++; @@ -79,15 +100,15 @@ CWMP::Request->add_trigger( name => 'Inform', callback => sub { my ( $serial, $ip ) = state2serial( $state ); if ( $cpe_faulty->{$serial} ) { - warn "## Inform trigger from $ip $serial -- IGNORED\n"; # if $debug; + warn "## Inform trigger from $ip $serial -- IGNORED\n" if $debug; return; } - warn "## Inform trigger from $ip $serial\n"; # if $debug; + warn "## Inform trigger from $ip $serial\n" if $debug; my $found = 0; - warn "### serial2ip = ",dump( $serial2ip ); + warn "### serial2ip = ",dump( $serial2ip ) if $debug; foreach my $target_serial ( keys %$serial2ip ) {