add support for CDTRCTS flow control
authorChristos Zoulas <christos@zoulas.com>
Fri, 4 Sep 1998 18:49:16 +0000 (18:49 +0000)
committerChristos Zoulas <christos@zoulas.com>
Fri, 4 Sep 1998 18:49:16 +0000 (18:49 +0000)
pppd/options.c
pppd/pppd.8
pppd/sys-bsd.c

index 5a194b59ea1054511f3ec402601753c529189d7b..54810965f7a069c032cca0dafe0bf1684d1f7628 100644 (file)
@@ -18,7 +18,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char rcsid[] = "$Id: options.c,v 1.42 1998/03/26 04:46:06 paulus Exp $";
+static char rcsid[] = "$Id: options.c,v 1.43 1998/09/04 18:49:15 christos Exp $";
 #endif
 
 #include <ctype.h>
 #endif
 
 #include <ctype.h>
@@ -171,6 +171,7 @@ static int setdomain __P((char **));
 static int setnetmask __P((char **));
 static int setcrtscts __P((char **));
 static int setnocrtscts __P((char **));
 static int setnetmask __P((char **));
 static int setcrtscts __P((char **));
 static int setnocrtscts __P((char **));
+static int setcdtrcts __P((char **));
 static int setxonxoff __P((char **));
 static int setnodetach __P((char **));
 static int setupdetach __P((char **));
 static int setxonxoff __P((char **));
 static int setnodetach __P((char **));
 static int setupdetach __P((char **));
@@ -311,6 +312,9 @@ static struct cmd {
     {"crtscts", 0, setcrtscts},        /* set h/w flow control */
     {"nocrtscts", 0, setnocrtscts}, /* clear h/w flow control */
     {"-crtscts", 0, setnocrtscts}, /* clear h/w flow control */
     {"crtscts", 0, setcrtscts},        /* set h/w flow control */
     {"nocrtscts", 0, setnocrtscts}, /* clear h/w flow control */
     {"-crtscts", 0, setnocrtscts}, /* clear h/w flow control */
+    {"cdtrcts", 0, setcdtrcts},  /* set alternate h/w flow control */
+    {"nocdtrcts", 0, setnocrtscts}, /* clear h/w flow control */
+    {"-cdtrcts", 0, setnocrtscts}, /* clear h/w flow control */
     {"xonxoff", 0, setxonxoff},        /* set s/w flow control */
     {"debug", 0, setdebug},    /* Increase debugging level */
     {"kdebug", 1, setkdebug},  /* Enable kernel-level debugging */
     {"xonxoff", 0, setxonxoff},        /* set s/w flow control */
     {"debug", 0, setdebug},    /* Increase debugging level */
     {"kdebug", 1, setkdebug},  /* Enable kernel-level debugging */
@@ -435,6 +439,7 @@ Usage: %s [ options ], where options are:\n\
        auth            Require authentication from peer\n\
         connect <p>     Invoke shell command <p> to set up the serial line\n\
        crtscts         Use hardware RTS/CTS flow control\n\
        auth            Require authentication from peer\n\
         connect <p>     Invoke shell command <p> to set up the serial line\n\
        crtscts         Use hardware RTS/CTS flow control\n\
+       cdtrcts         Use hardware DTR/CTS flow control (if supported)\n\
        defaultroute    Add default route through interface\n\
        file <f>        Take options from file <f>\n\
        modem           Use modem control lines\n\
        defaultroute    Add default route through interface\n\
        file <f>        Take options from file <f>\n\
        modem           Use modem control lines\n\
@@ -1853,6 +1858,14 @@ setnocrtscts(argv)
     return (1);
 }
 
     return (1);
 }
 
+static int
+setcdtrcts(argv)
+    char **argv;
+{
+    crtscts = 2;
+    return (1);
+}
+
 static int
 setxonxoff(argv)
     char **argv;
 static int
 setxonxoff(argv)
     char **argv;
index 5afc685e3e7a2a079f27a72c917d8991fe2d7a84..e7ea9c4a5e8eb2718aba3fd54af1dfe4def01eff 100644 (file)
@@ -1,5 +1,5 @@
 .\" manual page [] for pppd 2.3
 .\" manual page [] for pppd 2.3
-.\" $Id: pppd.8,v 1.27 1998/03/31 04:31:08 paulus Exp $
+.\" $Id: pppd.8,v 1.28 1998/09/04 18:49:15 christos Exp $
 .\" SH section heading
 .\" SS subsection heading
 .\" LP paragraph
 .\" SH section heading
 .\" SS subsection heading
 .\" LP paragraph
@@ -92,10 +92,29 @@ program to dial the modem and start the remote ppp session.  This
 option is privileged if the \fInoauth\fR option is used.
 .TP
 .B crtscts
 option is privileged if the \fInoauth\fR option is used.
 .TP
 .B crtscts
-Use hardware flow control (i.e. RTS/CTS) to control the flow of data
-on the serial port.  If neither the \fIcrtscts\fR nor the
-\fInocrtscts\fR option is given, the hardware flow control setting
-for the serial port is left unchanged.
+Use hardware flow control (i.e. RTS/CTS) to control the flow of
+data on the serial port.  If neither the \fIcrtscts\fR, the
+\fInocrtscts\fR, the \fIcdtrcts\fR nor the \fInocdtrcts\fR option
+is given, the hardware flow control setting for the serial port is
+left unchanged.
+Some serial ports (such as Macintosh serial ports) lack a true
+RTS output. Such serial ports use this mode to impliment
+unidirectional flow control. The serial port will
+suspend transmission when requested by the modem (via CTS)
+but will be unable to request the modem stop sending to the
+computer. This mode retains the ability to use DTR as
+a modem control line.
+.TP
+.B cdtrcts
+Use a non-standard hardware flow control (i.e. DTR/CTS) to control
+the flow of data on the serial port.  If neither the \fIcrtscts\fR,
+the \fInocrtscts\fR, the \fIcdtrcts\fR nor the \fInocdtrcts\fR
+option is given, the hardware flow control setting for the serial
+port is left unchanged.
+Some serial ports (such as Macintosh serial ports) lack a true
+RTS output. Such serial ports use this mode to impliment true
+bi-directional flow control. The sacrafice is that this flow
+control mode does not permit using DTR as a modem control line.
 .TP
 .B defaultroute
 Add a default route to the system routing tables, using the peer as
 .TP
 .B defaultroute
 Add a default route to the system routing tables, using the peer as
@@ -469,10 +488,14 @@ should only be required if the peer is buggy and gets confused by
 requests from pppd for CCP negotiation.
 .TP
 .B nocrtscts
 requests from pppd for CCP negotiation.
 .TP
 .B nocrtscts
-Disable hardware flow control (i.e. RTS/CTS) on the serial port.  If
-neither the \fIcrtscts\fR nor the \fInocrtscts\fR option is given,
-the hardware flow control setting for the serial port is left
-unchanged.
+Disable hardware flow control (i.e. RTS/CTS) on the serial port.
+If neither the \fIcrtscts\fR nor the \fInocrtscts\fR nor the
+\fIcdtrcts\fR nor the \fInodtrcts\fR option is given, the hardware
+flow control setting for the serial port is left unchanged.
+.TP
+.B nodtrcts
+This option is a synonym for \fInocrtscts\fR. Either of these options will
+disable both forms of hardware flow control.
 .TP
 .B nodefaultroute
 Disable the \fIdefaultroute\fR option.  The system administrator who
 .TP
 .B nodefaultroute
 Disable the \fIdefaultroute\fR option.  The system administrator who
index 12bbdde79ea41d27c6aeb6f2305646a10f48823c..88d22848272ab7461254e38348e16b513ad64f44 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char rcsid[] = "$Id: sys-bsd.c,v 1.32 1998/09/02 20:58:13 christos Exp $";
+static char rcsid[] = "$Id: sys-bsd.c,v 1.33 1998/09/04 18:49:16 christos Exp $";
 /*     $NetBSD: sys-bsd.c,v 1.1.1.3 1997/09/26 18:53:04 christos Exp $ */
 #endif
 
 /*     $NetBSD: sys-bsd.c,v 1.1.1.3 1997/09/26 18:53:04 christos Exp $ */
 #endif
 
@@ -385,10 +385,22 @@ set_up_tty(fd, local)
     }
 
     tios.c_cflag &= ~(CSIZE | CSTOPB | PARENB | CLOCAL);
     }
 
     tios.c_cflag &= ~(CSIZE | CSTOPB | PARENB | CLOCAL);
-    if (crtscts > 0 && !local)
-       tios.c_cflag |= CRTSCTS;
-    else if (crtscts < 0)
+    if (crtscts > 0 && !local) {
+        if (crtscts == 2) {
+#ifdef CDTRCTS
+            tios.c_cflag |= CDTRCTS;
+#else
+           syslog(LOG_ERR, "System does not support DTR/CTS flow control");
+           die(1);
+#endif
+       } else
+           tios.c_cflag |= CRTSCTS;
+    } else if (crtscts < 0) {
        tios.c_cflag &= ~CRTSCTS;
        tios.c_cflag &= ~CRTSCTS;
+#ifdef CDTRCTS
+       tios.c_cflag &= ~CDTRCTS;
+#endif
+    }
 
     tios.c_cflag |= CS8 | CREAD | HUPCL;
     if (local || !modem)
 
     tios.c_cflag |= CS8 | CREAD | HUPCL;
     if (local || !modem)