diff options
Diffstat (limited to 'share/doc/handbook/dialup.sgml')
-rw-r--r-- | share/doc/handbook/dialup.sgml | 809 |
1 files changed, 809 insertions, 0 deletions
diff --git a/share/doc/handbook/dialup.sgml b/share/doc/handbook/dialup.sgml new file mode 100644 index 0000000..5401473 --- /dev/null +++ b/share/doc/handbook/dialup.sgml @@ -0,0 +1,809 @@ +<!-- This is an SGML document in the linuxdoc DTD of the Tutorial for + Configuring a FreeBSD for Dialup Services by Guy Helmer. + $Id: m_dialup.sgml,v 1.1 1995/04/10 02:35:59 jfieber 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>Dialup access</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'll need certain versions of FreeBSD, +and knowledge of some terminology & modem and cabling. + +<sect2>FreeBSD Version +<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>Terminology +<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 doesn't 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 doesn't seem +to bother the curmudgeons quite a much). + +<sect2>External vs. Internal Modems +<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>Modems and Cables +<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 doesn't +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 don't +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'll 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>Serial Interface Considerations +<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>Quick Overview +<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>Kernel Configuration +<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> +/usr/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 doesn't recognize all of your serial ports, you'll +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/doc/options.doc</tt>] for more +information on configuring and building kernels. You may have to +unpack the kernel source distribution if haven't 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 haven't +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 don't +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>can't</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>Device Special Files +<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> signalling 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>Making Device Special Files +<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/MAKDEV/ 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 don't 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>Configuration Files +<p> + +There are three system configuration files in the <tt>/etc</tt> +directory that you'll 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 doesn't know what a user's true data +rate is, so full-screen programs like Emacs won't 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/ doesn't +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's assumed that they know they should press the +<tt><Enter></tt> key until they see a recognizable prompt. If +the data rates don't 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 doesn't 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>/etc/gettytab +<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>Locked-Speed Config +<p> + +If you are locking your modem's data communications rate at a +particular speed, you probably won't need to make any changes to +<tt>/etc/gettytab</tt>. + +<sect3>Matching-Speed Config +<p> + +You'll 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 don't 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'll probably need to add an entry +in <tt>/etc/gettytab</tt>; here's an entry you could use for a 14.4 +Kbps modem with a top interface speed of 19.2 Kpbs: + +<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. Communcations 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's an example of a +<tt/gettytab/ entry starting a 57.6 Kpbs: + +<tscreen><verb> +# +# Additions for a V.32bis or V.34 Modem +# Starting at 57.6 Kpbs +# +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 don't have +16550A-based serial ports, you may receive sio ``silo'' errors at 57.6 +Kbps. + +<sect2>/etc/ttys +<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'll 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 signalling <tt/init/. + +<sect3>Locked-Speed Config +<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>Matching-Speed Config +<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>/etc/rc.serial or /etc/rc.local +<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 isn't an 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 aren't cleared by a miscreant. + +<sect1>Modem Settings +<p> + +If you have a modem whose parameters may be permanently set in +non-volatile RAM, you'll 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: Don't 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: Don't 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've heard this sequence can result +in a extended, silly conversation between <tt/getty/ and the modem. + +<sect2>Locked-speed Config +<p> + +For a locked-speed configuration, you'll 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>Matching-speed Config +<p> + +For a variable-speed configuration, you'll 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>Checking the Modem's Configuration +<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>Troubleshooting +<p> + +Here are a few steps you can follow to check out the dialup modem on +your system. + +<sect2>Checking out the FreeBSD system +<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 hasn't 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 don't 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>Try Dialing In +<p> + +Try dialing into the system; be sure to use 8 bits, no parity, 1 stop +bit on the remote system. If you don't get a prompt right away, or +get garbage, try pressing <tt><Enter></tt> about once per +second. If you still don't 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 can't 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/ capabilty +name + +<item> Each <tt/tc=/ entry matches another <tt/gettytab/ capability +name + +</itemize> + +If you dial but the modem on the FreeBSD system won't 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've gone over everything several times and it still doesn't work, +take a break and come back to it later. If it still doesn't work, +perhaps you can send an electronic mail message to +<tt>FreeBSD-Questions@freebsd.org</tt> describing your modem and your +problem, and the good folks on the list will try to help. + +<sect1>Acknowledgements +<p> + +Thanks to these people for comments and advice: + +<descrip> + +<tag/Sean Kelly/ <kelly@fsl.noaa.gov> for a number of good +suggestions + +</descrip> + + |