<<< DISK$DATA:[NOTES$LIBRARY]RESEAUX.NOTE;1 >>> -< SIG Réseaux >- ================================================================================ Note 81.0 La suite de 79.* 8 replies DECUSF::OURGHANLIA_B "Bernard, VMS/VAXClusters" 95 lines 8-SEP-1988 08:29 -------------------------------------------------------------------------------- A la suite de la question posee en 79.0 (dite question facile...) je me suis reveille apres une longue nuit d'insomnie avec 2 solutions supplementaires au probleme pose, l'une elegante mais non supportee utilisant des QIOs ACP non supportes en direction de NETACP, l'autre moins elegante mais documentee evitant l'overhead considerable de la creation d'un process remote. L'idee est tres simple, il suffit d'utiliser un objet non defini sur votre reseau et de tenter une connection remote sur cet objet. Si le noeud sur lequel vous voulez etablir la connection n'est pas reachable, ce sera le status qui vous sera renvoye; si le noeud est reachable, vous obtiendrez un status du type "no such object" qu'il suffit de transformer en un status de succes...Enfantin, non... L'interet d'utiliser un objet non existant (ici l'objet 1 qui est obsolete bien que reserve a Digital) est que l'etablissement du lien ne conduira qu'au reveil de NETACP remote (au travers d'une interruption de NETDRIVER), ce qui est accceptable...NETACP ne creera jamais de process puisque l'objet n'existe pas... Les sources du petit bricolage sont incluses apres "===". Il vous suffit ensuite d'utiliser le programme de la facon suivante: $ Reachable :=$Sys$Disk:[]Reachable $ Reachable 'Node' $ If .Not. $STATUS Then Goto Not_Reachable $ ... $ Not_Reachable: ============================================================================ .IDENT "V1.0" ;++ ; Facility: ; Program to probe reachability of a remote node. ; ; (Note: this is a prime example of the kind of program ; which will break with long nodenames in Phase V!) ; ; Given to DECUS to replace non supported NICE/NETACP QIOs ; ; Author: ; ; Creation Date: 7-SEP-1988 ; ; Modification History: ;-- .PSECT DATA,WRT,NOEXE NODE_TEXT: .BLKB 6 ; Buffer to receive node name NET_CHANNEL: .BLKW 1 ; Channel for network assign failure NODE_DESC: .LONG 6,NODE_TEXT ; Descriptor for node name NODE_WORK: .LONG 6,NODE_TEXT ; PROMPT: .ASCID "_Nodename: " ; Prompt text for LIB$GET_FOREIGN NCB_DESC: .LONG 0,0 ; Network Connect Block descriptor NCB_TEXT: .ASCII '123456""::"1="' ; Template NCB NCB_LENGTH = .-NCB_TEXT .PSECT CODE,NOWRT,EXE .ENTRY START,0 ; ; Prompt for node name ; PUSHAL NODE_WORK ; Specify arguments for prompt PUSHAQ PROMPT PUSHAQ NODE_DESC CALLS #3,G^LIB$GET_FOREIGN ; Get node name BLBC R0,100$ ; ; Construct NODE""::"1=" string ; MOVAB NCB_TEXT,R6 ; Get address of NCB default string MOVZWL NODE_WORK,R1 ; Get length of entered nodename SUBL3 R1,#6,R7 ; Get offset from start of "NCB" ADDL2 R7,R6 ; Get address of actual start of NCB MOVC3 R1,NODE_TEXT,(R6) ; Copy in actual node name MOVL R6,NCB_DESC+4 ; Set up descriptor SUBL3 R7,#NCB_LENGTH,NCB_DESC ; ... ; ; Attempt to contact NODE""::"1=". ; $ASSIGN_S - DEVNAM = NCB_DESC - ; Assign channel to target task CHAN = NET_CHANNEL ; (will never get filled) ; ; Exit with status ; CMPL R0,#SS$_NOSUCHOBJ ; If "no such object" it's reachable!! BNEQ 100$ MOVL #SS$_NORMAL,R0 ; Emit success if it's reachable 100$: RET .END START ============================================================================ ================================================================================ Note 81.1 La suite de 79.* 1 of 8 DECUSF::MOUSSU_L "Laurent MOUSSU - CERIM Lille" 18 lines 8-SEP-1988 18:39 -< Whaouw!!! >- -------------------------------------------------------------------------------- 1. C'est confondant de simplicite .... 2. La remarque " ; (Note: this is a prime example of the kind of program ; which will break with long nodenames in Phase V!) " me laisse reveur... 3. Cela marche fort bien, et rien qu'en interactif on "sent" une nette difference de tps de reponse par rapport aux bricolages que nous avions invente jusqu'ici 4. Il reste vrai que les differentes interventions en faveur d'un $GETNI restent valides... pour obtenir bien d'autres infos DECnet que ce qui nous preoccupait ici, mais qui est bien pratique. 5. Mille excuses aupres de B.O. de lui causer des nuits d'insomnies a partir d'une "question facile"... mais, je pense, UTILE. ================================================================================ Note 81.2 La suite de 79.* 2 of 8 DECUSF::OURGHANLIA_B "Bernard, VMS/VAXClusters" 3 lines 8-SEP-1988 20:13 -< On n'arrete pas le progres >- -------------------------------------------------------------------------------- Et oui, on n'arrete pas le progres...il y a les noms de fichier de CDD+ (30000000CDD$RDB_SYSTEM_METADATA.F0000000 par exemple), Phase V permettra le.systeme.qui.a.un.nom.long par exemple... ================================================================================ Note 81.3 La suite de 79.* 3 of 8 DECUSF::PERROT_B "IPN Orsay" 14 lines 8-SEP-1988 20:40 -< Et avec CTERM ? >- -------------------------------------------------------------------------------- Ca me donne l'idee d'une ruse encore pire. Je ne sais pas trop l'overhead induit par l'appel de l'objet CTERM (42), mais la solution devient tres courte et que en DCL: $open/error=unreachable dummy node::"42=" $close dummy $! reachable $..... $..... $unreachable: $..... $..... Etonnant non ? ================================================================================ Note 81.4 La suite de 79.* 4 of 8 DECUSF::OURGHANLIA_B "Bernard, VMS/VAXClusters" 6 lines 9-SEP-1988 12:08 -< Objet existant = Overhead !!! >- -------------------------------------------------------------------------------- Helas, si vous utilisez un objet qui existe deja (ici CTERM), vous allez creer un lien DECnet et un process remote (qui tournera REMACP dans le cas present...) d'ou un overhead certain... Si vous voulez absolument le faire en DCL (suis-je un fana du DCL ?? pas vraiment...), utilisez un objet qui n'existe pas en analysant les erreurs. ================================================================================ Note 81.5 La suite de 79.* 5 of 8 DECUSF::PERROT_B "IPN Orsay" 10 lines 9-SEP-1988 13:02 -------------------------------------------------------------------------------- Oui, mais dans le cas present, et contrairement a ce qui se produirait avec un objet existant genre MAIL, MIRROR, ..., avec CTERM, il y a reveil de REMACP, mais pas de creation de process. J'ai fait des essais, cela ce revele aussi rapide a l'usage qu'avec l'objet 1 et je n'ai vu trace de process cree nulle part. Quelque chose m'a-t-il echappe ? Par contre, je n'ai pas trouve de moyen d'avoir des status differents en utilisant un objet inexistant directement en DCL selon que le noeud soit reachable ou non. ================================================================================ Note 81.6 La suite de 79.* 6 of 8 DECUSF::OURGHANLIA_B "Bernard, VMS/VAXClusters" 2 lines 12-SEP-1988 11:36 -< Vous avez raison >- -------------------------------------------------------------------------------- Vous avez raison, REMACP est reveille mais il n'y a pas de creation de process remote. J'etais un peu fatigue... ================================================================================ Note 81.7 La suite de 79.* 7 of 8 DECUSF::BERENGUIER_A "Alain, ALCATEL BUSINESS SYST" 131 lines 29-MAR-1991 16:05 -< Avec une analyse plus fine du status. >- -------------------------------------------------------------------------------- Suite a la note VMS 1252, je prefere repondre sur ce "topic", VMS n'etant pas approprie, quand à la deviation de la 403... ----- D'une maniere générale, je crois que le fait d'essayer d'economiser l'overhead de la création d'un process sur le distant est un faux probleme. En effet à quoi cela sert-il de connaitre l'etat d'un n÷ud distant, si ce n'est pour avoir la certitude d'effectuer un travail sur ce n÷ud. A la suite de ce préléminaire, reach.mar ne me suffit donc pas, en effet, si le dit n÷ud est en dans l'état "shut", je le vois comme "reachable". Je n'est pas essayer Netacp.Bas ( n'ayant pas le compilateur BASIC, ni la certitude qu'il m'apporte quelque chose dans le travail quotidient ). Le seul probleme pour avoir l'etat d'un n÷ud lorsque l'on ouvre un fichier, c'est d'avoir le "STV" ( secondary status value ) qui n'est pas accessible en DCL ( Cela pourrait faire l'objet d'un SIR, ou si je me trompe, donnez moi le moyen - je ne l'ai pas trouver dans la doc - ). Une astuce pour faire ressortir ce "STV" c'est d'employer une image ou un moyen quelconque qu'il le sorte en premier. La fonction lexicale F$File_Attribut repond à ce critére. Voici une "subroutine" DCL utilisant ce processus : ------------------------------------------------------------------------- $ ! $ Mk_Open: Subroutine $ Re_Mk_Open: Continue $ On Warning Then $ Goto Error_Open_File_Queue $ Ok_Bdt = F$File_Attribute ( Queue_File_Name, "BDT" ) $ Open /Share /Append /Error=Error_Open_File_Queue - Queue_File 'Queue_File_Name' $ Return $ ! $ Error_Open_File_Queue: $ O_Status = $Status $ If ( O_status .eq. %X00002094 ) .or. - ! UNREACHABLE ( O_status .eq. %X0000208C ) ! SHUT $ Then $ Delay_Time = "04:00:00.00" $ Else $ If ( O_status .eq. %X000020F4 ) .or. - ! LINKEXIT ( O_status .eq. %X0000206C ) ! REMRSRC $ Then $ Delay_Time = "00:15:00.00" $ Else $ Goto End_Of_Scheduling $ Endif $ Endif $ Wait 'Delay_Time' $ Goto Re_Mk_Open $ !--- $ End_Of_Scheduling: Continue $ Msg_Txt = "Error opening queue file :!/!_!_'!AS'." $ Msg_Err = F$Fao ( Msg_Txt, Queue_File_Name ) $ If O_Status .eq. %X00030001 Then $ O_Status = "" $ On Warning Then $ Return %X18668034 $ Emsg 'Fac_Name' F ERROROPEN "''Msg_Err'" 0 'O_Status' $ EndSubroutine ! Mk_Open $ ! $ ! -------------------- ------------------------------------------------------------------------- Sur UNREACHABLE ou SHUT, le distant n'est pas accessible et ce pour un certain temps ( reboot, backup, test decnet ... ) le delais avant de recommencer le test doit donc etre suffisamment long pour ne pas genere le dit distant, il est inutile de tenter de communiquer - dans ce cas j'ai choisie 4 heures, c'est le temps moyen chez nous pour effectuer un backup de l'ensemble du cluster. ----- %SYSTEM-F-UNREACHABLE, remote node is not currently reachable Cette erreur implique que le n÷ud distant n'est pas actuellement actif ( tout au moins pour les transactions DECNET ). %SYSTEM-F-SHUT, remote node no longer accepting connects Le systeme distant s'arrete. On se retrouve dans le meme cas qu'UNREACHABLE, sauf qu'il est entrain de le devenir. On tentera une ressoumission 4 heures aprés la présente. ----- Sur LINKEXIT, une precaution doit etre prise les fichier Sylogin.com et Login.com de l'appelé doivent ete exempt de fautes. Une erreur provoquant systematiquement un Linkexit. Malgres cela Linkexit peut encore exister ( coupure de courant sur l'un des elements - pont, passerelle, n÷ud lui meme, stop /id du serveur ... ). On peut raisonnablement esperer que ce evenement est fugitif. ----- %SYSTEM-F-LINKEXIT, network partner exited Systématique, due a une erreur dans le login de l'utilisateur distant. Aleatoire ?.. en recommancant imediatement, l'on a des chances de passer. ? !!! paramêtres decnet ?... Supposons les erreurs de login inexistant, on tentera une ressoumission 15 minutes aprés la présente. ----- Sur REMRSRC, due certainement à une surcharge du distant ( ou de l'une des passerelles ), l'on peut esperer que l'evenement est passager. ----- %SYSTEM-F-REMRSRC, insufficient system resources at remote node Aleatoire ?.. en recommancant imediatement, l'on a des chances de passer. ? !!! paramêtres decnet ?... On tentera une ressoumission 15 minutes aprés la présente. ======================================================================== Pour programmer ce genre de probleme ( tous les cas de figures ne sont peut etre pas traiter ), je prefere DCL, le code d'erreur si non saisie par ces quatre status est immediatement visualise, l'action corrective est immediate. Si j'avais à effectuer le meme genre d'ouverture en compilé, j'utiliserai le STV. La routine ci dessus est en commencement de test sur un reseau europeen. J'ai effectue un programme de backup automatique de partition user d'une VS vers un cluster ( donc reseau local - la VS n'appartient pas au dit cluster - ) qui fonctionne avec un "handleur" similaire depuis bientot 1 ans ( + 6 mois pour les tests ), sans aucune interventions manuelles. ================================================================================ Note 81.8 La suite de 79.* 8 of 8 DECUSF::OURGHANLIA_B "Eppur si muove..." 10 lines 29-MAR-1991 16:54 -< Good idea, but DCL... >- -------------------------------------------------------------------------------- Bonne idée, mais le DCL peut etre evite... Voir VMS:STV.MAR a utiliser avec le bout de DCL (pour transiger....) suivant : $loop: $ inquire file file $ if file.eqs."" then $exit $ run stv $ write sys$output "STS=", STS, " ", F$MESS("%X''STS'") $ if STS.nes."00010001" then $write sys$output "STV=", STV, " ", F$MESS("%X''STV'") $ goto loop