From: Christos Zoulas Date: Fri, 4 Sep 1998 18:49:16 +0000 (+0000) Subject: add support for CDTRCTS flow control X-Git-Tag: RELEASE_2_3_6~51 X-Git-Url: http://git.ozlabs.org/?p=ppp.git;a=commitdiff_plain;h=44e1777caa7658b455b5269f895734a5c33d2246;ds=sidebyside add support for CDTRCTS flow control --- diff --git a/pppd/options.c b/pppd/options.c index 5a194b5..5481096 100644 --- a/pppd/options.c +++ b/pppd/options.c @@ -18,7 +18,7 @@ */ #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 @@ -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 setcdtrcts __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 */ + {"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 */ @@ -435,6 +439,7 @@ Usage: %s [ options ], where options are:\n\ auth Require authentication from peer\n\ connect

Invoke shell command

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 Take options from file \n\ modem Use modem control lines\n\ @@ -1853,6 +1858,14 @@ setnocrtscts(argv) return (1); } +static int +setcdtrcts(argv) + char **argv; +{ + crtscts = 2; + return (1); +} + static int setxonxoff(argv) char **argv; diff --git a/pppd/pppd.8 b/pppd/pppd.8 index 5afc685..e7ea9c4 100644 --- a/pppd/pppd.8 +++ b/pppd/pppd.8 @@ -1,5 +1,5 @@ .\" 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 @@ -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 -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 @@ -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 -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 diff --git a/pppd/sys-bsd.c b/pppd/sys-bsd.c index 12bbdde..88d2284 100644 --- a/pppd/sys-bsd.c +++ b/pppd/sys-bsd.c @@ -21,7 +21,7 @@ */ #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 @@ -385,10 +385,22 @@ set_up_tty(fd, local) } 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; +#ifdef CDTRCTS + tios.c_cflag &= ~CDTRCTS; +#endif + } tios.c_cflag |= CS8 | CREAD | HUPCL; if (local || !modem)