This series addresses feedback gathered during NFWS2018: Patches 1 and 2 contain fixes for libnftables-json man page. Patches 3 to 8 change objects and property names for better extensibility and readability. Finally, patch 9 adds a special object containing meta info to all JSON output. Phil Sutter (9): doc: Improve example in libnftables-json(5) doc: Review libnftables-json.adoc JSON: Make meta statement/expression extensible JSON: Review verdict statement and expression JSON: Review payload expression JSON: Rename (v)map expression properties JSON: Rename mangle statement properties JSON: Make match op mandatory, introduce 'in' operator JSON: Add metainfo object to all output doc/libnftables-json.adoc | 318 ++++++++++-------- include/json.h | 2 + src/json.c | 78 ++--- src/parser_json.c | 189 ++++++----- tests/py/any/ct.t.json | 121 ++++--- tests/py/any/ct.t.json.output | 43 ++- tests/py/any/dup.t.json | 6 +- tests/py/any/fwd.t.json | 6 +- tests/py/any/fwd.t.json.output | 6 +- tests/py/any/meta.t.json | 445 +++++++++++++++----------- tests/py/any/meta.t.json.output | 131 ++++---- tests/py/any/rawpayload.t.json | 21 +- tests/py/any/rawpayload.t.json.output | 10 +- tests/py/any/rt.t.json | 1 + tests/py/arp/arp.t.json | 135 ++++---- tests/py/arp/arp.t.json.output | 30 +- tests/py/bridge/ether.t.json | 45 ++- tests/py/bridge/ether.t.json.output | 18 +- tests/py/bridge/icmpX.t.json | 18 +- tests/py/bridge/icmpX.t.json.output | 12 +- tests/py/bridge/meta.t.json | 6 +- tests/py/bridge/reject.t.json | 12 +- tests/py/bridge/reject.t.json.output | 39 ++- tests/py/bridge/vlan.t.json | 101 ++++-- tests/py/inet/ah.t.json | 75 +++-- tests/py/inet/comp.t.json | 42 ++- tests/py/inet/comp.t.json.output | 22 +- tests/py/inet/ct.t.json | 5 +- tests/py/inet/ct.t.json.output | 1 + tests/py/inet/dccp.t.json | 44 ++- tests/py/inet/dccp.t.json.output | 3 +- tests/py/inet/esp.t.json | 36 ++- tests/py/inet/ether-ip.t.json | 21 +- tests/py/inet/ether-ip.t.json.output | 9 +- tests/py/inet/ether.t.json | 18 +- tests/py/inet/ether.t.json.output | 6 +- tests/py/inet/fib.t.json | 8 +- tests/py/inet/fib.t.json.output | 4 +- tests/py/inet/icmp.t.json | 30 +- tests/py/inet/icmp.t.json.output | 6 +- tests/py/inet/icmpX.t.json | 27 +- tests/py/inet/icmpX.t.json.output | 21 +- tests/py/inet/ip.t.json | 7 +- tests/py/inet/ip_tcp.t.json | 36 ++- tests/py/inet/ip_tcp.t.json.output | 27 +- tests/py/inet/map.t.json | 24 +- tests/py/inet/map.t.json.output | 24 +- tests/py/inet/meta.t.json | 47 ++- tests/py/inet/meta.t.json.output | 9 +- tests/py/inet/reject.t.json | 15 +- tests/py/inet/reject.t.json.output | 39 ++- tests/py/inet/rt.t.json | 9 +- tests/py/inet/rt.t.json.output | 4 +- tests/py/inet/sctp.t.json | 80 +++-- tests/py/inet/sets.t.json | 5 +- tests/py/inet/socket.t.json | 2 + tests/py/inet/tcp.t.json | 228 +++++++------ tests/py/inet/tcp.t.json.output | 23 +- tests/py/inet/tcpopt.t.json | 31 +- tests/py/inet/tcpopt.t.json.output | 2 + tests/py/inet/udp.t.json | 103 +++--- tests/py/inet/udplite.t.json | 65 ++-- tests/py/ip/ct.t.json | 13 + tests/py/ip/ct.t.json.output | 2 + tests/py/ip/dnat.t.json | 43 ++- tests/py/ip/dnat.t.json.output | 10 +- tests/py/ip/dup.t.json | 6 +- tests/py/ip/ether.t.json | 36 ++- tests/py/ip/ether.t.json.output | 9 +- tests/py/ip/flowtable.t.json | 2 +- tests/py/ip/hash.t.json | 50 +-- tests/py/ip/icmp.t.json | 188 ++++++----- tests/py/ip/icmp.t.json.output | 8 +- tests/py/ip/ip.t.json | 303 +++++++++++------- tests/py/ip/ip.t.json.output | 32 +- tests/py/ip/ip_tcp.t.json | 18 +- tests/py/ip/ip_tcp.t.json.output | 15 +- tests/py/ip/masquerade.t.json | 58 ++-- tests/py/ip/masquerade.t.json.output | 15 +- tests/py/ip/meta.t.json | 24 +- tests/py/ip/meta.t.json.output | 9 +- tests/py/ip/numgen.t.json | 16 +- tests/py/ip/numgen.t.json.output | 12 +- tests/py/ip/objects.t.json | 33 +- tests/py/ip/objects.t.json.output | 12 +- tests/py/ip/redirect.t.json | 91 ++++-- tests/py/ip/redirect.t.json.output | 18 +- tests/py/ip/reject.t.json | 3 +- tests/py/ip/reject.t.json.output | 3 +- tests/py/ip/rt.t.json | 1 + tests/py/ip/sets.t.json | 25 +- tests/py/ip/snat.t.json | 27 +- tests/py/ip/snat.t.json.output | 11 +- tests/py/ip/tcp.t.json | 11 +- tests/py/ip/tcp.t.json.output | 8 +- tests/py/ip/tcpopt.t.json | 26 ++ tests/py/ip/tcpopt.t.json.output | 1 + tests/py/ip6/dnat.t.json | 9 +- tests/py/ip6/dst.t.json | 10 + tests/py/ip6/dst.t.json.output | 2 + tests/py/ip6/dup.t.json | 6 +- tests/py/ip6/ether.t.json | 36 ++- tests/py/ip6/ether.t.json.output | 9 +- tests/py/ip6/exthdr.t.json | 8 + tests/py/ip6/exthdr.t.json.output | 4 + tests/py/ip6/flowtable.t.json | 8 +- tests/py/ip6/flowtable.t.json.output | 8 +- tests/py/ip6/frag.t.json | 20 ++ tests/py/ip6/frag.t.json.output | 4 + tests/py/ip6/hbh.t.json | 10 + tests/py/ip6/hbh.t.json.output | 2 + tests/py/ip6/icmpv6.t.json | 163 ++++++---- tests/py/ip6/icmpv6.t.json.output | 11 +- tests/py/ip6/ip6.t.json | 308 +++++++++++------- tests/py/ip6/ip6.t.json.output | 61 ++-- tests/py/ip6/map.t.json | 12 +- tests/py/ip6/map.t.json.output | 12 +- tests/py/ip6/masquerade.t.json | 58 ++-- tests/py/ip6/masquerade.t.json.output | 12 +- tests/py/ip6/meta.t.json | 24 +- tests/py/ip6/meta.t.json.output | 9 +- tests/py/ip6/mh.t.json | 21 ++ tests/py/ip6/mh.t.json.output | 2 + tests/py/ip6/redirect.t.json | 85 +++-- tests/py/ip6/redirect.t.json.output | 18 +- tests/py/ip6/reject.t.json | 3 +- tests/py/ip6/reject.t.json.output | 3 +- tests/py/ip6/rt.t.json | 19 ++ tests/py/ip6/rt.t.json.output | 2 + tests/py/ip6/rt0.t.json | 1 + tests/py/ip6/sets.t.json | 14 +- tests/py/ip6/snat.t.json | 6 +- tests/py/ip6/srh.t.json | 11 + tests/py/ip6/srh.t.json.output | 1 + tests/py/ip6/tcpopt.t.json | 26 ++ tests/py/ip6/tcpopt.t.json.output | 1 + tests/py/ip6/vmap.t.json | 252 +++++++-------- tests/py/ip6/vmap.t.json.output | 78 ++--- tests/py/nft-test.py | 4 +- 139 files changed, 3358 insertions(+), 2085 deletions(-) -- 2.18.0