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.
Index
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