chat for ppp, from ppp 2.1.2

This commit is contained in:
lars 1994-11-12 05:25:32 +00:00
parent cb82096387
commit 618a2b1931
6 changed files with 368 additions and 0 deletions

5
usr.bin/chat/Example Normal file
View File

@ -0,0 +1,5 @@
#
../pppd/pppd -d connect 'chat "" ATDT5551212 CONNECT "" ogin: ppp' netmask 255.255.255.0 /dev/com1 38400
../pppd/pppd connect 'chat "" AATDT5551212 CONNECT "" ogin: ppp' netmask 255.255.255.0 /dev/com1 38400

169
usr.bin/chat/README Normal file
View File

@ -0,0 +1,169 @@
I run PPP between crappie.morningstar.com (137.175.6.3, my home
machine) and remora.morningstar.com (137.175.2.7, my workstation at
the office). This document describes how I use it. The installation
of PPP itself is covered in the PPP distribution.
I put a line like this in remora's /etc/passwd:
Pkarl:2y4613BDaQD3x:51:10:Karl's PPP login:/tmp:/usr/local/etc/pppstart
I created a login shell script on remora called
/usr/local/etc/pppstart:
#!/bin/sh
/usr/bin/mesg n
stty -tostop
exec /usr/local/etc/ppp 137.175.2.7:
I use the ppp-on command to bring up a connection, and ppp-off to shut
it down. These shell scripts, plus the unlock and fix-cua scripts and
the source to the chat program are included. You will need to heavily
modify these to suit your own situation, including Internet addresses,
machine names, telephone numbers, modem dialing commands, baud rates,
login names and passwords. Make the "ppp..." command in the ppp-on
script look something like this:
ppp 137.175.6.3: /dev/cua &
The "137.175.6.3:" is of the format "local-addr:remote-addr" with the
remote address null (it will be negotiated by PPP). Look at the login
shell script above; it can be common to all dial-in PPP users on your
machine because it only specifies the address of the remora
(receiving) end of the link.
If you use the enclosed chat and unlock programs, be sure they are
suid uucp, and fix-cua should be suid root. The ppp-on script should
be chmod 700, owner yourself, to keep the password (semi-) secure.
I use the following eeprom settings and /dev and /etc/ttytab entries
in order to support dial-in and dial-out on a single phone line:
crappie 12% eeprom | grep ttya
ttya-mode=19200,8,1,n,h
ttya-rts-dtr-off=false
ttya-ignore-cd=false
crappie 13% ls -lg /dev/cua /dev/ttya
crw-rw-rw- 1 root staff 12, 128 Nov 20 09:14 /dev/cua
crw--w--w- 1 root wheel 12, 0 Nov 20 08:25 /dev/ttya
crappie 14% grep ttya /etc/ttytab
ttya "/usr/etc/getty std.19200" unknown on
crappie 15%
On SunOS 4.1 and later, make sure that the /etc/ttytab line for ttya
doesn't say "local":
ttya "/usr/etc/getty std.38400" unknown on
Make sure your modem passes data transparently; watch out especially
for ^S, ^Q, ^P (UUCP spoofing) and parity problems. I have a Telebit
Trailblazer+ attached to /dev/ttya with the following register
settings:
aaatz
OK
aat&n
E1 F1 M1 Q6 P V1 X0 Version BA4.00
S00=001 S01=000 S02=043 S03=013 S04=010 S05=008 S06=002 S07=060 S08=002 S09=006
S10=007 S11=070 S12=050
S45=000 S47=004 S48=000 S49=000
S50=000 S51=005 S52=002 S53=003 S54=001 S55=000 S56=017 S57=019 S58=002 S59=000
S60=000 S61=000 S62=003 S63=001 S64=000 S65=000 S66=001 S67=000 S68=255
S90=000 S91=000 S92=001 S95=000
S100=000 S101=000 S102=000 S104=000
S110=001 S111=030 S112=001
S121=000
N0:
N1:
N2:
N3:
N4:
N5:
N6:
N7:
N8:
N9:
OK
And, the following entry is in /etc/gettytab:
#
# 19200/2400 dialin for Telebit Trailblazer+ modem
#
T|T19200:dial-19200:\
:nx=T2400:sp#19200:
T2400|dial-2400:\
:nx=T19200:sp#2400:
My chat script dialing command looks like "ATs50=255s111=0DT4515678"
instead of just "ATDT4515678" in order to force a PEP mode connection
and to disable the UUCP spoofing (otherwise, the modem swallows or
delays ^P characters).
I run /usr/etc/in.routed on crappie (the calling end) and have this in
my /etc/gateways file:
net 0.0.0.0 gateway remora metric 1 passive
host crappie gateway crappie metric 0 passive
Routed is started in /etc/rc.local. This way, I don't have to
manually add or delete routes when links come up. I ifconfig the ppp0
interface on crappie at boot time like this (in /etc/rc.local with the
other ifconfig's):
ifconfig ppp0 crappie remora netmask 0xffffff00 down
I put "init ppp_attach" in my /sys/sun4c/conf/CRAPPIE file so that the
above ifconfig down will work:
pseudo-device ppp1 init ppp_attach # Point-to-Point Protocol, 1 line
Routed now keeps my routes sane at the crappie.MorningStar.Com end.
My ethernet (le0) and PPP (ppp0) interfaces are configured with the
same address and netmask. IP is smart enough to figure out (via the
routes in /etc/gateways) that everything useful needs to go out ppp0.
Also, the remora end of my PPP link is configured the same way -- the
ppp0 interface there is configured with the same address and netmask
as remora's le0 ethernet. This means that separate interface names
like "remora-ppp" are not needed; point-to-point links (whether PPP,
Xerox Synchronous Point-to-Point Protocol, SLIP, IGP or whatever) have
(apparently) been used this (seemingly bizarre) way for some time.
This works because when IP looks at a POINTOPOINT link it ignores the
local address (unlike an ethernet interface) and only looks at the
remote address.
Here's what netstat shows for me:
crappie 109% netstat -r
Routing tables
Destination Gateway Flags Refcnt Use Interface
localhost localhost UH 0 0 lo0
crappie crappie UH 1 11339 le0
default remora UG 0 1266 ppp0
mstar-net-ppp-remora crappie U 0 0 le0
crappie 110% netstat -rn
Routing tables
Destination Gateway Flags Refcnt Use Interface
127.0.0.1 127.0.0.1 UH 0 0 lo0
137.175.6.3 137.175.6.3 UH 1 11339 le0
default 137.175.2.7 UG 0 1266 ppp0
137.175.6.0 137.175.6.3 U 0 0 le0
crappie 111%
The default route to remora is a result of the first line in the
/etc/gateways file ("default" can't be used there; you have to say
"0.0.0.0").
On the network at work, I add a static route in our gateway machine's
/etc/rc.local file:
/usr/etc/route add net 137.175.6 remora 1
All the other machines in the office have default routes pointing at
the gateway machine, and all PPP-connected external machines are on the
137.175.6 subnet.
Send me mail or post to the newsgroup comp.protocols.ppp if you have
any questions.
Karl Fox <karl@MorningStar.Com>

129
usr.bin/chat/connect-ppp Executable file
View File

@ -0,0 +1,129 @@
#!/bin/sh
#
# USAGE: connect-ppp <host>
#
# Set up a PPP link to host.
#
# This script locks the tty so that faxd and uucp will not
# interfere. If you are running with faxd as you "getty" then
# faxd will remove the lock once it notices that pppd is gone.
# This is the reason for pppd running in with the -detach flag,
# and you probably would run this script in the background.
#
# I had to create the nodropdtr option to pppd in order to be
# able to do what the script is doing here. Pathces has been
# sent to the respective people, but I don't know if they like
# them :-).
#
# Look for comments with <LOCAL> in the string. They identify
# things that you want to set for your system
#<LOCAL> define whatever your config file is.
CON_DB=/etc/ppp-connections
#<LOCAL> define whatever your device is.
DEVICE=tty00
#<LOCAL> define whatever your device speed is.
DEVICESPEED=57600
#<LOCAL> define whatever your lock directory is.
LOCKDIR=/var/spool/lock
LOCKFILE=$LOCKDIR/LCK..$DEVICE
#<LOCAL> define whatever debug level you want.
DEBUG="-d -d -d -d"
# Check that we got a name to connect to. This need not be an actuall hostname
# just the name you specified in the config file.
if [ $# -ne 1 ] ; then
echo "Usage: $0 <host> &"
exit 1
fi
# Get the configuration that is in effect for <name>
LINE=`grep "^$1" $CON_DB`
if [ -z "$LINE" ] ; then
echo "Unknow host $1"
exit 1
fi
# parse the CON_DB. The format is:
#
# <hostname>:<phone number>:<user id>:<password>:<local ip address>:\
# <remove_ip_address><netmask>:<pppd options>
#
# The last three are optional. But I would recomend specifying a netmask also
# when you specify a ip address.
IP_ADDR=""
IFS=':'
set $LINE
IFS=' '
HOST=$1
PHONE=$2
USER=$3
PASSWORD=$4
OUR_IP_ADDR=$5
THEIR_IP_ADDR=$6
NETMASK=$7
shift 7
OPTIONS=$*
if [ -f $LOCKFILE ] ; then
echo "PPP device is locked"
exit 1
else
# Lock the device
# faxd and UUCP wants 10 character lock id.
echo "$$" | awk '{printf("%10s",$0)}' > $LOCKFILE
fi
#Do we know our local ip address? If so pppd needs a : at the end of it.
if [ ! -z "$OUR_IP_ADDR" ] ; then
IP_ADDR=${OUR_IP_ADDR}:${THEIR_IP_ADDR}
fi
#Did we specify a netmask? If so convert to pppd format.
if [ ! -z "$NETMASK" ] ; then
NETMASK="netmask ${NETMASK}"
fi
# Do the actual work in a subshell so that we can turn off tostop and set
# the tty speed before chat dials. The second reason for doing in like
# is that if you aren't running BIDIR, and you are running faxd, clocal
# doesn't get turned on from pppd so chat will never work if you exec
# it from within pppd. I found that I needed to run uucp with the
# HAVE_CLOCAL_BUG flag set to 1 in order to get it to work in conjunction
# with faxd. Anyway, this setup seem to work.
(
stty $DEVICESPEED -tostop hupcl 2> /dev/null
# <LOCAL> Modify the Modem initialization strings to be whatever works for you
if chat -v ABORT "NO CARRIER" ABORT BUSY "" ATZ0E1 OK ATS50=255DT$PHONE \
CONNECT "" ogin: $USER ssword: \\q$PASSWORD
then
# We got connected.
/usr/libexec/pppd $DEBUG $OPTIONS -detach modem defaultroute \
crtscts $NETMASK $DEVICE $DEVICESPEED $IP_ADDR
else
echo "PPP call failed" 1>&2
exit 1
fi
) < /dev/$DEVICE > /dev/$DEVICE
# Get the return code from the subshell.
RC=$?
# Clear the lock. Slight window here where someone could detect that
# pppd is no longer running, remove its lock file and create its own.
# How to fix??
rm -f $LOCKFILE
#Pass on the exit code.
exit $RC

5
usr.bin/chat/ppp-off Executable file
View File

@ -0,0 +1,5 @@
#!/bin/sh
kill -INT `ps -ax | egrep " ppp " | egrep -v "egrep" | sed 's/^\([ 0-9]*\) .*/\1'/`
exit 0

37
usr.bin/chat/ppp-on Executable file
View File

@ -0,0 +1,37 @@
#!/bin/sh
#
# ppp-on
#
# Set up a PPP link
#
LOCKDIR=/var/spool/lock
DEVICE=com1
PHONE=4511234
USER=Pkarl
PASSWORD=password
OUR_IP_ADDR=137.175.6.3
if [ -f $LOCKDIR/LCK..$DEVICE ]
then
echo "PPP device is locked"
exit 1
fi
fix-cua $DEVICE
(
stty 19200 -tostop
if chat -l LCK..$DEVICE ABORT "NO CARRIER" ABORT BUSY "" ATZ OK ATs50=255s111=0DT$PHONE CONNECT "" ogin: $USER ssword: \\q$PASSWORD
then
ppp mru 1500 $OUR_IP_ADDR: /dev/$DEVICE &
sleep 10
exit 0
else
echo "PPP call failed" 1>&2
exit 1
fi
) < /dev/$DEVICE > /dev/$DEVICE

23
usr.bin/chat/unlock Executable file
View File

@ -0,0 +1,23 @@
#!/bin/sh
LOCKDIR=/var/spool/lock
case "$1" in
"") echo "Usage: unlock lockfile"; exit 1 ;;
.*) echo "Usage: unlock lockfile"; exit 1 ;;
esac
if [ -f $LOCKDIR/$1 ]
then
if [ `wc -c < $LOCKDIR/$1` -eq 4 ]
then
rm -f $LOCKDIR/$1
exit 0
else
echo "Usage: unlock lockfile"
exit 1
fi
else
echo "lockfile" $LOCKDIR/$1 "does not exist"
exit 1
fi