Netgear WNR3500L: correct leds behavior
[tomato.git] / release / src / router / rc / redial.c
blob6709b1624db15e58ce01926863efe6c0b3f8b830
1 /*
3 Copyright 2003, CyberTAN Inc. All Rights Reserved
5 THIS SOFTWARE IS OFFERED "AS IS", AND CYBERTAN GRANTS NO WARRANTIES OF ANY
6 KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. CYBERTAN
7 SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
8 FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE
13 Copyright 2005, Broadcom Corporation
14 All Rights Reserved.
16 THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
17 KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
18 SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
19 FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
23 #include "rc.h"
25 #include <sys/ioctl.h>
26 #include <wait.h>
29 // used in keepalive mode (ppp_demand=0)
32 int start_redial(void)
34 stop_redial();
36 xstart("redial");
37 return 0;
40 int stop_redial(void)
42 while (killall("redial", SIGKILL) == 0) {
43 sleep(1);
45 return 0;
48 int redial_main(int argc, char **argv)
50 int tm;
51 long ut;
52 int count;
54 if (nvram_get_int("ppp_demand") != 0) return 0;
56 tm = nvram_get_int("ppp_redialperiod");
57 if (tm < 5) tm = 5;
59 syslog(LOG_INFO, "Started. Time: %d", tm);
61 count = 0;
62 sleep(10);
64 while (1) {
65 while (1) {
66 sleep(tm);
67 if (!check_wanup()) break;
68 count = 0;
71 if ((count < 3) && (get_wan_proto() == WP_PPPOE)) {
72 if (f_read("/var/lib/misc/pppoe-disc", &ut, sizeof(ut)) == sizeof(ut)) {
73 ut = (get_uptime() - ut);
74 if (ut <= 15) {
75 syslog(LOG_INFO, "PPPoE reconnect in progress (%ld)", ut);
76 ++count;
77 continue;
82 if ((!wait_action_idle(10)) || (check_wanup())) continue;
84 if (!nvram_match("action_service", "wan-restart")) {
85 syslog(LOG_INFO, "WAN down. Reconnecting...");
86 xstart("service", "wan", "restart");
87 break;
89 else {
90 syslog(LOG_INFO, "WAN down. Reconnect is already in progress...");
94 return 0;