diff options
author | brian <brian@FreeBSD.org> | 1999-05-13 19:29:40 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 1999-05-13 19:29:40 +0000 |
commit | bc576fdb28e703a8f2cca219067e976735d3815d (patch) | |
tree | a636b4a3f920f461b02bf8d2aae8cb6594e3a1b4 /usr.sbin/ppp/tty.c | |
parent | 2ff48aab7d0e0a07f0f6d5b2f85fc3b8b0aaf5b6 (diff) | |
download | FreeBSD-src-bc576fdb28e703a8f2cca219067e976735d3815d.zip FreeBSD-src-bc576fdb28e703a8f2cca219067e976735d3815d.tar.gz |
Initialise the struct device part of struct ttydevice.
Diffstat (limited to 'usr.sbin/ppp/tty.c')
-rw-r--r-- | usr.sbin/ppp/tty.c | 137 |
1 files changed, 69 insertions, 68 deletions
diff --git a/usr.sbin/ppp/tty.c b/usr.sbin/ppp/tty.c index a825d70..eac49d4 100644 --- a/usr.sbin/ppp/tty.c +++ b/usr.sbin/ppp/tty.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: tty.c,v 1.2 1999/05/12 09:49:07 brian Exp $ + * $Id: tty.c,v 1.3 1999/05/13 16:35:13 brian Exp $ */ #include <sys/param.h> @@ -154,73 +154,6 @@ tty_Unlock(struct physical *p) log_Printf(LogALERT, "%s: Can't uu_unlock %s\n", p->link.name, fn); } -static struct device * -tty_SetupDevice(struct physical *p) -{ - struct ttydevice *dev; - struct termios ios; - int oldflag; - - if ((dev = malloc(sizeof *dev)) == NULL) - return NULL; - - tcgetattr(p->fd, &ios); - dev->ios = ios; - - log_Printf(LogDEBUG, "%s: tty_SetupDevice: physical (get): fd = %d," - " iflag = %lx, oflag = %lx, cflag = %lx\n", p->link.name, p->fd, - (u_long)ios.c_iflag, (u_long)ios.c_oflag, (u_long)ios.c_cflag); - - cfmakeraw(&ios); - if (p->cfg.rts_cts) - ios.c_cflag |= CLOCAL | CCTS_OFLOW | CRTS_IFLOW; - else { - ios.c_cflag |= CLOCAL; - ios.c_iflag |= IXOFF; - } - ios.c_iflag |= IXON; - if (p->type != PHYS_DEDICATED) - ios.c_cflag |= HUPCL; - - if (p->type != PHYS_DIRECT) { - /* Change tty speed when we're not in -direct mode */ - ios.c_cflag &= ~(CSIZE | PARODD | PARENB); - ios.c_cflag |= p->cfg.parity; - if (cfsetspeed(&ios, IntToSpeed(p->cfg.speed)) == -1) - log_Printf(LogWARN, "%s: %s: Unable to set speed to %d\n", - p->link.name, p->name.full, p->cfg.speed); - } - tcsetattr(p->fd, TCSADRAIN, &ios); - log_Printf(LogDEBUG, "%s: physical (put): iflag = %lx, oflag = %lx, " - "cflag = %lx\n", p->link.name, (u_long)ios.c_iflag, - (u_long)ios.c_oflag, (u_long)ios.c_cflag); - - if (ioctl(p->fd, TIOCMGET, &dev->mbits) == -1) { - if (p->type != PHYS_DIRECT) { - log_Printf(LogWARN, "%s: Open: Cannot get physical status: %s\n", - p->link.name, strerror(errno)); - physical_Close(p); - return NULL; - } else - dev->mbits = TIOCM_CD; - } - log_Printf(LogDEBUG, "%s: Open: physical control = %o\n", - p->link.name, dev->mbits); - - oldflag = fcntl(p->fd, F_GETFL, 0); - if (oldflag < 0) { - log_Printf(LogWARN, "%s: Open: Cannot get physical flags: %s\n", - p->link.name, strerror(errno)); - physical_Close(p); - return NULL; - } else - fcntl(p->fd, F_SETFL, oldflag & ~O_NONBLOCK); - - physical_SetupStack(p, PHYSICAL_NOFORCE); - - return &dev->dev; -} - /* * tty_Timeout() watches the DCD signal and mentions it if it's status * changes. @@ -443,6 +376,74 @@ static struct device basettydevice = { tty_OpenInfo }; +static struct device * +tty_SetupDevice(struct physical *p) +{ + struct ttydevice *dev; + struct termios ios; + int oldflag; + + if ((dev = malloc(sizeof *dev)) == NULL) + return NULL; + + memcpy(&dev->dev, &basettydevice, sizeof dev->dev); + tcgetattr(p->fd, &ios); + dev->ios = ios; + + log_Printf(LogDEBUG, "%s: tty_SetupDevice: physical (get): fd = %d," + " iflag = %lx, oflag = %lx, cflag = %lx\n", p->link.name, p->fd, + (u_long)ios.c_iflag, (u_long)ios.c_oflag, (u_long)ios.c_cflag); + + cfmakeraw(&ios); + if (p->cfg.rts_cts) + ios.c_cflag |= CLOCAL | CCTS_OFLOW | CRTS_IFLOW; + else { + ios.c_cflag |= CLOCAL; + ios.c_iflag |= IXOFF; + } + ios.c_iflag |= IXON; + if (p->type != PHYS_DEDICATED) + ios.c_cflag |= HUPCL; + + if (p->type != PHYS_DIRECT) { + /* Change tty speed when we're not in -direct mode */ + ios.c_cflag &= ~(CSIZE | PARODD | PARENB); + ios.c_cflag |= p->cfg.parity; + if (cfsetspeed(&ios, IntToSpeed(p->cfg.speed)) == -1) + log_Printf(LogWARN, "%s: %s: Unable to set speed to %d\n", + p->link.name, p->name.full, p->cfg.speed); + } + tcsetattr(p->fd, TCSADRAIN, &ios); + log_Printf(LogDEBUG, "%s: physical (put): iflag = %lx, oflag = %lx, " + "cflag = %lx\n", p->link.name, (u_long)ios.c_iflag, + (u_long)ios.c_oflag, (u_long)ios.c_cflag); + + if (ioctl(p->fd, TIOCMGET, &dev->mbits) == -1) { + if (p->type != PHYS_DIRECT) { + log_Printf(LogWARN, "%s: Open: Cannot get physical status: %s\n", + p->link.name, strerror(errno)); + physical_Close(p); + return NULL; + } else + dev->mbits = TIOCM_CD; + } + log_Printf(LogDEBUG, "%s: Open: physical control = %o\n", + p->link.name, dev->mbits); + + oldflag = fcntl(p->fd, F_GETFL, 0); + if (oldflag < 0) { + log_Printf(LogWARN, "%s: Open: Cannot get physical flags: %s\n", + p->link.name, strerror(errno)); + physical_Close(p); + return NULL; + } else + fcntl(p->fd, F_SETFL, oldflag & ~O_NONBLOCK); + + physical_SetupStack(p, PHYSICAL_NOFORCE); + + return &dev->dev; +} + struct device * tty_iov2device(int type, struct physical *p, struct iovec *iov, int *niov, int maxiov) |