X-Git-Url: http://git.rot13.org/?p=perl-cwmp.git;a=blobdiff_plain;f=bin%2Fcpe-queue.pl;h=a4b6f73175ffd7d72b20eb0b80cd6aa7b3342175;hp=2135884454c5dab16301870ae907ca6501913096;hb=154531e14a8fdafceb312dc3eec3eff1ed5676a9;hpb=fec1acf5d1dfce1a661535d2b40b0e9d97de6005 diff --git a/bin/cpe-queue.pl b/bin/cpe-queue.pl index 2135884..a4b6f73 100755 --- a/bin/cpe-queue.pl +++ b/bin/cpe-queue.pl @@ -9,45 +9,182 @@ use strict; use lib './lib'; use CWMP::Queue; use Getopt::Long; +use File::Slurp; -my $debug = 0; -my $protocol_dump = 1; +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+$/; -if ( $protocol_dump ) { + my $q = CWMP::Queue->new({ id => $id, debug => $debug }); - warn "generating dump of xml protocol with CPE\n"; - $q->enqueue( 'GetRPCMethods' ); - $q->enqueue( 'GetParameterNames' ); + if ( $protocol_dump ) { -# $q->enqueue( 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 0 ); -# $q->enqueue( 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.', 1 ); + warn "generating dump of xml protocol with CPE\n"; - $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( 'GetRPCMethods' ); -# $q->enqueue( 'Reboot' ); + $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.DeviceInfo.SerialNumber', 0 ] ); + $q->enqueue( 'GetParameterNames', [ 'InternetGatewayDevice.DeviceInfo.', 1 ] ); -} + $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( 'Reboot' ); + + } + + 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(); + } + + $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', + ] ); + + } + +}