*/
#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>
* establish_ppp - Turn the serial port into a ppp interface.
*/
void
-establish_ppp()
+establish_ppp(fd)
+ int fd;
{
int pppdisc = PPPDISC;
int x;
* This shouldn't call die() because it's called from die().
*/
void
-disestablish_ppp()
+disestablish_ppp(fd)
+ int fd;
{
int x;
char *s;
* 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)
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");
/*
- * 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).
*/
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);
{
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;
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();
}
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");
}
{
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();
}
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;
}
{
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");
}
{
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;
}
{
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;
}
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;
}
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;
}
*/
#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
/*
* 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 (;;) {
* modules. This shouldn't call die() because it's called from die().
*/
void
-disestablish_ppp()
+disestablish_ppp(fd)
+ int fd;
{
int flags;
char *s;
* restore_tty - restore the terminal to the saved settings.
*/
void
-restore_tty()
+restore_tty(fd)
+ int fd;
{
if (restore_term) {
if (!default_device) {
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 */
}
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");
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)
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();
}
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");
}
{
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");
}
}
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;
}
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");
}
{
int x;
- if (ioctl(fd, SIOCGIFCOMP, &x) < 0) {
+ if (ioctl(ttyfd, SIOCGIFCOMP, &x) < 0) {
syslog(LOG_ERR, "ioctl(SIOCGIFCOMP): %m");
return 0;
}
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;
}
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;
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;
{
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();
{
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();
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);
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);
* 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;
* This shouldn't call die() because it's called from die().
*/
-void disestablish_ppp(void)
+void disestablish_ppp(int fd)
{
int x;
char *s;
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))
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.
* restore_tty - restore the terminal to the saved settings.
*/
-void restore_tty (void)
+void restore_tty (int fd)
{
if (restore_term)
{
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)
}
/*
- * 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).
*/
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");
{
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;
}
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();
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");
}
/*
* 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();
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;
}
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;
*/
#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
/*
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 */
}
} else {
close(fdes[1]);
- ttyfd = fd;
+ orig_ttyfd = fd;
return(fdes[0]);
}
}
* 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);
}
* modules. This shouldn't call die() because it's called from die().
*/
void
-disestablish_ppp()
+disestablish_ppp(fd)
+ int fd;
{
int flags;
char *s;
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:
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.
*/
* restore_tty - restore the terminal to the saved settings.
*/
void
-restore_tty()
+restore_tty(fd)
+ int fd;
{
if (restore_term) {
if (!default_device) {
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 */
}
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");
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)
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();
}
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");
}
{
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");
}
}
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;
}
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");
}
{
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;
}
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;
}
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;
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;