Merge branch 'master' of github.com:dpavlin/perl-cwmp
[perl-cwmp.git] / bin / cpe-queue.pl
index f991aee..a4b6f73 100755 (executable)
@@ -14,112 +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' );
-       $q->enqueue( 'GetParameterNames' );
+               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( 'SetParameterValues', { '.ExternalIPAddress' => '192.168.1.250' });
-       $q->enqueue( 'GetParameterNames', [ '.ExternalIPAddress', 1 ] );
 }