diff --git a/usr.bin/chat/Example b/usr.bin/chat/Example new file mode 100644 index 000000000000..e46fbd0abf55 --- /dev/null +++ b/usr.bin/chat/Example @@ -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 diff --git a/usr.bin/chat/README b/usr.bin/chat/README new file mode 100644 index 000000000000..73d28af1b877 --- /dev/null +++ b/usr.bin/chat/README @@ -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 diff --git a/usr.bin/chat/connect-ppp b/usr.bin/chat/connect-ppp new file mode 100755 index 000000000000..2796b9d26dc3 --- /dev/null +++ b/usr.bin/chat/connect-ppp @@ -0,0 +1,129 @@ +#!/bin/sh +# +# USAGE: connect-ppp +# +# 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 in the string. They identify +# things that you want to set for your system + +# define whatever your config file is. +CON_DB=/etc/ppp-connections + +# define whatever your device is. +DEVICE=tty00 + +# define whatever your device speed is. +DEVICESPEED=57600 + +# define whatever your lock directory is. +LOCKDIR=/var/spool/lock +LOCKFILE=$LOCKDIR/LCK..$DEVICE + +# 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 &" + exit 1 +fi + +# Get the configuration that is in effect for +LINE=`grep "^$1" $CON_DB` +if [ -z "$LINE" ] ; then + echo "Unknow host $1" + exit 1 +fi + +# parse the CON_DB. The format is: +# +# :::::\ +# : +# +# 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 + + # 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 diff --git a/usr.bin/chat/ppp-off b/usr.bin/chat/ppp-off new file mode 100755 index 000000000000..22b46f8a6e50 --- /dev/null +++ b/usr.bin/chat/ppp-off @@ -0,0 +1,5 @@ +#!/bin/sh + +kill -INT `ps -ax | egrep " ppp " | egrep -v "egrep" | sed 's/^\([ 0-9]*\) .*/\1'/` + +exit 0 diff --git a/usr.bin/chat/ppp-on b/usr.bin/chat/ppp-on new file mode 100755 index 000000000000..305f2b00aa1c --- /dev/null +++ b/usr.bin/chat/ppp-on @@ -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 diff --git a/usr.bin/chat/unlock b/usr.bin/chat/unlock new file mode 100755 index 000000000000..978bc6e19cdb --- /dev/null +++ b/usr.bin/chat/unlock @@ -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