mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-12-30 15:38:06 +01:00
1130b656e5
This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long. Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
811 lines
31 KiB
Plaintext
811 lines
31 KiB
Plaintext
<!-- This is an SGML document in the linuxdoc DTD of the Tutorial for
|
|
Configuring a FreeBSD for Dialup Services by Guy Helmer.
|
|
$FreeBSD$
|
|
|
|
<!DOCTYPE linuxdoc PUBLIC "-//Linux//DTD linuxdoc//EN">
|
|
|
|
|
|
<article>
|
|
|
|
<title>
|
|
Configuring FreeBSD for Dialup Services
|
|
<author>Guy Helmer, <tt/ghelmer@alpha.dsu.edu/
|
|
<date>v0.1, 28 March 1995
|
|
<abstract>
|
|
|
|
-->
|
|
|
|
<sect><heading>Dialin service<label id="dialup"></heading>
|
|
|
|
<p><em>Contributed by &a.ghelmer;.</em>
|
|
|
|
This document provides suggestions for configuring a FreeBSD system to
|
|
handle dialup modems. This document is written based on the author's
|
|
experience with FreeBSD versions 1.0, 1.1, and 1.1.5.1 (and experience
|
|
with dialup modems on other UNIX-like operating systems); however,
|
|
this document may not answer all of your questions or provide examples
|
|
specific enough to your environment. The author cannot be responsible
|
|
if you damage your system or lose data due to attempting to follow the
|
|
suggestions here.
|
|
|
|
<sect1><heading>Prerequisites<label id="dialup:prereqs"></>
|
|
<p>
|
|
|
|
To begin with, the author assumes you have some basic knowledge of
|
|
FreeBSD. You need to have FreeBSD installed, know how to edit files
|
|
in a UNIX-like environment, and how to look up manual pages on the
|
|
system. As discussed below, you will need certain versions of FreeBSD,
|
|
and knowledge of some terminology & modem and cabling.
|
|
|
|
<sect2><heading>FreeBSD Version</heading>
|
|
<p>
|
|
|
|
First, it is assumed that you are using FreeBSD version 1.1 or higher
|
|
(including versions 2.x). FreeBSD version 1.0 included two different
|
|
serial drivers, which complicates the situation. Also, the serial
|
|
device driver (<tt/sio/) has improved in every release of FreeBSD, so
|
|
more recent versions of FreeBSD are assumed to have better and more
|
|
efficient drivers than earlier versions.
|
|
|
|
<sect2><heading>Terminology</heading>
|
|
<p>
|
|
|
|
A quick rundown of terminology:
|
|
|
|
<descrip>
|
|
|
|
<tag/bps/ Bits per Second - the rate at which data is transmitted
|
|
|
|
<tag/DTE/ Data Terminal Equipment - for example, your computer
|
|
|
|
<tag/DCE/ Data Communications Equipment - your modem
|
|
|
|
<tag/RS-232/ EIA standard for serial communications via hardware
|
|
|
|
</descrip>
|
|
|
|
If you need more information about these terms and data communications
|
|
in general, the author remembers reading that <em/The RS-232 Bible/
|
|
(anybody have an ISBN?) is a good reference.
|
|
|
|
When talking about communications data rates, the author does not use
|
|
the term <bf/baud/. Baud refers to the number of electrical state
|
|
transitions that may be made in a period of time, while <bf/bps/ (bits
|
|
per second) is the ``correct'' term to use (at least it does not seem
|
|
to bother the curmudgeons quite a much).
|
|
|
|
<sect2><heading>External vs. Internal Modems</heading>
|
|
<p>
|
|
|
|
External modems seem to be more convenient for dialup, 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.
|
|
|
|
<sect2><heading>Modems and Cables</heading>
|
|
<p>
|
|
|
|
A background knowledge of these items is assumed
|
|
|
|
<itemize>
|
|
|
|
<item> You know how to connect your modem to your computer so that the
|
|
two can communicate (unless you have an internal modem, which does not
|
|
need such a cable)
|
|
|
|
<item> You are familiar with your modem's command set, or know where
|
|
to look up needed commands
|
|
|
|
<item> You know how to configure your modem (probably via a terminal
|
|
communications program) so you can set the non-volatile RAM
|
|
parameters
|
|
|
|
</itemize>
|
|
|
|
The first, connecting your modem, is usually simple - most
|
|
straight-through serial cables work without any problems. You need to
|
|
have a cable with appropriate connectors (DB-25 or DB-9, male or
|
|
female) on each end, and the cable must be a DCE-to-DTE cable with
|
|
these signals wired:
|
|
|
|
<itemize>
|
|
<item> Transmitted Data (<tt/SD/)
|
|
<item> Received Data (<tt/RD/)
|
|
<item> Request to Send (<tt/RTS/)
|
|
<item> Clear to Send (<tt/CTS/)
|
|
<item> Data Set Ready (<tt/DSR/)
|
|
<item> Data Terminal Ready (<tt/DTR/)
|
|
<item> Carrier Detect (<tt/CD/)
|
|
<item> Signal Ground (<tt/SG/)
|
|
</itemize>
|
|
|
|
FreeBSD needs the <tt/RTS/ and <tt/CTS/ signals for flow-control at
|
|
speeds above 2400bps, the <tt/CD/ signal to detect when a call has
|
|
been answered or the line has been hung up, and the <tt/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.
|
|
|
|
The second prerequisite depends on the modem(s) you use. If you do not
|
|
know your modem's command set by heart, you will need to have the
|
|
modem's reference book or user's guide handy. Sample commands for USR
|
|
Sportster 14,400 external modems will be given, which you may be able
|
|
to use as a reference for your own modem's commands.
|
|
|
|
Lastly, you will need to know how to setup your modem so that it will
|
|
work well with FreeBSD. 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.
|
|
|
|
<sect2><heading>Serial Interface Considerations</heading>
|
|
<p>
|
|
|
|
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 prefered. If
|
|
the system has many active serial ports or will have a heavy load,
|
|
16550A-based cards are better for low-error-rate communications.
|
|
|
|
<sect1><heading>Quick Overview</heading>
|
|
<p>
|
|
|
|
Here is the process that FreeBSD follows to accept dialup logins. A
|
|
<tt/getty/ process, spawned by <tt/init/, patiently waits to open the
|
|
assigned serial port (<tt>/dev/ttyd0</tt>, for our example). The
|
|
command <tt/ps ax/ might show this:
|
|
|
|
<tscreen><verb>
|
|
4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyd0
|
|
</verb></tscreen>
|
|
|
|
When a user dials the modem's line and the modems connect, the <tt/CD/
|
|
line is asserted by the modem. The kernel notices that carrier has
|
|
been detected and completes <tt/getty/'s open of the port. <tt/getty/
|
|
sends a <tt/login:/ prompt at the specified initial line speed.
|
|
<tt/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 <tt/getty/'s speed),
|
|
<tt/getty/ tries adjusting the line speeds until it receives
|
|
reasonable characters.
|
|
|
|
We hope <tt/getty/ finds the correct speed and the user sees a
|
|
<tt/login:/ prompt. After the user enters his/her login name,
|
|
<tt/getty/ executes <tt>/usr/bin/login</tt>, which completes the login
|
|
by asking for the user's password and then starting the user's shell.
|
|
|
|
Let's dive into the configuration...
|
|
|
|
<sect1><heading>Kernel Configuration</heading>
|
|
<p>
|
|
|
|
FreeBSD kernels typically come prepared to search for four serial
|
|
ports, known in the PC-DOS world as <tt/COM1:/, <tt/COM2:/,
|
|
<tt/COM3:/, and <tt/COM4:/. FreeBSD can presently also handle
|
|
``dumb'' multiport serial interface cards, such as the Boca Board
|
|
1008 and 2016 (please see the manual page <tt/sio(4)/ for kernel
|
|
configuration information if you have a multiport serial card). The
|
|
default kernel only looks for the standard COM ports, though.
|
|
|
|
To see if your kernel recognizes any of your serial ports, watch for
|
|
messages while the kernel is booting, or use the
|
|
<tt>/sbin/dmesg</tt> command to replay the kernel's boot messages. In
|
|
particular, look for messages that start with the characters <tt/sio/.
|
|
Hint: to view just the messages that have the word <tt/sio/, use the
|
|
command:
|
|
|
|
<tscreen><verb>
|
|
/sbin/dmesg | grep 'sio'
|
|
</verb></tscreen>
|
|
|
|
For example, on a system with four serial ports, these are the
|
|
serial-port specific kernel boot messages:
|
|
|
|
<tscreen><verb>
|
|
sio0 at 0x3f8-0x3ff irq 4 on isa
|
|
sio0: type 16550A
|
|
sio1 at 0x2f8-0x2ff irq 3 on isa
|
|
sio1: type 16550A
|
|
sio2 at 0x3e8-0x3ef irq 5 on isa
|
|
sio2: type 16550A
|
|
sio3 at 0x2e8-0x2ef irq 9 on isa
|
|
sio3: type 16550A
|
|
</verb></tscreen>
|
|
|
|
If your kernel does not recognize all of your serial ports, you will
|
|
probably need to configure a custom FreeBSD kernel for your system.
|
|
|
|
Please see the BSD System Manager's Manual chapter on ``Building
|
|
Berkeley Kernels with Config'' [the source for which is in
|
|
<tt>/usr/src/share/doc/smm</tt>] and ``FreeBSD Configuration
|
|
Options'' [in <tt>/sys/conf/options</tt> and in
|
|
<tt>/sys/<em>arch</em>/conf/options.<em>arch</em></tt>, with
|
|
<em>arch</em> for example being <tt>i386</tt>] for more
|
|
information on configuring and building kernels. You may have to
|
|
unpack the kernel source distribution if have not installed the system
|
|
sources already (<tt>srcdist/srcsys.??</tt> in FreeBSD 1.1,
|
|
<tt>srcdist/sys.??</tt> in FreeBSD 1.1.5.1, or the entire source
|
|
distribution in FreeBSD 2.0) to be able to configure and build
|
|
kernels.
|
|
|
|
Create a kernel configuration file for your system (if you have not
|
|
already) by <tt/cd/ing to <tt>/sys/i386/conf</tt>. Then, if you are
|
|
creating a new custom configuration file, copy the file GENERICAH (or
|
|
GENERICBT, if you have a BusTek SCSI controller on FreeBSD 1.x) to
|
|
<em/YOURSYS/, where <em/YOURSYS/ is the name of your system, but in
|
|
upper-case letters. Edit the file, and change the device lines:
|
|
|
|
<tscreen><verb>
|
|
device sio0 at isa? port "IO_COM1" tty irq 4 vector siointr
|
|
device sio1 at isa? port "IO_COM2" tty irq 3 vector siointr
|
|
device sio2 at isa? port "IO_COM3" tty irq 5 vector siointr
|
|
device sio3 at isa? port "IO_COM4" tty irq 9 vector siointr
|
|
</verb></tscreen>
|
|
|
|
You can comment-out or completely remove lines for devices you do not
|
|
have. If you have a multiport serial board, such as the Boca Board
|
|
BB2016, please see the <tt/sio(4)/ man page for complete information
|
|
on how to write configuration lines for multiport boards. Be careful
|
|
if you are using a configuration file that was previously used for a
|
|
different version of FreeBSD because the device flags have changed
|
|
between versions.
|
|
|
|
Note that <tt/port "IO_COM1"/ is a substitution for <tt/port 0x3f8/,
|
|
<tt/IO_COM2/ is <tt/0x2f8/, <tt/IO_COM3/ is <tt/0x3e8/, and
|
|
<tt/IO_COM4/ is <tt/0x2e8/, which are fairly common port addresses for
|
|
their respective serial ports; interrupts 4, 3, 5, and 9 are fairly
|
|
common interrupt request lines. Also note that regular serial ports
|
|
<bf>cannot</bf> share interrupts on ISA-bus PCs (multiport boards have
|
|
on-board electronics that allow all the 16550A's on the board to share
|
|
one or two interrupt request lines).
|
|
|
|
When you are finished adjusting the kernel configuration file, use the
|
|
program <tt/config/ as documented in ``Building Berkeley Kernels with
|
|
Config'' and the <tt/config(8)/ manual page to prepare a kernel
|
|
building directory, then build, install, and test the new kernel.
|
|
|
|
<sect1><heading>Device Special Files</heading>
|
|
<p>
|
|
|
|
Most devices in the kernel are accessed through ``device special
|
|
files'', which are located in the <tt>/dev</tt> directory. The
|
|
<tt/sio/ devices are accessed through the <tt>/dev/ttyd?</tt>
|
|
(dial-in) and <tt>/dev/cua0?</tt> (call-out) devices. On FreeBSD
|
|
version 1.1.5 and higher, there are also initialization devices
|
|
(<tt>/dev/ttyid?</tt> and <tt>/dev/cuai0?</tt>) and locking devices
|
|
(<tt>/dev/ttyld?</tt> and <tt>/dev/cual0?</tt>). The initialization
|
|
devices are used to initialize communications port parameters each
|
|
time a port is opened, such as <tt>crtscts</tt> for modems which use
|
|
<tt>CTS/RTS</tt> signaling for flow control. The locking devices are
|
|
used to lock flags on ports to prevent users or programs changing
|
|
certain parameters; see the manual pages <tt/termios(4)/, <tt/sio(4)/,
|
|
and <tt/stty(1)/ for information on the terminal settings, locking
|
|
& initializing devices, and setting terminal options,
|
|
respectively.
|
|
|
|
<sect2><heading>Making Device Special Files</heading>
|
|
<p>
|
|
|
|
A shell script called <tt/MAKEDEV/ in the <tt>/dev</tt> directory
|
|
manages the device special files. (The manual page for
|
|
<tt/MAKEDEV(8)/ on FreeBSD 1.1.5 is fairly bogus in its discussion of
|
|
<tt/COM/ ports, so ignore it.) To use <tt/MAKEDEV/ to make dialup
|
|
device special files for <tt/COM1:/ (port 0), <tt/cd/ to <tt>/dev</tt>
|
|
and issue the command <tt/MAKEDEV ttyd0/. Likewise, to make dialup
|
|
device special files for <tt/COM2:/ (port 1), use <tt/MAKEDEV ttyd1/.
|
|
|
|
<tt/MAKEDEV/ not only creates the <tt>/dev/ttyd?</tt> device special
|
|
files, but also creates the <tt>/dev/cua0?</tt> (and all of the
|
|
initializing and locking special files under FreeBSD 1.1.5 and up) and
|
|
removes the hardwired terminal special file <tt>/dev/tty0?</tt>, if it
|
|
exists.
|
|
|
|
After making new device special files, be sure to check the
|
|
permissions on the files (especially the <tt>/dev/cua*</tt> files) to
|
|
make sure that only users who should have access to those device
|
|
special files can read & write on them - you probably do not want
|
|
to allow your average user to use your modems to dialout. The default
|
|
permissions on the <tt>/dev/cua*</tt> files should be sufficient:
|
|
|
|
<tscreen><verb>
|
|
crw-rw---- 1 uucp dialer 28, 129 Feb 15 14:38 /dev/cua01
|
|
crw-rw---- 1 uucp dialer 28, 161 Feb 15 14:38 /dev/cuai01
|
|
crw-rw---- 1 uucp dialer 28, 193 Feb 15 14:38 /dev/cual01
|
|
</verb></tscreen>
|
|
|
|
These permissions allow the user <tt/uucp/ and users in the group
|
|
<tt/dialer/ to use the call-out devices.
|
|
|
|
<sect1><heading>Configuration Files</heading>
|
|
<p>
|
|
|
|
There are three system configuration files in the <tt>/etc</tt>
|
|
directory that you will probably need to edit to allow dialup access to
|
|
your FreeBSD system. The first, <tt>/etc/gettytab</tt>, contains
|
|
configuration information for the <tt>/usr/libexec/getty</tt> daemon.
|
|
Second, <tt>/etc/ttys</tt> holds information that tells
|
|
<tt>/sbin/init</tt> what <tt/tty/ devices should have <tt/getty/
|
|
processes running on them. Lastly, you can place port initialization
|
|
commands in the <tt>/etc/rc.serial</tt> script if you have FreeBSD
|
|
1.1.5.1 or higher; otherwise, you can initialize ports in the
|
|
<tt>/etc/rc.local</tt> script.
|
|
|
|
There are two schools of thought regarding dialup modems on UNIX. One
|
|
group likes to configure their modems and system 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
|
|
connections.
|
|
|
|
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 <tt/getty/ does not
|
|
understand any particular modem's connection speed reporting,
|
|
<tt/getty/ gives a <tt/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
|
|
<tt><Enter></tt> key until they see a recognizable prompt. If
|
|
the data rates do not match, <tt/getty/ sees anything the user types as
|
|
``junk'', tries going to the next speed and gives the <tt/login:/
|
|
prompt again. This procedure can continue ad nauseum, 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 full-screen programs.
|
|
|
|
The author will try to give balanced configuration information, but is
|
|
biased towards having the modem's data rate follow the connection
|
|
rate.
|
|
|
|
<sect2><heading>/etc/gettytab</heading>
|
|
<p>
|
|
|
|
<tt>/etc/gettytab</tt> is a <tt/termcap(5)/-style file of
|
|
configuration information for <tt/getty(8)/. Please see the
|
|
<tt/gettytab(4)/ manual page for complete information on the format of
|
|
the file and the list of capabilities.
|
|
|
|
<sect3><heading>Locked-Speed Config</heading>
|
|
<p>
|
|
|
|
If you are locking your modem's data communications rate at a
|
|
particular speed, you probably will not need to make any changes to
|
|
<tt>/etc/gettytab</tt>.
|
|
|
|
<sect3><heading>Matching-Speed Config</heading>
|
|
<p>
|
|
|
|
You will need to setup an entry in <tt>/etc/gettytab</tt> to give
|
|
<tt/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 <tt/D2400/ entry. This entry already exists in the FreeBSD
|
|
1.1.5.1 <tt/gettytab/ file, so you do not need to add it unless it is
|
|
missing under your version of FreeBSD:
|
|
|
|
<tscreen><verb>
|
|
#
|
|
# 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:
|
|
</verb></tscreen>
|
|
|
|
If you have a higher speed modem, you will probably need to add an entry
|
|
in <tt>/etc/gettytab</tt>; here is an entry you could use for a 14.4
|
|
Kbps modem with a top interface speed of 19.2 Kbps:
|
|
|
|
<tscreen><verb>
|
|
#
|
|
# 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:
|
|
</verb></tscreen>
|
|
|
|
On FreeBSD 1.1.5 and later, this will result in 8-bit, no parity
|
|
connections. Under FreeBSD 1.1, add <tt/:np:/ parameters to the
|
|
<tt>std.<em/xxx/</tt> entries at the top of the file for 8 bits, no
|
|
parity; otherwise, the default is 7 bits, even parity.
|
|
|
|
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 <tt/nx=/ (<bf/next table/) capability.
|
|
Each of the lines uses a <tt/tc=/ (<bf/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
|
|
<tt/gettytab/ entry starting a 57.6 Kbps:
|
|
|
|
<tscreen><verb>
|
|
#
|
|
# 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:
|
|
</verb></tscreen>
|
|
|
|
If you have a slow CPU or a heavily loaded system and you do not have
|
|
16550A-based serial ports, you may receive sio ``silo'' errors at 57.6
|
|
Kbps.
|
|
|
|
<sect2><heading>/etc/ttys<label id="dialup:ttys"></heading>
|
|
<p>
|
|
|
|
<tt>/etc/ttys</tt> is the list of <tt/ttys/ for <tt/init/ to monitor.
|
|
<tt>/etc/ttys</tt> also provides security information to <tt/login/
|
|
(user <tt/root/ may only login on ttys marked <tt/secure/). See the
|
|
manual page for <tt/ttys(5)/ for more information.
|
|
|
|
You will need to either modify existing lines in <tt>/etc/ttys</tt> or
|
|
add new lines to make <tt/init/ run <tt/getty/ processes automatically
|
|
on your new dialup ports. The general format of the line will be the
|
|
same, whether you are using a locked-speed or matching-speed
|
|
configuration:
|
|
|
|
<tscreen><verb>
|
|
ttyd0 "/usr/libexec/getty xxx" dialup on
|
|
</verb></tscreen>
|
|
|
|
The first item in the above line is the device special file for this
|
|
entry - <tt/ttyd0/ means <tt>/dev/ttyd0</tt> is the file that this
|
|
<tt/getty/ will be watching. The second item, <tt>"/usr/libexec/getty
|
|
<em/xxx/"</tt> (<em/xxx/ will be replaced by the initial <tt/gettytab/
|
|
capability) is the process <tt/init/ will run on the device. The
|
|
third item, <tt/dialup/, is the default terminal type. The fourth
|
|
parameter, <tt/on/, indicates to <tt/init/ that the line is
|
|
operational. There can be a fifth parameter, <tt>secure</tt>, but it
|
|
should only be used for terminals which are physically secure (such as
|
|
the system console).
|
|
|
|
The default terminal type (<tt/dialup/ in the example above) may
|
|
depend on local preferences. <tt/dialup/ is the traditional default
|
|
terminal type on dialup lines so that users may customize their login
|
|
scripts to notice when the terminal is <tt/dialup/ and automatically
|
|
adjust their terminal type. However, the author finds it easier at
|
|
his site to specify <tt/vt102/ as the default terminal type, since the
|
|
users just use VT102 emulation on their remote systems.
|
|
|
|
After you have made changes to <tt>/etc/ttys</tt>, you may send the
|
|
<tt/init/ process a <tt/HUP/ signal to re-read the file. You can use
|
|
the command
|
|
|
|
<tscreen><verb>
|
|
kill -1 1
|
|
</verb></tscreen>
|
|
|
|
to send the signal. If this is your first time setting up the system,
|
|
though, you may want to wait until your modem(s) are properly
|
|
configured and connected before signaling <tt/init/.
|
|
|
|
<sect3><heading>Locked-Speed Config</heading>
|
|
<p>
|
|
|
|
For a locked-speed configuration, your <tt/ttys/ entry needs to
|
|
have a fixed-speed entry provided to <tt/getty/. For a modem whose
|
|
port speed is locked at 19.2 Kbps, the <tt/ttys/ entry might look like
|
|
this:
|
|
|
|
<tscreen><verb>
|
|
ttyd0 "/usr/libexec/getty std.19200" dialup on
|
|
</verb></tscreen>
|
|
|
|
If your modem is locked at a different data rate, substitute the
|
|
appropriate name for the <tt>std.<em/speed/</tt> entry for
|
|
<tt/std.19200/ from <tt>/etc/gettytab</tt> for your modem's data rate.
|
|
|
|
<sect3><heading>Matching-Speed Config</heading>
|
|
<p>
|
|
|
|
In a matching-speed configuration, your <tt/ttys/ entry needs to
|
|
reference the appropriate beginning ``auto-baud'' (sic) entry in
|
|
<tt>/etc/gettytab</tt>. For example, if you added the above suggested
|
|
entry for a matching-speed modem that starts at 19.2 Kbps (the
|
|
<tt/gettytab/ entry containing the <tt/V19200/ starting point), your
|
|
<tt/ttys/ entry might look like this:
|
|
|
|
<tscreen><verb>
|
|
ttyd0 "/usr/libexec/getty V19200" dialup on
|
|
</verb></tscreen>
|
|
|
|
<sect2><heading>/etc/rc.serial or /etc/rc.local</heading>
|
|
<p>
|
|
|
|
High-speed modems, like V.32, V.32bis, and V.34 modems, need to use
|
|
hardware (<tt>RTS/CTS</tt>) flow control. You can add <tt/stty/
|
|
commands to <tt>/etc/rc.serial</tt> on FreeBSD 1.1.5.1 and up, or
|
|
<tt>/etc/rc.local</tt> on FreeBSD 1.1, to set the hardware flow
|
|
control flag in the FreeBSD kernel for the modem ports.
|
|
|
|
For example, on a sample FreeBSD 1.1.5.1 system,
|
|
<tt>/etc/rc.serial</tt> reads:
|
|
|
|
<tscreen><verb>
|
|
#!/bin/sh
|
|
#
|
|
# Serial port initial configuration
|
|
|
|
stty -f /dev/ttyid1 crtscts
|
|
stty -f /dev/cuai01 crtscts
|
|
</verb></tscreen>
|
|
|
|
which sets the <tt/termios/ flag <tt/crtscts/ on serial port #1's
|
|
(<tt/COM2:/) dialin and dialout initialization devices.
|
|
|
|
On an old FreeBSD 1.1 system, these entries were added to
|
|
/etc/rc.local to set the <tt/crtscts/ flag on the devices:
|
|
|
|
<tscreen><verb>
|
|
# Set serial ports to use RTS/CTS flow control
|
|
stty -f /dev/ttyd0 crtscts
|
|
stty -f /dev/ttyd1 crtscts
|
|
stty -f /dev/ttyd2 crtscts
|
|
stty -f /dev/ttyd3 crtscts
|
|
</verb></tscreen>
|
|
|
|
Since there is no initialization device special file on FreeBSD
|
|
1.1, one has to just set the flags on the sole device special file and
|
|
hope the flags are not cleared by a miscreant.
|
|
|
|
<sect1><heading>Modem Settings</heading>
|
|
<p>
|
|
|
|
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 PC-DOS or <tt/tip/ under FreeBSD) to set the parameters.
|
|
Connect to the modem using the same communications speed as the
|
|
initial speed <tt/getty/ will use and configure the modem's
|
|
non-volatile RAM to match these requirements:
|
|
|
|
<itemize>
|
|
|
|
<item> <tt/CD/ asserted when connected
|
|
|
|
<item> <tt/DTR/ asserted for operation; dropping DTR hangs up line
|
|
& resets modem
|
|
|
|
<item> <tt/CTS/ transmitted data flow control
|
|
|
|
<item> Disable <tt>XON/XOFF</tt> flow control
|
|
|
|
<item> <tt/RTS/ received data flow control
|
|
|
|
<item> Quiet mode (no result codes)
|
|
|
|
<item> No command echo
|
|
|
|
</itemize>
|
|
|
|
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 USRobotics Sportster
|
|
14,400 external modem, one could give these commands to the modem:
|
|
|
|
<tscreen><verb>
|
|
ATZ
|
|
AT&C1&D2&H1&I0&R2&W
|
|
</verb></tscreen>
|
|
|
|
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 USR 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:
|
|
|
|
<itemize>
|
|
|
|
<item> Switch 1: UP - DTR Normal
|
|
|
|
<item> Switch 2: Do not care (Verbal Result Codes/Numeric Result Codes)
|
|
|
|
<item> Switch 3: UP - Suppress Result Codes
|
|
|
|
<item> Switch 4: DOWN - No echo, offline commands
|
|
|
|
<item> Switch 5: UP - Auto Answer
|
|
|
|
<item> Switch 6: UP - Carrier Detect Normal
|
|
|
|
<item> Switch 7: UP - Load NVRAM Defaults
|
|
|
|
<item> Switch 8: Do not care (Smart Mode/Dumb Mode)
|
|
|
|
</itemize>
|
|
|
|
Result codes should be disabled/suppressed for dialup modems to avoid
|
|
problems that can occur if <tt/getty/ mistakenly gives a <tt/login:/
|
|
prompt to a modem that is in command mode and the modem echoes the
|
|
command or returns a result code. I have heard this sequence can result
|
|
in a extended, silly conversation between <tt/getty/ and the modem.
|
|
|
|
<sect2><heading>Locked-speed Config</heading>
|
|
<p>
|
|
|
|
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 USR Sportster 14,400 external modem, these
|
|
commands will lock the modem-to-computer data rate at the speed used
|
|
to issue the commands:
|
|
|
|
<tscreen><verb>
|
|
ATZ
|
|
AT&B1&W
|
|
</verb></tscreen>
|
|
|
|
<sect2><heading>Matching-speed Config</heading>
|
|
<p>
|
|
|
|
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 USR 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
|
|
non-error-corrected connections:
|
|
|
|
<tscreen><verb>
|
|
ATZ
|
|
AT&B2&W
|
|
</verb></tscreen>
|
|
|
|
<sect2><heading>Checking the Modem's Configuration</heading>
|
|
<p>
|
|
|
|
Most high-speed modems provide commands to view the modem's current
|
|
operating parameters in a somewhat human-readable fashion. On the USR
|
|
Sportster 14,400 external modems, the command <tt/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 USR's DIP
|
|
switch settings), use the commands <tt/ATZ/ and then <tt/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.
|
|
|
|
<sect1><heading>Troubleshooting</heading>
|
|
<p>
|
|
|
|
Here are a few steps you can follow to check out the dialup modem on
|
|
your system.
|
|
|
|
<sect2><heading>Checking out the FreeBSD system</heading>
|
|
<p>
|
|
|
|
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 <tt/DTR/ indicator lights when the <tt/login:/ prompt appears
|
|
on the system's console - if it lights up, that should mean that
|
|
FreeBSD has started a <tt/getty/ process on the appropriate
|
|
communications port and is waiting for the modem to accept a call.
|
|
|
|
If the <tt/DTR/ indicator doesn't light, login to the FreeBSD system
|
|
through the console and issue a <tt/ps ax/ to see if FreeBSD is trying
|
|
to run a <tt/getty/ process on the correct port. You should see a
|
|
lines like this among the processes displayed:
|
|
|
|
<tscreen><verb>
|
|
114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd0
|
|
115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd1
|
|
</verb></tscreen>
|
|
|
|
If you see something different, like this:
|
|
|
|
<tscreen><verb>
|
|
114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyd0
|
|
^^
|
|
</verb></tscreen>
|
|
|
|
and the modem has not accepted a call yet, this means that <tt/getty/
|
|
has completed its open on the communications port. This could
|
|
indicate a problem with the cabling or a mis-configured modem, because
|
|
<tt/getty/ should not be able to open the communications port until
|
|
<tt/CD/ (carrier detect) has been asserted by the modem.
|
|
|
|
If you do not see any <tt/getty/ processes waiting to open the desired
|
|
<tt/ttyd?/ port, double-check your entries in <tt>/etc/ttys</tt> to
|
|
see if there are any mistakes there. Also, check the log file
|
|
<tt>/var/log/messages</tt> to see if there are any log messages from
|
|
<tt/init/ or <tt/getty/ regarding any problems. If there are any
|
|
messages, triple-check the configuration files <tt>/etc/ttys</tt> and
|
|
<tt>/etc/gettytab</tt>, as well as the appropriate device special
|
|
files <tt>/dev/ttyd?</tt>, for any mistakes, missing entries, or
|
|
missing device special files.
|
|
|
|
<sect2><heading>Try Dialing In</heading>
|
|
<p>
|
|
|
|
Try dialing into the system; be sure to use 8 bits, no parity, 1 stop
|
|
bit on the remote system. If you do not get a prompt right away, or
|
|
get garbage, try pressing <tt><Enter></tt> about once per
|
|
second. If you still do not see a <tt/login:/ prompt after a while,
|
|
try sending a <tt>BREAK</tt>. If you are using a high-speed modem to
|
|
do the dialing, try dialing again after locking the dialing modem's
|
|
interface speed (via <tt>AT&B1</tt> on a USR Sportster, for
|
|
example).
|
|
|
|
If you still cannot get a <tt/login:/ prompt, check
|
|
<tt>/etc/gettytab</tt> again and double-check that
|
|
|
|
<itemize>
|
|
<item> The initial capability name specified in <tt>/etc/ttys</tt> for
|
|
the line matches a name of a capability in <tt>/etc/gettytab</tt>
|
|
|
|
<item> Each <tt/nx=/ entry matches another <tt/gettytab/ capability
|
|
name
|
|
|
|
<item> Each <tt/tc=/ entry matches another <tt/gettytab/ capability
|
|
name
|
|
|
|
</itemize>
|
|
|
|
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 <tt/DTR/ is
|
|
asserted. If the modem seems to be configured correctly, verify that
|
|
the <tt/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 &a.questions
|
|
describing your modem and your problem, and the good folks on the list will
|
|
try to help.
|
|
|
|
<sect1><heading>Acknowledgments</heading>
|
|
<p>
|
|
|
|
Thanks to these people for comments and advice:
|
|
|
|
<descrip>
|
|
|
|
<tag>&a.kelly</tag> for a number of good suggestions
|
|
|
|
</descrip>
|
|
|
|
|