17.4. Serviço de Dial-in

Contribuição de Guy Helmer. Informações adicionais por Sean Kelly.

Configurar o seu sistema FreeBSD para o serviço de dial-in é similar ao processo de configurar terminais exceto que você terá de discar com ``modems''.

17.4.1. Modems Externos vs. Internos

Modems externos são mais convenientes para dial-up, devido a permitirem ser configurados via parâmetros armazenados em RAM não volátil e eles possuem indicadores luminosos que demonstram o estado de sinais RS-232 importantes. Luzes piscantes impressionam visitantes, e também são úteis na verificação do correto funcionamento do modem.

Modems internos usualmente não permitem configurações via RAM não volátil, limitando a serem realizadas somente através de chaves DIP. Caso seu modem possua algum indicador luminoso será, provavelmente, difícil ver as luzes enquanto seu sistema estiver no local próprio.

17.4.1.1. Modems e Cabos

Se você estiver utilizando um modem externo então será necessário utilizar um cabo apropriado. Um cabo serial do padrão RS-232 longo o suficiente com todos os fios necessários aos sinais:

  • Dados transmitidos (SD)

  • Dados recebidos (RD)

  • Solicitar para enviar (RTS)

  • Limpar para enviar (CTS)

  • Dados prontos (DSR)

  • Terminal de dados pronto (DTR)

  • Detecção de portadora (CD)

  • Sinal terra (SG)

O FreeBSD necessita dos sinais RTS e CTS para controle de fluxo sobre velocidades acima de 2400 bps, o sinal CD serve para detectar que a chamada foi respondida e a linha estabilizada, e o sinal DTR para reiniciar o modem depois de uma seção completa. Alguns cabos não possuem todos os fios necessários aos sinais, então, se você tiver problemas com a fase de login que não prosegue após a linha ter sido estabelecida, você deve ter um problema com o seu cabo.

Assim como outros sistemas operacionais UNIX®, o FreeBSD usa de sinais físicos para localizar quando uma chamada foi respondida ou a linha estabelecida e para reiniciar o modem após uma chamada. O FreeBSD evita enviar comandos para o modem ou observar por estados reportados pelo modem. Se você está acostumado a conectar modems a sistemas PC-BBS, isto deve parecer impróprio.

17.4.2. Considerações da Interface Serial

O FreeBSD tem suporte as interfaces de comunicação NS8250-, NS16450-, NS16550-, e NS16550A- baseadas na EIA RS-232C (CCITT V.24). Os dispositivos 8250 e 16450 que possuem área de troca de caracter único. O dispositivo 16550 provê áreas de troca de 16 caracteres, o que garante uma melhor perfomance ao sistema. (Problemas na implementação da 16550's evita o uso da área de troca de 16 caracteres, então use a 16550A's se possível). Devido a dispositivos de área de troca de caractere único requerirem maior processamento do sistema operacional que os dispositivos com área de troca de 16 caracteres, prefira utilizar interfaces seriais com sinais baseados em 16550A. Se o sistema possuir diversas portas seriais ativas ou tiver uma carga de serviços muito grande, as placas seriais baseadas em 16550A são melhores para que se tenham taxas baixas de erros de comunicação.

17.4.3. Rápida Visão Geral

Assim como os terminais, o init iniciará um processo getty para cada porta serial configurada para aceitar conexões discadas. Por exemplo, se um modem está anexado a /dev/ttyd0 o comando ps ax deve apresentar algo como:

 4850 ??  I      0:00.09 /usr/libexec/getty V19200 ttyd0

Quando um usuário disca para a linha em que o modem está conectado um sinal de CD (Carrier Detect - Detecção de Portadora) é reportado pelo modem. O kernel anuncia a detecção da portadora e completa a abertura do getty daquela porta. O getty envia um prompt login: para a linha na velocidade especificada. O getty verifica se os caracteres estão sendo recebidos corretamente e, numa configuração típica, se ele encontra ruídos de comunicação (provavelmente a velocidade da conexão do modem é diferente da estabelecida no getty), o getty tenta ajustar a velocidade da linha até que possa receber caracteres cabíveis.

Após o usuário informar seu nome de login, o getty executa /usr/bin/login, que se responsabiliza pelo login perguntando ao usuário sua senha e posteriormente iniciando o shell definido para este.

17.4.4. Arquivos de configuração

Temos três arquivos de configuração do sistema no diretório /etc que provavelmente será necessário editar para permitir acesso discado ao seu sistema FreeBSD. O primeiro deles é o /etc/gettytab que contém as informações de configuração do processo de servidor /usr/libexec/getty. O segundo, o /etc/ttys, armazena informações que descrevem ao /sbin/init quais dispositivos tty devem possuir um processo getty rodando sobre eles. E por último, você poderá colocar seus comandos de inicialização no script /etc/rc.serial.

Temos dois grupos distintos relativos as conexões com modems em UNIX. Um grupo gosta de configurar seus modems e sistemas para que independendo da velocidade seja possível discar, porém a interface local RS-232 entre o computador e o modem roda numa velocidade travada. O benefício disso é que o usuário remoto sempre verá o prompt de login imediatamente. O negativo disso é que o sistema não sabe qual a verdadeira velocidade do usuário, o que fará que programas que rodam utilizando toda a tela, como o Emacs, não ajustarem seus métodos de exibição para responderem de maneira melhor quando for executada uma conexão lenta.

O outro grupo configura as interfaces RS-232 de seus modems de maneira a diversificarem suas velocidades baseando-se na velocidade da conexão do usuário remoto. Por exemplo, conexões V.32bis (14.4 Kbps) devem fazer com que o modem execute sua interface RS-232 em 19.2 Kbps, enquanto conexões 2400 bps farão com que a interface RS-232 do modem rode em 2400 bps. Devido ao getty não entender qualquer particularidade da velocidade reportada do modem ele dará a mensagem login: na velocidade inicial e observará os caracteres que terá em resposta. Se o usuário verificar que os caracteres são impróprios ou errôneo, ele assumirá que os usuários deverão saber que devem pressionar a tecla Enter até que possa ver um prompt reconhecível. Se as velocidades não combinarem o getty verificará que o usuário está  digitando ``lixo'', ou seja, caracteres impróprios e tentará estabelecer a próxima velocidade e enviar o prompt login: novamente. Este procedimento poderá pendurar por um tempo, porém normalmente após uma ou duas pressionadas de tecla o usuário verá um prompt bom. Obviamente, esta sequência de login não aparecerá tão limpa quanto a de método de velocidade travada, mas um usuário de conexão lenta deve receber uma melhor resposta interativa para programas que utilizam toda a tela para exibição.

Esta seção tentará prover informações numa configuração balanceada, mas isso será influenciado tendo em vista a velocidade do modem com a velocidade da conexão.

17.4.4.1. /etc/gettytab

O arquivo /etc/gettytab é um arquivo do estilo do termcap(5) de informações de configuração para o getty(8). Por favor, visite a página de manual do gettytab(5) para informações detalhadas sobre o formato do arquivo e a lista de habilidades.

17.4.4.1.1. Configuração de velocidade travada ou fixa

Se você está travando a velocidade de comunicação de seu modem numa específica, você provavelmente não precisará fazer qualquer alteração no arquivo /etc/gettytab.

17.4.4.1.2. Configuração de velocidades compatíveis

Você precisará definir uma entrada no arquivo /etc/gettytab para fornecer informações ao getty sobre velocidades que você deseja utilizar para seu modem. Se você tiver um modem de 2400 bps, você provavelmente poderá usar a entrada D2400 existente.

#
# Terminais de conexões discadas rápidas, 
# giram em torno de 2400/1200/300 (podendo inciar em um deles)
D2400|d2400|Fast-Dial-2400:\
        :nx=D1200:tc=2400-baud:
3|D1200|Fast-Dial-1200:\
        :nx=D300:tc=1200-baud:
5|D300|Fast-Dial-300:\
        :nx=D2400:tc=300-baud:

Se você possui um modem de alta velocidade, você provavelmente precisará adicionar uma entrada no arquivo /etc/gettytab; temos aqui uma entrada que poderia ser utilizada para um modem de 14.4 Kbps com uma interface de velocidade máxima igual a 19.2 Kbps:

#
# Adições para modems V.32bis
#
um|V300|High Speed Modem at 300,8-bit:\
        :nx=V19200:tc=std.300:
un|V1200|High Speed Modem at 1200,8-bit:\
        :nx=V300:tc=std.1200:
uo|V2400|High Speed Modem at 2400,8-bit:\
        :nx=V1200:tc=std.2400:
up|V9600|High Speed Modem at 9600,8-bit:\
        :nx=V2400:tc=std.9600:
uq|V19200|High Speed Modem at 19200,8-bit:\
        :nx=V9600:tc=std.19200:

Isto resultará em conexões de 8 bits sem paridade.

O exemplo acima inicia a velocidade de comunicação em 19.2 Kbps (para conexões V.32bis), então girando em torno de 9600 bps (para V.32), 2400 bps, 1200 bps, 300 bps, e retornando para 19.2 Kbps. Velocidades de comunicação cíclicas são implementadas com a habilidade nx= (``próxima tabela''). Cada uma das linhas usa uma entrada tc= (``continuação de tabela'') para a escolha do resto das configurações ``padrões'' para uma velocidade em específico.

Se você tem um modem de 28.8 Kbps e você quer fazer uso das vantagens de compressão dos modems de 14.4 Kbps, você precisa utilizar velocidades de conexão maiores que 19.2 Kbps. Aqui temos um exemplo de uma entrada no gettytab iniciando em 57.6 Kbps:

#
# Adições para modems V.32bis ou V.34
# Iniciando em 57.6 Kbps
#
vm|VH300|Very High Speed Modem at 300,8-bit:\
        :nx=VH57600:tc=std.300:
vn|VH1200|Very High Speed Modem at 1200,8-bit:\
        :nx=VH300:tc=std.1200:
vo|VH2400|Very High Speed Modem at 2400,8-bit:\
        :nx=VH1200:tc=std.2400:
vp|VH9600|Very High Speed Modem at 9600,8-bit:\
        :nx=VH2400:tc=std.9600:
vq|VH57600|Very High Speed Modem at 57600,8-bit:\
        :nx=VH9600:tc=std.57600:

Caso você tenha uma CPU lenta ou um sistema sobre altas cargas de utilização e não possua portas seriais basedas em 16550A, você poderá receber erros ``sio'' ``silo'' em 57.6 Kbps.

17.4.4.2. /etc/ttys

A configuração do arquivo /etc/ttys é abordada no Exemplo 17-1. A configuração para modems é similar porém temos que passar um argumento diferente para o getty e especificar um tipo de terminal diferente. O formato geral para ambas as configurações, velocidade travada e velocidades compatíveis são:

ttyd0   "/usr/libexec/getty xxx"   dialup on

O primeiro item da linha acima é o arquivo especial de dispositivo para esta entrada -- ttyd0 significando que /dev/ttyd0 é o arquivo que este getty observará. O segundo item, "/usr/libexec/getty xxx" (xxx será substituído pela habilidade inicial do gettytab) que será executado no dispositivo pelo processo init. O terceiro item, dialup, é o tipo padrão de terminal. O quarto parâmetro, on, diz ao init que a linha é operacional. Pode haver um quinto parâmetro, secure, mas deve ser utilizado somente para terminais fisicamente seguros (como a console do sistema).

O tipo padrão de terminal (no exemplo acima é um dialup) poderá depender das configurações nativas. O tipo dialup é o padrão para terminais de linhas de acesso discado, portanto, os usuários podem personalizar seus scripts de login para que estes informem que o tipo do terminal é dialup e automaticamente sejam feitos ajustes. Entretanto, o autor deste acha mais fácil para suas configurações definir o tipo padrão como vt102, desde que os usuários somente usem a emulação de VT102 em seus sistemas.

Depois de realizar estas alterações no /etc/ttys você deve enviar um sinal HUP para o processo init para que este releia o arquivo e aplique as alterações. Você pode usar o comando

# kill -HUP 1
para enviar o sinal. Caso esta seja a primeira vez que você configura o sistema, você pode esperar até que seus modems estejam conectados e configurados corretamente para depois sinalizar ao init.

17.4.4.2.1. Configuração de velocidade travada ou fixa

Para configurações de velocidade fixa sua entrada em ttys precisa especificar ao getty a velocidade. Para um modem com a velociade da porta fixa em 19.2 Kbps, a entrada em ttys deve ser algo como isso:

ttyd0   "/usr/libexec/getty std.19200"   dialup on

Caso seu modem esteja com a velocidade fixa diferente, substitua pelo valor apropriado utilizando std.velocidade no lugar de std.19200. Certifique-se de utilizar um tipo válido no arquivo /etc/gettytab.

17.4.4.2.2. Configuração de velocidades compatíveis

Na configuração de velocidades compatíveis, sua entrada em ttys precisa referenciar o início apropriado ``auto-baud'' (sic) em /etc/gettytab. Por exemplo, se você adicionar acima a entrada sugerida para iniciar em 19.2 Kbps (a entrada em gettytab contém o ponto de início V19200), sua entrada em ttys deve parecer com isso:

ttyd0   "/usr/libexec/getty V19200"   dialup on

17.4.4.3. /etc/rc.serial

Modems de alta velocidade como V.32, V.32bis, e V.34 precisam usar o controle físico de fluxo (RTS/CTS). Você pode acidicionar o comando stty no arquivo /etc/rc.serial para definir o controle físico de fluxo do kernel do FreeBSD na porta do modem.

Por exemplo, para definir a configuração de crtscts, termios, na primeira porta serial de dispositivos de discagem (COM2) as seguintes linhas poderiam ser adicionadas ao /etc/rc.serial:

# Configuração de inicialização de porta serial
stty -f /dev/ttyid1 crtscts
stty -f /dev/cuaia1 crtscts

17.4.5. Configurações do Modem

Caso você possua um modem que possibilite que seus parâmetros possam ser definidos em RAM não volátil, você precisará utilizar um programa de terminal (como o Telix sobre MS-DOS® ou o tip sobre o FreeBSD) para definir os parâmetros. Conecte ao modem utilizando como inicial a mesma velocidade de comunicação que o getty utilizará e configure o modem com RAM não volátil combinando com os seguintes requerimentos:

Por favor, leia a documentação do seu modem para identificar quais comandos e configurações de chaves DIP você precisará dar ao modem.

Por exemplo, para definir os parâmetros acima num modem externo U.S. Robotics® Sportster® 14,400 você poderia dar estes comandos ao modem:

ATZ
AT&C1&D2&H1&I0&R2&W

Você pode querer também usar esta oportunidade para fazer outros ajustes na configuração do modem, como por exemplo se este utilizará compressão V.42bis ou MNP5.

O modem externo U.S. Robotics Sportster 14,400 também possui algumas chaves DIP que necessitam ser configuradas; para outros modems talvez possa utilizar estas configurações, por exemplo:

Códigos de resultados devem ser suprimidos para modems de discagem o que evitará problemas que podem ocorrer se erroneamente o getty dar um prompt de login: para o modem que estiver em modo de comando e o modem neste estado retornaria o comando ou o código de resultado. Esta sequência pode resultar numa conversa boba entre o getty e o modem.

17.4.5.1. Configuração de velocidade travada ou fixa

Para a configuração de velocidade fixa será necessário definir no modem que este mantenha constante a velocidade de comunicação entre ele e o computador independente da velocidade de comunicação. Num modem externo U.S. Robotics Sportster 14,400 estes comandos fixarão a velocidade de comunicação entre o modem e o computador na velocidade fornecida pelos comandos:

ATZ
AT&B1&W

17.4.5.2. Configuração de velocidades compatíveis

Para a configuração de velocidades compatíveis ou variáveis você precisará configurar seu modem para que este ajuste sua velocidade de acordo com a velocidade que for percebida na chamada. Num modem externo U.S. Robotics Sportster 14,400 estes comandos travarão a velocidade de correção de erros na mesma que for utilizada no envio dos comandos, porém permitirá que a porta serial varie em conexões sem correção de erros:

ATZ
AT&B2&W

17.4.5.3. Verificando a configuração do modem

A maioria dos modems de alta velocidade disponibiliza comandos para verificação dos parâmetros correntes de operação numa forma humanamente legível. Em um modem externo U.S. Robotics Sportster 14,400 o comando ATI5 lista as configurações armazenadas em RAM não volátil. Para verificar as configurações reais de operação do modem (como determinadas nas configurações das chaves DIP), use o comando ATZ e então ATI4.

Se você tem um tipo diferente de modem verifique o manual para saber como checar as configurações feitas.

17.4.6. Resolução de Problemas

Temos aqui alguns passos que você pode seguir para verificar o modem no seu sistema em relação a discagem e atendimento.

17.4.6.1. Checagem do sistema FreeBSD

Conecte fisicamente seu modem no seu sistema FreeBSD, inicie o sistema e se seu modem tiver luzes que indicam seu estado, observe se a luz indicadora DTR é sinalizada quando o prompt login: aparece no console do sistema -- se a luz acender, significa que o FreeBSD iniciou o processo getty na porta correta de comunicação e está esperando pelo modem para aceitar uma chamada.

Se a luz indicadora DTR não acender, execute login no sistema FreeBSD no console e através do comando ps ax verifique se o FreeBSD está tentando executar o processo getty na porta correta. Você deve ver uma linha como essa em meio aos processos listados:

  114 ??  I      0:00.10 /usr/libexec/getty V19200 ttyd0
  115 ??  I      0:00.10 /usr/libexec/getty V19200 ttyd1

Se você ver algo diferente, como isso:

  114 d0  I      0:00.10 /usr/libexec/getty V19200 ttyd0

e o modem ainda não ter aceitado uma chamada, isso significa que o getty completou a abertura das portas de comunicação. Isto pode indicar um problema com o cabo ou uma mal configuração do modem, devido ao getty não estar habilitado a abrir a porta de comunicação até que o CD (detecção de portadora) seja informado pelo modem.

Caso você não veja nenhum processo getty indicado para abrir a porta ttydN designada, recheque suas entradas no arquivo /etc/ttys para ver se não há erros. Verifique também o arquivo de log /var/log/messages para ver se não há nenhuma mensagem de log do init ou do getty relativa a um problema. Se houver verifique novamente os arquivos de configuração /etc/ttys e o /etc/gettytab, assim como o arquivo especial de dispositivo /dev/ttydN, buscando por qualquer erro, entradas erradas ou arquivos especiais de dispositivos perdidos.

17.4.6.2. Tentando conectar-se ao sistema discando para ele

Tente discar para o sistema; tenha certeza de usar 8 bits, sem paridade, e 1 bit de parada no sistema remoto. Se você não conseguir um prompt correto, ou receber caracteres impróprios, tente pressionar Enter uma vez por segundo. Se ainda assim você não ver um prompt login: tente enviar um comando BREAK. Caso você esteja utilizando um modem de alta velocidade para a conexão discada, tente discar novamente após o travamento da velocidade da interface para a linha de discagem (via o comando AT&B1 como em um modem U.S. Robotics Sportster, por exemplo).

Se você ainda assim não conseguir um prompt login:, verifique novamente o /etc/gettytab e verifique que:

  • O nome da capacidade inicial especificada no /etc/ttys para a linha combina com o nome da capacidade em /etc/gettytab

  • Cada entrada nx= combine com outro nome de capacidade gettytab

  • Cada entrada tc= combine com outro nome de capacidade gettytab

Se você disca mas o modem no sistema FreeBSD não responde, certifique-se de que o modem está configurado para responder a chamada telefônica quando DTR é informado. Se o modem parecer estar configurado corretamente, verifique se o DTR da linha é informado observando as luzes indicadoras do modem (se ele tiver alguma).

Se você tiver feito tudo isso diversas vezes e ainda assim não funcionar, descanse e tente mais tarde. Se ainda assim não funcionar, você pode, talvez, enviar um email para lista de discussão FreeBSD de perguntas genéricas descrevendo seu modem e seu problema e o pessoal bom da lista tentará te ajudar.

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.