7. Basic concepts- Qdisc
• Qdisc(Queue discipline)
- Decide which ones to send first, which ones to delay, and which
ones to drop
- class/classful Qdisc: Qdisc with/without configurable internal
subdivision
• Naming convention:
- Kernel: sch_*.c (sch_netem.c, sch_tbf.c )
- iproute2: q_*.c (q_netem.c, q_tbf.c)
8. Qdisc list
• Class Based Queueing (CBQ)
• Hierarchical Token Bucket (HTB)
• Hierarchical Fair Service Curve (HFSC)
• ATM Virtual Circuits (ATM)
• Multi Band Priority Queueing (PRIO)
• Hardware Multiqueue-aware Multi Band Queuing (MULTIQ)
• Random Early Detection (RED)
• Stochastic Fairness Queueing (SFQ)
• True Link Equalizer (TEQL)
• Token Bucket Filter (TBF)
• Generic Random Early Detection (GRED)
• Differentiated Services marker (DSMARK)
• Network emulator (NETEM)
• Deficit Round Robin scheduler (DRR)
• Ingress Qdisc
9. Basic concepts- Classification
• Classification(Filter)
- Used to distinguish among different classes of packets
and process each class in a specific way.
• Naming convention:
- Kernel: cls_*.c (cls_u32.c, cls_rsvp.c )
- iproute2: f_*.c (f_u32.c, f_rsvp.c)
11. Basic concepts- Action
• Action
Actions get attached to classifiers and are invoked after
a successful classification. They are used to overwrite
the classification result, instantly drop or redirect
packets, etc. Works on ingress only.
• Naming convention:
- Kernel: act_*.c (act_police.c, act_skbedit.c )
- iproute2: m_*.c (m_police.c, m_pedit.c)
12. Action list
• Traffic Policing
• Generic actions
• Probability support
• Redirecting and Mirroring
• IPtables targets
• Stateless NAT
• Packet Editing
• SKB Editing
13. Basic concepts- Class
• Classes either contain other Classes, or a Qdisc
is attached
• Qdiscs and Classes are intimately tied together
14. TC Commands
• OPTIONS: options are effective for all sub
commands
• OBJECTS: the object of the tc command
operates on
• COMMAND: the sub command for each object
16. TC Qdisc
• Operations on qdisc: add | del | replace |
change | show
• Handle: qdisc handle used to identify qdisc
• root|ingress|parent CLASSID, specify the
parent node
17. qdisc handle
• Qdisc handle is used to identify Qdisc
- {none|major[:]}
- none is TC_H_UNSPEC
- major is 16bits HEX number(Without ‘0x’ prefix)
- : is optional
• Internally, qdisc_handle = major<<16
18. classid
• Classid is used to identify Class
- {none|root|[major]:minor}
- none is TC_H_UNSPEC, root is TC_H_ROOT
- major/minor are both 16bits HEX numbers(Without
‘0x’ prefix), major is optional
• Internally, classid = (major<<16)|minor
19. stab and rtab
• stab is Size table, rtab is rate table.
• They’re used to speed up the calculation of
the transmit time of packets.
• The packet size is aligned to a predefined size
in the stab slot.
• Then the rtab is used to give the pre-
calculated time of the aligned packet size.
20. Linklayer
• Link layer affects packet size, if linklayer is
set, both mpu and overhead must also be set