/* Sometimes, httpd becomes inaccessible, try to re-run it */ static void httpd_process_check(void) { int httpd_is_run = pids("httpd"); if (!httpd_is_run) httpd_missing++; else httpd_missing = 0; if (httpd_missing == 1) return; if (!httpd_is_run #ifdef HTTPD_CHECK || !httpd_check_v2() #endif ) { printf("## restart httpd ##\n"); httpd_missing = 0; stop_httpd(); #ifdef HTTPD_CHECK system("killall -9 httpd"); sleep(1); remove(DETECT_HTTPD_FILE); #endif start_httpd(0); } }
/* Sometimes, httpd becomes inaccessible, try to re-run it */ httpd_processcheck(void) { int httpd_is_missing = !pids("httpd"); if (httpd_is_missing) printf("## httpd is gone! ##\n"); #ifndef ASUS_DDNS if (httpd_is_missing #ifdef HTTPD_CHECK || !httpd_check_v2() #endif ) #else // 2007.03.27 Yau add for prevent httpd die when doing hostname check if (httpd_is_missing #ifdef HTTPD_CHECK || (/*!nvram_match("httpd_check_ddns", "1") && */!httpd_check_v2()) #endif ) #endif { printf("## restart httpd ##\n"); stop_httpd(); sleep(1); #ifdef HTTPD_CHECK if (pids("httpdcheck")) system("killall -SIGTERM httpdcheck"); remove(DETECT_HTTPD_FILE); #endif start_httpd(); } }
void stop_services(int stopall) { if (stopall) { stop_telnetd(); #if defined(APP_SSHD) stop_sshd(); #endif stop_httpd(); stop_vpn_server(); } #if (BOARD_NUM_USB_PORTS > 0) stop_p910nd(); #if defined(SRV_LPRD) stop_lpd(); #endif #if defined(SRV_U2EC) stop_u2ec(); #endif #endif stop_networkmap(); stop_lltd(); stop_detect_internet(); stop_rstats(); stop_infosvr(); stop_igmpproxy(NULL); }
void full_restart_ipv6(int ipv6_type_old) { int ipv6_type = get_ipv6_type(); int ipv6_toggled = ((ipv6_type == IPV6_DISABLED || ipv6_type_old == IPV6_DISABLED) && (ipv6_type != ipv6_type_old)) ? 1 : 0; if (ipv6_toggled) { stop_lltd(); stop_httpd(); } stop_upnp(); stop_dhcp6c(); stop_dns_dhcpd(); if (ipv6_type == IPV6_DISABLED) { clear_all_route6(); clear_all_addr6(); clear_if_neigh6(IFNAME_BR); stop_sit_tunnel(); reset_lan6_vars(); reset_wan6_vars(); control_if_ipv6_all(0); set_libc_gai(1); update_resolvconf(0, 1); reload_nat_modules(); restart_firewall(); start_dns_dhcpd(0); } else { set_libc_gai(0); control_if_ipv6_all(1); clear_all_addr6(); reset_lan6_vars(); reload_lan_addr6(); full_restart_wan(); if (!is_dns_dhcpd_run()) start_dns_dhcpd(0); } if (ipv6_toggled) { start_httpd(0); start_lltd(); } }
/* Sometimes, httpd becomes inaccessible, try to re-run it */ static void httpd_processcheck(void) { int httpd_is_missing = !pids("httpd"); if (httpd_is_missing #ifdef HTTPD_CHECK || !httpd_check_v2() #endif ) { printf("## restart httpd ##\n"); stop_httpd(); #ifdef HTTPD_CHECK system("killall -9 httpd"); sleep(1); remove(DETECT_HTTPD_FILE); #endif start_httpd(0); } }
/** * Start and stop the monit http server * @param action START_HTTP or STOP_HTTP */ void monit_http(int action) { int status; switch(action) { case STOP_HTTP: if(!running) break; LogInfo("Shutting down %s HTTP server\n", prog); stop_httpd(); if( (status= pthread_join(thread, NULL)) != 0) { LogError("%s: Failed to stop the http server. Thread error -- %s.\n", prog, strerror(status)); } else { LogInfo("%s HTTP server stopped\n", prog); running = FALSE; } break; case START_HTTP: LogInfo("Starting %s HTTP server at [%s:%d]\n", prog, Run.bind_addr?Run.bind_addr:"*", Run.httpdport); if( (status= pthread_create(&thread, NULL, thread_wrapper, NULL)) != 0) { LogError("%s: Failed to create the http server. Thread error -- %s.\n", prog, strerror(status)); } else { LogInfo("%s HTTP server started\n", prog); running = TRUE; } break; default: LogError("%s: Unknown http server action\n", prog); break; } return; }
/* wathchdog is runned in NORMAL_PERIOD, 1 seconds * check in each NORMAL_PERIOD * 1. button * * check in each NORAML_PERIOD*10 * * 1. ntptime * 2. time-dependent service * 3. http-process * 4. usb hotplug status */ void watchdog(void) { /* handle button */ btn_check(); /* if timer is set to less than 1 sec, then bypass the following */ if (itv.it_value.tv_sec == 0) return; if (nvram_match("asus_mfg", "1")) { system("rmmod hw_nat"); if (pids("ntp")) system("killall -SIGTERM ntp"); if (pids("ntpclient")) system("killall ntpclient"); if (pids("udhcpc")) system("killall -SIGTERM udhcpc"); #if (!defined(W7_LOGO) && !defined(WIFI_LOGO)) if (pids("ots")) system("killall ots"); #endif stop_wanduck(); stop_logger(); stop_upnp(); // it may cause upnp cannot run stop_dhcpd(); stop_dns(); #if (!defined(W7_LOGO) && !defined(WIFI_LOGO)) stop_pspfix(); #endif stop_wsc(); stop_wsc_2g(); stop_lltd(); stop_networkmap(); stop_httpd(); stop_lpd(); stop_u2ec(); kill_pidfile_s("/var/run/linkstatus_monitor.pid", SIGTERM); if (pids("detectWan")) system("killall detectWan"); #if (!defined(W7_LOGO) && !defined(WIFI_LOGO)) stop_rstats(); kill_pidfile_s("/var/run/detect_internet.pid", SIGTERM); #endif if (pids("tcpcheck")) system("killall -SIGTERM tcpcheck"); #ifdef HTTPD_CHECK if (pids("httpdcheck")) system("killall -SIGTERM httpdcheck"); #endif if (pids("traceroute")) system("killall traceroute"); if (pids("usbled")) system("killall -SIGTERM usbled"); nvram_set("asus_mfg", "2"); } #if 0 // reboot signal checking if (nvram_match("reboot", "1")) { printf("[watchdog] nvram match reboot\n"); reboot_count++; if (reboot_count >= 2) { // kill(1, SIGTERM); sys_exit(); } return; } #else if (nvram_match("reboot", "1")) return; #endif if (stop_service_type_99) return; if (!nvram_match("asus_mfg", "0")) return; watchdog_period = (watchdog_period + 1) % 10; if (watchdog_period) return; #ifdef BTN_SETUP if (btn_pressed_setup >= BTNSETUP_START) return; #endif #if (!defined(W7_LOGO) && !defined(WIFI_LOGO)) if (count_to_stop_wps > 0) { count_to_stop_wps--; if (!count_to_stop_wps) { // if (nvram_match("wl_radio_x", "1")) stop_wsc(); // psp fix // if (nvram_match("rt_radio_x", "1")) stop_wsc_2g(); // psp fix nvram_set("wps_enable", "0"); // psp fix } } #endif ddns_timer = (ddns_timer + 1) % 4320; if (nvram_match("asus_debug", "1")) mem_timer = (mem_timer + 1) % 60; if (!watchdog_count) watchdog_count++; else if (watchdog_count++ == 1) { #if 0 if (!strcmp(nvram_safe_get("rc_service"), "restart_upnp")) service_handle(); else #endif if ( nvram_match("router_disable", "0") && nvram_match("upnp_enable", "1") && nvram_match("upnp_started", "0") ) { // if (has_wan_ip()) { dbg("[watchdog] starting upnp...\n"); stop_upnp(); start_upnp(); } } } /* check for time-dependent services */ svc_timecheck(); /* http server check */ httpd_processcheck(); u2ec_processcheck(); media_processcheck(); #if 0 samba_processcheck(); #endif pppd_processcheck(); if (nvram_match("wan_route_x", "IP_Routed")) nm_processcheck(); cpu_usage_minotor(); dm_block_chk(); if (nvram_match("asus_debug", "1") && !mem_timer) { print_num_of_connections(); dbg("Hardware NAT: %s\n", is_hwnat_loaded() ? "Enabled": "Disabled"); dbg("Software QoS: %s\n", nvram_match("qos_enable", "1") ? "Enabled": "Disabled"); dbg("pppd running: %s\n", pids("pppd") ? "Yes": "No"); #if 0 dbg("CPU usage: %d%%\n", get_cpu_usage()); #else dbg("CPU usage: %d%%\n", cpu_main(0, NULL, 0)); #endif system("free"); system("date"); print_uptime(); } #ifdef CDMA /* CDMA_DOWN = 99, none * CDMA_DOWN = 1, currently down * CDMA_DOWN = 2, currently up * CDMA_DOWN = 0, currently trying to connect */ if (nvram_match("cdma_down", "1")) { logmessage("CDMA client", "cdma is down(%d)!", cdma_down); cdma_down++; cdma_connec t = 0; if (cdma_down == 2) { printf("[watchdog] stop wan\n"); stop_wan(); start_wan(); } else if (cdma_down >= 12) /* 2 minutes timeout for retry */ { cdma_down = 0; } } else if (nvram_match("cdma_down", "0")) { logmessage("CDMA client", "cdma try connect(%d)!", cdma_connect); cdma_down = 0; cdma_connect++; if (cdma_connect > 12) /* 2 minitues timeout for connecting */ { nvram_set("cdma_down", "1"); } } else { cdma_down = 0; cdma_connect = 0; } #endif if (nvram_match("wan_route_x", "IP_Routed")) { if (!is_phyconnected() || !has_wan_ip()) return; /* sync time to ntp server if necessary */ if (!nvram_match("wan_dns_t", "") && !nvram_match("wan_gateway_t", "")) { ntp_timesync(); } if ( nvram_match("ddns_enable_x", "1") && (!nvram_match("ddns_updated", "1") || !ddns_timer) ) { logmessage("RT-N56U", "[start ddns] watchdog"); start_ddns(); } if (!ddns_timer) { stop_networkmap(); start_networkmap(); } } else { if (/*!nvram_match("lan_dns_t", "") && */!nvram_match("lan_gateway_t", "")) ntp_timesync(); } }
void restart_httpd(void) { stop_httpd(); start_httpd(1); }