]> git.ozlabs.org Git - ppp.git/commitdiff
Support renaming interfaces from a pre-up script.
authorDaniil Baturin <daniil@vyos.io>
Sat, 20 Dec 2008 02:00:15 +0000 (18:00 -0800)
committerDaniil Baturin <daniil@baturin.org>
Sun, 8 Nov 2020 12:57:12 +0000 (19:57 +0700)
This is useful for PPP server operators
who want control over the naming of client interfaces.

Originally implemented by Stephen Hemminger.

Signed-off-by: Daniil Baturin <daniil@baturin.org>
pppd/ipcp.c

index e9738fe4d894dd9291317412e4a8a93d331db19c..48d7095f58ad3fa517a9763d7e566c76e2e3ced5 100644 (file)
@@ -55,6 +55,7 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
+#include <net/if.h>
 
 #include "pppd.h"
 #include "fsm.h"
@@ -1788,6 +1789,7 @@ ipcp_up(f)
     ipcp_options *ho = &ipcp_hisoptions[f->unit];
     ipcp_options *go = &ipcp_gotoptions[f->unit];
     ipcp_options *wo = &ipcp_wantoptions[f->unit];
+    int ifindex;
 
     IPCPDEBUG(("ipcp: up"));
 
@@ -1901,9 +1903,18 @@ ipcp_up(f)
        }
 #endif
 
+       ifindex = if_nametoindex(ifname);
+
        /* run the pre-up script, if any, and wait for it to finish */
        ipcp_script(_PATH_IPPREUP, 1);
 
+       /* check if preup script renamed the interface */
+       if (!if_indextoname(ifindex, ifname)) {
+            error("Interface index %d failed to get renamed by a pre-up script", ifindex);
+           ipcp_close(f->unit, "Interface configuration failed");
+           return;
+       }
+
        /* bring the interface up for IP */
        if (!sifup(f->unit)) {
            if (debug)