This way JSON format is more consistent with the standard one.
Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
json_t *map_expr_json(const struct expr *expr, struct output_ctx *octx)
{
- return json_pack("{s:{s:o, s:o}}", "map",
+ const char *type = "map";
+
+ if (expr->mappings->ops->type == EXPR_SET_REF &&
+ expr->mappings->set->datatype->type == TYPE_VERDICT)
+ type = "vmap";
+
+ return json_pack("{s:{s:o, s:o}}", type,
"left", expr_print_json(expr->map, octx),
"right", expr_print_json(expr->mappings, octx));
}
return NULL;
/* Yes, verdict_map_stmt is actually an expression */
- if (!strcmp(type, "map")) {
+ if (!strcmp(type, "vmap")) {
struct expr *expr = json_parse_map_expr(ctx, type, tmp);
if (!expr) {
# ct state . ct mark vmap { new . 0x12345678 : drop}
[
{
- "map": {
+ "vmap": {
"left": {
"concat": [
{
# ct state . ct mark vmap { new . 0x12345678 : drop}
[
{
- "map": {
+ "vmap": {
"left": {
"concat": [
{
# meta iif . meta oif vmap { "lo" . "lo" : drop }
[
{
- "map": {
+ "vmap": {
"left": {
"concat": [
{
# fib daddr . iif type vmap { blackhole : drop, prohibit : drop, unicast : accept }
[
{
- "map": {
+ "vmap": {
"left": {
"fib": {
"flags": [
# fib daddr . iif type vmap { blackhole : drop, prohibit : drop, unicast : accept }
[
{
- "map": {
+ "vmap": {
"left": {
"fib": {
"flags": [
# tcp dport vmap { 22 : accept, 23 : drop }
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "dport",
# tcp dport vmap { 25:accept, 28:drop }
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "dport",
# tcp sport vmap { 25:accept, 28:drop }
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "sport",
# ip dscp vmap { cs1 : continue , cs4 : accept } counter
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "dscp",
# ip hdrlength vmap { 0-4 : drop, 5 : accept, 6 : continue } counter
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "hdrlength",
}
},
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "dport",
}
},
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "dport",
# ip6 dscp vmap { 0x04 : accept, 0x3f : continue } counter
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "dscp",
# ip6 flowlabel vmap { 0 : accept, 2 : continue }
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "flowlabel",
# ip6 dscp vmap { 0x04 : accept, 0x3f : continue } counter
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "dscp",
}
},
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "dport",
}
},
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "dport",
# ip6 saddr vmap { abcd::3 : accept }
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234:1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { ::1234:1234:1234:1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234::1234:1234:1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234::1234:1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234::1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234::1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234:1234::1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234:1234:1234::1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234:1234:1234:1234:: : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { ::1234:1234:1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234::1234:1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234::1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234::1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234::1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234:1234::1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234:1234:1234:: : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { ::1234:1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234::1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234::1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234::1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234::1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234:1234:: : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { ::1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234::1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234::1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234::1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234:: : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { ::1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234::1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234::1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:: : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { ::1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234::1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:: : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { ::1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:: : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { ::/64 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap {1234:1234:1234:1234:1234:1234:aaaa:: : accept, ::aaaa : drop}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap {1234:1234:1234:1234:1234:1234:aaaa:::accept, ::bbbb : drop}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap {1234:1234:1234:1234:1234:1234:aaaa:::accept,::cccc : drop}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap {1234:1234:1234:1234:1234:1234:aaaa:::accept,::dddd: drop}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { ::1234:1234:1234:1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234::1234:1234:1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234::1234:1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234::1234:1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234::1234:1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234:1234::1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234:1234:1234::1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { 1234:1234:1234:1234:1234:1234:1234:: : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap { ::1234:1234 : accept}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap {1234:1234:1234:1234:1234:1234:aaaa:: : accept, ::aaaa : drop}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap {1234:1234:1234:1234:1234:1234:aaaa:::accept, ::bbbb : drop}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap {1234:1234:1234:1234:1234:1234:aaaa:::accept,::cccc : drop}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",
# ip6 saddr vmap {1234:1234:1234:1234:1234:1234:aaaa:::accept,::dddd: drop}
[
{
- "map": {
+ "vmap": {
"left": {
"payload": {
"field": "saddr",