]> git.ozlabs.org Git - ppp.git/commitdiff
pppoe: Fix sending of PADT on connection termination (#470)
authorPaul Mackerras <paulus@ozlabs.org>
Thu, 11 Jan 2024 09:38:08 +0000 (20:38 +1100)
committerGitHub <noreply@github.com>
Thu, 11 Jan 2024 09:38:08 +0000 (20:38 +1100)
Commit 2b4166d02ed0 ("Close discovery socket after session completed",
2020-11-26) arranged for the discovery socket to be closed when the
PPPOE session negotiation was complete.  However, the discovery socket
is used for sending a PADT message when the connection terminates, and
now that doesn't work because the socket has been closed.

To fix this, we reopen the discovery socket in order to send the PADT
message.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
pppd/plugins/pppoe/plugin.c

index c7ace96f18a43112699e5644aac65a760c799f9e..7d4709ecf6fbd69068fefc919d579bb4c99885a3 100644 (file)
@@ -310,6 +310,9 @@ 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);