810 lines
		
	
	
	
		
			31 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			810 lines
		
	
	
	
		
			31 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
<!-- This is an SGML document in the linuxdoc DTD of the Tutorial for
 | 
						|
     Configuring a FreeBSD for Dialup Services by Guy Helmer.
 | 
						|
     $Id: dialup.sgml,v 1.18 1997-08-12 09:17:42 asami Exp $
 | 
						|
 | 
						|
<!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>
 | 
						|
 | 
						|
 |