get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/804175/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 804175,
    "url": "http://patchwork.ozlabs.org/api/patches/804175/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netfilter-devel/patch/1503348904-16654-1-git-send-email-mayhs11saini@gmail.com/",
    "project": {
        "id": 26,
        "url": "http://patchwork.ozlabs.org/api/projects/26/?format=api",
        "name": "Netfilter Development",
        "link_name": "netfilter-devel",
        "list_id": "netfilter-devel.vger.kernel.org",
        "list_email": "netfilter-devel@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<1503348904-16654-1-git-send-email-mayhs11saini@gmail.com>",
    "list_archive_url": null,
    "date": "2017-08-21T20:55:04",
    "name": "tests: json: Add test cases for json format",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "f171ec4a2196d4b1d1c5dca6c11a2638ea57698c",
    "submitter": {
        "id": 69683,
        "url": "http://patchwork.ozlabs.org/api/people/69683/?format=api",
        "name": "Shyam Saini",
        "email": "mayhs11saini@gmail.com"
    },
    "delegate": {
        "id": 6139,
        "url": "http://patchwork.ozlabs.org/api/users/6139/?format=api",
        "username": "pablo",
        "first_name": "Pablo",
        "last_name": "Neira",
        "email": "pablo@netfilter.org"
    },
    "mbox": "http://patchwork.ozlabs.org/project/netfilter-devel/patch/1503348904-16654-1-git-send-email-mayhs11saini@gmail.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/804175/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/804175/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<netfilter-devel-owner@vger.kernel.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netfilter-devel-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"hEhgh7Ls\"; dkim-atps=neutral"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xbmGK4st3z9t0F\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 22 Aug 2017 06:57:13 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1753907AbdHUU5M (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tMon, 21 Aug 2017 16:57:12 -0400",
            "from mail-pg0-f68.google.com ([74.125.83.68]:33127 \"EHLO\n\tmail-pg0-f68.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1753840AbdHUU5K (ORCPT\n\t<rfc822;netfilter-devel@vger.kernel.org>);\n\tMon, 21 Aug 2017 16:57:10 -0400",
            "by mail-pg0-f68.google.com with SMTP id u191so436726pgc.0\n\tfor <netfilter-devel@vger.kernel.org>;\n\tMon, 21 Aug 2017 13:57:10 -0700 (PDT)",
            "from localhost.localdomain ([47.31.0.68])\n\tby smtp.gmail.com with ESMTPSA id\n\tq76sm27923228pfi.76.2017.08.21.13.57.06\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tMon, 21 Aug 2017 13:57:08 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20161025;\n\th=from:to:cc:subject:date:message-id;\n\tbh=ntl2opzE+L6Hgd8tbw/Dmknqrly1vFjJIIJfvljtF+s=;\n\tb=hEhgh7LscGisxa3PKxZ6bWvx4bjRhT+mXrL4QzlkYQT1DGqQKyD0B9y8bRxr0Ax0We\n\tm7DZnzApBdoyRpE0DkKHPRhS3nhXh+GaUM9Ieshxt12NuWBsh0YEPp3jJ3A7UDbx3LeL\n\tWIEEGPfIVkUiOxsgM3Iq36Bu9YU1C1WLIp67FQ5dmboKD21wAnk9wujXs7mZ3Ps8Hc0m\n\tDpHmR6HD6kH7DoB5KVRcuj3fqcMdJu88cGvqugdh5QTgEuT2MV2neLxHZlqcCqsnh2xZ\n\ti8zI8d8/I9dizpS6dpIUy2UzeiwC05Ctp/GeTuCvpfvZLCZwhXyDRtE5mOyyy6mysWCy\n\t0+qQ==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id;\n\tbh=ntl2opzE+L6Hgd8tbw/Dmknqrly1vFjJIIJfvljtF+s=;\n\tb=Og/5osy1pouMmWIQvmJaQqIYLjYkJiDlGWNgR0JJi6vCS7QBOV6erYZJq2FDHMTwgt\n\tiVDjOvPfBYkkx01PBsqUNK9t6/+aeamaKH/HYOm0WYbOyZ58/sibxjDRQ/hel6c7tDd1\n\tU6tUjGVhmk5FB5HU+iyMFc1fwVcac49cjbyHRFnSvYzHWKZO8VzPGKOgcIDsjLf7U4Zn\n\tGPuEgVCYJpvVdYuKIEwwKv9GBsYiwVQpuEXRqloaOvkLDFi2at37F2gFsS1q+15UVV8w\n\tJJSj9Be7HoXBnG88Qr0Xw4kVALMcZ8yrLjK137gg3GBz8L/ggXJ052KNL6NeJ4UF37b9\n\tb/hQ==",
        "X-Gm-Message-State": "AHYfb5iPieXbam/tagKVMcEFvZtjcQllLYXqn8rtctZ77HZKXSaMFhKt\n\t5nPaEAjYharFYVeEpkA=",
        "X-Received": "by 10.84.131.105 with SMTP id 96mr20214444pld.226.1503349029202; \n\tMon, 21 Aug 2017 13:57:09 -0700 (PDT)",
        "From": "Shyam Saini <mayhs11saini@gmail.com>",
        "To": "netfilter-devel@vger.kernel.org",
        "Cc": "pablo@netfilter.org, Shyam Saini <mayhs11saini@gmail.com>",
        "Subject": "[PATCH] tests: json: Add test cases for json format",
        "Date": "Tue, 22 Aug 2017 02:25:04 +0530",
        "Message-Id": "<1503348904-16654-1-git-send-email-mayhs11saini@gmail.com>",
        "X-Mailer": "git-send-email 1.9.1",
        "Sender": "netfilter-devel-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netfilter-devel.vger.kernel.org>",
        "X-Mailing-List": "netfilter-devel@vger.kernel.org"
    },
    "content": "These cases can be used to test upcoming \"import json\" command.\n\nHere is the short description of the files:\nall_ruleset_list   ->    contains list of all the individual rules\nrules_ipv4*        ->    ip  table\nrules_ipv6*        ->    ip6 table\nrules_arp*         ->    arp table\nrules_bridge*      ->    bridge table\n\nAt this point of time some tests may fails.\nFor example:\n dup to 172.20.0.2\n ether daddr 00:01:02:03:04:05 ether saddr set ff:fe:dc:ba:98:76 drop\n\nSigned-off-by: Shyam Saini <mayhs11saini@gmail.com>\n---\n tests/json/all_ruleset_list                        | 50 ++++++++++++++++++++++\n tests/json/rules_arp_hlen_range.json               |  1 +\n tests/json/rules_arp_htype.json                    |  1 +\n tests/json/rules_arp_operation.json                |  1 +\n tests/json/rules_arp_operation_check.json          |  1 +\n tests/json/rules_arp_ptype_ip.json                 |  1 +\n tests/json/rules_bridge_ether_saddr_drop.json      |  1 +\n ...ge_ether_type_reject_icmp_host_unreachable.json |  1 +\n tests/json/rules_bridge_vlan.json                  |  1 +\n tests/json/rules_bridge_vlan_id.json               |  1 +\n ...bridge_vlan_id_saddr_udp_dport_drop_domain.json |  1 +\n tests/json/rules_ipv4_ct_state_accept.json         |  1 +\n tests/json/rules_ipv4_dup.json                     |  1 +\n .../rules_ipv4_icmp_type_echo-request_accept.json  |  1 +\n .../rules_ipv4_icmp_type_echo-request_counter.json |  1 +\n tests/json/rules_ipv4_iifname_accept.json          |  1 +\n tests/json/rules_ipv4_saddr_daddr_counter.json     |  1 +\n tests/json/rules_ipv4_set_elements.json            |  1 +\n tests/json/rules_ipv4_tcp_dport_http_ssh.json      |  1 +\n tests/json/rules_ipv4_tcp_flags.json               |  1 +\n tests/json/rules_ipv6_daddr_udp_dport_counter.json |  1 +\n ...es_ipv6_daddr_udp_dport_counter_masquerade.json |  1 +\n tests/json/rules_ipv6_icmpv6_id.json               |  1 +\n ...iifname_ct_state_tcp_dport_vmap_masquerade.json |  1 +\n tests/json/rules_ipv6_l4proto_tcp_masquerade.json  |  1 +\n ...dport_ssh_daddr_mapping_ether_saddr_accept.json |  1 +\n 26 files changed, 75 insertions(+)\n create mode 100644 tests/json/all_ruleset_list\n create mode 100644 tests/json/rules_arp_hlen_range.json\n create mode 100644 tests/json/rules_arp_htype.json\n create mode 100644 tests/json/rules_arp_operation.json\n create mode 100644 tests/json/rules_arp_operation_check.json\n create mode 100644 tests/json/rules_arp_ptype_ip.json\n create mode 100644 tests/json/rules_bridge_ether_saddr_drop.json\n create mode 100644 tests/json/rules_bridge_ether_type_reject_icmp_host_unreachable.json\n create mode 100644 tests/json/rules_bridge_vlan.json\n create mode 100644 tests/json/rules_bridge_vlan_id.json\n create mode 100644 tests/json/rules_bridge_vlan_id_saddr_udp_dport_drop_domain.json\n create mode 100644 tests/json/rules_ipv4_ct_state_accept.json\n create mode 100644 tests/json/rules_ipv4_dup.json\n create mode 100644 tests/json/rules_ipv4_icmp_type_echo-request_accept.json\n create mode 100644 tests/json/rules_ipv4_icmp_type_echo-request_counter.json\n create mode 100644 tests/json/rules_ipv4_iifname_accept.json\n create mode 100644 tests/json/rules_ipv4_saddr_daddr_counter.json\n create mode 100644 tests/json/rules_ipv4_set_elements.json\n create mode 100644 tests/json/rules_ipv4_tcp_dport_http_ssh.json\n create mode 100644 tests/json/rules_ipv4_tcp_flags.json\n create mode 100644 tests/json/rules_ipv6_daddr_udp_dport_counter.json\n create mode 100644 tests/json/rules_ipv6_daddr_udp_dport_counter_masquerade.json\n create mode 100644 tests/json/rules_ipv6_icmpv6_id.json\n create mode 100644 tests/json/rules_ipv6_iifname_ct_state_tcp_dport_vmap_masquerade.json\n create mode 100644 tests/json/rules_ipv6_l4proto_tcp_masquerade.json\n create mode 100644 tests/json/rules_ipv6_tcp_dport_ssh_daddr_mapping_ether_saddr_accept.json",
    "diff": "diff --git a/tests/json/all_ruleset_list b/tests/json/all_ruleset_list\nnew file mode 100644\nindex 000000000000..e5ed635b9580\n--- /dev/null\n+++ b/tests/json/all_ruleset_list\n@@ -0,0 +1,50 @@\n+table ip mangle {\n+\tset set1 {\n+\t\ttype ipv4_addr\n+\t\telements = { 192.168.1.4, 192.168.1.5 }\n+\n+\t}\n+\tchain prerouting {\n+\t\ttype filter hook prerouting priority 0; policy accept;\n+\t\tip saddr @set1 drop\n+\t\tip saddr 192.168.1.100 ip daddr 192.168.1.1 counter packets 0 bytes 0\n+\t\ttcp flags != syn counter packets 619772 bytes 389570486\n+\t\ticmp type echo-request counter packets 0 bytes 0 drop\n+\t\tct state established,related accept\n+\t\tiifname \"lo\" accept\n+\t\ticmp type echo-request accept\n+\t\ttcp dport { http, ssh} accept\n+\t}\n+\n+}\n+table ip6 x {\n+\tchain y {\n+\t\ttype nat hook postrouting priority 0; policy accept;\n+\t\tip6 daddr fe00::1-fe00::200 udp dport domain counter packets 0 bytes 0 masquerade\n+\t\tmeta l4proto tcp masquerade to :1024\n+\t\tiifname \"wlan0\" ct state established,new tcp dport vmap { 222 : drop, ssh : drop} masquerade\n+\t\tip6 daddr fe00::1-fe00::200 udp dport domain counter packets 0 bytes 0 masquerade\n+\t\tiifname \"eth0\" ct state established,new tcp dport vmap { 222 : drop, ssh : drop} masquerade\n+\t\ttcp dport ssh ip6 daddr 1::2 ether saddr 00:0f:54:0c:11:04 accept\n+\t        icmpv6 id 33-45\n+\t}\n+}\n+table arp x {\n+\tchain y {\n+\t\tarp operation { request, reply, inreply, inrequest, nak, rrequest, rreply}\n+\t\tarp operation != rrequest\n+\t\tarp ptype ip\n+\t\tarp hlen 33-45\n+\t\tarp htype 22\n+\t}\n+}\n+table bridge x {\n+\tchain y {\n+\t\ttype filter hook input priority 0; policy accept;\n+\t\tether daddr 00:01:02:03:04:05 ether saddr set ff:fe:dc:ba:98:76 drop\n+\t\tvlan id 4094 vlan cfi 0\n+\t\tvlan id 4094\n+\t\tvlan id 1 ip saddr 10.0.0.0/23 udp dport domain\n+\t\tether type ip reject with icmp type host-unreachable\n+\t}\n+}\ndiff --git a/tests/json/rules_arp_hlen_range.json b/tests/json/rules_arp_hlen_range.json\nnew file mode 100644\nindex 000000000000..d4ad00cd7a54\n--- /dev/null\n+++ b/tests/json/rules_arp_hlen_range.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"arp\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"table\":\"x\",\"family\":\"arp\",\"use\":1}},{\"rule\":{\"family\":\"arp\",\"table\":\"x\",\"chain\":\"y\",\"handle\":3,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":4,\"len\":1,\"base\":\"network\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"gte\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000021\"}}},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"lte\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x0000002d\"}}}]}}]}]}\ndiff --git a/tests/json/rules_arp_htype.json b/tests/json/rules_arp_htype.json\nnew file mode 100644\nindex 000000000000..95bd5580676d\n--- /dev/null\n+++ b/tests/json/rules_arp_htype.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"arp\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"table\":\"x\",\"family\":\"arp\",\"use\":1}},{\"rule\":{\"family\":\"arp\",\"table\":\"x\",\"chain\":\"y\",\"handle\":5,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":0,\"len\":2,\"base\":\"network\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00001600\"}}}]}}]}]}\ndiff --git a/tests/json/rules_arp_operation.json b/tests/json/rules_arp_operation.json\nnew file mode 100644\nindex 000000000000..94389a33725e\n--- /dev/null\n+++ b/tests/json/rules_arp_operation.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"arp\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"table\":\"x\",\"family\":\"arp\",\"use\":1}},{\"set\":{\"name\":\"__set0\",\"table\":\"x\",\"flags\":3,\"family\":\"arp\",\"key_type\":11,\"key_len\":2,\"desc_size\":7,\"set_elem\":[{\"key\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000900\"}}},{\"key\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000400\"}}},{\"key\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000300\"}}},{\"key\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000800\"}}},{\"key\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000200\"}}},{\"key\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000a00\"}}},{\"key\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000100\"}}}]}},{\"rule\":{\"family\":\"arp\",\"table\":\"x\",\"chain\":\"y\",\"handle\":3,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":6,\"len\":2,\"base\":\"network\"},{\"type\":\"lookup\",\"set\":\"__set0\",\"sreg\":1,\"flags\":0}]}}]}]}\ndiff --git a/tests/json/rules_arp_operation_check.json b/tests/json/rules_arp_operation_check.json\nnew file mode 100644\nindex 000000000000..fac7b9447e3c\n--- /dev/null\n+++ b/tests/json/rules_arp_operation_check.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"arp\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"table\":\"x\",\"family\":\"arp\",\"use\":1}},{\"rule\":{\"family\":\"arp\",\"table\":\"x\",\"chain\":\"y\",\"handle\":2,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":6,\"len\":2,\"base\":\"network\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"neq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000300\"}}}]}}]}]}\ndiff --git a/tests/json/rules_arp_ptype_ip.json b/tests/json/rules_arp_ptype_ip.json\nnew file mode 100644\nindex 000000000000..81d2b6d366cd\n--- /dev/null\n+++ b/tests/json/rules_arp_ptype_ip.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"arp\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"table\":\"x\",\"family\":\"arp\",\"use\":1}},{\"rule\":{\"family\":\"arp\",\"table\":\"x\",\"chain\":\"y\",\"handle\":4,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":2,\"len\":2,\"base\":\"network\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000008\"}}}]}}]}]}\ndiff --git a/tests/json/rules_bridge_ether_saddr_drop.json b/tests/json/rules_bridge_ether_saddr_drop.json\nnew file mode 100644\nindex 000000000000..52cdcd1c1349\n--- /dev/null\n+++ b/tests/json/rules_bridge_ether_saddr_drop.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"bridge\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"bytes\":0,\"packets\":0,\"table\":\"x\",\"family\":\"bridge\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"input\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"bridge\",\"table\":\"x\",\"chain\":\"y\",\"handle\":2,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":0,\"len\":6,\"base\":\"link\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":6,\"data0\":\"0x03020100\",\"data1\":\"0x00000504\"}}},{\"type\":\"immediate\",\"dreg\":1,\"data\":{\"reg\":{\"type\":\"value\",\"len\":6,\"data0\":\"0xbadcfeff\",\"data1\":\"0x00007698\"}}},{\"type\":\"payload\",\"offset\":6,\"len\":6,\"base\":\"link\"},{\"type\":\"immediate\",\"dreg\":0,\"data\":{\"reg\":{\"type\":\"verdict\",\"verdict\":\"drop\"}}}]}}]}]}\ndiff --git a/tests/json/rules_bridge_ether_type_reject_icmp_host_unreachable.json b/tests/json/rules_bridge_ether_type_reject_icmp_host_unreachable.json\nnew file mode 100644\nindex 000000000000..a6f1ba4ea98c\n--- /dev/null\n+++ b/tests/json/rules_bridge_ether_type_reject_icmp_host_unreachable.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"bridge\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"bytes\":0,\"packets\":0,\"table\":\"x\",\"family\":\"bridge\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"input\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"bridge\",\"table\":\"x\",\"chain\":\"y\",\"handle\":12,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":12,\"len\":2,\"base\":\"link\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000008\"}}},{\"type\":\"reject\",\"type\":0,\"code\":1}]}}]}]}\ndiff --git a/tests/json/rules_bridge_vlan.json b/tests/json/rules_bridge_vlan.json\nnew file mode 100644\nindex 000000000000..375ea9b2e29a\n--- /dev/null\n+++ b/tests/json/rules_bridge_vlan.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"bridge\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"bytes\":0,\"packets\":0,\"table\":\"x\",\"family\":\"bridge\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"input\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"bridge\",\"table\":\"x\",\"chain\":\"y\",\"handle\":6,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":12,\"len\":2,\"base\":\"link\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000081\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":14,\"len\":2,\"base\":\"link\"},{\"type\":\"bitwise\",\"sreg\":1,\"dreg\":1,\"len\":2,\"mask\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x0000ff0f\"}},\"xor\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000000\"}}},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x0000fe0f\"}}}]}}]}]}\ndiff --git a/tests/json/rules_bridge_vlan_id.json b/tests/json/rules_bridge_vlan_id.json\nnew file mode 100644\nindex 000000000000..8f01fcedf9d2\n--- /dev/null\n+++ b/tests/json/rules_bridge_vlan_id.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"bridge\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"bytes\":0,\"packets\":0,\"table\":\"x\",\"family\":\"bridge\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"input\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"bridge\",\"table\":\"x\",\"chain\":\"y\",\"handle\":4,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":12,\"len\":2,\"base\":\"link\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000081\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":14,\"len\":2,\"base\":\"link\"},{\"type\":\"bitwise\",\"sreg\":1,\"dreg\":1,\"len\":2,\"mask\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x0000ff0f\"}},\"xor\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000000\"}}},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x0000fe0f\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":14,\"len\":1,\"base\":\"link\"},{\"type\":\"bitwise\",\"sreg\":1,\"dreg\":1,\"len\":1,\"mask\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000010\"}},\"xor\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000000\"}}},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000000\"}}}]}}]}]}\ndiff --git a/tests/json/rules_bridge_vlan_id_saddr_udp_dport_drop_domain.json b/tests/json/rules_bridge_vlan_id_saddr_udp_dport_drop_domain.json\nnew file mode 100644\nindex 000000000000..69f8446e7622\n--- /dev/null\n+++ b/tests/json/rules_bridge_vlan_id_saddr_udp_dport_drop_domain.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"bridge\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"bytes\":0,\"packets\":0,\"table\":\"x\",\"family\":\"bridge\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"input\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"bridge\",\"table\":\"x\",\"chain\":\"y\",\"handle\":9,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":12,\"len\":2,\"base\":\"link\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000081\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":14,\"len\":2,\"base\":\"link\"},{\"type\":\"bitwise\",\"sreg\":1,\"dreg\":1,\"len\":2,\"mask\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x0000ff0f\"}},\"xor\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000000\"}}},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000100\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":16,\"len\":2,\"base\":\"link\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000008\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":12,\"len\":4,\"base\":\"network\"},{\"type\":\"bitwise\",\"sreg\":1,\"dreg\":1,\"len\":4,\"mask\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x00feffff\"}},\"xor\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x00000000\"}}},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x0000000a\"}}},{\"type\":\"meta\",\"dreg\":1,\"key\":\"l4proto\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000011\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":2,\"len\":2,\"base\":\"transport\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00003500\"}}}]}}]}]}\ndiff --git a/tests/json/rules_ipv4_ct_state_accept.json b/tests/json/rules_ipv4_ct_state_accept.json\nnew file mode 100644\nindex 000000000000..942f19850026\n--- /dev/null\n+++ b/tests/json/rules_ipv4_ct_state_accept.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"mangle\",\"family\":\"ip\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"prerouting\",\"handle\":1,\"bytes\":696,\"packets\":8,\"table\":\"mangle\",\"family\":\"ip\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"prerouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip\",\"table\":\"mangle\",\"chain\":\"prerouting\",\"handle\":2,\"expr\":[{\"type\":\"ct\",\"dreg\":1,\"key\":\"state\"},{\"type\":\"bitwise\",\"sreg\":1,\"dreg\":1,\"len\":4,\"mask\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x00000006\"}},\"xor\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x00000000\"}}},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"neq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x00000000\"}}},{\"type\":\"immediate\",\"dreg\":0,\"data\":{\"reg\":{\"type\":\"verdict\",\"verdict\":\"accept\"}}}]}}]}]}\ndiff --git a/tests/json/rules_ipv4_dup.json b/tests/json/rules_ipv4_dup.json\nnew file mode 100644\nindex 000000000000..54491d01f994\n--- /dev/null\n+++ b/tests/json/rules_ipv4_dup.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"mangle\",\"family\":\"ip\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"prerouting\",\"handle\":1,\"bytes\":4658,\"packets\":42,\"table\":\"mangle\",\"family\":\"ip\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"prerouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip\",\"table\":\"mangle\",\"chain\":\"prerouting\",\"handle\":2,\"expr\":[{\"type\":\"immediate\",\"dreg\":1,\"data\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x020014ac\"}}},{\"type\":\"dup\",\"sreg_addr\":1}]}}]}]}\ndiff --git a/tests/json/rules_ipv4_icmp_type_echo-request_accept.json b/tests/json/rules_ipv4_icmp_type_echo-request_accept.json\nnew file mode 100644\nindex 000000000000..5a1032d0b771\n--- /dev/null\n+++ b/tests/json/rules_ipv4_icmp_type_echo-request_accept.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"mangle\",\"family\":\"ip\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"prerouting\",\"handle\":1,\"bytes\":46200,\"packets\":417,\"table\":\"mangle\",\"family\":\"ip\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"prerouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip\",\"table\":\"mangle\",\"chain\":\"prerouting\",\"handle\":2,\"expr\":[{\"type\":\"meta\",\"dreg\":1,\"key\":\"l4proto\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000001\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":0,\"len\":1,\"base\":\"transport\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000008\"}}},{\"type\":\"immediate\",\"dreg\":0,\"data\":{\"reg\":{\"type\":\"verdict\",\"verdict\":\"accept\"}}}]}}]}]}\ndiff --git a/tests/json/rules_ipv4_icmp_type_echo-request_counter.json b/tests/json/rules_ipv4_icmp_type_echo-request_counter.json\nnew file mode 100644\nindex 000000000000..a95de6759a17\n--- /dev/null\n+++ b/tests/json/rules_ipv4_icmp_type_echo-request_counter.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"mangle\",\"family\":\"ip\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"prerouting\",\"handle\":1,\"bytes\":104,\"packets\":2,\"table\":\"mangle\",\"family\":\"ip\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"prerouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip\",\"table\":\"mangle\",\"chain\":\"prerouting\",\"handle\":2,\"expr\":[{\"type\":\"meta\",\"dreg\":1,\"key\":\"l4proto\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000001\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":0,\"len\":1,\"base\":\"transport\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000008\"}}},{\"type\":\"counter\",\"pkts\":0,\"bytes\":0}]}}]}]}\ndiff --git a/tests/json/rules_ipv4_iifname_accept.json b/tests/json/rules_ipv4_iifname_accept.json\nnew file mode 100644\nindex 000000000000..5a37a017901d\n--- /dev/null\n+++ b/tests/json/rules_ipv4_iifname_accept.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"mangle\",\"family\":\"ip\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"prerouting\",\"handle\":1,\"bytes\":4435,\"packets\":51,\"table\":\"mangle\",\"family\":\"ip\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"prerouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip\",\"table\":\"mangle\",\"chain\":\"prerouting\",\"handle\":5,\"expr\":[{\"type\":\"meta\",\"dreg\":1,\"key\":\"iifname\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":16,\"data0\":\"0x00006f6c\",\"data1\":\"0x00000000\",\"data2\":\"0x00000000\",\"data3\":\"0x00000000\"}}},{\"type\":\"immediate\",\"dreg\":0,\"data\":{\"reg\":{\"type\":\"verdict\",\"verdict\":\"accept\"}}}]}}]}]}\ndiff --git a/tests/json/rules_ipv4_saddr_daddr_counter.json b/tests/json/rules_ipv4_saddr_daddr_counter.json\nnew file mode 100644\nindex 000000000000..396cf2368b94\n--- /dev/null\n+++ b/tests/json/rules_ipv4_saddr_daddr_counter.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"mangle\",\"family\":\"ip\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"prerouting\",\"handle\":1,\"bytes\":2009,\"packets\":15,\"table\":\"mangle\",\"family\":\"ip\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"prerouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip\",\"table\":\"mangle\",\"chain\":\"prerouting\",\"handle\":2,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":12,\"len\":8,\"base\":\"network\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":8,\"data0\":\"0x6401a8c0\",\"data1\":\"0x0101a8c0\"}}},{\"type\":\"counter\",\"pkts\":0,\"bytes\":0}]}}]}]}\ndiff --git a/tests/json/rules_ipv4_set_elements.json b/tests/json/rules_ipv4_set_elements.json\nnew file mode 100644\nindex 000000000000..ea641e384047\n--- /dev/null\n+++ b/tests/json/rules_ipv4_set_elements.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"mangle\",\"family\":\"ip\",\"flags\":0,\"use\":2}},{\"chain\":{\"name\":\"prerouting\",\"handle\":1,\"bytes\":15927,\"packets\":169,\"table\":\"mangle\",\"family\":\"ip\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"prerouting\",\"prio\":0,\"policy\":\"accept\"}},{\"set\":{\"name\":\"blackhole\",\"table\":\"mangle\",\"family\":\"ip\",\"key_type\":7,\"key_len\":4,\"set_elem\":[{\"key\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x0401a8c0\"}}},{\"key\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x0501a8c0\"}}}]}},{\"rule\":{\"family\":\"ip\",\"table\":\"mangle\",\"chain\":\"prerouting\",\"handle\":2,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":12,\"len\":4,\"base\":\"network\"},{\"type\":\"lookup\",\"set\":\"blackhole\",\"sreg\":1,\"flags\":0},{\"type\":\"immediate\",\"dreg\":0,\"data\":{\"reg\":{\"type\":\"verdict\",\"verdict\":\"drop\"}}}]}}]}]}\ndiff --git a/tests/json/rules_ipv4_tcp_dport_http_ssh.json b/tests/json/rules_ipv4_tcp_dport_http_ssh.json\nnew file mode 100644\nindex 000000000000..b0f1709b8f49\n--- /dev/null\n+++ b/tests/json/rules_ipv4_tcp_dport_http_ssh.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"mangle\",\"family\":\"ip\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"prerouting\",\"handle\":1,\"bytes\":1308,\"packets\":12,\"table\":\"mangle\",\"family\":\"ip\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"prerouting\",\"prio\":0,\"policy\":\"accept\"}},{\"set\":{\"name\":\"__set0\",\"table\":\"mangle\",\"flags\":3,\"family\":\"ip\",\"key_type\":13,\"key_len\":2,\"desc_size\":2,\"set_elem\":[{\"key\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00001600\"}}},{\"key\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00005000\"}}}]}},{\"rule\":{\"family\":\"ip\",\"table\":\"mangle\",\"chain\":\"prerouting\",\"handle\":2,\"expr\":[{\"type\":\"meta\",\"dreg\":1,\"key\":\"l4proto\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000006\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":2,\"len\":2,\"base\":\"transport\"},{\"type\":\"lookup\",\"set\":\"__set0\",\"sreg\":1,\"flags\":0},{\"type\":\"immediate\",\"dreg\":0,\"data\":{\"reg\":{\"type\":\"verdict\",\"verdict\":\"accept\"}}}]}}]}]}\ndiff --git a/tests/json/rules_ipv4_tcp_flags.json b/tests/json/rules_ipv4_tcp_flags.json\nnew file mode 100644\nindex 000000000000..e0eadddd9528\n--- /dev/null\n+++ b/tests/json/rules_ipv4_tcp_flags.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"mangle\",\"family\":\"ip\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"prerouting\",\"handle\":1,\"bytes\":3886,\"packets\":36,\"table\":\"mangle\",\"family\":\"ip\",\"use\":1,\"type\":\"filter\",\"hooknum\":\"prerouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip\",\"table\":\"mangle\",\"chain\":\"prerouting\",\"handle\":2,\"expr\":[{\"type\":\"meta\",\"dreg\":1,\"key\":\"l4proto\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000006\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":13,\"len\":1,\"base\":\"transport\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"neq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000002\"}}},{\"type\":\"counter\",\"pkts\":6,\"bytes\":770}]}}]}]}\ndiff --git a/tests/json/rules_ipv6_daddr_udp_dport_counter.json b/tests/json/rules_ipv6_daddr_udp_dport_counter.json\nnew file mode 100644\nindex 000000000000..78bf12071042\n--- /dev/null\n+++ b/tests/json/rules_ipv6_daddr_udp_dport_counter.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"ip6\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"bytes\":93,\"packets\":1,\"table\":\"x\",\"family\":\"ip6\",\"use\":1,\"type\":\"nat\",\"hooknum\":\"postrouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip6\",\"table\":\"x\",\"chain\":\"y\",\"handle\":8,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":24,\"len\":16,\"base\":\"network\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"gte\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":16,\"data0\":\"0x000000fe\",\"data1\":\"0x00000000\",\"data2\":\"0x00000000\",\"data3\":\"0x01000000\"}}},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"lte\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":16,\"data0\":\"0x000000fe\",\"data1\":\"0x00000000\",\"data2\":\"0x00000000\",\"data3\":\"0x00020000\"}}},{\"type\":\"meta\",\"dreg\":1,\"key\":\"l4proto\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000011\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":2,\"len\":2,\"base\":\"transport\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00003500\"}}},{\"type\":\"counter\",\"pkts\":0,\"bytes\":0}]}}]}]}\ndiff --git a/tests/json/rules_ipv6_daddr_udp_dport_counter_masquerade.json b/tests/json/rules_ipv6_daddr_udp_dport_counter_masquerade.json\nnew file mode 100644\nindex 000000000000..8eda8f4ce1c9\n--- /dev/null\n+++ b/tests/json/rules_ipv6_daddr_udp_dport_counter_masquerade.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"ip6\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"bytes\":0,\"packets\":0,\"table\":\"x\",\"family\":\"ip6\",\"use\":1,\"type\":\"nat\",\"hooknum\":\"postrouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip6\",\"table\":\"x\",\"chain\":\"y\",\"handle\":2,\"expr\":[{\"type\":\"payload\",\"dreg\":1,\"offset\":24,\"len\":16,\"base\":\"network\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"gte\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":16,\"data0\":\"0x000000fe\",\"data1\":\"0x00000000\",\"data2\":\"0x00000000\",\"data3\":\"0x01000000\"}}},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"lte\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":16,\"data0\":\"0x000000fe\",\"data1\":\"0x00000000\",\"data2\":\"0x00000000\",\"data3\":\"0x00020000\"}}},{\"type\":\"meta\",\"dreg\":1,\"key\":\"l4proto\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000011\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":2,\"len\":2,\"base\":\"transport\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00003500\"}}},{\"type\":\"counter\",\"pkts\":0,\"bytes\":0},{\"type\":\"masq\"}]}}]}]}\ndiff --git a/tests/json/rules_ipv6_icmpv6_id.json b/tests/json/rules_ipv6_icmpv6_id.json\nnew file mode 100644\nindex 000000000000..19804c21ee3d\n--- /dev/null\n+++ b/tests/json/rules_ipv6_icmpv6_id.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"ip6\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"bytes\":0,\"packets\":0,\"table\":\"x\",\"family\":\"ip6\",\"use\":1,\"type\":\"nat\",\"hooknum\":\"postrouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip6\",\"table\":\"x\",\"chain\":\"y\",\"handle\":2,\"expr\":[{\"type\":\"meta\",\"dreg\":1,\"key\":\"l4proto\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x0000003a\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":4,\"len\":2,\"base\":\"transport\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"gte\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00002100\"}}},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"lte\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00002d00\"}}}]}}]}]}\ndiff --git a/tests/json/rules_ipv6_iifname_ct_state_tcp_dport_vmap_masquerade.json b/tests/json/rules_ipv6_iifname_ct_state_tcp_dport_vmap_masquerade.json\nnew file mode 100644\nindex 000000000000..5245041ed619\n--- /dev/null\n+++ b/tests/json/rules_ipv6_iifname_ct_state_tcp_dport_vmap_masquerade.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"ip6\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"bytes\":0,\"packets\":0,\"table\":\"x\",\"family\":\"ip6\",\"use\":1,\"type\":\"nat\",\"hooknum\":\"postrouting\",\"prio\":0,\"policy\":\"accept\"}},{\"set\":{\"name\":\"__map0\",\"table\":\"x\",\"flags\":11,\"family\":\"ip6\",\"key_type\":13,\"key_len\":2,\"data_type\":4294967040,\"data_len\":16,\"desc_size\":2,\"set_elem\":[{\"key\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00001600\"}},\"data\":{\"reg\":{\"type\":\"verdict\",\"verdict\":\"drop\"}}},{\"key\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x0000de00\"}},\"data\":{\"reg\":{\"type\":\"verdict\",\"verdict\":\"drop\"}}}]}},{\"rule\":{\"family\":\"ip6\",\"table\":\"x\",\"chain\":\"y\",\"handle\":2,\"expr\":[{\"type\":\"meta\",\"dreg\":1,\"key\":\"iifname\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":16,\"data0\":\"0x6e616c77\",\"data1\":\"0x00000030\",\"data2\":\"0x00000000\",\"data3\":\"0x00000000\"}}},{\"type\":\"ct\",\"dreg\":1,\"key\":\"state\"},{\"type\":\"bitwise\",\"sreg\":1,\"dreg\":1,\"len\":4,\"mask\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x0000000a\"}},\"xor\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x00000000\"}}},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"neq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":4,\"data0\":\"0x00000000\"}}},{\"type\":\"meta\",\"dreg\":1,\"key\":\"l4proto\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000006\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":2,\"len\":2,\"base\":\"transport\"},{\"type\":\"lookup\",\"set\":\"__map0\",\"sreg\":1,\"dreg\":0,\"flags\":0},{\"type\":\"masq\"}]}}]}]}\ndiff --git a/tests/json/rules_ipv6_l4proto_tcp_masquerade.json b/tests/json/rules_ipv6_l4proto_tcp_masquerade.json\nnew file mode 100644\nindex 000000000000..c190d7eaa0b6\n--- /dev/null\n+++ b/tests/json/rules_ipv6_l4proto_tcp_masquerade.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"ip6\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"bytes\":0,\"packets\":0,\"table\":\"x\",\"family\":\"ip6\",\"use\":1,\"type\":\"nat\",\"hooknum\":\"postrouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip6\",\"table\":\"x\",\"chain\":\"y\",\"handle\":2,\"expr\":[{\"type\":\"meta\",\"dreg\":1,\"key\":\"l4proto\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000006\"}}},{\"type\":\"immediate\",\"dreg\":1,\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000004\"}}},{\"type\":\"masq\",\"sreg_proto_min\":1,\"sreg_proto_max\":1}]}}]}]}\ndiff --git a/tests/json/rules_ipv6_tcp_dport_ssh_daddr_mapping_ether_saddr_accept.json b/tests/json/rules_ipv6_tcp_dport_ssh_daddr_mapping_ether_saddr_accept.json\nnew file mode 100644\nindex 000000000000..9768b770f441\n--- /dev/null\n+++ b/tests/json/rules_ipv6_tcp_dport_ssh_daddr_mapping_ether_saddr_accept.json\n@@ -0,0 +1 @@\n+{\"nftables\":[{\"add\":[{\"table\":{\"name\":\"x\",\"family\":\"ip6\",\"flags\":0,\"use\":1}},{\"chain\":{\"name\":\"y\",\"handle\":1,\"bytes\":0,\"packets\":0,\"table\":\"x\",\"family\":\"ip6\",\"use\":1,\"type\":\"nat\",\"hooknum\":\"postrouting\",\"prio\":0,\"policy\":\"accept\"}},{\"rule\":{\"family\":\"ip6\",\"table\":\"x\",\"chain\":\"y\",\"handle\":2,\"expr\":[{\"type\":\"meta\",\"dreg\":1,\"key\":\"l4proto\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":1,\"data0\":\"0x00000006\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":2,\"len\":2,\"base\":\"transport\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00001600\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":24,\"len\":16,\"base\":\"network\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":16,\"data0\":\"0x00000100\",\"data1\":\"0x00000000\",\"data2\":\"0x00000000\",\"data3\":\"0x02000000\"}}},{\"type\":\"meta\",\"dreg\":1,\"key\":\"iiftype\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":2,\"data0\":\"0x00000001\"}}},{\"type\":\"payload\",\"dreg\":1,\"offset\":6,\"len\":6,\"base\":\"link\"},{\"type\":\"cmp\",\"sreg\":1,\"op\":\"eq\",\"data\":{\"reg\":{\"type\":\"value\",\"len\":6,\"data0\":\"0x0c540f00\",\"data1\":\"0x00000411\"}}},{\"type\":\"immediate\",\"dreg\":0,\"data\":{\"reg\":{\"type\":\"verdict\",\"verdict\":\"accept\"}}}]}}]}]}\n",
    "prefixes": []
}