tools/usb/usbip/src/usbip_detach.c
Source file repositories/reference/linux-study-clean/tools/usb/usbip/src/usbip_detach.c
File Facts
- System
- Linux kernel
- Corpus path
tools/usb/usbip/src/usbip_detach.c- Extension
.c- Size
- 2354 bytes
- Lines
- 126
- Domain
- Support Tooling And Documentation
- Bucket
- tools
- Inferred role
- Support Tooling And Documentation: implementation source
- Status
- source implementation candidate
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
ctype.hlimits.hstdint.hstdio.hstdlib.hstring.hgetopt.hunistd.hvhci_driver.husbip_common.husbip_network.husbip.h
Detected Declarations
function usbip_detach_usagefunction detach_portfunction usbip_detach
Annotated Snippet
if (!isdigit(port[i])) {
err("invalid port %s", port);
return -1;
}
portnum = atoi(port);
ret = usbip_vhci_driver_open();
if (ret < 0) {
err("open vhci_driver (is vhci_hcd loaded?)");
return -1;
}
/* check for invalid port */
for (i = 0; i < vhci_driver->nports; i++) {
idev = &vhci_driver->idev[i];
if (idev->port == portnum) {
found = 1;
if (idev->status != VDEV_ST_NULL)
break;
info("Port %d is already detached!\n", idev->port);
goto call_driver_close;
}
}
if (!found) {
ret = -1;
err("Invalid port %s > maxports %d",
port, vhci_driver->nports);
goto call_driver_close;
}
/* remove the port state file */
snprintf(path, PATH_MAX, VHCI_STATE_PATH"/port%d", portnum);
remove(path);
rmdir(VHCI_STATE_PATH);
ret = usbip_vhci_detach_device(portnum);
if (ret < 0) {
ret = -1;
err("Port %d detach request failed!\n", portnum);
goto call_driver_close;
}
info("Port %d is now detached!\n", portnum);
call_driver_close:
usbip_vhci_driver_close();
return ret;
}
int usbip_detach(int argc, char *argv[])
{
static const struct option opts[] = {
{ "port", required_argument, NULL, 'p' },
{ NULL, 0, NULL, 0 }
};
int opt;
int ret = -1;
for (;;) {
opt = getopt_long(argc, argv, "p:", opts, NULL);
if (opt == -1)
break;
switch (opt) {
case 'p':
ret = detach_port(optarg);
goto out;
default:
goto err_out;
}
}
err_out:
usbip_detach_usage();
out:
return ret;
}
Annotation
- Immediate include surface: `ctype.h`, `limits.h`, `stdint.h`, `stdio.h`, `stdlib.h`, `string.h`, `getopt.h`, `unistd.h`.
- Detected declarations: `function usbip_detach_usage`, `function detach_port`, `function usbip_detach`.
- Atlas domain: Support Tooling And Documentation / tools.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.