static void ntp_service() { static int first_sync = 1; if (first_sync) { first_sync = 0; nvram_set("reload_svc_radio", "1"); nvram_set("svc_ready", "1"); setup_timezone(); if (is_routing_enabled()) notify_rc("restart_upnp"); #ifdef RTCONFIG_IPV6 #ifdef RTCONFIG_WIDEDHCP6 /* switch to monotonic clock usage *//* if (get_ipv6_service() != IPV6_DISABLED) { notify_rc("restart_dhcp6s"); notify_rc("restart_radvd"); } */ #endif /* RTCONFIG_WIDEDHCP6 */ #endif #ifdef RTCONFIG_DISK_MONITOR notify_rc("restart_diskmon"); #endif } }
static void ez_action_shutdown(void) { logmessage("watchdog", "Perform ez-button shutdown..."); notify_rc("shutdown_prepare"); }
static void inet_handler(int is_ap_mode) { if (!is_ap_mode) { long i_deferred_wanup = nvram_get_int("deferred_wanup_t"); if (i_deferred_wanup > 0 && uptime() >= i_deferred_wanup) { notify_rc("deferred_wan_connect"); return; } if (has_wan_ip4(0) && has_wan_gw4()) { /* sync time to ntp server if necessary */ ntpc_handler(); } } else { if (has_lan_ip4() && has_lan_gw4()) ntpc_handler(); } }
void stop_afpd() { if (getpid() != 1) { notify_rc("stop_afpd"); } //killall_tk("afpd"); system("killall -SIGKILL afpd"); return; }
int start_wps_method(void) { if(getpid()!=1) { notify_rc("start_wps_method"); return 0; } start_wsc(); }
void stop_cnid_metad() { if (getpid() != 1) { notify_rc("stop_cnid_metad"); } //killall_tk("cnid_metad"); system("killall -SIGKILL cnid_metad"); return; }
void stop_avahi_daemon() { if (getpid() != 1) { notify_rc("stop_avahi_daemon"); } //killall_tk("avahi-daemon"); system("killall -SIGKILL avahi-daemon"); return; }
void stop_pptpd(void) { if (getpid() != 1) { notify_rc("stop_pptpd"); } killall_tk("pptpd"); killall_tk("bcrelay"); return; }
int stop_wps_method(void) { if(getpid()!=1) { notify_rc("stop_wps_method"); return 0; } // doSystem("iwpriv %s set WscConfMode=%d", get_wpsifname(), 0); // WPS disabled doSystem("iwpriv %s set WscStatus=%d", get_wpsifname(), 0); // Not Used // doSystem("iwpriv %s set WscConfMode=%d", get_non_wpsifname(), 7); // trigger Windows OS to give a popup about WPS PBC AP }
void notify_modem_on_internet_state_changed(int has_internet) { if (has_internet) return; if (nvram_get_int("modem_prio") != 3) return; if (get_usb_modem_wan(0)) return; if (!get_modem_devnum()) return; notify_rc("auto_wan_reconnect"); }
int start_wps_method(void) { if(getpid()!=1) { notify_rc("start_wps_method"); return 0; } #ifdef RTCONFIG_WPS_ENROLLEE if (nvram_match("wps_enrollee", "1")) start_wsc_enrollee(); else #endif start_wsc(); return 0; }
int stop_wps_method(void) { char buf[256] = "SET "; int len = 4; if(getpid()!=1) { notify_rc("stop_wps_method"); return 0; } len += sprintf(buf + len, "wps_config_command=%d ", WPS_UI_CMD_STOP); len += sprintf(buf + len, "wps_action=%d ", WPS_UI_ACT_NONE); set_wps_env(buf); return 0; }
int mdev_lp_main(int argc, char **argv) { int isLock; const char *device_name, *action; if(argc != 3){ printf("Usage: %s [device_name] [action]\n", argv[0]); return 0; } device_name = argv[1]; action = argv[2]; usb_dbg("(%s): action=%s.\n", device_name, action); if(get_device_type_by_device(device_name) != DEVICE_TYPE_PRINTER){ usb_dbg("(%s): The device is not a printer.\n", device_name); return 0; } // Check Lock. if((isLock = file_lock((char *)device_name)) == -1){ usb_dbg("(%s): Can't set the file lock!\n", device_name); return 0; } // If remove the device? if(!check_hotplug_action(action)){ int ports_used_usblp = usb_port_module_used("usblp"); if (!ports_used_usblp) stop_usb_printer_spoolers(); file_unlock(isLock); return 0; } notify_rc("on_hotplug_usb_printer"); usb_dbg("(%s): Success!\n", device_name); file_unlock(isLock); return 1; }
void notify_modem_on_wan_ether_link_changed(int has_link) { int modem_used, link_wan; if (nvram_get_int("modem_prio") != 2) return; if (get_wan_wisp_active(NULL)) return; if (!get_modem_devnum()) return; link_wan = (has_link) ? 1 : 0; modem_used = (get_usb_modem_wan(0)) ? 1 : 0; if (modem_used == link_wan) notify_rc("auto_wan_reconnect"); }
int mdev_sd_main(int argc, char **argv) { char aidisk_cmd[64]; int isLock, mount_result; const char *device_name, *action; if(argc != 3){ printf("Usage: %s [device_name] [action]\n", argv[0]); return 0; } device_name = argv[1]; action = argv[2]; usb_dbg("(%s): action=%s.\n", device_name, action); if(get_device_type_by_device(device_name) != DEVICE_TYPE_DISK){ usb_dbg("(%s): The device is not a sd device.\n", device_name); return 0; } // Check Lock. if((isLock = file_lock((char *)device_name)) == -1){ usb_dbg("(%s): Can't set the file lock!\n", device_name); return 0; } // If remove the device? if(!check_hotplug_action(action)){ if (device_name[3] != '\0') detach_swap_partition((char*)device_name); else notify_rc("on_unplug_usb_storage"); file_unlock(isLock); return 0; } memset(aidisk_cmd, 0, sizeof(aidisk_cmd)); if (device_name[3] == '\0') // sda, sdb, sdc... { system("/sbin/hddtune.sh $MDEV"); if (!check_root_partition(device_name)) { sprintf(aidisk_cmd, "/sbin/automount.sh $MDEV AiDisk_%c%c", device_name[2], '1'); } else goto No_Need_To_Mount; } else { sprintf(aidisk_cmd, "/sbin/automount.sh $MDEV AiDisk_%c%c", device_name[2], device_name[3]); } umask(0000); mount_result = system(aidisk_cmd); if (mount_result == 0) { notify_rc("on_hotplug_usb_storage"); } usb_dbg("(%s): Success!\n", device_name); file_unlock(isLock); return 1; No_Need_To_Mount: usb_dbg("(%s): No need to mount!\n", device_name); file_unlock(isLock); return 0; }
int start_wps_method(void) { int wps_band; int wps_action; // int wps_method; char *wps_sta_pin; char prefix[]="wlXXXXXX_", tmp[100]; char buf[256] = "SET "; int len = 4; if(getpid()!=1) { notify_rc("start_wps_method"); return 0; } wps_band = nvram_get_int("wps_band"); snprintf(prefix, sizeof(prefix), "wl%d_", wps_band); wps_action = nvram_get_int("wps_action"); // wps_method = nvram_get_int("wps_method"); // useless wps_sta_pin = nvram_safe_get("wps_sta_pin"); if(strlen(wps_sta_pin) && strcmp(wps_sta_pin, "00000000") && (wl_wpsPincheck(wps_sta_pin) == 0)) len += sprintf(buf + len, "wps_method=%d ", WPS_UI_METHOD_PIN); else len += sprintf(buf + len, "wps_method=%d ", WPS_UI_METHOD_PBC); if(nvram_match("wps_version2", "enabled") && strlen(nvram_safe_get("wps_autho_sta_mac"))) len += sprintf(buf + len, "wps_autho_sta_mac=%s ", nvram_safe_get("wps_autho_sta_mac")); if(strlen(wps_sta_pin)) len += sprintf(buf + len, "wps_sta_pin=%s ", wps_sta_pin); else len += sprintf(buf + len, "wps_sta_pin=00000000 "); // len += sprintf(buf + len, "wps_action=%d ", wps_action); len += sprintf(buf + len, "wps_action=%d ", WPS_UI_ACT_ADDENROLLEE); len += sprintf(buf + len, "wps_config_command=%d ", WPS_UI_CMD_START); nvram_set("wps_proc_status", "0"); len += sprintf(buf + len, "wps_pbc_method=%d ", WPS_UI_PBC_SW); len += sprintf(buf + len, "wps_ifname=%s ", nvram_safe_get(strcat_r(prefix, "ifname", tmp))); dbG("wps env buffer: %s\n", buf); // nvram_unset("wps_sta_devname"); // nvram_unset("wps_sta_mac"); // nvram_unset("wps_pinfail"); // nvram_unset("wps_pinfail_mac"); // nvram_unset("wps_pinfail_name"); // nvram_unset("wps_pinfail_state"); set_wps_env(buf); sprintf(tmp, "%lu", uptime()); nvram_set("wps_uptime", tmp); return 0; }
void start_pptpd(void) { int ret = 0, mss = 0, manual_dns = 0; char *lpTemp; FILE *fp; int pid = getpid(); _dprintf("start_pptpd: getpid= %d\n", pid); if(getpid() != 1) { notify_rc("start_pptpd"); return; } if (!nvram_match("pptpd_enable", "1")) { return; } // cprintf("stop vpn modules\n"); // stop_vpn_modules (); // Create directory for use by pptpd daemon and its supporting files mkdir("/tmp/pptpd", 0744); cprintf("open options file\n"); // Create options file that will be unique to pptpd to avoid interference // with pppoe and pptp fp = fopen("/tmp/pptpd/options.pptpd", "w"); fprintf(fp, "logfile /var/log/pptpd-pppd.log\ndebug\n"); if (nvram_match("pptpd_radius", "1")) fprintf(fp, "plugin radius.so\nplugin radattr.so\n" "radius-config-file /tmp/pptpd/radius/radiusclient.conf\n"); cprintf("check if wan_wins = zero\n"); int nowins = 0; if (nvram_match("wan_wins", "0.0.0.0")) { nvram_set("wan_wins", ""); nowins = 1; } if (strlen(nvram_safe_get("wan_wins")) == 0) nowins = 1; cprintf("write config\n"); fprintf(fp, "lock\n" "name *\n" "proxyarp\n" "ipcp-accept-local\n" "ipcp-accept-remote\n" "lcp-echo-failure 10\n" "lcp-echo-interval 5\n" "deflate 0\n" "auth\n" "-chap\n" "-mschap\n" "+mschap-v2\n"); fprintf(fp, "nomppe-stateful\n"); if (nvram_match("pptpd_forcemppe", "none")) { fprintf(fp, "nomppe nomppc\n"); } else if (nvram_match("pptpd_forcemppe", "auto")) { fprintf(fp, "require-mppe-40\n" "require-mppe-56\n" "require-mppe-128\n"); } else if (nvram_match("pptpd_forcemppe", "+mppe-40")) { fprintf(fp, "require-mppe\n" "require-mppe-40\n"); } else if (nvram_match("pptpd_forcemppe", "+mppe-56")) { fprintf(fp, "require-mppe\n" "nomppe-40\n" "require-mppe-56\n"); } else if (nvram_match("pptpd_forcemppe", "+mppe-128")) { fprintf(fp, "require-mppe\n" "nomppe-40\n" "nomppe-56\n" "require-mppe-128\n"); } fprintf(fp, "ms-ignore-domain\n" "chap-secrets /tmp/pptpd/chap-secrets\n" "ip-up-script /tmp/pptpd/ip-up\n" "ip-down-script /tmp/pptpd/ip-down\n" "mtu %s\n" "mru %s\n", nvram_get("pptpd_mtu") ? nvram_get("pptpd_mtu") : "1450", nvram_get("pptpd_mru") ? nvram_get("pptpd_mru") : "1450"); //WINS Server if (!nowins) { fprintf(fp, "ms-wins %s\n", nvram_safe_get("wan_wins")); } if (strlen(nvram_safe_get("pptpd_wins1"))) { fprintf(fp, "ms-wins %s\n", nvram_safe_get("pptpd_wins1")); } if (strlen(nvram_safe_get("pptpd_wins2"))) { fprintf(fp, "ms-wins %s\n", nvram_safe_get("pptpd_wins2")); } //DNS Server if (strlen(nvram_safe_get("pptpd_dns1"))) { fprintf(fp, "ms-dns %s\n", nvram_safe_get("pptpd_dns1")); manual_dns=1; } if (strlen(nvram_safe_get("pptpd_dns2"))) { fprintf(fp, "ms-dns %s\n", nvram_safe_get("pptpd_dns2")); manual_dns=1; } if(!manual_dns && !nvram_match("lan_ipaddr", "")) fprintf(fp, "ms-dns %s\n", nvram_safe_get("lan_ipaddr")); // force ppp interface starting from 10 fprintf(fp, "minunit 10\n"); // Following is all crude and need to be revisited once testing confirms // that it does work // Should be enough for testing.. if (nvram_match("pptpd_radius", "1")) { if (nvram_get("pptpd_radserver") != NULL && nvram_get("pptpd_radpass") != NULL) { fclose(fp); mkdir("/tmp/pptpd/radius", 0744); fp = fopen("/tmp/pptpd/radius/radiusclient.conf", "w"); fprintf(fp, "auth_order radius\n" "login_tries 4\n" "login_timeout 60\n" "radius_timeout 10\n" "nologin /etc/nologin\n" "servers /tmp/pptpd/radius/servers\n" "dictionary /etc/dictionary\n" "seqfile /var/run/radius.seq\n" "mapfile /etc/port-id-map\n" "radius_retries 3\n" "authserver %s:%s\n", nvram_get("pptpd_radserver"), nvram_get("pptpd_radport") ? nvram_get("pptpd_radport") : "radius"); if (nvram_get("pptpd_radserver") != NULL && nvram_get("pptpd_acctport") != NULL) fprintf(fp, "acctserver %s:%s\n", nvram_get("pptpd_radserver"), nvram_get("pptpd_acctport") ? nvram_get("pptpd_acctport") : "radacct"); fclose(fp); fp = fopen("/tmp/pptpd/radius/servers", "w"); fprintf(fp, "%s\t%s\n", nvram_get("pptpd_radserver"), nvram_get("pptpd_radpass")); fclose(fp); } else fclose(fp); } else fclose(fp); // Create pptpd.conf options file for pptpd daemon fp = fopen("/tmp/pptpd/pptpd.conf", "w"); fprintf(fp, "bcrelay %s\n", nvram_safe_get("pptpd_broadcast")); fprintf(fp, "localip %s\n" "remoteip %s\n", nvram_safe_get("lan_ipaddr"), nvram_safe_get("pptpd_clients")); fclose(fp); // Create ip-up and ip-down scripts that are unique to pptpd to avoid // interference with pppoe and pptp /* * adjust for tunneling overhead (mtu - 40 byte IP - 108 byte tunnel * overhead) */ if (nvram_match("mtu_enable", "1")) mss = atoi(nvram_safe_get("wan_mtu")) - 40 - 108; else mss = 1500 - 40 - 108; char bcast[32]; strcpy(bcast, nvram_safe_get("lan_ipaddr")); get_broadcast(bcast, nvram_safe_get("lan_netmask")); fp = fopen("/tmp/pptpd/ip-up", "w"); fprintf(fp, "#!/bin/sh\n" "startservice set_routes\n" // reinitialize "echo $PPPD_PID $1 $5 $6 $PEERNAME >> /tmp/pptp_connected\n" "iptables -I FORWARD -i $1 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu\n" "iptables -I INPUT -i $1 -j ACCEPT\n" "iptables -I FORWARD -i $1 -j ACCEPT\n" "iptables -t nat -I PREROUTING -i $1 -p udp -m udp --sport 9 -j DNAT --to-destinati on %s " // rule for wake on lan over pptp tunnel "%s\n", bcast, nvram_get("pptpd_ipup_script") ? nvram_get("pptpd_ipup_script") : ""); fclose(fp); fp = fopen("/tmp/pptpd/ip-down", "w"); fprintf(fp, "#!/bin/sh\n" "grep -v $1 /tmp/pptp_connected > /tmp/pptp_connected.new\n" "mv /tmp/pptp_connected.new /tmp/pptp_connected\n" "iptables -D FORWARD -i $1 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu\n" "iptables -D INPUT -i $1 -j ACCEPT\n" "iptables -D FORWARD -i $1 -j ACCEPT\n" "iptables -t nat -D PREROUTING -i $1 -p udp -m udp --sport 9 -j DNAT --to-destination %s " // rule for wake on lan over pptp tunnel "%s\n", bcast, nvram_get("pptpd_ipdown_script") ? nvram_get("pptpd_ipdown_script") : ""); fclose(fp); chmod("/tmp/pptpd/ip-up", 0744); chmod("/tmp/pptpd/ip-down", 0744); // Exctract chap-secrets from nvram write_chap_secret("/tmp/pptpd/chap-secrets"); chmod("/tmp/pptpd/chap-secrets", 0600); // Execute pptpd daemon ret = eval("pptpd", "-c", "/tmp/pptpd/pptpd.conf", "-o", "/tmp/pptpd/options.pptpd"); _dprintf("start_pptpd: ret= %d\n", ret); //dd_syslog(LOG_INFO, "pptpd : pptp daemon successfully started\n"); return; }
// 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; }
/* Check for time-dependent service */ static int svc_timecheck(void) { int activeNow; #if BOARD_HAS_5G_RADIO if (get_enabled_radio_wl()) { /* Initialize */ if (nvram_match("reload_svc_wl", "1")) { nvram_set_int_temp("reload_svc_wl", 0); svcStatus[RADIO5_ACTIVE] = -1; svcStatus[GUEST5_ACTIVE] = -1; } activeNow = is_radio_allowed_wl(); if (activeNow != svcStatus[RADIO5_ACTIVE]) { svcStatus[RADIO5_ACTIVE] = activeNow; if (activeNow) notify_rc("control_wifi_radio_wl_on"); else notify_rc("control_wifi_radio_wl_off"); } if (svcStatus[RADIO5_ACTIVE] > 0) { activeNow = is_guest_allowed_wl(); if (activeNow != svcStatus[GUEST5_ACTIVE]) { svcStatus[GUEST5_ACTIVE] = activeNow; if (activeNow) notify_rc("control_wifi_guest_wl_on"); else notify_rc("control_wifi_guest_wl_off"); } } else { if (svcStatus[GUEST5_ACTIVE] >= 0) svcStatus[GUEST5_ACTIVE] = -1; } } #endif if (get_enabled_radio_rt()) { /* Initialize */ if (nvram_match("reload_svc_rt", "1")) { nvram_set_int_temp("reload_svc_rt", 0); svcStatus[RADIO2_ACTIVE] = -1; svcStatus[GUEST2_ACTIVE] = -1; } activeNow = is_radio_allowed_rt(); if (activeNow != svcStatus[RADIO2_ACTIVE]) { svcStatus[RADIO2_ACTIVE] = activeNow; if (activeNow) notify_rc("control_wifi_radio_rt_on"); else notify_rc("control_wifi_radio_rt_off"); } if (svcStatus[RADIO2_ACTIVE] > 0) { activeNow = is_guest_allowed_rt(); if (activeNow != svcStatus[GUEST2_ACTIVE]) { svcStatus[GUEST2_ACTIVE] = activeNow; if (activeNow) notify_rc("control_wifi_guest_rt_on"); else notify_rc("control_wifi_guest_rt_off"); } } else { if (svcStatus[GUEST2_ACTIVE] >= 0) svcStatus[GUEST2_ACTIVE] = -1; } } return 0; }
int mdev_tty_main(int argc, char **argv) { FILE *fp; int isLock, devnum, has_int_pipe; char usb_port_id[64], usb_interface_id[64], node_fname[64]; const char *device_name, *action; if(argc != 3){ printf("Usage: %s [device_name] [action]\n", argv[0]); return 0; } device_name = argv[1]; action = argv[2]; usb_dbg("(%s): action=%s.\n", device_name, action); if (!isSerialNode(device_name) && !isACMNode(device_name)) return 0; sprintf(node_fname, "%s/%s", MODEM_NODE_DIR, device_name); // Check Lock. if((isLock = file_lock((char *)device_name)) == -1) return 0; // If remove the device? if(!check_hotplug_action(action)){ unlink(node_fname); if (get_usb_modem_wan(0)) notify_rc("on_unplug_usb_modem"); usb_dbg("(%s): Remove the modem node\n", device_name); goto out_unlock; } // Get DevNum devnum = 0; has_int_pipe = 0; usb_port_id[0] = 0; if (get_interface_by_device(device_name, usb_interface_id, sizeof(usb_interface_id))) { has_int_pipe = get_interface_Int_endpoint(usb_interface_id); if (get_usb_port_by_interface_string(usb_interface_id, usb_port_id, sizeof(usb_port_id))) devnum = get_usb_devnum(usb_port_id); } // Write node file. mkdir_if_none(MODEM_NODE_DIR); fp = fopen(node_fname, "w+"); if (fp) { fprintf(fp, "pref=%d\n", (has_int_pipe) ? 1 : 0); fprintf(fp, "devnum=%d\n", devnum); fprintf(fp, "portid=%s\n", usb_port_id); fclose(fp); } if (nvram_invmatch("modem_arun", "0") && nvram_match("modem_rule", "1") && nvram_invmatch("modem_type", "3")) notify_rc("on_hotplug_usb_modem"); usb_dbg("(%s): Success!\n", device_name); out_unlock: file_unlock(isLock); return 1; }
// 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; }
int main(int argc, char **argv) { int ret; char *base = strrchr(argv[0], '/'); const applet_rc_t *app; base = base ? base + 1 : argv[0]; /* init */ if (!strcmp(base, "init")) { if (getpid() != 1 ) { dbg("error: %s must be run as PID 1!\n", base); return -1; } init_main_loop(); return 0; } /* stub for early kernel hotplug */ if (!strcmp(base, "hotplug")) { return 0; } if (!strcmp(base, "reboot")) { return sys_exit(); } if (!strcmp(base, "shutdown") || !strcmp(base, "halt")) { return sys_stop(); } if (!strcmp(base, "rc")) { dbg("error: cannot run rc directly!\n"); return EINVAL; } /* Set TZ for all rc programs */ setenv_tz(); /* Start applets */ for (app = applets_rc; app->name; app++) { if (strcmp(base, app->name) == 0) return app->main(argc, argv); } ret = 0; if (!strcmp(base, "reset_to_defaults")) { erase_nvram(); sys_exit(); } else if (!strcmp(base, "run_ftpsamba")) { #if defined(APP_SMBD) restart_smbd(); #else ; #endif #if defined(APP_FTPD) restart_ftpd(); #endif } #if defined(APP_SMBD) else if (!strcmp(base, "run_samba")) { restart_smbd(); } #endif #if defined(APP_FTPD) else if (!strcmp(base, "run_ftp")) { restart_ftpd(); } #endif #if defined(APP_NFSD) else if (!strcmp(base, "run_nfsd")) { run_nfsd(); } #endif #if defined(APP_MINIDLNA) else if (!strcmp(base, "run_minidlna")) { restart_dms(0); } #endif #if defined(APP_FIREFLY) else if (!strcmp(base, "run_firefly")) { restart_itunes(); } #endif #if defined(APP_TRMD) else if (!strcmp(base, "run_transmission")) { restart_torrent(); } #endif #if defined(APP_ARIA) else if (!strcmp(base, "run_aria")) { restart_aria(); } #endif #if defined(APP_FTPD) else if (!strcmp(base, "stop_ftp")) { stop_ftp(); } #endif #if defined(APP_SMBD) else if (!strcmp(base, "stop_samba")) { stop_samba(0); } #endif else if (!strcmp(base, "stop_ftpsamba")) { #if defined(APP_FTPD) stop_ftp(); #endif #if defined(APP_SMBD) stop_samba(0); #else ; #endif } #if defined(APP_NFSD) else if (!strcmp(base, "stop_nfsd")) { stop_nfsd(); } #endif #if defined(APP_MINIDLNA) else if (!strcmp(base, "stop_minidlna")) { stop_dms(); } #endif #if defined(APP_FIREFLY) else if (!strcmp(base, "stop_firefly")) { stop_itunes(); } #endif #if defined(APP_TRMD) else if (!strcmp(base, "stop_transmission")) { stop_torrent(); } #endif #if defined(APP_ARIA) else if (!strcmp(base, "stop_aria")) { stop_aria(); } #endif else if (!strcmp(base, "start_ddns")) { start_ddns(1); } else if (!strcmp(base, "stop_wan")) { notify_rc("manual_wan_disconnect"); } else if (!strcmp(base, "restart_wan")) { notify_rc("manual_wan_reconnect"); } else if (!strcmp(base, "restart_dns")) { restart_dns(); } else if (!strcmp(base, "restart_dhcpd")) { restart_dhcpd(); } else if (!strcmp(base, "restart_networkmap")) { restart_networkmap(); } else if (!strcmp(base, "run_telnetd")) { run_telnetd(); } else if (!strcmp(base, "restart_firewall")) { restart_firewall(); } else if (!strcmp(base, "radio2_toggle")) { manual_toggle_radio_rt(-1); } else if (!strcmp(base, "radio2_toggle_on")) { manual_toggle_radio_rt(1); } else if (!strcmp(base, "radio2_toggle_off")) { manual_toggle_radio_rt(0); } else if (!strcmp(base, "radio2_enable")) { manual_change_radio_rt(1); } else if (!strcmp(base, "radio2_disable")) { manual_change_radio_rt(0); } else if (!strcmp(base, "radio2_guest_enable")) { manual_change_guest_rt(1); } else if (!strcmp(base, "radio2_guest_disable")) { manual_change_guest_rt(0); } else if (!strcmp(base, "radio2_eeprom_mac")) { if (argc > 1 && strlen(argv[1]) == 17) ret = set_wireless_mac(0, argv[1]); else { printf("Usage: %s XX:XX:XX:XX:XX:XX\n\n", base); ret = get_wireless_mac(0); } } else if (!strcmp(base, "radio2_restart")) { int radio_on = get_enabled_radio_rt(); if (radio_on) radio_on = is_radio_allowed_rt(); restart_wifi_rt(radio_on, 1); } #if BOARD_HAS_5G_RADIO else if (!strcmp(base, "radio5_toggle")) { manual_toggle_radio_wl(-1); } else if (!strcmp(base, "radio5_toggle_on")) { manual_toggle_radio_wl(1); } else if (!strcmp(base, "radio5_toggle_off")) { manual_toggle_radio_wl(0); } else if (!strcmp(base, "radio5_enable")) { manual_change_radio_wl(1); } else if (!strcmp(base, "radio5_disable")) { manual_change_radio_wl(0); } else if (!strcmp(base, "radio5_guest_enable")) { manual_change_guest_wl(1); } else if (!strcmp(base, "radio5_guest_disable")) { manual_change_guest_wl(0); } else if (!strcmp(base, "radio5_eeprom_mac")) { if (argc > 1 && strlen(argv[1]) == 17) ret = set_wireless_mac(1, argv[1]); else { printf("Usage: %s XX:XX:XX:XX:XX:XX\n\n", base); ret = get_wireless_mac(1); } } else if (!strcmp(base, "radio5_restart")) { int radio_on = get_enabled_radio_wl(); if (radio_on) radio_on = is_radio_allowed_wl(); restart_wifi_wl(radio_on, 1); } #endif #if (BOARD_NUM_USB_PORTS > 0) else if (!strcmp(base, "ejusb")) { int port = 0; char *devn = NULL; if (argc > 1) { if (strncmp(argv[1], "sd", 2) == 0) devn = argv[1]; else { port = atoi(argv[1]); if (argc > 2) devn = argv[2]; } } ret = safe_remove_usb_device(port, devn, 1); } else if (!strcmp(base, "ejusb1")) { char *devn = (argc > 1) ? argv[1] : NULL; ret = safe_remove_usb_device(1, devn, 1); } #if (BOARD_NUM_USB_PORTS > 1) else if (!strcmp(base, "ejusb2")) { char *devn = (argc > 1) ? argv[1] : NULL; ret = safe_remove_usb_device(2, devn, 1); } #endif #endif else if (!strcmp(base, "pids")) { if (argc > 1) ret = pids_main(argv[1]); else ret = EINVAL; } else { printf("Unknown applet: %s\n", base); ret = EINVAL; } return ret; }
int update_dsl_iptv_variables() { char *nv, *nvp, *b; char *vpi, *vci, *proto, *encap, *vid; int unit = 0; char prefix[] = "dslxxx_xxxxxxxx"; char tmp[64]; _dprintf("dsltmp_cfg_iptv_pvclist=%s\n", nvram_safe_get("dsltmp_cfg_iptv_pvclist")); nvp = nv = strdup(nvram_safe_get("dsltmp_cfg_iptv_pvclist")); while(nv && (b = strsep(&nvp, "<")) != NULL){ if((vstrsep(b, ">", &vpi, &vci, &proto, &encap, &vid) != 5)) continue; unit++; _dprintf("vpi=[%s], vci=[%s], proto=[%s], encap=[%s], vid=[%s]\n", vpi, vci, proto, encap, vid); if(nvram_match("dsltmp_transmode", "atm")) { snprintf(prefix, sizeof(prefix), "dsl%d_", unit); nvram_set(strcat_r(prefix, "vpi", tmp), vpi); nvram_set(strcat_r(prefix, "vci", tmp), vci); nvram_set(strcat_r(prefix, "encap", tmp), encap); } else { //ptm snprintf(prefix, sizeof(prefix), "dsl8.%d_", unit); nvram_set("dslx_transmode", "ptm"); notify_rc("restart_dsl_setting"); } nvram_set(strcat_r(prefix, "enable", tmp), "1"); if(!strcmp(proto, "0")) { nvram_set(strcat_r(prefix, "proto", tmp), "pppoe"); } else if(!strcmp(proto, "1")) { nvram_set(strcat_r(prefix, "proto", tmp), "pppoa"); } else if(!strcmp(proto, "2")) { nvram_set(strcat_r(prefix, "proto", tmp), "dhcp"); } else if(!strcmp(proto, "3")) { nvram_set(strcat_r(prefix, "proto", tmp), "bridge"); } else if(!strcmp(proto, "4")) { nvram_set(strcat_r(prefix, "proto", tmp), "ipoa"); } else { nvram_set(strcat_r(prefix, "proto", tmp), "bridge"); } if(strlen(vid)) { nvram_set(strcat_r(prefix, "dot1q", tmp), "1"); nvram_set(strcat_r(prefix, "vid", tmp), vid); } } free(nv); if(unit) { if(nvram_match("switch_stb_x", "1") && (nvram_get_int("dslx_config_num") > 1) ) { nvram_set("dsltmp_qis_reboot", "0"); } else { nvram_set("switch_stb_x", "1"); nvram_set("wans_lanport", "4"); nvram_set("dsltmp_qis_reboot", "1"); } } else { if(nvram_match("switch_stb_x", "0")) { nvram_set("dsltmp_qis_reboot", "0"); } else { nvram_set("switch_stb_x", "0"); nvram_set("dsl1_enable", "0"); nvram_set("dsl2_enable", "0"); nvram_set("dsl3_enable", "0"); nvram_set("dsl4_enable", "0"); nvram_set("dsl5_enable", "0"); nvram_set("dsl6_enable", "0"); nvram_set("dsl7_enable", "0"); #ifdef RTCONFIG_VDSL nvram_set("dsl8.1_enable", "0"); nvram_set("dsl8.2_enable", "0"); nvram_set("dsl8.3_enable", "0"); nvram_set("dsl8.4_enable", "0"); nvram_set("dsl8.5_enable", "0"); nvram_set("dsl8.6_enable", "0"); nvram_set("dsl8.7_enable", "0"); #endif nvram_set("dsltmp_qis_reboot", "1"); } } return 0; }