]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/plugins/pppoe/plugin.c
config: Include some extra files in the tarball
[ppp.git] / pppd / plugins / pppoe / plugin.c
index ee9d343835b8a83995d15648f9ba10e2d8483f45..b429a2fdff719389744a78b342b698aae617f74b 100644 (file)
@@ -22,9 +22,6 @@
 *
 ***********************************************************************/
 
-static char const RCSID[] =
-"$Id: plugin.c,v 1.17 2008/06/15 04:35:50 paulus Exp $";
-
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -128,8 +125,6 @@ PPPOEInitDevice(void)
     conn->ifName = devnam;
     conn->discoverySocket = -1;
     conn->sessionSocket = -1;
-    conn->discoveryTimeout = pppoe_padi_timeout;
-    conn->discoveryAttempts = pppoe_padi_attempts;
     return 1;
 }
 
@@ -217,7 +212,7 @@ PPPOEConnectDevice(void)
            error("Failed to create PPPoE discovery socket: %m");
            goto errout;
        }
-       discovery1(conn);
+       discovery1(conn, 0);
        /* discovery1() may update conn->mtu and conn->mru */
        lcp_allowoptions[0].mru = conn->mtu;
        lcp_wantoptions[0].mru = conn->mru;
@@ -256,6 +251,8 @@ PPPOEConnectDevice(void)
     ppp_set_remote_number(remote_number);
 
     ppp_script_setenv("MACREMOTE", remote_number, 0);
+    if (conn->actualACname)
+       ppp_script_setenv("ACNAME", conn->actualACname, 0);
 
     if (connect(conn->sessionSocket, (struct sockaddr *) &sp,
                sizeof(struct sockaddr_pppox)) < 0) {
@@ -310,10 +307,15 @@ PPPOEDisconnectDevice(void)
                sizeof(struct sockaddr_pppox)) < 0 && errno != EALREADY)
        error("Failed to disconnect PPPoE socket: %d %m", errno);
     close(conn->sessionSocket);
+    if (conn->discoverySocket < 0)
+       conn->discoverySocket =
+            openInterface(conn->ifName, Eth_PPPOE_Discovery, NULL);
     if (conn->discoverySocket >= 0) {
         sendPADT(conn, NULL);
        close(conn->discoverySocket);
     }
+    free(conn->actualACname);
+    conn->actualACname = NULL;
 }
 
 static void
@@ -389,7 +391,7 @@ PPPoEDevnameHook(char *cmd, char **argv, int doit)
     /* Close socket */
     close(fd);
     if (r && doit) {
-       strlcpy(devnam, cmd, MAXPATHLEN);
+       strlcpy(devnam, cmd, sizeof(devnam));
        if (the_channel != &pppoe_channel) {
 
            the_channel = &pppoe_channel;
@@ -468,6 +470,9 @@ void pppoe_check_options(void)
 
     ccp_allowoptions[0].bsd_compress = 0;
     ccp_wantoptions[0].bsd_compress = 0;
+
+    conn->discoveryTimeout = pppoe_padi_timeout;
+    conn->discoveryAttempts = pppoe_padi_attempts;
 }
 
 struct channel pppoe_channel = {