]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/sys-linux.c
fix stats stuff
[ppp.git] / pppd / sys-linux.c
index 34830f06ba0a11e94433b814397e00dd553071b5..9f04976e5b810139a04228e73a8b8e4bf2b68853 100644 (file)
@@ -42,7 +42,7 @@
 #include <net/if.h>
 #include <net/ppp_defs.h>
 #include <net/if_arp.h>
-#include <net/if_ppp.h>
+#include <linux/if_ppp.h>
 #include <net/if_route.h>
 #include <linux/if_ether.h>
 #include <netinet/in.h>
@@ -399,6 +399,15 @@ void setdtr (int fd, int on)
 void restore_tty (void)
 {
     if (restore_term) {
+       if (!default_device) {
+           /*
+            * Turn off echoing, because otherwise we can get into
+            * a loop with the tty and the modem echoing to each other.
+            * We presume we are the sole user of this tty device, so
+            * when we close it, it will revert to its defaults anyway.
+            */
+           inittermios.c_lflag &= ~(ECHO | ECHONL);
+       }
        if (tcsetattr(fd, TCSAFLUSH, &inittermios) < 0)
            if (errno != ENXIO)
                syslog(LOG_WARNING, "tcsetattr: %m");
@@ -1184,8 +1193,7 @@ GetMask(addr)
        return mask;
     }
     ifend = (struct ifreq *) (ifc.ifc_buf + ifc.ifc_len);
-    for (ifr = ifc.ifc_req; ifr < ifend; ifr = (struct ifreq *)
-               ((char *)&ifr->ifr_addr + ifr->ifr_addr.sa_len)) {
+    for (ifr = ifc.ifc_req; ifr < ifend; ifr++) {
        /*
         * Check the interface's internet address.
         */