Universal network interface controller

A universal network interface controller (UNIC) is provided for interfacing a host computer to a switch fabric, a packet network, or both. The UNIC includes encapsulation logic configured to encapsulate a CBP communication for transmission as switch fabric data on the switch fabric. Finally, the UNIC includes transmit logic configured to transmit the encapsulated CBP communication to the remote CBP device using the switch fabric.

FIELD OF THE INVENTION

Embodiments of this invention are related to computer bus protocols and computer networks.

BACKGROUND

Computer system designers have used techniques to try to expand the ways that distributed applications control devices using a computer bus. Different techniques have been attempted to expand the geographic distance between a computer bus and a controlled device. Expanding the use of computer bus controlled devices by distributed applications is challenging.

It is especially difficult to communicate computer bus communications over a network along with other types of traffic. Traditional network communication problems are especially challenging when the network is used to try to control a computer bus protocol device.

DETAILED DESCRIPTION

Overview

Embodiments use universal network interface controllers (UNIC) and a switch fabric to control remote devices using computer bus protocols (CBP).FIG. 1Aillustrates a system100having host computers140A-B, switch fabric160and endpoints150A-B. Host computer140A has UNIC110A, host computer140B has UNIC110C and endpoint150B has UNIC110B. Switch fabric160is coupled using links101A-D respectively to hosts140A-B, endpoint150A and endpoint150B. Endpoints150A-B have respective devices152A-B. Universal Controller Cluster Scope (UC cluster scope)105includes UNICs110A-C respectively in host140A, endpoint150B and host140B. Endpoint150A has fabric access point (FAP)190coupled to device152A using CBP converter107.

Examples of switch fabric160, endpoints150A-B, UNICs110A-C and FAP190are described in U.S. patent application Ser. No. 13/173,189 ('189 application), filed on Jun. 30, 2011, entitled “Universal Network Interface Controller,” which is incorporated by reference herein in its entirety, although the disclosure is not limited to the examples described in the '189 application.

UNICs110A-C and switch fabric160enable controlling components and transferring data using CBPs in multi-tier computer networks. As would be appreciated by one having skill in the relevant art(s), given the description herein, CBPs can transfer a broad range of information, including commands for CBP connected devices and data received from these devices. For convenience, as used typically herein, both commands and data communicated using CBPs are termed “CBP communication.”

In embodiments described herein, switch fabric160can carry both standard packetized data and CBP communication. A data path between host computer140A and device152B using UNICs110A-B and switch fabric160can be termed a “CBP tunnel.” As with other traffic carried by switch fabric160, CBP communications are encapsulated into cells for transmission using the fabric and decapsulated for use at endpoints. Additional examples of encapsulation and decapsulation are described in the '189 application.

One example of CBP communications discussed herein is the transmission by switch fabric160of PCIe transaction layer packets (TLPs). PCIe TLPs can include commands from host computer140A to devices152A-B, and data transferred from device152A-B to host computer140A. It should be appreciated that other CBPs can be used by embodiments, e.g., the InfiniBand and FibreChannel protocols.

In an example, host computer140A requires data from device152B, which can be, for example, a solid state drive on endpoint150B. Using standard CBP, host computer140A generates a CBP communication to retrieve data from device152B. UNIC110A receives the generated CBP communication and encapsulates the CBP communication into a format for transmission using switch fabric160. The encapsulated CBP communication is then transferred to UNIC110B using switch fabric160. After receipt by UNIC110B, the encapsulated CBP communication is decapsulated by decapsulation logic into a decapsulated CBP communication. In this example, UNIC110B relays the decapsulated CBP communication to and from device152B using CBP link111B. It should be noted that UNIC110B uses CBP link111B to directly transfer CBP communications to and from device152B using CBP.

In response to the decapsulated CBP communication, device152B retrieves the desired data and generates CBP communications to relay the retrieved data to host computer140A. UNIC110B receives and encapsulates the generated CBP communications for transmission to host computer140A using switch fabric160. Upon receipt of the encapsulated CBP communications, UNIC110A decapsulates and relays the received CBP communications to host computer140A.

In a variation of the example above, host computer140A requires data from device152A, which can be, for example, a solid state drive on endpoint150A. Using CBP, host computer140A generates CBP communication to retrieve data from device152A. UNIC110A receives the generated CBP communication and encapsulates the command into a format for transmission using switch fabric160. The encapsulated CBP communication is transferred to FAP190using switch fabric160. In contrast to the previous example, FAP190is not directly coupled to device152A using a CBP link. FAP190is coupled to CBP converter107using a congestion free protocol (CFP) link. The term “CFP” is a term used herein to describe a protocol that guarantees the delivery of communications and reduces congestion in a link. One having skill in the relevant art(s) given the description herein, would appreciate that CFPs may substantially guarantee the delivery of communications and substantially reduce the congestion in a link. Example CFPs include CBPs noted herein, such as FibreChanel and InfiniBand. One having skill in the relevant art(s), given the description herein will appreciate other CFPs that could be used with embodiments. Further, non-guaranteed links can also be used. For example, a non-guaranteed link can be used by an embodiment when a higher-level protocol is used to guarantee delivery of link data. An Ethernet link, for example, can be used with embodiments when Data Center Ethernet (DCE) protocols are used.

FAP190has logic to decapsulate the received encapsulated CBP communication and rencapsulate the CBP communication in a proper format for CFP link106. In response to the CBP communication from CFP link106, CBP converter107converts the CFP encoded CBP communication into CBP communication for device152A using CBP link111A. In response, device152A retrieves requested data and generates CBP communications to relay the retrieved data to host computer140A. The above described encapsulation/decapsulation process is repeated in reverse for this transfer of data back to host computer140A.

FIG. 1Billustrates a system102having host140A and PCIe device appliance155, which is one embodiment of endpoint150B fromFIG. 1A. A data path inside UC cluster105is provided between host140A and PCIe device appliance155using switch fabric160. PCIe device appliance155has PCIe devices146A-C and UNIC110B coupled to PCIe switch108. UNIC110B has downstream port126coupled to the switch fabric160. Both UNICs110A-B are coupled to switch fabric160. Host140A and PCIe device appliance155have processors191A-B. Host140A also has host memory280coupled to UNIC110A. Host memory180includes virtual machines188A-B controlled by hypervisor189, and virtual output queues (VOQ)195A-B, UNIC110A has embedded processor192.

UNIC110A includes proxy endpoints (Proxy EPs)125A-C to enable control of PCIe devices146A-C. Each proxy EP125A-C is associated with a respective PCIe device146A-C and an appropriate driver (not shown). Therefore, each proxy EP125A-C allows hypervisor189to connect to an associated PCIe device146A-C on PCIe device appliance155.

The types of CBP resources (e.g., PCI devices146) that can be proxied using proxy EPs125A-C include storage devices, and other devices such as FibreChannel or InfiniBand controlled devices. One having skill in the relevant art(s), given the description herein, would appreciate that other types of computer resources can also be controlled, such as graphics accelerators. When different types of resources are proxied by embodiments, switch fabric160can transport command and data payloads in marked cells that indicate the type of payload that is being carried.

In PCIe device appliance155, each PCIe device146A-C can be connected using PCIe switch108to downstream port126in UNIC110B. Downstream port126is coupled to proxy EPs125A-C using switch fabric160. In an embodiment, PCIe devices146A-C on PCIe appliance155are locally managed by processor191B. Embedded processor192can also be used to manage PCIe devices146A-C. Processor191B can communicate with embedded processor192to ensure that PCIe device appliance155discovers and sets up the devices146A-C.

To enable management of PCIe devices on PCIe device appliance155, processor191B can communicate with embedded processor192to establish how devices146A-C are assigned to multiple hosts140A-B. Processor191B can assign PCIe devices146A-C to hosts140A-B either through policy or communication with hosts140A-B.

When processor191B communicates with hosts140A-41, a separate management protocol can be used which enables PCIe devices146A-C to be assigned to multiple hosts140A-B. Protocols used to manage PCIe devices146A-C include protocols for discovery, assignment, lifecycle management, etc. Once assignments are established, processor191B can notify embedded processor192of the agreed upon host assignments so that embedded processor192can set up the datapath to appropriately direct packets to/from the devices146A-C to assigned host140A.

UNIC110A can use VOQs195A-B in host memory180to enqueue CBP communication to and from PCIe devices146A-C. In this example, VOQ195A-B are assigned to PCIe devices146A-B respectively. In another example, VOQs195A-B can be assigned to different flows to and from the same PCIe device146A. The interaction of embodiments of VOQs195A-B is discussed with reference toFIGS. 2-3below.

Architecture

FIG. 2illustrates a schematic block diagram of a host computer140A, switch fabric160, packet network220, endpoints150A-B and endpoint250. Host computer140A has host memory280, processor191A and network interface card (NIC)210. Processor191A, host memory280and bridge202are coupled to local interface201, where bridge202is further coupled to NIC210using I/O bus203. NIC210has UNIC110A. UNIC110A has interface logic230, encapsulation logic232, transmit logic234, decapsulation logic236, and receive logic238. Endpoint150A has FAP190and device152A, endpoint150B has UNIC,110B and device152B, and endpoint250has device252. FAP190is coupled to switch fabric160, UNICs110A-B are coupled to both switch fabric160and packet network220, and endpoint250is coupled to packet network220.

Local interface201may comprise one or more buses, interfaces, and/or connections. For example, the local interface201may comprise a data bus with an accompanying address/control bus or other bus structure as can be appreciated.

NIC210communicates data, control, and addressing information to and from an I/O Bus203, which is coupled to a bridge202. An example I/O bus203used by embodiments is a PCI-Ex (PCIe) bus. The bridge202can be, for example, a Southbridge or an I/O controller hub (ICH), associated with a computer motherboard. Bridge202connects to local interface201, so that the UNIC110A can access host memory280and other components of the host computer140A. Note that in some alternative embodiments UNIC110A can be directly interfaced with local interface201on a computer motherboard such that bridge202, I/O Bus203, and NIC210are not necessary to implement UNIC110A.

Host memory280stores one or more virtual output queues (VOQs)292A-J, data286, software (S/W)282, and control (CNTL) metadata284. S/W282typically includes an operating system (O/S)299, virtual machines (VMs)288A-B, and other optional applications, all of which can be executed by the processor191A. The host memory280can further include volatile and nonvolatile memory, for example but not limited to, dynamic random access memory (DRAM), static random access memory (SRAM), read-only memory (ROM), hard disk drives, solid-state drives, etc. However, for this discussion, the host memory280is assumed to be DRAM.

VMs288A-B are software implementations of a machine that executes programs like a physical computer. VOQs292A-J are embodiments of VOQs195A-B fromFIG. 1B. VOQs292A-J can be operationally presented as kernel buffer queues, user space queues, or hybrid queues where the enqueue-dequeue operations are controlled by a device driver for UNIC110A (not shown). In different embodiments, the setup and maintenance of VOQs A-J are mediated by the O/S299kernel. The VOQ device driver is typically a kernel process, but can also be a user space process.

FIG. 2illustrates a host side implementation of UNIC110A in host computer140A. In this host implementation, UNIC110A has one or more system ports (not shown) that can be mapped to data producers and consumers, for example, the VMs288A-B operated by hypervisor289. When the UNIC110A is used for traditional Ethernet packet interfaces, UNIC110A implements transmit and receive functions for Ethernet packets using packet network220. UNIC110A can also be used with the cell fabric interface of switch fabric160.

As discussed further with reference toFIG. 3below, in this implementation, UNIC110A queues and schedules packets or cells for transmission through switch fabric160. For example, when UNIC110A receives a CBP communication from VM288A for transfer to device152B, UNIC110A can use VOQ292B in host memory280to queue the received CBP communication before transmission. In this example, each VOQ292A-J is assigned to a different endpoint150A-B and250. For example, because device152B is in endpoint150B, if required, commands destined for device152B are enqueued in VOQ292B. In another example, multiple VOQs292A-J can be assigned to different flows destined to the same endpoint140A.

Without the beneficial approaches described herein, combining Ethernet and CBP communications from the same NIC210to endpoints150A-B and250has the potential for introducing large latencies into the CBP communications. Large latencies in transfers could occur when a CBP communication enters the system serially just as a maximum size Ethernet packet is starting to be transferred. Without the scheduling approaches described herein, a large delay could result because the CBP communication could have to wait until the Ethernet packet is fully transmitted. Switch fabric160can alleviate this latency problem because the switch fabric interface has a multitude of links that can carry CBP communications interleaved with standard Ethernet frames. This interleaving can be performed by encapsulation logic360, and can reduce the delays associated with relaying both types of traffic.

FIG. 3is a functional block diagram of the architecture of UNIC310, which is one embodiment of UNIC110A fromFIGS. 1A and 1B. UNIC310includes one or more bus interfaces301, only one of which is shown for simplicity. Bus interface301is connected to host computer140A using I/O Bus203and host computer bridge202as shown inFIG. 2. This connection enables UNIC310to communicate with processor191A and host memory280associated with host computer140A.

To manage congestion and improve performance, UNIC310can use traffic management functions. These traffic management functions help to enable the successful transmission of CBP communications by switch fabric160. One approach used by UNIC310to manage traffic uses VOQs292A-J created in host memory280. CBP processor363can read control metadata from CBP communications and provide queuing information to ingress traffic manager395.

Ingress traffic manager395manages the use of VOQs292A-J in host memory280using control data connection366. To further manage congestion and improve performance, UNIC310can use transmit processor397. Transmit processor397is designed to manage the transmission of CBP communications to one or more endpoints150A-B and250.

In the example ofFIG. 3, the UNIC310is shown with separate physical connections to a fabric interface330and a packet interface340. Fabric cells are communicated by the fabric interface330into the switch fabric160, and network cells with packet headers are communicated by the packet interface340into the packet network220. In other embodiments, these connections can be statically multiplexed to the same physical connections, operating in one mode or the other at any given point in time.

Receive logic370includes receive processor372and egress traffic manager375. Receive processor372can use fabric cell header information or packet header information to queue requests using egress traffic manager375for one or more copies to be delivered into one or more host computer140A ports.

Egress traffic manager375manages an egress queue287in host memory280using control connection376. Typically, egress traffic manager375manages a smaller number of queues as compared to the VOQs292A-J managed by ingress traffic manager395. Decapsulator385decapsulates the received encapsulated CBP communications and relays the CBP communications to bus interface301.

In an alternative embodiment, a plurality of bus interfaces301to host memory280can be implemented to enhance performance by increasing throughput capacity to and from UNIC310. In this embodiment, scheduling information can be generated by ingress traffic manager395and communicated to the host computer140A using control data connection366. This scheduling information can be used to select a particular bus interface301for transmission.

An example is now revisited where host computer140A requires data to be retrieved from device152B on endpoint150B. A CBP communication is generated by processor191A, and relayed to bus interface301using the links described above.

From bus interface301, the CBP communication is relayed to proxy EP350. As discussed with respect to UNIC110A inFIG. 1above, UNIC310includes Proxy EP350to enable control of associated CBP devices. In this example, proxy EP350is associated with a device152B and an appropriate driver (not shown). In this example, the CBP communication generated by processor191A is directed to proxy EP350as if proxy EP350was device152B.

Using a driver appropriate for device152B, proxy EP350receives the CBP communication from bus interface301and relays the CBP communication to transmit logic390. The components of transmit logic390can act to schedule and queue the CBP communication before encapsulation and transmission over switch fabric160.

In transmit logic390, CBP processor363receives CBP communication from proxy EP350and retrieves control metadata for use by ingress traffic manager395. CBP processor363relays the CBP communication to ingress traffic manager395. Ingress traffic manager395can manage outgoing traffic using control data connection366. When the logic of ingress traffic manager395determines the CBP communication should be relayed to endpoint150B, the CBP communication is relayed to transmit processor397. Transmit processor397can determine which outgoing interface to use, either fabric interface330or packet interface340. In this example transmit processor397selects fabric interface330for transmission to endpoint150B using switch fabric160. Switch fabric160requires data to be encapsulated, and therefore, once transmit processor397selects fabric interface330for transmission, encapsulator362in encapsulation logic360performs the encapsulation of CBP communication for transmission. Once the CBP communication is encapsulated for transmission, encapsulator362relays the encapsulated CBP communication to fabric160using fabric interface330. Once received at endpoint150B, the CBP communication is relayed to device152B, where the desired data is retrieved and returned in return CBP communication.

UC EP355receives the returned CBP communication having the desired data from the device152via the fabric interface330. The CBP communication is relayed to receive processor372and egress traffic manager375in receive logic370. From receive logic370, the CBP communication is received by decapsulator385in decapsulation logic380. Using bus interface301, the received data is relayed to the host computer140A via the I/O bus203and the host computer bridge202.

EXAMPLES

As introduced with reference toFIG. 1A, endpoints150A-B can either be inside or outside UC cluster scope105. Because SSD appliance401has UNIC410, it is inside UC cluster scope105. As discussed with reference toFIGS. 1A-Babove, switch fabric160can carry both standard packetized data and CBP communication. CBP communications from PCIe device appliance401are encapsulated into cells for transmission using the switch fabric160by encapsulator/decapsulator490. Encapsulator/decapsulator490also decapsulates CBP communications received from a computer host.

Once outgoing CBP communication are encapsulated, UC logic480schedules and queues the CBP communication. UC logic480can perform outgoing traffic management functions similar to those described above performed by transmit logic390shown inFIG. 3. For example, UC logic480can manage the use of VOQs stored in the memory of PCIe device appliance401(not shown). The encapsulated CBP communication is relayed by UC logic480to switch fabric160for transmission to a host computer.

UC logic480can also perform functions similar to those described above performed by receive logic370. When CBP communications are received from a host computer, UC logic480receives the communications and manages decapsulation by encapsulator/decapsulator490. UC logic480can use fabric cell header information or packet header information to queue CBP communications received from, or directed to, host computers140A-B. Configuration information from embedded processor455can also be used to determine the encapsulation and decapsulation operations performed by encapsulator/decapsulator490.

The “downstream” (DS) in DS port425refers to the downstream relationship of the port to embedded processor455. DS port425receives management information for managing PCIe devices450A-C. DS port425is linked to PCIe switch408using a PCIe protocol. DS port425provides an input/output port for PCIe communications412to and from PCIe switch408. The section below describes the use of exemplary CBP devices in a CBP appliance. The examples below discussed with respect to PCIe devices can be applied to other types of CBP devices as well.

In different embodiments, PCIe SSDs450A-C on SSD appliance401are locally managed by either embedded processor455or processor452. This management can involve the dynamic assignment of PCIe resources to different host computers140A-B. To improve the dynamic assignment of PCIe devices to host computers140A-B, a management protocol may be used between the SSD appliance401and host computers140A-B. This management protocol can improve discovery of PCIe devices, assignment of PCIe devices to different hosts, and the lifecycle management of PCIe devices. This dynamic assignment can improve the efficient distribution of resources across host computers140A-B. Embedded processor455can perform optimization functions by managing the input/output functions of UC logic480and DS port425described above.

Management of PCIe SSDs450A-C by processor452can also specify that processor452is the “master” processor and controls all physical aspects of the PCIe SSDs450A-C. At power up of PCIe device appliance401, PCIe SSDs450A-C are recognized and physical and virtual device functions are configured. An inventory of functions available is prepared for sending to host computers140A-B that may be seeking different PCIe device functions.

After host computer140A connects to switch fabric160for example, the management software can determine devices available for pairing, along with device assignments. Because each PCIe function of PCIe SSDs450A-C can be individually reset (using Function Level Reset), different resources operating on different host computers140A-B can share a single physical device on PCIe device appliance401. Switch fabric160can enable this sharing by providing a guaranteed delivery path from host computers140A-B to PCIe SSDs450A-C, with controllable QoS and isolation.

Each PCIe SSDs450A-C hosted on PCIe device appliance401may be logically partitioned using different methods, including, multi-function, Single Root I/O Virtualization (SRIOV) or Multi-Root I/O Virtualization (MRIOV). MRIOV devices require additional components such as MRIOV switch and MRIOV-aware RCs and OS. MRIOV and SRIOV devices which are intended to be shared across multiple VMs288A-B on host computer140A can be shared across multiple hosts when connected through switch fabric160.

Each function (PF in Multi-function device or VF in a SRIOV device) may be assigned to a separate host computer in the UC cluster scope105. For example, each function of PCIe SSDs450A-C can be assigned to a separate host computer140A-B. Switch fabric160can be used to map separate VOQs292A-J in host computer140A to each of the functions required by host computer140A. The functions required by host computer140A can be mapped to functions provided PCIe device appliance401. Each VOQs mapped to a PCIe device provides a guaranteed delivery path with a known quality of service for a required function.

As introduced with reference toFIGS. 1 and 4above, endpoints150A-B can either be inside or outside UC cluster scope105. Because SSD appliance501is coupled to switch fabric160using FAP edge switch580, it is outside UC cluster scope105.

In an embodiment, PCIe communications from host computer140A are encapsulated by encapsulator362and sent over switch fabric160as cells to FAP Edge switch580. The congestion-free and guaranteed delivery characteristics of switch fabric160extend using connection504to FAP edge switch580. FAP edge switch580uses encapsulator/decapsulator590to decapsulate the received PCIe communications.

FAP edge switch580is connected to SSD appliance501(or any PCIe device) through link508. Similar to the characteristics of switch fabric160connections, link508generally uses a CFP that minimizes congestion and guarantees delivery of decapsulated PCIe communication. Encapsulator/decapsulator590decapsulates the received PCIe packets into a form for transmission using link508. Examples of protocols that can be used for link508are Distributed Computing Environment (DCE), FibreChannel (FC), and InfiniBand (IB). PCIe converter595converts the received link508protocol communication into PCIe communication for PCIe SSDs550A-C. One having skill in the relevant art(s), with access to the teachings herein, will appreciate that, once received by PCIe SSD550A, return PCIe communications can be generated by PCIe SSD550A for transmission back to host computer140A.

Method

This section andFIG. 6summarize the techniques described herein by presenting a flowchart of an example method600of interfacing, using a switch fabric, a host computer with a remote computer bus protocol (CBP) device.

As shown inFIG. 6, method600begins at stage610where a CBP communication is encapsulated for transmission as switch fabric data on the switch fabric. In an embodiment, a CBP communication originating from VM288A is relayed using local interface201to UNIC110A. Using encapsulation logic232, UNIC110A encapsulates the received CBP communication for transmission using switch fabric160as switch data. Once stage610is complete, method600proceeds to stage620.

At stage620, the encapsulated CBP communication is transmitted to the remote CBP device using the switch fabric. In an embodiment, transmit logic234is used to transmit the encapsulated CBP communication from UNIC110A to device152B on endpoint150B. Once step620is complete, method600ends.

Example Computer System Implementation

It will be apparent to persons skilled in the relevant art(s) that various elements and features of the present disclosure, as described herein, can be implemented in hardware using analog and/or digital circuits, in software, through the execution of instructions by one or more general purpose or special-purpose processors, or as a combination of hardware and software.

The following description of a general purpose computer system is provided for the sake of completeness. Embodiments of the present disclosure can be implemented in hardware, or as a combination of software and hardware. Consequently, embodiments of the invention may be implemented in the environment of a computer system or other processing system. An example of such a computer system700is shown inFIG. 7. All of the modules depicted inFIGS. 1-5, for example, can execute on one or more distinct computer systems700. Furthermore, each of the steps of the flowchart depicted inFIG. 6can be implemented on one or more distinct computer systems700.

Computer system700includes one or more processors, such as processor704. Processors191A-B fromFIGS. 1B and 2are embodiments of processor704. Processor704can be a special purpose or a general purpose digital signal processor having one or more processor cores. Processor704is connected to a communication infrastructure702(for example, a bus or network). NIC210is also coupled to communications infrastructure702. NIC210has UNIC110A.

Various software implementations are described in terms of this exemplary computer system. After reading this description, it will become apparent to a person skilled in the relevant art(s) how to implement the invention using other computer systems and/or computer architectures.

Computer system700also includes a main memory706, preferably random access memory (RAM), and may also include a secondary memory708. Secondary memory708may include, for example, a hard disk drive710and/or a removable storage drive712, representing a floppy disk drive, a magnetic tape drive, an optical disk drive, or the like. Removable storage drive712reads from and/or writes to a removable storage unit716in a well-known manner. Removable storage unit716represents a floppy disk, magnetic tape, optical disk, or the like, which is read by and written to by removable storage drive712. As will be appreciated by persons skilled in the relevant art(s), removable storage unit716includes a computer usable storage medium having stored therein computer software and/or data.

In alternative implementations, secondary memory708may include other similar means for allowing computer programs or other instructions to be loaded into computer system700. Such means may include, for example, a removable storage unit718and an interface714. Examples of such means may include a program cartridge and cartridge interface (such as that found in video game devices), a removable memory chip (such as an EPROM, or PROM) and associated socket, a thumb drive and USB port, and other removable storage units718and interfaces714which allow software and data to be transferred from removable storage unit718to computer system700.

Computer system700may also include a communications interface720. Communications interface720allows software and data to be transferred between computer system700and external devices. Examples of communications interface720may include a modem, a network interface (such as an Ethernet card), a communications port, a PCMCIA slot and card, etc. Software and data transferred via communications interface720are in the form of signals which may be electronic, electromagnetic, optical, or other signals capable of being received by communications interface720. These signals are provided to communications interface720via a communications path722. Communications path722carries signals and may be implemented using wire or cable, fiber optics, a phone line, a cellular phone link, an RF link and other communications channels.

As used herein, the terms “computer program medium” and “computer readable medium” are used to generally refer to tangible storage media such as removable storage units716and718or a hard disk installed in hard disk drive710. These computer program products are means for providing software to computer system700.

Computer programs (also called computer control logic) are stored in main memory706and/or secondary memory708. Computer programs may also be received via communications interface720. Such computer programs, when executed, enable the computer system700to implement the present invention as discussed herein. In particular, the computer programs, when executed, enable processor704to implement the processes of the present disclosure, such as any of the methods described herein. Accordingly, such computer programs represent controllers of the computer system700. Where the disclosure described herein is implemented using software, the software may be stored in a computer program product and loaded into computer system700using removable storage drive712, interface714, or communications interface720.

In another embodiment, features of the disclosure are implemented primarily in hardware using, for example, hardware components such as application-specific integrated circuits (ASICs) and gate arrays. Implementation of a hardware state machine so as to perform the functions described herein will also be apparent to persons skilled in the relevant art(s).