Ejemplo n.º 1
0
int showtraffic()
{
	struct iwreq wrq;
	int sfd, ret, i;
	unsigned long long rxtotal = 0;
	unsigned long long txtotal = 0;
	RT_MBSS_STATISTICS_TABLE stable2G;
	RT_MBSS_STATISTICS_TABLE stable5G;
	unsigned int amount = 0;
	FILE *fp = NULL;
	char ifname2G[32] = {0};
	char ifname5G[32] = {0};

	tcapi_get_string("WLan_Common", "wl0_ifname", ifname2G);

	if(ifname2G[0] == '\0' )
	{
		printf("[iwpriv.c]there is no 2G WiFi interface name\n");
		return -1;
	}

	fp = fopen(WIFI_TRAFFIC_PATH, "w");
	if(!fp)
	{
		printf("[iwpriv.c]Cannot write to file:%s\n", WIFI_TRAFFIC_PATH);
		return -2;
	}

	sfd = socket(AF_INET, SOCK_DGRAM,0);
	memset(&stable2G, 0, sizeof(RT_MBSS_STATISTICS_TABLE));
	wrq.u.data.flags = OID_802_11_STATISTICS;
	strcpy(wrq.ifr_name, ifname2G);
	wrq.u.data.length = sizeof(stable2G);
	wrq.u.data.pointer = &stable2G;
	ret = ioctl(sfd, RT_PRIV_IOCTL, &wrq);

	rxtotal = 0;
	txtotal = 0;
	amount = __constant_cpu_to_le32(stable2G.Num);

#ifdef TCSUPPORT_WLAN_RT6856
#else
	if( amount > 4 )
	{
		amount = 4;
	}
#endif

	if (!ret) {
		printf("\t");
		fprintf(fp, "\t");
		for (i = 0; i < amount; i++)
		{
			printf("mssid_%d\t", i);
			fprintf(fp, "mssid_%d\t", i);
		}
		printf("TotalCount\n");
		fprintf(fp, "TotalCount\n");
		
		printf("2GRxCount:");
		fprintf(fp, "2GRxCount:");
		for (i = 0; i < amount; i++)
		{
			printf("%u\t", __constant_le32_to_cpu(stable2G.MbssEntry[i].ReceivedByteCount));
			fprintf(fp, "%u\t", __constant_le32_to_cpu(stable2G.MbssEntry[i].ReceivedByteCount));
			rxtotal += __constant_le32_to_cpu(stable2G.MbssEntry[i].ReceivedByteCount);
		}
		printf("%llu\n", rxtotal);
		fprintf(fp, "%llu\n", rxtotal);

		printf("2GTxCount:");
		fprintf(fp, "2GTxCount:");
		for (i = 0; i < amount; i++)
		{
			printf("%u\t", __constant_le32_to_cpu(stable2G.MbssEntry[i].TransmittedByteCount));
			fprintf(fp, "%u\t", __constant_le32_to_cpu(stable2G.MbssEntry[i].TransmittedByteCount));
			txtotal += __constant_le32_to_cpu(stable2G.MbssEntry[i].TransmittedByteCount);
		}
		printf("%llu\n", txtotal);
		fprintf(fp, "%llu\n", txtotal);
	}

	tcapi_get_string("WLan_Common", "wl1_ifname", ifname5G);
	if(ifname5G[0] == '\0' )
	{
		//printf("[iwpriv.c]has no 5G WiFi interface\n");
		fclose(fp);
		close(sfd);
		return 1;
	}

	memset(&stable5G, 0, sizeof(RT_MBSS_STATISTICS_TABLE));
	strcpy(wrq.ifr_name, ifname5G);
	wrq.u.data.pointer = &stable5G;
	ret = ioctl(sfd, RT_PRIV_IOCTL, &wrq);

	rxtotal = 0;
	txtotal = 0;
	amount = __constant_cpu_to_le32(stable5G.Num);

#ifdef TCSUPPORT_WLAN_RT6856
#else
	if( amount > 4 )
	{
		amount = 4;
	}
#endif

	if (!ret) {
		printf("5GRxCount:");
		fprintf(fp, "5GRxCount:");
		for (i = 0; i < amount; i++)
		{
			printf("%u\t", __constant_le32_to_cpu(stable5G.MbssEntry[i].ReceivedByteCount));
			fprintf(fp, "%u\t", __constant_le32_to_cpu(stable5G.MbssEntry[i].ReceivedByteCount));
			rxtotal += __constant_le32_to_cpu(stable5G.MbssEntry[i].ReceivedByteCount);
		}
		printf("%llu\n", rxtotal);
		fprintf(fp, "%llu\n", rxtotal);

		printf("5GTxCount:");
		fprintf(fp, "5GTxCount:");
		for (i = 0; i < amount; i++)
		{
			printf("%u\t", __constant_le32_to_cpu(stable5G.MbssEntry[i].TransmittedByteCount));
			fprintf(fp, "%u\t", __constant_le32_to_cpu(stable5G.MbssEntry[i].TransmittedByteCount));
			txtotal += __constant_le32_to_cpu(stable5G.MbssEntry[i].TransmittedByteCount);
		}
		printf("%llu\n", txtotal);
		fprintf(fp, "%llu\n", txtotal);
	}

	fclose(fp);
	close(sfd);
	return 0;
}
Ejemplo n.º 2
0
void start_pptpd(void)
{
	int ret = 0, manual_dns = 0, pptpd_opt = 0;
	FILE *fp;
	char buf[MAXLEN_TCAPI_MSG];
	char lan_ipaddr[16] = {0};

	int pid = getpid();
	_dprintf("start_pptpd: getpid= %d\n", pid);

	//if(getpid() != 1) {
		//notify_rc("start_pptpd");
		//return;
	//}

	if (!tcapi_match(VPN_DATA, "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\n");
	//fprintf(fp, "debug dump logfd 2 nodetach\n");
	if (tcapi_match(VPN_DATA, "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 6\n"
		"deflate 0\n" "auth\n" "-chap\n"
		"nomppe-stateful\n");

	pptpd_opt = tcapi_get_int(VPN_DATA, "pptpd_chap");
	fprintf(fp, "%smschap\n", (pptpd_opt == 0 || pptpd_opt & 1) ? "+" : "-");
	fprintf(fp, "%smschap-v2\n", (pptpd_opt == 0 || pptpd_opt & 2) ? "+" : "-");

	pptpd_opt = tcapi_get_int(VPN_DATA, "pptpd_mppe");
	if (pptpd_opt == 0)
		pptpd_opt = 1 | 4 | 8;
	if (pptpd_opt & (1 | 2 | 4)) {
		fprintf(fp, "%s", (pptpd_opt & 8) ? "" : "require-mppe\n");
  		fprintf(fp, "%smppe-128\n", (pptpd_opt & 1) ? "require-" : "no");
  		//fprintf(fp, "%smppe-56\n", (pptpd_opt & 2) ? "require-" : "no");
  		fprintf(fp, "%smppe-40\n", (pptpd_opt & 4) ? "require-" : "no");
	} else
  		fprintf(fp, "nomppe nomppc\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 %d\n" "mru %d\n",
		tcapi_get_int(VPN_DATA, "pptpd_mtu"),
		tcapi_get_int(VPN_DATA, "pptpd_mru"));

	//WINS Server
	//if (!nowins) {
		//fprintf(fp, "ms-wins %s\n", nvram_safe_get("wan_wins"));
	//}
	memset(buf, 0, sizeof(buf));
	tcapi_get(VPN_DATA, "pptpd_wins1", buf);
	if(strlen(buf)) {
		fprintf(fp, "ms-wins %s\n", buf);
	}
	memset(buf, 0, sizeof(buf));
	tcapi_get(VPN_DATA, "pptpd_wins2", buf);
	if(strlen(buf)) {
		fprintf(fp, "ms-wins %s\n", buf);
	}
	//DNS Server
	memset(buf, 0, sizeof(buf));
	tcapi_get(VPN_DATA, "pptpd_dns1", buf);
	if(strlen(buf)) {
		fprintf(fp, "ms-dns %s\n", buf);
		manual_dns=1;
	}
	memset(buf, 0, sizeof(buf));
	tcapi_get(VPN_DATA, "pptpd_dns2", buf);
	if(strlen(buf)) {
		fprintf(fp, "ms-dns %s\n", buf);
		manual_dns=1;
	}
	tcapi_get("Lan_Entry0", "IP", lan_ipaddr);
	if(!manual_dns && strcmp(lan_ipaddr, ""))
		fprintf(fp, "ms-dns %s\n", lan_ipaddr);

	// force ppp interface starting from 20
	fprintf(fp, "minunit 20\n");

	// Following is all crude and need to be revisited once testing confirms
	// that it does work
	// Should be enough for testing..
	if (tcapi_match(VPN_DATA, "pptpd_radius", "1")) {
		char pptpd_radserver[128] = {0};
		char pptpd_radpass[128] = {0};
		char pptpd_radport[128] = {0};
		char pptpd_acctport[128] = {0};

		if (tcapi_get(VPN_DATA, "pptpd_radserver", pptpd_radserver) == TCAPI_PROCESS_OK
			&& tcapi_get(VPN_DATA, "pptpd_radpass", pptpd_radpass) == TCAPI_PROCESS_OK) {

			fclose(fp);

			mkdir("/tmp/pptpd/radius", 0744);

			if (tcapi_get(VPN_DATA, "pptpd_radport", pptpd_radport) != TCAPI_PROCESS_OK)
				strcpy(pptpd_radport, "radius");

			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",
				pptpd_radserver, pptpd_radport);

			if (tcapi_get(VPN_DATA, "pptpd_acctport", pptpd_acctport) != TCAPI_PROCESS_OK)
				strcpy(pptpd_acctport, "radacct");

			fprintf(fp, "acctserver %s:%s\n", pptpd_radserver, pptpd_acctport);
			fclose(fp);

			fp = fopen("/tmp/pptpd/radius/servers", "w");
			fprintf(fp, "%s\t%s\n", pptpd_radserver, 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");
	memset(buf, 0, sizeof(buf));
	fprintf(fp, "bcrelay %s\n", tcapi_get_string(VPN_DATA, "pptpd_broadcast", buf));
	memset(buf, 0, sizeof(buf));
	fprintf(fp, "localip %s\n"
		"remoteip %s\n", lan_ipaddr,
		tcapi_get_string(VPN_DATA, "pptpd_clients", buf));
	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, lan_ipaddr);
	memset(buf, 0, sizeof(buf));
	get_broadcast(bcast, tcapi_get_string("Lan_Entry0", "netmask", buf));

	memset(buf, 0, sizeof(buf));
	tcapi_get(VPN_DATA, "pptpd_ipup_script", buf);
	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-destination %s "	// rule for wake on lan over pptp tunnel
		"%s\n", bcast, buf);
	fclose(fp);
	memset(buf, 0, sizeof(buf));
	tcapi_get(VPN_DATA, "pptpd_ipdown_script", buf);
	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, buf);
	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;
}