Spezielle Datei 'vty_server'
Zweck
Der virtuelle Terminalserver (vty_server oder vts) ist ein AIX® -Einheitentreiber, der verwendet wird, um eine TTY-Verbindung von der Partition, auf der der virtuelle Terminalserver ausgeführt wird, zu einem virtuellen Terminal (kein virtueller Terminalserver) auf einer anderen Partition herzustellen.
Beschreibung
Die vty verfügt über eine Controllerseite (vty server) und eine Workerseite (vty). Der vty-Server wird geöffnet und von speziellen Programmen wie mkvtermverwendet. Die Vty wird geöffnet und von Shells wie kshverwendet. Der Datenpfad ist bidirektional.
vts_ioctl
Der Befehl vts_ioctl wird über die Einheitenwechseltabelle aufgerufen, wenn eine Anwendung ioctl mit einem Dateideskriptor aufruft, der von einem erfolgreichen Öffnen eines VTS-Ports zurückgegeben wurde. vts_ioctl führt spezialisierte Steueroperationen für den Port durch.
Syntax
struct vts_ioctl {
void *vi_buffer; /* pointer to user's buffer */
int vi_bufsize; /* size of user's buffer */
int vi_offset; /* offset into data */
int vi_result; /* bytes transferred */
}; Der Parameter vi_buffer ist ein Zeiger auf einen Puffer im Benutzeradressbereich. Der Parameter vi_bufsize gibt die Größe des Puffers an. Für VTS_READ_CLCS und VTS_READ_PARTNER werden Daten aus dem VTS-Treiber in den von vi_bufferangegebenen Puffer versetzt. Für VTS_WRITE_PARTNER werden Daten aus dem von vi_buffer angegebenen Puffer extrahiert und in den VTS-Treiber versetzt.
Der Parameter vi_offset wird ausschließlich für VTS_READ_CLCS verwendet. Eine Anwendung kann mehrere ioctl-Aufrufe für VTS_READ_CLCS ausführen. Der Treiber kann mehr Daten für die Übertragung an die Anwendung haben, als in den Puffer passen, der durch den Parameter vi_buffer angegeben wird.
vi_offset wird für die erste FTS_READ_CLCS auf 0 gesetzt. Dies veranlasst den Treiber, PHYP nach der aktuellen Liste möglicher CLCs abzufragen. Die erste Sequenz der CLCs wird in den Benutzerbereich verschoben. Jede CLC wird durch eine neue Zeile getrennt und die letzte CLC wird durch eine Null beendet. Ein Zähler für die Anzahl Byte, die in den Benutzeradressbereich verschoben wurden (ohne die abschließende Null), wird in vi_resultgespeichert.
Die Anwendung bestimmt, wie die Daten verarbeitet werden (beispielsweise kann die Anwendung die Daten in einer verknüpften Liste speichern). vi_result wird dann zu vi_offset hinzugefügt und eine weitere VTS_READ_CLCS wird ausgeführt. Dies bewirkt, dass der Treiber die nächste Gruppe von CLCs in den Puffer der Anwendung verschiebt. Diese Operationsfolge wird fortgesetzt, bis in vi_resultnull zurückgegeben wird.
Eine Folge von VTS_READ_CLCS-Aufrufen führt zu einer Folge von CLCs, die durch neue Zeilen getrennt und durch eine Null beendet werden. Mögliche Fehlerbedingungen:
- EIO
- Ein Treiberaufruf an PHYP wurde mit einem Fehler zurückgegeben.
- ENOMEM
- Es ist kein Speicher für die CLC-Liste verfügbar.
- EPERM
- Copyin oder Copyout fehlgeschlagen.
Ein Aufruf VTS_READ_PARTNER gibt den Wert zurück, der beim letzten erfolgreichen Aufruf VTS_WRITE_PARTNER übergeben wurde. Wenn der VTS momentan nicht verbunden ist, wird eine Nullzeichenfolge zurückgegeben. Die einzigen möglichen Fehler sind Fehler, die von copyin-oder copyout-Routinen zurückgegeben werden.
Der Aufruf VTS_WRITE_PARTNER erstellt und beendet Verbindungen. Beim Beenden einer Verbindung sind folgende Fehler möglich:
- ENXIO
- Der VTS ist momentan nicht verbunden.
- EIO
- Der H_FREE_VTERM-Aufruf an PHYP hat H_HARDWARE zurückgegeben. Dies weist normalerweise darauf hin, dass ein Problem mit PHYP vorliegt oder dass die Partitionsverbindung fehlgeschlagen ist.
- EINVAL
- Der H_FREE_VTERM-Aufruf an PHYP hat H_PARAMETER zurückgegeben. Dies weist in der Regel auf ein Treiberproblem hin.
Um eine Verbindung zu erstellen, muss der Puffer eine CLC enthalten, die von VTS_READ_CLCS übergeben wurde. Die CLC kann die letzte neue Zeile enthalten, die entfernt wird. Folgende Fehler sind möglich:
- EBUSY
- Der VTS ist bereits verbunden. Ermitteln Sie mithilfe von VTS_READ_PARTNER, wo der VTS verbunden ist, oder verwenden Sie VTS_WRITE_PARTNER mit einem Nullnamen, um die Verbindung zu beenden.
- EINVAL
- Die übergebene CLC ist nicht in der Liste der gültigen Verbindungen für diesen VTS enthalten. EINVAL wird auch zurückgegeben, wenn der Aufruf H_REGISTER_VTERM an PHYP H_PARAMETER zurückgibt.Anmerkung: Wenn eine Rekonfiguration durchgeführt wurde, wurde möglicherweise die Liste der gültigen CLCs geändert.
- EIO
- Der Aufruf H_REGISTER_VTERM an PHYP hat H_PARAMETER zurückgegeben. Dies kann auf einen fehlgeschlagenen PHYP zurückzuführen sein.