int wl_ir_init_rwl(void **irh) { switch (rwl_get_remote_type()) { case NO_REMOTE: case REMOTE_WIFI: { struct ifreq *ifr; ifr = malloc(sizeof(struct ifreq)); if (ifr) { memset(ifr, 0, sizeof(ifr)); wl_find(ifr); } *irh = ifr; } break; default: break; } return 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 wlmApiCleanup(void) { wl_close_rwl(rwl_get_remote_type(), irh); irh = 0; return TRUE; }