summaryrefslogtreecommitdiffstats
path: root/usr.bin/chat
diff options
context:
space:
mode:
authorlars <lars@FreeBSD.org>1994-11-12 05:25:32 +0000
committerlars <lars@FreeBSD.org>1994-11-12 05:25:32 +0000
commit618a2b1931a67c6a88cbc3ed7a88be614237fcf7 (patch)
tree0b2b6d783eed6d027669f6d51de3ea7c97a47d29 /usr.bin/chat
parentcb820963879ec318fed428e2d26fbcf213a3403c (diff)
downloadFreeBSD-src-618a2b1931a67c6a88cbc3ed7a88be614237fcf7.zip
FreeBSD-src-618a2b1931a67c6a88cbc3ed7a88be614237fcf7.tar.gz
chat for ppp, from ppp 2.1.2
Diffstat (limited to 'usr.bin/chat')
-rw-r--r--usr.bin/chat/Example5
-rw-r--r--usr.bin/chat/README169
-rwxr-xr-xusr.bin/chat/connect-ppp129
-rwxr-xr-xusr.bin/chat/ppp-off5
-rwxr-xr-xusr.bin/chat/ppp-on37
-rwxr-xr-xusr.bin/chat/unlock23
6 files changed, 368 insertions, 0 deletions
diff --git a/usr.bin/chat/Example b/usr.bin/chat/Example
new file mode 100644
index 0000000..e46fbd0
--- /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 0000000..73d28af
--- /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 <karl@MorningStar.Com>
diff --git a/usr.bin/chat/connect-ppp b/usr.bin/chat/connect-ppp
new file mode 100755
index 0000000..2796b9d2
--- /dev/null
+++ b/usr.bin/chat/connect-ppp
@@ -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
diff --git a/usr.bin/chat/ppp-off b/usr.bin/chat/ppp-off
new file mode 100755
index 0000000..22b46f8
--- /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 0000000..305f2b0
--- /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 0000000..978bc6e
--- /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
OpenPOWER on IntegriCloud