1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
diff -Naur ppp-2.4.5/pppd/main.c ppp-2.4.5_patched/pppd/main.c
--- ppp-2.4.5/pppd/main.c 2010-08-30 07:36:35.000000000 +0300
+++ ppp-2.4.5_patched/pppd/main.c 2010-08-30 07:41:10.844666729 +0300
@@ -565,6 +565,8 @@
if (!persist || asked_to_quit || (maxfail > 0 && unsuccess >= maxfail))
break;
+ else
+ sleep(pause_between_reconnect);
if (demand)
demand_discard();
@@ -581,6 +583,8 @@
} while (phase == PHASE_HOLDOFF);
if (!persist)
break;
+ else
+ sleep(pause_between_reconnect);
}
wait_children();
diff -Naur ppp-2.4.5/pppd/options.c ppp-2.4.5_patched/pppd/options.c
--- ppp-2.4.5/pppd/options.c 2010-08-30 07:36:35.000000000 +0300
+++ ppp-2.4.5_patched/pppd/options.c 2010-08-30 07:44:05.162666733 +0300
@@ -101,6 +101,7 @@
char user[MAXNAMELEN]; /* Username for PAP */
char passwd[MAXSECRETLEN]; /* Password for PAP */
bool persist = 0; /* Reopen link after it goes down */
+int pause_between_reconnect = 5; /* set pause between reconnects to avoid log flood/high cpu usage */
bool killoldaddr = 0; /* If our IP is reassigned on
reconnect, kill active TCP
connections using the old IP. */
@@ -229,6 +230,8 @@
{ "persist", o_bool, &persist,
"Keep on reopening connection after close", OPT_PRIO | 1 },
+ { "pause_between_reconnect", o_int, &pause_between_reconnect,
+ "set pause between reconnects to avoid log flood/high cpu usage", OPT_PRIO },
{ "nopersist", o_bool, &persist,
"Turn off persist option", OPT_PRIOSUB },
diff -Naur ppp-2.4.5/pppd/pppd.h ppp-2.4.5_patched/pppd/pppd.h
--- ppp-2.4.5/pppd/pppd.h 2010-08-30 07:36:35.000000000 +0300
+++ ppp-2.4.5_patched/pppd/pppd.h 2010-08-30 07:44:39.502666729 +0300
@@ -294,6 +294,7 @@
extern char passwd[MAXSECRETLEN]; /* Password for PAP or CHAP */
extern bool auth_required; /* Peer is required to authenticate */
extern bool persist; /* Reopen link after it goes down */
+extern int pause_between_reconnect; /* set pause between reconnects to avoid log flood/high cpu usage */
extern bool uselogin; /* Use /etc/passwd for checking PAP */
extern bool session_mgmt; /* Do session management (login records) */
extern char our_name[MAXNAMELEN];/* Our name for authentication purposes */
diff -Naur ppp-2.4.5/pppd/tty.c ppp-2.4.5_patched/pppd/tty.c
--- ppp-2.4.5/pppd/tty.c 2009-11-17 00:26:07.000000000 +0200
+++ ppp-2.4.5_patched/pppd/tty.c 2010-08-30 07:42:39.874666731 +0300
@@ -582,6 +582,8 @@
}
if (!persist || err != EINTR)
goto errret;
+ else
+ sleep(pause_between_reconnect);
}
ttyfd = real_ttyfd;
if ((fdflags = fcntl(ttyfd, F_GETFL)) == -1
@@ -731,6 +733,8 @@
}
if (!persist || errno != EINTR || hungup || got_sigterm)
goto errret;
+ else
+ sleep(pause_between_reconnect);
}
close(i);
}
|