nftables-json 0.3.0

Serde JSON model for interacting with the nftables `nft` executable
Documentation
# ct original ip saddr 192.168.0.1
[
    {
        "match": {
            "left": {
                "ct": {
                    "dir": "original",
                    "key": "ip saddr"
                }
            },
	    "op": "==",
            "right": "192.168.0.1"
        }
    }
]

# ct reply ip saddr 192.168.0.1
[
    {
        "match": {
            "left": {
                "ct": {
                    "dir": "reply",
                    "key": "ip saddr"
                }
            },
	    "op": "==",
            "right": "192.168.0.1"
        }
    }
]

# ct original ip daddr 192.168.0.1
[
    {
        "match": {
            "left": {
                "ct": {
                    "dir": "original",
                    "key": "ip daddr"
                }
            },
	    "op": "==",
            "right": "192.168.0.1"
        }
    }
]

# ct reply ip daddr 192.168.0.1
[
    {
        "match": {
            "left": {
                "ct": {
                    "dir": "reply",
                    "key": "ip daddr"
                }
            },
	    "op": "==",
            "right": "192.168.0.1"
        }
    }
]

# ct original ip saddr 192.168.1.0/24
[
    {
        "match": {
            "left": {
                "ct": {
                    "dir": "original",
                    "key": "ip saddr"
                }
            },
	    "op": "==",
            "right": {
                "prefix": {
                    "addr": "192.168.1.0",
                    "len": 24
                }
            }
        }
    }
]

# ct reply ip saddr 192.168.1.0/24
[
    {
        "match": {
            "left": {
                "ct": {
                    "dir": "reply",
                    "key": "ip saddr"
                }
            },
	    "op": "==",
            "right": {
                "prefix": {
                    "addr": "192.168.1.0",
                    "len": 24
                }
            }
        }
    }
]

# ct original ip daddr 192.168.1.0/24
[
    {
        "match": {
            "left": {
                "ct": {
                    "dir": "original",
                    "key": "ip daddr"
                }
            },
	    "op": "==",
            "right": {
                "prefix": {
                    "addr": "192.168.1.0",
                    "len": 24
                }
            }
        }
    }
]

# ct reply ip daddr 192.168.1.0/24
[
    {
        "match": {
            "left": {
                "ct": {
                    "dir": "reply",
                    "key": "ip daddr"
                }
            },
	    "op": "==",
            "right": {
                "prefix": {
                    "addr": "192.168.1.0",
                    "len": 24
                }
            }
        }
    }
]

# ct l3proto ipv4
[
    {
        "match": {
            "left": {
                "ct": {
                    "key": "l3proto"
                }
            },
	    "op": "==",
            "right": "ipv4"
        }
    }
]

# ct protocol 6 ct original proto-dst 22
[
    {
        "match": {
            "left": {
                "ct": {
                    "key": "protocol"
                }
            },
	    "op": "==",
            "right": 6
        }
    },
    {
        "match": {
            "left": {
                "ct": {
                    "dir": "original",
                    "key": "proto-dst"
                }
            },
	    "op": "==",
            "right": 22
        }
    }
]

# ct original protocol 17 ct reply proto-src 53
[
    {
        "match": {
            "left": {
                "ct": {
                    "dir": "original",
                    "key": "protocol"
                }
            },
	    "op": "==",
            "right": 17
        }
    },
    {
        "match": {
            "left": {
                "ct": {
                    "dir": "reply",
                    "key": "proto-src"
                }
            },
	    "op": "==",
            "right": 53
        }
    }
]

# meta mark set ct original ip daddr map { 1.1.1.1 : 0x00000011 }
[
    {
        "mangle": {
            "key": {
                "meta": {
                    "key": "mark"
                }
            },
            "value": {
                "map": {
                    "data": {
                        "set": [
                            [
                                "1.1.1.1",
                                17
                            ]
                        ]
                    },
                    "key": {
                        "ct": {
                            "dir": "original",
                            "key": "ip daddr"
                        }
                    }
                }
            }
        }
    }
]

# meta mark set ct original ip saddr . meta mark map { 1.1.1.1 . 0x00000014 : 0x0000001e }
[
    {
        "mangle": {
            "key": {
                "meta": {
                    "key": "mark"
                }
            },
            "value": {
                "map": {
                    "data": {
                        "set": [
                            [
                                {
                                    "concat": [
                                        "1.1.1.1",
                                        20
                                    ]
                                },
                                30
                            ]
                        ]
                    },
                    "key": {
                        "concat": [
                            {
                                "ct": {
                                    "dir": "original",
                                    "key": "ip saddr"
                                }
                            },
                            {
                                "meta": {
                                    "key": "mark"
                                }
                            }
                        ]
                    }
                }
            }
        }
    }
]

# ct original ip saddr . meta mark { 1.1.1.1 . 0x00000014 }
[
    {
        "match": {
            "left": {
                "concat": [
                    {
                        "ct": {
                            "dir": "original",
                            "key": "ip saddr"
                        }
                    },
                    {
                        "meta": {
                            "key": "mark"
                        }
                    }
                ]
            },
            "op": "==",
            "right": {
                "set": [
                    {
                        "concat": [
                            "1.1.1.1",
                            20
                        ]
                    }
                ]
            }
        }
    }
]