Method and system for reducing deadlock in fibre channel fabrics using virtual lanes

Information

  • Patent Grant
  • 7564789
  • Patent Number
    7,564,789
  • Date Filed
    Thursday, March 11, 2004
    20 years ago
  • Date Issued
    Tuesday, July 21, 2009
    15 years ago
Abstract
A method and system for processing fibre channel frames is provided. The method includes, assigning a virtual lane for a frame based on a hop count for the frame; determining if the assigned virtual lane has available credit; and transmitting the frame if credit is available. The system includes, a fibre channel fabric switch element including a receive port for receiving fibre channel frames, which includes a look up table to assign a virtual lane based on a hop count of the frame; and a transmit port that receives a primitive with the assigned virtual lane by the receive port and the transmit port includes a credit control module that determines if an assigned virtual lane can transmit a frame based on available credit.
Description
BACKGROUND
1. Field of the Invention

The present invention relates to Fibre Channel systems, and more particularly, to reducing deadlock problems in Fibre Channel Fabrics.


2. Background of the Invention

Fibre channel is a set of American National Standard Institute (ANSI) standards, which provide a serial transmission protocol for storage and network protocols such as HIPPI, SCSI, IP, ATM and others. Fibre channel provides an input/output interface to meet the requirements of both channel and network users.


Fibre channel supports three different topologies: point-to-point, arbitrated loop and fibre channel fabric. The point-to-point topology attaches two devices directly. The arbitrated loop topology attaches devices in a loop. The fibre channel fabric topology attaches host systems directly to a fabric, which are then connected to multiple devices. The fibre channel fabric topology allows several media types to be interconnected.


Fibre channel is a closed system that relies on multiple ports to exchange information on attributes and characteristics to determine if the ports can operate together. If the ports can work together, they define the criteria under which they communicate.


In fibre channel, a path is established between two nodes where the path's primary task is to transport data from one point to another at high speed with low latency, performing only simple error detection in hardware.


Fibre channel fabric devices include a node port or “N_Port” that manages fabric connections. The N_port establishes a connection to a fabric element (e.g., a switch) having a fabric port or F_port. Fabric elements include the intelligence to handle routing, error detection, recovery, and similar management functions.


A fibre channel switch is a multi-port device where each port manages a simple point-to-point connection between itself and its attached system. Each port can be attached to a server, peripheral, I/O subsystem, bridge, hub, router, or even another switch. A switch receives messages from one port and automatically routes it to another port. Multiple calls or data transfers happen concurrently through the multi-port fibre channel switch.


Fibre channel switches use memory buffers to hold frames received and sent across a network. Associated with these buffers are credits, which are the number of frames that a buffer can hold per fabric port.


The following Fibre Channel standards are used for Fibre Channel systems and Fibre Channel Fabrics, and are incorporated herein by reference in their entirety:


ANSI INCITS xxx-200x Fibre Channel Framing and Signaling Interface (FC-FS)—T11/Project 1331D; and ANSI INCITS xxx-200x Fibre Channel Switch Fabric-3(FC-SW-3), T11/Project 1508D


As discussed above, a Fibre Channel Fabric can consist of multiple switches connected in an arbitrary topology. The links between the switches use a buffer-to-buffer credit scheme for flow control so that all frames transmitted have a receive buffer. Fabric deadlock may occur if a switch cannot forward frames because the recipient switch buffers (receive buffers) are full.


The following example, described with respect to FIG. 6, shows how a deadlock situation can occur. FIG. 6 shows five switches (“SW”) 1, 2, 3, 4, and 5 that are linked together by ISLs (Inter Switch Links) in a ring topology. Host 11 and target 21 are linked to switch 1, host 12 and target 22 are linked to switch 2, and so forth.


In this example, hosts 11-15 can send data as fast as they can to a target that is two (2) hops away, for example:

    • Host 11 can send data to target 23;
    • Host 12 can send data to target 24;
    • Host 13 can send data to target 25;
    • Host 14 can send data to target 21; and
    • Host 15 can send data to target 22


For illustration purposes only, all traffic goes in the clockwise direction in FIG. 6.


The receive buffers available for each ISL in the direction of traffic may get filled with frames addressed to the next switch.


For example:

    • For the ISL between switch 1 and switch 2, the receive buffers on switch 2 get filled with frames for switch 3;
    • For the ISL between switch 2 and switch 3, the receive buffers on switch 3 get filled with frames for switch 4;
    • For the ISL between switch 3 and switch 4, the receive buffers on switch 4 get filled with frames for switch 5;
    • For the ISL between switch 4 and 5, the receive buffers on 5 get filled with frames for switch 1; and
    • For the ISL between switch 5 and switch 1, the receive buffers on switch 1 get filled with frames for switch 2.


The transmit side of a switch waits for R_RDYs before it can transmit any frames. If frames cannot be transmitted from one ISL, then the receive buffers for the other ISL cannot be emptied. If the receive buffers cannot be emptied, no R_RDY flow control signals can be transmitted, which deadlocks the Fabric.


Many large Fabrics have paths that form rings within them, especially if they are designed to avoid single points of failure by using redundant switches. Such network traffic patterns may result in a deadlock situation disrupting networks using fibre channel switches and components.


Therefore, there is need for a system and method for minimizing deadlock problems in fibre channel switches.


SUMMARY OF THE PRESENT INVENTION

In one aspect of the present invention, a method for processing fibre channel frames is provided. The method includes, assigning a virtual lane for a frame based on a hop count for the frame; determining if the assigned virtual lane has available credit; and transmitting the frame if credit is available.


The method also includes, incrementing a counter value for counting available credit for the assigned virtual lane, if the frame is sent using the assigned virtual lane. If all credit for the assigned virtual lane has been used, then a next virtual lane is selected with non-zero credit.


In yet another aspect of the present invention, a method for processing fibre channel frames using a fabric switch element having a receive port and a transmit port is provided. The method includes assigning a virtual lane in the receive port based on a hop count for the frame; and sending a primitive to a transmit port with the assigned virtual lane.


The method further includes, assigning a virtual lane on the transmit port based on the hop count of the frame; and determining if credit is available for the assigned virtual lane to send the frame. A credit count for the assigned virtual lane is maintained by a counter and the assigned virtual lane has a maximum credit count.


In another aspect of the present invention, a system for processing fibre channel frames is provided. The system includes, a fibre channel fabric switch element including a receive port for receiving fibre channel frames, which includes a look up table to assign a virtual lane based on a hop count of the frame; and a transmit port that receives a primitive with the assigned virtual lane by the receive port and the transmit port includes a credit control module that determines if an assigned virtual lane can transmit a frame based on available credit.


The credit control module increments a credit count for an assigned virtual lane if a frame has been transmitted from the assigned virtual lane. The credit control module also decrements a credit count for an assigned virtual lane if a VC_RDY is received. The credit control module also maintains a maximum count for every virtual lane used for transmitting frames. An increment selector is used to increment credit count and a decrement selector is used to decrease the credit count. The credit control module also uses compare logic to compare available credit for an assigned virtual lane at any given time with a programmed maximum credit value for the assigned virtual lane.


In yet another aspect of the present invention, a system for processing fibre channel frames is provided. The system includes, the means for assigning dedicated virtual lanes for transmitting frames, where the virtual lanes are assigned based on a hop count of a frame; means for maintaining a credit count for each virtual lane used for transmitting frames; and means for determining if credit is available for a particular virtual lane that is assigned based on the hop count.


The system also includes the means for maintaining a maximum credit count for each virtual lane; and means for comparing the maximum credit count with the credit available for a virtual lane at any given time.


In yet another aspect of the present invention, a fibre channel fabric switch element for processing fibre channel frames, is provided. The switch element includes, means for assigning dedicated virtual lanes for transmitting frames, where the virtual lanes are assigned based on a hop count of a frame; means for maintaining a credit count for each virtual lane used for transmitting frames; and means for determining if credit is available for a particular virtual lane that is assigned based on the hop count.


The switch element also includes, means for maintaining a maximum credit count for each virtual lane; and means for comparing the maximum credit count with the credit available for a virtual lane at any given time.


In yet another aspect, the present invention reduces/prevents the deadlock by separating frames queued for transmission into virtual lanes, each with its own transmit queue and flow control. Flow control uses the Fibre Channel VC_RDY primitive signal to give separate flow control signals to each virtual lane. Also, no frames are discarded to reduce/avoid deadlock.


This brief summary has been provided so that the nature of the invention may be understood quickly. A more complete understanding of the invention can be obtained by reference to the following detailed description of the preferred embodiments thereof in connection with the attached drawings.





BRIEF DESCRIPTION OF THE DRAWINGS

The foregoing features and other features of the present invention will now be described. In the drawings, the same components have the same reference numerals. The illustrated embodiment is intended to illustrate, but not to limit the invention. The drawings include the following Figures:



FIG. 1A is a block diagram of a fibre channel network;



FIGS. 1B-1D show block diagrams of fibre channel fabric switch elements, used according to one aspect of the present invention;



FIG. 2 is a block diagram of a switch chassis used according to one aspect of the present invention;



FIG. 3 shows a block diagram of a system in a receive port for assigning virtual lanes based on hop count, according to one aspect of the present invention;



FIG. 4 is a block diagram showing a system in a transmit port for using virtual lanes based on hop count, according to one aspect of the present invention;



FIG. 5 is a block diagram of a credit control module, used according to one aspect of the present invention;



FIG. 6 shows a block diagram for illustrating deadlock in a fibre channel fabric;



FIG. 7 is a flow diagram for using virtual lanes, according to one aspect of the present invention;



FIG. 8 is a flow diagram for transmitting frames using virtual lane assignment, according to one aspect of the present invention;



FIG. 9 is a flow diagram for VC_RDY processing, according to one aspect of the present invention;



FIG. 10 is a flow diagram for processing frames at a receive port, according to one aspect of the present invention; and



FIG. 11 is a flow diagram for handling frames in a transmit port, according to one aspect of the present invention.





DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

Definitions:


The following definitions are provided as they are typically (but not exclusively) used in the fibre channel environment, implementing the various adaptive aspects of the present invention.


“D_ID”: 24-bit fibre channel header field that contains destination address.


“EOF”: End of Frame


“E-Port”: A fabric expansion port that attaches to another Interconnect port to create an Inter-Switch Link.


“F-Port”: A port to which non-loop N_Ports are attached to a fabric and does not include FL_ports.


“Fibre channel ANSI Standard”: The standard (incorporated herein by reference in its entirety) describes the physical interface, transmission and signaling protocol of a high performance serial link for support of other high level protocols associated with IPI, SCSI, IP, ATM and others.


“FC-1”: Fibre channel transmission protocol, which includes serial encoding, decoding and error control.


“FC-2”: Fibre channel signaling protocol that includes frame structure and byte sequences.


“FC-3”: Defines a set of fibre channel services that are common across plural ports of a node.


“FC-4”: Provides mapping between lower levels of fibre channel, IPI and SCSI command sets, HIPPI data framing, IP and other upper level protocols.


“Fabric”: The structure or organization of a group of switches, target and host devices (NL_Port, N_ports etc.).


“Fabric Topology”: A topology where a device is directly attached to a fibre channel fabric that uses destination identifiers embedded in frame headers to route frames through a fibre channel fabric to a desired destination.


“FL_Port”: A L_Port that is able to perform the function of a F_Port, attached via a link to one or more NL_Ports in an Arbitrated Loop topology.


“Inter-Switch Link” (“ISL”): A Link directly connecting the E_port of one switch to the E_port of another switch.


Port: A general reference to N.Sub._-- Port or F.Sub._--Port.


“L_Port”: A port that contains Arbitrated Loop functions associated with the Arbitrated Loop topology.


“N-Port”: A direct fabric attached port.


“NL_Port”: A L_Port that can perform the function of a N_Port.


“S_ID”: 24 bit fibre channel header field that contains the source address of a frame.


“SOF”: Start of Frame


“Switch”: A fabric element conforming to the Fibre Channel Switch standards.


“VL” (Virtual Lane): A virtual portion of the data path between a source and destination port each having independent buffer to buffer flow control.


To facilitate an understanding of the preferred embodiment, the general architecture and operation of a fibre channel system will be described. The specific architecture and operation of the preferred embodiment will then be described with reference to the general architecture of the fibre channel system.



FIG. 1A is a block diagram of a fibre channel system 100 implementing the methods and systems in accordance with the adaptive aspects of the present invention. System 100 includes plural devices that are interconnected. Each device includes one or more ports, classified as node ports (N_Ports), fabric ports (F_Ports), and expansion ports (E_Ports). Node ports may be located in a node device, e.g. server 103, disk array 105 and storage device 104. Fabric ports are located in fabric devices such as switch 101 and 102. Arbitrated loop 106 may be operationally coupled to switch 101 using arbitrated loop ports (FL_Ports).


The devices of FIG. 1A are operationally coupled via “links” or “paths”. A path may be established between two N_ports, e.g. between server 103 and storage 104. A packet-switched path may be established using multiple links, e.g. an N-Port in server 103 may establish a path with disk array 105 through switch 102.



FIG. 1B is a block diagram of a 20-port ASIC fabric element according to one aspect of the present invention. FIG. 1B provides the general architecture of a 20-channel switch chassis using the 20-port fabric element. Fabric element includes ASIC 20 with non-blocking fibre channel class 2 (connectionless, acknowledged) and class 3 (connectionless, unacknowledged) service between any ports. It is noteworthy that ASIC 20 may also be designed for other fibre channel classes of service, within the scope and operation of the present invention as described herein.


The fabric element of the present invention is presently implemented as a single CMOS ASIC, and for this reason the term “fabric element” and ASIC are used interchangeably to refer to the preferred embodiments in this specification. Although FIG. 1B shows 20 ports, the present invention is not limited to any particular number of ports.


ASIC 20 has 20 ports numbered in FIG. 1B as GL0 through GL19. These ports are generic to common Fibre Channel port types, for example, F_Port, FL_Port and E-Port. In other words, depending upon what it is attached to, each GL_Port can function as any type of port. Also, the GL_Port may function as a special port useful in fabric element linking, as described below.


For illustration purposes only, all GL_Ports are drawn on the same side of ASIC 20 in FIG. 1B. However, the ports may be located on both sides of ASIC 20 as shown in other figures. This does not imply any difference in port or ASIC design. Actual physical layout of the ports will depend on the physical layout of the ASIC.


Each port GL0-GL19 has transmit and receive connections to switch crossbar 50. One connection is through receive buffer 52, which functions to receive and temporarily hold a frame during a routing operation. The other connection is through a transmit buffer 54.


Switch crossbar 50 includes a number of switch crossbars for handling specific types of data and data flow control information. For illustration purposes only, switch crossbar 50 is shown as a single crossbar. Switch crossbar 50 is a connectionless crossbar (packet switch) of known conventional design, sized to connect 21×21 paths. This is to accommodate 20 GL_Ports plus a port for connection to a fabric controller, which may be external or internal to ASIC 20.


In the preferred embodiments of switch chasis described herein, the fabric controller is a firmware-programmed microprocessor, also referred to as the input/out processor (“IOP”). IOP 66 is shown in FIG. 1C as a part of a switch chassis utilizing one or more of ASIC 20. As seen in FIG. 1B, bi-directional connection to IOP 66 is routed through path 67, which connects internally to a control bus 60. Transmit buffer 56, receive buffer 58, control register 62 and Status register 64 connect to bus 60. Transmit buffer 56 and receive buffer 58 connect the internal connectionless switch crossbar 50 to IOP 66 so that it can source or sink frames.


Control register 62 receives and holds control information from IOP 66, so that IOP 66 can change characteristics or operating configuration of ASIC 20 by placing certain control words in register 62. IOP 66 can read status of ASIC 20 by monitoring various codes that are placed in status register 64 by monitoring circuits (not shown).



FIG. 1C shows a 20-channel switch chassis S2 using ASIC 20 and IOP 66. S2 will also include other elements, for example, a power supply (not shown). The 20 GL_Ports correspond to channel C0-C19. Each GL_Port has a serial/deserializer (SERDES) designated as S0-S19. Ideally, the SERDES functions are implemented on ASIC 20 for efficiency, but may alternatively be external to each GL_Port.


Each GL_Port may have an optical-electric converter, designated as OE0-OE19 connected with its SERDES through serial lines, for providing fibre optic input/output connections, as is well known in the high performance switch design. The converters connect to switch channels C0-C19. It is noteworthy that the ports can connect through copper paths or other means instead of optical-electric converters.



FIG. 1D shows a block diagram of ASIC 20 with sixteen GL_Ports designated as GL0-GL15 and four 10G port control modules designated as XG0-XG3. ASIC 20 include a control port 62A that is coupled to IOP 66 through a PCI connection 66A.


IOP 66 is also shown in FIG. 2 as a part of a switch chasis 201, containing switch ports 204, 207, 210 and 215. Each port as described above has a transmit port (segment), for example, 205, 208, 211 and 213, and receive port (segment), for example, 206, 209, 212 and 214.


Transmit ports and receive ports are connected by switch crossbar 50 so that they can transfer frames. IOP 66 controls and configures the switch ports.


In one aspect of the present invention, dividing frame traffic on ISLs into virtual lanes by assigning virtual lanes based on the number of hops to a destination switch, as described below reduces deadlock. Each virtual lane has its own buffer-to-buffer credit scheme. The term hop count means the number of ISLs a frame has to traverse before it reaches a destination switch.


To reduce and/or avoid deadlock in fibre channel switches, the following port requirements are used:


A receive port has receive buffers at least equal to the largest number of hops to a destination as seen by the transmit port of the switch that receives a frame. A receive buffer is also reserved for each hop count.


The hop count for frames can be derived from the data exchanged by switches using the standard FSPF protocol to set up routing within the Fabric, as described in the fibre channel standard, FC-SW-3, incorporated herein by reference in its entirety.


The transmit and receive ports assign a virtual lane to each hop count.


Each virtual lane is assigned some buffer-to-buffer credit. The total credit for all the virtual lanes is less than or equal to the total number of receive buffers available at a receive port.


Frames queued for transmissions are assigned a virtual lane and each hop count has a virtual lane.


Frames are transmitted if credit is available for its virtual lane.


Receive ports assign a virtual lane for the received frames. In one example, virtual lanes are assigned based on the hop count to a destination switch. If the destination is within the switch that received the frame, then the hop count is 0.


When a receive port empties a receive buffer, making it available for another frame, it sends a VC_RDY (n) primitive to the other end of the link. The VC_RDY contains the number of the virtual lane of the frame just processed. The fibre channel standard, FC-FS (incorporated herein by reference in its entirety) describes the VC_RDY primitive signal.


Using virtual lanes as discussed above, keeps the receive buffers of an ISL from filling up with frames for the same destination and provides receive buffers space for frames to other destination.


The following sequence shows how frames are delivered, using one aspect of the present invention:


Frames arriving on an ISL addressed to a particular switch can empty its receive buffers for virtual lane 0 and return VC_RDY (0) to the sender.


A switch that is 1 hop away from a destination switch (for example, switch 2 if the destination switch is switch 3 for a frame sent from switch 1) gets VC_RDY (0). In this example, this will allow switch 2 to empty the receive buffer for frames received from other switches.


During the exchange of ELP messages (fibre channel standard log-in messages) to log in the ISL ports (per FC-SW-3 standard, incorporated herein by reference in its entirety) virtual lanes and hop counts in the ELP messages can be used for flow control. If both ends of the ISL agree, the virtual lane flow control option is used. Since the virtual lane assignment is derived from the hop count, there is no need to negotiate virtual lane assignments.


If the receive port on an ISL receives a frame that it cannot route, it returns a VC_RDY (255) to the sender after the receive buffer is emptied. If a VC_RDY (255) is received, the credit is allocated to the lowest numbered virtual lane that does not have maximum transmit credit available. If any VC_RDY(n) is received where virtual lane n does not exist or is already at maximum transmit credit, the credit is allocated the same way.



FIG. 3 shows how received frames are processed using Virtual Lanes, according to one aspect of the present invention. The Fibre Channel header D_ID field 301A and a look-up table in logic 302 is used to look up the hop count for a frame based on the destination. The hop count number is used to assign a Virtual Lane (302A). The look-up table in logic 302 is loaded with data derived from the standard “FSPF” routing algorithm to determine the hop count. The frame and the assigned Virtual Lane 302A are stored in receive buffers 301.


When a frame (301A) is moved out of a receive buffer to a transmit port, receive buffer 301 sends a signal 303 to the transmit port. If the port is an ISL using the deadlock prevention process of the present invention, the flow control signal 303 is a VC_RDY primitive containing the assigned virtual lane (302A) when the frame was received.



FIG. 4 shows a block diagram of logic 400 used in flow control for a transmit port using virtual Lanes (in this example, 4 virtual lanes) for reducing and/or avoiding deadlocks, according to one aspect of the present invention. Logic 400 can be used for ISLs (E-ports) that connect switches. Frames are queued in queue 401 and are assigned a Virtual Lane (401A).


In one aspect of the present invention, the assigned Virtual Lane 401A is one less than the Virtual Lane assigned by the receive port (303, FIG. 3). The assigned Virtual Lane 401A is used by multiplexer 403 to determine which credit control output from credit control module 402 is used to determine if a frame has available credit for transmission. Transmit control module 404 determines if a frame is available for transmission and credit is available. If a frame and credit is available, then frame 405 is transmitted to its destination.



FIG. 5 shows a block diagram of credit control module 402, according to one aspect of the present invention. Credit control module 402 has an increment selector 501 and decrement selector 502 for increasing and decreasing counters 503. Counter 503 maintains count for each virtual lane, for example, VL0, VL1, VL2 and VL3. Selector 501 increments a virtual lane credit count based on 501B, i.e., the VL of a frame that is transmitted. Selector 501 also receives input 501A from transmit control module 404 which indicates when a frame has been sent.


If a VC_RDY 502A is received from a receive buffer, then selector 502 decrements the value of the appropriate counter 503. Selector 502 also receives the Virtual Lane associated with the VC_RDY (502) from the receive buffer (similar to 303, FIG. 3).


Counter(s) 503 maintain(s) count for the virtual lanes VL0, VL1, VL2 and VL3. In one aspect of the present invention, each virtual lane may have a pre-programmed maximum count value that is stored in counters 504.


Logic (also referred to as “compare module”) 505 compares the maximum count value for virtual lane 0 to determine if credit is available on virtual lane 0. Logic 506-508 performs the same function for virtual lanes 1, 2 and 3, respectively. Compare modules 505-508 generate signals 505A-505D indicating if credit is available for a particular Virtual Lane to transmit a frame.


To illustrate the adaptive aspects of the present invention separate counters have been shown, however, the present invention is not limited to any particular number of counters. For example, logic with a single counter may be used to compare the maximum count (504) and the count (503) for each lane.


In another aspect of this invention, other queuing methods could be used instead of the one described for this embodiment. For instance, a transmit port may have a transmit queue for each Virtual Lane, and/or for each receive port.



FIG. 7 shows a process flow diagram, according to one aspect of the present invention using virtual lanes for frame transmission.


In step S700, the process selects a particular virtual lane, for example, virtual lane 0. In step S701, the process determines if the credit used for a particular virtual lane (for example, virtual lane 0) is less than a maximum programmed amount or a particular value (FIG. 5, 504). This is performed by logic 505-508, depending upon which lane is selected. In the foregoing example, for VL0, it is logic 505. If virtual lane credit exceeds the maximum count, then in step S705, the process selects the next available virtual lane (for example, virtual lane 1). In step S706, the process determines if the selected virtual lane has used it's maximum credit. If yes, the process reverts back to step S700, otherwise the process moves to step S701.


In step S702, the process determines if a frame is available for the selected virtual lane (i.e. the lane that is selected in step S701 or S706). If a frame is not available, the process moves to step S705.


If a frame is available in step S702, the frame is sent in step S703 (for example, 505A), and then in step S704, the credit counter for the virtual lane is incremented by selector 501 using one of the counters 503.



FIG. 8 provides a flow diagram for selecting a virtual lane, according to one aspect of the present invention. In step S800, the process determines the hop count for a frame's D_ID. In step S801, the process sets the virtual lane of a frame (401A). In one example, the virtual lane is one less than the hop count.



FIG. 9 shows a flow diagram for processing VC_RDY primitives, according to one aspect of the present invention. In step S900, the process uses a VC_RDY virtual lane number to index virtual lane credit that has been used for a particular frame. This information comes as 502B to selector 502 from the receive port.


In step S901, the process determines if all the credit for a particular virtual lane has been used. If yes, then in step S903, the process finds the next virtual lane with non-zero credit.


If in step S901, virtual lane credit is not equal to zero, then in step S902, selector 502 decrements the virtual lane credit value that has been used.



FIG. 10 shows a flow diagram for processing frame in the receive port of a switch, according to one aspect of the present invention. In step S1000, the process receives frame D-ID 301A. In step S1001, the process determines the hop count for the frame. This can be obtained by using the standard FSPF algorithm.


In step S1002, the process assigns a virtual lane based on the hop count. If the frame is destined for the same switch, the virtual lane is zero.


In step S1003, the receive port sends the frame to the transmit segment and in step S1004, a VC_RDY primitive is sent to the transmit port with the VL assignment value (502B).



FIG. 11 is an overall process flow diagram for sending frames from the transmit port of a switch. In step 1100, the process assigns a virtual lane for a frame that is queued (401A).


In step S1101, the process determines if credit is available for a particular virtual lane. This is performed by credit control module 402, as described above.


In step S1102, a frame is sent if credit is available.


In one aspect, the present invention reduces/prevents the deadlock by separating frames queued for transmission into virtual lanes, each with its own transmit queue and flow control. Flow control uses the Fibre Channel VC_RDY primitive signal to give separate flow control signals to each virtual lane. Also, no frames are discarded to reduce/avoid deadlock.


Although the present invention has been described with reference to specific embodiments, these embodiments are illustrative only and not limiting. Many other applications and embodiments of the present invention will be apparent in light of this disclosure and the following claims.

Claims
  • 1. A method for processing fibre channel frames, comprising: (a) providing a plurality of virtual lanes to a fibre channel switch element having a plurality of ports, each of the virtual lane configured to transmit one or more frames between a source and a destination;(b) receiving a fibre channel frame at a receive segment of one of the plurality of ports of the fibre channel switch element;(c) determining a hop count for the frame based on a destination identifier value (D_ID) included in a header of the fibre channel frame at the receive segment, with a hop count value indicative of a frame destined for another port of the fibre channel switch element;(d) assigning a virtual lane for the frame based on the determined hop count at the receive segment;(e) modifying the assigned virtual lane at the transmit segment of one of the plurality of ports of the fibre channel switch element if the assigned virtual lane by the receive segment is not indicative of a frame destined for another port of the fibre channel switch element, and if the assigned virtual lane is indicative of a frame destined for another port of the fibre channel switch element, no virtual lane is assigned to the frame at the transmit segment;(e) determining if the assigned virtual lane at the transmit segment has available credit to transmit the fibre channel frame; and(f) transmitting the fibre channel frame using the assigned virtual lane at the transmit segment, if credit is available.
  • 2. The method of claim 1, further comprising: incrementing a counter value for counting available credit for the assigned virtual lane at the transmit segment, if the fibre channel frame is sent using the assigned virtual lane.
  • 3. The method of claim 1, wherein the assigned virtual lane at the transmit segment has a programmed maximum credit count.
  • 4. The method of claim 1, wherein if all credit for the assigned virtual lane at the transmit segment has been used, then a next virtual lane is selected with non-zero credit.
  • 5. A method for processing fibre channel frames using a fibre channel switch element having a plurality of ports, each port having a receive segment and a transmit segment, comprising: (a) providing a plurality of virtual lanes to the fibre channel switch element, each of the virtual lanes configured to transmit one or more fibre channel frames between a source and a destination;(b) receiving a fibre channel frame at a receive segment of one of the plurality of ports of the fibre channel switch element;(c) determining a hop count for the fibre channel frame at the receive segment, based on a destination identifier value (D_ID) included in a header of the fibre channel frame, with a hop count value indicative of a frame destined for another port of the fibre channel switch element;(d) assigning a virtual lane to the received fibre channel frame at the receive segment, based on the determined hop count for the frame;(e) sending a primitive to a transmit segment with the assigned virtual lane to transmit the fibre channel frame to a destination; and(f) modifying the assigned virtual lane at the transmit segment if the assigned virtual lane by the receive segment is not indicative of a frame destined for another port of the fibre channel switch element, and if the assigned virtual lane is indicative of frame destined for another port of the fibre channel switch element , no virtual lane is assigned at the transmit segment.
  • 6. The method of claim 5, further comprising: determining if credit is available for the assigned virtual lane at the transmit segment to send the fibre channel frame using the assigned virtual lane.
  • 7. The method of claim 6, wherein a credit count for the assigned virtual lane is maintained by a counter and the assigned virtual lane has a maximum credit count.
  • 8. The method of claim 5, wherein a counter value is decremented after the primitive is received by the transmit segment.
  • 9. The method of claim 6, wherein the assigned virtual lane value at the transmit segment is less than the assigned virtual lane in the receive segment.
  • 10. A system for processing fibre channel frames, comprising: a fibre channel switch element having a plurality of ports, wherein each port includes a receive segment for receiving fibre channel frames and a transmit segment for transmitting fibre channel frames;a plurality of virtual lanes for the fibre channel switch element, each of the plurality of virtual lanes configured to transmit one or more fibre channel frames between a source and a destination; anda look up table to assign a virtual lane to a fibre channel frame received at the receive segment of a port from among the plurality of ports; wherein the virtual lane is assigned based on a hop count, and the hop count is based on a destination identifier value (D_ID) included in a header of the received fibre channel frame, with a hop count value indicative of a frame destined for another port of the fibre channel switch element;wherein after the virtual lane is assigned based on the hop count value by the receive segment, the receive segment sends a primitive to a transmit segment, the primitive including information regarding the assigned virtual lane;wherein the transmit segment modifies the assigned virtual lane so as to assign a virtual lane to fibre channel frame if the assigned virtual lane is different than the value indicative of a frame destined for another port of the fibre channel switch element, and if the assigned virtual lane is indicative of a frame destined for another port of the fibre channel switch element, no virtual lane is assigned at the transmit segment; andwherein the transmit segment includes a credit control module that determines if the assigned virtual lane can transmit a frame based on available credit.
  • 11. The system of claim 10, wherein the credit control module increments a credit count for the assigned virtual lane if the fibre channel frame is transmitted from the assigned virtual lane.
  • 12. The system of claim 10, wherein the credit control module decrements a credit count for the assigned virtual lane if a VC_RDY primitive is received.
  • 13. The system of claim 10, wherein the credit control module maintains a maximum count for every virtual lane used for transmitting frames.
  • 14. The system of claim 11, wherein the credit control module uses an increment selector to increment credit count.
  • 15. The system of claim 12, wherein the credit control module uses a decrement selector to decrease the credit count.
  • 16. The system of claim 10, wherein the credit control module uses compare logic to compare available credit for the assigned virtual lane at any given time with a programmed maximum credit value for the assigned virtual lane.
  • 17. A fibre channel fabric switch element for processing fibre channel frames, comprising: a plurality of ports for receiving and transmitting fibre channel frames, wherein each port includes a receive segment for receiving fibre channel frames and a transmit segment for transmitting fibre channel frames;a plurality of virtual lanes for the fibre channel switch element, each of the plurality of virtual lanes configured to transmit one or more fibre channel frames between a source and a destination; anda look up table to assign a virtual lane to a fibre channel frame received at the receive segment of a port from among the plurality of ports; wherein the virtual lane is assigned based on a hop count, the hop count is based on a destination identifier value (D_ID) included in a header of the received fibre channel frame, with a hop count value indicative of a frame destined for another port of the fibre channel switch element;wherein after the virtual lane is assigned based on the hop count, the receive segment sends a primitive to a transmit segment, the primitive including information regarding the assigned virtual lane;wherein the transmit segment modifies the assigned virtual lane so as to assign a virtual lane to fibre channel frame if the hop count value is different than the value indicative of a frame destined for another port of the fibre channel switch element, and if the assigned virtual lane is indicative of a frame destined for another port of the fibre channel switch element, no virtual lane is assigned at the transmit segment; andwherein the transmit segment includes a credit control module that determines if the assigned virtual lane can transmit a frame based on available credit.
  • 18. The switch element of claim 17, wherein the credit control module increments a credit count for the assigned virtual lane if the fibre channel frame is transmitted from the assigned virtual lane.
  • 19. The switch element of claim 17, wherein the credit control module decrements a credit count for the assigned virtual lane if a VC_RDY primitive is received.
  • 20. The switch element of claim 17, wherein the credit control module maintains a maximum count for every virtual lane used for transmitting frames.
  • 21. The switch element of claim 18, wherein the credit control module uses an increment selector to increment credit count.
  • 22. The switch element of claim 19, wherein the credit control module uses a decrement selector to decrease the credit count.
  • 23. The switch element of claim 17, wherein the credit control module uses compare logic to compare available credit for the assigned virtual lane at any given time with a programmed maximum credit value for the assigned virtual lane.
  • 24. The method of claim 1, wherein the hop count value indicative of a frame destined for another port of the fibre channel switch element is zero.
  • 25. The method of claim 5, wherein the hop count value indicative of a frame destined for another port of the fibre channel switch element is zero.
  • 26. The system of claim 10, wherein the hop count value indicative of a frame destined for another port of the fibre channel switch element is zero.
  • 27. The switch element of claim 17, wherein the hop count value indicative of a frame destined for another port of the fibre channel switch clement is zero.
CROSS REFERENCE TO RELATED APPLICATIONS

This application claims priority to U.S. provisional patent application Ser. No. 60/542,241, filed on Feb. 05, 2004, the disclosure of which is incorporated herein by reference in its entirety.

US Referenced Citations (353)
Number Name Date Kind
4081612 Hafner Mar 1978 A
4162375 Schilichte Jul 1979 A
4200929 Davidjuk et al. Apr 1980 A
4258418 Heath Mar 1981 A
4344132 Dixon et al. Aug 1982 A
4382159 Bowditch May 1983 A
4425640 Philip et al. Jan 1984 A
4546468 Christmas et al. Oct 1985 A
4569043 Simmons et al. Feb 1986 A
4691296 Struger Sep 1987 A
4716561 Angell et al. Dec 1987 A
4725835 Schreiner et al. Feb 1988 A
4821034 Anderson et al. Apr 1989 A
4860193 Bentley et al. Aug 1989 A
4964119 Endo et al. Oct 1990 A
4980857 Walter et al. Dec 1990 A
5025370 Koegel et al. Jun 1991 A
5051742 Hullett et al. Sep 1991 A
5090011 Fukuta et al. Feb 1992 A
5115430 Hahne et al. May 1992 A
5144622 Takiyasu et al. Sep 1992 A
5258751 DeLuca et al. Nov 1993 A
5260933 Rouse Nov 1993 A
5260935 Turner Nov 1993 A
5280483 Kamoi et al. Jan 1994 A
5291481 Doshi et al. Mar 1994 A
5339311 Turner Aug 1994 A
5367520 Cordell Nov 1994 A
5390173 Spinney et al. Feb 1995 A
5425022 Clark et al. Jun 1995 A
5537400 Diaz et al. Jul 1996 A
5568165 Kimura Oct 1996 A
5568167 Galbi et al. Oct 1996 A
5579443 Tatematsu et al. Nov 1996 A
5590125 Acampora et al. Dec 1996 A
5594672 Hicks Jan 1997 A
5598541 Malladi Jan 1997 A
5610745 Bennett Mar 1997 A
5666483 McClary Sep 1997 A
5677909 Heide Oct 1997 A
5687172 Cloonan et al. Nov 1997 A
5732206 Mendel Mar 1998 A
5748612 Stoevhase et al. May 1998 A
5757771 Li et al. May 1998 A
5764927 Murphy et al. Jun 1998 A
5768271 Seid et al. Jun 1998 A
5768533 Ran Jun 1998 A
5784358 Smith et al. Jul 1998 A
5790545 Holt et al. Aug 1998 A
5790840 Bulka et al. Aug 1998 A
5818842 Burwell et al. Oct 1998 A
5821875 Lee et al. Oct 1998 A
5822300 Johnson et al. Oct 1998 A
5825748 Barkey et al. Oct 1998 A
5828475 Bennett et al. Oct 1998 A
5835748 Orenstein et al. Nov 1998 A
5835752 Chiang et al. Nov 1998 A
5850386 Anderson et al. Dec 1998 A
5892604 Yamanaka et al. Apr 1999 A
5894560 Carmichael et al. Apr 1999 A
5925119 Maroney Jul 1999 A
5936442 Liu et al. Aug 1999 A
5954796 McCarty et al. Sep 1999 A
5974547 Klimenko Oct 1999 A
5978379 Chan et al. Nov 1999 A
5987028 Yang et al. Nov 1999 A
5999528 Chow et al. Dec 1999 A
6009226 Tsuji et al. Dec 1999 A
6011779 Wills Jan 2000 A
6014383 McCarty Jan 2000 A
6021128 Hosoya et al. Feb 2000 A
6031842 Trevitt et al. Feb 2000 A
6046979 Bauman Apr 2000 A
6047323 Krause Apr 2000 A
6061360 Miller et al. May 2000 A
6081512 Muller et al. Jun 2000 A
6108738 Chambers et al. Aug 2000 A
6108778 LaBerge Aug 2000 A
6118776 Berman Sep 2000 A
6118791 Fichou et al. Sep 2000 A
6128292 Kim et al. Oct 2000 A
6131123 Hurst et al. Oct 2000 A
6134127 Kirchberg Oct 2000 A
6144668 Bass et al. Nov 2000 A
6147976 Shand et al. Nov 2000 A
6151644 Wu Nov 2000 A
6158014 Henson Dec 2000 A
6160813 Banks et al. Dec 2000 A
6185203 Berman Feb 2001 B1
6201787 Baldwin et al. Mar 2001 B1
6209089 Selitrennikoff et al. Mar 2001 B1
6229822 Chow et al. May 2001 B1
6230276 Hayden May 2001 B1
6240096 Book May 2001 B1
6252891 Perches Jun 2001 B1
6253267 Kim et al. Jun 2001 B1
6278708 Von Hammerstein et al. Aug 2001 B1
6286011 Velamuri et al. Sep 2001 B1
6289002 Henson et al. Sep 2001 B1
6301612 Selitrennikoff et al. Oct 2001 B1
6307857 Yokoyama et al. Oct 2001 B1
6308220 Mathur Oct 2001 B1
6311204 Mills et al. Oct 2001 B1
6324181 Wong et al. Nov 2001 B1
6330236 Ofek et al. Dec 2001 B1
6333932 Kobayasi et al. Dec 2001 B1
6335935 Kadambi et al. Jan 2002 B2
6343324 Hubis et al. Jan 2002 B1
6353612 Zhu et al. Mar 2002 B1
6370605 Chong Apr 2002 B1
6397360 Bruns May 2002 B1
6401128 Stai et al. Jun 2002 B1
6404749 Falk Jun 2002 B1
6411599 Blanc et al. Jun 2002 B1
6411627 Hullett et al. Jun 2002 B1
6418477 Verma Jul 2002 B1
6421342 Schwartz et al. Jul 2002 B1
6421711 Blumenau et al. Jul 2002 B1
6424658 Mathur Jul 2002 B1
6438628 Messerly et al. Aug 2002 B1
6449274 Holden et al. Sep 2002 B1
6452915 Jorgensen Sep 2002 B1
6457090 Young Sep 2002 B1
6467008 Gentry et al. Oct 2002 B1
6470026 Pearson et al. Oct 2002 B1
6480500 Erimli et al. Nov 2002 B1
6509988 Saito Jan 2003 B1
6522656 Gridley Feb 2003 B1
6532212 Soloway et al. Mar 2003 B1
6553036 Miller et al. Apr 2003 B1
6563796 Saito May 2003 B1
6570850 Gutierrez et al. May 2003 B1
6570853 Johnson et al. May 2003 B1
6594231 Byham et al. Jul 2003 B1
6597691 Anderson et al. Jul 2003 B1
6597777 Ho Jul 2003 B1
6606690 Padovano Aug 2003 B2
6614796 Black et al. Sep 2003 B1
6622206 Kanamaru et al. Sep 2003 B1
6629161 Matsuki et al. Sep 2003 B2
6643298 Brunheroto et al. Nov 2003 B1
6657962 Barri et al. Dec 2003 B1
6684209 Ito et al. Jan 2004 B1
6697359 George Feb 2004 B1
6697368 Chang et al. Feb 2004 B2
6697914 Hospodor et al. Feb 2004 B1
6718497 Whitby-Strevens Apr 2004 B1
6738381 Agnevik et al. May 2004 B1
6744772 Eneboe et al. Jun 2004 B1
6760302 Ellinas et al. Jul 2004 B1
6765871 Knobel et al. Jul 2004 B1
6779083 Ito et al. Aug 2004 B2
6785241 Lu et al. Aug 2004 B1
6807181 Weschler Oct 2004 B1
6816492 Turner et al. Nov 2004 B1
6816750 Klaas Nov 2004 B1
6859435 Lee et al. Feb 2005 B1
6865155 Wong et al. Mar 2005 B1
6865157 Scott et al. Mar 2005 B1
6888831 Hospodor et al. May 2005 B1
6901072 Wong May 2005 B1
6904507 Gil Jun 2005 B2
6922408 Bloch et al. Jul 2005 B2
6928470 Hamlin Aug 2005 B1
6934799 Acharya et al. Aug 2005 B2
6941357 Nguyen et al. Sep 2005 B2
6941482 Strong Sep 2005 B2
6952659 King et al. Oct 2005 B2
6968463 Pherson et al. Nov 2005 B2
6975627 Parry et al. Dec 2005 B1
6987768 Kojima et al. Jan 2006 B1
6988130 Blumenau et al. Jan 2006 B2
6988149 Odenwald Jan 2006 B2
7000025 Wilson Feb 2006 B1
7002926 Eneboe et al. Feb 2006 B1
7010607 Bunton Mar 2006 B1
7024410 Ito et al. Apr 2006 B2
7031615 Genrile Apr 2006 B2
7039070 Kawakatsu May 2006 B2
7039870 Takaoka et al. May 2006 B2
7047326 Crosbie et al. May 2006 B1
7050392 Valdevit May 2006 B2
7051182 Blumenau et al. May 2006 B2
7055068 Riedl May 2006 B2
7061862 Horiguchi et al. Jun 2006 B2
7061871 Sheldon et al. Jun 2006 B2
7076569 Bailey et al. Jul 2006 B1
7092374 Gubbi Aug 2006 B1
7110394 Chamdani et al. Sep 2006 B1
7120728 Krakirian et al. Oct 2006 B2
7123306 Goto et al. Oct 2006 B1
7124169 Shimozono et al. Oct 2006 B2
7150021 Vajjhala et al. Dec 2006 B1
7151778 Zhu et al. Dec 2006 B2
7171050 Kim Jan 2007 B2
7185062 Lolayekar et al. Feb 2007 B2
7187688 Garmire et al. Mar 2007 B2
7188364 Volpano Mar 2007 B2
7190667 Susnow et al. Mar 2007 B2
7194538 Rabe et al. Mar 2007 B1
7200108 Beer et al. Apr 2007 B2
7209478 Rojas et al. Apr 2007 B2
7215680 Mullendore et al. May 2007 B2
7221650 Cooper et al. May 2007 B1
7230929 Betker et al. Jun 2007 B2
7233570 Gregg Jun 2007 B2
7233985 Hahn et al. Jun 2007 B2
7245613 Winkles et al. Jul 2007 B1
7245627 Goldenberg et al. Jul 2007 B2
7248580 George et al. Jul 2007 B2
7263593 Honda et al. Aug 2007 B2
7266286 Tanizawa et al. Sep 2007 B2
7269131 Cashman et al. Sep 2007 B2
7269168 Roy et al. Sep 2007 B2
7277431 Walter et al. Oct 2007 B2
7287063 Baldwin et al. Oct 2007 B2
7292593 Winkles et al. Nov 2007 B1
7315511 Morita et al. Jan 2008 B2
7327680 Kloth Feb 2008 B1
7346707 Erimli Mar 2008 B1
7352740 Hammons et al. Apr 2008 B2
7397788 Mies et al. Jul 2008 B2
7406034 Cometto et al. Jul 2008 B1
7443794 George et al. Oct 2008 B2
7460534 Ballenger Dec 2008 B1
7466700 Dropps et al. Dec 2008 B2
7471691 Black et al. Dec 2008 B2
20010011357 Mori Aug 2001 A1
20010022823 Renaud Sep 2001 A1
20010033552 Barrack et al. Oct 2001 A1
20010038628 Ofek et al. Nov 2001 A1
20010043564 Bloch et al. Nov 2001 A1
20010047460 Kobayashi et al. Nov 2001 A1
20020016838 Geluc et al. Feb 2002 A1
20020034178 Schmidt et al. Mar 2002 A1
20020071387 Horiguchi et al. Jun 2002 A1
20020103913 Tawil et al. Aug 2002 A1
20020104039 DeRolf et al. Aug 2002 A1
20020118692 Oberman et al. Aug 2002 A1
20020122428 Fan et al. Sep 2002 A1
20020124124 Matsumoto et al. Sep 2002 A1
20020147560 Devins et al. Oct 2002 A1
20020147843 Rao Oct 2002 A1
20020156918 Valdevit et al. Oct 2002 A1
20020159385 Susnow et al. Oct 2002 A1
20020172195 Pekkala et al. Nov 2002 A1
20020191602 Woodring et al. Dec 2002 A1
20020194294 Blumenau et al. Dec 2002 A1
20020196773 Berman Dec 2002 A1
20030002503 Brewer et al. Jan 2003 A1
20030002516 Boock et al. Jan 2003 A1
20030016683 George et al. Jan 2003 A1
20030021239 Mullendore et al. Jan 2003 A1
20030026267 Oberman et al. Feb 2003 A1
20030026287 Mullendore et al. Feb 2003 A1
20030033487 Pfister et al. Feb 2003 A1
20030035433 Craddock et al. Feb 2003 A1
20030046396 Richter et al. Mar 2003 A1
20030056000 Mullendore et al. Mar 2003 A1
20030063567 Dehart Apr 2003 A1
20030072316 Niu et al. Apr 2003 A1
20030076788 Grabauskas et al. Apr 2003 A1
20030079019 Lolayekar et al. Apr 2003 A1
20030084219 Yao et al. May 2003 A1
20030086377 Berman May 2003 A1
20030091062 Lay et al. May 2003 A1
20030093607 Main et al. May 2003 A1
20030103451 Lutgen et al. Jun 2003 A1
20030112819 Kofoed et al. Jun 2003 A1
20030117961 Chuah et al. Jun 2003 A1
20030118053 Edsall et al. Jun 2003 A1
20030120743 Coatney et al. Jun 2003 A1
20030120791 Weber et al. Jun 2003 A1
20030120983 Vieregge et al. Jun 2003 A1
20030126223 Jenne et al. Jul 2003 A1
20030126242 Chang Jul 2003 A1
20030131105 Czeiger et al. Jul 2003 A1
20030137941 Kaushik et al. Jul 2003 A1
20030139900 Robison Jul 2003 A1
20030172149 Edsall et al. Sep 2003 A1
20030172239 Swank Sep 2003 A1
20030174652 Ebata Sep 2003 A1
20030174721 Black et al. Sep 2003 A1
20030174789 Waschura et al. Sep 2003 A1
20030179709 Huff Sep 2003 A1
20030179748 George et al. Sep 2003 A1
20030189930 Terrell et al. Oct 2003 A1
20030189935 Warden et al. Oct 2003 A1
20030191857 Terrell et al. Oct 2003 A1
20030195983 Krause Oct 2003 A1
20030198238 Westby Oct 2003 A1
20030200315 Goldenberg et al. Oct 2003 A1
20030218986 DeSanti et al. Nov 2003 A1
20030229808 Heintz et al. Dec 2003 A1
20030236953 Grieff et al. Dec 2003 A1
20040013088 Gregg Jan 2004 A1
20040013092 Betker et al. Jan 2004 A1
20040013113 Singh et al. Jan 2004 A1
20040013125 Betker et al. Jan 2004 A1
20040015638 Bryn Jan 2004 A1
20040024831 Yang et al. Feb 2004 A1
20040028038 Anderson et al. Feb 2004 A1
20040054776 Klotz et al. Mar 2004 A1
20040054866 Blumenau et al. Mar 2004 A1
20040057389 Klotz et al. Mar 2004 A1
20040064664 Gil Apr 2004 A1
20040081186 Warren et al. Apr 2004 A1
20040081196 Elliott Apr 2004 A1
20040081394 Biren et al. Apr 2004 A1
20040085955 Walter et al. May 2004 A1
20040085974 Mies et al. May 2004 A1
20040085994 Warren et al. May 2004 A1
20040092278 Diepstraten et al. May 2004 A1
20040100944 Richmond et al. May 2004 A1
20040109418 Fedorkow et al. Jun 2004 A1
20040123181 Moon et al. Jun 2004 A1
20040125799 Buer Jul 2004 A1
20040141518 Milligan et al. Jul 2004 A1
20040141521 George Jul 2004 A1
20040151188 Maveli et al. Aug 2004 A1
20040153526 Haun et al. Aug 2004 A1
20040153566 Lalsangi et al. Aug 2004 A1
20040153914 El-Batal Aug 2004 A1
20040174813 Kasper et al. Sep 2004 A1
20040202189 Arndt et al. Oct 2004 A1
20040208201 Otake Oct 2004 A1
20040218531 Cherian et al. Nov 2004 A1
20040267982 Jackson et al. Dec 2004 A1
20050018673 Dropps et al. Jan 2005 A1
20050023656 Leedy Feb 2005 A1
20050036485 Eilers et al. Feb 2005 A1
20050036499 Dutt et al. Feb 2005 A1
20050036763 Kato et al. Feb 2005 A1
20050047334 Paul et al. Mar 2005 A1
20050073956 Moores et al. Apr 2005 A1
20050076113 Klotz et al. Apr 2005 A1
20050088969 Carlsen et al. Apr 2005 A1
20050108444 Flauaus et al. May 2005 A1
20050111845 Nelson et al. May 2005 A1
20050117522 Basavaiah et al. Jun 2005 A1
20050177641 Yamagami Aug 2005 A1
20050198523 Shanbhag et al. Sep 2005 A1
20060013248 Mujeeb et al. Jan 2006 A1
20060034192 Hurley et al. Feb 2006 A1
20060034302 Peterson Feb 2006 A1
20060047852 Shah et al. Mar 2006 A1
20060074927 Sullivan et al. Apr 2006 A1
20060107260 Motta May 2006 A1
20060143300 See et al. Jun 2006 A1
20060184711 Pettey Aug 2006 A1
20060203725 Paul et al. Sep 2006 A1
20060274744 Nagai et al. Dec 2006 A1
20070206502 Martin et al. Sep 2007 A1
Foreign Referenced Citations (5)
Number Date Country
0649098 Sep 1994 EP
0856969 Jan 1998 EP
WO-9836537 Aug 1998 WO
WO-0195566 Dec 2001 WO
WO03088050 Oct 2003 WO
Related Publications (1)
Number Date Country
20050174942 A1 Aug 2005 US
Provisional Applications (1)
Number Date Country
60542241 Feb 2004 US