aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--writeups/hackintosh/usbredir.md70
2 files changed, 64 insertions, 8 deletions
diff --git a/README.md b/README.md
index 36ec11f..06ad516 100644
--- a/README.md
+++ b/README.md
@@ -43,6 +43,8 @@ I hope you enjoy your stay!
Console
- [powershell-email/README.md](writeups/powershell-email/README.md): send
emails in Powershell
+ - [hackintosh/cloud+libvirt.md](writeups/hackintosh/cloud+libvirt.md):
+ hackintosh on cloud
## Copyright
Unless classified otherwise, all the work I do I go by Apache-2.0. Mate, if I
diff --git a/writeups/hackintosh/usbredir.md b/writeups/hackintosh/usbredir.md
index 7b1c744..0ca19a7 100644
--- a/writeups/hackintosh/usbredir.md
+++ b/writeups/hackintosh/usbredir.md
@@ -1,9 +1,10 @@
-That 10 ms delay is apparently detrimental. It makes sense because USB is meant
-to be work over short distances. The protocol and even the electrical
-characteristics are built upon this assumption. USB frames are short in length
-and polled frequently, and almost no buffering is done in the background as it
-works closely on the hardware. Therefore, performance hit is inevitable and
-instability issues are expected when USB frames are passed over IP.
+That 10+ ms delay is apparently detrimental. It makes sense because USB is
+designed to work over short distances. The protocol and (even) electrical
+characteristics are built upon this assumption. The USB frames are short in
+length and polled frequently, and almost no buffering is done in the background
+as it works closely on the hardware. Therefore, the performance hit is
+inevitable and instability issues are expected when USB frames are passed over
+IP.
The usb-redir devices are attached via qemu command line passthrough.
virt-manager is not "aware" of this and it doesn't even try to see if there usb
@@ -22,5 +23,58 @@ Some usb devices don't like getting passed around over the network.
| Flash Drives | ✅YES | 🫳kinda(slow) |
| HID(keyboard and mouse) | ✅YES | ✅YES |
-### Analysis: Android and IOS Devices
-TODO
+### TODO Analysis: Android and IOS Devices
+This is work in progress.
+
+Points:
+
+- To make XNU kernel happy, the devices must be attached to a hub. The kernel
+ cannot enumerate usb devices directly hot-plugged in the controller
+ - Performance hit due to the fact that qemu only supports emulation of
+ full-speed usb hub
+- Massive round-trip delay over the network in terms of USB(which speaks in
+ nanosecond terms)
+ - As a result, it's possible that Android and IOS devices initiate USB reset
+ rather than patiently sticking up with the delay (possibly)due to the
+ limitation of hardware/firmware(TODO: inspect Logcat and Xcode instruments
+ to verify it)
+- TODO: Instead of using USB redirection, USB devices can be attached to the
+ controller on guest start up
+- There are many components that make the USB redirection over network possible.
+ Quite possibly, the culprit could be one of the components along the chain
+- The issue is present on other proprietary solutions using VHCI as
+ well(FlexiHub, VirtualHere)
+ - meaning that it's likely the "massive round-trip delay" issue
+ - or it's a bug in the encapsulation protocol/implementation that's common in
+ all proprietary/FOSS implementation
+
+"The chain":
+
+```
+ <- NET ->
+CLIENT HOST
+tcp/ip tcp/ip
+ssh ssh
+spice+usbredir libvirt
+libusb spice
+virt-viewer qemu
+ xhci
+ usb-hub
+ usb-redir
+```
+
+"The components"
+
+- virt
+ - ssh tunneling
+ - USB/IP
+ - SPICE
+ - libusb
+ - usbredir
+ - usb/ip
+- QEMU
+ - xhci
+ - usb-hub
+ - usb-redir
+- Apple
+ - Apple VHCI