Jan Engelhardt | a47bb4a | 2008-08-15 22:13:57 +0200 | [diff] [blame] | 1 | The rate estimator can match on estimated rates as collected by the RATEEST |
| 2 | target. It supports matching on absolute bps/pps values, comparing two rate |
| 3 | estimators and matching on the difference between two rate estimators. |
Jan Engelhardt | 25ea60d | 2011-05-17 15:17:08 +0200 | [diff] [blame] | 4 | .PP |
| 5 | For a better understanding of the available options, these are all possible |
| 6 | combinations: |
| 7 | .\" * Absolute: |
| 8 | .IP \(bu 4 |
| 9 | \fBrateest\fP \fIoperator\fP \fBrateest-bps\fP |
| 10 | .IP \(bu 4 |
| 11 | \fBrateest\fP \fIoperator\fP \fBrateest-pps\fP |
| 12 | .\" * Absolute + Delta: |
| 13 | .IP \(bu 4 |
| 14 | (\fBrateest\fP minus \fBrateest-bps1\fP) \fIoperator\fP \fBrateest-bps2\fP |
| 15 | .IP \(bu 4 |
| 16 | (\fBrateest\fP minus \fBrateest-pps1\fP) \fIoperator\fP \fBrateest-pps2\fP |
| 17 | .\" * Relative: |
| 18 | .IP \(bu 4 |
| 19 | \fBrateest1\fP \fIoperator\fP \fBrateest2\fP \fBrateest-bps\fP(without rate!) |
| 20 | .IP \(bu 4 |
| 21 | \fBrateest1\fP \fIoperator\fP \fBrateest2\fP \fBrateest-pps\fP(without rate!) |
| 22 | .\" * Relative + Delta: |
| 23 | .IP \(bu 4 |
| 24 | (\fBrateest1\fP minus \fBrateest-bps1\fP) \fIoperator\fP |
| 25 | (\fBrateest2\fP minus \fBrateest-bps2\fP) |
| 26 | .IP \(bu 4 |
| 27 | (\fBrateest1\fP minus \fBrateest-pps1\fP) \fIoperator\fP |
| 28 | (\fBrateest2\fP minus \fBrateest-pps2\fP) |
Jan Engelhardt | a47bb4a | 2008-08-15 22:13:57 +0200 | [diff] [blame] | 29 | .TP |
Jan Engelhardt | fea74bf | 2009-01-12 04:53:18 +0100 | [diff] [blame] | 30 | \fB\-\-rateest\-delta\fP |
Jan Engelhardt | 25ea60d | 2011-05-17 15:17:08 +0200 | [diff] [blame] | 31 | For each estimator (either absolute or relative mode), calculate the difference |
| 32 | between the estimator-determined flow rate and the static value chosen with the |
| 33 | BPS/PPS options. If the flow rate is higher than the specified BPS/PPS, 0 will |
| 34 | be used instead of a negative value. In other words, "max(0, rateest#_rate - |
| 35 | rateest#_bps)" is used. |
Jan Engelhardt | a47bb4a | 2008-08-15 22:13:57 +0200 | [diff] [blame] | 36 | .TP |
Jan Engelhardt | fea74bf | 2009-01-12 04:53:18 +0100 | [diff] [blame] | 37 | [\fB!\fP] \fB\-\-rateest\-lt\fP |
Jan Engelhardt | a47bb4a | 2008-08-15 22:13:57 +0200 | [diff] [blame] | 38 | Match if rate is less than given rate/estimator. |
| 39 | .TP |
Jan Engelhardt | fea74bf | 2009-01-12 04:53:18 +0100 | [diff] [blame] | 40 | [\fB!\fP] \fB\-\-rateest\-gt\fP |
Jan Engelhardt | a47bb4a | 2008-08-15 22:13:57 +0200 | [diff] [blame] | 41 | Match if rate is greater than given rate/estimator. |
| 42 | .TP |
Jan Engelhardt | fea74bf | 2009-01-12 04:53:18 +0100 | [diff] [blame] | 43 | [\fB!\fP] \fB\-\-rateest\-eq\fP |
Jan Engelhardt | a47bb4a | 2008-08-15 22:13:57 +0200 | [diff] [blame] | 44 | Match if rate is equal to given rate/estimator. |
| 45 | .PP |
Jan Engelhardt | 25ea60d | 2011-05-17 15:17:08 +0200 | [diff] [blame] | 46 | In the so-called "absolute mode", only one rate estimator is used and compared |
| 47 | against a static value, while in "relative mode", two rate estimators are |
| 48 | compared against another. |
| 49 | .TP |
| 50 | \fB\-\-rateest\fP \fIname\fP |
| 51 | Name of the one rate estimator for absolute mode. |
| 52 | .TP |
| 53 | \fB\-\-rateest1\fP \fIname\fP |
| 54 | .TP |
| 55 | \fB\-\-rateest2\fP \fIname\fP |
| 56 | The names of the two rate estimators for relative mode. |
| 57 | .TP |
| 58 | \fB\-\-rateest\-bps\fP [\fIvalue\fP] |
| 59 | .TP |
| 60 | \fB\-\-rateest\-pps\fP [\fIvalue\fP] |
| 61 | .TP |
| 62 | \fB\-\-rateest\-bps1\fP [\fIvalue\fP] |
| 63 | .TP |
| 64 | \fB\-\-rateest\-bps2\fP [\fIvalue\fP] |
| 65 | .TP |
| 66 | \fB\-\-rateest\-pps1\fP [\fIvalue\fP] |
| 67 | .TP |
| 68 | \fB\-\-rateest\-pps2\fP [\fIvalue\fP] |
| 69 | Compare the estimator(s) by bytes or packets per second, and compare against |
| 70 | the chosen value. See the above bullet list for which option is to be used in |
| 71 | which case. A unit suffix may be used - available ones are: bit, [kmgt]bit, |
| 72 | [KMGT]ibit, Bps, [KMGT]Bps, [KMGT]iBps. |
| 73 | .PP |
Jan Engelhardt | a47bb4a | 2008-08-15 22:13:57 +0200 | [diff] [blame] | 74 | Example: This is what can be used to route outgoing data connections from an |
| 75 | FTP server over two lines based on the available bandwidth at the time the data |
| 76 | connection was started: |
| 77 | .PP |
| 78 | # Estimate outgoing rates |
| 79 | .PP |
Jan Engelhardt | fea74bf | 2009-01-12 04:53:18 +0100 | [diff] [blame] | 80 | iptables \-t mangle \-A POSTROUTING \-o eth0 \-j RATEEST \-\-rateest\-name eth0 |
| 81 | \-\-rateest\-interval 250ms \-\-rateest\-ewma 0.5s |
Jan Engelhardt | a47bb4a | 2008-08-15 22:13:57 +0200 | [diff] [blame] | 82 | .PP |
Jan Engelhardt | fea74bf | 2009-01-12 04:53:18 +0100 | [diff] [blame] | 83 | iptables \-t mangle \-A POSTROUTING \-o ppp0 \-j RATEEST \-\-rateest\-name ppp0 |
| 84 | \-\-rateest\-interval 250ms \-\-rateest\-ewma 0.5s |
Jan Engelhardt | a47bb4a | 2008-08-15 22:13:57 +0200 | [diff] [blame] | 85 | .PP |
| 86 | # Mark based on available bandwidth |
| 87 | .PP |
Jan Engelhardt | fea74bf | 2009-01-12 04:53:18 +0100 | [diff] [blame] | 88 | iptables \-t mangle \-A balance \-m conntrack \-\-ctstate NEW \-m helper \-\-helper ftp |
| 89 | \-m rateest \-\-rateest\-delta \-\-rateest1 eth0 \-\-rateest\-bps1 2.5mbit \-\-rateest\-gt |
| 90 | \-\-rateest2 ppp0 \-\-rateest\-bps2 2mbit \-j CONNMARK \-\-set\-mark 1 |
Jan Engelhardt | a47bb4a | 2008-08-15 22:13:57 +0200 | [diff] [blame] | 91 | .PP |
Jan Engelhardt | fea74bf | 2009-01-12 04:53:18 +0100 | [diff] [blame] | 92 | iptables \-t mangle \-A balance \-m conntrack \-\-ctstate NEW \-m helper \-\-helper ftp |
| 93 | \-m rateest \-\-rateest\-delta \-\-rateest1 ppp0 \-\-rateest\-bps1 2mbit \-\-rateest\-gt |
| 94 | \-\-rateest2 eth0 \-\-rateest\-bps2 2.5mbit \-j CONNMARK \-\-set\-mark 2 |
Jan Engelhardt | a47bb4a | 2008-08-15 22:13:57 +0200 | [diff] [blame] | 95 | .PP |
Jan Engelhardt | fea74bf | 2009-01-12 04:53:18 +0100 | [diff] [blame] | 96 | iptables \-t mangle \-A balance \-j CONNMARK \-\-restore\-mark |