* Rahul Hari <4532f3170506101739702e31ad@xxxxxxxxxxxxxx> 2005-06-11 06:09
> I have made some changes to the file sch_gred.c to modify the GRED
> queueing discipline to support the following features:
> 1) The first virtual queue should get absolute priority while
> dequeueing (not caring if the others get starved)
> 2) While in equalise mode and with RIO mode enabled, the packets in
> the first virtual queue should not be counted for calculating the
> qave.
You do not need to modify gred to achieve this, use a prio qdisc
with 2 bands, band 1 covers your "first virtual queue" with a single
red attached, band 2 covers the rest and uses a gred.
> 1) Since the process deals with dequeueing, i have to make changes to
> gred_dequeue only. If t->tab[0] != 0 then we dequeue the packet
> otherwise do not dequeue it.
What you describe above is: only dequeue when DP 0 is configured,
probably not what you want. The only way to prioritize within gred
the way you want is to modify dequeue() that it iterates through
sch->q looking for a skb with tcindex==DP0 and use it instead of
the skb at the queue head.
> 2)
> if (t->eqp && t->grio) {
>
> for (i=0;i<t->DPs;i++) {
> if ((!t->tab[i]) || (i==q->DP) || (i==0))
> continue;
>
> if ((t->tab[i] != q) &&
> (PSCHED_IS_PASTPERFECT(t->tab[i]->qidlestart)))
> qave +=t->tab[i]->qave;
> }
You no longer consider the priority so it won't be wred anymore,
also if (i == q->DP) continue makes a check t->tab[i] != q
unnecessary.
|