Aller au contenu principal

VIII. Algorithmes de l'interpréteur d'entrée

Voici une description concise des réponses du NCP aux commandes réseau entrantes. CS désigne toujours l'état de la connexion (Connection State). Notez que CLOSE est un appel système exécuté par le processus utilisateur local, et que CLS est une commande réseau.

NOP​

Rejeter.

RFC (RTS or STR)​

S'il n'existe aucune entrée, en créer une avec l'état = PENDING CALL, et mettre le message en file.

Si CS = LISTENING, alors mettre l'entrée en file, entrer dans l'état RFC-RCVD et informer l'utilisateur de la requête.

Si CS = RFC-SENT mais que le nouveau RFC ne correspond pas à la requête, refuser le RFC.

Dans tous les autres cas, vérifier si le RFC correspond. S'il n'y a pas de correspondance, mettre le RFC en file. Si le RFC correspond, alors si :

  • CS = RFC-SENT, nous entrons dans l'état OPEN.
  • CS = CLS-WAIT, le RFC est ignoré.
  • sinon, la requête est illégale dans tous les états qui indiquent qu'elle a déjà été reçue (ces états sont 1,3,4,6,8,9).

Dans tous les cas, si le traitement du RFC provoque une condition de débordement (ressources épuisées), refuser la connexion (envoyer un CLS).

CLS​

La file des appels en attente est parcourue. Si le CLS ne correspond pas à la requête en cours mais correspond à une autre requête, supprimer cette requête et émettre un CLS. S'il n'y a aucune correspondance, le CLS est ignoré.

Si le CLS correspond à la requête en cours, et que CS =

  • PENDING, alors supprimer la requête en cours. Si la file des requêtes est vide, supprimer l'entrée ; sinon, laisser l'entrée telle quelle.
  • RFC-RCVD, émettre un CLS et entrer dans l'état ABORT.
  • ABORT, ignorer.
  • RFC-SENT, émettre un CLS. Si la file des appels en attente est vide, supprimer l'entrée ; sinon, entrer dans l'état PENDING.
  • OPEN, si nous sommes du côté réception, la réponse est identique à celle prévue pour RFC-SENT. Si nous sommes du côté émission, vider la file de données et, si un RFNM est encore en attente, entrer dans l'état RFNM-WAIT. Sinon, la réponse est identique à celle prévue pour RFC-SENT.
  • CLS-WAIT, émettre un CLS et, si la file des appels en attente est vide, supprimer l'entrée ; sinon CS = PENDING.
  • DATA-WAIT, vider la file de données et entrer dans l'état RFNM-WAIT. Un CLS correspondant ne peut pas se produire dans les états CLOSED ou LISTENING.

ERR​

Les erreurs sont mises en file pour être examinées ultérieurement par les programmeurs système, et sont considérées comme une erreur système de l'hôte qui a initié l'échange. (Non associé à un état.)

ECO​

Le code d'opération est changé en ERP et le message est retransmis (non associé à un état).

ERP​

À la réception d'un ERP, le système renvoie le texte de la commande au processus qui a émis l'ECO.

INR, INS​

Ces commandes ne sont autorisées que dans l'état OPEN. À la réception d'un INTERRUPT, le système fait envoyer un événement au processus associé. Un INTERRUPT est ignoré dans les états CLS-WAIT, DATA-WAIT et RFNM-WAIT. Dans tout autre état, il constitue une erreur.

ALL​

ALLOCATE n'est valide que dans l'état OPEN, et ne peut être envoyé qu'à un socket d'émission. Le NCP incrémente le champ 'Their Size' de l'entrée associée de la table de rendez-vous de la taille spécifiée dans la commande ALLOCATE.

Dans les états CLS-WAIT et DATA-WAIT, cette commande est ignorée ; dans tout autre état, elle constitue une erreur.

Data-RFNM​

Si l'on est dans l'état OPEN, marquer le champ d'état du contrôle de flux de l'entrée appropriée de la table de rendez-vous comme RFNM-RECVD, et envoyer davantage de données si nécessaire.

Si l'on est dans l'état DATA-WAIT, mettre à jour l'état du contrôle de flux. Si la file de données est vide, émettre un CLS et entrer dans l'état CLS-WAIT ; sinon, transmettre le message suivant.

Si l'on est dans l'état RFNM-WAIT, mettre à jour l'état du contrôle de flux et émettre un CLS. Si la file des appels en attente est vide, supprimer l'entrée de la table de rendez-vous ; sinon CS = PENDING.

Un Data-RFNM est une erreur dans tous les autres états.