]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/sys-bsd.c
remove stray #endif
[ppp.git] / pppd / sys-bsd.c
index 717bcfed7f9b1564c127484444ff8fbef36dfeef..05533b34da983daba536338706659ab90e8d5b23 100644 (file)
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
-#ifndef lint
-static char rcsid[] = "$Id: sys-bsd.c,v 1.39 1999/03/19 01:29:44 paulus Exp $";
+#define RCSID  "$Id: sys-bsd.c,v 1.47 2000/04/13 12:04:23 paulus Exp $"
 /*     $NetBSD: sys-bsd.c,v 1.1.1.3 1997/09/26 18:53:04 christos Exp $ */
-#endif
 
 /*
  * TODO:
@@ -74,6 +72,8 @@ static char rcsid[] = "$Id: sys-bsd.c,v 1.39 1999/03/19 01:29:44 paulus Exp $";
 #include "fsm.h"
 #include "ipcp.h"
 
+static const char rcsid[] = RCSID;
+
 static int initdisc = -1;      /* Initial TTY discipline for ppp_fd */
 static int initfdflags = -1;   /* Initial file descriptor flags for ppp_fd */
 static int ppp_fd = -1;                /* fd which is set to PPP discipline */
@@ -83,8 +83,6 @@ static int restore_term;      /* 1 => we've munged the terminal */
 static struct termios inittermios; /* Initial TTY termios */
 static struct winsize wsinfo;  /* Initial window size info */
 
-static char *lock_file;                /* name of lock file created */
-
 static int loop_slave = -1;
 static int loop_master;
 static char loop_name[20];
@@ -229,13 +227,13 @@ establish_ppp(fd)
        /*
         * Find out which interface we were given.
         */
-       if (ioctl(fd, PPPIOCGUNIT, &ifunit) < 0) {    
+       if (ioctl(fd, PPPIOCGUNIT, &ifunit) < 0)
            fatal("ioctl(PPPIOCGUNIT): %m");
     } else {
        /*
         * Check that we got the same unit again.
         */
-       if (ioctl(fd, PPPIOCGUNIT, &x) < 0) { 
+       if (ioctl(fd, PPPIOCGUNIT, &x) < 0)
            fatal("ioctl(PPPIOCGUNIT): %m");
        if (x != ifunit)
            fatal("transfer_ppp failed: wanted unit %d, got %d", ifunit, x);
@@ -460,6 +458,38 @@ int fd, on;
     ioctl(fd, (on? TIOCMBIS: TIOCMBIC), &modembits);
 }
 
+/*
+ * get_pty - get a pty master/slave pair and chown the slave side
+ * to the uid given.  Assumes slave_name points to >= 12 bytes of space.
+ */
+int
+get_pty(master_fdp, slave_fdp, slave_name, uid)
+    int *master_fdp;
+    int *slave_fdp;
+    char *slave_name;
+    int uid;
+{
+    struct termios tios;
+
+    if (openpty(master_fdp, slave_fdp, slave_name, NULL, NULL) < 0)
+       return 0;
+
+    fchown(*slave_fdp, uid, -1);
+    fchmod(*slave_fdp, S_IRUSR | S_IWUSR);
+    if (tcgetattr(*slave_fdp, &tios) == 0) {
+       tios.c_cflag &= ~(CSIZE | CSTOPB | PARENB);
+       tios.c_cflag |= CS8 | CREAD;
+       tios.c_iflag  = IGNPAR | CLOCAL;
+       tios.c_oflag  = 0;
+       tios.c_lflag  = 0;
+       if (tcsetattr(*slave_fdp, TCSAFLUSH, &tios) < 0)
+           warn("couldn't set attributes on pty: %m");
+    } else
+       warn("couldn't get attributes on pty: %m");
+
+    return 1;
+}
+
 
 /*
  * open_ppp_loopback - open the device we use for getting
@@ -559,7 +589,8 @@ wait_input(timo)
 /*
  * add_fd - add an fd to the set that wait_input waits for.
  */
-void add_fd(int fd)
+void add_fd(fd)
+    int fd;
 {
     FD_SET(fd, &in_fds);
     if (fd > max_in_fd)
@@ -569,7 +600,8 @@ void add_fd(int fd)
 /*
  * remove_fd - remove an fd from the set that wait_input waits for.
  */
-void remove_fd(int fd)
+void remove_fd(fd)
+    int fd;
 {
     FD_CLR(fd, &in_fds);
 }
@@ -680,6 +712,7 @@ ppp_send_config(unit, mtu, asyncmap, pcomp, accomp)
        fatal("ioctl (PPPIOCGFLAGS): %m");
     x = pcomp? x | SC_COMP_PROT: x &~ SC_COMP_PROT;
     x = accomp? x | SC_COMP_AC: x &~ SC_COMP_AC;
+    x = sync_serial ? x | SC_SYNC : x & ~SC_SYNC;
     if (ioctl(ppp_fd, PPPIOCSFLAGS, (caddr_t) &x) < 0)
        fatal("ioctl(PPPIOCSFLAGS): %m");
 }
@@ -790,6 +823,27 @@ get_idle_time(u, ip)
     return ioctl(ppp_fd, PPPIOCGIDLE, ip) >= 0;
 }
 
+/*
+ * get_ppp_stats - return statistics for the link.
+ */
+int
+get_ppp_stats(u, stats)
+    int u;
+    struct pppd_stats *stats;
+{
+    struct ifpppstatsreq req;
+
+    memset (&req, 0, sizeof (req));
+    strlcpy(req.ifr_name, ifname, sizeof(req.ifr_name));
+    if (ioctl(sockfd, SIOCGPPPSTATS, &req) < 0) {
+       error("Couldn't get PPP statistics: %m");
+       return 0;
+    }
+    stats->bytes_in = req.stats.p.ppp_ibytes;
+    stats->bytes_out = req.stats.p.ppp_obytes;
+    return 1;
+}
+
 
 #ifdef PPP_FILTER
 /*
@@ -1392,11 +1446,14 @@ get_host_seed()
     return gethostid();
 }
 
+#if 0
 /*
  * lock - create a lock file for the named lock device
  */
 #define        LOCK_PREFIX     "/var/spool/lock/LCK.."
 
+static char *lock_file;                /* name of lock file created */
+
 int
 lock(dev)
     char *dev;
@@ -1466,3 +1523,4 @@ unlock()
        lock_file = NULL;
     }
 }
+#endif