Additional notes on Ultrix 1.2 UUCP / acucap
George Robbins
grr at cbmvax.UUCP
Sat Feb 20 08:00:19 AEST 1988
XYZXYZ Warning: this may be Ultrix 1.2 specific XYZXYZ
A couple of days ago I posted some fairly detailed documentation about using
the Ultrix acucap routines, with emphasis on DMF-32 interfaces. I haven't
seen the posting come back yet, but have spend some time actually trying
out the various options. It's been kind of "interesting" and I now have a
better idea about what kind of things "go wrong" when you try to make some
changes to the acucap entries or try to do your own.
Having identifed all these problem, it is only fair to admit that I *have*
gotten the acucap/generic dialer facility to work fairly reliably, however
I am letting the pain recede a bit before I presume to post expamples of
working acucap entries.
My general feeling is that while the acucap facility seems to give a
lot of options for auto-dialer control, it is actually quite limited in
the extent to which you can explictly control the dialer. All you can
really do is parameterize a fixed sequence of operations. The dialer
code contained in the current 4.3 BSD UUCP includes provisions for
putting modem initialiaztion chat scripts in the L-devices entry for
each line, in conjunction with a larger assortement of built-in dialers.
This actually gives more control over the actual dialing process, since
the chat scripts provide the same interpretation of the send strings
as in the L.sys file and also rudimentary test/retry/abort options.
---------------
First, in the last document, all references to :lt: should really read :ls:,
which stands for "local sleep" - somehow I was thinking "local time".
Some new observations:
1) For the delays that can be specified in the acucap file, the default
or "error" value is -1, therefore if you specify an option that implicitly
involves a delay, you must specify some value for the delay.
2) Normally, specification of a zero delay means "no delay", however when
the "local sleep" (:ls:) option is used, a zero delay actually results
in an indefinite delay.
3) These errors (1,2) are indicated when the debug display from the output()
routine shows the string to be output, then stops after displaying
the hex value of the first character. This symptom may also indicate
that the acucap entry has some error and has not been completely
processed, for instance, a continuation character may have been omitted.
4) There is a program bug in the timeout/delay for the "dial response"
(:dr:) option such that if you specify the :ls: option in conjunction
with the :dr: option, the dialer will wait indefinitly after displaying
the "dials = 5551212" debug message. If you need the check for the
dial response string, you must use the normal one second granularity
timer.
5) If you specify the "wait for carrier" :cr: option and you are using
an interface like the DMF-32 and the modem is configured not to assert
carrier in command mode and you specify a "disconnect string" (:ds:)
the dialer may block indefinitly trying output the disconnect string.
There may be other options indicated here, but the problem is simply
the the dialer should be doing a ioctl(TIOCNCAR) to disable any blocking
before attempting to send the disconnect string. The symptoms of this
problem are that after the dialer displays the "gendisconnect" message,
it stops after displaying the hex value of the first character of the
disconnect string much as in (3) above. An alternate indication is
when the dialer logs error messages to the L.sys file, but uucico never
terminates.
6) The above problem (5) seems to occur when using the sample acucap
entries on a DMF-32 interface unless the modems are set-up to always
provide carrier detect/data set ready in command mode. Unfortunatly
with this setting, the modems will not "share", since the presence
of DSR prevents getty from relinquishing the modems. Attempting to
disable CD/DSR in command mode will result in uucico hanging while
trying to send the disconnect string. A solution is simply to delete
the disconnect string and rely on the :hu: option to terminate any
connections.
7) Note that the "hang up on close" (:hu:) option doesn't really affect
dialer operation, since this this mode is always set up by the general
setup code. Still, unless there is some good reason not to, you should
probably always specify :hu: and :re: to minimize the possibility of
leaving your modems wedged off-hook.
8) Note that the "online string" (:os:) must have been received within
one second of carrier detect being asserted or the dialer will time-out.
Users of modems on DMF-32 or other interfaces that have must have carrier
present to receive any responses from the modem, must instead use the
"dial response" (:dr:) and "dial acknowledge" (:da:) options if they
wish to check for "CONNECT" or "ON-LINE" type strings.
9) Note that the way the "dial acknowlege" (:da:) delay is implemented,
the dialer waits for the specified period after dialing, then checks
if the "dial response" (:dr:) strings has been recieved. If the
dial response option is being used to check for other than an immediate
"number accepted/dialing begins" message, the delay value must be a
compromise between the maximum time needed to establish the connection
and the time the remote system will wait for a response to it's login:
prompt before dropping the line.
10) Note that unlike the "built-in" dialers which use the first device
name specified in the L-devices entry for a line, the generic dialer
uses the second device. Always specifying the same name for both
devices should cause no problems?
----------------------
Some documentation on the debugging output from the low level routines
that actually handle the acu output and input/match actions.
output() is used to output a text string with a specified delay between each
character. There is no "interpretation" of the text string, this is handled
in the acucap aka termcap reading routines. Depending on the setting of the
:ls: boolean option, the delay is in seconds, using the sleep(3) routine, or
in microseconds using the setitimer(2) facility. Note that for sleep(), a
zero argument means no delay, while for setitimer() zero seems to mean wait
forever.
output(string,delay)
====================
ddebug "output: <string>"
for each character
ddebug " %x"
input() is used to compare received input against a text string. It really
expects the input to already be present and times out after only one second.
input(work,expect)
==================
do
select() - test for chars/timout
if timeout
ddebug "input: failed <characters>"
return bad
read(characters)
until match(characters,expect)
ddebug "input: <characters>"
return good
More information about the Comp.unix.ultrix
mailing list