void Init_Internet(int argc, char** argv) { #ifdef HOME_GATEWAY int wisp_id=0, wan_mode=0, opmode=0; char br_interface[16]={0}; char wan_interface[16]={0}; char tmp_args[16]={0}; if(argc < 4) return; apmib_get(MIB_OP_MODE,(void *)&opmode); if(opmode == BRIDGE_MODE) return; apmib_get(MIB_WISP_WAN_ID,(void *)&wisp_id); sprintf(tmp_args, "%s",argv[1]); if(!strcmp(tmp_args, "pppoe")) wan_mode=3; else if(!strcmp(tmp_args, "pptp")) wan_mode=4; else if(!strcmp(tmp_args, "l2tp")) wan_mode=6; else{ printf("Un-support wan type for init\n"); return; } sprintf(br_interface, "%s", "br0"); sprintf(wan_interface, "%s",argv[3]); start_wan(wan_mode, opmode, wan_interface, br_interface, wisp_id, 0); #endif }
// used for various testing static int rctest_main(int argc, char *argv[]) { int on; if (argc < 3) { _dprintf("test what?\n"); } else if (strcmp(argv[1], "rc_service")==0) { notify_rc(argv[2]); } else if(strcmp(argv[1], "get_phy_status")==0) { int mask; mask = atoi(argv[2]); TRACE_PT("debug for phy_status %x\n", get_phy_status(mask)); } else if(strcmp(argv[1], "get_phy_speed")==0) { int mask; mask = atoi(argv[2]); TRACE_PT("debug for phy_speed %x\n", get_phy_speed(mask)); } else if(strcmp(argv[1], "set_phy_ctrl")==0) { int mask, ctrl; mask = atoi(argv[2]); ctrl = atoi(argv[3]); TRACE_PT("debug for phy_speed %x\n", set_phy_ctrl(mask, ctrl)); } else if(strcmp(argv[1], "handle_notifications")==0) { handle_notifications(); } else if(strcmp(argv[1], "check_action")==0) { _dprintf("check: %d\n", check_action()); } else if(strcmp(argv[1], "nvramhex")==0) { int i; char *nv; nv = nvram_safe_get(argv[2]); _dprintf("nvram %s(%d): ", nv, strlen(nv)); for(i=0;i<strlen(nv);i++) { _dprintf(" %x", (unsigned char)*(nv+i)); } _dprintf("\n"); } else { on = atoi(argv[2]); _dprintf("%s %d\n", argv[1], on); if (strcmp(argv[1], "vlan") == 0) { if(on) start_vlan(); else stop_vlan(); } else if (strcmp(argv[1], "lan") == 0) { if(on) start_lan(); else stop_lan(); } else if (strcmp(argv[1], "wl") == 0) { if(on) { start_wl(); lanaccess_wl(); } } else if (strcmp(argv[1], "wan") == 0) { if(on) start_wan(); else stop_wan(); } else if (strcmp(argv[1], "firewall") == 0) { //if(on) start_firewall(); //else stop_firewall(); } else if (strcmp(argv[1], "watchdog") == 0) { if(on) start_watchdog(); else stop_watchdog(); } #ifdef RTCONFIG_FANCTRL else if (strcmp(argv[1], "phy_tempsense") == 0) { if(on) start_phy_tempsense(); else stop_phy_tempsense(); } #endif #ifdef RTCONFIG_BCMWL6 #ifdef RTCONFIG_PROXYSTA else if (strcmp(argv[1], "psta_monitor") == 0) { if(on) start_psta_monitor(); else stop_psta_monitor(); } #endif #endif else if (strcmp(argv[1], "qos") == 0) {//qos test if(on){ #ifdef RTCONFIG_RALINK if (module_loaded("hw_nat")) { modprobe_r("hw_nat"); sleep(1); #if 0 system("echo 0 > /proc/sys/net/ipv4/conf/default/force_igmp_version"); system("echo 0 > /proc/sys/net/ipv4/conf/all/force_igmp_version"); #endif } #endif add_iQosRules(get_wan_ifname(0)); start_iQos(); } else { #ifdef RTCONFIG_RALINK if (nvram_get_int("hwnat") && /* TODO: consider RTCONFIG_DUALWAN case */ // !nvram_match("wan0_proto", "l2tp") && // !nvram_match("wan0_proto", "pptp") && // !(nvram_get_int("fw_pt_l2tp") || nvram_get_int("fw_pt_ipsec") && // (nvram_match("wl0_radio", "0") || nvram_get_int("wl0_mrate_x")) && // (nvram_match("wl1_radio", "0") || nvram_get_int("wl1_mrate_x")) && !module_loaded("hw_nat")) { #if 0 system("echo 2 > /proc/sys/net/ipv4/conf/default/force_igmp_version"); system("echo 2 > /proc/sys/net/ipv4/conf/all/force_igmp_version"); #endif modprobe("hw_nat"); sleep(1); } #endif stop_iQos(); del_iQosRules(); } } #ifdef RTCONFIG_WEBDAV else if (strcmp(argv[1], "webdav") == 0) { if(on) start_webdav(); } #endif else if (strcmp(argv[1], "gpiow") == 0) { if(argc>=4) set_gpio(atoi(argv[2]), atoi(argv[3])); } else if (strcmp(argv[1], "gpior") == 0) { _dprintf("%d\n", get_gpio(atoi(argv[2]))); } else if (strcmp(argv[1], "gpiod") == 0) { if(argc>=4) gpio_dir(atoi(argv[2]), atoi(argv[3])); } else if (strcmp(argv[1], "init_switch") == 0) { init_switch(on); } else if (strcmp(argv[1], "set_action") == 0) { set_action(on); } else if (strcmp(argv[1], "pwr_usb") == 0) { set_pwr_usb(atoi(argv[2])); _dprintf("done.\n"); } else { printf("what?\n"); } } return 0; }
void init_router(void) { int log_remote, is_ap_mode, nvram_need_commit; #if defined (USE_RTL8367) rtl8367_node(); #endif #if defined (USE_MTK_ESW) || defined (USE_MTK_GSW) mtk_esw_node(); #endif nvram_convert_old_params(); nvram_need_commit = nvram_restore_defaults(); get_eeprom_params(); nvram_convert_misc_values(); if (nvram_need_commit) nvram_commit(); init_gpio_leds_buttons(); gen_ralink_config_2g(0); gen_ralink_config_5g(0); load_wireless_modules(); #if (BOARD_NUM_USB_PORTS > 0) load_usb_modules(); #endif recreate_passwd_unix(1); set_timezone(); set_pagecache_reclaim(); storage_load_time(); is_ap_mode = get_ap_mode(); log_remote = nvram_invmatch("log_ipaddr", ""); if (!log_remote) start_logger(1); init_loopback(); init_bridge(is_ap_mode); #if defined (USE_IPV6) init_ipv6(); #endif start_detect_link(); start_detect_internet(0); start_lan(is_ap_mode, 0); if (log_remote) start_logger(1); start_dns_dhcpd(is_ap_mode); #if defined(APP_SMBD) || defined(APP_NMBD) start_wins(); #endif if (!is_ap_mode) { ipt_nat_default(); ipt_filter_default(); #if defined (USE_IPV6) ip6t_filter_default(); #endif start_wan(); } start_services_once(is_ap_mode); notify_leds_detect_link(); // system ready system("/etc/storage/started_script.sh &"); }
/* 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(); } }
// used for various testing static int rctest_main(int argc, char *argv[]) { int on; if (argc < 2) { _dprintf("test what?\n"); } else if (strcmp(argv[1], "rc_service")==0) { notify_rc(argv[2]); } else if(strcmp(argv[1], "get_phy_status")==0) { int mask; mask = atoi(argv[2]); TRACE_PT("debug for phy_status %x\n", get_phy_status(mask)); } else if(strcmp(argv[1], "get_phy_speed")==0) { int mask; mask = atoi(argv[2]); TRACE_PT("debug for phy_speed %x\n", get_phy_speed(mask)); } else if(strcmp(argv[1], "set_phy_ctrl")==0) { int mask, ctrl; mask = atoi(argv[2]); ctrl = atoi(argv[3]); TRACE_PT("debug for phy_speed %x\n", set_phy_ctrl(mask, ctrl)); } else if(strcmp(argv[1], "handle_notifications")==0) { handle_notifications(); } else if(strcmp(argv[1], "check_action")==0) { _dprintf("check: %d\n", check_action()); } else if(strcmp(argv[1], "nvramhex")==0) { int i; char *nv; nv = nvram_safe_get(argv[2]); _dprintf("nvram %s(%d): ", nv, strlen(nv)); for(i=0;i<strlen(nv);i++) { _dprintf(" %x", (unsigned char)*(nv+i)); } _dprintf("\n"); } else { on = atoi(argv[2]); _dprintf("%s %d\n", argv[1], on); if (strcmp(argv[1], "vlan") == 0) { if(on) start_vlan(); else stop_vlan(); } else if (strcmp(argv[1], "lan") == 0) { if(on) start_lan(); else stop_lan(); } else if (strcmp(argv[1], "wl") == 0) { if(on) { start_wl(); lanaccess_wl(); } } else if (strcmp(argv[1], "wan") == 0) { if(on) start_wan(); else stop_wan(); } else if (strcmp(argv[1], "wan_port") == 0) { if(on) start_wan_port(); else stop_wan_port(); } else if (strcmp(argv[1], "firewall") == 0) { //if(on) start_firewall(); //else stop_firewall(); } else if (strcmp(argv[1], "watchdog") == 0) { if(on) start_watchdog(); else stop_watchdog(); } #if ! (defined(RTCONFIG_QCA) || defined(RTCONFIG_RALINK)) else if (strcmp(argv[1], "watchdog02") == 0) { if(on) start_watchdog02(); else stop_watchdog02(); } #endif /* ! (RTCONFIG_QCA || RTCONFIG_RALINK) */ else if (strcmp(argv[1], "sw_devled") == 0) { if(on) start_sw_devled(); else stop_sw_devled(); } #ifdef RTCONFIG_FANCTRL else if (strcmp(argv[1], "phy_tempsense") == 0) { if(on) start_phy_tempsense(); else stop_phy_tempsense(); } #endif #ifdef RTCONFIG_BCMWL6 #ifdef RTCONFIG_PROXYSTA else if (strcmp(argv[1], "psta_monitor") == 0) { if(on) start_psta_monitor(); else stop_psta_monitor(); } #endif #endif #ifdef RTCONFIG_IPERF else if (strcmp(argv[1], "monitor") == 0) { if(on) start_monitor(); else stop_monitor(); } #endif else if (strcmp(argv[1], "qos") == 0) {//qos test if(on){ #ifdef RTCONFIG_RALINK if (module_loaded("hw_nat")) { modprobe_r("hw_nat"); sleep(1); #if 0 f_write_string("/proc/sys/net/ipv4/conf/default/force_igmp_version", "0", 0, 0); f_write_string("/proc/sys/net/ipv4/conf/all/force_igmp_version", "0", 0, 0); #endif } #endif add_iQosRules(get_wan_ifname(wan_primary_ifunit())); #ifdef RTCONFIG_BWDPI if(nvram_get_int("qos_type") == 1) { start_dpi_engine_service(); // force to rebuild firewall to avoid some loopback issue if (nvram_match("fw_nat_loopback", "2")) start_firewall(wan_primary_ifunit(), 0); } else #endif start_iQos(); } else { #ifdef RTCONFIG_RALINK if (nvram_get_int("hwnat") && /* TODO: consider RTCONFIG_DUALWAN case */ // !nvram_match("wan0_proto", "l2tp") && // !nvram_match("wan0_proto", "pptp") && // !(nvram_get_int("fw_pt_l2tp") || nvram_get_int("fw_pt_ipsec") && // (nvram_match("wl0_radio", "0") || nvram_get_int("wl0_mrate_x")) && // (nvram_match("wl1_radio", "0") || nvram_get_int("wl1_mrate_x")) && !module_loaded("hw_nat")) { #if 0 f_write_string("/proc/sys/net/ipv4/conf/default/force_igmp_version", "2", 0, 0); f_write_string("/proc/sys/net/ipv4/conf/all/force_igmp_version", "2", 0, 0); #endif #if defined(RTN14U) || defined(RTAC52U) || defined(RTAC51U) || defined(RTN11P) || defined(RTN300) || defined(RTN54U) || defined(RTAC1200HP) || defined(RTN56UB1) || defined(RTAC54U) || defined(RTN56UB2) if (!(!nvram_match("switch_wantag", "none")&&!nvram_match("switch_wantag", ""))) #endif { modprobe("hw_nat"); sleep(1); } } #endif #ifdef RTCONFIG_BWDPI if(nvram_get_int("qos_type") == 1){ stop_dpi_engine_service(1); } else #endif stop_iQos(); del_iQosRules(); } } #ifdef RTCONFIG_WEBDAV else if (strcmp(argv[1], "webdav") == 0) { if(on) start_webdav(); } #endif #ifdef RTCONFIG_TUNNEL else if (strcmp(argv[1], "mastiff") == 0) { if(on) start_mastiff(); } #endif else if (strcmp(argv[1], "gpiow") == 0) { if(argc>=4) set_gpio(atoi(argv[2]), atoi(argv[3])); } else if (strcmp(argv[1], "gpior") == 0) { printf("%d\n", get_gpio(atoi(argv[2]))); } else if (strcmp(argv[1], "gpiod") == 0) { if(argc>=4) gpio_dir(atoi(argv[2]), atoi(argv[3])); } else if (strcmp(argv[1], "init_switch") == 0) { init_switch(); } else if (strcmp(argv[1], "set_action") == 0) { set_action(on); } else if (strcmp(argv[1], "pwr_usb") == 0) { set_pwr_usb(atoi(argv[2])); _dprintf("done.\n"); } else if (strcmp(argv[1], "enc_chk") == 0) { unsigned char enc_buf[ENC_WORDS_LEN]; unsigned char dec_buf[DATA_WORDS_LEN + 1]; _dprintf("get enc str:[%s]\n", enc_str(argv[2], (char *) enc_buf)); _dprintf("get dec str:[%s]\n", dec_str((char *) enc_buf, (char *) dec_buf)); _dprintf("done(%d)\n", strcmp(argv[2], (const char *) dec_buf)); } #ifdef RTCONFIG_BCMFA else if (strcmp(argv[1], "fa_rev") == 0) { _dprintf("(%d) done.\n", get_fa_rev()); } else if (strcmp(argv[1], "fa_dump") == 0) { _dprintf("(%d) done.\n", get_fa_dump()); } #endif else { printf("what?\n"); } } return 0; }