osdl.org!shemminger | aba5acd | 2004-04-15 20:56:59 +0000 | [diff] [blame] | 1 | iproute2+tc* |
| 2 | |
| 3 | It's the first release of Linux traffic control engine. |
| 4 | |
| 5 | |
| 6 | NOTES. |
| 7 | * csz scheduler is inoperational at the moment, and probably |
| 8 | never will be repaired but replaced with h-pfq scheduler. |
| 9 | * To use "fw" classifier you will need ipfwchains patch. |
| 10 | * No manual available. Ask me, if you have problems (only try to guess |
| 11 | answer yourself at first 8)). |
| 12 | |
| 13 | |
| 14 | Micro-manual how to start it the first time |
| 15 | ------------------------------------------- |
| 16 | |
| 17 | A. Attach CBQ to eth1: |
| 18 | |
| 19 | tc qdisc add dev eth1 root handle 1: cbq bandwidth 10Mbit allot 1514 cell 8 \ |
| 20 | avpkt 1000 mpu 64 |
| 21 | |
| 22 | B. Add root class: |
| 23 | |
| 24 | tc class add dev eth1 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate 10Mbit \ |
| 25 | allot 1514 cell 8 weight 1Mbit prio 8 maxburst 20 avpkt 1000 |
| 26 | |
| 27 | C. Add default interactive class: |
| 28 | |
| 29 | tc class add dev eth1 parent 1:1 classid 1:2 cbq bandwidth 10Mbit rate 1Mbit \ |
| 30 | allot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 avpkt 1000 split 1:0 \ |
| 31 | defmap c0 |
| 32 | |
| 33 | D. Add default class: |
| 34 | |
| 35 | tc class add dev eth1 parent 1:1 classid 1:3 cbq bandwidth 10Mbit rate 8Mbit \ |
| 36 | allot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 avpkt 1000 split 1:0 \ |
| 37 | defmap 3f |
| 38 | |
| 39 | etc. etc. etc. Well, it is enough to start 8) The rest can be guessed 8) |
| 40 | Look also at more elaborated example, ready to start rsvpd, |
| 41 | in rsvp/cbqinit.eth1. |
| 42 | |
| 43 | |
| 44 | Terminology and advices about setting CBQ parameters may be found in Sally Floyd |
| 45 | papers. |
| 46 | |
| 47 | |
Stephen Hemminger | 6c513a0 | 2012-01-03 15:04:55 -0800 | [diff] [blame] | 48 | Pairs X:Y are class handles, X:0 are qdisc handles. |
osdl.org!shemminger | aba5acd | 2004-04-15 20:56:59 +0000 | [diff] [blame] | 49 | weight should be proportional to rate for leaf classes |
| 50 | (I choosed it ten times less, but it is not necessary) |
| 51 | |
| 52 | defmap is bitmap of logical priorities served by this class. |
| 53 | |
| 54 | E. Another qdiscs are simpler. F.e. let's join TBF on class 1:2 |
| 55 | |
| 56 | tc qdisc add dev eth1 parent 1:2 tbf rate 64Kbit buffer 5Kb/8 limit 10Kb |
| 57 | |
| 58 | F. Look at all that we created: |
| 59 | |
| 60 | tc qdisc ls dev eth1 |
| 61 | tc class ls dev eth1 |
| 62 | |
| 63 | G. Install "route" classifier on root of cbq and map destination from realm |
| 64 | 1 to class 1:2 |
| 65 | |
| 66 | tc filter add dev eth1 parent 1:0 protocol ip prio 100 route to 1 classid 1:2 |
| 67 | |
| 68 | H. Assign routes to 10.11.12.0/24 to realm 1 |
| 69 | |
| 70 | ip route add 10.11.12.0/24 dev eth1 via whatever realm 1 |
| 71 | |
| 72 | etc. The same thing can be made with rules. |
| 73 | I still did not test ipchains, but they should work too. |
| 74 | |
Daniel Borkmann | 6256f8c | 2015-04-01 17:57:44 +0200 | [diff] [blame] | 75 | |
| 76 | Setup and code example of BPF classifier and action can be found under |
| 77 | examples/bpf/, which should explain everything for getting started. |
| 78 | |
| 79 | |
osdl.org!shemminger | aba5acd | 2004-04-15 20:56:59 +0000 | [diff] [blame] | 80 | Setup of rsvp and u32 classifiers is more hairy. |
| 81 | If you read RSVP specs, you will understand how rsvp classifier |
| 82 | works easily. What's about u32... That's example: |
| 83 | |
| 84 | |
osdl.org!shemminger | aba5acd | 2004-04-15 20:56:59 +0000 | [diff] [blame] | 85 | #! /bin/sh |
| 86 | |
| 87 | TC=/home/root/tc |
| 88 | |
| 89 | # Setup classifier root on eth1 root (it is cbq) |
| 90 | $TC filter add dev eth1 parent 1:0 prio 5 protocol ip u32 |
| 91 | |
| 92 | # Create hash table of 256 slots with ID 1: |
| 93 | $TC filter add dev eth1 parent 1:0 prio 5 handle 1: u32 divisor 256 |
| 94 | |
| 95 | # Add to 6th slot of hash table rule to select tcp/telnet to 193.233.7.75 |
| 96 | # direct it to class 1:4 and prescribe to fall to best effort, |
| 97 | # if traffic violate TBF (32kbit,5K) |
| 98 | $TC filter add dev eth1 parent 1:0 prio 5 u32 ht 1:6: \ |
| 99 | match ip dst 193.233.7.75 \ |
| 100 | match tcp dst 0x17 0xffff \ |
| 101 | flowid 1:4 \ |
| 102 | police rate 32kbit buffer 5kb/8 mpu 64 mtu 1514 index 1 |
| 103 | |
| 104 | # Add to 1th slot of hash table rule to select icmp to 193.233.7.75 |
| 105 | # direct it to class 1:4 and prescribe to fall to best effort, |
| 106 | # if traffic violate TBF (10kbit,5K) |
| 107 | $TC filter add dev eth1 parent 1:0 prio 5 u32 ht 1:: \ |
| 108 | sample ip protocol 1 0xff \ |
| 109 | match ip dst 193.233.7.75 \ |
| 110 | flowid 1:4 \ |
| 111 | police rate 10kbit buffer 5kb/8 mpu 64 mtu 1514 index 2 |
| 112 | |
| 113 | # Lookup hash table, if it is not fragmented frame |
| 114 | # Use protocol as hash key |
| 115 | $TC filter add dev eth1 parent 1:0 prio 5 handle ::1 u32 ht 800:: \ |
| 116 | match ip nofrag \ |
| 117 | offset mask 0x0F00 shift 6 \ |
| 118 | hashkey mask 0x00ff0000 at 8 \ |
| 119 | link 1: |
| 120 | |
| 121 | |
| 122 | Alexey Kuznetsov |
| 123 | kuznet@ms2.inr.ac.ru |