DIP› get $local ask
Enter the value for $local: _
A third method is to obtain the value from the remote host. Bizarre as it seems at first, this is very useful in some cases. Some SLIP servers will not allow you to use your own IP address on the SLIP link, but will rather assign you one from a pool of addresses whenever you dial in, printing some message that informs you about the address you have been assigned. If the message looks something like " Your address: 192.168.5.74 ", the following piece of dip code would let you pick up the address:
# finish login
wait address: 10
get $locip remote
This is the command used to echo text to the console from which dip was started. Any of dip 's variables may be used in print commands. Here's an example:
DIP› print Using port $port at speed $speed
Using port ttyS3 at speed 38400
dip understands only a predefined set of variables. A variable name always begins with a dollar symbol and must be written in lowercase letters.
The $local and $locip variables contain the local host's name and IP address. When you store the canonical hostname in $local , dip will automatically attempt to resolve the hostname to an IP address and to store it in the $locip variable. A similar but backward process occurs when you assign an IP address to the $locip variable; dip will attempt to perform a reverse lookup to identify the name of the host and store it in the $local variable.
The $remote and $rmtip variables operate in the same way for the remote host's name and address. $mtu contains the MTU value for the connection.
These five variables are the only ones that may be assigned values directly using the get command. A number of other variables are set as a result of the configuration commands bearing the same name, but may be used in print statements; these variables are $modem , $port , and $speed .
$errlvl is the variable through which you can access the result of the last command executed. An error level of 0 indicates success, while a nonzero value denotes an error.
The if command is a conditional branch, rather than a full-featured programming if statement. Its syntax is:
if var op number goto label
The expression must be a simple comparison between one of the variables $errlvl , $locip , and $rmtip . var must be an integer number; the operator op may be one of -,!=, ‹, ›, ‹=, and ›=.
The goto command makes the execution of the script continue at the line following that bearing the label . A label must be the first word on the line and must be followed immediately by a colon.
These commands help implement simple chat scripts in dip. The send command outputs its arguments to the serial line. It does not support variables, but understands all C-style backslash character sequences, such as \n for newline and \b for backspace. The tilde character (~) can be used as an abbreviation for carriage return/newline.
The wait command takes a word as an argument and will read all input on the serial line until it detects a sequence of characters that match this word. The word itself may not contain any blanks. Optionally, you may give wait a timeout value as a second argument; if the expected word is not received within that many seconds, the command will return with an $errlvl value of 1. This command is used to detect login and other prompts.
The sleep command may be used to wait for a certain amount of time; for instance, to patiently wait for any login sequence to complete. Again, the interval is specified in seconds.
These commands are used to flip the serial line to SLIP mode and configure the interface.
The mode command is the last command executed by dip before going into daemon mode. Unless an error occurs, the command does not return.
mode takes a protocol name as argument. dip currently recognizes SLIP , CSLIP , SLIP6 , CSLIP6 , PPP , and TERM as valid names. The current version of dip does not understand adaptive SLIP, however.
After enabling SLIP mode on the serial line, dip executes ifconfig to configure the interface as a point-to-point link, and invokes route to set the route to the remote host.
If, in addition, the script executes the default command before mode , dip creates a default route that points to the SLIP link.
Setting up your SLIP client was the hard part. Configuring your host to act as a SLIP server is much easier.
There are two ways of configuring a SLIP server. Both ways require that you set up one login account per SLIP client. Assume you provide SLIP service to Arthur Dent at dent.beta.com . You might create an account named dent by adding the following line to your passwd file:
dent:*:501:60:Arthur Dent's SLIP account:/tmp:/usr/sbin/diplogin
Afterwards, you would set dent 's password using the passwd utility.
The dip command can be used in server mode by invoking it as diplogin. Usually diplogin is a link to dip. Its main configuration file is /etc/diphosts , which is where you specify what IP address a SLIP user will be assigned when he or she dials in. Alternatively, you can also use the sliplogin command, a BSD-derived tool featuring a more flexible configuration scheme that lets you execute shell scripts whenever a host connects and disconnects.
When our SLIP user dent logs in, dip starts up as a server. To find out if he is indeed permitted to use SLIP, it looks up the username in /etc/diphosts . This file details the access rights and connection parameter for each SLIP user. The general format for an /etc/diphosts entry looks like:
# /etc/diphosts
user : password : rem-addr : loc-addr : netmask
: comments : protocol , MTU #
Each of the fields is described in Table 7.2.
Table 7.2: /etc/diphosts Field Description
Field |
Description |
user |
The username of the user invoking dip that this entry will apply to. |
password |
Field 2 of the /etc/diphosts file is used to add an extra layer of password-based security on the connection. You can place a password in encrypted form here (just as in /etc/passwd ) and diplogin will prompt for the user to enter the password before allowing SLIP access. Note that this password is used in addition to the normal login -based password the user will enter. |
rem-addr |
The address that will be assigned to the remote machine. This address may be specified either as a hostname that will be resolved or an IP address in dotted quad notation. |
loc-addr |
The IP address that will be used for this end of the SLIP link. This may also be specified as a resolvable hostname or in dotted quad format. |
netmask |
The netmask that will be used for routing purposes. Many people are confused by this entry. The netmask doesn't apply to the SLIP link itself, but is used in combination with the rem-addr field to produce a route to the remote site. The netmask should be that used by the network supported by that of the remote host. |
comments |
This field is free-form text that you may use to help document the /etc/diphosts file. It serves no other purpose. |
protocol |
This field is where you specify what protocol or line discipline you want applied to this connection. Valid entries here are the same as those valid for the -p argument to the slattach command. |
MTU |
The maximum transmission unit that this link will carry. This field describes the largest datagram that will be transmitted across the link. Any datagram routed to the SLIP device that is larger than the MTU will be fragmented into datagrams no larger than this value. Usually, the MTU is configured identically at both ends of the link. |
A sample entry for dent could look like this:
Читать дальше