ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
* [sisyphus] PPPD patch
@ 2005-08-04 17:01 Pavel Boldin
  0 siblings, 0 replies; only message in thread
From: Pavel Boldin @ 2005-08-04 17:01 UTC (permalink / raw)
  To: stalker; +Cc: ALT Linux Sisyphus discussion list

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

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Привет всем.

Вот, уже написал патч для PPPD. Пока потестить не смог, но вроде
работает (если указываешь опцию unit_min 5 то биндается к 5ому
интерфейсу /dev/ppp5).

PS: пока не проверил прикладываемость к ALTMaster2.4 версии pppd.
PPS: копия в sisyphus@

- --

Pavel Boldin aka davinchi. mail-to: ldavinchi /at\ inbox _dot_ ru
    ZU - Zagovor Unixoidov. SSAU 303.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFC8kn6ihy+HSYX1WIRApcXAKCUpglQajPwjvY8dLbHvq6UrM06dgCfe9ih
jZbm8Kb3nOy3cO0N2sRFlVc=
=f8i/
-----END PGP SIGNATURE-----

[-- Attachment #2: ppp-2.4.2-unit_max_min-alt.patch --]
[-- Type: text/x-patch, Size: 3789 bytes --]

diff -NurpP ppp-2.4.2.orig/pppd/options.c ppp-2.4.2/pppd/options.c
--- ppp-2.4.2.orig/pppd/options.c	2005-08-04 21:37:28 +0500
+++ ppp-2.4.2/pppd/options.c	2005-08-04 21:39:38 +0500
@@ -109,6 +109,8 @@ char	linkname[MAXPATHLEN];	/* logical na
 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 */
+int	req_unit_min = -1;	/* requested interface unit min number */
+int	req_unit_max = -1;	/* requested interface unit max number */
 bool	multilink = 0;		/* Enable multilink operation */
 char	*bundle_name = NULL;	/* bundle name for multilink */
 bool	dump_options;		/* print out option values */
@@ -271,6 +273,14 @@ option_t general_options[] = {
       "PPP interface unit number to use if possible",
       OPT_PRIO | OPT_LLIMIT, 0, 0 },
 
+    { "unit_min", o_int, &req_unit_min,
+      "PPP interface minimum unit number to use if possible",
+      OPT_PRIO | OPT_LLIMIT, 0, 0 },
+
+    { "unit_max", o_int, &req_unit_max,
+      "PPP interface maximum unit number to use if possible",
+      OPT_PRIO | OPT_LLIMIT, 0, 0 },
+
     { "dump", o_bool, &dump_options,
       "Print out option values after parsing all options", 1 },
     { "dryrun", o_bool, &dryrun,
diff -NurpP ppp-2.4.2.orig/pppd/pppd.h ppp-2.4.2/pppd/pppd.h
--- ppp-2.4.2.orig/pppd/pppd.h	2005-08-04 21:37:28 +0500
+++ ppp-2.4.2/pppd/pppd.h	2005-08-04 21:40:19 +0500
@@ -307,6 +307,8 @@ extern bool	tune_kernel;	/* May alter ke
 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 int	req_unit_min;	/* interface unit minimum number to use */
+extern int	req_unit_max;	/* interface unit maximum number 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 */
diff -NurpP ppp-2.4.2.orig/pppd/sys-linux.c ppp-2.4.2/pppd/sys-linux.c
--- ppp-2.4.2.orig/pppd/sys-linux.c	2005-08-04 21:37:28 +0500
+++ ppp-2.4.2/pppd/sys-linux.c	2005-08-04 21:48:29 +0500
@@ -638,13 +638,45 @@ static int make_ppp_unit()
 	    || fcntl(ppp_dev_fd, F_SETFL, flags | O_NONBLOCK) == -1)
 		warn("Couldn't set /dev/ppp to nonblock: %m");
 
-	ifunit = req_unit;
-	x = ioctl(ppp_dev_fd, PPPIOCNEWUNIT, &ifunit);
-	if (x < 0 && req_unit >= 0 && errno == EEXIST) {
-		warn("Couldn't allocate PPP unit %d as it is already in use", req_unit);
-		ifunit = -1;
+	if (req_unit >= 0 && req_unit_min < 0 && req_unit_max < 0) {
+		ifunit = req_unit;
+
 		x = ioctl(ppp_dev_fd, PPPIOCNEWUNIT, &ifunit);
+		if (x < 0 && req_unit >= 0 && errno == EEXIST) {
+			warn("Couldn't allocate PPP unit %d as it is already in use", req_unit);
+			ifunit = -1;
+			x = ioctl(ppp_dev_fd, PPPIOCNEWUNIT, &ifunit);
+		}
+	}
+	else if (req_unit_min >= 0 ) {
+		if (req_unit_min >= req_unit_max) {
+			int tmp;
+			/* Swap it */
+			tmp = req_unit_max;
+			req_unit_max = req_unit_min;
+			req_unit_min = tmp;
+		}
+		/* Try 16 interfaces by default */
+		if (req_unit_max < 0)
+			req_unit_max = req_unit_min + 0xF;
+
+		for (ifunit = req_unit_min; ifunit <= req_unit_max; ifunit++) {
+			x = ioctl(ppp_dev_fd, PPPIOCNEWUNIT, &ifunit);
+			if (x < 0 && errno == EEXIST) {
+				warn("Couldn't allocate PPP unit %d as it is already in use", ifunit);
+			}
+			if ( x >= 0 )
+				break;
+		}
+		if (x < 0)
+		{
+			warn("Couldn't allocate PPP unit from %d to %d as all range is already in use", req_unit_min, req_unit_max);
+			ifunit = -1;
+			x = ioctl(ppp_dev_fd, PPPIOCNEWUNIT, &ifunit);
+		}
 	}
+
+
 	if (x < 0)
 		error("Couldn't create new ppp unit: %m");
 	return x;

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-08-04 17:01 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-08-04 17:01 [sisyphus] PPPD patch Pavel Boldin

ALT Linux Sisyphus discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
		sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
	public-inbox-index sisyphus

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sisyphus


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git