Assume that the host to which we make our SLIP connection is cowslip , and that we have written a script for dip to run called cowslip.dip that makes our connection. We invoke dip with the script name as argument:
# dip cowslip.dip
DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93)
Written by Fred N. van Kempen, MicroWalt Corporation.
connected to cowslip.moo.com with addr 192.168.5.74
#
The script itself is shown in Example 7.1.
Example 7.1: A Sample dip Script
# Sample dip script for dialing up cowslip
# Set local and remote name and address
get $local vlager-slip
get $remote cowslip
port ttyS3 # choose a serial port speed
38400 # set speed to max
modem HAYES # set modem type
reset # reset modem and tty
flush # flush out modem response
# Prepare for dialing.
send ATQ0V1E1X1\r
wait OK 2
if $errlvl != 0 goto error
dial 41988
if $errlvl != 0 goto error
wait CONNECT 60
if $errlvl != 0 goto error
# Okay, we're connected now
sleep 3
send \r\n\r\n
wait ogin: 10
if $errlvl != 0 goto error
send Svlager\n
wait ssword: 5
if $errlvl != 0 goto error
send knockknock\n
wait running 30
if $errlvl != 0 goto error
# We have logged in, and the remote side is firing up SLIP.
print Connected to $remote with address $rmtip
default # Make this link our default route
mode SLIP # We go to SLIP mode, too
# fall through in case of error
error:
print SLIP to $remote failed.
After connecting to cowslip and enabling SLIP, dip will detach from the terminal and go to the background. You can then start using the normal networking services on the SLIP link. To terminate the connection, simply invoke dip with the -k option. This sends a hangup signal to dip, using the process ID dip records in /etc/dip.pid :
# dip -k
In dip 's scripting language, keywords prefixed with a dollar symbol denote variable names. dip has a predefined set of variables, which will be listed below. $remote and $local , for instance, contain the hostnames of the remote and local hosts involved in the SLIP link.
The first two statements in the sample script are get commands, which is dip 's way to set a variable. Here, the local and remote hostnames are set to vlager and cowslip , respectively.
The next five statements set up the terminal line and the modem. reset sends a reset string to the modem. The next statement flushes out the modem response so that the login chat in the next few lines works properly. This chat is pretty straightforward: it simply dials 41988, the phone number of cowslip , and logs in to the account Svlager using the password knockknock . The wait command makes dip wait for the string given as its first argument; the number given as its second argument makes the wait time out after that many seconds if no such string is received. The if commands interspersed in the login procedure check that no error occurred while executing the command.
The final commands executed after logging in are default , which makes the SLIP link the default route to all hosts, and mode , which enables SLIP mode on the line and configures the interface and routing table for you.
In this section, we will give a reference for most of dip 's commands. You can get an overview of all the commands it provides by invoking dip in test mode and entering the help command. To learn about the syntax of a command, you may enter it without any arguments. Remember that this does not work with commands that take no arguments. The following example illustrates the help command:
# dip -t
DIP: Dialup IP Protocol Driver version 3.3.7p-uri (25 Dec 96)
Written by Fred N. van Kempen, MicroWalt Corporation.
Debian version 3.3.7p-2 (debian).
DIP
› help
DIP knows about the following commands:
beep bootp break chatkey config
databits dec default dial echo
flush get goto help if
inc init mode modem netmask
onexit parity password proxyarp print
psend port quit reset securidfixed
securid send shell skey
sleep
speed stopbits term timeout wait
DIP› echo
Usage: echo on|off
DIP›
Throughout the following section, examples that display the DIP› prompt show how to enter a command in test mode and what output it produces. Examples lacking this prompt should be taken as script excerpts.
dip provides a number of commands that configure your serial line and modem. Some of these are obvious, such as port , which selects a serial port, and speed , databits , stopbits , and parity , which set the common line parameters. The modem command selects a modem type. Currently, the only type supported is HAYES (capitalization required). You have to provide dip with a modem type, or else it will refuse to execute the dial and reset commands. The reset command sends a reset string to the modem; the string used depends on the modem type selected. For Hayes-compatible modems, this string is ATZ .
The flush code can be used to flush out all responses the modem has sent so far. Otherwise, a chat script following reset might be confused because it reads the OK responses from earlier commands.
The init command selects an initialization string to be passed to the modem before dialing. The default for Hayes modems is " ATE0 Q0 V1 X1 ", which turns on echoing of commands and long result codes, and selects blind dialing (no checking of dial tone). Modern modems have a good factory default configuration, so this is a little unnecessary, though it does no harm.
The dial command sends the initialization string to the modem and dials up the remote system. The default dial command for Hayes modems is ATD .
The echo command serves as a debugging aid. Calling echo on makes dip echo to the console everything it sends to the serial device. This can be turned off again by calling echo off .
dip also allows you to leave script mode temporarily and enter terminal mode. In this mode, you can use dip just like any ordinary terminal program, writing the characters you type to the serial line, reading data from the serial line, and displaying the characters. To leave this mode, enter Ctrl-].
The get command is dip 's way of setting a variable. The simplest form is to set a variable to a constant, as we did in cowslip.dip . You may, however, also prompt the user for input by specifying the keyword ask instead of a value:
Читать дальше