]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
extensions: libxt_limit: fix a wrong translation to nft rule
authorLiping Zhang <liping.zhang@spreadtrum.com>
Sat, 21 May 2016 10:07:16 +0000 (18:07 +0800)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 23 May 2016 17:27:19 +0000 (19:27 +0200)
The default burst value is 5 in iptables limit extension while it is 0 in
nft limit expression, if the burst value is default, it will not be
displayed when we dump the rules. But when we do translation from iptables
rules to nft rules, we should keep the limit burst value unchanged, even if
it is not displayed in iptables rules.

And now, if the limit-burst value in the iptables rule is 5 or 0, they are
all translated to nft rule without burst, this is wrong:

$ sudo iptables-translate -A INPUT -m limit --limit 10/s --limit-burst 5
nft add rule ip filter INPUT limit rate 10/second counter
$ sudo iptables-translate -A INPUT -m limit --limit 10/s --limit-burst 0
nft add rule ip filter INPUT limit rate 10/second burst 0 packets counter

Apply this patch, translation will become:

$ sudo iptables-translate -A INPUT -m limit --limit 10/s --limit-burst 5
nft add rule ip filter INPUT limit rate 10/second burst 5 packets counter
$ sudo iptables-translate -A INPUT -m limit --limit 10/s --limit-burst 0
nft add rule ip filter INPUT limit rate 10/second counter

Fixes: a8dfbe3a3acb ("extensions: libxt_limit: Add translation to nft")
Cc: Shivani Bhardwaj <shivanib134@gmail.com>
Signed-off-by: Liping Zhang <liping.zhang@spreadtrum.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
extensions/libxt_limit.c

index c88d26b8f2c8d059ac00cb8ace77650b7c4e34fe..6652849abc27e44110a533557639d0f64fedabf1 100644 (file)
@@ -184,7 +184,7 @@ static int limit_xlate(const void *ip, const struct xt_entry_match *match,
 
        xt_xlate_add(xl, "limit rate");
        print_rate_xlate(r->avg, xl);
-       if (r->burst != XT_LIMIT_BURST)
+       if (r->burst != 0)
                xt_xlate_add(xl, "burst %u packets ", r->burst);
 
        return 1;