Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.1 358 lines 23 kB view raw
1PRELIMINARY DRAFT, MAY CONTAIN MISTAKES! 228 Jun 2011 3 4The USB/IP protocol follows a server/client architecture. The server exports the 5USB devices and the clients imports them. The device driver for the exported 6USB device runs on the client machine. 7 8The client may ask for the list of the exported USB devices. To get the list the 9client opens a TCP/IP connection towards the server, and sends an OP_REQ_DEVLIST 10packet on top of the TCP/IP connection (so the actual OP_REQ_DEVLIST may be sent 11in one or more pieces at the low level transport layer). The server sends back 12the OP_REP_DEVLIST packet which lists the exported USB devices. Finally the 13TCP/IP connection is closed. 14 15 virtual host controller usb host 16 "client" "server" 17 (imports USB devices) (exports USB devices) 18 | | 19 | OP_REQ_DEVLIST | 20 | ----------------------------------------------> | 21 | | 22 | OP_REP_DEVLIST | 23 | <---------------------------------------------- | 24 | | 25 26Once the client knows the list of exported USB devices it may decide to use one 27of them. First the client opens a TCP/IP connection towards the server and 28sends an OP_REQ_IMPORT packet. The server replies with OP_REP_IMPORT. If the 29import was successful the TCP/IP connection remains open and will be used 30to transfer the URB traffic between the client and the server. The client may 31send two types of packets: the USBIP_CMD_SUBMIT to submit an URB, and 32USBIP_CMD_UNLINK to unlink a previously submitted URB. The answers of the 33server may be USBIP_RET_SUBMIT and USBIP_RET_UNLINK respectively. 34 35 virtual host controller usb host 36 "client" "server" 37 (imports USB devices) (exports USB devices) 38 | | 39 | OP_REQ_IMPORT | 40 | ----------------------------------------------> | 41 | | 42 | OP_REP_IMPORT | 43 | <---------------------------------------------- | 44 | | 45 | | 46 | USBIP_CMD_SUBMIT(seqnum = n) | 47 | ----------------------------------------------> | 48 | | 49 | USBIP_RET_SUBMIT(seqnum = n) | 50 | <---------------------------------------------- | 51 | . | 52 | : | 53 | | 54 | USBIP_CMD_SUBMIT(seqnum = m) | 55 | ----------------------------------------------> | 56 | | 57 | USBIP_CMD_SUBMIT(seqnum = m+1) | 58 | ----------------------------------------------> | 59 | | 60 | USBIP_CMD_SUBMIT(seqnum = m+2) | 61 | ----------------------------------------------> | 62 | | 63 | USBIP_RET_SUBMIT(seqnum = m) | 64 | <---------------------------------------------- | 65 | | 66 | USBIP_CMD_SUBMIT(seqnum = m+3) | 67 | ----------------------------------------------> | 68 | | 69 | USBIP_RET_SUBMIT(seqnum = m+1) | 70 | <---------------------------------------------- | 71 | | 72 | USBIP_CMD_SUBMIT(seqnum = m+4) | 73 | ----------------------------------------------> | 74 | | 75 | USBIP_RET_SUBMIT(seqnum = m+2) | 76 | <---------------------------------------------- | 77 | . | 78 | : | 79 | | 80 | USBIP_CMD_UNLINK | 81 | ----------------------------------------------> | 82 | | 83 | USBIP_RET_UNLINK | 84 | <---------------------------------------------- | 85 | | 86 87The fields are in network (big endian) byte order meaning that the most significant 88byte (MSB) is stored at the lowest address. 89 90 91OP_REQ_DEVLIST: Retrieve the list of exported USB devices. 92 93 Offset | Length | Value | Description 94-----------+--------+------------+--------------------------------------------------- 95 0 | 2 | 0x0100 | Binary-coded decimal USBIP version number: v1.0.0 96-----------+--------+------------+--------------------------------------------------- 97 2 | 2 | 0x8005 | Command code: Retrieve the list of exported USB 98 | | | devices. 99-----------+--------+------------+--------------------------------------------------- 100 4 | 4 | 0x00000000 | Status: unused, shall be set to 0 101 102OP_REP_DEVLIST: Reply with the list of exported USB devices. 103 104 Offset | Length | Value | Description 105-----------+--------+------------+--------------------------------------------------- 106 0 | 2 | 0x0100 | Binary-coded decimal USBIP version number: v1.0.0. 107-----------+--------+------------+--------------------------------------------------- 108 2 | 2 | 0x0005 | Reply code: The list of exported USB devices. 109-----------+--------+------------+--------------------------------------------------- 110 4 | 4 | 0x00000000 | Status: 0 for OK 111-----------+--------+------------+--------------------------------------------------- 112 8 | 4 | n | Number of exported devices: 0 means no exported 113 | | | devices. 114-----------+--------+------------+--------------------------------------------------- 115 0x0C | | | From now on the exported n devices are described, 116 | | | if any. If no devices are exported the message 117 | | | ends with the previous "number of exported 118 | | | devices" field. 119-----------+--------+------------+--------------------------------------------------- 120 | 256 | | path: Path of the device on the host exporting the 121 | | | USB device, string closed with zero byte, e.g. 122 | | | "/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-2" 123 | | | The unused bytes shall be filled with zero 124 | | | bytes. 125-----------+--------+------------+--------------------------------------------------- 126 0x10C | 32 | | busid: Bus ID of the exported device, string 127 | | | closed with zero byte, e.g. "3-2". The unused 128 | | | bytes shall be filled with zero bytes. 129-----------+--------+------------+--------------------------------------------------- 130 0x12C | 4 | | busnum 131-----------+--------+------------+--------------------------------------------------- 132 0x130 | 4 | | devnum 133-----------+--------+------------+--------------------------------------------------- 134 0x134 | 4 | | speed 135-----------+--------+------------+--------------------------------------------------- 136 0x138 | 2 | | idVendor 137-----------+--------+------------+--------------------------------------------------- 138 0x13A | 2 | | idProduct 139-----------+--------+------------+--------------------------------------------------- 140 0x13C | 2 | | bcdDevice 141-----------+--------+------------+--------------------------------------------------- 142 0x13E | 1 | | bDeviceClass 143-----------+--------+------------+--------------------------------------------------- 144 0x13F | 1 | | bDeviceSubClass 145-----------+--------+------------+--------------------------------------------------- 146 0x140 | 1 | | bDeviceProtocol 147-----------+--------+------------+--------------------------------------------------- 148 0x141 | 1 | | bConfigurationValue 149-----------+--------+------------+--------------------------------------------------- 150 0x142 | 1 | | bNumConfigurations 151-----------+--------+------------+--------------------------------------------------- 152 0x143 | 1 | | bNumInterfaces 153-----------+--------+------------+--------------------------------------------------- 154 0x144 | | m_0 | From now on each interface is described, all 155 | | | together bNumInterfaces times, with the 156 | | | the following 4 fields: 157-----------+--------+------------+--------------------------------------------------- 158 | 1 | | bInterfaceClass 159-----------+--------+------------+--------------------------------------------------- 160 0x145 | 1 | | bInterfaceSubClass 161-----------+--------+------------+--------------------------------------------------- 162 0x146 | 1 | | bInterfaceProtocol 163-----------+--------+------------+--------------------------------------------------- 164 0x147 | 1 | | padding byte for alignment, shall be set to zero 165-----------+--------+------------+--------------------------------------------------- 166 0xC + | | | The second exported USB device starts at i=1 167 i*0x138 + | | | with the busid field. 168 m_(i-1)*4 | | | 169 170OP_REQ_IMPORT: Request to import (attach) a remote USB device. 171 172 Offset | Length | Value | Description 173-----------+--------+------------+--------------------------------------------------- 174 0 | 2 | 0x0100 | Binary-coded decimal USBIP version number: v1.0.0 175-----------+--------+------------+--------------------------------------------------- 176 2 | 2 | 0x8003 | Command code: import a remote USB device. 177-----------+--------+------------+--------------------------------------------------- 178 4 | 4 | 0x00000000 | Status: unused, shall be set to 0 179-----------+--------+------------+--------------------------------------------------- 180 8 | 32 | | busid: the busid of the exported device on the 181 | | | remote host. The possible values are taken 182 | | | from the message field OP_REP_DEVLIST.busid. 183 | | | A string closed with zero, the unused bytes 184 | | | shall be filled with zeros. 185-----------+--------+------------+--------------------------------------------------- 186 187OP_REP_IMPORT: Reply to import (attach) a remote USB device. 188 189 Offset | Length | Value | Description 190-----------+--------+------------+--------------------------------------------------- 191 0 | 2 | 0x0100 | Binary-coded decimal USBIP version number: v1.0.0 192-----------+--------+------------+--------------------------------------------------- 193 2 | 2 | 0x0003 | Reply code: Reply to import. 194-----------+--------+------------+--------------------------------------------------- 195 4 | 4 | 0x00000000 | Status: 0 for OK 196 | | | 1 for error 197-----------+--------+------------+--------------------------------------------------- 198 8 | | | From now on comes the details of the imported 199 | | | device, if the previous status field was OK (0), 200 | | | otherwise the reply ends with the status field. 201-----------+--------+------------+--------------------------------------------------- 202 | 256 | | path: Path of the device on the host exporting the 203 | | | USB device, string closed with zero byte, e.g. 204 | | | "/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-2" 205 | | | The unused bytes shall be filled with zero 206 | | | bytes. 207-----------+--------+------------+--------------------------------------------------- 208 0x108 | 32 | | busid: Bus ID of the exported device, string 209 | | | closed with zero byte, e.g. "3-2". The unused 210 | | | bytes shall be filled with zero bytes. 211-----------+--------+------------+--------------------------------------------------- 212 0x128 | 4 | | busnum 213-----------+--------+------------+--------------------------------------------------- 214 0x12C | 4 | | devnum 215-----------+--------+------------+--------------------------------------------------- 216 0x130 | 4 | | speed 217-----------+--------+------------+--------------------------------------------------- 218 0x134 | 2 | | idVendor 219-----------+--------+------------+--------------------------------------------------- 220 0x136 | 2 | | idProduct 221-----------+--------+------------+--------------------------------------------------- 222 0x138 | 2 | | bcdDevice 223-----------+--------+------------+--------------------------------------------------- 224 0x139 | 1 | | bDeviceClass 225-----------+--------+------------+--------------------------------------------------- 226 0x13A | 1 | | bDeviceSubClass 227-----------+--------+------------+--------------------------------------------------- 228 0x13B | 1 | | bDeviceProtocol 229-----------+--------+------------+--------------------------------------------------- 230 0x13C | 1 | | bConfigurationValue 231-----------+--------+------------+--------------------------------------------------- 232 0x13D | 1 | | bNumConfigurations 233-----------+--------+------------+--------------------------------------------------- 234 0x13E | 1 | | bNumInterfaces 235 236USBIP_CMD_SUBMIT: Submit an URB 237 238 Offset | Length | Value | Description 239-----------+--------+------------+--------------------------------------------------- 240 0 | 4 | 0x00000001 | command: Submit an URB 241-----------+--------+------------+--------------------------------------------------- 242 4 | 4 | | seqnum: the sequence number of the URB to submit 243-----------+--------+------------+--------------------------------------------------- 244 8 | 4 | | devid 245-----------+--------+------------+--------------------------------------------------- 246 0xC | 4 | | direction: 0: USBIP_DIR_OUT 247 | | | 1: USBIP_DIR_IN 248-----------+--------+------------+--------------------------------------------------- 249 0x10 | 4 | | ep: endpoint number, possible values are: 0...15 250-----------+--------+------------+--------------------------------------------------- 251 0x14 | 4 | | transfer_flags: possible values depend on the 252 | | | URB transfer type, see below 253-----------+--------+------------+--------------------------------------------------- 254 0x18 | 4 | | transfer_buffer_length 255-----------+--------+------------+--------------------------------------------------- 256 0x1C | 4 | | start_frame: specify the selected frame to 257 | | | transmit an ISO frame, ignored if URB_ISO_ASAP 258 | | | is specified at transfer_flags 259-----------+--------+------------+--------------------------------------------------- 260 0x20 | 4 | | number_of_packets: number of ISO packets 261-----------+--------+------------+--------------------------------------------------- 262 0x24 | 4 | | interval: maximum time for the request on the 263 | | | server-side host controller 264-----------+--------+------------+--------------------------------------------------- 265 0x28 | 8 | | setup: data bytes for USB setup, filled with 266 | | | zeros if not used 267-----------+--------+------------+--------------------------------------------------- 268 0x30 | | | URB data. For ISO transfers the padding between 269 | | | each ISO packets is not transmitted. 270 271 272 Allowed transfer_flags | value | control | interrupt | bulk | isochronous 273 -------------------------+------------+---------+-----------+----------+------------- 274 URB_SHORT_NOT_OK | 0x00000001 | only in | only in | only in | no 275 URB_ISO_ASAP | 0x00000002 | no | no | no | yes 276 URB_NO_TRANSFER_DMA_MAP | 0x00000004 | yes | yes | yes | yes 277 URB_NO_FSBR | 0x00000020 | yes | no | no | no 278 URB_ZERO_PACKET | 0x00000040 | no | no | only out | no 279 URB_NO_INTERRUPT | 0x00000080 | yes | yes | yes | yes 280 URB_FREE_BUFFER | 0x00000100 | yes | yes | yes | yes 281 URB_DIR_MASK | 0x00000200 | yes | yes | yes | yes 282 283 284USBIP_RET_SUBMIT: Reply for submitting an URB 285 286 Offset | Length | Value | Description 287-----------+--------+------------+--------------------------------------------------- 288 0 | 4 | 0x00000003 | command 289-----------+--------+------------+--------------------------------------------------- 290 4 | 4 | | seqnum: URB sequence number 291-----------+--------+------------+--------------------------------------------------- 292 8 | 4 | | devid 293-----------+--------+------------+--------------------------------------------------- 294 0xC | 4 | | direction: 0: USBIP_DIR_OUT 295 | | | 1: USBIP_DIR_IN 296-----------+--------+------------+--------------------------------------------------- 297 0x10 | 4 | | ep: endpoint number 298-----------+--------+------------+--------------------------------------------------- 299 0x14 | 4 | | status: zero for successful URB transaction, 300 | | | otherwise some kind of error happened. 301-----------+--------+------------+--------------------------------------------------- 302 0x18 | 4 | n | actual_length: number of URB data bytes 303-----------+--------+------------+--------------------------------------------------- 304 0x1C | 4 | | start_frame: for an ISO frame the actually 305 | | | selected frame for transmit. 306-----------+--------+------------+--------------------------------------------------- 307 0x20 | 4 | | number_of_packets 308-----------+--------+------------+--------------------------------------------------- 309 0x24 | 4 | | error_count 310-----------+--------+------------+--------------------------------------------------- 311 0x28 | 8 | | setup: data bytes for USB setup, filled with 312 | | | zeros if not used 313-----------+--------+------------+--------------------------------------------------- 314 0x30 | n | | URB data bytes. For ISO transfers the padding 315 | | | between each ISO packets is not transmitted. 316 317USBIP_CMD_UNLINK: Unlink an URB 318 319 Offset | Length | Value | Description 320-----------+--------+------------+--------------------------------------------------- 321 0 | 4 | 0x00000002 | command: URB unlink command 322-----------+--------+------------+--------------------------------------------------- 323 4 | 4 | | seqnum: URB sequence number to unlink: FIXME: is this so? 324-----------+--------+------------+--------------------------------------------------- 325 8 | 4 | | devid 326-----------+--------+------------+--------------------------------------------------- 327 0xC | 4 | | direction: 0: USBIP_DIR_OUT 328 | | | 1: USBIP_DIR_IN 329-----------+--------+------------+--------------------------------------------------- 330 0x10 | 4 | | ep: endpoint number: zero 331-----------+--------+------------+--------------------------------------------------- 332 0x14 | 4 | | seqnum: the URB sequence number given previously 333 | | | at USBIP_CMD_SUBMIT.seqnum field 334-----------+--------+------------+--------------------------------------------------- 335 0x30 | n | | URB data bytes. For ISO transfers the padding 336 | | | between each ISO packets is not transmitted. 337 338USBIP_RET_UNLINK: Reply for URB unlink 339 340 Offset | Length | Value | Description 341-----------+--------+------------+--------------------------------------------------- 342 0 | 4 | 0x00000004 | command: reply for the URB unlink command 343-----------+--------+------------+--------------------------------------------------- 344 4 | 4 | | seqnum: the unlinked URB sequence number 345-----------+--------+------------+--------------------------------------------------- 346 8 | 4 | | devid 347-----------+--------+------------+--------------------------------------------------- 348 0xC | 4 | | direction: 0: USBIP_DIR_OUT 349 | | | 1: USBIP_DIR_IN 350-----------+--------+------------+--------------------------------------------------- 351 0x10 | 4 | | ep: endpoint number 352-----------+--------+------------+--------------------------------------------------- 353 0x14 | 4 | | status: This is the value contained in the 354 | | | urb->status in the URB completition handler. 355 | | | FIXME: a better explanation needed. 356-----------+--------+------------+--------------------------------------------------- 357 0x30 | n | | URB data bytes. For ISO transfers the padding 358 | | | between each ISO packets is not transmitted.