A Fiber Channel switch is presented that tracks the congestion status of destination
ports in an XOFF mask at each input. A mapping is maintained between virtual channels
on an ISL and the destination ports to allow changes in the XOFF mask to trigger
a primitive to an upstream port that provides virtual channel flow control. The
XOFF mask is also used to avoid sending frames to a congested port. Instead, these
frames are stored on a single deferred queue and later processed in a manner designed
to maintain frame ordering. A routing system is provided that applies multiple
routing rules in parallel to perform line speed routing. The preferred switch fabric
is cell based, with techniques used to manage path maintenance for variable length
frames and to adapt to varying transmission rates in the system. Finally, the switch
allows data and microprocessor communication to share the same crossbar network.