int wanport_status(int wan_unit) { #if defined(RTCONFIG_RALINK) || defined(RTCONFIG_QCA) return rtkswitch_wanPort_phyStatus(wan_unit); #else char word[100], *next; int mask; char wan_ports[16]; memset(wan_ports, 0, 16); #ifndef RTN53 if(nvram_get_int("sw_mode") == SW_MODE_AP) strcpy(wan_ports, "lanports"); else #endif if(wan_unit == 1) strcpy(wan_ports, "wan1ports"); else strcpy(wan_ports, "wanports"); mask = 0; foreach(word, nvram_safe_get(wan_ports), next) { mask |= (0x0001<<atoi(word)); if(nvram_get_int("sw_mode") == SW_MODE_AP) break; }
static void init_switch_ralink(void) { generate_switch_para(); // TODO: replace to nvram controlled procedure later eval("ifconfig", "eth2", "hw", "ether", nvram_safe_get("et0macaddr")); #ifdef RTCONFIG_RALINK_RT3052 if(is_routing_enabled()) config_3052(nvram_get_int("switch_stb_x")); #else if(strlen(nvram_safe_get("wan0_ifname"))) { if (!nvram_match("et1macaddr", "")) eval("ifconfig", nvram_safe_get("wan0_ifname"), "hw", "ether", nvram_safe_get("et1macaddr")); else eval("ifconfig", nvram_safe_get("wan0_ifname"), "hw", "ether", nvram_safe_get("et0macaddr")); } config_switch(); #endif #ifdef RTCONFIG_SHP if(nvram_get_int("qos_enable") || nvram_get_int("macfilter_enable_x") || nvram_get_int("lfp_disable_force")) { nvram_set("lfp_disable", "1"); } else { nvram_set("lfp_disable", "0"); } if(nvram_get_int("lfp_disable")==0) { restart_lfp(); } #endif // reinit_hwnat(); }
int start_dhcp6c(char *wan_ifname) { FILE *fp; int wan6_dhcp, dns6_auto, lan6_auto, ia_id, sla_id, sla_len; char *conf_file = "/etc/dhcp6c.conf"; wan6_dhcp = nvram_get_int("ip6_wan_dhcp"); dns6_auto = nvram_get_int("ip6_dns_auto"); lan6_auto = nvram_get_int("ip6_lan_auto"); if (!wan6_dhcp && !dns6_auto && !lan6_auto) return 1; ia_id = 0; sla_id = 1; sla_len = 0; /* auto prefix always /64 */ fp = fopen(conf_file, "w"); if (!fp) { perror(conf_file); return -1; } fprintf(fp, "interface %s {\n", wan_ifname); if (wan6_dhcp) fprintf(fp, " send ia-na %d;\n", ia_id); if (lan6_auto) fprintf(fp, " send ia-pd %d;\n", ia_id); if (wan6_dhcp || lan6_auto) fprintf(fp, " send rapid-commit;\n"); else fprintf(fp, " information-only ;\n"); /* space needed for dhcp6c port in busybox */ if (dns6_auto) fprintf(fp, " request domain-name-servers;\n"); fprintf(fp, " script \"%s\";\n" "};\n", SCRIPT_DHCP6C_WAN ); if (wan6_dhcp) fprintf(fp, "id-assoc na %d { };\n", ia_id); if (lan6_auto) fprintf(fp, "id-assoc pd %d {\n" " prefix-interface %s {\n" " sla-id %d;\n" " sla-len %d;\n" " };\n" "};\n", ia_id, IFNAME_BR, sla_id, sla_len ); fclose(fp); logmessage("DHCPv6 WAN Client", "starting on wan (%s) ...", wan_ifname); return eval("/sbin/dhcp6c", "-D", "LL", wan_ifname); }
int runtime_config_qtn(int unit, int subunit) { int ret; if (!rpc_qtn_ready()) { dbG("qcsapi error\n"); return -1; } if ( unit == 1 && subunit == -1 ){ dbG("Global QTN settings\n"); if(nvram_get_int("wl1_itxbf") == 1 || nvram_get_int("wl1_txbf") == 1){ dbG("[bf] set_bf_on\n"); qcsapi_wifi_run_script("router_command.sh", "set_bf_on"); ret = qcsapi_config_update_parameter(WIFINAME, "bf", "1"); if (ret < 0) dbG("qcsapi error\n"); }else{ dbG("[bf] set_bf_off\n"); qcsapi_wifi_run_script("router_command.sh", "set_bf_off"); ret = qcsapi_config_update_parameter(WIFINAME, "bf", "0"); if (ret < 0) dbG("qcsapi error\n"); } gen_stateless_conf(); } rpc_parse_nvram_from_httpd(unit, subunit); return 1; }
int set_pwr_usb(int boolOn){ int use_gpio, gpio_pin; switch(get_model()) { case MODEL_RTAC68U: if ((nvram_get_int("HW_ver") != 170) && (nvram_get_double("HW_ver") != 1.10) && (nvram_get_double("HW_ver") != 1.85) && (nvram_get_double("HW_ver") != 1.90) && (nvram_get_double("HW_ver") != 1.95) && (nvram_get_double("HW_ver") != 2.10) && (nvram_get_double("HW_ver") != 2.20)) return 0; break; } if((gpio_pin = (use_gpio = nvram_get_int("pwr_usb_gpio"))&0xff) != 0xff){ if(boolOn) set_gpio(gpio_pin, 1); else set_gpio(gpio_pin, 0); } if((gpio_pin = (use_gpio = nvram_get_int("pwr_usb_gpio2"))&0xff) != 0xff){ if(boolOn) set_gpio(gpio_pin, 1); else set_gpio(gpio_pin, 0); } return 0; }
/* #565: Access Intranet off */ void create_mbssid_vlan(void) { if(nvram_get_int("wl1.1_bss_enabled") == 1){ if(nvram_match("wl1.1_lanaccess", "off") && !nvram_match("wl1.1_lanaccess", "")){ // strange logic !? same happened below below /* VID 4000 */ eval("vconfig", "add", "eth0", "4000"); eval("ifconfig", "vlan4000", "hw", "ether", nvram_safe_get("lan_hwaddr"), "up"); eval("brctl", "addif", "br0", "vlan4000"); eval("et", "robowr", "0x05", "0x81", "0x0fa0"); eval("et", "robowr", "0x05", "0x83", "0x00a0"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); }else{ eval("brctl", "delif", "br0", "vlan4000"); eval("et", "robowr", "0x05", "0x81", "0x0fa0"); eval("et", "robowr", "0x05", "0x83", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); } } if(nvram_get_int("wl1.2_bss_enabled") == 1){ if(nvram_match("wl1.2_lanaccess", "off") && !nvram_match("wl1.2_lanaccess", "")){ /* VID 4001 */ eval("vconfig", "add", "eth0", "4001"); eval("ifconfig", "vlan4001", "hw", "ether", nvram_safe_get("lan_hwaddr"), "up"); eval("brctl", "addif", "br0", "vlan4001"); eval("et", "robowr", "0x05", "0x81", "0x0fa1"); eval("et", "robowr", "0x05", "0x83", "0x00a0"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); }else{ eval("brctl", "delif", "br0", "vlan4001"); eval("et", "robowr", "0x05", "0x81", "0x0fa1"); eval("et", "robowr", "0x05", "0x83", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); } } if(nvram_get_int("wl1.3_bss_enabled") == 1){ if(nvram_match("wl1.3_lanaccess", "off") && !nvram_match("wl1.3_lanaccess", "")){ /* VID 4002 */ eval("vconfig", "add", "eth0", "4002"); eval("ifconfig", "vlan4002", "hw", "ether", nvram_safe_get("lan_hwaddr"), "up"); eval("brctl", "addif", "br0", "vlan4002"); eval("et", "robowr", "0x05", "0x81", "0x0fa2"); eval("et", "robowr", "0x05", "0x83", "0x00a0"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); }else{ eval("brctl", "delif", "br0", "vlan4002"); eval("et", "robowr", "0x05", "0x81", "0x0fa2"); eval("et", "robowr", "0x05", "0x83", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); } } }
// only ralink solution can reload it dynamically void reinit_hwnat() { // only happened when hwnat=1 // only loaded when unloaded, and unloaded when loaded // in restart_firewall for fw_pt_l2tp/fw_pt_ipsec // in restart_qos for qos_enable // in restart_wireless for wlx_mrate_x if (nvram_get_int("hwnat")) { if (is_nat_enabled() && !nvram_get_int("qos_enable") /*&&*/ /* TODO: consider RTCONFIG_DUALWAN case */ // !nvram_match("wan0_proto", "l2tp") && // !nvram_match("wan0_proto", "pptp") && /*(nvram_match("wl0_radio", "0") || !nvram_get_int("wl0_mrate_x")) && (nvram_match("wl1_radio", "0") || !nvram_get_int("wl1_mrate_x"))*/) { if (!is_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); } } else if (is_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 } } }
static int nvram_restore_defaults(void) { struct nvram_pair *np; int restore_defaults; /* Restore defaults if told to or OS has changed */ restore_defaults = !nvram_match("restore_defaults", "0"); /* check asus-wrt NVRAM content (sorry, but many params is incompatible) */ if (!restore_defaults) { if (nvram_get("buildno") && nvram_get("buildinfo") && nvram_get("extendno")) restore_defaults = 1; } if (restore_defaults) nvram_clear(); /* Restore defaults */ for (np = router_defaults; np->name; np++) { if (restore_defaults || !nvram_get(np->name)) { nvram_set(np->name, np->value); } } klogctl(8, NULL, nvram_get_int("console_loglevel")); /* load static values */ nvram_modem_type = nvram_get_int("modem_type"); nvram_modem_rule = nvram_get_int("modem_rule"); nvram_nf_nat_type = nvram_get_int("nf_nat_type"); nvram_ipv6_type = get_ipv6_type(); return restore_defaults; }
/* #565: Access Intranet off */ void create_mbssid_vlan(void) { if(nvram_get_int("wl1.1_bss_enabled") == 1){ if(nvram_match("wl1.1_lanaccess", "off") && !nvram_match("wl1.1_lanaccess", "")){ /* VID 4000 */ eval("vconfig", "add", "eth0", "4000"); eval("ifconfig", "vlan4000", "up"); eval("brctl", "addif", "br0", "vlan4000"); eval("et", "robowr", "0x05", "0x81", "0x0fa0"); eval("et", "robowr", "0x05", "0x83", "0x00a0"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); }else{ eval("brctl", "delif", "br0", "vlan4000"); eval("et", "robowr", "0x05", "0x81", "0x0fa0"); eval("et", "robowr", "0x05", "0x83", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); } } if(nvram_get_int("wl1.2_bss_enabled") == 1){ if(nvram_match("wl1.2_lanaccess", "off") && !nvram_match("wl1.2_lanaccess", "")){ /* VID 4001 */ eval("vconfig", "add", "eth0", "4001"); eval("ifconfig", "vlan4001", "up"); eval("brctl", "addif", "br0", "vlan4001"); eval("et", "robowr", "0x05", "0x81", "0x0fa1"); eval("et", "robowr", "0x05", "0x83", "0x00a0"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); }else{ eval("brctl", "delif", "br0", "vlan4001"); eval("et", "robowr", "0x05", "0x81", "0x0fa1"); eval("et", "robowr", "0x05", "0x83", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); } } if(nvram_get_int("wl1.3_bss_enabled") == 1){ if(nvram_match("wl1.3_lanaccess", "off") && !nvram_match("wl1.3_lanaccess", "")){ /* VID 4002 */ eval("vconfig", "add", "eth0", "4002"); eval("ifconfig", "vlan4002", "up"); eval("brctl", "addif", "br0", "vlan4002"); eval("et", "robowr", "0x05", "0x81", "0x0fa2"); eval("et", "robowr", "0x05", "0x83", "0x00a0"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); }else{ eval("brctl", "delif", "br0", "vlan4002"); eval("et", "robowr", "0x05", "0x81", "0x0fa2"); eval("et", "robowr", "0x05", "0x83", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0000"); eval("et", "robowr", "0x05", "0x80", "0x0080"); } } }
int dhcp6c_main(int argc, char **argv) { int ipv6_type, dns6_auto, lan6_auto, is_need_notify_radvd; char *dns6_new, *lan_addr6_new; char addr6s[INET6_ADDRSTRLEN]; // char *wan_ifname = safe_getenv("interface"); ipv6_type = get_ipv6_type(); if (ipv6_type != IPV6_NATIVE_DHCP6) return 0; is_need_notify_radvd = 0; lan6_auto = nvram_get_int("ip6_lan_auto"); if (lan6_auto) { lan_addr6_new = get_ifaddr6(IFNAME_BR, 0, addr6s); if (store_lan_addr6(lan_addr6_new)) is_need_notify_radvd = 1; } dns6_auto = nvram_get_int("ip6_dns_auto"); if (dns6_auto) { dns6_new = getenv("new_domain_name_servers"); if (store_wan_dns6(dns6_new)) { update_resolvconf(0, 0); is_need_notify_radvd = 1; } } if (is_need_notify_radvd || !pids("radvd")) reload_radvd(); return 0; }
void load_sysparam(void) { char macstr[32]; #if defined(RTCONFIG_WIRELESSREPEATER) || defined(RTCONFIG_PROXYSTA) char tmp[100], prefix[] = "wlXXXXXXXXXXXXXX"; #endif #ifdef RTCONFIG_WIRELESSREPEATER if (nvram_get_int("sw_mode") == SW_MODE_REPEATER) { snprintf(prefix, sizeof(prefix), "wl%d.1_", nvram_get_int("wlc_band")); strncpy(ssid_g, nvram_safe_get(strcat_r(prefix, "ssid", tmp)), sizeof(ssid_g)); } else #endif #ifdef RTCONFIG_BCMWL6 #ifdef RTCONFIG_PROXYSTA if (is_psta(0) || is_psta(1)) { snprintf(prefix, sizeof(prefix), "wl%d_", 1 - nvram_get_int("wlc_band")); strncpy(ssid_g, nvram_safe_get(strcat_r(prefix, "ssid", tmp)), 32); } else #endif #endif strncpy(ssid_g, nvram_safe_get("wl0_ssid"), sizeof(ssid_g)); strncpy(netmask_g, nvram_safe_get("lan_netmask"), sizeof(netmask_g)); strncpy(productid_g, get_productid(), sizeof(productid_g)); snprintf(firmver_g, sizeof(firmver_g), "%s.%s", nvram_safe_get("firmver"), nvram_safe_get("buildno")); strcpy(macstr, nvram_safe_get("lan_hwaddr")); // printf("mac: %d\n", strlen(macstr)); if (strlen(macstr)!=0) ether_atoe(macstr, mac); }
static void build_wan_lan_mask(int stb) { int i, unit; int wanscap_lan = get_wans_dualwan() & WANSCAP_LAN; int wans_lanport = nvram_get_int("wans_lanport"); int sw_mode = nvram_get_int("sw_mode"); char prefix[8], nvram_ports[20]; if (sw_mode == SW_MODE_AP || sw_mode == SW_MODE_REPEATER) wanscap_lan = 0; if (stb == 100 && (sw_mode == SW_MODE_AP || __mediabridge_mode(sw_mode))) stb = 7; /* Don't create WAN port. */ #if 0 /* TODO: no WAN port */ if ((get_wans_dualwan() & (WANSCAP_LAN | WANSCAP_WAN)) == 0) stb = 7; // no WAN? #endif if (wanscap_lan && (wans_lanport < 0 || wans_lanport > 4)) { _dprintf("%s: invalid wans_lanport %d!\n", __func__, wans_lanport); wanscap_lan = 0; } lan_mask = wan_mask = wans_lan_mask = 0; for (i = 0; i < NR_WANLAN_PORT; ++i) { switch (lan_wan_partition[stb][i]) { case 0: wan_mask |= 1U << lan_id_to_port_nr(i); break; case 1: lan_mask |= 1U << lan_id_to_port_nr(i); break; default: _dprintf("%s: Unknown LAN/WAN port definition. (stb %d i %d val %d)\n", __func__, stb, i, lan_wan_partition[stb][i]); } } //DUALWAN if (wanscap_lan) { wans_lan_mask = 1U << lan_id_to_port_nr(wans_lanport); lan_mask &= ~wans_lan_mask; } for (unit = WAN_UNIT_FIRST; unit < WAN_UNIT_MAX; ++unit) { sprintf(prefix, "%d", unit); sprintf(nvram_ports, "wan%sports_mask", (unit == WAN_UNIT_FIRST)?"":prefix); if (get_dualwan_by_unit(unit) == WANS_DUALWAN_IF_WAN) { nvram_set_int(nvram_ports, wan_mask); } else if (get_dualwan_by_unit(unit) == WANS_DUALWAN_IF_LAN) { nvram_set_int(nvram_ports, wans_lan_mask); } else nvram_unset(nvram_ports); } nvram_set_int("lanports_mask", lan_mask); }
void reset_traffic_meter_counter(){ FILE *fp; last_day_rx = 0; last_day_tx = 0; last_month_rx = 0; last_month_tx = 0; today_rx = 0; today_tx = 0; month_rx = 0; month_tx = 0; reset_base_day_rx = (history.daily[history.dailyp].counter[0]/K); reset_base_day_tx = (history.daily[history.dailyp].counter[1]/K); reset_base_month_rx = (history.monthly[history.monthlyp].counter[0]/K); reset_base_month_tx = (history.monthly[history.monthlyp].counter[1]/K); nvram_set("isp_day_tx", "0"); nvram_set("isp_day_rx", "0"); nvram_set("isp_month_tx", "0"); nvram_set("isp_month_rx", "0"); isp_limit = nvram_get_int("isp_limit"); isp_limit_time = nvram_get_int("isp_limit_time"); reset_base_time = cur_conn_time; last_connect_time = 0; total_connect_time = 0; set_meter_file("isp_meter:0,0,0,end"); if(!nvram_match("isp_meter", "disable") && !(nvram_match("wan0_state_t", "2") && nvram_match("wan0_auxstate_t", "0")) ) { notify_rc_and_wait("isp_meter up"); } }
void get_lan_nvram(){ char nvram_name[16]; current_lan_unit = nvram_get_int("lan_unit"); memset(prefix_lan, 0, 8); if(current_lan_unit < 0) strcpy(prefix_lan, "lan_"); else sprintf(prefix_lan, "lan%d_", current_lan_unit); memset(current_lan_ifname, 0, 16); strcpy(current_lan_ifname, nvram_safe_get(strcat_r(prefix_lan, "ifname", nvram_name))); memset(current_lan_proto, 0, 16); strcpy(current_lan_proto, nvram_safe_get(strcat_r(prefix_lan, "proto", nvram_name))); memset(current_lan_ipaddr, 0, 16); strcpy(current_lan_ipaddr, nvram_safe_get(strcat_r(prefix_lan, "ipaddr", nvram_name))); memset(current_lan_netmask, 0, 16); strcpy(current_lan_netmask, nvram_safe_get(strcat_r(prefix_lan, "netmask", nvram_name))); memset(current_lan_gateway, 0, 16); strcpy(current_lan_gateway, nvram_safe_get(strcat_r(prefix_lan, "gateway", nvram_name))); memset(current_lan_dns, 0, 256); strcpy(current_lan_dns, nvram_safe_get(strcat_r(prefix_lan, "dns", nvram_name))); memset(current_lan_subnet, 0, 11); strcpy(current_lan_subnet, nvram_safe_get(strcat_r(prefix_lan, "subnet", nvram_name))); #ifdef RTCONFIG_WIRELESSREPEATER if(sw_mode == SW_MODE_REPEATER){ wlc_state = nvram_get_int("wlc_state"); got_notify = 1; } #endif csprintf("# wanduck: Got LAN(%d) information:\n", current_lan_unit); if(nvram_match("wanduck_debug", "1")){ #ifdef RTCONFIG_WIRELESSREPEATER if(sw_mode == SW_MODE_REPEATER){ csprintf("# wanduck: ipaddr=%s.\n", current_lan_ipaddr); csprintf("# wanduck:wlc_state=%d.\n", wlc_state); } else #endif { csprintf("# wanduck: ifname=%s.\n", current_lan_ifname); csprintf("# wanduck: proto=%s.\n", current_lan_proto); csprintf("# wanduck: ipaddr=%s.\n", current_lan_ipaddr); csprintf("# wanduck: netmask=%s.\n", current_lan_netmask); csprintf("# wanduck: gateway=%s.\n", current_lan_gateway); csprintf("# wanduck: dns=%s.\n", current_lan_dns); csprintf("# wanduck: subnet=%s.\n", current_lan_subnet); } } }
void update_minidlna_conf(const char *link_path, const char *conf_path) { FILE *fp; int dlna_disc, dlna_root; char *computer_name; char *dlna_src1 = "V,/media/AiDisk_a1/Video"; char *dlna_src2 = "P,/media/AiDisk_a1/Photo"; char *dlna_src3 = "A,/media/AiDisk_a1/Audio"; fp = fopen(conf_path, "w"); if (!fp) return; computer_name = get_our_hostname(); dlna_disc = nvram_get_int("dlna_disc"); dlna_root = nvram_get_int("dlna_root"); dlna_src1 = nvram_safe_get("dlna_src1"); dlna_src2 = nvram_safe_get("dlna_src2"); dlna_src3 = nvram_safe_get("dlna_src3"); if (!*dlna_src1 && !*dlna_src2 && !*dlna_src3) dlna_src1 = "/media"; if (dlna_disc < 10) dlna_disc = 10; if (dlna_disc > 10800) dlna_disc = 10800; fprintf(fp, "port=%d\n", 8200); fprintf(fp, "network_interface=%s\n", IFNAME_BR); fprintf(fp, "notify_interval=%d\n", dlna_disc); if (*dlna_src1) fprintf(fp, "media_dir=%s\n", dlna_src1); if (*dlna_src2) fprintf(fp, "media_dir=%s\n", dlna_src2); if (*dlna_src3) fprintf(fp, "media_dir=%s\n", dlna_src3); fprintf(fp, "merge_media_dirs=%s\n", "no"); if (dlna_root == 1) fprintf(fp, "root_container=%s\n", "B"); else if (dlna_root == 2) fprintf(fp, "root_container=%s\n", "M"); else if (dlna_root == 3) fprintf(fp, "root_container=%s\n", "V"); else if (dlna_root == 4) fprintf(fp, "root_container=%s\n", "P"); if (nvram_get_int("dlna_sort") > 0) fprintf(fp, "force_sort_criteria=%s\n", "+upnp:class,+upnp:originalTrackNumber,+dc:title"); fprintf(fp, "friendly_name=%s\n", computer_name); fprintf(fp, "db_dir=%s\n", link_path); fprintf(fp, "log_dir=%s\n", link_path); fprintf(fp, "album_art_names=%s\n", "Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg"); fprintf(fp, "inotify=%s\n", "yes"); fprintf(fp, "enable_tivo=%s\n", "no"); fprintf(fp, "strict_dlna=%s\n", "no"); fprintf(fp, "model_number=%d\n", 1); fclose(fp); }
/** * Configure LAN/WAN partition base on generic IPTV type. * @type: * 0: Default. * 1: LAN1 * 2: LAN2 * 3: LAN3 * 4: LAN4 * 5: LAN1+LAN2 * 6: LAN3+LAN4 */ static void config_qca8337_LANWANPartition(int type) { int wanscap_wanlan = get_wans_dualwan() & (WANSCAP_WAN | WANSCAP_LAN); int wanscap_lan = wanscap_wanlan & WANSCAP_LAN; int wans_lanport = nvram_get_int("wans_lanport"); int sw_mode = nvram_get_int("sw_mode"); if (sw_mode == SW_MODE_AP || sw_mode == SW_MODE_REPEATER) wanscap_lan = 0; if (wanscap_lan && (wans_lanport < 0 || wans_lanport > 4)) { _dprintf("%s: invalid wans_lanport %d!\n", __func__, wans_lanport); wanscap_lan = 0; wanscap_wanlan &= ~WANSCAP_LAN; } build_wan_lan_mask(type); _dprintf("%s: LAN/WAN/WANS_LAN portmask %08x/%08x/%08x\n", __func__, lan_mask, wan_mask, wans_lan_mask); reset_qca_switch(); // LAN #if defined(PLN12) qca8337_vlan_set(1, 1, 0, (lan_mask | CPU_PORT_LAN_MASK), lan_mask); #elif (defined(PLAC56) || defined(PLAC66U)) qca8337_vlan_set(1, 1, 0, (lan_mask | CPU_PORT_LAN_MASK | (1U << RGMII_PORT)), lan_mask | (1U << RGMII_PORT)); #else /* RT-AC55U || 4G-AC55U */ qca8337_vlan_set(1, 1, 0, (lan_mask | CPU_PORT_LAN_MASK), (lan_mask | CPU_PORT_LAN_MASK)); #endif // WAN & DUALWAN if (sw_mode == SW_MODE_ROUTER) { switch (wanscap_wanlan) { case WANSCAP_WAN | WANSCAP_LAN: qca8337_vlan_set(2, 2, 0, (wan_mask | CPU_PORT_WAN_MASK), wan_mask); qca8337_vlan_set(3, 3, 0, (wans_lan_mask | CPU_PORT_WAN_MASK), wans_lan_mask); eval("swconfig", "dev", MII_IFNAME, "set", "enable_vlan", "1"); // enable vlan break; case WANSCAP_LAN: qca8337_vlan_set(2, 2, 0, (wans_lan_mask | CPU_PORT_WAN_MASK), (wans_lan_mask | CPU_PORT_WAN_MASK)); break; case WANSCAP_WAN: #if (defined(PLN12) || defined(PLAC56) || defined(PLAC66U)) qca8337_vlan_set(2, 2, 0, (wan_mask | CPU_PORT_WAN_MASK), wan_mask); eval("swconfig", "dev", MII_IFNAME, "set", "enable_vlan", "1"); // enable vlan #else /* RT-AC55U || 4G-AC55U */ qca8337_vlan_set(2, 2, 0, (wan_mask | CPU_PORT_WAN_MASK), (wan_mask | CPU_PORT_WAN_MASK)); #endif break; default: _dprintf("%s: Unknown WANSCAP %x\n", __func__, wanscap_wanlan); } } #if (defined(PLN12) || defined(PLAC56) || defined(PLAC66U)) else eval("swconfig", "dev", MII_IFNAME, "set", "enable_vlan", "1"); // enable vlan #endif eval("swconfig", "dev", MII_IFNAME, "set", "apply"); // apply changes }
static void openvpn_create_server_acl(FILE *fp, const char *ccd) { int i, i_max; char *acl_user, *acl_rnet, *acl_rmsk; char acl_user_var[16], acl_rnet_var[16], acl_rmsk_var[16], vpns_ccd[64]; snprintf(vpns_ccd, sizeof(vpns_ccd), "%s/%s", SERVER_ROOT_DIR, ccd); mkdir(vpns_ccd, 0755); i_max = nvram_get_int("vpns_num_x"); if (i_max > MAX_CLIENTS_NUM) i_max = MAX_CLIENTS_NUM; for (i = 0; i < i_max; i++) { sprintf(acl_user_var, "vpns_user_x%d", i); sprintf(acl_rnet_var, "vpns_rnet_x%d", i); sprintf(acl_rmsk_var, "vpns_rmsk_x%d", i); acl_user = nvram_safe_get(acl_user_var); acl_rnet = nvram_safe_get(acl_rnet_var); acl_rmsk = nvram_safe_get(acl_rmsk_var); if (*acl_user && inet_addr_(acl_rnet) != INADDR_ANY && inet_addr_(acl_rmsk) != INADDR_ANY) { FILE *fp_ccf; char ccf[80]; snprintf(ccf, sizeof(ccf), "%s/%s", vpns_ccd, acl_user); fp_ccf = fopen(ccf, "w+"); if (fp_ccf) { int i_cli2; char acl_addr_var[16]; struct in_addr pool_in; unsigned int vaddr, vmask; vaddr = ntohl(inet_addr(nvram_safe_get("vpns_vnet"))); vmask = ntohl(inet_addr(VPN_SERVER_SUBNET_MASK)); vaddr = (vaddr & vmask) | 1; sprintf(acl_addr_var, "vpns_addr_x%d", i); i_cli2 = nvram_get_int(acl_addr_var); if (i_cli2 > 1 && i_cli2 < 255 ) { pool_in.s_addr = htonl((vaddr & vmask) | (unsigned int)i_cli2); fprintf(fp_ccf, "ifconfig-push %s %s\n", inet_ntoa(pool_in), VPN_SERVER_SUBNET_MASK); fprintf(fp, "route %s %s %s\n", acl_rnet, acl_rmsk, inet_ntoa(pool_in)); } fprintf(fp_ccf, "iroute %s %s\n", acl_rnet, acl_rmsk); fclose(fp_ccf); chmod(ccf, 0644); } } } }
/* * retreive and convert dsls values for specified dsl_unit * Example: * <% dsl_get_parameter(); %> for coping wan[n]_ to wan_ */ int ej_dsl_get_parameter(int eid, webs_t wp, int argc, char_t **argv) { int unit, subunit; unit = nvram_get_int("dsl_unit"); subunit = nvram_get_int("dsl_subunit"); // handle generate cases first (void)copy_index_to_unindex("dsl_", unit, subunit); return (websWrite(wp,"")); }
/** * Get LAN port mask * @return: port bitmask */ static unsigned int get_lan_port_mask(void) { int sw_mode = nvram_get_int("sw_mode"); unsigned int m = nvram_get_int("lanports_mask"); if (sw_mode == SW_MODE_AP) #if defined(PLN12) m = ((1U << LAN1_PORT) | (1U << LAN4_PORT)); #else m = WANLANPORTS_MASK; #endif return m; }
static void openvpn_create_server_acl(FILE *fp, const char *ccd, unsigned int vnet, unsigned int vmsk) { int i, i_max; char *acl_user, *acl_rnet, *acl_rmsk; char acl_user_var[16], acl_rnet_var[16], acl_rmsk_var[16], vpns_ccd[64]; snprintf(vpns_ccd, sizeof(vpns_ccd), "%s/%s", SERVER_ROOT_DIR, ccd); mkdir(vpns_ccd, 0755); i_max = nvram_get_int("vpns_num_x"); if (i_max > MAX_CLIENTS_NUM) i_max = MAX_CLIENTS_NUM; for (i = 0; i < i_max; i++) { snprintf(acl_user_var, sizeof(acl_user_var), "vpns_user_x%d", i); snprintf(acl_rnet_var, sizeof(acl_rnet_var), "vpns_rnet_x%d", i); snprintf(acl_rmsk_var, sizeof(acl_rmsk_var), "vpns_rmsk_x%d", i); acl_user = nvram_safe_get(acl_user_var); acl_rnet = nvram_safe_get(acl_rnet_var); acl_rmsk = nvram_safe_get(acl_rmsk_var); if (*acl_user && is_valid_ipv4(acl_rnet) && is_valid_ipv4(acl_rmsk)) { FILE *fp_ccf; char ccf[80]; snprintf(ccf, sizeof(ccf), "%s/%s", vpns_ccd, acl_user); fp_ccf = fopen(ccf, "w+"); if (fp_ccf) { char acl_addr_var[16]; struct in_addr pool_in; unsigned int vp_a; snprintf(acl_addr_var, sizeof(acl_addr_var), "vpns_addr_x%d", i); vp_a = (unsigned int)nvram_get_int(acl_addr_var); if (vp_a > 1 && vp_a < 255 ) { pool_in.s_addr = htonl((vnet & vmsk) | vp_a); fprintf(fp_ccf, "ifconfig-push %s %s\n", inet_ntoa(pool_in), VPN_SERVER_SUBNET_MASK); fprintf(fp, "route %s %s %s\n", acl_rnet, acl_rmsk, inet_ntoa(pool_in)); } fprintf(fp_ccf, "iroute %s %s\n", acl_rnet, acl_rmsk); fclose(fp_ccf); chmod(ccf, 0644); } } } }
/** * @stb_bitmask: bitmask of STB port(s) * e.g. bit0 = P0, bit1 = P1, etc. */ static void initialize_Vlan(int stb_bitmask) { int wans_lan_vid = 3, wanscap_wanlan = get_wans_dualwan() & (WANSCAP_WAN | WANSCAP_LAN); int wanscap_lan = get_wans_dualwan() & WANSCAP_LAN; int wans_lanport = nvram_get_int("wans_lanport"); int sw_mode = nvram_get_int("sw_mode"); if (sw_mode == SW_MODE_AP || sw_mode == SW_MODE_REPEATER) wanscap_lan = 0; if (wanscap_lan && (wans_lanport < 0 || wans_lanport > 4)) { _dprintf("%s: invalid wans_lanport %d!\n", __func__, wans_lanport); wanscap_lan = 0; wanscap_wanlan &= ~WANSCAP_LAN; } build_wan_lan_mask(0); stb_bitmask = convert_n56u_to_qca_bitmask(stb_bitmask); lan_mask &= ~stb_bitmask; wan_mask |= stb_bitmask; _dprintf("%s: LAN/WAN/WANS_LAN portmask %08x/%08x/%08x\n", __func__, lan_mask, wan_mask, wans_lan_mask); if(wans_lan_mask & stb_bitmask) // avoid using a port for two functions. { wanscap_lan = 0; wanscap_wanlan &= ~WANSCAP_LAN; } if (wanscap_lan && (!(get_wans_dualwan() & WANSCAP_WAN)) && !(!nvram_match("switch_wantag", "none") && !nvram_match("switch_wantag", ""))) { wans_lan_vid = 2; } reset_qca_switch(); // LAN #if (defined(PLAC56) || defined(PLAC66U)) qca8337_vlan_set(1, 1, 0, (lan_mask | CPU_PORT_LAN_MASK | (1U << RGMII_PORT)), (lan_mask | CPU_PORT_LAN_MASK | (1U << RGMII_PORT))); #else qca8337_vlan_set(1, 1, 0, (lan_mask | CPU_PORT_LAN_MASK), (lan_mask | CPU_PORT_LAN_MASK)); #endif // DUALWAN if (wanscap_lan) { qca8337_vlan_set(wans_lan_vid, wans_lan_vid, 0, (wans_lan_mask | CPU_PORT_WAN_MASK), wans_lan_mask); if(wans_lan_vid == 3) eval("swconfig", "dev", MII_IFNAME, "set", "enable_vlan", "1"); // enable vlan } eval("swconfig", "dev", MII_IFNAME, "set", "apply"); }
void start_sshd(void) { int dirty = 0; FILE *fp; mkdir("/etc/dropbear", 0700); mkdir("/root/.ssh", 0700); f_write_string("/root/.ssh/authorized_keys", nvram_safe_get("sshd_authkeys"), 0, 0700); dirty |= check_host_key("rsa", "sshd_hostkey", "/etc/dropbear/dropbear_rsa_host_key"); dirty |= check_host_key("dss", "sshd_dsskey", "/etc/dropbear/dropbear_dss_host_key"); if (dirty) nvram_commit_x(); /* xstart("dropbear", "-a", "-p", nvram_safe_get("sshd_port"), nvram_get_int("sshd_pass") ? "" : "-s"); */ char *argv[9]; int argc; char *p; argv[0] = "dropbear"; argv[1] = "-p"; argv[2] = nvram_safe_get("sshd_port"); argc = 3; if (!nvram_get_int("sshd_pass")) argv[argc++] = "-s"; if (nvram_get_int("sshd_forwarding")) argv[argc++] = "-a"; if (((p = nvram_get("sshd_rwb")) != NULL) && (*p)) { argv[argc++] = "-W"; argv[argc++] = p; } argv[argc] = NULL; _eval(argv, NULL, 0, NULL); if (get_productid()) { if ((fp=fopen("/proc/sys/kernel/hostname", "w+"))) { fputs(get_productid(), fp); fclose(fp); } } }
int ipup_vpns_main(int argc, char **argv) { FILE *fp; int i_cast, i_vuse; char *peer_name; char *script_name = VPN_SERVER_UPDOWN_SCRIPT; if (argc < 7) return -1; peer_name = safe_getenv("PEERNAME"); logmessage(VPNS_LOG_NAME, "peer %s (%s) connected - ifname: %s, local IP: %s", argv[6], peer_name, argv[1], argv[5]); umask(0000); /* add firewall permission for this client */ vpns_firewall_permission(argv[1], 1); i_vuse = nvram_get_int("vpns_vuse"); if (i_vuse) { /* disable multicast flag */ doSystem("ifconfig %s %s", argv[1], "-multicast"); } /* add route to client's LAN */ vpns_route_to_remote_lan(peer_name, argv[1], NULL, 1); fp = fopen(VPN_SERVER_LEASE_FILE, "a+"); if (fp) { fprintf(fp, "%s %s %s %s\n", argv[1], argv[5], argv[6], peer_name); fclose(fp); } if (i_vuse == 0 && !pids("bcrelay")) { i_cast = nvram_get_int("vpns_cast"); if (i_cast == 1 || i_cast == 3) eval("/usr/sbin/bcrelay", "-d", "-i", IFNAME_BR, "-o", "ppp[1-5][0-9]", "-n"); if (i_cast == 2 || i_cast == 3) eval("/usr/sbin/bcrelay", "-d", "-i", "ppp[1-5][0-9]", "-o", IFNAME_BR, "-n"); } if (check_if_file_exist(script_name)) doSystem("%s %s %s %s %s %s", script_name, "up", argv[1], argv[5], argv[6], peer_name); return 0; }
/** * Get WAN port mask * @wan_unit: wan_unit, if negative, select WANS_DUALWAN_IF_WAN * @return: port bitmask */ static unsigned int get_wan_port_mask(int wan_unit) { int sw_mode = nvram_get_int("sw_mode"); char nv[] = "wanXXXports_maskXXXXXX"; if (sw_mode == SW_MODE_AP || sw_mode == SW_MODE_REPEATER) return 0; if (wan_unit <= 0 || wan_unit >= WAN_UNIT_MAX) strcpy(nv, "wanports_mask"); else sprintf(nv, "wan%dports_mask", wan_unit); return nvram_get_int(nv); }
int start_dhcp6c(char *wan_ifname) { FILE *fp; int wan6_dhcp, dns6_auto, lan6_auto, sla_id, sla_len; unsigned int ia_id; unsigned char ea[ETHER_ADDR_LEN]; const char *conf_file = "/etc/dhcp6c.conf"; const char *duid_file = "/tmp/dhcp6c_duid"; wan6_dhcp = nvram_get_int("ip6_wan_dhcp"); dns6_auto = nvram_get_int("ip6_dns_auto"); lan6_auto = nvram_get_int("ip6_lan_auto"); if (!wan6_dhcp && !dns6_auto && !lan6_auto) return 1; ia_id = 0; sla_id = 1; sla_len = 0; /* auto prefix always /64 */ if (ether_atoe(nvram_safe_get("wan_hwaddr"), ea)) { uint16_t duid_len; struct { uint16_t type; uint16_t hwtype; } __attribute__ ((__packed__)) duid3; /* generate IAID from the last 20 bits of WAN MAC */ ia_id = ((unsigned int)(ea[3] & 0x0f) << 16) | ((unsigned int)(ea[4]) << 8) | ((unsigned int)(ea[5])); /* create DUID from WAN MAC */ duid_len = sizeof(duid3) + ETHER_ADDR_LEN; duid3.type = htons(3); /* DUID-LL */ duid3.hwtype = htons(1); /* Ethernet */ unlink(duid_file); if ((fp = fopen(duid_file, "w"))) { size_t duid_done = 0; duid_done += fwrite(&duid_len, sizeof(duid_len), 1, fp); duid_done += fwrite(&duid3, sizeof(duid3), 1, fp); duid_done += fwrite(&ea, ETHER_ADDR_LEN, 1, fp); fclose(fp); if (duid_done != 3) unlink(duid_file); } }
void new_arpbind_stop(void) { FILE *f; char *s = "/tmp/new_arpbind_stop.sh"; char *argv[3]; int pid; if (nvram_get_int("new_arpbind_enable")) return; if ((f = fopen(s, "w")) == NULL) return; fprintf(f, "#!/bin/sh\n" "for HOST in `awk '{if($1!=\"IP\")print $1}' /proc/net/arp`; do arp -d $HOST; done\n" ); fclose(f); chmod(s, 0700); chdir("/tmp"); argv[0] = s; argv[1] = NULL; argv[2] = NULL; if (_eval(argv, NULL, 0, &pid) != 0) { pid = -1; } else { kill(pid, 0); } chdir("/"); }
int get_lan_dhcp6s_mode(void) { if (get_ipv6_type() == IPV6_DISABLED) return -1; return nvram_get_int("ip6_lan_dhcp"); }
void reset_wan6_vars(void) { struct in6_addr addr6; char addr6s[INET6_ADDRSTRLEN] = {0}; char *wan_addr6, *wan_gate6; int wan_size6; wan_gate6 = ""; if (is_wan_addr6_static() == 1) { wan_addr6 = nvram_safe_get("ip6_wan_addr"); wan_size6 = nvram_get_int("ip6_wan_size"); wan_gate6 = nvram_safe_get("ip6_wan_gate"); if (*wan_addr6) { memset(&addr6, 0, sizeof(addr6)); ipv6_from_string(wan_addr6, &addr6); inet_ntop(AF_INET6, &addr6, addr6s, INET6_ADDRSTRLEN); if (wan_size6 > 0 && wan_size6 < 128) sprintf(addr6s, "%s/%d", addr6s, wan_size6); } } nvram_set("wan0_addr6", addr6s); nvram_set("wan0_gate6", wan_gate6); nvram_set("wan0_6rd_relay", nvram_safe_get("ip6_6rd_relay")); nvram_set("wan0_6rd_size", nvram_safe_get("ip6_6rd_size")); build_dns6_var(); }
int is_wan_ipv6_if_ppp(void) { if (nvram_get_int("ip6_wan_if") == 0) return 1; return 0; }
void safe_remove_usb_modem(void) { doSystem("killall %s %s", "-q", "usb_modeswitch"); doSystem("killall %s %s", "-q", "eject"); if (nvram_get_int("modem_type") == 3) { char* svcs[] = { "udhcpc", NULL }; if (pids(svcs[0])) { doSystem("killall %s %s", "-SIGUSR2", svcs[0]); usleep(300000); kill_services(svcs, 3, 1); } stop_wan_usbnet(); // unlink_modem_ndis(); } else { char* svcs_ppp[] = { "pppd", NULL }; kill_services(svcs_ppp, 10, 1); // unlink_modem_ras(); } set_usb_modem_dev_wan(0, 0); }