]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
extensions: libxt_mark: Add translation to nft
authorShivani Bhardwaj <shivanib134@gmail.com>
Sun, 20 Dec 2015 03:14:12 +0000 (08:44 +0530)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 16 Feb 2016 18:30:22 +0000 (19:30 +0100)
Add translation for metainformation mark to nftables.

Examples:

$ sudo iptables-translate -I INPUT -m mark --mark 12
nft insert rule ip filter INPUT mark  0xc counter

$ sudo iptables-translate -A FORWARD -m mark --mark 22 -j ACCEPT
nft add rule ip filter FORWARD mark  0x16 counter accept

$ sudo iptables-translate -t mangle -A PREROUTING -p tcp --dport 4600 -m mark --mark 0x40
nft add rule ip mangle PREROUTING tcp dport 4600 mark  0x40 counter

$ sudo iptables-translate -A FORWARD -m mark --mark 0x400/0x400 -j ACCEPT
nft add rule ip filter FORWARD mark  and 0x400 == 0x400 counter accept

Signed-off-by: Shivani Bhardwaj <shivanib134@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
extensions/libxt_mark.c

index 7f8c995c24094ca00387f8f5e2e01a4fb8ab6f5c..3b96a342cdd6a355ad008d57e7eafdb1fccfda78 100644 (file)
@@ -75,7 +75,7 @@ mark_print(const void *ip, const struct xt_entry_match *match, int numeric)
 
        if (info->invert)
                printf(" !");
-       
+
        print_mark(info->mark, info->mask);
 }
 
@@ -97,11 +97,45 @@ mark_save(const void *ip, const struct xt_entry_match *match)
 
        if (info->invert)
                printf(" !");
-       
+
        printf(" --mark");
        print_mark(info->mark, info->mask);
 }
 
+static void
+print_mark_xlate(struct xt_buf *buf,
+                unsigned int mark, unsigned int mask)
+{
+       if (mask != 0xffffffffU)
+               xt_buf_add(buf, " and 0x%x == 0x%x ", mark, mask);
+       else
+               xt_buf_add(buf, " 0x%x ", mark);
+}
+
+static int
+mark_mt_xlate(const struct xt_entry_match *match,
+             struct xt_buf *buf, int numeric)
+{
+       const struct xt_mark_mtinfo1 *info = (const void *)match->data;
+
+       xt_buf_add(buf, "mark%s", info->invert ? " !=" : "");
+       print_mark_xlate(buf, info->mark, info->mask);
+
+       return 1;
+}
+
+static int
+mark_xlate(const struct xt_entry_match *match,
+          struct xt_buf *buf, int numeric)
+{
+       const struct xt_mark_info *info = (const void *)match->data;
+
+       xt_buf_add(buf, "mark%s", info->invert ? " !=" : "");
+       print_mark_xlate(buf, info->mark, info->mask);
+
+       return 1;
+}
+
 static struct xtables_match mark_mt_reg[] = {
        {
                .family        = NFPROTO_UNSPEC,
@@ -115,6 +149,7 @@ static struct xtables_match mark_mt_reg[] = {
                .save          = mark_save,
                .x6_parse      = mark_parse,
                .x6_options    = mark_mt_opts,
+               .xlate         = mark_xlate,
        },
        {
                .version       = XTABLES_VERSION,
@@ -128,6 +163,7 @@ static struct xtables_match mark_mt_reg[] = {
                .save          = mark_mt_save,
                .x6_parse      = mark_mt_parse,
                .x6_options    = mark_mt_opts,
+               .xlate         = mark_mt_xlate,
        },
 };