[comp.unix.i386] which multiport i/o cards pass this test?

pim@cti-software.nl (Pim Zandbergen) (08/22/90)

Hi netfolk,

I am currently looking for a multiport I/O card to replace
Specialix, because the Dutch distributor has stopped importing them.

I have evaluated some cards but lots of their drivers have trouble with
correctly handling modem control. This prevents them from working
with the intelligent modem feature in HDB UUCP:
	"ttyxx,M" in Devices  means open with O_NDELAY set
	and "\M" and "\m" in Dialers means set and clear the CLOCAL flag.

The problem is that with these drivers, the O_NDELAY flag
cannot be properly cleared when carrier detect is not present.

I have noticed this problem with the stock ISC asy driver,
with Specialix drivers older than release 3.03, with the
Equinox Megaport 1.8.2 driver (a pity, I like this
card) and the Chase Research AT8+ 4.02a driver.

In fact, the only working drivers I have seen are the Specialix 3.03
and the PORTS and EPORTS drivers for the AT&T 3B2.

Rather than evaluate every card on the market myself I would
appreciate very much if you would run my little test program
and mail me the result.

I *think* this program emulates HDB UUCP behaviour.
I only tested it on ISC 386/ix 2.0.2 and on the AT&T 3B2.
If any UNIX guru would like to comment, please feel free.

The crucial moment in this program is the read().
It should block, waiting for input, but returns immediately
with zero bytes read on lots of cards.

You should run this program on a port that has no cable
whatsoever attached to it, nor should any other process
have this port opened (ie. no getty's running).
The port should implement modem control, ie. "> /dev/ttyxx"
should hang.

Thanks in advance for you help.

#--------------------------------CUT HERE-------------------------------------
#! /bin/sh
#
# This is a shell archive.  Save this into a file, edit it
# and delete all lines above this comment.  Then give this
# file to sh by executing the command "sh file".  The files
# will be extracted into the current directory owned by
# you with default permissions.
#
# The files contained herein are:
#
# -rw-------   1 pim      other       2232 Aug 21 19:27 modemtest.c
#
echo 'x - modemtest.c'
if test -f modemtest.c; then echo 'shar: not overwriting modemtest.c'; else
sed 's/^X//' << '________This_Is_The_END________' > modemtest.c
X#include    <fcntl.h>
X#include    <errno.h>
X#include    <signal.h>
X#include    <termio.h>
X#include    <stdio.h>
X
Xmain(argc, argv)
X	int             argc;
X	char           *argv[];
X{
X	int             fcntl_flags;
X	int             fd;
X	extern int      errno;
X	extern unsigned alarm();
X	char            buf[1];
X	char           *usage = "usage: %s <tty device with modem control>\n";
X	extern char    *sys_errlist[];
X	struct termio   termio_flags;
X	struct termio   old_termio_flags;
X	void            on_alarm();
X	extern void     exit();
X
X
X	if (argc != 2)
X	{
X		(void) fprintf(stderr, usage, argv[0]);
X		exit(1);
X	}
X
X	(void) printf("opening %s with O_NDELAY set\n", argv[1]);
X	if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0)
X	{
X		(void) fprintf(stderr, "%s: can't open %s: %s\n",
X				argv[0], argv[1], sys_errlist[errno]);
X		exit(2);
X	}
X
X	(void) printf("clearing O_NDELAY flag\n");
X	if ((fcntl_flags = fcntl(fd, F_GETFL, 0)) == -1)
X	{
X		(void) fprintf(stderr, "%s: can't get fcntl flags: %s\n",
X			       argv[0], sys_errlist[errno]);
X		exit(3);
X	}
X	fcntl_flags &= ~(O_NDELAY);
X	if (fcntl(fd, F_SETFL, fcntl_flags) == -1)
X	{
X		(void) fprintf(stderr, "%s: can't set fcntl flags: %s\n",
X			       argv[0], sys_errlist[errno]);
X		exit(4);
X	}
X
X	(void) printf("setting CLOCAL\n");
X	if (ioctl(fd, TCGETA, &termio_flags) < 0)
X	{
X		(void) fprintf(stderr, "%s: can't get termio flags: %s\n",
X			       argv[0], sys_errlist[errno]);
X		exit(5);
X	}
X	old_termio_flags = termio_flags;	/* save original modes */
X	termio_flags.c_cflag |= CLOCAL;
X	if (ioctl(fd, TCSETAW, &termio_flags) < 0)
X	{
X		(void) fprintf(stderr, "%s: can't set termio flags: %s\n",
X			       argv[0], sys_errlist[errno]);
X		exit(6);
X	}
X
X	(void) printf("reading from %s\n", argv[1]);
X	(void) signal(SIGALRM, on_alarm);
X	(void) alarm((unsigned) 10);
X	if ((read(fd, buf, 1) < 1) && (errno == EINTR))
X		(void) printf("test succesful\n");
X	else
X		(void) printf("test failed\n");
X
X
X	(void) printf("clearing CLOCAL\n");
X	if (ioctl(fd, TCSETAW, &old_termio_flags) < 0)
X	{
X		(void) fprintf(stderr, "%s: can't restore termio flags: %s\n",
X			       argv[0], sys_errlist[errno]);
X		exit(7);
X	}
X
X
X	(void) printf("exiting\n");
X	return 0;
X}
X
Xvoid
Xon_alarm()
X{
X	(void) printf("caught SIGALRM\n");
X}
________This_Is_The_END________
if test `wc -c < modemtest.c` -ne 2232; then
	echo 'shar: modemtest.c was damaged during transit (should have been 2232 bytes)'
fi
fi		; : end of overwriting check
exit 0
-- 
Pim Zandbergen                            domain : pim@cti-software.nl
CTI Software BV                           uucp   : uunet!mcsun!hp4nl!ctisbv!pim
Laan Copes van Cattenburch 70             phone  : +31 70 3542302
2585 GD The Hague, The Netherlands        fax    : +31 70 3512837

karl@naitc.uucp (Karl Denninger) (08/22/90)

In article <1990Aug21.180653.615@cti-software.nl> pim@cti-software.nl (Pim Zandbergen) writes:
>
>Hi netfolk,
>
>I am currently looking for a multiport I/O card to replace
>Specialix, because the Dutch distributor has stopped importing them.
>
>I have evaluated some cards but lots of their drivers have trouble with
>correctly handling modem control. This prevents them from working
>with the intelligent modem feature in HDB UUCP:
>	"ttyxx,M" in Devices  means open with O_NDELAY set
>	and "\M" and "\m" in Dialers means set and clear the CLOCAL flag.
>
>The problem is that with these drivers, the O_NDELAY flag
>cannot be properly cleared when carrier detect is not present.

You bet.

>I have noticed this problem with the stock ISC asy driver,
>with Specialix drivers older than release 3.03, with the
>Equinox Megaport 1.8.2 driver (a pity, I like this
>card) and the Chase Research AT8+ 4.02a driver.
>
>In fact, the only working drivers I have seen are the Specialix 3.03
>and the PORTS and EPORTS drivers for the AT&T 3B2.

Add to that anything Xenix; SCO did this one correctly.

>Rather than evaluate every card on the market myself I would
>appreciate very much if you would run my little test program
>and mail me the result.

The Equinox board will work correctly IF you have something else on the port
also (ie: a getty).  It will NOT work if you are only dialing out, which is
a real problem!

We have worked around this bug (and yes, Equinox, it IS A BUG -- READ THE
TERMIO MAN PAGE UNDER CLOCAL!) but they haven't managed to fix it despite
over 6 months of yelling and other coercion.

Continental Computer knows about it too, I'm on the phone with them all the
time and they aren't getting anywhere with Equinox either!  And considering
that CCS is one of the larger Equinox distributors, I'm not holding my
breath for the change.

Perhaps if we all screamed loud and long at Equinox, they'd get it fixed.
It really is the only wart left on the product; we've been banging on them
for quite some time to get the nasties out of the driver, and with that sole
exception it works GREAT.

--Karl Denninger
karl@ddsw1.MCS.COM
kdenning@nis.naitc.com

jonb@specialix.co.uk (Jon Brawn) (08/23/90)

-> Specialix are alive and well all over Europe and the Rest of the World! <-

pim@cti-software.nl (Pim Zandbergen) writes:
Pim>
Pim> Hi netfolk,
Pim>
Pim> I am currently looking for a multiport I/O card to replace
Pim> Specialix, because the Dutch distributor has stopped importing them.
Pim>

I am sorry to hear you say that your distributor is no longer importing
Specialix products.

However, they are available in Holland via M.U.S.T., contact Jan Van Der Laan
on 04 997 74939, who will be pleased to help you.

Also, ToPlog distribute our products throughout Benelux, contact Hans De Lange,
on +33 2 332 0732 (a Belgium number).

Specialix currently have products suitable for MCA, EISA, ISA (AT bus)
architectures, with support for a large variety of operating systems.

Pim> I have evaluated some cards but lots of their drivers have trouble with
Pim> correctly handling modem control. This prevents them from working
Pim> with the intelligent modem feature in HDB UUCP:
Pim>	"ttyxx,M" in Devices  means open with O_NDELAY set
Pim>	and "\M" and "\m" in Dialers means set and clear the CLOCAL flag.
Pim>
Pim> The problem is that with these drivers, the O_NDELAY flag
Pim> cannot be properly cleared when carrier detect is not present.

It is gratifying to hear that someone is actually
using the technical features designed into the product.

Pim> I have noticed this problem with the stock ISC asy driver,
Pim> with Specialix drivers older than release 3.03,

The current release of the Specialix device driver is Version 4.0. If
*anyone* requires a *free* update please contact either Bill Hamblin,
our North European sales manager, or myself. Bill can be contacted by
email: bill@specialix.co.uk, ...!mcsun!ukc!slxsys!bill, by phone:
+44(0)932 354254, or (preferably) by FAX: +44(0)932 352781

We are always more than willing to talk to you about technical
problems with the product. The development team is quite approachable,
so drop us a line!

[End of advert. Normal cynical comments will be resumed as soon as possible.
Sorry it was quite so slimey, the sales department made me do it.... but its
all true! (I hope)]
-- 
This time I AM talking on behalf of Specialix!

Jon Brawn, jonb@specialix.co.uk  (or for you bangers: ..!mcsun!ukc!slxsys!jonb)