chat for ppp, from ppp 2.1.2
This commit is contained in:
parent
cb82096387
commit
618a2b1931
5
usr.bin/chat/Example
Normal file
5
usr.bin/chat/Example
Normal 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
169
usr.bin/chat/README
Normal 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
129
usr.bin/chat/connect-ppp
Executable 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
5
usr.bin/chat/ppp-off
Executable 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
37
usr.bin/chat/ppp-on
Executable 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
23
usr.bin/chat/unlock
Executable 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
|
Loading…
Reference in New Issue
Block a user