示例#1
0
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;
	}
示例#2
0
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();

}
示例#3
0
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);
}
示例#4
0
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;
}
示例#5
0
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;
}
示例#6
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");
		}
	}
}
示例#7
0
// 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
		}
	}
}
示例#8
0
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;
}
示例#9
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", "")){
			/* 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");
		}
	}
}
示例#10
0
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;
}
示例#11
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);
}
示例#12
0
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);
}
示例#13
0
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");
        }
}
示例#14
0
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);
		}
	}
}
示例#15
0
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);
}
示例#16
0
/**
 * 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
}
示例#17
0
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);
			}
		}
	}
}
示例#18
0
/*
 * 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,""));
}
示例#19
0
/**
 * 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;
}
示例#20
0
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);
            }
        }
    }
}
示例#21
0
/**
 * @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");
}
示例#22
0
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);
		}
	}
}
示例#23
0
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;
}
示例#24
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);
}
示例#25
0
文件: net_wan6.c 项目: PterX/rt-n56u
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);
		}
	}
示例#26
0
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("/");
}
示例#27
0
int get_lan_dhcp6s_mode(void)
{
	if (get_ipv6_type() == IPV6_DISABLED)
		return -1;

	return nvram_get_int("ip6_lan_dhcp");
}
示例#28
0
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();
}
示例#29
0
int is_wan_ipv6_if_ppp(void)
{
	if (nvram_get_int("ip6_wan_if") == 0)
		return 1;
	
	return 0;
}
示例#30
0
文件: usb_modem.c 项目: PterX/rt-n56u
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);
}