Date: Fri, 12 Jul 1996 09:54:39 +1000 From: Bruce Evans <bde@zeta.org.au> To: freebsd-hardware@FreeBSD.ORG, freebsd-isp@FreeBSD.ORG, freebsd-questions@FreeBSD.ORG, stefan@islandia.is Subject: Re: Problems with PPP and cyclades (fwd) Message-ID: <199607112354.JAA20628@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
>I'm trying to get ppp-iij using the tun device to work. I can connect to it >and everything seems fine until I hangup, the ppp daemon doesn't terminate >and just holds the device open. This happens only when using Cyclades 16-Ye >DB25-DB25 device with 16 modems connected (from dmesg: cy0 irq 5 maddr >0xd4000 msize 8192 on isa). But when using sio everything >works fine and ppp terminates. I'm using the same modem on both devices. >... >Currently I'm using sliplogin.dynamic with the Cy-16 with the external >connector box, and there are no trouble with that setup. But some of my >users want to use ppp to connect to my server. ppp polls DCD while slattach waits for a SIGHUP. ppp's method is much easier to get right for both the daemon and the driver, but there seems to be a problem with it. I use the following program to poll the modem state for all sio and cy lines. The DCD state should be `-DCD' when nothing is connected and change to '+DCD' when something is connected and raises DCD and change to `-DCD' on hangup. This works with a Cyclaydes 8Yo. Perhaps there is a timing problem in the ppp daemon. You should probably use kernel ppp if there is more that one ppp session at a time. --- comstate.c --- #include <sys/ioctl.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> static void try(char *prefix); int main() { try("ttyd"); try("cuaa"); try("ttyc"); try("cuac"); return 0; } static void try(char *prefix) { int bit; char dev_name[32]; int dev_nr; int fd; int comstate; int stat; static char *statenames[] = { "LE", "DTR", "RTS", "ST", "SR", "CTS", "DCD", "RI", "DSR", }; for (dev_nr = 0; dev_nr < 32; ++dev_nr) { sprintf(dev_name, "/dev/%s%c", prefix, dev_nr < 10 ? '0' + dev_nr : 'a' + (dev_nr - 10)); fd = open(dev_name, O_RDWR | O_NONBLOCK); if (fd >= 0) { comstate = 0xdeadbeef; stat = ioctl(fd, TIOCMGET, &comstate); printf("%s: ioctl returned %d:", dev_name, stat); for (bit = 0; bit < 9; ++bit) printf(" %c%s", comstate & (1 << bit) ? '+' : '-', statenames[bit]); printf("\n"); close(fd); } } } >stty -f /dev/ttyd0 >speed 9600 baud; >lflags: -icanon -isig -iexten -echo >iflags: -icrnl -ixon -ixany -imaxbel -brkint >oflags: -opost -onlcr -oxtabs >cflags: cs8 -parenb > ^^^^^^ No crtscts ? Is that normal ? It is the default. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199607112354.JAA20628>