vty_server Arquivo Especial

Propósito

O servidor de terminal virtual (vty_server ou vts) é um driver de dispositivo AIX usado para criar uma conexão no estilo tty da partição na qual o servidor de terminal virtual está sendo executado para um terminal virtual (não um servidor de terminal virtual) em outra partição.

Descrição

O vty tem um lado controlador (vty server) e um lado trabalhador (vty). O servidor vty é aberto e usado por programas especiais como o mkvterm. O vty é aberto e usado por shells como ksh. O caminho de dados é bidirecional.

vts_ioctl

O comando vts_ioctl é chamado através da tabela de comutação do dispositivo quando um aplicativo chama ioctl com um descritor de arquivo que foi retornado de uma abertura bem-sucedida de uma porta vts. vts_ioctl realiza operações de controle especializadas na porta.

Sintaxe

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 */
};

O parâmetro vi_buffer é um ponteiro para um buffer no espaço do usuário. O parâmetro vi_bufsize especifica o tamanho do buffer. Para VTS_READ_CLCS e VTS_READ_PARTNER, os dados são movidos do driver de vts para o buffer especificado por vi_buffer. Para VTS_WRITE_PARTNER, os dados são retirados do buffer especificado por vi_buffer e deslocados para o driver de vts.

O parâmetro vi_offset é usado apenas para VTS_READ_CLCS. Um aplicativo pode fazer várias chamadas de ioctl VTS_READ_CLCS; o driver pode ter mais dados para transferir para o aplicativo do que caberá no buffer que é especificado pelo parâmetro vi_buffer .

O vi_offset é definido como 0 para o primeiro FTS_READ_CLCS. Isso faz com que o motorista consulte o PHYP para a lista atual de possíveis CLCs. A primeira sequência dos CLCs é movida para o espaço do usuário. Cada CLC é separado por uma nova linha e o último CLC é finalizado por um null. Uma contagem do número de bytes movimentados no espaço do usuário (excluindo o null terminating null) é armazenado em vi_result.

O aplicativo determina como os dados são processados (por exemplo, o aplicativo pode salvar os dados em uma lista vinculada). vi_result é então adicionado a vi_offset e outro VTS_READ_CLCS é realizado. Isso faz com que o driver mova o próximo conjunto de CLCs para o buffer do aplicativo. Esta sequência de operações continua até que zero é retornado em vi_result.

Uma sequência de chamadas VTS_READ_CLCS resulta em uma sequência de CLCs separados por novas linhas e terminados por um null. Confessa a seguir as possíveis condições de erro:

EIO
Uma chamada de driver para o PHYP retornou com um erro.
ENOMEM
Nenhuma memória está disponível para manter a lista do CLC.
EPERM
O copyin ou copyout falhou.

Uma chamada VTS_READ_PARTNER retorna o valor que foi transmitido na última chamada bem-sucedida VTS_WRITE_PARTNER. Se os vts não estão atualmente conectados, uma string nula é devolvida. Os únicos erros possíveis são erros que são retornados por rotinas de copyin ou copyout.

A chamada VTS_WRITE_PARTNER cria e encerra conexões. A seguir são possíveis erros ao terminar uma conexão:

ENXIO
Os vts não estão conectados atualmente.
EIO
A chamada H_FREE_VTERM para o PHYP retornou H_HARDWARE. Isso geralmente indica que há um problema com o PHYP ou que a conexão de partição falhou.
EINVAL
A chamada H_FREE_VTERM para PHYP retornou H_PARÂMETRO. Isso geralmente indica um problema de motorista.

Para criar uma conexão, o buffer deve conter um CLC que foi passado a partir de VTS_READ_CLCS. O CLC pode conter a nova linha final, que é removida. A seguir, são possíveis erros:

EBUSY
Os vts já estão conectados. Use VTS_READ_PARTNER para determinar onde os vts estão conectados, ou use VTS_WRITE_PARTNER com um nome nulo para finalizar a conexão.
EINVAL
O CLC que foi passado não está na lista de conexões válidas para este vts. O EINVAL também é retornado se a chamada H_REGISTER_VTERM para PHYP retornar H_PARÂMETRO.
Nota: Caso tenha ocorrido uma reconfiguração, a lista de CLCs válidos pode ter sido alterada.
EIO
A chamada H_REGISTER_VTERM para PHYP retornou H_PARÂMETRO. Isso pode ser devido a um PHYP fracassado.