[unix-pc.uucp] How do you check if ph0 is set to DATA?

upl@puff.cs.wisc.edu (Future Unix Gurus) (09/08/89)

Hello, again

Ok.  I'm trying to do this:  I want to create a uucp polling shell script
on a UNIX pc.  I want to be able to have cron (actually smgr) run this
script at various periods in the day.  I only have one phone line, so
I can't dedicate it to a DATA line.  Question:  is there some way that
I can check to see if ph0 is set to VOICE and if so can I then check if
it's active?  

Here's the plan: if ph0 is set to VOICE and active, don't try to poll 
anywhere.  If ph0 is set to VOICE but not active, then do a phtoggle,
and try polling.  If ph0 is set to DATA check the LCK..ph0 file If it 
exists, don't poll, otherwise poll.  Currently I've got it set up in
my crontab and L.sys files to do all of my sending between midnight
and 8am everyday.  That's fine for things I send.  But when I need to 
poll a site (for things I might be receiving), I want to be able to do 
it whenever I'm not using the phone.

Any suggestions?  I'm reasonably capable in C.  I could write a program to
look at /dev/kmem, but I don't know how to do something like that.

Thanks in advance for any help!!

- sparkie
p.s. please respond to the following address (not the address listed above)
 ___  ___  ___  ___  _  _  _  ___
/ __\| . \/ . \| . \| |/ /|_|| _ |
\___\| __/|   || _ /|   < | || _[  	sparkie@uhura.cs.wisc.edu 
\___/|_|  |_|_||_|\\|_|\_\|_||___|

kls@ditka.UUCP (Karl Swartz) (09/12/89)

In article <2938@puff.cs.wisc.edu> upl@puff.cs.wisc.edu (Future Unix Gurus) writes:
>I only have one phone line, so I can't dedicate it to a DATA line.

>If ph0 is set to DATA ...

I was under the (possibly misguided) impression that due to
software bugs ph0 didn't work very well as a data line.  I
have both of my machines set up with ph0 as VOICE (but no
line hooked up since the software isn't terribly useful) and
ph1 as the DATA line.

-- 
Karl Swartz	|UUCP		{ames,lll-winken}!pacbell!ditka!kls
1-505/672-3113	|Internet	kls@rt1.lanl.gov
		|BIX		kswartz
"I never let my schooling get in the way of my education."  (Twain)

cals@cals01.NEWPORT.RI.US (Charles A. Sefranek) (09/14/89)

In article <4185@ditka.UUCP> kls@ditka.UUCP (Karl Swartz) writes:
>...
>I was under the (possibly misguided) impression that due to
>software bugs ph0 didn't work very well as a data line. 

Yup, you're misguided. I *only* use ph0, mostly as a DATA line.
It works great, has been for 2 yrs now.  Took some tuning up
though to find all the error possibilities and take care of them.

Use phtoggle to switch ph0 between DATA and VOICE.  Phtoggle comes
with the ua.  Use a program called phstat to check whether the line 
is currently set up as DATA or VOICE (or VOICE-ACTIVE, or RINGING, etc). 
Phstat was posted to the net a while back.  I suppose I could repost my
hacked up version of it if there's enough interest...

As I said above, an IMPORTANT part of this is the shell script needed
to coordinate the activity of phstat, phtoggle, and uucp (I don't have
HDB).  There are a number of obscure and subtle conditions that will cause
errors if you don't check for them and handle them properly.  Email me
for more info, I can post if there's enough interest...
-- 

--
 Charlie Sefranek	cals@cals01.NEWPORT.RI.US
UUCP: {rayssd,xanth,lazlo,mirror}!galaxia!cals01!cals
Alt.: c4s@rayssdb.ray.com {sun,decuac,gatech,necntc,ukma}!rayssd!rayssdb!c4s

comeau@utoday.UUCP (Greg Comeau) (09/20/89)

In article <512@cals01.NEWPORT.RI.US> cals@cals01.Newport.RI.US (Charles A. Sefranek) writes:
>In article <4185@ditka.UUCP> kls@ditka.UUCP (Karl Swartz) writes:
>>...
>>I was under the (possibly misguided) impression that due to
>>software bugs ph0 didn't work very well as a data line. 
>
>Yup, you're misguided. I *only* use ph0, mostly as a DATA line.

Care to elaborate on that?  I was tol many years ago by several AT&T
people (I know that may not mean anything) that the ph0 harware was
a bit freaky and that I should always use ph1.  At the time I was only
using the box to dial out and had numerous various problems.  I've never
changed that set up and to this day (some 4-5 years) have never had
another phone problem again.

cals@cals01.NEWPORT.RI.US (Charles A. Sefranek) (09/23/89)

In article <985@utoday.UUCP> comeau@.UUCP (Greg Comeau) writes:
>In article <512@cals01.NEWPORT.RI.US> cals@cals01.Newport.RI.US (Charles A. Sefranek) writes:
>>In article <4185@ditka.UUCP> kls@ditka.UUCP (Karl Swartz) writes:
>>>...
>>>I was under the (possibly misguided) impression that due to
>>>software bugs ph0 didn't work very well as a data line. 
>>
>>Yup, you're misguided. I *only* use ph0, mostly as a DATA line.
>
>Care to elaborate on that?  I was tol many years ago by several AT&T
>people (I know that may not mean anything) that the ph0 harware was
>a bit freaky and that I should always use ph1.  ...

Well, I put my machine on line Oct 1987 and have been using only ph0
since then.  I have had problems, but the fix disk solved the un-
explained machine lock-ups.  The inode bug has bit me several times,
too, but hopefully the *next* fixdisk will solve that.  I have had NO
problems traceable to pho hardware.

Many people have asked for phstat, my shell script that I use to control
uucico transfers, and any other info I can give them.  Here it is ...

-----------cut here------------cut here----------cut here------------
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  README phstat.c uusites.poll
# Wrapped by cals@cals01 on Fri Sep 22 22:02:56 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f README -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"README\"
else
echo shar: Extracting \"README\" \(5451 characters\)
sed "s/^X//" >README <<'END_OF_README'
X===================================
X	phstat.c
X===================================
X
X	PHSTAT is called with the device descriptor of the phone
Xdevice whose status is desired, ie:
X
Xphstat /ph0
X
Xwill return the status of phone line 0.  The status is returned on
Xstandard output as a text string indicating the state as follows:
X
X	VOICE-IDLE	indicates line is idle in voice mode
X
X	VOICE-ACTIVE	indicates line is in voice mode with a
X			conversation in progress.
X
X	DATA		indicates line is data mode.
X
XCurrently phstat will not detect the RINGING condition as such.  I think
Xthis is returned as status VOICE-ACTIVE, but I'm not sure.
X
X	PHSTAT will return via an exit(1) if it is called improperly,
Xand with an exit(0) otherwise.
X
X	To compile phstat with shared libraries:
X
Xcc -c -ophstat phstat.c
Xld -o phstat phstat.o /lib/crt0s.o /lib/shlib.ifile
X
X	I installed phstat in /usr/local/bin/phstat with user bin,
Xgroup bin and permissions 755.
X
X===================================
X	uusites.poll
X===================================
X
X	This file is the shell script I use to initiate the uucp
Xconnection to my feed site.  There are two things you *HAVE* to
Xchange if you want to use this for yourself:
X
X	Change variable SITE to be the name of the site you are calling.
X	Change variable SITE1 to be the first 6 characters of SITE.
X
XI put this shell script in /usr/lib/uucp/uusites.poll with user uucp, 
Xgroup mail, and permissions 755. I modified my crontab file to run this in 
Xplace of the uudemon.hr script.  It is set up so I can also run it as 
Xan ordinary user for special occasions.
X
XMy system uses the standard ATT uucp (not HoneyDanBer), and I call my feed
Xsite to establish the connection.  I also contact only one site.  If you
Xwant to contact more than one site you will have to modify the script to
Xsuit your needs.
X
X	Several important things I have learned in setting this up:
X
X1) All uucp activity is logged on a file /usr/spool/uucp/LOGFILE.
X   The standard system setup manages this log file weekly so it
X   doesn't overflow your disk.  Keep an eye on this file regularly
X   to see what's going on with your uucp connection.  Many problems
X   will first show up here.
X
X2) If a uucico fails for any reason, it leaves a status file (named
X   STST<something> laying around in the /usr/spool/uucp directory.
X   The presence of this file will prevent uucico from attempting a
X   retry before some default time (usually 1 hour).  The script
X   removes all STST* files from the spool directory to allow a
X   shorter retry period.
X
X3) Before you change the state of the phone line, you *must* save
X   its current status.  This is required to decide what to do after
X   the uucico is completed.  Remember that a successful uucp
X   connection can run for hours!  Cron (or you) may invoke this
X   shell script *several times* during this time period.  You
X   don't want one of these redundant invocations to screw up
X   a perfectly good phone connection.  Uucico will properly
X   handle multiple invocations of itself, but it doesn't know or
X   care anything about the phone device.  YOU must handle that!
X
X4) The trap statement is in there to prevent normal things (like
X   logging out) from messing up a successful connection.  It 
X   probably isn't needed if you only run the script from cron,
X   but I like to be able to run it manually for debugging and
X   other special occasions (like a power failure right before
X   cron would normally run it!).  The trap protects me from
X   myself.
X
X5) The phtoggle program will properly check for all error
X   conditions regarding the phone line.  It won't try to control
X   it if it is being used by someone else, and it takes care of
X   all the lock files.  Unfortunately, if it does fail for an error
X   condition it doesn't seem to tell you in a way that can be
X   detected in the shell script.  It just leaves an error window
X   laying around on the console.  That's how I found out what 
X   situations my shell script wasn't handling properly.
X
X6) I now use a dummy poll file to detect whether or not the uucico 
X   transfer was successful.  This is an empty file named so uucico
X   thinks it is a queued up job waiting to be acted on.  When it
X   discovers the file is empty, it just skips it.  This isn't done,
X   however, until a complete connection has been successfully
X   established.  So, if you had a good connect, the poll file will
X   disappear.  If the connection failed (initially) the poll file
X   will still be around.  If the connection fails after it had
X   been successfully established, the poll file will also disappear
X   and the shell script will not retry.  This was done at the request
X   of my feed site, so they can effectively ignore me (by allowing
X   my login, turning the line around, then killing the connection)
X   if they have higher priority things to do and don't want my
X   machine repeatedly beating the door down trying to get in.
X   This shell script can be painfully persistent in trying to
X   establish a good connection otherwise!
X
XGood luck with this.  Please let me know if you find any flaws in
Xthe above or come across any other problems I haven't seen yet;
Xother than that, I make no guarantee or warranty whatsoever for this 
Xsoftware.  Use at your own risk and let the user beware!
X
X--
X Charlie Sefranek	cals@cals01.NEWPORT.RI.US
XUUCP: {rayssd,xanth,lazlo,mirror}!galaxia!cals01!cals
XAlt.: c4s@rayssdb.ray.com {sun,decuac,gatech,necntc,ukma}!rayssd!rayssdb!c4s
END_OF_README
if test 5451 -ne `wc -c <README`; then
    echo shar: \"README\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f phstat.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"phstat.c\"
else
echo shar: Extracting \"phstat.c\" \(936 characters\)
sed "s/^X//" >phstat.c <<'END_OF_phstat.c'
X/*
X *
X * phstat.c	A quick hack to get the status of the phone line so
X *		we can decide whether or not to toggle it.
X *
X *		At home, I have only one line, so when I leave for work
X *		I want my phone line set to DATA.  I run a shell script
X *		from cron at 7:00 AM, that goes something like this:
X *
X *
X *		Status=`/usr/lbin/phstat /dev/ph0`
X *
X *		if [ "$Status" = "VOICE" ] ; then
X *		  /usr/bin/phtoggle
X *		fi
X *
X *
X *		Robert Rodriguez  {inhp4|ptsfa}!pttesac!robert
X */
X
X#include	<sys/phone.h>
X#include	<fcntl.h>
X
Xmain( argc, argv )
X
Xint	argc;
Xchar	**argv;
X
X{
X    int			fd;
X    struct updata	phdata;
X
X    if ( argc != 2 )
X    {
X	printf( "Usage: phstat <device>\n" );
X	exit(1);
X    }
X    if ( (fd = open( argv[1], O_RDWR | O_NDELAY )) == -1 )
X	exit(1);
X    if ( (ioctl( fd, PIOCGETP, &phdata )) != 0 )
X	exit(1);
X    if ( phdata.c_lineparam & VOICE )
X	printf( "VOICE\n" );
X    else
X	printf( "DATA\n" );
X    close(fd);
X    exit(0);
X}
END_OF_phstat.c
if test 936 -ne `wc -c <phstat.c`; then
    echo shar: \"phstat.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f uusites.poll -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"uusites.poll\"
else
echo shar: Extracting \"uusites.poll\" \(3157 characters\)
sed "s/^X//" >uusites.poll <<'END_OF_uusites.poll'
X#--------------------------------------------------------------------------
X#
X#	Poll known sites for traffic
X#
X#--------------------------------------------------------------------------
X#
X# 27-Jun-88 Modified to only phtoggle if necessary.
X# 17-Aug-88 Modified to trap termination to insure DATA line goes back to
X#  VOICE after manual invocation and logout.
X# 20-Aug-88 Modified to use phstat to determine ACTIVE/IDLE status on
X#  VOICE line.
X# 08-Jan-89 Modified to repetitively retry uucico call if previous connection
X#  failed. Known problems with this implementation:
X#   After a LOST LINE condition, uustat returns status of the PREVIOUS con-
X#  versation.
X#   A successful connection that results in say a half hour conversation
X#  and then terminates abnormally will retry - it would be better to let
X#  it go until the next call instead of overrunning the time slot.
X# 28-Feb-89 Modified to use a null poll file instead of uustat call to 
X#  determine status of conversation after uucico call.
X# 27-Mar-89 Modified to check number of inodes and blocks before doing
X#  the uucico. Aborts and sends warning message to console and unix.log
X#  if either is too low.
X# 27-Apr-89 Removed debugging stuff used to test null poll file operation.
X#  Changed retry limit.
X#
X#	Charles A. Sefranek
X#	cals@cals01.NEWPORT.RI.US
X#--------------------------------------------------------------------------
XSITE=smwhere	# Change this to the site name you contact
XSITE1=smwher	# This is SITE truncated to 6 characters
XPATH=:/usr/lib/uucp:/bin:/usr/bin
XLOGFILE=/usr/spool/uucp/LOGFILE
XPOLLFILE=/usr/spool/uucp/C.${SITE1}AD0000
Xcd /usr/lib/uucp
Xlimit=12	# Max number of retries
Xretry=0
Xwtime=300	# Seconds to wait between retries
Xminblks=4000	# Min acceptable number of disk blocks
Xmininodes=400	# Min acceptable number of inodes
X#
X#	Find number of blocks and inodes for hard disk
X#
Xset `df | grep "\/dev\/fp002"`
X#
X#	Send warning to console and unix.log if inodes too low
X#
Xif [ $5 -lt $mininodes ]
Xthen 
X   echo  "uusites.poll: Abort - too few inodes \c" >/dev/error
X   echo "#uusites.poll: Abort - too few inodes \c" >/dev/error
X   exit 1
Xfi
X#
X#	Send warning to console and unix.log if disk blocks too low
X#
Xif [ $3 -lt $minblks ]
Xthen
X   echo  "uusites.poll: Abort - too few disk blocks \c" >/dev/error
X   echo "#uusites.poll: Abort - too few disk blocks \c" >/dev/error
X   exit 2
Xfi
Xwhile [ $retry -lt $limit ]
Xdo
X  rm -f /usr/spool/uucp/STST*
X  status=`/usr/local/bin/phstat /dev/ph0`
X  trap '' 1 2 3 9 15
X  #
X  # Only toggle if it is voice and it is idle
X  # VOICE-ACTIVE will be handled by uucico
X  #
X  if [ $status = 'VOICE-IDLE' ]
X  then phtoggle
X  fi
X  #
X  # Create dummy poll file here
X  #
X  cp /dev/null $POLLFILE
X  #
X  # Initiate the conversation
X  #
X  uucico -r1 -s${SITE}
X  #
X  # Don't change it if it wasn't toggled before !
X  #
X  if [ $status = 'VOICE-IDLE' ]
X  then phtoggle
X  fi
X  trap 1 2 3 9 15
X  #
X  # Check if a retry is needed
X  #
X  if test -f $POLLFILE
X  then 
X     #  Conversation failed - retry
X     retry=`expr $retry + 1`
X     sleep $wtime
X  else 
X     #  Conversation succeeded - force exit
X     retry=`expr $limit + 1`
X  fi
Xdone
Xuulog
END_OF_uusites.poll
if test 3157 -ne `wc -c <uusites.poll`; then
    echo shar: \"uusites.poll\" unpacked with wrong size!
fi
chmod +x uusites.poll
# end of overwriting check
fi
echo shar: End of shell archive.
exit 0

-- 

--
 Charlie Sefranek	cals@cals01.NEWPORT.RI.US
UUCP: {rayssd,xanth,lazlo,mirror}!galaxia!cals01!cals
Alt.: c4s@rayssdb.ray.com {sun,decuac,gatech,necntc,ukma}!rayssd!rayssdb!c4s