static int import_device(int sockfd, struct usbip_usb_device *udev) { int rc; int port; rc = usbip_vhci_driver_open(); if (rc < 0) { err("open vhci_driver"); return -1; } port = usbip_vhci_get_free_port(); if (port < 0) { err("no free port"); usbip_vhci_driver_close(); return -1; } rc = usbip_vhci_attach_device(port, sockfd, udev->busnum, udev->devnum, udev->speed); if (rc < 0) { err("import device"); usbip_vhci_driver_close(); return -1; } usbip_vhci_driver_close(); return port; }
int detach_port(char *port) { int ret; uint8_t portnum; unsigned int i; for (i=0; i < strlen(port); i++) if (!isdigit(port[i])) { err("invalid port %s", port); return -1; } /* check max port */ portnum = atoi(port); ret = usbip_vhci_driver_open(); if (ret < 0) { err("open vhci_driver"); return -1; } ret = usbip_vhci_detach_device(portnum); if (ret < 0) return -1; usbip_vhci_driver_close(); return ret; }
static void show_port_status(void) { int ret; struct usbip_imported_device *idev; ret = usbip_vhci_driver_open(); if (ret < 0) return; for (int i = 0; i < vhci_driver->nports; i++) { idev = &vhci_driver->idev[i]; usbip_vhci_imported_device_dump(idev); } usbip_vhci_driver_close(); }
static int detach_port(char *port) { int ret; uint8_t portnum; char path[PATH_MAX+1]; unsigned int port_len = strlen(port); for (unsigned int i = 0; i < port_len; i++) if (!isdigit(port[i])) { err("invalid port %s", port); return -1; } /* check max port */ portnum = atoi(port); /* remove the port state file */ snprintf(path, PATH_MAX, VHCI_STATE_PATH"/port%d", portnum); remove(path); rmdir(VHCI_STATE_PATH); ret = usbip_vhci_driver_open(); if (ret < 0) { err("open vhci_driver"); return -1; } ret = usbip_vhci_detach_device(portnum); if (ret < 0) return -1; usbip_vhci_driver_close(); return ret; }
static int import_device(int sockfd, struct usbip_usb_device *udev) { int rc; int port; uint32_t speed = udev->speed; rc = usbip_vhci_driver_open(); if (rc < 0) { err("open vhci_driver"); goto err_out; } do { port = usbip_vhci_get_free_port(speed); if (port < 0) { err("no free port"); goto err_driver_close; } dbg("got free port %d", port); rc = usbip_vhci_attach_device(port, sockfd, udev->busnum, udev->devnum, udev->speed); if (rc < 0 && errno != EBUSY) { err("import device"); goto err_driver_close; } } while (rc < 0); usbip_vhci_driver_close(); return port; err_driver_close: usbip_vhci_driver_close(); err_out: return -1; }
static int list_imported_devices(void) { int i; struct usbip_imported_device *idev; int ret; if (usbip_names_init(USBIDS_FILE)) err("failed to open %s", USBIDS_FILE); ret = usbip_vhci_driver_open(); if (ret < 0) { err("open vhci_driver"); goto err_names_free; } printf("Imported USB devices\n"); printf("====================\n"); for (i = 0; i < vhci_driver->nports; i++) { idev = &vhci_driver->idev[i]; if (usbip_vhci_imported_device_dump(idev) < 0) goto err_driver_close; } usbip_vhci_driver_close(); usbip_names_free(); return ret; err_driver_close: usbip_vhci_driver_close(); err_names_free: usbip_names_free(); return -1; }