Two and a half years after my post Transferring objects with ObjectConnect and Enterprise Extender, I finally got around to trying out the “new” ObjectConnect over TCP/IP.

Configuring this version of ObjectConnect is easier than the “over Enterprise Extender” version. The only complication is configuring the SSL/TSL certificates to be accomplished with the Digital Certificate Manager.

Prerequisites

  • ObjectConnect installed on your IBM i systems (product id 5770SS1 – option 22)
  • operating system IBM i V7R4 (PTF SI73777 required) or higher.

Note. In IBM i V7R4 with PTF SI73777 (“add native TCP support to ObjectConnect CL commands”) ObjectConnect has been made compatible with TCP/IP (new *OBJC TCP/IP server) freeing it from Enterprise Extender.

Configuration

Roles:

  • Client: is the system where the SAVRSTxxx commands are executed (where the data are saved);
  • Server: is the system where the data saved on the client system is restored.

DCM@Server

On the Server system, it is necessary to assign the server certificate to the QIBM_QSVR_OBJC_SERVER application.

Let’s open a browser and connect to the DCM via the url http://<IBMi>:2001/dcm then open the system certificate store (*SYSTEM):

Look for QIBM_QSVR_OBJC applications and assign a server certificate to the QIBM_QSVR_OBJC_SERVER application.

From the command line, you can configure the Object Connect server with the command:

- CHGOBJCA

                      Change ObjectConnect Attrs (CHGOBJCA)                     
                                                                                
 Immettere le scelte e premere Invio.                                           
                                                                                
 Avvio automatico del server  . .   *YES          *SAME, *YES, *NO              
 Numero di lavori del server:                                                   
   Minimo . . . . . . . . . . . .   1             1-999, *SAME, *DFT            
   Massimo  . . . . . . . . . . .   5             1-32767, *SAME, *DFT          
 Tempific. inattività server  . .   30            1-1440, *SAME, *DFT           
 Descrizione sottosistema . . . .   QUSRWRK       Nome, *SAME, *DFT             
   Libreria . . . . . . . . . . .     QSYS        Nome                          
 Authentication type  . . . . . .   *ANY          *SAME, *ANY, *PASSWORD...     
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                          Fine  
 F3=Fine   F4=Richiesta   F5=Rivisualizzazione   F12=Annullamento               
 F13=Come usare lo schermo                       F24=Altri tasti                
                                                                                

Note. Leaving the type of authentication suggested by the command (*ANY) it is possible to authenticate both with user and password and via Kerberos (ADDKRBTKT).

Now let’s start the Object Connect server:

- STRTCPSVR SERVER(*OBJC)

Il lavoro 009333/QOBJC/QOBJCRCV è stato sottomesso alla coda lavori
  QUSRNOMAX nella libreria QSYS.
Si sta avviando il server OBJC.
Il lavoro 009333/QOBJC/QOBJCRCV è stato sottomesso alla coda lavori
  QUSRNOMAX nella libreria QSYS.
Si sta avviando il server OBJC.
ID messaggio . . . . . :   TCP1A0F       Gravità  . . . . . . . :   00
Tipo di messaggio  . . :   Completamento
Data invio . . . . . . :   24/04/24      Ora invio  . . . . . . :   13:17:10

Messaggio . . . :   Si sta avviando il server OBJC.

Note. Failure to associate a server certificate with the QIBM_QSVR_OBJC_SERVER application causes the error “CPDBC82: No certificate is available for TLS processing”:

ID messaggio . . . . . :   CPDBC82       Gravità  . . . . . . . :   10       
Tipo di messaggio  . . :   Diagnostica                                       
Data invio . . . . . . :   26/04/24      Ora invio  . . . . . . :   09:00:32 
                                                                             
Messaggio . . . :   Non è disponibile alcun certificato per l'elaborazione   
  TLS.                                                                       
Causa . . . . . :   Durante una procedura di riconoscimento TLS (Transport   
  Layer Security) non è disponibile per l'uso un certificato o una chiave    
  privata. Uno degli endpoint nella negoziazione TLS non aveva un certificato
  nel momento in cui era stato richiesto.                                    
Correzione . . . :   Se non c'è la chiave privata si deve usare il DCM       
  (Digital Certificate Manager) per generare una coppia di chiavi            
  pubblica/privata e quindi richiedere il certificato utilizzando la nuova   
  coppia di chiavi generate. Se viene omesso il certificato ed è richiesto da
  questo sistema operativo, è necessario configurare o fornire un certificato
  per l'applicazione abilitata TLS. La creazione, specifica e configurazione
  vengono effettuate utilizzando il DCM. Se il problema è causato dal fatto   
  che l'endpoint remoto non può fornire un certificato, si deve configurare,  
  per utilizzare un certificato, tale endpoint.Se si stanno usando le API     
  (Application Programming Interface) SSL_, SSL_Init() o                      
  SSL_Init_Application(), tali API vengono usate per istituire un certificato 
  e una chiave privata che sono utilizzate durante la procedura di            
  riconoscimento.  Deve essere eseguita, prima di qualsiasi uso di            
  SSL_Handshake(), una chiamata riuscita a SSL_Init() o                       
  SSL_Init_Application(). Se si stanno usando le API GSK, le API              
  gsk_attribute_set_buffer(GSK_KEYRING_FILE/GSK_KEYRING_PW) o                 
  gsk_attribute_set_buffer(GSK_IBMI_APPLICATION_ID) vengono usate per         
  istituire un certificato e una chiave privata che sono utilizzate durante la
  procedura di riconoscimento. Deve essere eseguita, prima di un qualsiasi uso
  di gsk_secure_soc_init(), una chiamata riuscita a                          
  successfulgsk_attribute_set_buffer(GSK_KEYRING_FILE/GSK_KEYRING_PW) o      
  gsk_attribute_set_buffer(GSK_IBMI_APPLICATION_ID). Se l'applicazione sta   
  usando l'API SSL_Init_Application o                                        
  gsk_attribute_set_buffer(GSK_IBMI_APPLICATION_ID), assicurarsi che il      
  certificato interessato sia stato associato all'applicazione usando il DCM 
  (Digital Certificate Manager) o l'API relativa all'applicazione di         
  registrazione per l'uso del certificato (OPM, QSYRGAP; ILE,                
  QsyRegisterAppForCertUse). Se l'applicazione sta utilizzando l'API SSL_Init
  o gsk_attribute_set_buffer(GSK_KEYRING_FILE), assicurarsi che la           
  memorizzazione certificato specificata sull'API contenga il certificato.   

Let’s check the activation of the server jobs:

- WRKACTJOB SBS(QUSRWRK) JOB(QOBJC*)

                    Utente                                                      
 Opz  Sottosis/Lav  corrente    Tipo  % CPU  Funzione        Stato              
        QOBJCRCV    QOBJC       BCH     0,0  PGM-QSVRRCV     SELW
        QOBJCSVR    QOBJC       BCI     0,0  PGM-QSVRSVR     TIMW

Note. The STRTCPSVR command starts the QOBJCRCV job, which starts the QOBJCSVR work:

 Lavoro . .: QOBJCRCV      Utente . . : QOBJC         Numero . . . . : 009333   
                                                                                
  >> CALL PGM(QSR/QSVRRCV)                                                      
     Job 009334/QOBJC/QOBJCSVR started.                                         

We also check the status of port 9841:

- NETSTAT OPTION(*CNN)

F15=Sottoinsieme

                        Sottoinsieme elenco connessioni                         
                                                                                
 Digitare le scelte e premere Invio.                                            
                                                                                
 Intervallo indirizzi internet locali:                                          
   Valore inferiore . . . . . .   *                 Indirizzo IP, *             
   Valore superiore . . . . . .   *ONLY             Indirizzo IP, *ONLY         
 Intervallo porta locale:                                                       
   Valore inferiore . . . . . .   9841              1-65535, *                  
   Valore superiore . . . . . .   *ONLY             1-65535, *ONLY              
                                                                                
 Intervallo indirizzi internet remoti:                                          
   Valore inferiore . . . . . .   *                 Indirizzo IP, *             
   Valore superiore . . . . . .   *ONLY             Indirizzo IP, *ONLY         
 Intervallo porta remota:                                                       
   Valore inferiore . . . . . .   *                 1-65535, *                  
   Valore superiore . . . . . .   *ONLY             1-65535, *ONLY              
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
 F3=Fine   F4=Richiesta   F9=Riga comandi   F12=Annull.                         
                                                                                
                        Sottoinsieme di connessioni IPv4                        
                                                            Sistema:   XXXXXXXX 
 Immettere le opzioni e premere Invio.                                          
   3=Abilitazione debug   4=Fine   5=Vis. dettagli   6=Disabilitazione debug    
   8=Visualizzazione lavori                                                     
                                                                                
      Ind.             Porta      Porta                                         
 Opz  remoto           rem        loc         T. inat.  Stato                   
  8   *                *          ObjectC >  000:05:51  In ascolto              
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                          Fine  
 F10=Vis. totali collegamento   F14=Vis. numeri porta      F15=Sottoinsieme     
 F17=Inizio elenco da           F22=Visual. campo intero   F24=Altri tasti      
                                                                                
                   Visualizzazione lavori tramite connessione                   
                                                            Sistema:   XXXXXXXX 
 Tipo di connessione  . . . . :   *TCP                                          
 Indirizzo locale . . . . . . :   *                                             
 Porta locale . . . . . . . . :   9841                                          
 Indirizzo remoto . . . . . . :   *                                             
 Porta remota . . . . . . . . :   *                                             
                                                                                
 Immettere le opzioni e premere Invio.                                          
   5=Gestione lavoro                                                            
                                                                                
                                                            Utente              
 Opz     Nome           Utente         Numero     Tipo      corrente            
         QOBJCRCV       QOBJC          009333     *BCH      QOBJC               
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                          Fine  
 F3=Fine   F5=Rivisualizzazione   F6=Stampa   F9=Riga comandi   F12=Annull.     
                                                                                
                                                                                

Now that the server is started we need to configure the ObjectConnect on the client side.

On the client system, using the Digital Certificate Manager (DCM), the certificates of the certification authorities (CAs) that issued the certificate assigned to the ObjectConnect server on the server system must be trusted for the QIBM_QSVR_OBJC_CLIENT client application.

DCM@Server

We must identify and export the certificates of the CA signing the server certificate associated with the QIBM_QSVR_OBJC_SERVER application and then import them onto the DCM of the client system and define them as trustworthy for the QIBM_QSVR_OBJC_CLIENT application:

The certificates exported in this way are exported to the directory /QIBM/UserData/ICSS/Cert/Download:

- WRKLNK OBJ('/QIBM/UserData/ICSS/Cert/Download/*')

                         Gestione collegamenti oggetto                          
                                                                                
 Indirizzario . . . :   /QIBM/UserData/ICSS/Cert/Download                       
                                                                                
 Immettere le opzioni e premere Invio.                                          
   2=Modifica         3=Copia   4=Rimozione   5=Visualizz.   7=Ridenom.         
   8=Attributi vis.   11=Modifica indirizzario corrente ...                     
                                                                                
 Opz.  Colleg. oggetto       Tipo            Attributo   Testo                  
       .                     DIR                                                
       ..                    DIR                                                
       CertAuth              DIR                                                
       Client                DIR                                                
       Txxxi-CA-Interm_16 >  STMF                                               
       Txxxi-CA_160505-36 >  STMF                                               
                                                                                
                                                                                
                                                                                
                                                                          Fine  
 Parametri o comando                                                            
 ===>                                                                           
 F3=Fine   F4=Richiesta   F5=Rivisualizzazione   F9=Duplicaz.   F12=Annull.     
 F17=Inizio elenco da     F22=Visualizzazione campo intero      F23=Altre opz.  
                                                                                

The newly exported certificates (in pem format) must be imported into the DCM of the Client system (this phase is not documented as it is similar to the export one just described).

Nota. All signatory certificates of the server certificate must be trusted for the QIBM_QSVR_OBJC_CLIENT application otherwise running a SAVRSTxxx command will end with the following error messages:

ID messaggio . . . . . :   CPDBC97       Gravità  . . . . . . . :   10        
Tipo di messaggio  . . :   Diagnostica                                        
Data invio . . . . . . :   26/04/24      Ora invio  . . . . . . :   13:34:16  
                                                                              
Messaggio . . . :   Il certificato non è firmato da una autorità di           
  certificazione affidabile.                                                  
Causa. . . . . :   L'Autorità di Certificazione che ha firmato il certificato 
  non è presente, su questo sistema, come Autorità di Certificazione (AC)     
  affidabile. Se questo errore si verifica durante l'inizializzazione         
  significa che il certificato fornito localmente non è firmato da una AC     
  affidabile. Se questo errore avviene durante la procedura di riconoscimento 
  SSL, il certificato di sistema da almeno uno degli endpoint non è firmato da
  una AC affidabile.                                                          
Correzione . . . :   Aggiungere l'Autorità di Certificazione all'elenco delle 
  AC affidabili su ambedue gli endpoint oppure ottenere un certificato che è  
  firmato da una AC affidabile ed associarlo con il certificato di sistema    
   dell'applicazione voluto.  Per creare o modificare i certificati e per      
   gestirne le autorità può essere usato il DCM (Digital Certificate Manager). 
   Se l'applicazione sta usando l'API (Application Programming Interface)      
   SSL_Init_Application o gsk_attribute_set_buffer(GSK_IBMI_APPLICATION_ID),   
   assicurarsi che il certificato interessato sia stato associato              
   all'applicazione usando il DCM (Digital Certificate Manager) o l'API        
   relativa all'applicazione di registrazione per l'uso del certificato (OPM,  
   QSYRGAP; ILE, QsyRegisterAppForCertUse). Se l'applicazione sta utilizzando  
   l'API SSL_Init o gsk_attribute_set_buffer(GSK_KEYRING_FILE), assicurarsi che
   la memorizzazione certificato specificata sull'API contenga il certificato.
ID messaggio . . . . . :   CPDCB02       Gravità  . . . . . . . :   30      
Tipo di messaggio  . . :   Diagnostica                                      
Data invio . . . . . . :   26/04/24      Ora invio  . . . . . . :   13:34:16
                                                                            
Messaggio . . . :   Failed to authenticate with ObjectConnect server.       
Cause . . . . . :   Failed to authenticate with ObjectConnect server because
  of reason 04. Reason codes and their meanings are:                        
    01 - Authentication type is not supported on ObjectConnect server.      
    02 - The user profile and password is rejected by ObjectConnect server. 
    03 - Unexpected failure occurs in ObjectConnect server.                 
    04 - Unexpected failure occurs in ObjectConnect client.                 
Recovery  . . . :   Based on the reason code, do one of the followings:     
    01 - Specify supported authentication type, or change the allowed       
  authentication type on server side using CHGOBJCA.                        
    02 - Provide correct user profile and password and try again.           
    03 - Consult system administrator to check the job log on server system
  for error messages that may have been issued. Correct the problem and try   
  the request again. If the problem occurs again or there are no previous     
  messages, report the problem using the Analyze Problem (ANZPRB) CL command. 
    04 - Check the job log for error messages that may have been issued prior 
  to this one. Correct the problem and try the request again. If the problem  
  occurs again or there are no previous messages, report the problem using the
  Analyze Problem (ANZPRB) CL command.                                        
ID messaggio . . . . . :   CPDCB0A       Gravità  . . . . . . . :   30      
Tipo di messaggio  . . :   Uscita                                           
Data invio . . . . . . :   26/04/24      Ora invio  . . . . . . :   13:34:16
                                                                            
Messaggio . . . :   Error occurred during the SAVRSTOBJ operation.          
Recovery  . . . :   See the messages listed previously. Address the problem 
  and try again. If the problem continues to occur, report the problem using
  the Analyze Problem (ANZPRB) CL command.                                  

DCM@Client:

The ObjectConnect over TCP/IP configuration is complete!

Let’s try this by saving an object on the client system and restoring it on the server system. On the client system we execute the following command:

- SAVRSTOBJ OBJ(Obj) LIB(Lib) RMTLOCNAME('Server_IP_or_HostName') CNNTYPE(*IP) RMTUSER(Server_User) RMTPWD(Server_User_Password) OBJTYPE(*FILE)

CPC3722: 1 oggetti salvati dalla libreria XXXTEMP.
I seguenti messaggi derivano dall'ubicazione remota XXXXXXXX.
1 oggetti ripristinati da XXXTEMP a XXXTEMP.
1 oggetti salvati e ripristinati.
ID messaggio . . . . . :   CPC3722       Gravità  . . . . . . . :   00      
Tipo di messaggio  . . :   Completamento                                    
Data invio . . . . . . :   24/04/24      Ora invio  . . . . . . :   18:46:14
                                                                            
Messaggio . . . :   1 oggetti salvati dalla libreria XXXTEMP.               
Causa . . . . . :                                                           
    -- 1 oggetti salvati.                                                   
    -- 0 file di spool salvati.                                             
    I dati sono stati salvati dalla libreria XXXTEMP al file di salvataggio 
  QSVRSF3EB4 su QTEMP in 24/04/24 18:46:14. Se è stato specificato          
  UPDHST(*YES), le informazioni cronologiche riguardanti il salvataggio e il
  ripristino sono state aggiornate per ogni oggetto salvato.                
ID messaggio . . . . . :   CPFAD87       Gravità  . . . . . . . :   10      
Tipo di messaggio  . . :   Informazioni                                     
Data invio . . . . . . :   24/04/24      Ora invio  . . . . . . :   18:46:14
                                                                            
Messaggio . . . :   I seguenti messaggi derivano dall'ubicazione remota     
  XXXXXXXX.                                                                 
Causa. . . . . :  Per ulteriori informazioni e messaggi relativi            
  all'operazione di ripristino, consultare il lavoro di ripristino          
  009373/QOBJC/QOBJCSVR avviato sull'ubicazione remota XXXXXXXX nel         
  sottosistema QUSRWRK.                                                     
ID messaggio . . . . . :   CPC3703       Gravità  . . . . . . . :   00      
Tipo di messaggio  . . :   Completamento                                    
Data invio . . . . . . :   24/04/24      Ora invio  . . . . . . :   18:46:14
                                                                            
Messaggio . . . :   1 oggetti ripristinati da XXXTEMP a XXXTEMP.            
Causa . . . . . :                                                           
    -- 1 oggetti ripristinati.                                              
    -- 0 file di spool ripristinati.                                        
    I dati sono stati ripristinati dalla libreria XXXTEMP salvata alla      
  libreria XXXTEMP in 24/04/24 18:46:13. Sono stati ripristinati oggetti dal
  file di salvataggio QSVRSF00F8 nella libreria QTEMP.                      
ID messaggio . . . . . :   CPCAD80       Gravità  . . . . . . . :   30        
Tipo di messaggio  . . :   Completamento                                      
Data invio . . . . . . :   24/04/24      Ora invio  . . . . . . :   18:46:14  
                                                                              
Messaggio . . . :   1 oggetti salvati e ripristinati.                         
Causa . . . . . :   Sono stati salvati e ripristinati 1 oggetti. Per ulteriori
  informazioni, consultare i messaggi precedenti nella registrazione del      
  lavoro.                                                                     

It works!

Communication protocol

Let’s see if we can understand how communication between the two systems works to configure firewalls between the server and client systems.

The communication protocol implemented for ObjectConnect over TCP/IP seems similar to passive-type FTP.

The client opens a socket on a high port and contacts the server on port 9841.

On these ports there is an initial exchange of information necessary for:

  • Establish an encrypted connection:
    • TLSv1.x Record Layer: Handshake Protocol: Client Hello
    • TLSv1.x Record Layer: Handshake Protocol: Multiple Handshake Messages
    • LSv1.x Record Layer: Handshake Protocol: Client Key Exchange
    • TLSv1.x Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
  • Client authentication on the server

Once this preliminary phase is completed, the server opens a new socket on a so-called “ephemeral port” (any TCP/IP port greater than 1023), listens, and communicates it to the client.

When the client receives the new port, it opens a second socket on another high port and uses it to contact the server on its new port. The data saved on the client to be restored on the server will pass over this new connection.

Once the restore on the server has been completed, this last connection is closed and the server communicates the restore result on the first connection, after which this connection is also closed and the process ends.

You can observe what has just been described by checking the files /QIBM/UserData/OS400/OBJC/LOG on both systems and, if you really feel like it, activating a Communication Trace (TRCCNN) on client system perhaps importing the output to WireShark in this way:

- TRCCNN SET(*ON) TRCTYPE(*IP) TRCFULL(*STOPTRC) TRCTBL(OBJCTCPIP) SIZE(256 *MB) TCPDTA(*N () ()  *N 'Server_IP_or_HostName')

- SAVRSTOBJ OBJ(Obj) LIB(Lib) RMTLOCNAME('Server_IP_or_HostName') CNNTYPE(*IP) RMTUSER(Server_User) RMTPWD(Server_User_Password) OBJTYPE(*FILE)

- TRCCNN SET(*OFF) TRCTBL(OBJCTCPIP) OUTPUT(*STMF) TOSTMF('/tmp/OBJCTCPIP.pcap' *YES)

Conclusions

Con l’ObjectConnect over TCP/IP IBM ha completato il percorso di separazione tra il prodotto ed il protocollo SNA (lo step precedente richiedeva la configurazione dell’Enterprise Extender with High Performance Routing (HPR), or Virtual OptiConnect) con conseguente drastica semplificazione della configurazione necessaria al suo utilizzo. Per azzerarla del tutto, avrebbe potuto lasciare all’utente la decisione se usare o meno i certificati SSL/TSL (e, quindi, il DCM…) ma così non è stato.

Appendix

Below are two excerpts from the log file /QIBM/UserData/OS400/OBJC/LOGclient-side and server-side of a successfully terminated SAVRSTxxx command.

Client system:

qsvrSavRstObjCpp-main qsvrLog setup level-3;handler:0
doSaveObject   Objects in library - XXXTEMP will be saved.
qsvrSocket::establishConnection connect-1 listenerPort-9841
qsvrSocket::establishConnection connect - success, rc=0
qsvrSocket::establishConnection connection established - local ip: ::ffff:192.168.X.Y:13383; remote ip: ::ffff:10.XX.YY.ZZ:9841
qsvrSocket::isRdma socket type - 0
qsvrSocket::isRdma socket type - 0
qsvrAuthentication-processClientAuthentication ---> Start to send auth data: USRPRF
qsvrspi-QsvrSaveObject-General qsvrLog reset level-3;handler:0
qsvrspi-QsvrSaveObject-General enter
qsvrSocket::isRdma socket type - 0
qsvrSocket::getSendBufferSize callerSendBufferSize-65535
qsvrspi-QsvrSaveObject-General callerSendBufferSize-65535
qsvrspi-sendRestoreKeys send restore keys
qsvrspi-sendData save communication content set to 0x40000003 using local content-0x40000003 and remote content-0x40000003
qsvrspi-sendRestoreKeys send success
qsvrspi-createSaveFile saveFileName-QTEMP/QSVRSF3EB4
qsvrspi-receiveListenerPort receive listenerPort
qsvrspi-receiveListenerPort listenerPort-24135
qsvrspi-receiveListenerPort restoreSystem-XXXXXXXX restoreJob-009373/QOBJC/QOBJCSVR restoreThread-000000F8
qsvrSpiSocket::establishConnection bind - success, rc=0
qsvrSpiSocket::establishConnection setsockopt - success, rc=0
qsvrSpiSocket::establishConnection setsockopt - success, rc=0
qsvrSocket::establishConnection create socket - - success, rc=2
qsvrSocket::establishConnection connect-2 listenerPort-24135
qsvrSocket::establishConnection connect - success, rc=0
qsvrSavf::getLdSysPtr LUD pointer - 0x000000000000000008A70D49B6001300 (16 bytes)
qsvrcqm-startIOM enter, dumpSpcPtr - 0x000000000000000008A70D49B6001300 (16 bytes)
qsvrcqm-startIOM _OBCOP
qsvrcqm-startIOM _OBCOP - success, rc=0
qsvrspi-callSave doSave
qsvrspi-callSave doSave - success
qsvrspi-setSaveCountsFromLastMessage QSRSAVOSPI CPC3722 saved-1 notSaved-0
qsvrSavf::getLdSysPtr LUD pointer - 0x000000000000000008A70D49B6001300 (16 bytes)
qsvrcqm-stopIOM enter, dumpSpcPtr - 0x000000000000000008A70D49B6001300 (16 bytes)
qsvrcqm-stopIOM _OBCOP
qsvrcqm-stopIOM _OBCOP - success, rc=0
qsvrSocket::closeConnection close socket -2 ld socket
qsvrspi-receiveRestoreResults receive restore results
qsvrspi-receiveRestoreResults restore success, restored-1
qsvrspi-QsvrSaveObject-General save & restore result: 1;1
qsvrspi-QsvrSaveObject-General save & restore result: 1;1
qsvrspi-QsvrSaveObject-General     objectsSaved - 1
qsvrspi-QsvrSaveObject-General     objectsNotSaved - 0
qsvrspi-QsvrSaveObject-General     spooledFilesSaved - 0
qsvrspi-QsvrSaveObject-General     spooledFilesNotSaved - 0
qsvrspi-QsvrSaveObject-General     objectsRestored - 1
qsvrspi-QsvrSaveObject-General     objectsNotRestored - 0
qsvrspi-QsvrSaveObject-General     spooledFilesRestored - 0
qsvrspi-QsvrSaveObject-General     spooledFilesNotRestored - 0
qsvrspi-sendCPCAD80 operation success message: CPCAD80 - 1 oggetti salvati e ripristinati.
qsvrspi-qsvrSpiCleanup delete saveFile-QTEMP/QSVRSF3EB4
qsvrspi-qsvrSpiCleanup delete restoreJobLogBuffer
qsvrspi-QsvrSaveObject-General exit
qsvrSpiKeys::ìqsvrSpiKeys qsvrLog setup level-3;handler:1
qsvrSpiKeys::ìqsvrSpiKeys ****** cleanup logging - level 3;handler:1 ******
qsvrObjCnnKeys::ìqsvrObjCnnKeys qsvrLog setup level-3;handler:1
qsvrObjCnnKeys::ìqsvrObjCnnKeys ****** cleanup logging - level 3;handler:1 ******
qsvrSavRstObjCpp-main ****** cleanup logging - level 3;handler:0 ******

Server system:

qsvrReceiver-servermain accept-2
qsvrReceiver-servermain create socket - workerSd - 1
qsvrJobCluster::dispatchWork job number status update: current-2,idle-1,busy-1,ending-0,min-1,max-5
qsvrServer-main Get works - CMD-WORK    ,sd=2
qsvrServer-main a connection is received, peer side:::ffff:192.168.X.Y:13383
qsvrSocket::isRdma socket type - 0
qsvrSocket::isRdma socket type - 0
qsvrServerAuthentication-processServerAuthentication ---> End to send server hello, rc=0
qsvrServerAuthentication-processServerAuthentication ---> Start to recv auth data.
qsvrServerAuthentication-processServerAuthentication ---> Auth data:USRPRF
qsvrServerAuthentication-processServerAuthentication validate the user profile, user=USRPRF
qsvrServerAuthentication-processServerAuthentication ---> Start to send auth response data: 0
qsvrServerAuthentication-processServerAuthentication ---> End to send auth response data.
qsvrServer-main Authentication done .
qsvrServer-main Received the GetMaxSvr request .
doRestore call QsvrRestoreObject, function:11; sd=2
qsvrspi-QsvrRestoreObject-General qsvrLog reset level-3;handler:1
qsvrspi-QsvrRestoreObject-General enter
qsvrSocket::isRdma socket type - 0
qsvrSocket::getSendBufferSize callerSendBufferSize-8388608
qsvrspi-QsvrRestoreObject-General callerSendBufferSize-8388608
qsvrspi-receiveRestoreKeys receive restore keys
qsvrspi-receiveRestoreKeys numberOfKeys-7
qsvrspi-receiveRestoreKeys saveSystem-XXXCLI06 saveJob-633320/USRPRF/DEVICENAME saveThread-00023EB4
qsvrspi-createSaveFile saveFileName-QTEMP/QSVRSF00F8
qsvrspi-createSaveFile SAVOBJ
qsvrspi-createSaveFile SAVOBJ success
createListener setsockopt - success, rc=39
createListener setsockopt - success, rc=39
qsvrSocket::createListener socket listenerSocket
qsvrSocket::createListener listenerSocket-3
qsvrSocket::createListener bind-3
qsvrSocket::createListener bind - success, rc=0
qsvrSocket::createListener getsockname-3 listenerPort
qsvrSocket::createListener listenerPort-24135
qsvrSocket::createListener listen-3
qsvrSocket::createListener listen - success, rc=0
qsvrspi-sendListenerPort send listenerPort
qsvrspi-sendListenerPort send success
qsvrSocket::acceptConnectRequest accept-3
qsvrSocket::acceptConnectRequest ldSd-4
qsvrSavf::getLdSysPtr LUD pointer - 0x00000000000000000787EFE6D4001300 (16 bytes)
qsvrcqm-startIOM enter, dumpSpcPtr - 0x00000000000000000787EFE6D4001300 (16 bytes)
qsvrcqm-startIOM _OBCOP
qsvrcqm-startIOM _OBCOP - success, rc=0
qsvrspi-callRestore doRestore
qsvrspi-callRestore doRestore - success
qsvrspi-setRestoreCountsFromLastMessage QSRRSTOSPI CPC3703 restored-1 notRestored-0
qsvrSavf::getLdSysPtr LUD pointer - 0x00000000000000000787EFE6D4001300 (16 bytes)
qsvrcqm-stopIOM enter, dumpSpcPtr - 0x00000000000000000787EFE6D4001300 (16 bytes)
qsvrcqm-stopIOM _OBCOP
qsvrcqm-stopIOM _OBCOP - success, rc=0
qsvrSocket::closeConnection close socket -3 listener socket
qsvrSocket::closeConnection close socket -4 ld socket
qsvrspi-sendRestoreResults send restore results
qsvrspi-sendRestoreResults send success
qsvrspi-QsvrRestoreObject-General restore result: 1
qsvrspi-QsvrRestoreObject-General     objectsRestored - 1
qsvrspi-QsvrRestoreObject-General     objectsNotRestored - 0
qsvrspi-QsvrRestoreObject-General     spooledFilesRestored - 0
qsvrspi-QsvrRestoreObject-General     spooledFilesRestored - 0
qsvrspi-QsvrRestoreObject-General     spooledFilesNotRestored - 0
qsvrspi-qsvrSpiCleanup delete dataArea-QTEMP/QSVRDA00F8
qsvrspi-qsvrSpiCleanup delete saveFile-QTEMP/QSVRSF00F8
qsvrspi-qsvrSpiCleanup delete restoreJobLogBuffer
qsvrspi-QsvrRestoreObject-General exit
doRestore call QsvrRestoreObject succeed.
qsvrServer-main This worker connection is done.
qsvrServer-main This worker connection is done.
refresh log file size qsvrLog reset level-3;handler:1
qsvrJobCluster::jobCompleted completed job - QOBJCSVR  QOBJC     009373
qsvrReceiver-servermain Work job completed.
qsvrJobCluster::endOneIdleJob moved to ending queue of job - QOBJCSVR  QOBJC     009395
qsvrServerCleanup-ìqsvrServerCleanup exit.
qsvrServer-main ****** cleanup logging - level 3;handler:1 ******
qsvrReceiver-servermain Idle for a long time, end one job.
qsvrJobCluster::jobEnded ended job - QOBJCSVR  QOBJC     009395
qsvrReceiver-servermain Worker job exited.

References

https://www.ibm.com/support/pages/objectconnect-over-tcpip

https://www.ibm.com/support/pages/objectconnect-over-tcpip

https://www.volubis.fr/news/liens/courshtm/V7.4/ObjectConnect.html

https://www.ibm.com/support/pages/trccnn-instructions-generate-pcap-communication-trace

Related Posts
DB2 for i SQL – String Manipulation – POSSTR-LOCATE-LOCATE_IN_STRING (EN)

Introduction Often, in our applications, we need to work with text strings, and DB2 SQL can come in very useful Read more

DB2 for i – FAQ & Howtos (EN)

DB2 Database and SQL ... maybe the most important things on IBM i platform: here's a collection of FAQs, tips Read more

IBM i 7.4 Announcement (En)

Comes directly with the Easter egg this IBM announcement for the news of the IBM i 7.4 version, iNext version Read more

Generated Always Columns (EN)

Introduction "Generated Always Column": are columns, table fields, filled by DB2 engine: something like columns with a default value but Read more

About author

IBM i System Administrator

Leave a Reply

Your email address will not be published. Required fields are marked *