Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.3 4.3bsd-beta 6/6/85; site nsc.UUCP Path: utzoo!linus!philabs!cmcl2!seismo!hao!hplabs!amdahl!nsc!chuqui From: chuqui@nsc.UUCP (Chuq Von Rospach) Newsgroups: net.unix-wizards Subject: getting modems to hang up revisited Message-ID: <3238@nsc.UUCP> Date: Tue, 8-Oct-85 12:24:18 EDT Article-I.D.: nsc.3238 Posted: Tue Oct 8 12:24:18 1985 Date-Received: Tue, 15-Oct-85 02:12:25 EDT Organization: Cultural Fugue, Ltd. Lines: 62 Keywords: solutions... Thanks to the quick response to my question by Steve Bellovin (ulysses!smb), Matt Crawford (oddjob!matt), and Mark Callow (saber!msc) I found the steps I missed in getting my modems to hang up. For those that might be interested in this, here are the things that you need to be aware of: o make sure the cable from your system to the modem transfers Carrier Detect and Data Terminal Ready o make sure your modem doesn't force DTR high (ours did, because our old cables didn't supply DTR. Upgrading the cable doesn't help if you don't change the modem setting) o You need to make sure your kernel recognizes Carrier Detect. This is controlled by the 'flags' field in the configuration file for your DHU, DH, or DZ. See the man(4) page for details. o You need to make sure that the driver keeps the port closed long enough for the DTR drop to be recognized by the modem. I found that both the DHU driver and the DH driver don't leave DTR low long enough for my modems to recognize it. This can be dealt with a sleep() call in init before opening the port or by fixing the driver in the kernel. If your driver has an "#ifdef PORTSELECTOR" turning on the ifdef should solve the problem. If not, you should add the following code fragments: in xxxopen(): tp->t_ispeed = ISPEED; tp->t_ospeed = ISPEED; tp->t_flags = IFLAGS; + tp->t_state |= TS_HUPCLS; tp->t_dev = dev; tp->t_state |= TS_CARR_ON; in xxxclose(): if ((tp->t_state&(TS_HUPCLS|TS_WOPEN)) || (tp->t_state&TS_ISOPEN)==0) + { + extern int wakeup(); (void) dhumctl(unit, DHU_OFF, DMSET); + /* Hold DTR low for 0.5 seconds */ + timeout(wakeup, (caddr_t) &tp->t_dev, hz/2); + sleep((caddr_t) &tp->t_dev, PZERO); } ttyclose(tp); o If you want the modem to hang up if someone doesn't succeed in logging in, you should add a ":to#60" to the gettytab entries to cause getty to exit after 60 second (login already does this, so no change is needed). Again, thanks to the net for the help and I hope this information is helps someone else... chuq -- :From the caverns of the Crystal Cave: Chuq Von Rospach nsc!chuqui@decwrl.ARPA {decwrl,hplabs,ihnp4,pyramid}!nsc!chuqui Our time is past -- it is a time for men, not magic. Come, let us leave this world to the usurpers and rest our weary bones....