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