linux: Increase accuracy of ingress_policing_rate at low rates
authorThomas Graf <tgraf@redhat.com>
Fri, 25 Jan 2013 19:13:55 +0000 (20:13 +0100)
committerBen Pfaff <blp@nicira.com>
Fri, 25 Jan 2013 23:27:07 +0000 (15:27 -0800)
The current method of calculating the ingress policer rate
can lead to inaccuracy if ingress_policing_rate is set to
a smallish values because the rate is divided by 8 first
which causes rounding errors.

Signed-off-by: Thomas Graf <tgraf@redhat.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/netdev-linux.c

index 412a92d..1fac087 100644 (file)
@@ -3693,7 +3693,7 @@ tc_add_policer(struct netdev *netdev, int kbits_rate, int kbits_burst)
     memset(&tc_police, 0, sizeof tc_police);
     tc_police.action = TC_POLICE_SHOT;
     tc_police.mtu = mtu;
-    tc_fill_rate(&tc_police.rate, kbits_rate/8 * 1000, mtu);
+    tc_fill_rate(&tc_police.rate, (kbits_rate * 1000)/8, mtu);
     tc_police.burst = tc_bytes_to_ticks(tc_police.rate.rate,
                                         kbits_burst * 1024);