• T
    sch_cake: Add DiffServ handling · 83f8fd69
    Toke Høiland-Jørgensen 提交于
    This adds support for DiffServ-based priority queueing to CAKE. If the
    shaper is in use, each priority tier gets its own virtual clock, which
    limits that tier's rate to a fraction of the overall shaped rate, to
    discourage trying to game the priority mechanism.
    
    CAKE defaults to a simple, three-tier mode that interprets most code points
    as "best effort", but places CS1 traffic into a low-priority "bulk" tier
    which is assigned 1/16 of the total rate, and a few code points indicating
    latency-sensitive or control traffic (specifically TOS4, VA, EF, CS6, CS7)
    into a "latency sensitive" high-priority tier, which is assigned 1/4 rate.
    The other supported DiffServ modes are a 4-tier mode matching the 802.11e
    precedence rules, as well as two 8-tier modes, one of which implements
    strict precedence of the eight priority levels.
    
    This commit also adds an optional DiffServ 'wash' mode, which will zero out
    the DSCP fields of any packet passing through CAKE. While this can
    technically be done with other mechanisms in the kernel, having the feature
    available in CAKE significantly decreases configuration complexity; and the
    implementation cost is low on top of the other DiffServ-handling code.
    
    Filters and applications can set the skb->priority field to override the
    DSCP-based classification into tiers. If TC_H_MAJ(skb->priority) matches
    CAKE's qdisc handle, the minor number will be interpreted as a priority
    tier if it is less than or equal to the number of configured priority
    tiers.
    Signed-off-by: NToke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    83f8fd69
sch_cake.c 72.0 KB