расширенные общие приложения (CAKE) (Common Applications Kept Enhanced (CAKE))
OVERRIDING CLASSIFICATION WITH TC FILTERS
CAKE supports overriding of its internal classification of
packets through the tc filter mechanism. Packets can be assigned
to different priority tins by setting the priority
field on the
skb, and the flow hashing can be overridden by setting the
classid
parameter.
Tin override
To assign a priority tin, the major number of the
priority field needs to match the qdisc handle of the cake
instance; if it does, the minor number will be interpreted as the
tin index. For example, to classify all ICMP packets as 'bulk',
the following filter can be used:
# tc qdisc replace dev eth0 handle 1: root cake diffserv3
# tc filter add dev eth0 parent 1: protocol ip prio 1 \
u32 match icmp type 0 0 action skbedit priority 1:1
Flow hash override
To override flow hashing, the classid can be set. CAKE
will interpret the major number of the classid as the host hash
used in host isolation mode, and the minor number as the flow
hash used for flow-based queueing. One or both of those can be
set, and will be used if the relevant flow isolation parameter is
set (i.e., the major number will be ignored if CAKE is not
configured in hosts mode, and the minor number will be ignored if
CAKE is not configured in flows mode).
This example will assign all ICMP packets to the first queue:
# tc qdisc replace dev eth0 handle 1: root cake
# tc filter add dev eth0 parent 1: protocol ip prio 1 \
u32 match icmp type 0 0 classid 0:1
If only one of the host and flow overrides is set, CAKE will
compute the other hash from the packet as normal. Note, however,
that the host isolation mode works by assigning a host ID to the
flow queue; so if overriding both host and flow, the same flow
cannot have more than one host assigned. In addition, it is not
possible to assign different source and destination host IDs
through the override mechanism; if a host ID is assigned, it will
be used as both source and destination host.