コード例 #1
0
static int
lua_get_acllist(lua_State *L, void *wl, lua_cmd_t *cmd, char *argv)
{
	struct maclist *maclist = (struct maclist *) buf;
	uint i, max = (WLC_IOCTL_MAXLEN - sizeof(int)) / ETHER_ADDR_LEN;
	struct ether_addr *ea;
	int ret;

	maclist->count = htod32(max);
	if ((ret = wlu_get(wl, WLC_GET_MACLIST, maclist, WLC_IOCTL_MAXLEN)) < 0)
	{
		return ret;
	}
	maclist->count = dtoh32(maclist->count);
	lua_newtable(L);
	for (i = 0, ea = maclist->ea; i < maclist->count && i < max; i++, ea++)
	{
		lua_newtable(L);

		lua_pushstring(L, wl_ether_etoa(ea));
		lua_setfield(L, -2, "macaddr");

		lua_rawseti(L, -2, i+1);
	}

	return ret;
}
コード例 #2
0
ファイル: wlm.c プロジェクト: NemProjects/WLAN
int wlmMacAddrGet(char *macAddr, int length)
{
	struct ether_addr ea;

	if (length != ETHER_ADDR_LEN) {
		printf("wlmMacAddrGet: MAC Address requires %d bytes", ETHER_ADDR_LEN);
		return FALSE;
	}

	/* query for 'cur_etheraddr' to get MAC address */
	if (wlu_iovar_get(irh, "cur_etheraddr", &ea, ETHER_ADDR_LEN)) {
		printf("wlmMacAddrGet: %s\n", wlmLastError());
		return FALSE;
	}

	strncpy(macAddr, wl_ether_etoa(&ea), length);

	return TRUE;
}
コード例 #3
0
ファイル: wlm.c プロジェクト: NemProjects/WLAN
int wlmBssidGet(char *bssid, int length)
{
	struct ether_addr ea;

	if (length != ETHER_ADDR_LEN) {
		printf("wlmBssiGet: bssid requires %d bytes", ETHER_ADDR_LEN);
		return FALSE;
	}

	if (wlu_get(irh, WLC_GET_BSSID, &ea, ETHER_ADDR_LEN) == 0) {
		/* associated - format and return bssid */
		strncpy(bssid, wl_ether_etoa(&ea), length);
	}
	else {
		/* not associated - return empty string */
		memset(bssid, 0, length);
	}

	return TRUE;
}
コード例 #4
0
ファイル: qtn_monitor.c プロジェクト: themiron/asuswrt-merlin
int 
qtn_monitor_main(int argc, char *argv[])
{
	FILE *fp;
	sigset_t sigs_to_catch;
	int ret, retval = 0;
	time_t start_time = uptime();

	/* write pid */
	if ((fp = fopen("/var/run/qtn_monitor.pid", "w")) != NULL)
	{
		fprintf(fp, "%d", getpid());
		fclose(fp);
	}

	/* set the signal handler */
	sigemptyset(&sigs_to_catch);
	sigaddset(&sigs_to_catch, SIGTERM);
	sigprocmask(SIG_UNBLOCK, &sigs_to_catch, NULL);

	signal(SIGTERM, qtn_monitor_exit);

QTN_RESET:
	ret = rpc_qcsapi_init(1);
	if (ret < 0) {
		dbG("rpc_qcsapi_init error, return: %d\n", ret);
		retval = -1;
		goto ERROR;
	}
#if 0	/* replaced by STATELESS, send configuration from brcm to qtn */
	else if (nvram_get_int("qtn_restore_defaults"))
	{
		nvram_unset("qtn_restore_defaults");
		rpc_qcsapi_restore_default_config(0);
		dbG("Restaring Qcsapi init...\n");
		sleep(15);
		goto QTN_RESET;
	}
#endif

#if 0
	if(nvram_get_int("sw_mode") == SW_MODE_AP &&
		nvram_get_int("wlc_psta") == 1 &&
		nvram_get_int("wlc_band") == 1){
		dbG("[sw_mode] start QTN PSTA mode\n");
		start_psta_qtn();
	}
#endif

	ret = qcsapi_init();
	if (ret < 0)
	{
		dbG("Qcsapi qcsapi_init error, return: %d\n", ret);
		retval = -1;
		goto ERROR;
	}
	else
		dbG("Qcsapi qcsapi init takes %ld seconds\n", uptime() - start_time);

	dbG("defer lanport_ctrl(1)\n");
	lanport_ctrl(1);
	eval("ifconfig", "br0:1", "down");
#if defined(RTCONFIG_JFFS2ND_BACKUP)
	check_2nd_jffs();
#endif
	nvram_set("qtn_ready", "1");

	if(nvram_get_int("AllLED") == 0) setAllLedOff();

	// dbG("[QTN] update router_command.sh from brcm to qtn\n");
	// qcsapi_wifi_run_script("set_test_mode", "update_router_command");

#if 1	/* STATELESS */
	if(nvram_get_int("sw_mode") == SW_MODE_AP &&
		nvram_get_int("wlc_psta") == 1 &&
		nvram_get_int("wlc_band") == 1){
		dbG("[sw_mode] skip start_psta_qtn, QTN will run scripts automatically\n");
		// start_psta_qtn();
	}else{
		dbG("[***] rpc_parse_nvram_from_httpd\n");
		rpc_parse_nvram_from_httpd(1,-1);	/* wifi0 */
		rpc_parse_nvram_from_httpd(1,1);	/* wifi1 */
		rpc_parse_nvram_from_httpd(1,2);	/* wifi2 */
		rpc_parse_nvram_from_httpd(1,3);	/* wifi3 */
		dbG("[sw_mode] skip start_ap_qtn, QTN will run scripts automatically\n");
		// start_ap_qtn();
		qcsapi_mac_addr wl_mac_addr;
		ret = rpc_qcsapi_interface_get_mac_addr(WIFINAME, &wl_mac_addr);
		if (ret < 0)
			dbG("rpc_qcsapi_interface_get_mac_addr, return: %d\n", ret);
		else
		{
			nvram_set("1:macaddr", wl_ether_etoa((struct ether_addr *) &wl_mac_addr));
			nvram_set("wl1_hwaddr", wl_ether_etoa((struct ether_addr *) &wl_mac_addr));
		}

		rpc_update_wdslist();

		if(nvram_get_int("wps_enable") == 1){
			ret = rpc_qcsapi_wifi_disable_wps(WIFINAME, 0);
			if (ret < 0)
				dbG("rpc_qcsapi_wifi_disable_wps %s error, return: %d\n", WIFINAME, ret);

			ret = qcsapi_wps_set_ap_pin(WIFINAME, nvram_safe_get("wps_device_pin"));
			if (ret < 0)
				dbG("qcsapi_wps_set_ap_pin %s error, return: %d\n", WIFINAME, ret);

			ret = qcsapi_wps_registrar_set_pp_devname(WIFINAME, 0, (const char *) get_productid());
			if (ret < 0)
				dbG("qcsapi_wps_registrar_set_pp_devname %s error, return: %d\n", WIFINAME, ret);
		}else{
			ret = rpc_qcsapi_wifi_disable_wps(WIFINAME, 1);
			if (ret < 0)
				dbG("rpc_qcsapi_wifi_disable_wps %s error, return: %d\n", WIFINAME, ret);
		}

		rpc_set_radio(1, 0, nvram_get_int("wl1_radio"));

	}
#endif

	if(nvram_get_int("wl1_80211h") == 1){
		dbG("[80211h] set_80211h_on\n");
		qcsapi_wifi_run_script("router_command.sh", "80211h_on");
	}else{
		dbG("[80211h] set_80211h_off\n");
		qcsapi_wifi_run_script("router_command.sh", "80211h_off");
	}

	if(nvram_get_int("sw_mode") == SW_MODE_ROUTER ||
		(nvram_get_int("sw_mode") == SW_MODE_AP &&
			nvram_get_int("wlc_psta") == 0)){
		if(nvram_get_int("wl1_chanspec") == 0){
			if (nvram_match("1:ccode", "EU")){
				if(nvram_get_int("acs_dfs") != 1){
					dbG("[dfs] start nodfs scanning and selection\n");
					start_nodfs_scan_qtn();
				}
			}else{
				/* all country except EU */
				dbG("[dfs] start nodfs scanning and selection\n");
				start_nodfs_scan_qtn();
			}
		}
	}
	if(nvram_get_int("sw_mode") == SW_MODE_AP &&
		nvram_get_int("wlc_psta") == 1 &&
		nvram_get_int("wlc_band") == 0){
		ret = qcsapi_wifi_reload_in_mode(WIFINAME, qcsapi_station);
		if (ret < 0)
			dbG("qtn reload_in_mode STA fail\n");
	}
	if(nvram_get_int("QTNTELNETSRV") == 1 && nvram_get_int("sw_mode") == SW_MODE_ROUTER){
		dbG("[QTNT] enable telnet server\n");
		qcsapi_wifi_run_script("router_command.sh", "enable_telnet_srv 1");
	}

	dbG("[dbg] qtn_monitor startup\n");
ERROR:
	remove("/var/run/qtn_monitor.pid");

	if (nvram_get_int("led_disable") == 1) {
		setAllLedOff_qtn();
//		qcsapi_wifi_run_script("router_command.sh", "wifi_led_off");
//		qcsapi_led_set(1, 0);
	}

	return retval;
}
コード例 #5
0
ファイル: bcm_p2p_discovery.c プロジェクト: hajuuk/asuswrt
void bcm_p2p_discovery_process_wlan_event(void * context, uint32 eventType,
	wl_event_msg_t *wlEvent, uint8 *data, uint32 length)
{
	bcm_p2p_discovery_t *disc = &gDisc;
	(void)context;
#ifndef BCMDBG_ESCAN
	(void)data;
	(void)length;
#endif

#ifdef BCMDBG
	{
		int i;
		char *event_name = "UNKNOWN";

		for (i = 0; i < bcmevent_names_size; i++)
			if (bcmevent_names[i].event == eventType)
				event_name = (char *)bcmevent_names[i].name;

		WL_P2PO(("WLAN event %s (%d)\n", event_name, eventType));
	}
#endif	/* BCMDBG */

	if (eventType == WLC_E_ESCAN_RESULT) {
		if (wlEvent->status == WLC_E_STATUS_PARTIAL) {
#ifdef BCMDBG_ESCAN
			wl_escan_result_t *escan_data = (wl_escan_result_t *)data;

			if (length >= sizeof(*escan_data)) {
				wl_bss_info_t *bi = &escan_data->bss_info[0];
				bcm_decode_probe_response_t pr;
				struct ether_addr *addr;

				if (!bcm_decode_ie_probe_response(bi, &pr)) {
					return;
				}

				/* default address */
				addr = &bi->BSSID;

				/* P2P not supported */
				if (!pr.isP2P) {
					char ssidbuf[4*32+1];
					wl_format_ssid(ssidbuf, bi->SSID, bi->SSID_len);
					dbg(" AP   %-20.20s   %s   %d\n", ssidbuf,
						wl_ether_etoa(addr), pr.channel);
					return;
				}

				if (pr.isP2PDeviceInfoDecoded) {
					/* use device address */
					addr = &pr.p2pDeviceInfo.deviceAddress;
					dbg("P2P   %-20.20s   %s   %d\n",
						pr.p2pDeviceInfo.deviceName,
						wl_ether_etoa(addr), pr.channel);
				}
			}
#endif /* BCMDBG_ESCAN */
		}
		else if (wlEvent->status == WLC_E_STATUS_SUCCESS) {
			WL_P2PO(("WLC_E_ESCAN_RESULT status=WLC_E_STATUS_SUCCESS\n"));
			fsm(disc, EVENT_SCAN_COMPLETE);
		}
		else {
			WL_P2PO(("WLC_E_ESCAN_RESULT status=%d\n", wlEvent->status));
			/* escan may have failed/restarted but keep state machine running */
			fsm(disc, EVENT_SCAN_COMPLETE);
		}
	}
}
コード例 #6
0
static int
lua_get_stalist(lua_State *L, void *wl, lua_cmd_t *cmd, char *argv)
{
	sta_info_t *sta;
	struct maclist *maclist = (struct maclist *) buf;
	uint i, max = (WLC_IOCTL_MAXLEN - sizeof(int)) / ETHER_ADDR_LEN;
	struct ether_addr *ea;
	int buflen, ret;
	char *param;

	maclist->count = htod32(max);
	if ((ret = wlu_get(wl, WLC_GET_ASSOCLIST, maclist, WLC_IOCTL_MAXLEN)) < 0)
	{
		return ret;
	}
	maclist->count = dtoh32(maclist->count);
	lua_newtable(L);
	for (i = 0, ea = maclist->ea; i < maclist->count && i < max; i++, ea++)
	{
		strcpy(buf, "sta_info");
		buflen = strlen(buf) + 1;
		param = (char *)(buf + buflen);
		memcpy(param, (char*)&ea, ETHER_ADDR_LEN);

		if ((ret = wlu_get(wl, WLC_GET_VAR, buf, WLC_IOCTL_MEDLEN)) < 0)
			return ret;

		/* display the sta info */
		sta = (sta_info_t *)buf;
		sta->flags = dtoh32(sta->flags);

		lua_newtable(L);
		lua_pushstring(L, wl_ether_etoa(ea));
		lua_setfield(L, -2, "macaddr");

		lua_pushstring(L, (sta->flags & WL_STA_N_CAP) ? " 11n" : "11g");
		lua_setfield(L, -2, "mode");

		lua_pushboolean(L, ((sta->flags & WL_STA_PS) != 0));
		lua_setfield(L, -2, "pwr");

		lua_pushnumber(L, sta->RSSI);
		lua_setfield(L, -2, "ccq");

		lua_pushnumber(L, sta->tx_rate);
		lua_setfield(L, -2, "rate");

		lua_pushstring(L, (sta->flags & WL_STA_AUTHO) ? "psk" : "none");
		lua_setfield(L, -2, "auth");

		lua_pushstring(L, (sta->flags & WL_STA_AUTHO) ? "aes" : "none");
		lua_setfield(L, -2, "cipher");

		lua_pushnumber(L, dtoh32(sta->tx_pkts));
		lua_setfield(L, -2, "tx_packets");

		lua_pushnumber(L, dtoh32(sta->rx_ucast_pkts));
		lua_setfield(L, -2, "rx_packets");

		lua_pushnumber(L, sta->idle);
		lua_setfield(L, -2, "inact");

		lua_pushnumber(L, sta->in);
		lua_setfield(L, -2, "assoc_time");

		lua_rawseti(L, -2, i+1);
	}

	return ret;
}
コード例 #7
0
static int
lua_get_scan(lua_State *L, void *wl, lua_cmd_t *cmd, char *argv)
{
	int ret;
	wl_scan_results_t *list = (wl_scan_results_t*)buf;
	wl_bss_info_t *bi;
	char ssid[33];
	uint i;

	ret = wl_get_scan(wl, WLC_SCAN_RESULTS, buf, WL_DUMP_BUF_LEN);

	if (ret == 0)
	{
		lua_newtable(L);
		bi = list->bss_info;
		for (i = 0; i < list->count; i++, bi = (wl_bss_info_t*)((int8*)bi + dtoh32(bi->length)))
		{
			lua_newtable(L);

			lua_pushstring(L, wl_ether_etoa(&bi->BSSID));
			lua_setfield(L, -2, "bssid");

			memset(ssid, 0, sizeof(ssid));
			memcpy(ssid, bi->SSID, bi->SSID_len);
			lua_pushstring(L, ssid);
			lua_setfield(L, -2, "ssid");

			lua_pushnumber(L, (int16)(dtoh16(bi->RSSI)));
			lua_setfield(L, -2, "rssi");

			lua_pushnumber(L, bi->ctl_ch);
			lua_setfield(L, -2, "channel");

			lua_pushstring(L, bi->n_cap ? "11n" : "11g");
			lua_setfield(L, -2, "bgn_mode");

			if (bi->capability & DOT11_CAP_PRIVACY)
			{
				if (dtoh32(bi->ie_length) && 
					wl_if_wpa_rsn_ies((uint8 *)(((uint8 *)bi) + dtoh16(bi->ie_offset)), dtoh32(bi->ie_length)))
				{
					lua_pushstring(L, "psk");
					lua_setfield(L, -2, "auth");
				}
				else
				{
					lua_pushstring(L, "wep");
					lua_setfield(L, -2, "auth");
				}
			}
			else
			{
				lua_pushstring(L, "none");
				lua_setfield(L, -2, "auth");
			}

			lua_pushstring(L, (dtoh32(bi->nbss_cap) & HT_CAP_40MHZ) ? "40MHz" : "20MHz");
			lua_setfield(L, -2, "cwm");

			lua_rawseti(L, -2, i+1);
		}
	}

	return ret;
}