3. PPPD

You need a pppd (Point to Point Protocol Daemon) and a reasonable knowledge
of how it works. Consult the relevant RFC's or the
Linux PPP HOWTO if necessary.
Since you are not going to use a login procedure, you don't use (m)getty
and you do not need a (fake) user associated with the pppd controlling your
link. You are not going to dial so you don't need any chat scripts
either.
In fact, the modem circuit and configuration you have just build, are
rather like a fully wired null modem cable. This means you have to
configure your pppd the same way as you would with a null modem cable.

For a reliable link, your setup should meet the following criteria;

Shortly after booting your system, pppd should raise the DTR signal in
your RS232 port, wait for DCD to go up, and negotiate the link.

If the remote system is down, pppd should wait until it is up again.

If the link is up and then goes down, pppd should reset the modem
(it does this by dropping and then raising DTR), and then try to
reconnect.

If the quality of the link deteriorates too much, pppd should reset
the modem and then reestablish the link.

If the process controlling the link, that is the pppd, dies, a watchdog
should restart the pppd.

3.1. Configuration

Suppose the modem is connected to COM2, the local IP address is `Loc_Ip'
and the remote IP address is `Rem_Ip'. We want to use 576 as our MTU.
The /etc/ppp/options.ttyS1 would now be:

Stuff like `asyncmap 0', `lock', `modem' and `-detach' are probably already in
/etc/ppp/options. If not, add them to your
/etc/ppp/options.ttyS1.
So, if the local system is 192.168.1.1 and the remote system is 10.1.1.1,
then /etc/ppp/options.ttyS1 on the local system would be:

The passive option limits the number of (re)connection attempts.
The persist option will keep pppd alive in case of a disconnect or when it
can't connect in the first place.
If you telnet a lot while doing filetransfers (FTP or webbrowsing) at the
same time, you might want to use a smaller MTU and MRU such as 296. This
will make the remote system more responsive.
If you don't care much about telnetting during FTP, you could set the MTU
and MRU to 1500. Keep in mind though, that UDP cannot be fragmented.
Speakfreely for instance
uses 512 byte UDP packets. So the minimum MTU for speakfreely is 552 bytes.
The noauth option may be necessary with some newer distributions.
`maxfail 0' may be necessary with newer PPPDs.
After the connection is lost, PPPD will wait for a while before reconnecting.
This time can be set with the holdoff option. The default holdoff used to be 30
seconds, but is now zero. A holdoff of 10 is often recommended.

3.2. Scripts

3.2.1. Starting the pppd and keeping it alive

You could start the pppd form a boot (rc) script. However, if you do this,
and the pppd dies, you are without a link.
A more stable solution, is to start the pppd from /etc/inittab;

s1:23:respawn:/usr/sbin/pppd /dev/ttyS1 115200

This way, the pppd will be restarted if it dies.
Make sure you have a `-detach' option (nodetach on newer systems) though,
otherwise inittab will start numerous instances of pppd, while complaining
about `respawning too fast'.

Note: Some older systems will not accept the speed `115200'. In this case
you will have to set the speed to 38400 and set the `spd_vhi' flag with
setserial.
Some systems expect you to use a `cua' instead of `ttyS' device.

3.2.2. Setting the routes

The default route can be set with the defaultroute option or with the
/etc/ppp/ip-up script;

Of course the route set in ip-up is not necessarily the default route.
Your ip-up sets the route to the remote network while the ip-up script on
the remote system sets the route to your network. If your network is
192.168.1.0 and your ppp interface 192.168.1.1, the ip-up script on the
remote machine looks like this;

The `case $2' and `/dev/ttyS1)' bits are there in case you use more than
one ppp link. Ip-up will run each time a link comes up, but only the part
between `/dev/ttySx)' and `;;' will be executed, setting the right route
for the right ttyS.
You can find more about routing in the
Linux
Networking HOWTOs section on routing.

Some systems use dynamic ttys, in which case you can't route on a tty basis.
In this case it might be handy to translate the ip address to a ppp interface
and then do the routing (and firewalling) on a ppp interface basis.
For this purpose I edited /etc/ppp/ip-up;

Replace 'My_Ip_Address' with your Ip address.
/usr/local/sbin/ntpdate.sh synchronises the clock. It stops
the NTPD, syncs using ntpdate and then starts the NTPD again.
/usr/local/sbin/null-route.sh is a script which sets null
routes;

3.3. Test

Test the whole thing just like the modem test.
If it works, get on your bike and bring the remote modem to the remote side
of your link.
If it doesn't work, one of the things you should check is the COM port
speed;
Apparently, a common mistake is to configure the modems with Minicom using
one speed and then configure the pppd to use an other. This will
NOT work!
You have to use the same speed all of the time!