All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arvin Schnell <arvin@suse.de>
To: linux-ppp@vger.kernel.org
Subject: Re: rename ppp interface
Date: Mon, 19 Jul 2004 15:35:53 +0000	[thread overview]
Message-ID: <20040719153553.GA8621@suse.de> (raw)
In-Reply-To: <20040716095908.GA32556@suse.de>

[-- Attachment #1: Type: text/plain, Size: 680 bytes --]

On Mon, Jul 19, 2004 at 10:10:43AM +1000, James Cameron wrote:
> I'm certainly interested in the patch; in the PPTP projects we regularly
> get "change the interface name" as a wishlist request.  Can you tell me
> which kernel version range supports the ioctl?

I think the ioctl was added for kernel 2.6, but I might be wrong.
Likely the code should be placed in ifdef's.

> I'm not qualified to judge any other impacts of the change.

The only problem I found is when you try to rename several
interfaces to pppN.  Also I didn't test multilink.

Attached is an enhanced patch.

ciao Arvin

-- 
Dipl.-Phys. Arvin Schnell
SuSE Linux AG
Research & Development
email: arvin@suse.de

[-- Attachment #2: ppp-2.4.2-ifname.diff --]
[-- Type: text/plain, Size: 4420 bytes --]

--- ./pppd/main.c.orig	2004-07-19 12:35:22.000000000 +0000
+++ ./pppd/main.c	2004-07-19 14:34:38.542120946 +0000
@@ -98,7 +98,7 @@
 static const char rcsid[] = RCSID;
 
 /* interface vars */
-char ifname[32];		/* Interface name */
+char ifname[MAXIFNAMELEN];	/* Interface name */
 int ifunit;			/* Interface unit number */
 
 struct channel *the_channel;
@@ -261,13 +261,6 @@
     NULL
 };
 
-/*
- * If PPP_DRV_NAME is not defined, use the default "ppp" as the device name.
- */
-#if !defined(PPP_DRV_NAME)
-#define PPP_DRV_NAME	"ppp"
-#endif /* !defined(PPP_DRV_NAME) */
-
 int
 main(argc, argv)
     int argc;
@@ -777,8 +770,11 @@
 set_ifunit(iskey)
     int iskey;
 {
-    info("Using interface %s%d", PPP_DRV_NAME, ifunit);
+    if (req_ifname[0] != '\0')
+	slprintf(ifname, sizeof(ifname), req_ifname);
+    else
     slprintf(ifname, sizeof(ifname), "%s%d", PPP_DRV_NAME, ifunit);
+    info("Using interface %s", ifname);
     script_setenv("IFNAME", ifname, iskey);
     if (iskey) {
 	create_pidfile(getpid());	/* write pid to file */
--- ./pppd/options.c.orig	2004-07-19 12:59:21.000000000 +0000
+++ ./pppd/options.c	2004-07-19 14:35:04.253865964 +0000
@@ -102,6 +102,7 @@
 bool	tune_kernel;		/* may alter kernel settings */
 int	connect_delay = 1000;	/* wait this many ms after connect script */
 int	req_unit = -1;		/* requested interface unit */
+char	req_ifname[MAXIFNAMELEN];	/* requested interface name */
 bool	multilink = 0;		/* Enable multilink operation */
 char	*bundle_name = NULL;	/* bundle name for multilink */
 bool	dump_options;		/* print out option values */
@@ -259,6 +260,10 @@
       "PPP interface unit number to use if possible",
       OPT_PRIO | OPT_LLIMIT, 0, 0 },
 
+    { "ifname", o_string, req_ifname,
+      "Set PPP interface name",
+      OPT_PRIO | OPT_PRIV | OPT_STATIC, NULL, MAXIFNAMELEN },
+
     { "dump", o_bool, &dump_options,
       "Print out option values after parsing all options", 1 },
     { "dryrun", o_bool, &dryrun,
--- ./pppd/pppd.8.orig	2004-07-19 14:39:06.639320497 +0000
+++ ./pppd/pppd.8	2004-07-19 15:00:37.339448432 +0000
@@ -1020,7 +1020,12 @@
 .TP
 .B unit \fInum
 Sets the ppp unit number (for a ppp0 or ppp1 etc interface name) for outbound
-connections.
+connections.  If the unit is already in use a dynamically allocated will be
+used.
+.TP
+.B ifname \fIstring
+Set the ppp interface name for outbound connections.  A failure to set the
+name will terminate the pppd.
 .TP
 .B updetach
 With this option, pppd will detach from its controlling terminal once
--- ./pppd/pppd.h.orig	2004-07-19 12:59:16.000000000 +0000
+++ ./pppd/pppd.h	2004-07-19 15:02:08.792752747 +0000
@@ -80,6 +80,16 @@
 #define MAXARGS		1	/* max # args to a command */
 #define MAXNAMELEN	256	/* max length of hostname or name for auth */
 #define MAXSECRETLEN	256	/* max length of password or secret */
+#define MAXIFNAMELEN	32	/* max length of interface name; or use IFNAMSIZ, can we
+				   always include net/if.h? */
+
+/*
+ * If PPP_DRV_NAME is not defined, use the default "ppp" as the device name.
+ * Where should PPP_DRV_NAME come from? Do we include it here?
+ */
+#if !defined(PPP_DRV_NAME)
+#define PPP_DRV_NAME	"ppp"
+#endif /* !defined(PPP_DRV_NAME) */
 
 /*
  * Option descriptor structure.
@@ -304,6 +314,7 @@
 extern int	connect_delay;	/* Time to delay after connect script */
 extern int	max_data_rate;	/* max bytes/sec through charshunt */
 extern int	req_unit;	/* interface unit number to use */
+extern char	req_ifname[MAXIFNAMELEN];	/* interface name to use */
 extern bool	multilink;	/* enable multilink operation */
 extern bool	noendpoint;	/* don't send or accept endpt. discrim. */
 extern char	*bundle_name;	/* bundle name for multilink */
--- ./pppd/sys-linux.c.orig	2004-07-19 12:33:29.000000000 +0000
+++ ./pppd/sys-linux.c	2004-07-19 14:37:36.463754450 +0000
@@ -649,6 +649,21 @@
 	}
 	if (x < 0)
 		error("Couldn't create new ppp unit: %m");
+
+	if (x == 0 && req_ifname[0] != '\0') {
+		struct ifreq ifr;
+		char t[MAXIFNAMELEN];
+		memset(&ifr, 0, sizeof(struct ifreq));
+		slprintf(t, sizeof(t), "%s%d", PPP_DRV_NAME, ifunit);
+		strncpy(ifr.ifr_name, t, IF_NAMESIZE);
+		strncpy(ifr.ifr_newname, req_ifname, IF_NAMESIZE);
+		x = ioctl(sock_fd, SIOCSIFNAME, &ifr);
+		if (x < 0)
+		    error("Couldn't rename interface %s to %s: %m", t, req_ifname);
+		else
+		    info("Renamed interface %s to %s", t, req_ifname);
+	}
+
 	return x;
 }
 

  parent reply	other threads:[~2004-07-19 15:35 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-16  9:59 rename ppp interface Arvin Schnell
2004-07-19  0:10 ` James Cameron
2004-07-19 15:35 ` Arvin Schnell [this message]
2004-07-21 13:47 ` Michael Tokarev
2004-07-21 13:54 ` Michael Tokarev
2004-07-21 14:38 ` Arvin Schnell
2004-08-01 23:10 ` Herbert Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040719153553.GA8621@suse.de \
    --to=arvin@suse.de \
    --cc=linux-ppp@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.