Patent ID: 7489701

Claim:
A network node for forwarding packet-based traffic, comprising: a plurality of queues; a plurality of queue-specific rate shapers respectively associated with the plurality of queues; a plurality of group-specific rate shapers configured to be associated with groups of the plurality of queues; a group establishment module configured to dedicate a group of said queues to a customer and to associate one of said group-specific rate shapers with said group of queues that is dedicated to said customer; and a scheduler configured to: schedule, in a first round, packets enqueued in the plurality of queues according to the respective plurality of queue-specific rate shapers and the respective group-specific rate shapers; and schedule, in a second round, packets enqueued in the plurality of queues according to the respective group-specific rate shapers; wherein said scheduler is further configured to: schedule, in subrounds of the first round, packets enqueued in the plurality of queues according to a priority respectively associated with each of the queues and schedule, in subrounds of the second round, packets enqueued in the plurality of queues according to the priority respectively associated with each of the queues; wherein the scheduler comprises an individual queue enablement vector for each queue, a group enablement vector for the group of queues, and a result vector for each queue; wherein the individual queue enablement vector indicates which queues are enabled, with a queue being enabled if the queue has not consumed its allocated queue-specific bandwidth; wherein the group enablement vector indicates whether the group is enabled with the group being enabled as long as all of the allocated group-specific bandwidth has not been consumed; and wherein the result vector indicates which queues are enabled for sending packets, wherein in the first round a result vector for a queue indicates a queue is enabled only when both the individual queue enablement vector and the group vector indicate that the queue is enabled and in the second round a result vector for a queue indicates a queue is enabled as long as the group vector indicates that the group is enabled.