[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] USB virtualization question

> Is it possible to differentiate multiple USB ports and assign one port to
> be used only by a specified virtual machine when doing usb virtualization?
> As USB devices are enumerated, I don't see a way to do that.

Domain 0 retains control of the USB host controller.
1. When you plug in a USB device, dom0 will do generic USB configuration 
operations like assigning it an address.
2. Then it'll probe its device drivers to see if any of them are interested - 
at this port, the USB backend driver will recognise that the device is 
plugged into a port it's interested in.
3. The USB backend driver informs the frontend that there's a device on the 
4. The frontend domain does the generic config tasks like assigning an 
address.  The backend "fakes out" the SET_ADDRESS operation, otherwise dom0 
won't know what address the device has ;-)

For data path operations, USB requests are queued into the device channel by 
the frontend.  The backend is responsible for checking that the requests are 
safe (i.e. address only the correct domain's memory) and then proxying them 
to the device itself.

The advantages of this design are:
1. flexible - give any attached device to a domain, from any individual port
2. safe - don't have to trust a domain not to access forbidden memory 
(although you do trust the device itself isn't malicious or exploitable)
3. dom0 doesn't have to have a driver for the device itself, as long as the 
target domain can drive it.


> Any insignts on this issue?
> Thanks in advance!
> -x
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.