# US 9,436,644 B1 · Apparatus and method for optimizing USB-over-IP data transactions

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 9,436,644 B1
- Document ID: US9436644B1
- Status: Granted
- Kind: B1
- Application number: 14/568,565
- Filed: 2014-12-12
- Granted: 2016-09-06
- Earliest claimed: 2014-01-30
- Assignees: Teradici Corporation
- Applicants: Teradici Corporation
- Inventors: Richard Dean Haymond; Michael James Smith; Haw-Yuan Yang; Daniel Michael Apperloo
- Web page: https://patentgrep.com/patent/US9436644B1

## CPC

- G06F 13/4068: {Electrical coupling}
- G06F 13/10: Program control for peripheral devices (G06F13/14 - G06F13/42 take precedence)
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

A method and apparatus for communicating USB data. In one embodiment, the method comprises receiving, by an optimizer executing on a computer and communicatively coupled between a USB storage driver (USBSD) and a USB hub controller driver (UHCD), an SCSI command; transmitting, by the optimizer in response to receiving the SCSI command, the SCSI command to the UHCD; generating, by the optimizer, an SCSI command completion; transmitting, by the optimizer, the SCSI command completion to the USBSD; receiving, by the optimizer, SCSI data associated with the SCSI command completion; transmitting, by the optimizer in response to receiving the SCSI data, the SCSI data to the UHCD; generating, by the optimizer after transmitting the SCSI data, an optimized SCSI status message; transmitting, by the optimizer, the optimized SCSI status message to the UHCD; and transmitting, by the optimizer responsive to an SCSI status completion, the SCSI Status completion to the USBSD.

## Claims

### Claim 1

A method of communicating Universal Serial Bus (USB) data, comprising:
receiving, by an optimizer executing on a computer and communicatively coupled between a USB storage driver and a USB hub controller driver (UHCD), a small computer systems interface (SCSI) command;
transmitting, by the optimizer in response to receiving the SCSI command, the SCSI command to the UHCD;
generating, by the optimizer, an SCSI command completion;
transmitting, by the optimizer, the SCSI command completion to the USB storage driver;
receiving, by the optimizer, SCSI data associated with the SCSI command completion;
transmitting, by the optimizer in response to receiving the SCSI data, the SCSI data to the UHCD;
generating, by the optimizer subsequent to transmitting the SCSI data, an optimized SCSI status message;
transmitting, by the optimizer, the optimized SCSI status message to the UHCD;
transmitting, by the optimizer in response to receiving an SCSI status completion, the SCSI Status completion to the USB storage driver; and
discarding, by the optimizer, (i) an SCSI command completion received from the UHCD and (ii) an authentic SCSI status message received from the USB storage driver.

### Claim 2 (depends on 1)

The method of claim 1, wherein communicatively coupling the optimizer to the UHCD comprises (i) communicatively coupling the optimizer to a virtual UHCD, (ii) communicatively coupling the UHCD to a stub driver and (ii) communicatively coupling the virtual UHCD to the stub driver via an Internet Protocol (IP) network; and wherein the UHCD is communicatively coupled to a USB storage device via a USB host controller.

### Claim 3 (depends on 2)

The method of claim 2, wherein the virtual UHCD and the stub driver communicate USB request blocks (URBs) between the optimizer and the UHCD.

### Claim 4 (depends on 2)

The method of claim 2, wherein the USB storage driver, the optimizer and the virtual UHCD execute in a single operating system (OS) domain; and wherein the virtual UHCD is communicatively coupled to the UHCD via the IP network.

### Claim 5 (depends on 4)

The method of claim 4, wherein the OS domain operates in one of a plurality of virtual machines executing on the computer, and wherein each of the plurality of virtual machines (a) executes an instance of the optimizer and (b) is coupled to one of a plurality of client computers, each client computer comprising an instance of the UHCD.

### Claim 6 (depends on 4)

The method of claim 4 wherein the virtual UHCD is communicatively coupled to the IP network using a virtualized network adapter in the OS domain.

### Claim 7 (depends on 4)

The method of claim 4 wherein the virtual UHCD is communicatively coupled to the IP network using a network adapter native to the OS domain.

### Claim 8 (depends on 1)

The method of claim 1, wherein the SCSI command, the SCSI data, the optimized SCSI status message and the authentic SCSI status message are USB request block (URB) data structures.

### Claim 9

An apparatus for communicating Universal Serial Bus (USB) data, comprising:
an optimizer, executing on a computer and communicatively coupled between a USB storage driver and a USB hub controller driver (UHCD), for:
receiving a small computer systems interface (SCSI) command;
transmitting, in response to receiving the SCSI command, the SCSI command to the UHCD;
generating an SCSI command completion;
transmitting the SCSI command completion to the USB storage driver;
receiving SCSI data associated with the SCSI command completion;
transmitting, in response to receiving the SCSI data, the SCSI data to the UHCD;
generating, subsequent to transmitting the SCSI data, an optimized SCSI status message;
transmitting the optimized SCSI status message to the UHCD;
transmitting, in response to receiving an SCSI status completion, the SCSI Status completion to the USB storage driver; and
discards (i) an SCSI command completion received from the UHCD and (ii) an authentic SCSI status message received from the USB storage driver.

### Claim 10 (depends on 9)

The apparatus of claim 9, wherein communicatively coupling the optimizer to the UHCD comprises (i) communicatively coupling the optimizer to a virtual UHCD, (ii) communicatively coupling the UHCD to a stub driver and (ii) communicatively coupling the virtual UHCD to the stub driver via an Internet Protocol (IP) network; and wherein the UHCD is communicatively coupled to a USB storage device via a USB host controller.

### Claim 11 (depends on 10)

The apparatus of claim 10, wherein the virtual UHCD and the stub driver communicate USB request blocks (URBs) between the optimizer and the UHCD.

### Claim 12 (depends on 10)

The apparatus of claim 10, wherein the USB storage driver, the optimizer and the virtual UHCD execute in a single operating system (OS) domain; and wherein the virtual UHCD is communicatively coupled to the UHCD via the IP network.

### Claim 13 (depends on 12)

The apparatus of claim 12, wherein the OS domain operates in one of a plurality of virtual machines executing on the computer, and wherein each of the plurality of virtual machines (a) executes an instance of the optimizer and (b) is coupled to one of a plurality of client computers, each client computer comprising an instance of the UHCD.

### Claim 14 (depends on 12)

The apparatus of claim 12 wherein the virtual UHCD is communicatively coupled to the IP network using a virtualized network adapter in the OS domain.

### Claim 15 (depends on 12)

The apparatus of claim 12 wherein the virtual UHCD is communicatively coupled to the IP network using a network adapter native to the OS domain.

### Claim 16 (depends on 9)

The apparatus of claim 9, wherein the SCSI command, the SCSI data, the optimized SCSI status message and the authentic SCSI status message are USB request block (URB) data structures.

### Claim 17

A system for communicating Universal Serial Bus (USB) data, comprising:
a host computer comprising:
an optimizer;
a USB storage driver; and
a USB hub controller driver (UHCD), wherein the optimizer is communicatively coupled between the USB storage driver and the USB hub controller driver (UHCD), and wherein the optimizer:
receives a small computer systems interface (SCSI) command;
transmits, in response to receiving the SCSI command, the SCSI command to the UHCD;
generates an SCSI command completion;
transmits the SCSI command completion to the USB storage driver;
receives SCSI data associated with the SCSI command completion;
transmits, in response to receiving the SCSI data, the SCSI data to the UHCD;
generates, subsequent to transmitting the SCSI data, an optimized SCSI status message;
transmits the optimized SCSI status message to the UHCD;
transmits, in response to receiving an SCSI status completion, the SCSI Status completion to the USB storage driver; and
discarding (i) an SCSI command completion received from the UHCD and (ii) an authentic SCSI status message received from the USB storage driver.
