6.6. Link Control Options
We
already encountered LCP, which is used to negotiate link
characteristics and test the link. The two most important options negotiated
by LCP are the Asynchronous
Control Character
Map and the Maximum
Receive Unit. There are a
number of other LCP configuration options, but they are far too
specialized to discuss here.
The Asynchronous Control
Character Map, colloquially called the async
map, is used on asynchronous links, such as
telephone lines, to identify control characters that must be escaped
(replaced by a specific two-character sequence) to avoid them being
interpreted by equipment used to establish the link. For instance,
you may want to avoid the XON and XOFF characters used for software
handshake because a misconfigured modem might choke upon receipt of
an XOFF. Other candidates include Ctrl-l (the
telnet escape character). PPP allows you to
escape any of the characters with ASCII codes 0 through 31 by
specifying them in the async map. The async map is a 32-bit-wide bitmap
expressed in hexadecimal. The least significant bit corresponds to
the ASCII NULL character, and the most significant bit corresponds to
ASCII 31 decimal. These 32 ASCII characters are the control
characters. If a bit is set in the bitmap, it signals that the
corresponding character must be escaped before it is transmitted
across the link.To tell your peer that it
doesn't have to escape all control characters, but
only a few of them, you can specify an async map to
pppd using the asyncmap
option. For example, if only ^S and
^Q (ASCII 17 and 19, commonly used for XON and
XOFF) must be escaped, use the following option:
asyncmap 0x000A0000The conversion is simple as long as
you can convert binary to hex. Lay out 32 bits in front of you. The
right-most bit corresponds to ASCII 00 (NULL), and the left-most bit
corresponds to ASCII 32 decimal. Set the bits corresponding to the
characters you want escaped to one, and all others to zero. To
convert that into the hexadecimal number pppd
expects, simply take each set of 4 bits and convert them into hex.
You should end up with eight hexadecimal figures. String them all
together and preprend "0x" to
signify it is a hexadecimal number, and you are done.Initially, the async map is set to
0xffffffffthat is, all control characters
will be escaped. This is a safe default, but is usually much more
than you need. Each character that appears in the async map results
in two characters being transmitted across the link, so escaping
comes at the cost of increased link utilization and a corresponding
performance reduction.In most circumstances, an async map of 0x0 works
fine. No escaping is performed. The Maximum Receive Unit (MRU) signals to
the peer the maximum size of HDLC frames that we want to receive.
Although this may remind you of the Maximum Transfer Unit (MTU)
value, these two have little in common. The MTU is a parameter of the
kernel networking device and describes the maximum frame size that
the interface is able to transmit. The MRU is more of an advice to
the remote end not to generate frames larger than the MRU; the
interface must nevertheless be able to receive frames of up to 1,500
bytes. Choosing an MRU is therefore not so much
a question of what the link is capable of transferring, but of what
gives you the best throughput. If you intend to run interactive
applications over the link, setting the MRU to values as low as 296
is a good idea, so that an occasional larger packet (say, from an FTP
session) doesn't make your cursor
"jump." To tell
pppd to request an MRU of 296, you give it the
option mru 296. Small MRUs,
however, make sense only if you have VJ header compression (it is
enabled by default), because otherwise you'd waste a
large amount of your bandwidth just carrying the IP header for each
datagram.pppd also understands a couple of LCP options
that configure the overall behavior of the negotiation process, such
as the maximum number of configuration requests that may be exchanged
before the link is terminated. Unless you know exactly what you are
doing, you should leave these options alone.
Finally, there are two options
that apply to LCP echo messages. PPP defines two messages,
Echo Request and
Echo Response.
pppd uses this feature to check whether a link
is still operating. You can enable this by using the
lcp-echo-interval option together with a time in
seconds. If no frames are received from the remote host within this
interval, pppd generates an Echo Request and
expects the peer to return an Echo Response. If the peer does not
produce a response, the link is terminated after a certain number of
requests are sent. This number can be set using the
lcp-echo-failure option. By default, this feature
is disabled altogether.