Simple PPP - internals
alpha test
This information is for developers, tech support people, and others concerned about
how Simple PPP works inside.
New features and how they work
Automatic dialing.
Simple PPP dials in the background, and unlike MacPPP, this actually works. There's
rather a lot of machinery behind this. Dialing is controlled by a completely new
table-driven rule-based system that does everything from deferred tasks. For those
things that can't be done from a deferred task, system tasks fired off using the Notification
Manager are used. Scripts are controlled through the rule-based engine and an inverted
matching engine which recognizes keywords as they come in character by character.
There's no process waiting and polling inside Simple PPP; you can't do that in a driver
without interfering with the foreground too much. The driver never gets an event,
and it never does a dialog. If it has something to say, it will post a notification.
Automatic redial
- Simple PPP will automatically redial when an Internet service provider doesn't
answer or is busy. As long as something is trying to send IP packets, Simple PPP
will keep trying to dial. There is no delay between redials.
Automatic reconnect
- Simple PPP will automatically redial when an open connection is dropped while it
was being actively used. Usually, file transfers can be recovered after the redial.
This works quite well if you have a permanently-assigned IP address and your server
provider answers on the first or second redial. TCP will give you about two minutes to
get reconnected, and that's usually enough. Try downloading a big image in Netscape
and unplug your modem during the download. Plug the modem back in and wait. It may
take a minute or two while everything cranks, but it usually works.
Faster transmission.
A new buffering strategy improves performance. The low-level serial input and output
routines have been redesigned and rewritten for better performance. MacPPP uses significant
CPU time even when no traffic is in progress. SimplePPP does not. The buffering system attempts to output entire packets with single writes, which improves performance
over packet-oriented media such as Ricochet links. On the input side, the input processing
is done at deferred task level, to eliminate long interrupt lockouts. It's hard to get a buffer overrun with Simple PPP, even on a slow Macintosh.
Useful diagnostics.
A new diagnostic system helps you figure out what happens when there's a problem.
Considerable effort has gone into collecting enough information to give useful error
messages.
No more unwanted dialing.
The old MacPPP/FreePPP problem of randomly dialing in the background when there
was no traffic to send has been fixed. Simple PPP dials when an applicationwrites
to MacTCP, unlike other versions of PPP which dial when an application merelyopens
MacTCP. A number of applications like to periodically open MacTCP and not send anything,
which is harmless on a LAN but starts MacPPP dialing.
The Simple PPP Alpha Test Version
What's in this version
Simple PPP itself
Simple PPP Extension.
Simple PPP Control
Utilities
Simple PPP Logger
, which dumps events within Simple PPP.
Modem Info Editor
, for editing files of modem information
Documents
These documents, in HTML.
Cautions
This is an alpha test version. It has not yet been tested on a wide variety of machines.
Simple PPP version 1.5 requires System 7.1 or better and MacTCP. Open Transport is
not supported.
This is a development release. Please don't download this if you're new to using the
Internet.
Please don't put copies of the alpha release on other servers. It's too soon.
Send defect reports to simpleppp-defects@animats.com
.
Internal changes
These are just the highlights. The changes from MacPPP are so extensive that this
is basically a new piece of software.
Simple PPP consists of two basic parts, a System Extension and a Control Panel. The
System Extension is a major rewrite. Starting from a MacPPP base, much of the code
has been completely replaced, and the parts that haven't been replaced have been
heavily modified. The Control Panel is completely new.
Simple PPP contains extensive internal checking. It may not be defect-free yet,
but when it breaks, we find out why. There are over a hundred assertions within
Simple PPP, and they're all turned on. If you get an assertion failure, an alert
comes up, followed by a trap to MacsBug if it is installed. Please report all
assertion failures to simpleppp-defects@animats.com
.
Debug logging. Events within PPP can be logged to a file using the "Simple PPP logger"
program. You can log everything, or just errors.
Many race conditions in MacPPP have been eliminated. Most of these were associated
with MacPPP's improperly designed support of virtual memory,which is why MacPPP has
never worked right with virtual memory or RamDoubler.
A major effort has been made to comply strictly with the guidelines of Inside Macintosh,
and to avoid doing anything considered remotely improper in Macintosh code.
Simple PPP never brings up a dialog box. All error messages are notifications, so
they won't interfere with anything else you're doing. This is consistent with the
Apple Human Interface Guidelines for background-only tasks.
Line speeds of 115Kb/sec and 230Kb/sec are supported on systems that have drivers
that offer those speeds. (Simple PPP requires a serial driver that works at those
speeds. Newer versions of the MacOS come with such a driver.)
Authentication via both Password Authentication Protocol (PAP) and Challenge Handshake
Authentication Protocol (CHAP) with the MD5 algorithm from RSA Data Security, Inc.
is supported. Most authentication code is now common to all authentication protocols.
Note that for both protocols, the user name and password are stored as plaintext in
the preferences file, so there is a security issue here.
The Simple PPP Control Panel is an all-new C++ application built with Metrowerks PowerPlant
Constructor.
Restrictions and limitations
Open Transport is not supported at this time. Apple has not yet issued a stable version
of Open Transport, and the available documentation does not cover how to write an
OT-compatible MDEV-type driver. Simple PPP may actually work with Open Transport,
but we promise nothing.
Simple PPP insists on doing its own dialing and logging in. It does not offer a terminal
window, so you can't dial manually or log in manually. You also cannot have the Apple
Internet Dialer do the dialing for it. The Apple Internet Dialer is really a workaround for MacPPP's inability to dial properly, so this isn't a serious limitation.
If a connection breaks, and there's been recent traffic on it (within the last two
minutes), Simple PPP will detect this, redial, and bring up the connection again.
If the service provider answers on the first try, you usually recover TCP connections
that were open at the time. Some service providers may assign you a new IP address after
the reconnection, in which case recovery won't work.We suggest to ISPs that they
allow five minutes after a disconnect before reassigning the IP address to a new
user, and Metricom, the operators of the wireless Ricochet network, are putting this in for
their systems. In the meantime, this feature tends to work well only if you have
a permanently assigned IP address.
The user name and password for authentication must be saved via the Simple PPP Control
Panel. Simple PPP will never prompt you for a password. This creates a security issue;
anyone who has physical access to your Macintosh can access your Internet account. No attempt is made to encrypt the stored copy of the password, because then you'd
have to enter a password to decrypt your password. (It's possible to create the illusion
of security by doing some scrambling of the stored password, but since the descrambling algorithm has to be in the program, it's easy enough to write a "cracking" program
for such scramblers.)
When a service provider is slow to answer or a redial is required, the MacTCP Domain
Name Resolver will often hit its hard-coded 39 second timeout and give up. This usually
results in messages such as "Unable to find any domain name server" from applications. Eudora often produces this message. With Eudora, when you see this, just tell
Eudora to fetch your mail again (Command-M). Maybe Apple will fix this.
When Simple PPP is dialing, the only way to stop it is to open the Simple PPP control
panel and click on "Stop".
Simple PPP is compatible with MacPPP and FreePPP preference files, but not with old
control panels and various programs that turn PPP on and off. Such programs will
say that MacPPP is not installed, or will dim out their "Open" button. The Simple
PPP control panel must be used.
Login scripts are handled slightly differently than in MacPPP or FreePPP. Most simple
scripts will still work, but complex ones probably will not. Try editing your script
with the Simple PPP Control Panel and see if it complains. There have been two big
improvements in script handling. First, "wait for" lines are now matched regardless
of case. This gets rid of the old annoying "Login:" vs "login:" problem. Second,
if the script outputs a line and then waits for input, input matching starts at the
moment the output starts; Simple PPP won't lose the first character of input.
Source code information
Simple PPP is composed of free software, and is offered under the terms of the Free
Software Foundation's General Public Licence. Parts of it are based on Merit's MacPPP,
which is also free software. There's some code from Van Jacobson at Lawrence Livermore Labs, and some code from RSA Data Security Inc, all of which are permitted to be
used in free software. You can download all the source code from ftp.animats.com
once it's past alpha test; right now it's not quite ready for others to modify.
If you make changes and distribute a new version of Simple PPP, the usual General
Public Licence terms apply: you can' t charge for it, and you must
redistribute the source code.
February 20, 1996
simpleppp@animats.com
Back to the Simple PPP home page