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; }