A method, comprising the following steps: appending a first data packet to a first data stream queue on a first priority ring and a second data packet to a second data stream queue on a second priority ring, wherein data stream queues (111, 112, 113, 114) on the first priority ring correspond to a first priority level and data stream queues (121, 122, 123, 124) on the second priority ring correspond to a second priority level; allocating a quantum of bandwidth to each of the data stream queues; determining a priority level associated with a data packet in a transmission queue; comparing the priority level associated with the data packet in the transmission queue with the first priority level; in response to determining the first priority level is higher than the priority level associated with the data packet in the transmission queue: determining a bandwidth credit for the first data stream queue based on the allocated quantum of bandwidth for the first data stream queue; and determining a sum of the bandwidth credit and a bandwidth deficit, transmitting the first data packet ahead of the data packet in the transmission queue when a sum of the bandwidth credit and the bandwidth deficit for the first data stream queue is greater than a size of the first data packet; and in response to determining the first priority level is not higher than the priority level associated with the data packet in the transmission queue, transmitting the data packet in the transmission queue ahead of the first data packet. appending a first data packet to a first data stream queue on a first priority ring and a second data packet to a second data stream queue on a second priority ring, wherein data stream queues (111, 112, 113, 114) on the first priority ring correspond to a first priority level and data stream queues (121, 122, 123, 124) on the second priority ring correspond to a second priority level; allocating a quantum of bandwidth to each of the data stream queues; determining a priority level associated with a data packet in a transmission queue; comparing the priority level associated with the data packet in the transmission queue with the first priority level; in response to determining the first priority level is higher than the priority level associated with the data packet in the transmission queue: determining a bandwidth credit for the first data stream queue based on the allocated quantum of bandwidth for the first data stream queue; and determining a sum of the bandwidth credit and a bandwidth deficit, transmitting the first data packet ahead of the data packet in the transmission queue when a sum of the bandwidth credit and the bandwidth deficit for the first data stream queue is greater than a size of the first data packet; and determining a bandwidth credit for the first data stream queue based on the allocated quantum of bandwidth for the first data stream queue; and determining a sum of the bandwidth credit and a bandwidth deficit, transmitting the first data packet ahead of the data packet in the transmission queue when a sum of the bandwidth credit and the bandwidth deficit for the first data stream queue is greater than a size of the first data packet; and in response to determining the first priority level is not higher than the priority level associated with the data packet in the transmission queue, transmitting the data packet in the transmission queue ahead of the first data packet.