In data communication networks, routers, switches, or other appropriate devices are often used to transfer data from a source to a destination. Many high-speed systems typically switch data using switch fabrics with multiple links each connecting a source address to a destination address. If any of the links fail, the data is typically rerouted based on software instructions. Rerouting data in software often slows down the system performance and therefore is undesirable. Furthermore, some of the existing systems use a striped architecture that divides data cells and transfers the cells across multiple links, thus failure in one link may result in exponential performance degradation of the system. It would be useful if data rerouting in the event of a link failure can be performed more efficiently, without further degrading the system's performance. It would also be desirable if the performance degradation of the fabric were more graceful in the event any of its links fail.