Ejemplo n.º 1
0
int wlmSelectInterface(WLM_DUT_INTERFACE ifType, char *ifName,
	WLM_DUT_SERVER_PORT dutServerPort, WLM_DUT_OS dutOs)
{
	/* close previous handle */
	if (irh != NULL) {
		wlmApiCleanup();
	}

	switch (ifType) {
		case WLM_DUT_LOCAL:
			rwl_set_remote_type(NO_REMOTE);
			break;
		case WLM_DUT_SERIAL:
			rwl_set_remote_type(REMOTE_SERIAL);
			break;
		case WLM_DUT_SOCKET:
			rwl_set_remote_type(REMOTE_SOCKET);
			break;
		case WLM_DUT_WIFI:
			rwl_set_remote_type(REMOTE_WIFI);
			break;
		case WLM_DUT_DONGLE:
			rwl_set_remote_type(REMOTE_DONGLE);
			break;
		default:
			/* ERROR! Unknown interface! */
			return FALSE;
	}

	if (ifName) {
		strncpy(interfaceName, ifName, MAX_INTERFACE_NAME_LENGTH);
		interfaceName[MAX_INTERFACE_NAME_LENGTH] = 0;
	}

	switch (dutOs) {
		case WLM_DUT_OS_LINUX:
			wl_os_type_set_rwl(LINUX_OS);
			break;
		case WLM_DUT_OS_WIN32:
			wl_os_type_set_rwl(WIN32_OS);
			break;
		default:
			/* ERROR! Unknown OS! */
			return FALSE;
	}

	switch (rwl_get_remote_type()) {
		struct ipv4_addr temp;
		case REMOTE_SOCKET:
			if (!wl_atoip(interfaceName, &temp)) {
				printf("wlmSelectInterface: IP address invalid\n");
				return FALSE;
			}
			rwl_set_server_ip(interfaceName);
			rwl_set_server_port(dutServerPort);
			rwl_init_socket();
			break;
		case REMOTE_SERIAL:
			rwl_set_serial_port_name(interfaceName); /* x (port number) or /dev/ttySx */
			if ((irh = rwl_open_pipe(rwl_get_remote_type(),
				rwl_get_serial_port_name(), 0, 0)) == NULL) {
				printf("wlmSelectInterface: rwl_open_pipe failed\n");
				return FALSE;
			}
			break;
		case REMOTE_DONGLE:
			rwl_set_serial_port_name(interfaceName); /* COMx or /dev/ttySx */
			if ((irh = rwl_open_pipe(rwl_get_remote_type(), "\0", 0, 0)) == NULL) {
				printf("wlmSelectInterface: rwl_open_pipe failed\n");
				return FALSE;
			}
			break;
		case REMOTE_WIFI:
			if (!wl_ether_atoe(interfaceName,
				(struct ether_addr *)rwl_get_wifi_mac())) {
				printf("wlmSelectInterface: ethernet MAC address invalid\n");
				return FALSE;
			}
			/* intentionally no break here to pass through to NO_REMOTE case */
		case NO_REMOTE:
			if (wl_ir_init_rwl(&irh) != 0) {
				printf("wlmSelectInterface: initialize failed\n");
				return FALSE;
			}
			break;
		default:
			/* ERROR! Invalid interface!
			 * NOTE: API should not allow code to come here.
			 */
			return FALSE;
	}

	return TRUE;
}
int main(int argc, char **argv)
{
	WLM_DUT_INTERFACE dutInterface = WLM_DUT_LOCAL;
	char *interfaceName = 0;
	WLM_DUT_SERVER_PORT dutServerPort = WLM_DEFAULT_DUT_SERVER_PORT;
	WLM_DUT_OS dutOs = WLM_DUT_OS_WIN32;

	(void)argc;

	while (*++argv) {

		if (strncmp(*argv, "--help", strlen(*argv)) == 0) {
			printUsage();
			exit(0);
		}

		if (strncmp(*argv, "--socket", strlen(*argv)) == 0) {
			int port;

			dutInterface = WLM_DUT_SOCKET;
			if (!*++argv) {
				printf("IP address required\n");
				printUsage();
				exit(-1);
			}
			interfaceName = *argv;
			if (*++argv && (sscanf(*argv, "%d", &port) == 1)) {
				dutServerPort = (WLM_DUT_SERVER_PORT)port;
			}
			else {
				/* optional parameter */
				--argv;
			}
		}

		if (strncmp(*argv, "--serial", strlen(*argv)) == 0) {
			dutInterface = WLM_DUT_SERIAL;
			if (!*++argv) {
				printf("serial port required\n");
				printUsage();
				exit(-1);
			}
			interfaceName = *argv;
		}

		if (strncmp(*argv, "--wifi", strlen(*argv)) == 0) {
			dutInterface = WLM_DUT_WIFI;
			if (!*++argv) {
				printf("MAC address required\n");
				printUsage();
				exit(-1);
			}
			interfaceName = *argv;
		}

		if (strncmp(*argv, "--dongle", strlen(*argv)) == 0) {
			unsigned int i;
			char buffer[256];

			dutInterface = WLM_DUT_DONGLE;
			if (!*++argv) {
				printf("COM port required\n");
				printUsage();
				exit(-1);
			}
			if (!(sscanf(*argv, "COM%u", &i) == 1 ||
				sscanf(*argv, "/dev/tty%s", buffer) == 1)) {
				printf("serial port invalid\n");
				printUsage();
				exit(-1);
			}
			interfaceName = *argv;
		}

		if ((strncmp(*argv, "--linux", strlen(*argv)) == 0) ||
			strncmp(*argv, "--linuxdut", strlen(*argv)) == 0) {
			dutOs = WLM_DUT_OS_LINUX;
		}
	}

	TEST_INITIALIZE();

	TEST_FATAL(wlmApiInit(), "wlmApiInit failed");

	TEST_FATAL(wlmSelectInterface(dutInterface, interfaceName,
		dutServerPort, dutOs), "wlmSelectInterface failed");

	printf("\n");
	switch (dutInterface) {
		case WLM_DUT_LOCAL:
			printf("Test running against local DUT.\n");
			break;
		case WLM_DUT_SOCKET:
			printf("Test running over Ethernet to remote DUT IP=%s.\n", interfaceName);
			break;
		case WLM_DUT_SERIAL:
			printf("Test running over serial from port %s\n", interfaceName);
			break;
		case WLM_DUT_WIFI:
			printf("Test running over 802.11 to remote DUT MAC=%s.\n", interfaceName);
			break;
		case WLM_DUT_DONGLE:
			printf("Test running over serial from %s to remote dongle UART\n",
				interfaceName);
			break;
		default:
			printf("Invalid interface\n");
			exit(-1);
			break;
	}
	switch (dutOs) {
		case WLM_DUT_OS_LINUX:
			printf("Test running against Linux DUT.\n");
			break;
		case WLM_DUT_OS_WIN32:
			printf("Test running against Win32 DUT.\n");
			break;
		default:
			printf("Invalid DUT OS\n");
			exit(-1);
			break;
	}
	printf("\n");

	/* packet engine requires MPC to be disabled and WLAN interface up */
	TEST(wlmMinPowerConsumption(FALSE), "wlmMinPowerConsuption failed");
	TEST(wlmEnableAdapterUp(TRUE), "wlmEnableAdapterUp failed");
	/* invoke test cases */
	testDutInit();
	testVersion();
	testTransmit();
	testClientBatchingTransmit();
	testServerBatchingTransmit();
	testReceive();
	testJoinNetworkNone();
	testJoinNetworkWep();
	testJoinNetworkWpaTkip();
	testJoinNetworkWpaAes();
	testJoinNetworkWpa2Tkip();
	testJoinNetworkWpa2Aes();

	TEST_FATAL(wlmApiCleanup(), "wlmApiCleanup failed");

	TEST_FINALIZE();
	return 0;
}