X-Git-Url: http://git.rot13.org/?p=perl-cwmp.git;a=blobdiff_plain;f=bin%2Fcpe-queue.pl;h=a4b6f73175ffd7d72b20eb0b80cd6aa7b3342175;hp=7e2e89a0b7c1a9012b9e6f01bd67537babd9237e;hb=154531e14a8fdafceb312dc3eec3eff1ed5676a9;hpb=7be6369d2f8ce2bedd88f1012fd1f8a9754e1515 diff --git a/bin/cpe-queue.pl b/bin/cpe-queue.pl index 7e2e89a..a4b6f73 100755 --- a/bin/cpe-queue.pl +++ b/bin/cpe-queue.pl @@ -14,110 +14,177 @@ use File::Slurp; my $debug = 1; my $protocol_dump = 0; my $list = 0; +my $introspect = 0; GetOptions( 'debug+' => \$debug, 'protocol-dump!' => \$protocol_dump, 'list!' => \$list, + 'introspect!' => \$introspect, ); -my $id = shift @ARGV || die "usage: $0 CPE_id [--protocol-dump]\n"; +die "usage: $0 [...queue/]CPE_id [ --list | --introspect | --protocol-dump ]\n" unless @ARGV; -$id =~ s!^.*queue/+!!; -$id =~ s!/+$!!; #! +foreach my $id ( @ARGV ) { -die "ID isn't valid: $id\n" unless $id =~ m/^\w+$/; + $id =~ s!^.*queue/+!!; + $id =~ s!/+$!!; #! -my $q = CWMP::Queue->new({ id => $id, debug => $debug }); + die "ID isn't valid: $id\n" unless $id =~ m/^\w+$/; + my $q = CWMP::Queue->new({ id => $id, debug => $debug }); -if ( $protocol_dump ) { - warn "generating dump of xml protocol with CPE\n"; + if ( $protocol_dump ) { - $q->enqueue( 'GetRPCMethods' ); + warn "generating dump of xml protocol with CPE\n"; - $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.DeviceInfo.SerialNumber', 0 ] ); - $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.DeviceInfo.', 1 ] ); + $q->enqueue( 'GetRPCMethods' ); - $q->enqueue( 'GetParameterValues', [ - 'InternetGatewayDevice.DeviceInfo.SerialNumber', - 'InternetGatewayDevice.DeviceInfo.VendorConfigFile.', - 'InternetGatewayDevice.DeviceInfo.X_000E50_Country', - ] ); - $q->enqueue( 'SetParameterValues', { - 'InternetGatewayDevice.DeviceInfo.ProvisioningCode' => 'test provision', -# 'InternetGatewayDevice.DeviceInfo.X_000E50_Country' => 1, - }); + $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.DeviceInfo.SerialNumber', 0 ] ); + $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.DeviceInfo.', 1 ] ); - $q->enqueue( 'Reboot' ); + $q->enqueue( 'GetParameterValues', [ + 'InternetGatewayDevice.DeviceInfo.SerialNumber', + 'InternetGatewayDevice.DeviceInfo.VendorConfigFile.', + 'InternetGatewayDevice.DeviceInfo.X_000E50_Country', + ] ); + $q->enqueue( 'SetParameterValues', { + 'InternetGatewayDevice.DeviceInfo.ProvisioningCode' => 'test provision', + # 'InternetGatewayDevice.DeviceInfo.X_000E50_Country' => 1, + }); -} - -if ( $list ) { - - warn "list all jobs for $id\n"; - - my @active = (); - my @queued = (); - my $hostname = $q->dq->gethostname(); - - sub wanted { - my ($visitcontext, $job) = @_; - - my $data = $job->get_data_path(); - my $nbytes = $job->get_data_size_bytes(); - my $timet = $job->get_time_submitted_secs(); - my $hname = $job->get_hostname_submitted(); - my $jobid = $job->{jobid}; - - my $text = sprintf ( - "%s (%d bytes)\n Submitted: %s on %s\n", - $jobid, $nbytes, scalar localtime $timet, $hname); + $q->enqueue( 'Reboot' ); - $text .= read_file( $data ) || die "can't open $data: $!"; + } - if ($job->{active_pid}) - { - if ($hostname eq $job->{active_host} - && !kill (0, $job->{active_pid})) - { - $text = sprintf ( - "(dead lockfile)\n %s", - $text); - } - else { - $text = sprintf ( - "(pid: %d\@%s)\n %s", - $job->{active_pid}, $job->{active_host}, $text); + if ( $list ) { + + warn "list all jobs for $id\n"; + + my @active = (); + my @queued = (); + my $hostname = $q->dq->gethostname(); + + sub wanted { + my ($visitcontext, $job) = @_; + + my $data = $job->get_data_path(); + my $nbytes = $job->get_data_size_bytes(); + my $timet = $job->get_time_submitted_secs(); + my $hname = $job->get_hostname_submitted(); + my $jobid = $job->{jobid}; + + my $text = sprintf ( + "%s (%d bytes)\n Submitted: %s on %s\n", + $jobid, $nbytes, scalar localtime $timet, $hname); + + $text .= read_file( $data ) || die "can't open $data: $!"; + + if ($job->{active_pid}) + { + if ($hostname eq $job->{active_host} + && !kill (0, $job->{active_pid})) + { + $text = sprintf ( + "(dead lockfile)\n %s", + $text); + } + else { + $text = sprintf ( + "(pid: %d\@%s)\n %s", + $job->{active_pid}, $job->{active_host}, $text); + } + + push (@active, $text); + } + else { + push (@queued, $text); + } + + $job->finish(); } - push (@active, $text); - } - else { - push (@queued, $text); - } + $q->dq->visit_all_jobs(\&wanted, undef); + printf "Jobs: active: %d queued: %d\n", + scalar @active, scalar @queued; + + print "Active jobs [", scalar @active, "]\n",join("\n\n", @active) if @active; + print "Queued jobs [", scalar @queued, "]\n",join("\n\n", @queued) if @queued; + + } elsif ( $introspect ) { + + $q->enqueue( 'GetRPCMethods' ); # XXX not supported by ZTE + + $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.', 1 ] ); + +# $q->enqueue( 'GetRPCMethods' ); # XXX not supported by ZTE + + $q->enqueue( 'GetParameterValues', [ + 'InternetGatewayDevice.', + ]); + + +# $q->enqueue( 'GetParameterNames', [ '.ExternalIPAddress', 1 ] ); + + $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.', 1 ] ); +# $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.DeviceInfo.', 1 ] ); +# $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.DeviceConfig.', 1 ] ); +# $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.ManagementServer.', 1 ] ); +# $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.Services.', 1 ] ); +# $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.LANDevice.', 1 ] ); + + $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.', 0 ] ); + $q->enqueue( 'GetParameterValues', [ + #'InternetGatewayDevice.', # too big for ZTE + 'InternetGatewayDevice.DeviceConfig.', + 'InternetGatewayDevice.DeviceInfo.', + 'InternetGatewayDevice.DeviceSummary', + 'InternetGatewayDevice.ManagementServer.', + ]); + + $q->enqueue( 'GetParameterValues' => [ $_ ] ) foreach ( qw/ +InternetGatewayDevice.IPPingDiagnostics. +InternetGatewayDevice.LANConfigSecurity. +InternetGatewayDevice.LANDevice. +InternetGatewayDevice.Layer2Bridging. +InternetGatewayDevice.Layer3Forwarding. +InternetGatewayDevice.ManagementServer. +InternetGatewayDevice.QueueManagement. +InternetGatewayDevice.Time. +InternetGatewayDevice.UserInterface. +InternetGatewayDevice.WANDevice. + / ); + + $q->enqueue( 'GetParameterAttributes', [ + 'InternetGatewayDevice.DeviceInfo.SerialNumber', + 'InternetGatewayDevice.DeviceInfo.SoftwareVersion', + ]); + +# $q->enqueue( 'SetParameterAttributes', [ ' + + } else { + + warn "injecting some tests commands\n"; + + # turn on periodic reporting to ACS server + +# $q->enqueue( 'GetParameterValues', [ 'InternetGatewayDevice.ManagementServer.' ] ); + $q->enqueue( 'SetParameterValues', { + 'InternetGatewayDevice.DeviceInfo.ProvisioningCode' => 'perl-cwmp provision', + } ); + $q->enqueue( 'SetParameterValues', { + 'InternetGatewayDevice.ManagementServer.PeriodicInformInterval' => 15, # s + } ); + $q->enqueue( 'SetParameterValues', { + 'InternetGatewayDevice.ManagementServer.PeriodicInformEnable' => 1, + } ); + + $q->enqueue( 'GetParameterValues', [ + 'InternetGatewayDevice.ManagementServer.', + 'InternetGatewayDevice.DeviceInfo.ProvisioningCode', + ] ); - $job->finish(); } - $q->dq->visit_all_jobs(\&wanted, undef); - printf "Jobs: active: %d queued: %d\n", - scalar @active, scalar @queued; - - print "Active jobs [", scalar @active, "]\n",join("\n\n", @active) if @active; - print "Queued jobs [", scalar @queued, "]\n",join("\n\n", @queued) if @queued; - -} else { - - warn "injecting some tests commands\n"; - -# $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.LANDevice.', 1 ] ); - -# $q->enqueue( 'GetParameterValues', [ -# 'InternetGatewayDevice.', -# ]); - -# $q->enqueue( 'GetParameterNames', [ '.ExternalIPAddress', 1 ] ); - $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.', 1 ] ); }