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