change fd -> ttyfd, fd arg to various functions
authorPaul Mackerras <paulus@samba.org>
Mon, 1 Jan 1996 23:07:07 +0000 (23:07 +0000)
committerPaul Mackerras <paulus@samba.org>
Mon, 1 Jan 1996 23:07:07 +0000 (23:07 +0000)
pppd/sys-NeXT.c
pppd/sys-aix4.c
pppd/sys-linux.c
pppd/sys-osf.c

index dcae3bf62d48fd25e721f5c4c758638694e272d2..3f97b4cf74ed6de0330801fe6a2da58192a999ff 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #ifndef lint
-static char rcsid[] = "$Id: sys-NeXT.c,v 1.3 1995/12/18 03:30:47 paulus Exp $";
+static char rcsid[] = "$Id: sys-NeXT.c,v 1.4 1996/01/01 23:03:23 paulus Exp $";
 #endif
 
 #include <stdio.h>
@@ -164,7 +164,8 @@ ppp_available()
  * establish_ppp - Turn the serial port into a ppp interface.
  */
 void
-establish_ppp()
+establish_ppp(fd)
+    int fd;
 {
     int pppdisc = PPPDISC;
     int x;
@@ -214,7 +215,8 @@ establish_ppp()
  * This shouldn't call die() because it's called from die().
  */
 void
-disestablish_ppp()
+disestablish_ppp(fd)
+    int fd;
 {
     int x;
     char *s;
@@ -445,7 +447,8 @@ set_up_tty(fd, local)
  * restore_tty - restore the terminal to the saved settings.
  */
 void
-restore_tty()
+restore_tty(fd)
+    int fd;
 {
     if (restore_term) {
        if (tcsetattr(fd, TCSAFLUSH, &inittermios) < 0)
@@ -493,7 +496,7 @@ output(unit, p, len)
     if (debug)
        log_packet(p, len, "sent ");
 
-    if (write(fd, p, len) < 0) {
+    if (write(ttyfd, p, len) < 0) {
        if (errno == EWOULDBLOCK || errno == ENOBUFS
            || errno == ENXIO || errno == EIO) {
            syslog(LOG_WARNING, "write: warning: %m");
@@ -506,7 +509,7 @@ output(unit, p, len)
 
 
 /*
- * wait_input - wait until there is data available on fd,
+ * wait_input - wait until there is data available on ttyfd,
  * for the length of time specified by *timo (indefinite
  * if timo is NULL).
  */
@@ -518,8 +521,8 @@ wait_input(timo)
     int n;
 
     FD_ZERO(&ready);
-    FD_SET(fd, &ready);
-    n = select(fd+1, &ready, NULL, &ready, timo);
+    FD_SET(ttyfd, &ready);
+    n = select(ttyfd+1, &ready, NULL, &ready, timo);
     if (n < 0 && errno != EINTR) {
        syslog(LOG_ERR, "select: %m");
        die(1);
@@ -536,12 +539,12 @@ read_packet(buf)
 {
     int len;
 
-    if ((len = read(fd, buf, PPP_MTU + PPP_HDRLEN)) < 0) {
+    if ((len = read(ttyfd, buf, PPP_MTU + PPP_HDRLEN)) < 0) {
        if (errno == EWOULDBLOCK || errno == EINTR) {
-           MAINDEBUG((LOG_DEBUG, "read(fd): %m"));
+           MAINDEBUG((LOG_DEBUG, "read: %m"));
            return -1;
        }
-       syslog(LOG_ERR, "read(fd): %m");
+       syslog(LOG_ERR, "read: %m");
        die(1);
     }
     return len;
@@ -568,18 +571,18 @@ ppp_send_config(unit, mtu, asyncmap, pcomp, accomp)
        quit();
     }
 
-    if (ioctl(fd, PPPIOCSASYNCMAP, (caddr_t) &asyncmap) < 0) {
+    if (ioctl(ttyfd, PPPIOCSASYNCMAP, (caddr_t) &asyncmap) < 0) {
        syslog(LOG_ERR, "ioctl(PPPIOCSASYNCMAP): %m");
        quit();
     }
 
-    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
+    if (ioctl(ttyfd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
        syslog(LOG_ERR, "ioctl(PPPIOCGFLAGS): %m");
        quit();
     }
     x = pcomp? x | SC_COMP_PROT: x &~ SC_COMP_PROT;
     x = accomp? x | SC_COMP_AC: x &~ SC_COMP_AC;
-    if (ioctl(fd, PPPIOCSFLAGS, (caddr_t) &x) < 0) {
+    if (ioctl(ttyfd, PPPIOCSFLAGS, (caddr_t) &x) < 0) {
        syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
        quit();
     }
@@ -594,7 +597,7 @@ ppp_set_xaccm(unit, accm)
     int unit;
     ext_accm accm;
 {
-    if (ioctl(fd, PPPIOCSXASYNCMAP, accm) < 0 && errno != ENOTTY)
+    if (ioctl(ttyfd, PPPIOCSXASYNCMAP, accm) < 0 && errno != ENOTTY)
        syslog(LOG_WARNING, "ioctl(PPPIOCSXASYNCMAP): %m");
 }
 
@@ -611,20 +614,20 @@ ppp_recv_config(unit, mru, asyncmap, pcomp, accomp)
 {
     int x;
 
-    if (ioctl(fd, PPPIOCSMRU, (caddr_t) &mru) < 0) {
+    if (ioctl(ttyfd, PPPIOCSMRU, (caddr_t) &mru) < 0) {
        syslog(LOG_ERR, "ioctl(PPPIOCSMRU): %m");
        quit();
     }
-    if (ioctl(fd, PPPIOCSRASYNCMAP, (caddr_t) &asyncmap) < 0) {
+    if (ioctl(ttyfd, PPPIOCSRASYNCMAP, (caddr_t) &asyncmap) < 0) {
        syslog(LOG_ERR, "ioctl(PPPIOCSRASYNCMAP): %m");
        quit();
     }
-    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
+    if (ioctl(ttyfd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
        syslog(LOG_ERR, "ioctl(PPPIOCGFLAGS): %m");
        quit();
     }
     x = !accomp? x | SC_REJ_COMP_AC: x &~ SC_REJ_COMP_AC;
-    if (ioctl(fd, PPPIOCSFLAGS, (caddr_t) &x) < 0) {
+    if (ioctl(ttyfd, PPPIOCSFLAGS, (caddr_t) &x) < 0) {
        syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
        quit();
     }
@@ -644,7 +647,7 @@ ccp_test(unit, opt_ptr, opt_len, for_transmit)
     data.ptr = opt_ptr;
     data.length = opt_len;
     data.transmit = for_transmit;
-    if (ioctl(fd, PPPIOCSCOMPRESS, (caddr_t) &data) >= 0)
+    if (ioctl(ttyfd, PPPIOCSCOMPRESS, (caddr_t) &data) >= 0)
        return 1;
     return (errno == ENOBUFS)? 0: -1;
 }
@@ -658,13 +661,13 @@ ccp_flags_set(unit, isopen, isup)
 {
     int x;
 
-    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
+    if (ioctl(ttyfd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
        syslog(LOG_ERR, "ioctl(PPPIOCGFLAGS): %m");
        return;
     }
     x = isopen? x | SC_CCP_OPEN: x &~ SC_CCP_OPEN;
     x = isup? x | SC_CCP_UP: x &~ SC_CCP_UP;
-    if (ioctl(fd, PPPIOCSFLAGS, (caddr_t) &x) < 0)
+    if (ioctl(ttyfd, PPPIOCSFLAGS, (caddr_t) &x) < 0)
        syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
 }
 
@@ -679,7 +682,7 @@ ccp_fatal_error(unit)
 {
     int x;
 
-    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
+    if (ioctl(ttyfd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
        syslog(LOG_ERR, "ioctl(PPPIOCGFLAGS): %m");
        return 0;
     }
@@ -695,17 +698,17 @@ sifvjcomp(u, vjcomp, cidcomp, maxcid)
 {
     u_int x;
 
-    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
+    if (ioctl(ttyfd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
        syslog(LOG_ERR, "ioctl(PPIOCGFLAGS): %m");
        return 0;
     }
     x = vjcomp ? x | SC_COMP_TCP: x &~ SC_COMP_TCP;
     x = cidcomp? x & ~SC_NO_TCP_CCID: x | SC_NO_TCP_CCID;
-    if (ioctl(fd, PPPIOCSFLAGS, (caddr_t) &x) < 0) {
+    if (ioctl(ttyfd, PPPIOCSFLAGS, (caddr_t) &x) < 0) {
        syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
        return 0;
     }
-    if (ioctl(fd, PPPIOCSMAXCID, (caddr_t) &maxcid) < 0) {
+    if (ioctl(ttyfd, PPPIOCSMAXCID, (caddr_t) &maxcid) < 0) {
        syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
        return 0;
     }
@@ -740,18 +743,18 @@ sifup(u)
     if_is_up = 1;
     npi.protocol = PPP_IP;
     npi.mode = NPMODE_PASS;
-    if (ioctl(fd, PPPIOCSNPMODE, &npi) < 0) {
+    if (ioctl(ttyfd, PPPIOCSNPMODE, &npi) < 0) {
        if (errno != ENOTTY) {
            syslog(LOG_ERR, "ioctl(PPPIOCSNPMODE): %m");
            return 0;
        }
        /* for backwards compatibility */
-       if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
+       if (ioctl(ttyfd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
            syslog(LOG_ERR, "ioctl (PPPIOCGFLAGS): %m");
            return 0;
        }
        x |= SC_ENABLE_IP;
-       if (ioctl(fd, PPPIOCSFLAGS, (caddr_t) &x) < 0) {
+       if (ioctl(ttyfd, PPPIOCSFLAGS, (caddr_t) &x) < 0) {
            syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
            return 0;
        }
@@ -774,18 +777,18 @@ sifdown(u)
     rv = 1;
     npi.protocol = PPP_IP;
     npi.mode = NPMODE_ERROR;
-    if (ioctl(fd, PPPIOCSNPMODE, (caddr_t) &npi) < 0) {
+    if (ioctl(ttyfd, PPPIOCSNPMODE, (caddr_t) &npi) < 0) {
        if (errno != ENOTTY) {
            syslog(LOG_ERR, "ioctl(PPPIOCSNPMODE): %m");
            rv = 0;
        } else {
            /* backwards compatibility */
-           if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
+           if (ioctl(ttyfd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
                syslog(LOG_ERR, "ioctl (PPPIOCGFLAGS): %m");
                rv = 0;
            } else {
                x &= ~SC_ENABLE_IP;
-               if (ioctl(fd, PPPIOCSFLAGS, (caddr_t) &x) < 0) {
+               if (ioctl(ttyfd, PPPIOCSFLAGS, (caddr_t) &x) < 0) {
                    syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
                    rv = 0;
                }
index 11e88b49b786ea3947cb6a657d2a178fce5dbdcd..76feef21e489e0111fcefc94ed014666b49633c1 100644 (file)
@@ -19,7 +19,7 @@
  */
 
 #ifndef lint
-static char rcsid[] = "$Id: sys-aix4.c,v 1.7 1995/10/27 03:45:34 paulus Exp $";
+static char rcsid[] = "$Id: sys-aix4.c,v 1.8 1996/01/01 23:04:13 paulus Exp $";
 #endif
 
 /*
@@ -185,7 +185,8 @@ ppp_available()
  * establish_ppp - Turn the serial port into a ppp interface.
  */
 void
-establish_ppp()
+establish_ppp(fd)
+    int fd;
 {
     /* go through and save the name of all the modules, then pop em */
     for (;;) { 
@@ -258,7 +259,8 @@ establish_ppp()
  * modules.  This shouldn't call die() because it's called from die().
  */
 void
-disestablish_ppp()
+disestablish_ppp(fd)
+    int fd;
 {
     int flags;
     char *s;
@@ -510,7 +512,8 @@ set_up_tty(fd, local)
  * restore_tty - restore the terminal to the saved settings.
  */
 void
-restore_tty()
+restore_tty(fd)
+    int fd;
 {
     if (restore_term) {
        if (!default_device) {
@@ -562,13 +565,13 @@ output(unit, p, len)
     str.len = len;
     str.buf = (caddr_t) p;
     retries = 4;
-    while (putmsg(fd, NULL, &str, 0) < 0) {
+    while (putmsg(ttyfd, NULL, &str, 0) < 0) {
        if (--retries < 0 || (errno != EWOULDBLOCK && errno != EAGAIN)) {
            if (errno != ENXIO)
                syslog(LOG_ERR, "Couldn't send packet: %m");
            break;
        }
-       pfd.fd = fd;
+       pfd.fd = ttyfd;
        pfd.events = POLLOUT;
        poll(&pfd, 1, 250);     /* wait for up to 0.25 seconds */
     }
@@ -585,7 +588,7 @@ wait_input(timo)
     struct pollfd pfd;
 
     t = timo == NULL? -1: timo->tv_sec * 1000 + timo->tv_usec / 1000;
-    pfd.fd = fd;
+    pfd.fd = ttyfd;
     pfd.events = POLLIN | POLLPRI | POLLHUP;
     if (poll(&pfd, 1, t) < 0 && errno != EINTR) {
        syslog(LOG_ERR, "poll: %m");
@@ -609,12 +612,12 @@ read_packet(buf)
     ctl.maxlen = sizeof(ctlbuf);
     ctl.buf = (caddr_t) ctlbuf;
     i = 0;
-    len = getmsg(fd, &ctl, &str, &i);
+    len = getmsg(ttyfd, &ctl, &str, &i);
     if (len < 0) {
        if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) {
            return -1;
        }
-       syslog(LOG_ERR, "getmsg(fd) %m");
+       syslog(LOG_ERR, "getmsg %m");
        die(1);
     }
     if (len) 
@@ -652,19 +655,19 @@ ppp_send_config(unit, mtu, asyncmap, pcomp, accomp)
        quit();
     }
 
-    if(ioctl(fd, SIOCSIFASYNCMAP, asyncmap) < 0) {
+    if(ioctl(ttyfd, SIOCSIFASYNCMAP, asyncmap) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFASYNCMAP): %m");
        quit();
     }
 
     c = (pcomp? 1: 0);
-    if(ioctl(fd, SIOCSIFCOMPPROT, c) < 0) {
+    if(ioctl(ttyfd, SIOCSIFCOMPPROT, c) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFCOMPPROT): %m");
        quit();
     }
 
     c = (accomp? 1: 0);
-    if(ioctl(fd, SIOCSIFCOMPAC, c) < 0) {
+    if(ioctl(ttyfd, SIOCSIFCOMPAC, c) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFCOMPAC): %m");
        quit();
     }
@@ -679,7 +682,7 @@ ppp_set_xaccm(unit, accm)
     int unit;
     ext_accm accm;
 {
-    if (ioctl(fd, SIOCSIFXASYNCMAP, accm) < 0 && errno != ENOTTY)
+    if (ioctl(ttyfd, SIOCSIFXASYNCMAP, accm) < 0 && errno != ENOTTY)
        syslog(LOG_WARNING, "ioctl(set extended ACCM): %m");
 }
 
@@ -696,21 +699,21 @@ ppp_recv_config(unit, mru, asyncmap, pcomp, accomp)
 {
     char c;
 
-    if (ioctl(fd, SIOCSIFMRU, mru) < 0) {
+    if (ioctl(ttyfd, SIOCSIFMRU, mru) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFMRU): %m");
     }
 
-    if (ioctl(fd, SIOCSIFRASYNCMAP, (caddr_t) asyncmap) < 0) {
+    if (ioctl(ttyfd, SIOCSIFRASYNCMAP, (caddr_t) asyncmap) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFRASYNCMAP): %m");
     }
 
     c = 2 + (pcomp? 1: 0);
-    if(ioctl(fd, SIOCSIFCOMPPROT, c) < 0) {
+    if(ioctl(ttyfd, SIOCSIFCOMPPROT, c) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFCOMPPROT): %m");
     }
 
     c = 2 + (accomp? 1: 0);
-    if (ioctl(fd, SIOCSIFCOMPAC, c) < 0) {
+    if (ioctl(ttyfd, SIOCSIFCOMPAC, c) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFCOMPAC): %m");
     }
 }
@@ -731,7 +734,7 @@ ccp_test(unit, opt_ptr, opt_len, for_transmit)
     data.length = opt_len;
     data.transmit = for_transmit;
     BCOPY(opt_ptr, data.opt_data, opt_len);
-    if (ioctl(fd, SIOCSCOMPRESS, &data) >= 0)
+    if (ioctl(ttyfd, SIOCSCOMPRESS, &data) >= 0)
        return 1;
     return (errno == ENOSR)? 0: -1;
 }
@@ -746,7 +749,7 @@ ccp_flags_set(unit, isopen, isup)
     int x;
 
     x = (isopen? 1: 0) + (isup? 2: 0);
-    if (ioctl(fd, SIOCSIFCOMP, x) < 0 && errno != ENOTTY)
+    if (ioctl(ttyfd, SIOCSIFCOMP, x) < 0 && errno != ENOTTY)
        syslog(LOG_ERR, "ioctl (SIOCSIFCOMP): %m");
 }
 
@@ -761,7 +764,7 @@ ccp_fatal_error(unit)
 {
     int x;
 
-    if (ioctl(fd, SIOCGIFCOMP, &x) < 0) {
+    if (ioctl(ttyfd, SIOCGIFCOMP, &x) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCGIFCOMP): %m");
        return 0;
     }
@@ -778,7 +781,7 @@ sifvjcomp(u, vjcomp, cidcomp, maxcid)
     int x;
 
     x = (vjcomp? 1: 0) + (cidcomp? 0: 2) + (maxcid << 4);
-    if (ioctl(fd, SIOCSIFVJCOMP, x) < 0) {
+    if (ioctl(ttyfd, SIOCSIFVJCOMP, x) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFVJCOMP): %m");
        return 0;
     }
@@ -808,7 +811,7 @@ sifup(u)
     if_is_up = 1;
     npi.protocol = PPP_IP;
     npi.mode = NPMODE_PASS;
-    if (ioctl(fd, SIOCSETNPMODE, &npi) < 0) {
+    if (ioctl(ttyfd, SIOCSETNPMODE, &npi) < 0) {
         if (errno != ENOTTY) {
             syslog(LOG_ERR, "ioctl(SIOCSETNPMODE): %m");
             return 0;
@@ -832,7 +835,7 @@ sifdown(u)
     rv = 1;
     npi.protocol = PPP_IP;
     npi.mode = NPMODE_ERROR;
-    if (ioctl(fd, SIOCSETNPMODE, &npi) < 0) {
+    if (ioctl(ttyfd, SIOCSETNPMODE, &npi) < 0) {
         if (errno != ENOTTY) {
             syslog(LOG_ERR, "ioctl(SIOCSETNPMODE): %m");
             rv = 0;
index 5c3132979f397f8cf4ba851e05b69b5b4358fc78..d176edf2d01db235718b7874052fc1bc3758486d 100644 (file)
@@ -115,7 +115,7 @@ static int get_flags (void)
   {    
     int flags;
 
-    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &flags) < 0)
+    if (ioctl(ttyfd, PPPIOCGFLAGS, (caddr_t) &flags) < 0)
       {
        syslog(LOG_ERR, "ioctl(PPPIOCGFLAGS): %m");
        quit();
@@ -129,7 +129,7 @@ static void set_flags (int flags)
   {    
     MAINDEBUG ((LOG_DEBUG, "set flags = %x\n", flags));
 
-    if (ioctl(fd, PPPIOCSFLAGS, (caddr_t) &flags) < 0)
+    if (ioctl(ttyfd, PPPIOCSFLAGS, (caddr_t) &flags) < 0)
       {
        syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS, %x): %m", flags);
        quit();
@@ -199,7 +199,7 @@ void note_debug_level (void)
 
 int set_kdebugflag (int requested_level)
   {
-    if (ioctl(fd, PPPIOCGDEBUG, &prev_kdebugflag) < 0)
+    if (ioctl(ttyfd, PPPIOCGDEBUG, &prev_kdebugflag) < 0)
       {
        syslog(LOG_ERR, "ioctl(PPPIOCGDEBUG): %m");
        return (0);
@@ -207,7 +207,7 @@ int set_kdebugflag (int requested_level)
     
     if (prev_kdebugflag != requested_level)
       {
-       if (ioctl(fd, PPPIOCSDEBUG, &requested_level) < 0)
+       if (ioctl(ttyfd, PPPIOCSDEBUG, &requested_level) < 0)
          {
            syslog (LOG_ERR, "ioctl(PPPIOCSDEBUG): %m");
            return (0);
@@ -222,7 +222,7 @@ int set_kdebugflag (int requested_level)
  * establish_ppp - Turn the serial port into a ppp interface.
  */
 
-void establish_ppp (void)
+void establish_ppp (int fd)
   {
     int pppdisc = N_PPP;
     int sig    = SIGIO;
@@ -273,7 +273,7 @@ void establish_ppp (void)
  * This shouldn't call die() because it's called from die().
  */
 
-void disestablish_ppp(void)
+void disestablish_ppp(int fd)
   {
     int x;
     char *s;
@@ -283,13 +283,32 @@ void disestablish_ppp(void)
        syslog(LOG_WARNING, "Couldn't restore device fd flags: %m");
     initfdflags = -1;
 
+    if (still_ppp() && initdisc >= 0)
+      {
+       set_kdebugflag (prev_kdebugflag);
+       
+       if (ioctl(fd, TIOCSETD, &initdisc) < 0)
+         {
+           syslog(LOG_WARNING, "ioctl(TIOCSETD): %m");
+         }
+       
+       if (ioctl(fd, TIOCNXCL, 0) < 0)
+         {
+           syslog (LOG_WARNING, "ioctl(TIOCNXCL): %m");
+         }
+      }
+    initdisc = -1;
+  }
+
 /*
- * Fetch the flags for the device and generate appropriate error
- * messages.
+ * clean_check - Fetch the flags for the device and generate
+ * appropriate error messages.
  */
+void clean_check(void)
+  {
     if (still_ppp() && initdisc >= 0)
       {
-       if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) == 0)
+       if (ioctl(ttyfd, PPPIOCGFLAGS, (caddr_t) &x) == 0)
          {
            s = NULL;
            switch (~x & (SC_RCV_B7_0|SC_RCV_B7_1|SC_RCV_EVNP|SC_RCV_ODDP))
@@ -328,21 +347,9 @@ void disestablish_ppp(void)
                syslog(LOG_WARNING, "Problem: %s", s);
              }
          }
-       
-       set_kdebugflag (prev_kdebugflag);
-       
-       if (ioctl(fd, TIOCSETD, &initdisc) < 0)
-         {
-           syslog(LOG_WARNING, "ioctl(TIOCSETD): %m");
-         }
-       
-       if (ioctl(fd, TIOCNXCL, 0) < 0)
-         {
-           syslog (LOG_WARNING, "ioctl(TIOCNXCL): %m");
-         }
       }
-    initdisc = -1;
   }
+       
 
 /*
  * List of valid speeds.
@@ -566,7 +573,7 @@ void setdtr (int fd, int on)
  * restore_tty - restore the terminal to the saved settings.
  */
 
-void restore_tty (void)
+void restore_tty (int fd)
   {
     if (restore_term)
       {
@@ -603,7 +610,7 @@ void output (int unit, unsigned char *p, int len)
         log_packet(p, len, "sent ");
       }
     
-    if (write(fd, p, len) < 0)
+    if (write(ttyfd, p, len) < 0)
       {
        if (errno == EWOULDBLOCK || errno == ENOBUFS
            || errno == ENXIO || errno == EIO)
@@ -619,7 +626,7 @@ void output (int unit, unsigned char *p, int len)
   }
 
 /*
- * wait_input - wait until there is data available on fd,
+ * wait_input - wait until there is data available on ttyfd,
  * for the length of time specified by *timo (indefinite
  * if timo is NULL).
  */
@@ -630,9 +637,9 @@ void wait_input (struct timeval *timo)
     int n;
     
     FD_ZERO(&ready);
-    FD_SET(fd, &ready);
+    FD_SET(ttyfd, &ready);
 
-    n = select(fd+1, &ready, NULL, &ready, timo);
+    n = select(ttyfd+1, &ready, NULL, &ready, timo);
     if (n < 0 && errno != EINTR)
       {
        syslog(LOG_ERR, "select: %m");
@@ -648,14 +655,14 @@ int read_packet (unsigned char *buf)
   {
     int len;
   
-    len = read(fd, buf, PPP_MTU + PPP_HDRLEN);
+    len = read(ttyfd, buf, PPP_MTU + PPP_HDRLEN);
     if (len < 0)
       {
        if (errno == EWOULDBLOCK)
          {
            return -1;
          }
-       syslog(LOG_ERR, "read(fd): %m");
+       syslog(LOG_ERR, "read: %m");
        die(1);
       }
     return len;
@@ -691,7 +698,7 @@ void ppp_send_config (int unit,int mtu,u_int32_t asyncmap,int pcomp,int accomp)
          }
        
        MAINDEBUG ((LOG_DEBUG, "send_config: asyncmap = %lx\n", asyncmap));
-       if (ioctl(fd, PPPIOCSASYNCMAP, (caddr_t) &asyncmap) < 0)
+       if (ioctl(ttyfd, PPPIOCSASYNCMAP, (caddr_t) &asyncmap) < 0)
          {
            syslog(LOG_ERR, "ioctl(PPPIOCSASYNCMAP): %m");
            quit();
@@ -713,7 +720,7 @@ void ppp_set_xaccm (int unit, ext_accm accm)
     MAINDEBUG ((LOG_DEBUG, "set_xaccm: %08lx %08lx %08lx %08lx\n",
                accm[0], accm[1], accm[2], accm[3]));
 
-    if (ioctl(fd, PPPIOCSXASYNCMAP, accm) < 0 && errno != ENOTTY)
+    if (ioctl(ttyfd, PPPIOCSXASYNCMAP, accm) < 0 && errno != ENOTTY)
       {
        syslog(LOG_WARNING, "ioctl(set extended ACCM): %m");
       }
@@ -740,13 +747,13 @@ void ppp_recv_config (int unit,int mru,u_int32_t asyncmap,int pcomp,int accomp)
 /*
  * Set the receiver parameters
  */
-    if (ioctl(fd, PPPIOCSMRU, (caddr_t) &mru) < 0)
+    if (ioctl(ttyfd, PPPIOCSMRU, (caddr_t) &mru) < 0)
       {
        syslog(LOG_ERR, "ioctl(PPPIOCSMRU): %m");
       }
 
     MAINDEBUG ((LOG_DEBUG, "recv_config: asyncmap = %lx\n", asyncmap));
-    if (ioctl(fd, PPPIOCSRASYNCMAP, (caddr_t) &asyncmap) < 0)
+    if (ioctl(ttyfd, PPPIOCSRASYNCMAP, (caddr_t) &asyncmap) < 0)
       {
         syslog(LOG_ERR, "ioctl(PPPIOCSRASYNCMAP): %m");
        quit();
@@ -771,7 +778,7 @@ int ccp_test (int unit, u_char *opt_ptr, int opt_len, int for_transmit)
     data.length   = opt_len;
     data.transmit = for_transmit;
 
-    if (ioctl(fd, PPPIOCSCOMPRESS, (caddr_t) &data) >= 0)
+    if (ioctl(ttyfd, PPPIOCSCOMPRESS, (caddr_t) &data) >= 0)
       {
        return 1;
       }
@@ -817,7 +824,7 @@ int sifvjcomp (int u, int vjcomp, int cidcomp, int maxcid)
 
     if (vjcomp)
       {
-        if (ioctl (fd, PPPIOCSMAXCID, (caddr_t) &maxcid) < 0)
+        if (ioctl (ttyfd, PPPIOCSMAXCID, (caddr_t) &maxcid) < 0)
          {
            syslog (LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
            vjcomp = 0;
index 261019820f3dc6d450e380ee3963d391860eb2c9..5f8233ebb8ca0d79e3094a6bd21a7df9846f40ca 100644 (file)
@@ -19,7 +19,7 @@
  */
 
 #ifndef lint
-static char rcsid[] = "$Id: sys-osf.c,v 1.5 1995/10/27 03:47:32 paulus Exp $";
+static char rcsid[] = "$Id: sys-osf.c,v 1.6 1996/01/01 23:07:07 paulus Exp $";
 #endif
 
 /*
@@ -71,7 +71,7 @@ static int    initfdflags = -1; /* Initial file descriptor flags for fd */
 
 static int sockfd;             /* socket for doing interface ioctls */
 
-int ttyfd = -1;   /*  Original ttyfd if we did a streamify()  */
+int orig_ttyfd = -1;   /*  Original ttyfd if we did a streamify()  */
 
 static int     if_is_up;       /* Interface has been marked up */
 static u_int32_t default_route_gateway;        /* Gateway for default route added */
@@ -266,7 +266,7 @@ streamify(int fd)
            }
        } else {
            close(fdes[1]);
-           ttyfd = fd;
+           orig_ttyfd = fd;
            return(fdes[0]);
         }
     }
@@ -279,12 +279,13 @@ streamify(int fd)
  * establish_ppp - Turn the serial port into a ppp interface.
  */
 void
-establish_ppp()
+establish_ppp(fd)
+    int fd;
 {
     int ret;
 
     if (isastream(fd) != 1) {
-       if ((fd=streamify(fd)) < 0) {
+       if ((ttyfd = fd = streamify(fd)) < 0) {
            syslog(LOG_ERR, "Couldn't get a STREAMS module!\n");
            die(1);
        }
@@ -382,7 +383,8 @@ void prstrstack(int fd)
  * modules.  This shouldn't call die() because it's called from die().
  */
 void
-disestablish_ppp()
+disestablish_ppp(fd)
+    int fd;
 {
     int flags;
     char *s;
@@ -399,11 +401,42 @@ disestablish_ppp()
        return;
     }
 
+    if (pushed_ppp) {
+       while (ioctl(fd, I_POP, 0) == 0) /* pop any we pushed */
+           ;
+       pushed_ppp = 0;
+
+       for (; str_module_count > 0; str_module_count--) {
+           if (ioctl(fd, I_PUSH, str_modules[str_module_count-1].modname)) {
+               if (errno != ENXIO)
+                   syslog(LOG_WARNING, "str_restore: couldn't push module %s: %m",
+                          str_modules[str_module_count-1].modname);
+           } else {
+               MAINDEBUG((LOG_INFO, "str_restore: pushed module %s",
+                          str_modules[str_module_count-1].modname));
+           }
+       }
+
+       if (orig_ttyfd >= 0) {
+           close(fd);
+           ttyfd = orig_ttyfd;
+           fd = -1;
+        }
+    }
+
+}
+
+/*
+ * clean_check - check whether the link seems to be 8-bit clean.
+ */
+void
+clean_check()
+{
     if (pushed_ppp) {
        /*
         * Check whether the link seems not to be 8-bit clean.
         */
-       if (ioctl(fd, (int)SIOCGIFDEBUG, (caddr_t) &flags) == 0) {
+       if (ioctl(ttyfd, (int)SIOCGIFDEBUG, (caddr_t) &flags) == 0) {
            s = NULL;
            switch (~flags & PAI_FLAGS_HIBITS) {
              case PAI_FLAGS_B7_0:
@@ -424,32 +457,9 @@ disestablish_ppp()
                syslog(LOG_WARNING, "All received characters had %s", s);
            }
        }
-
-       while (ioctl(fd, I_POP, 0) == 0) /* pop any we pushed */
-           ;
-       pushed_ppp = 0;
-
-       for (; str_module_count > 0; str_module_count--) {
-           if (ioctl(fd, I_PUSH, str_modules[str_module_count-1].modname)) {
-               if (errno != ENXIO)
-                   syslog(LOG_WARNING, "str_restore: couldn't push module %s: %m",
-                          str_modules[str_module_count-1].modname);
-           } else {
-               MAINDEBUG((LOG_INFO, "str_restore: pushed module %s",
-                          str_modules[str_module_count-1].modname));
-           }
-       }
-
-       if (ttyfd >= 0) {
-           close(fd);
-           fd = ttyfd;
-           ttyfd = -1;
-        }
     }
-
 }
 
-
 /*
  * List of valid speeds.
  */
@@ -633,7 +643,8 @@ set_up_tty(fd, local)
  * restore_tty - restore the terminal to the saved settings.
  */
 void
-restore_tty()
+restore_tty(fd)
+    int fd;
 {
     if (restore_term) {
        if (!default_device) {
@@ -686,13 +697,13 @@ output(unit, p, len)
     str.len = len;
     str.buf = (caddr_t) p;
     retries = 4;
-    while (putmsg(fd, NULL, &str, 0) < 0) {
+    while (putmsg(ttyfd, NULL, &str, 0) < 0) {
        if (--retries < 0 || (errno != EWOULDBLOCK && errno != EAGAIN)) {
            if (errno != ENXIO)
                syslog(LOG_ERR, "Couldn't send packet: %m");
            break;
        }
-       pfd.fd = fd;
+       pfd.fd = ttyfd;
        pfd.events = POLLOUT;
        poll(&pfd, 1, 250);     /* wait for up to 0.25 seconds */
     }
@@ -709,7 +720,7 @@ wait_input(timo)
     struct pollfd pfd;
 
     t = timo == NULL? -1: timo->tv_sec * 1000 + timo->tv_usec / 1000;
-    pfd.fd = fd;
+    pfd.fd = ttyfd;
     pfd.events = POLLIN | POLLPRI | POLLHUP;
     if (poll(&pfd, 1, t) < 0 && errno != EINTR) {
        syslog(LOG_ERR, "poll: %m");
@@ -733,12 +744,12 @@ read_packet(buf)
     ctl.maxlen = sizeof(ctlbuf);
     ctl.buf = (caddr_t) ctlbuf;
     i = 0;
-    len = getmsg(fd, &ctl, &str, &i);
+    len = getmsg(ttyfd, &ctl, &str, &i);
     if (len < 0) {
        if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) {
            return -1;
        }
-       syslog(LOG_ERR, "getmsg(fd) %m");
+       syslog(LOG_ERR, "getmsg %m");
        die(1);
     }
     if (len) 
@@ -776,19 +787,19 @@ ppp_send_config(unit, mtu, asyncmap, pcomp, accomp)
        quit();
     }
 
-    if(ioctl(fd, (int)SIOCSIFASYNCMAP, (caddr_t) &asyncmap) < 0) {
+    if(ioctl(ttyfd, (int)SIOCSIFASYNCMAP, (caddr_t) &asyncmap) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFASYNCMAP): %m");
        quit();
     }
 
     c = (pcomp? 1: 0);
-    if(ioctl(fd, (int)SIOCSIFCOMPPROT, &c) < 0) {
+    if(ioctl(ttyfd, (int)SIOCSIFCOMPPROT, &c) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFCOMPPROT): %m");
        quit();
     }
 
     c = (accomp? 1: 0);
-    if(ioctl(fd, (int)SIOCSIFCOMPAC, &c) < 0) {
+    if(ioctl(ttyfd, (int)SIOCSIFCOMPAC, &c) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFCOMPAC): %m");
        quit();
     }
@@ -803,7 +814,7 @@ ppp_set_xaccm(unit, accm)
     int unit;
     ext_accm accm;
 {
-    if (ioctl(fd, (int)SIOCSIFXASYNCMAP, accm) < 0 && errno != ENOTTY)
+    if (ioctl(ttyfd, (int)SIOCSIFXASYNCMAP, accm) < 0 && errno != ENOTTY)
        syslog(LOG_WARNING, "ioctl(set extended ACCM): %m");
 }
 
@@ -820,21 +831,21 @@ ppp_recv_config(unit, mru, asyncmap, pcomp, accomp)
 {
     char c;
 
-    if (ioctl(fd, (int)SIOCSIFMRU, &mru) < 0) {
+    if (ioctl(ttyfd, (int)SIOCSIFMRU, &mru) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFMRU): %m");
     }
 
-    if (ioctl(fd, (int)SIOCSIFRASYNCMAP, (caddr_t) &asyncmap) < 0) {
+    if (ioctl(ttyfd, (int)SIOCSIFRASYNCMAP, (caddr_t) &asyncmap) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFRASYNCMAP): %m");
     }
 
     c = 2 + (pcomp? 1: 0);
-    if(ioctl(fd, (int)SIOCSIFCOMPPROT, &c) < 0) {
+    if(ioctl(ttyfd, (int)SIOCSIFCOMPPROT, &c) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFCOMPPROT): %m");
     }
 
     c = 2 + (accomp? 1: 0);
-    if (ioctl(fd, (int)SIOCSIFCOMPAC, &c) < 0) {
+    if (ioctl(ttyfd, (int)SIOCSIFCOMPAC, &c) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFCOMPAC): %m");
     }
 }
@@ -855,7 +866,7 @@ ccp_test(unit, opt_ptr, opt_len, for_transmit)
     data.length = opt_len;
     data.transmit = for_transmit;
     BCOPY(opt_ptr, data.opt_data, opt_len);
-    if (ioctl(fd, (int)SIOCSCOMPRESS, (caddr_t) &data) >= 0)
+    if (ioctl(ttyfd, (int)SIOCSCOMPRESS, (caddr_t) &data) >= 0)
        return 1;
     return (errno == ENOSR)? 0: -1;
 }
@@ -870,7 +881,7 @@ ccp_flags_set(unit, isopen, isup)
     int x;
 
     x = (isopen? 1: 0) + (isup? 2: 0);
-    if (ioctl(fd, (int)SIOCSIFCOMP, (caddr_t) &x) < 0 && errno != ENOTTY)
+    if (ioctl(ttyfd, (int)SIOCSIFCOMP, (caddr_t) &x) < 0 && errno != ENOTTY)
        syslog(LOG_ERR, "ioctl (SIOCSIFCOMP): %m");
 }
 
@@ -885,7 +896,7 @@ ccp_fatal_error(unit)
 {
     int x;
 
-    if (ioctl(fd, (int)SIOCGIFCOMP, (caddr_t) &x) < 0) {
+    if (ioctl(ttyfd, (int)SIOCGIFCOMP, (caddr_t) &x) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCGIFCOMP): %m");
        return 0;
     }
@@ -902,7 +913,7 @@ sifvjcomp(u, vjcomp, cidcomp, maxcid)
     char x;
 
     x = (vjcomp? 1: 0) + (cidcomp? 0: 2) + (maxcid << 4);
-    if (ioctl(fd, (int)SIOCSIFVJCOMP, (caddr_t) &x) < 0) {
+    if (ioctl(ttyfd, (int)SIOCSIFVJCOMP, (caddr_t) &x) < 0) {
        syslog(LOG_ERR, "ioctl(SIOCSIFVJCOMP): %m");
        return 0;
     }
@@ -932,7 +943,7 @@ sifup(u)
     if_is_up = 1;
     npi.protocol = PPP_IP;
     npi.mode = NPMODE_PASS;
-    if (ioctl(fd, (int)SIOCSETNPMODE, &npi) < 0) {
+    if (ioctl(ttyfd, (int)SIOCSETNPMODE, &npi) < 0) {
        if (errno != ENOTTY) {
            syslog(LOG_ERR, "ioctl(SIOCSETNPMODE): %m");
            return 0;
@@ -955,7 +966,7 @@ sifdown(u)
     rv = 1;
     npi.protocol = PPP_IP;
     npi.mode = NPMODE_ERROR;
-    if (ioctl(fd, (int)SIOCSETNPMODE, (caddr_t) &npi) < 0) {
+    if (ioctl(ttyfd, (int)SIOCSETNPMODE, (caddr_t) &npi) < 0) {
        if (errno != ENOTTY) {
            syslog(LOG_ERR, "ioctl(SIOCSETNPMODE): %m");
            rv = 0;