* OR MODIFICATIONS.
*/
-#define RCSID "$Id: sys-svr4.c,v 1.36 1999/10/08 01:09:03 masputra Exp $"
+#define RCSID "$Id: sys-svr4.c,v 1.39 2000/01/25 03:25:36 masputra Exp $"
#include <limits.h>
#include <stdio.h>
static const char rcsid[] = RCSID;
-static char *mux_dev_name;
+#if defined(SOL2)
+/*
+ * "/dev/udp" is used as a multiplexor to PLINK the interface stream
+ * under. It is used in place of "/dev/ip" since STREAMS will not let
+ * a driver be PLINK'ed under itself, and "/dev/ip" is typically the
+ * driver at the bottom of the tunneling interfaces stream.
+ */
+static char *mux_dev_name = UDP_DEV_NAME;
+#else
+static char *mux_dev_name = IP_DEV_NAME;
+#endif
static int pppfd;
static int fdmuxid = -1;
static int ipfd;
} reply;
#endif /* !defined(SOL2) */
-#if defined(SOL2)
- /*
- * "/dev/udp" is used as a multiplexor to PLINK the interface stream
- * under. It is used in place of "/dev/ip" since STREAMS will not let
- * a driver be PLINK'ed under itself, and "/dev/ip" is typically the
- * driver at the bottom of the tunneling interfaces stream.
- */
- mux_dev_name = UDP_DEV_NAME;
-#else
- mux_dev_name = IP_DEV_NAME;
-#endif
-
ipfd = open(mux_dev_name, O_RDWR, 0);
if (ipfd < 0)
fatal("Couldn't open IP device: %m");
ifr.ifr_ip_muxid = ipmuxid;
/*
- * In Sol 8 and later, STREAMS dynamic module plumbing feature exits.
+ * In Sol 8 and later, STREAMS dynamic module plumbing feature exists.
* This is so that an arbitrary module can be inserted, or deleted,
* between ip module and the device driver without tearing down the
* existing stream. Such feature requires the mux ids, which is set
#endif
#ifdef B115200
{ 115200, B115200 },
+#endif
+#ifdef B153600
+ { 153600, B153600 },
+#endif
+#ifdef B230400
+ { 230400, B230400 },
+#endif
+#ifdef B307200
+ { 307200, B307200 },
+#endif
+#ifdef B460800
+ { 460800, B460800 },
#endif
{ 0, 0 }
};
#ifndef CRTSCTS
termiox_ok = 1;
- if (ioctl (fd, TCGETX, &tiox) < 0) {
+ if (!sync_serial && ioctl (fd, TCGETX, &tiox) < 0) {
termiox_ok = 0;
if (errno != ENOTTY)
error("TCGETX: %m");
#ifndef CRTSCTS
inittermiox = tiox;
#endif
- ioctl(fd, TIOCGWINSZ, &wsinfo);
+ if (!sync_serial)
+ ioctl(fd, TIOCGWINSZ, &wsinfo);
}
tios.c_cflag &= ~(CSIZE | CSTOPB | PARENB | CLOCAL);
* We can't proceed if the serial port speed is 0,
* since that implies that the serial port is disabled.
*/
- if (speed == B0)
+ if ((speed == B0) && !sync_serial)
fatal("Baud rate for %s is 0; need explicit baud rate", devnam);
}
fatal("tcsetattr: %m");
#ifndef CRTSCTS
- if (termiox_ok && ioctl (fd, TCSETXF, &tiox) < 0){
+ if (!sync_serial && termiox_ok && ioctl (fd, TCSETXF, &tiox) < 0){
error("TCSETXF: %m");
}
#endif
baud_rate = inspeed = baud_rate_of(speed);
- restore_term = 1;
+ if (!sync_serial)
+ restore_term = 1;
}
/*
*/
inittermios.c_lflag &= ~(ECHO | ECHONL);
}
- if (tcsetattr(fd, TCSAFLUSH, &inittermios) < 0)
+ if (!sync_serial && tcsetattr(fd, TCSAFLUSH, &inittermios) < 0)
if (!hungup && errno != ENXIO)
warn("tcsetattr: %m");
#ifndef CRTSCTS
- if (ioctl (fd, TCSETXF, &inittermiox) < 0){
+ if (!sync_serial && ioctl (fd, TCSETXF, &inittermiox) < 0){
if (!hungup && errno != ENXIO)
error("TCSETXF: %m");
}
#endif
- ioctl(fd, TIOCSWINSZ, &wsinfo);
+ if (!sync_serial)
+ ioctl(fd, TIOCSWINSZ, &wsinfo);
restore_term = 0;
}
}
error("Couldn't set MTU: %m");
}
if (fdmuxid >= 0) {
- /* can't set these if we don't have a stream attached below /dev/ppp */
- if (strioctl(pppfd, PPPIO_XACCM, &asyncmap, sizeof(asyncmap), 0) < 0) {
- error("Couldn't set transmit ACCM: %m");
+ if (!sync_serial) {
+ if (strioctl(pppfd, PPPIO_XACCM, &asyncmap, sizeof(asyncmap), 0) < 0) {
+ error("Couldn't set transmit ACCM: %m");
+ }
}
cf[0] = (pcomp? COMP_PROT: 0) + (accomp? COMP_AC: 0);
cf[1] = COMP_PROT | COMP_AC;
int unit;
ext_accm accm;
{
+ if (sync_serial)
+ return;
+
if (fdmuxid >= 0
&& strioctl(pppfd, PPPIO_XACCM, accm, sizeof(ext_accm), 0) < 0) {
if (!hungup || errno != ENXIO)
error("Couldn't set MRU: %m");
}
if (fdmuxid >= 0) {
- /* can't set these if we don't have a stream attached below /dev/ppp */
- if (strioctl(pppfd, PPPIO_RACCM, &asyncmap, sizeof(asyncmap), 0) < 0) {
- error("Couldn't set receive ACCM: %m");
+ if (!sync_serial) {
+ if (strioctl(pppfd, PPPIO_RACCM, &asyncmap, sizeof(asyncmap), 0) < 0) {
+ error("Couldn't set receive ACCM: %m");
+ }
}
cf[0] = (pcomp? DECOMP_PROT: 0) + (accomp? DECOMP_AC: 0);
cf[1] = DECOMP_PROT | DECOMP_AC;