Message ID | 20170212124534.GA2981@lennorien.com |
---|---|
State | Accepted |
Delegated to: | Pablo Neira |
Headers | show |
On Sun, Feb 12, 2017 at 10:45:34AM -0200, Elise Lennion wrote: > get_rate() is used to print quotas and limits and currently rounds the > number of bytes: > > $ nft add quota filter https-quota 4000 kbytes > $ nft list ruleset > table ip filter { > quota https-quota { > 3 mbytes > } > } > > This may be a problem when loading your configuration after saving it > with 'list ruleset'. With this patch the values are represented in a > greater unit only when there is no rest in the conversion: > > $ nft add quota filter https-quota2 2048 kbytes > $ nft list ruleset > table ip filter { > quota https-quota { > 4000 kbytes > } > > quota https-quota2 { > 2 mbytes > } > } also applied, thanks Elise. -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/src/statement.c b/src/statement.c index 3beb86a..7ffd25f 100644 --- a/src/statement.c +++ b/src/statement.c @@ -300,20 +300,15 @@ static const char *data_unit[] = { const char *get_rate(uint64_t byte_rate, uint64_t *rate) { - uint64_t res, prev, rest; int i; - res = prev = byte_rate; - for (i = 0;; i++) { - rest = res % 1024; - res /= 1024; - if (res <= 1 && rest != 0) + for (i = 0; data_unit[i + 1] != NULL; i++) { + if (byte_rate % 1024) break; - if (data_unit[i + 1] == NULL) - break; - prev = res; + byte_rate /= 1024; } - *rate = prev; + + *rate = byte_rate; return data_unit[i]; }
get_rate() is used to print quotas and limits and currently rounds the number of bytes: $ nft add quota filter https-quota 4000 kbytes $ nft list ruleset table ip filter { quota https-quota { 3 mbytes } } This may be a problem when loading your configuration after saving it with 'list ruleset'. With this patch the values are represented in a greater unit only when there is no rest in the conversion: $ nft add quota filter https-quota2 2048 kbytes $ nft list ruleset table ip filter { quota https-quota { 4000 kbytes } quota https-quota2 { 2 mbytes } } Signed-off-by: Elise Lennion <elise.lennion@gmail.com> --- src/statement.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-)