A distanza di due anni e mezzo dal mio post Trasferire oggetti con ObjectConnect ed Enterprise Extender, sono finalmente riuscito a provare il “nuovo” ObjectConnect over TCP/IP.
La configurazione di questa versione di ObjectConnect risulta più semplice rispetto alla versione “over Enterprise Extender”. L’unica complicazione è la configurazione dei certificati SSL/TSL da realizzaris con il Digital Certificate Manager.
Index
Prerequisiti
- ObjectConnect installato sui propri sistemi IBM i (product id 5770SS1 – option 22)
- sistema operativo IBM i V7R4 (con la PTF SI73777) o superiore.
Nota. In IBM i V7R4 con PTF SI73777 (“aggiunta del supporto TCP nativo ai comandi CL di ObjectConnect”) ObjectConnect è stato reso compatibile con TCP/IP (nuovo server TCP/IP *OBJC) liberandolo da Enterprise Extender.
Configurazione
Ruoli:
- Client: è il sistema dove vengono eseguiti i comandi SAVRSTxxx (dove vengono salvati i dati);
- Server: è il sistema dove viene eseguito il ripristino dei dati salvati sul sistema client.
DCM@Server
Sul sistema Server è necessario assegnare il certificato del server all’applicazione QIBM_QSVR_OBJC_SERVER.
Apriamo un browser e colleghiamoci al DCM tramite l’url http://<IBMi>:2001/dcm quindi apriamo il certificate store di sistema (*SYSTEM):
Cerchiamo le applicazioni QIBM_QSVR_OBJC e assegniamo un certificato di tipo server all’applicazione QIBM_QSVR_OBJC_SERVER
Da riga comandi, configuriamo il server Object Connect con il comando:
- 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
Nota. Lasciando il tipo di autenticazione proposta dal comando (*ANY) è possibile autenticarsi sia con user e password che tramite Kerberos (ADDKRBTKT).
A questo punto, avviamo il server Object Connect:
- 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.
Nota. La mancata associazione di un server certificate all’applicazione QIBM_QSVR_OBJC_SERVER provoca l’errore “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.
Verifichiamo l’attivazione dei lavori server:
- 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
Nota. Il comando STRTCPSVR avvia il lavoro QOBJCRCV che, a sua volta, avvia il lavoro QOBJCSVR:
Lavoro . .: QOBJCRCV Utente . . : QOBJC Numero . . . . : 009333
>> CALL PGM(QSR/QSVRRCV)
Job 009334/QOBJC/QOBJCSVR started.
Verifichiamo, inoltre, lo stato della porta 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.
Ora che il server è avviato dobbiamo configurare l’ObjectConnect lato client.
Sul sistema client, utilizzando il Digital Certificate Manager (DCM), è necessario definire come affidabili per l’applicazione client QIBM_QSVR_OBJC_CLIENT i certificati delle autorità di certificazione (CA) che hanno emesso il certificato assegnato al server ObjectConnect sul sistema server.
DCM@Server
Identifichiamo ed esportiamo i certificati della CA firmatarie del certificato server associato all’applicazione QIBM_QSVR_OBJC_SERVER per poi importarli sul DCM del sistema client e definirle affidabili all’applicazione QIBM_QSVR_OBJC_CLIENT:
I certificati, così esportati, vengono esportati nella 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.
I certificati appena esportati (in formato pem) devono essere importati nel DCM del sistema Client (questa fase non viene documentata in quanto simile a quella si esportazione appena descritta).
Nota. È necessario definire affidabili per l’applicazione QIBM_QSVR_OBJC_CLIENT tutti i certificati firmatari del certificato server altrimenti l’esecuzione di un comando SAVRSTxxx terminerebbe con i seguento messaggi d’errore:
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:
La configurazione dell’ObjectConnect over TCP/IP è terminata!
Proviamolo salvando un oggetto sul sistema client e ripristinandolo sul sistema server. Sul sistema client eseguiamo il seguente comando:
- 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.
Funziona!
Protocollo di comunicazione
Vediamo se riusciamo a capire come funziona la comunicazione tra i due sistemi per sapere come configurare eventuali firewall esistenti tra i sistemi server e client.
Il protocollo di comunicazione implementato per l’ObjectConnect over TCP/IP sembra simile a quello utilizzato dall’FTP di tipo passivo.
Il client apre un socket su di una porta alta e contatta il server sulla porta 9841.
Su queste porte avviene un primo scambio di informazioni necessarie per:
- instaurare una connessione criptata:
- 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
- autenticarsi del client sul server
Terminata questa fase preliminare, il server apre un nuovo socket su di una così detta “ephemeral port” (una qualsiasi porta TCP/IP maggiore di 1023), ci si mette in ascolto e la comunica al client.
Quando il client riceve la nuova porta, apre un secondo socket su di un’altra porta alta e la usa per contattare il server sulla sua nuova porta. Su questa nuova connessione passeranno i dati salvati sul client da ripristinare sul server.
Terminato il ripristino sul server, quest’ultima connessione viene chiusa e il server comunica l’esito del restore sulla prima connessione dopodiché anche questa connessione viene chiusa e il processo termina.
Potete osservare quanto appena descritto, controllando i file /QIBM/UserData/OS400/OBJC/LOG su entrambi i sistemi e, se proprio avete voglia, attivando una Communication Trace (TRCCNN) sul sistema Client magari importando l’output su WireShark in questo modo:
- 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)
Conclusioni
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.
Appendice
Sotto due estratti dal file di log /QIBM/UserData/OS400/OBJC/LOG lato client e lato server di una comando SAVRSTxxx terminato correttamente.
Sistema client:
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 ******
Sistema server:
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.
Riferimenti
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