Domain registration & domain search service from just
Webhosting service for single or multiple domain names at affordable price.
Back to Index
Contributed by Guy Helmer. Additions by Sean Kelly.
Configuring your FreeBSD system for dial-in service is very similar to connecting
terminals except that you are dealing with modems instead of terminals.
External modems seem to be more convenient for dial-up, because external modems often
can be semi-permanently configured via parameters stored in non-volatile RAM and they
usually provide lighted indicators that display the state of important RS-232 signals.
Blinking lights impress visitors, but lights are also very useful to see whether a modem
is operating properly.
Internal modems usually lack non-volatile RAM, so their configuration may be limited
only to setting DIP switches. If your internal modem has any signal indicator lights, it
is probably difficult to view the lights when the system's cover is in place.
If you are using an external modem, then you will of course need the proper cable. A
standard RS-232C serial cable should suffice as long as all of the normal signals are
FreeBSD needs the RTS and CTS signals for flow-control at speeds above 2400 bps, the
CD signal to detect when a call has been answered or
the line has been hung up, and the DTR signal to reset
the modem after a session is complete. Some cables are wired without all of the needed
signals, so if you have problems, such as a login session not going away when the line
hangs up, you may have a problem with your cable.
Like other UNIX® like operating systems, FreeBSD
uses the hardware signals to find out when a call has been answered or a line has been
hung up and to hangup and reset the modem after a call. FreeBSD avoids sending commands
to the modem or watching for status reports from the modem. If you are familiar with
connecting modems to PC-based bulletin board systems, this may seem awkward.
FreeBSD supports NS8250-, NS16450-, NS16550-, and NS16550A-based EIA RS-232C (CCITT
V.24) communications interfaces. The 8250 and 16450 devices have single-character
buffers. The 16550 device provides a 16-character buffer, which allows for better system
performance. (Bugs in plain 16550's prevent the use of the 16-character buffer, so use
16550A's if possible). Because single-character-buffer devices require more work by the
operating system than the 16-character-buffer devices, 16550A-based serial interface
cards are much preferred. If the system has many active serial ports or will have a heavy
load, 16550A-based cards are better for low-error-rate communications.
As with terminals, init spawns a getty process for each configured serial port for dial-in
connections. For example, if a modem is attached to /dev/ttyd0,
the command ps ax might show this:
4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyd0
When a user dials the modem's line and the modems connect, the CD (Carrier Detect) line is reported by the modem. The kernel
notices that carrier has been detected and completes getty's
open of the port. getty sends a login: prompt at the specified initial line speed. getty watches to see if legitimate characters are received, and, in
a typical configuration, if it finds junk (probably due to the modem's connection speed
being different than getty's speed), getty tries adjusting the line speeds until it receives reasonable
After the user enters his/her login name, getty executes /usr/bin/login, which completes the login by asking for the user's
password and then starting the user's shell.
There are three system configuration files in the /etc
directory that you will probably need to edit to allow dial-up access to your FreeBSD
system. The first, /etc/gettytab, contains configuration
information for the /usr/libexec/getty daemon. Second, /etc/ttys holds information that tells /sbin/init what tty devices should have
getty processes running on them. Lastly, you can place port
initialization commands in the /etc/rc.serial script.
There are two schools of thought regarding dial-up modems on UNIX. One group likes to configure their modems and systems so
that no matter at what speed a remote user dials in, the local computer-to-modem RS-232
interface runs at a locked speed. The benefit of this configuration is that the remote
user always sees a system login prompt immediately. The downside is that the system does
not know what a user's true data rate is, so full-screen programs like Emacs will not
adjust their screen-painting methods to make their response better for slower
The other school configures their modems' RS-232 interface to vary its speed based on
the remote user's connection speed. For example, V.32bis (14.4 Kbps) connections to
the modem might make the modem run its RS-232 interface at 19.2 Kbps, while
2400 bps connections make the modem's RS-232 interface run at 2400 bps. Because
getty does not understand any particular modem's connection
speed reporting, getty gives a login: message at an initial speed and watches the characters that
come back in response. If the user sees junk, it is assumed that they know they should
press the Enter key until they see a recognizable prompt. If
the data rates do not match, getty sees anything the user types
as ``junk'', tries going to the next speed and gives the login: prompt again. This procedure can continue ad nauseam, but
normally only takes a keystroke or two before the user sees a good prompt. Obviously,
this login sequence does not look as clean as the former ``locked-speed'' method, but a
user on a low-speed connection should receive better interactive response from
This section will try to give balanced configuration information, but is biased
towards having the modem's data rate follow the connection rate.
/etc/gettytab is a termcap(5)-style file
of configuration information for getty(8). Please see
the gettytab(5) manual
page for complete information on the format of the file and the list of capabilities.
If you are locking your modem's data communications rate at a particular speed, you
probably will not need to make any changes to /etc/gettytab.
You will need to set up an entry in /etc/gettytab to give
getty information about the speeds you wish to use for your
modem. If you have a 2400 bps modem, you can probably use the existing D2400 entry.
# Fast dialup terminals, 2400/1200/300 rotary (can start either way)
If you have a higher speed modem, you will probably need to add an entry in /etc/gettytab; here is an entry you could use for a 14.4 Kbps
modem with a top interface speed of 19.2 Kbps:
# Additions for a V.32bis Modem
um|V300|High Speed Modem at 300,8-bit:\
un|V1200|High Speed Modem at 1200,8-bit:\
uo|V2400|High Speed Modem at 2400,8-bit:\
up|V9600|High Speed Modem at 9600,8-bit:\
uq|V19200|High Speed Modem at 19200,8-bit:\
This will result in 8-bit, no parity connections.
The example above starts the communications rate at 19.2 Kbps (for a V.32bis
connection), then cycles through 9600 bps (for V.32), 2400 bps, 1200 bps,
300 bps, and back to 19.2 Kbps. Communications rate cycling is implemented with
the nx= (``next table'') capability. Each of the lines uses a
tc= (``table continuation'') entry to pick up the rest of the
``standard'' settings for a particular data rate.
If you have a 28.8 Kbps modem and/or you want to take advantage of compression on
a 14.4 Kbps modem, you need to use a higher communications rate than 19.2 Kbps.
Here is an example of a gettytab entry starting a
# Additions for a V.32bis or V.34 Modem
# Starting at 57.6 Kbps
vm|VH300|Very High Speed Modem at 300,8-bit:\
vn|VH1200|Very High Speed Modem at 1200,8-bit:\
vo|VH2400|Very High Speed Modem at 2400,8-bit:\
vp|VH9600|Very High Speed Modem at 9600,8-bit:\
vq|VH57600|Very High Speed Modem at 57600,8-bit:\
If you have a slow CPU or a heavily loaded system and do not have 16550A-based serial
ports, you may receive ``sio'' ``silo'' errors at
Configuration of the /etc/ttys file was covered in Example 17-1. Configuration for modems is similar but we
must pass a different argument to getty and specify a different
terminal type. The general format for both locked-speed and matching-speed configurations
ttyd0 "/usr/libexec/getty xxx" dialup on
The first item in the above line is the device special file for this entry -- ttyd0 means /dev/ttyd0 is the file that
this getty will be watching. The second item, "/usr/libexec/getty xxx" (xxx will be replaced by the initial gettytab capability) is the process init
will run on the device. The third item, dialup, is the default
terminal type. The fourth parameter, on, indicates to init that the line is operational. There can be a fifth parameter,
secure, but it should only be used for terminals which are
physically secure (such as the system console).
The default terminal type (dialup in the example above) may
depend on local preferences. dialup is the traditional default
terminal type on dial-up lines so that users may customize their login scripts to notice
when the terminal is dialup and automatically adjust their
terminal type. However, the author finds it easier at his site to specify vt102 as the default terminal type, since the users just use VT102
emulation on their remote systems.
After you have made changes to /etc/ttys, you may send the
init process a HUP signal to
re-read the file. You can use the command
# kill -HUP 1
to send the signal. If this is your first time setting up the system, you may want to
wait until your modem(s) are properly configured and connected before signaling init.
For a locked-speed configuration, your ttys entry needs to
have a fixed-speed entry provided to getty. For a modem whose
port speed is locked at 19.2 Kbps, the ttys entry might
look like this:
ttyd0 "/usr/libexec/getty std.19200" dialup on
If your modem is locked at a different data rate, substitute the appropriate value for
std.speed instead of std.19200. Make sure that you use a valid type listed in /etc/gettytab.
In a matching-speed configuration, your ttys entry needs to
reference the appropriate beginning ``auto-baud'' (sic) entry in /etc/gettytab. For example, if you added the above suggested entry
for a matching-speed modem that starts at 19.2 Kbps (the gettytab entry containing the V19200
starting point), your ttys entry might look like this:
ttyd0 "/usr/libexec/getty V19200" dialup on
High-speed modems, like V.32, V.32bis, and V.34 modems, need to use hardware (RTS/CTS) flow control. You can add stty
commands to /etc/rc.serial to set the hardware flow control
flag in the FreeBSD kernel for the modem ports.
For example to set the termios flag crtscts on serial port #1's (COM2)
dial-in and dial-out initialization devices, the following lines could be added to /etc/rc.serial:
# Serial port initial configuration
stty -f /dev/ttyid1 crtscts
stty -f /dev/cuaia1 crtscts
If you have a modem whose parameters may be permanently set in non-volatile RAM, you
will need to use a terminal program (such as Telix under MS-DOS® or tip under FreeBSD) to
set the parameters. Connect to the modem using the same communications speed as the
initial speed getty will use and configure the modem's
non-volatile RAM to match these requirements:
CD asserted when connected
DTR asserted for operation; dropping DTR hangs up
line and resets modem
CTS transmitted data flow control
Disable XON/XOFF flow control
RTS received data flow control
Quiet mode (no result codes)
No command echo
Please read the documentation for your modem to find out what commands and/or DIP
switch settings you need to give it.
For example, to set the above parameters on a U.S.
Robotics® Sportster® 14,400 external modem,
one could give these commands to the modem:
You might also want to take this opportunity to adjust other settings in the modem,
such as whether it will use V.42bis and/or MNP5 compression.
The U.S. Robotics Sportster 14,400 external modem also has some DIP switches that
need to be set; for other modems, perhaps you can use these settings as an example:
Switch 1: UP -- DTR Normal
Switch 2: N/A (Verbal Result Codes/Numeric Result Codes)
Switch 3: UP -- Suppress Result Codes
Switch 4: DOWN -- No echo, offline commands
Switch 5: UP -- Auto Answer
Switch 6: UP -- Carrier Detect Normal
Switch 7: UP -- Load NVRAM Defaults
Switch 8: N/A (Smart Mode/Dumb Mode)
Result codes should be disabled/suppressed for dial-up modems to avoid problems that
can occur if getty mistakenly gives a login: prompt to a modem that is in command mode and the modem
echoes the command or returns a result code. This sequence can result in a extended,
silly conversation between getty and the modem.
For a locked-speed configuration, you will need to configure the modem to maintain a
constant modem-to-computer data rate independent of the communications rate. On a U.S. Robotics Sportster 14,400
external modem, these commands will lock the modem-to-computer data rate at the speed
used to issue the commands:
For a variable-speed configuration, you will need to configure your modem to adjust
its serial port data rate to match the incoming call rate. On a U.S. Robotics Sportster 14,400
external modem, these commands will lock the modem's error-corrected data rate to the
speed used to issue the commands, but allow the serial port rate to vary for
Most high-speed modems provide commands to view the modem's current operating
parameters in a somewhat human-readable fashion. On the U.S.
Robotics Sportster 14,400 external modems, the
command ATI5 displays the settings that are stored in the
non-volatile RAM. To see the true operating parameters of the modem (as influenced by the
modem's DIP switch settings), use the commands ATZ and then ATI4.
If you have a different brand of modem, check your modem's manual to see how to
double-check your modem's configuration parameters.
Here are a few steps you can follow to check out the dial-up modem on your system.
Hook up your modem to your FreeBSD system, boot the system, and, if your modem has
status indication lights, watch to see whether the modem's DTR indicator lights when the login: prompt appears on the system's console -- if it lights up,
that should mean that FreeBSD has started a getty process on the
appropriate communications port and is waiting for the modem to accept a call.
If the DTR indicator does not light, login to the
FreeBSD system through the console and issue a ps ax to see if
FreeBSD is trying to run a getty process on the correct port.
You should see lines like these among the processes displayed:
114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd0
115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd1
If you see something different, like this:
114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyd0
and the modem has not accepted a call yet, this means that getty has completed its open on the communications port. This could
indicate a problem with the cabling or a mis-configured modem, because getty should not be able to open the communications port until
CD (carrier detect) has been asserted by the
If you do not see any getty processes waiting to open the
desired ttydN port, double-check
your entries in /etc/ttys to see if there are any mistakes
there. Also, check the log file /var/log/messages to see if
there are any log messages from init or getty regarding any problems. If there are any messages,
triple-check the configuration files /etc/ttys and /etc/gettytab, as well as the appropriate device special files /dev/ttydN, for any mistakes, missing entries, or missing device
Try dialing into the system; be sure to use 8 bits, no parity, and 1 stop bit on the
remote system. If you do not get a prompt right away, or get garbage, try pressing Enter about once per second. If you still do not see a login: prompt after a while, try sending a BREAK. If you are using a high-speed modem to do the dialing, try
dialing again after locking the dialing modem's interface speed (via AT&B1 on a U.S. Robotics Sportster modem, for example).
If you still cannot get a login: prompt, check /etc/gettytab again and double-check that
The initial capability name specified in /etc/ttys for the
line matches a name of a capability in /etc/gettytab
Each nx= entry matches another gettytab capability name
Each tc= entry matches another gettytab capability name
If you dial but the modem on the FreeBSD system will not answer, make sure that the
modem is configured to answer the phone when DTR is
asserted. If the modem seems to be configured correctly, verify that the DTR line is asserted by checking the modem's indicator lights
(if it has any).
If you have gone over everything several times and it still does not work, take a
break and come back to it later. If it still does not work, perhaps you can send an
electronic mail message to the FreeBSD
general questions mailing list describing your modem and your problem, and the good
folks on the list will try to help.
© 2002-2004 Active-Venture.com
documentation is provided only for the benefits of our website hosting customers.
For authoritative source of the documentation, please refer to http://www.freebsd.org