Comment faire un ping en boucle sur votre IBMi ?

Sans être un expert réseau on a parfois besoin de surveiller périodiquement des accès à notre partition
(suite à des migrations, des pb réseaux etc …)

Ce poste vous explique comment suivre ces problèmes.

1) Créer un fichier de log

CREATE TABLE VOTREBIB.PINGLOG (
PRESULT CHAR(10) CCSID 1147 NOT NULL DEFAULT  » ,
ADRESIP CHAR(20) CCSID 1147 NOT NULL DEFAULT  » ,
PDATE DATE NOT NULL DEFAULT CURRENT_DATE ,
PHEURE TIME NOT NULL DEFAULT CURRENT_TIME )

2) Créer un programme qui écrit dans ce fichier

/* +
Ping en boucle et capture le résultat dans le fichier LOG

p_IP : IP sur laquelle effectuer le ping
p_delai : délai en seconde entre chaque ping

*/

PGM PARM( &P_IP &P_DELAI)

/* Paramètres / DCL VAR(&P_IP) TYPE(CHAR) LEN(15)
DCL VAR(&P_DELAI) TYPE(*DEC) LEN(5)

/* Variables / DCL VAR(&L_SQL) TYPE(CHAR) LEN(1300)
DCL VAR(&L_ERR) TYPE(LGL) / Cote */
DCL &L_COTE *CHAR 1 VALUE( » »)

/* Corps */

LOOP: /* Boucle principale */

/* Ping /

CHGVAR &L_ERR VALUE(‘0’)

PING RMTSYS(&P_IP) MSGMODE(QUIET ESCAPE)

MONMSG MSGID(TCP0000)

EXEC(DO)

CHGVAR &L_ERR VALUE(‘1’)

ENDDO /* Log* /

IF COND( &L_ERR = ‘0’ ) THEN(DO)

        
   /* values( 'PING', 'OK', '8.8.8.8' )                 */         
          CHGVAR     VAR(&L_SQL) VALUE('insert into pinglog +      
                       values( ''OK'', ''' *TCAT &P_IP *TCAT ''' + 
                       , current date, current time   )')          
ENDDO                                                              
ELSE       CMD(DO)                                                 
          CHGVAR     VAR(&L_SQL) VALUE('insert into pinglog +      
                       values( ''KO'', ''' *TCAT &P_IP *TCAT ''' + 
                       , current date, current time   )')          
ENDDO                                                              
/* Logger le binz */                                               
RUNSQL     SQL(&L_SQL) COMMIT(*NONE)                               

/* Continuer */                                            
 IF         COND( &P_DELAI > 0 ) THEN(DLYJOB &P_DELAI)       
DLYJOB &P_DELAI        
GOTO       LOOP                                             ENDLOOP:       

ENDPGM

ce programme va loguer toutes les n secondes

3) Il est conseiller d’associer une commande


CMD PROMPT(‘trace ping’)
PARM KWD(IPADR) TYPE(CHAR) LEN(50) + PROMPT(‘Adresse ip’)

PARM KWD(DELAY) TYPE(DEC) LEN(5) DFT(15) MIN(0) +
PROMPT(‘Delai en secondes’)

Conseils :


Entre 15 et 30 secondes semble être le bon compromis !
Si vous voulez savoir ou est le problème vous devez tester les éléments discriminants,
d’abord sur votre réseau local, ensuite sur le wan, et puis le lan distant, par exemple.


Attention certain équipements ne répondent au trames ICMP