summaryrefslogtreecommitdiffstats
path: root/extensions/libebt_limit.c
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2018-04-11 10:24:37 +0200
committerFlorian Westphal <fw@strlen.de>2018-04-11 10:51:46 +0200
commit03ecffe6c2cc0c71f5ece161d39368d56930e241 (patch)
tree1c6ab0aacf902c707004b27000a5a586df6ba3b0 /extensions/libebt_limit.c
parent57af67de905c9f68b9f011b9a7cfcff12ada8012 (diff)
ebtables-compat: add initial translations
add translations for ip, limit, log, mark, mark_m, nflog. Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'extensions/libebt_limit.c')
-rw-r--r--extensions/libebt_limit.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/extensions/libebt_limit.c b/extensions/libebt_limit.c
index 988f678a..75c066bf 100644
--- a/extensions/libebt_limit.c
+++ b/extensions/libebt_limit.c
@@ -159,6 +159,31 @@ static void brlimit_print(const void *ip, const struct xt_entry_match *match,
printf("--limit-burst %u ", r->burst);
}
+static void print_rate_xlate(struct xt_xlate *xl, uint32_t period)
+{
+ unsigned int i;
+
+ for (i = 1; i < sizeof(g_rates)/sizeof(struct rates); i++)
+ if (period > g_rates[i].mult ||
+ g_rates[i].mult/period < g_rates[i].mult%period)
+ break;
+
+ xt_xlate_add(xl, "%u/%s ", g_rates[i-1].mult / period, g_rates[i-1].name);
+}
+
+static int brlimit_xlate(struct xt_xlate *xl,
+ const struct xt_xlate_mt_params *params)
+{
+ const struct ebt_limit_info *r = (const void *)params->match->data;
+
+ xt_xlate_add(xl, "limit rate ");
+ print_rate_xlate(xl, r->avg);
+ if (r->burst != 0)
+ xt_xlate_add(xl, " burst %u packets", r->burst);
+
+ return 1;
+}
+
static struct xtables_match brlimit_match = {
.name = "limit",
.revision = 0,
@@ -170,6 +195,7 @@ static struct xtables_match brlimit_match = {
.help = brlimit_print_help,
.parse = brlimit_parse,
.print = brlimit_print,
+ .xlate = brlimit_xlate,
.extra_opts = brlimit_opts,
};