Manual de FreeBSD
Anterior | Capítulo 24. Comunicaciones serie | Siguiente

# 24.4. Servicio dial-in

Contribuido por Guy Helmer. Adiciones por Sean Kelly.

Configurar su sistema FreeBSD para servicio dial-in es muy similar a conectar terminales excepto que en lugar de lidiar con terminales se hace con modems.

## 24.4.1. Modems externos vs. internos

Los modems externos parecen ser más convenientes para dial-up, debido a que los modems externos con frecuencia pueden ser configurados semi permanentemente vía parámetros almacenados en RAM no volatil y usualmente proveen indicadores luminosos que despliegan el estado de señales importantes RS-232. Luces parpadeantes impresionan a los visitantes, pero las luces son también útiles para ver si un modem se encuentra operando adecuádamente.

Los modems internos usualmente carecen de RAM no volatil, entonces su configuración puede estar limitada a especificar DIP switches. Si su modem interno cuenta con algún indicador luminoso de señales, es probablemente dificil observar las luces cuando el sistema está cubierto y en su lugar.

### 24.4.1.1. Modems y cables

Si se encuentra utilizando un modem externo, entonces necesitará por supuesto un cable adecuado. Un cable serie estándar RS-232C debe ser suficiente mientras todas las señales normales sean cableadas:

- Transmitted Data (TD)

- Received Data (RD)

- Request to Send (RTS)

- Clear to Send (CTS)

- Data Set Ready (DSR)

- Data Terminal Ready (DTR)

- Carrier Detect (CD)

- Signal Ground (SG)

FreeBSD necesita las señales RTS y CTS para control de flujo a velocidades mayores a 2400 bps, la señal CD para detectar cuando una llamada ha sido respondida o la línea ha sido colgada, y la señal DTR para reiniciar el modem despues de completar una sesión. Algunos cables son hechos sin incluir todas las señales necesarias, así que si tiene problemas, como cuando una sesión no finaliza cuando la línea es colgada, tal vez el problema se deba al cable.

Como otros sistemas operativos tipo UNIX®, FreeBSD utiliza las señales de hardware para saber cuando una llamada ha sido contestada o una línea ha sido colgada y poder colgar y reiniciar el modem despues de una llamada. FreeBSD evita enviar comandos al modem o esperar por reportes de estado del modem. Si está familiarizado con la conexión de modems una PC funcionando como BBS, tal ves esto parezca extraño.

## 24.4.2. Consideraciones de interfaces serie

FreeBSD soporta interfaces de comunicación NS8250-, NS16450-, NS16550-, y NS16550A-basado en EIA RS-232C (CCITT V.24). Los dispositivos 8250 y 16450 tienen buffers de un solo caracter. El dispositivo 16550 brinda un buffer de 16 caracteres, el cual permite un mejor desempeño del sistema. (Errores en 16550 simple impiden el uso del buffer de 16 caracteres, así que utilice 16550A si es posible). Debido a que los dispositivos de buffer de un solo caracter requieren más trabajo del sistema operativo que los dispotivos de buffer de 16 caracteres, las tarjetas de interfaz serie basadas en 16550A son mayormente preferidas. Si el sistema tiene muchos puertos serie activos o tendrá una carga elevada, las tarjetas basadas en 16550A son mejores para comunicaciones con baja tasa de error.

## 24.4.3. Revisión rápida

Como con las terminales, `init` engendra un proceso `getty` para cada puerto serie configurado para conexiones dial-in. Por ejemplo, si un modem está conectado a `/dev/ttyd0`, el comando `ps ax` podría mostrar esto:

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

Cuando un usuario marca la línea del modem y el modem conecta, la línea CD (Carrier Detect) es reportada por el modem. El kernel nota que se ha detectado una portadora y completa la apertura de `getty` del puerto. `getty` manda un prompt `login:` a la velocidad inicial de línea especificada. `getty` observa si se reciben caracteres válidos, y, en una configuración típica, si encuentra basura (probablemente debido a que la velocidad de conexión del modem es diferente a la velocidad de `getty`), `getty` trata de ajustar la velocidad de la línea hasta que recibe caracteres razonables.

Despues que el usuario entra su nombre de login, `getty` ejecuta `/usr/bin/login`, que completa la entrada preguntando por la contraseña del usuario y entonces inicia el shell del usuario.

## 24.4.4. Archivos de configuración

Existen tres ficheros de configuración del sistema en el directorio `/etc` que probablemente necesitará editar para permitir acceso de dial-up a su sistema FreeBSD. El primero, `/etc/gettytab`, contiene información de configuración para el daemon `/usr/libexec/getty`. El segundo, `/etc/ttys` contiene información que le dice a `/sbin/init` que dispositivos `tty` deben tener procesos `getty` corriendo. Por último, puede incluir comandos de inicialización de puerto en el script `/etc/rc.serial`.

Existen dos escuelas de pensamiento en relación a modems dial-up en UNIX. Un grupo gusta de configurar sus modems y sistemas para que sin importar a que velocidad un usuario remoto marque, la interfaz local RS-232 computadora-a-modem corra a una velocidad fija. El beneficio de esta configuración es que el usuario remoto siempre obtiene un prompt de login del sistema inmediátamente. La desventaja es que el sistema no sabe cual es la tasa de datos verdadera del usuario, así que programas a pantalla completa como Emacs no ajustarán sus métodos de dibujado de pantalla para mejorar sus respuestas en conexiones más lentas.

La otra escuela configura sus modems de interfaz RS-232 para variar su velocidad basado en la velocidad de conexión del usuario remoto. Por ejemplo, conexiones V.32bis (14.4 Kbps) al modem podrían hacer al modem correr su interfaz RS-232 a 19.2 Kbps, mientras que conexiones 2400 bps hacen correr la interfaz RS-232 del modem a 2400 bps. Debido a que `getty` no entiende el reporte de velocidad de conexión de cualquier modem, `getty` brinda un mensaje `login:` a una velocidad inicial y observa los caracteres que regresan en respuesta. Si el usuario recibe basura, se asume que sabe que debe presionar la tecla Enter hasta que reciba un prompt reconocible. Si la tasa de datos no concuerda, `getty` trata todo lo que el usuario escriba como “basura”, trata yendo a la siguiente velocidad y brinda el prompt `login:` de nuevo. Este procedimiento puede continuar hasta el cansancio, pero normalmente solo toma un teclazo o dos antes que el usuario reciba un prompt correcto. Obviamente, esta secuencia de login no parece tan limpia como el anterior método de “velocidad fija”, pero un usuario en una conexión de velocidad baja podría recibir una respuesta interactiva mejor desde programas a pantalla completa.

Esta sección tratará de dar información de configuración balanceada, pero está cargada hacia tener la tasa de datos del modem siguiendo la tasa de conexión.

### 24.4.4.1. `/etc/gettytab`

`/etc/gettytab` es un fichero tipo termcap(5) de información de configuración para getty(8). Por favor vea la página de manual gettytab(5) para información completa del formato del fichero y la lista de capacidades.

#### 24.4.4.1.1. Configuración de velocidad fija

Si está fijando la tasa de comunicación de datos de su modem a una velocidad particular, probablemente no necesitará ningún cambio a `/etc/gettytab`.

#### 24.4.4.1.2. Configuración de velocidad concordante

Necesitará crear una entrada en `/etc/gettytab` para darle información a `getty` acerca de las velocidades que desea usar para su modem. Si tiene un modem 2400 bps, puede probablemente utilizar la entrada existente `D2400`.

    #
    # Fast dialup terminals, 2400/1200/300 rotary (can start either way)
    #
    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:

Si tiene un modem de mayor velocidad, probablemente necesite agregar una entrada en `/etc/gettytab`; aquí está una entrada que puede utilizar para un modem 14.4 Kbps con una velociad de interfaz máxima de 19.2 Kbps:

    #
    # Additions for a V.32bis Modem
    #
    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:

esto resultará en una conexión de 8 bits, sin paridad.

El ejemplo de arriba inicia la tasa de comunicaciones a 19.2 Kbps (para conexiones V.32bis), entonces cicla a través de 9600 bps (para V.32), 2400 bps, 1200 bps, 300 bps, y de vuelta a 19.2 Kbps. El ciclado de la tasa de comunicaciones es implementado con la capacidad `nx=` (“siguiente tabla”). Cada una de las líneas usa una entrada `tc=` (“continuación de tabla”) para recoger el resto de las propiedades “estándar” para una tasa de datos en particular.

Si tiene un modem 28.8 Kbps y/o quiere tomar ventaja de la compresión en un modem 14.4 Kbps, necesita utilizar una tasa de comunicaciones mayor a 19.2 Kbps. Aquí hay un ejemplo de una entrada `gettytab` iniciando a 57.6 Kbps:

    #
    # Additions for a V.32bis or V.34 Modem
    # Starting at 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:

Si tiene un CPU lento o un sistema muy cargado y no tiene puertos serie basados en 16550A, tal vez reciba errores en “`sio`” “silo” a 57.6 Kbps.

### 24.4.4.2. `/etc/ttys`

La configuración del fichero `/etc/ttys` fué cubierto en Ejemplo 24-1. La configuración para modems es similar pero debemos pasar un argumento diferente a `getty` y especificar un tipo diferente de terminal. El formato general tanto para configuración de velocidad fija y velocidad concordante es:

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

El primer componente de la línea de arriba es el fichero de dispositivo especial para esta entrada -- `ttyd0` significa que `/dev/ttyd0` es el fichero que `getty` estará vigilando. El segundo componente `"/usr/libexec/getty `xxx`"` (`xxx` será reemplazado por la capacidad inicial de `gettytab`) es el proceso que `init` ejecutará en el dispositivo. El tercer componente, `dialup`, es el tipo de terminal por omisión. El cuarto parámetro, `on`, le indica a `init` que la línea es operacional. Puede existir un quinto parámetro, `secure`, pero solo debería ser utilizado para terminales que estén físicamente seguras (como la consola del sistema).

El tipo de terminal por omisión (`dialup` en el ejemplo de arriba) puede depender de preferencias locales. `dialup` es el tipo de terminal tradicional por omisión en líneas dial-up para que los usuarios puedan personalizar sus scripts de login para reconocer cuando la terminal es `dialup` y ajustar sus tipos de terminal automáticamente. De toda maneras, el autor encuentra más sencillo especificar en su sitio `vt102` como el tipo de terminal por omisión, puesto que los usuarios solo utilizan emulación VT102 en sus sistemas remotos.

Despues de realizar los cambios a `/etc/ttys`, puede enviar al proceso `init` una señal HUP para que relea el fichero. Puede utilizar el comando

    # kill -HUP 1

para mandar la señal. Si esta es su primera vez instalando el sistema, tal vez quiera esperar hasta que su(s) modem(s) estén configurados y conectados correctamente antes de señalizar a `init`.

#### 24.4.4.2.1. Configuración de velocidad fija

Para una configuración de velocidad fija, su entrada `ttys` necesita tener una entrada de velocidad fija provista en `getty`. Para un modem cuya velocidad de puerto está fijada en 19.2 Kbps, la entrada `ttys` podría verse así:

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

Si su modem está fijado a un velocidad de datos diferente, sustituya el valor apropiado por `std.`velocidad`` en lugar de `std.19200`. Asegúrese de usar un tipo válido listado en `/etc/gettytab`.

#### 24.4.4.2.2. Configuración de velocidad concordante

En una configuración de velocidad concordante su entrada `ttys` necesita referenciar el inicio de la entrada “auto-baud” (sic) en `/etc/gettytab`. Por ejemplo, si agregó la entrada sugerida arriba para un modem con velocidad concordante que inicia a 19.2 Kbps (la entrada `gettytab` conteniendo el punto de inicio `V19200`), su entrada `ttys` podría verse como esta:

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

### 24.4.4.3. `/etc/rc.serial`

Modems de alta velocidad, como V.32, V.32bis, y V.34, necesitan usar control de flujo por hardware (`RTS/CTS`). Puede agregar comandos `stty` a `/etc/rc.serial` para activar la bandera de control de flujo por hardware en el kernel de FreeBSD para los puertos del modem.

Por ejemplo para activar la bandera `termios` `crtscts` de dispositivos de inicialización dial-in y dial-out en el puerto serie #1 (`COM2`), las siguientes líneas pueden agregarse a `/etc/rc.serial`:

    # Serial port initial configuration
    stty -f /dev/ttyid1 crtscts
    stty -f /dev/cuaia1 crtscts

## 24.4.5. Propiedades del modem

Si tiene un modem cuyos parámetros pueden ser activados permanentemente en RAM no volatil, necesitará utilizar un programa de terminal (como Telix en MS-DOS® o `tip` en FreeBSD) para activar los parámetros. Conecte al modem usando la misma velocidad de comunicación como velocidad inicial que `getty` usará y configure la RAM no volatil del modem para que concuerde con estos requerimientos:

- CD activado cuando esté conectado

- DTR activado para operación; tirar DTR cuelga la línea y reinicia el modem

- CTS control de flujo de datos transmitidos

- Deshabilitar control de flujo XON/XOFF

- RTS control de flujo de datos recibidos

- Modo silencioso (sin códigos resultantes)

- Sin eco de comandos

Por favor lea la documentación de su modem para saber que comandos y/o switches DIP necesita proporcionarle.

Pro ejemplo, para activar los parámetros de arriba en un modem U.S. Robotics® Sportster® 14,400 externo, uno podría dar estos comandos al modem:

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

Tal vez quiera también tomar esta oportunidad para ajustar otras propiedades en el modem, como si utilizará compresión V.42bis y/o MNP5.

El modem U.S. Robotics Sportster 14,400 externo también posee switches DIP que necesitan activarse; para otros modems, tal vez pueda utilizar estas propiedades como un ejemplo:

- Switch 1: ARRIBA -- DTR Normal

- Switch 2: N/A (Códigos resultantes verbales/Códigos resultantes numéricos)

- Switch 3: ARRIBA -- Suprimir códigos resultantes

- Switch 4: ABAJO -- No eco, comandos offline

- Switch 5: ARRIBA -- Auto respuesta

- Switch 6: ARRIBA -- Detección de señal Normal

- Switch 7: ARRIBA -- Cargar valores NVRAM por omisión

- Switch 8: N/A (Modo inteligente/Modo tonto)

Códigos resultantes deberían ser deshabilitados o suprimidos para modems dial-up para evitar problemas que pueden ocurrir si `getty` erroneamente ofrece un prompt `login:` a un modem que se encuentra en modo de comandos y el modem hace eco del comando o regresa un código resultante. Esta secuencia puede resultar en una conversación larga y tonta entre `getty` y el modem.

### 24.4.5.1. Configuración de velocidad fija

Para una configuración de velocidad fija necesitará configurar el modem para mantener una tasa de datos constante modem-a-computadora independiente de la tasa de comunicaciones. En un modem U.S. Robotics Sportster 14,400 externo estos comandos fijarán la tasa de datos modem-a-computadora a la velocidad utilizada para pasar los comandos:

    ATZ
    AT&B1&W

### 24.4.5.2. Configuración de velocidad concordante

Para una configuración de velocidad variable necesitará configurar su modem para ajustar la tasa de datos de su puerto serie para que coincida con la tasa de llamada entrante. En un modem U.S. Robotics Sportster 14,400 externo estos comandos fijarán la tasa de corrección de errores de datos a la velocidad usada para pasar los comandos, pero le permite a la tasa del puerto serie variar para conexiones que no corrigen errores:

    ATZ
    AT&B2&W

### 24.4.5.3. Revisando la configuración del modem

La mayoría de los modems de alta velocidad brindan comandos para ver los parámetros actuales de operación del modem en un modo entendible para humanos. En el modem U.S. Robotics Sportster 14,400 externo, el comando `ATI5` despliega los parámetros que están almacenados en la RAM no volatil. Para ver los parámetros reales de operación del modem (influenciado por los parámetros de los switches DIP del modem), utilice el comando `ATZ` y entonces `ATI4`.

Si tiene una marca diferente de modem, revise el manual de su modem para ver como checar doblemente los parámetros de configuración de su modem.

## 24.4.6. Determinando errores

Aquí hay unos cuantos pasos que puede seguir para revisar en sus sistema el modem dial-up.

### 24.4.6.1. Revisando el sistema FreeBSD

Conecte su modem a su sistema FreeBSD, arranque el sistema, y, si su modem tiene luces de indicación de estado, mire si el indicador DTR del modem enciende cuando el prompt `login:` aparece en la consola del sistema -- si enciende, eso debería significar que FreeBSD ha iniciado un proceso `getty` en el puerto de comunicaciones apropiado y está esperando a que el modem acepte la llamada.

Si el indicador DTR no enciende, entre al sistema FreeBSD a travás de la consola y ponga un `ps ax` para ver si FreeBSD está tratando de correr un proceso `getty` en el puerto correcto. Debería ver líneas como estas entre los procesos desplegados:

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

Si ve algo diferente, como esto:

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

y el modem no ha aceptado una llamada todavía, esto significa que `getty` ha completado su apertura en el puerto de comunicaciones. Esto puede indicar un problema con el cableado o un modem mal configurado, debido a que `getty` no podría abrir el puerto de comunicaciones hasta que un CD (detección de señal) sea afirmado por el modem.

si no ve ningún proceso `getty` esperando para abrir el puerto `ttyd`N`` deseado, revise de nuevo sus entradas en `/etc/ttys` para ver si existe algún error ahí. También revise el fichero de log `/var/log/messages` para ver si existe algún mensaje de `init` o de `getty` relacionados a cualquier problema. Si existe cualquier mensaje, revise nuevamente los ficheros de configuración `/etc/ttys` y `/etc/gettytab`, así como los ficheros especiales de dispositivo `/dev/ttydN`, por cualquier error, entradas faltantes, o ficheros especiales de dispositivo faltantes.

### 24.4.6.2. Trate de llamar

Trate de llamar al sistema; asegúrese de usar 8 bits, sin paridad, y 1 bit de parada en el sistema remoto. Si no obtiene un prompt inmediatamente, o recibe basura, trate presionando Enter una vez por segundo. Si continua sin ver un prompt de `login:` despues de un tiempo, trate enviando un `BREAK`. Si está usando un modem de alta velocidad para realizar la marcación, trate marcando de nuevo despues de fijar la velociad de interfaz del modem (por medio de `AT&B1` en un modem U.S. Robotics Sportster, por ejemplo).

Si todavía no puede obtener un prompt de `login:`, revise `/etc/gettytab` de nuevo y revise nuevamente que

- El nombre de capacidad inicial especificado en `/etc/ttys` para la línea coincida con un nombre de una capacidad en `/etc/gettytab`

- Cada entrada `nx=` coincida con otro nombre de capacidad de `gettytab`

- Cada entrada `tc=` coincida con otro nombre de capacidad de `gettytab`

Si marca pero el modem en el sistema FreeBSD no contesta, asegúrese que el modem está configurado para contestar el teléfono cuando DTR sea detectado. Si el modem parece estar configurado correctamente, verifique que DTR sea detectado revisando las luces indicadoras del modem (si tiene alguna).

Si ha revisado todo varias veces y todavía no funciona, tome un descanso y regrese a eso depues. Si todavía continua sin funcionar, tal vez puede mandar un correo electrónico a lista de correo para preguntas generales sobre FreeBSD describiendo su modem y su problema, y las buenas personas en la lista tratarán de ayudarle.

Anterior | Inicio | Siguiente
Terminales | Subir | Servicio dial-out

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.