home *** CD-ROM | disk | FTP | other *** search
- iproute2+tc*
-
- It's the first release of Linux traffic control engine.
-
-
- NOTES.
- * csz scheduler is inoperational at the moment, and probably
- never will be repaired but replaced with h-pfq scheduler.
- * To use "fw" classifier you will need ipfwchains patch.
- * No manual available. Ask me, if you have problems (only try to guess
- answer yourself at first 8)).
-
-
- Micro-manual how to start it the first time
- -------------------------------------------
-
- A. Attach CBQ to eth1:
-
- tc qdisc add dev eth1 root handle 1: cbq bandwidth 10Mbit allot 1514 cell 8 \
- avpkt 1000 mpu 64
-
- B. Add root class:
-
- tc class add dev eth1 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate 10Mbit \
- allot 1514 cell 8 weight 1Mbit prio 8 maxburst 20 avpkt 1000
-
- C. Add default interactive class:
-
- tc class add dev eth1 parent 1:1 classid 1:2 cbq bandwidth 10Mbit rate 1Mbit \
- allot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 avpkt 1000 split 1:0 \
- defmap c0
-
- D. Add default class:
-
- tc class add dev eth1 parent 1:1 classid 1:3 cbq bandwidth 10Mbit rate 8Mbit \
- allot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 avpkt 1000 split 1:0 \
- defmap 3f
-
- etc. etc. etc. Well, it is enough to start 8) The rest can be guessed 8)
- Look also at more elaborated example, ready to start rsvpd,
- in rsvp/cbqinit.eth1.
-
-
- Terminology and advices about setting CBQ parameters may be found in Sally Floyd
- papers.
-
-
- Pairs X:Y are class handles, X:0 are qdisc heandles.
- weight should be proportional to rate for leaf classes
- (I choosed it ten times less, but it is not necessary)
-
- defmap is bitmap of logical priorities served by this class.
-
- E. Another qdiscs are simpler. F.e. let's join TBF on class 1:2
-
- tc qdisc add dev eth1 parent 1:2 tbf rate 64Kbit buffer 5Kb/8 limit 10Kb
-
- F. Look at all that we created:
-
- tc qdisc ls dev eth1
- tc class ls dev eth1
-
- G. Install "route" classifier on root of cbq and map destination from realm
- 1 to class 1:2
-
- tc filter add dev eth1 parent 1:0 protocol ip prio 100 route to 1 classid 1:2
-
- H. Assign routes to 10.11.12.0/24 to realm 1
-
- ip route add 10.11.12.0/24 dev eth1 via whatever realm 1
-
- etc. The same thing can be made with rules.
- I still did not test ipchains, but they should work too.
-
- Setup of rsvp and u32 classifiers is more hairy.
- If you read RSVP specs, you will understand how rsvp classifier
- works easily. What's about u32... That's example:
-
-
-
- #! /bin/sh
-
- TC=/home/root/tc
-
- # Setup classifier root on eth1 root (it is cbq)
- $TC filter add dev eth1 parent 1:0 prio 5 protocol ip u32
-
- # Create hash table of 256 slots with ID 1:
- $TC filter add dev eth1 parent 1:0 prio 5 handle 1: u32 divisor 256
-
- # Add to 6th slot of hash table rule to select tcp/telnet to 193.233.7.75
- # direct it to class 1:4 and prescribe to fall to best effort,
- # if traffic violate TBF (32kbit,5K)
- $TC filter add dev eth1 parent 1:0 prio 5 u32 ht 1:6: \
- match ip dst 193.233.7.75 \
- match tcp dst 0x17 0xffff \
- flowid 1:4 \
- police rate 32kbit buffer 5kb/8 mpu 64 mtu 1514 index 1
-
- # Add to 1th slot of hash table rule to select icmp to 193.233.7.75
- # direct it to class 1:4 and prescribe to fall to best effort,
- # if traffic violate TBF (10kbit,5K)
- $TC filter add dev eth1 parent 1:0 prio 5 u32 ht 1:: \
- sample ip protocol 1 0xff \
- match ip dst 193.233.7.75 \
- flowid 1:4 \
- police rate 10kbit buffer 5kb/8 mpu 64 mtu 1514 index 2
-
- # Lookup hash table, if it is not fragmented frame
- # Use protocol as hash key
- $TC filter add dev eth1 parent 1:0 prio 5 handle ::1 u32 ht 800:: \
- match ip nofrag \
- offset mask 0x0F00 shift 6 \
- hashkey mask 0x00ff0000 at 8 \
- link 1:
-
-
- Alexey Kuznetsov
- kuznet@ms2.inr.ac.ru
-