summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2019-08-14 13:34:52 +0200
committerFlorian Westphal <fw@strlen.de>2019-08-14 15:26:30 +0200
commit03956c54c85d97c3eb415fac19eddd9fa4932353 (patch)
treebd63ee2dd53b8136442890a4bf89be50073e90e1
parent8202d0fb87c540717667bc73aab7461961973b65 (diff)
src: json: support json restore for "th" pseudoheader
Json output could not be restored back by nft because it did not recognize the new "th" pseudoheader. Fixes: a43a696443a150f44 ("proto: add pseudo th protocol to match d/sport in generic way") Signed-off-by: Florian Westphal <fw@strlen.de> Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--src/parser_json.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/parser_json.c b/src/parser_json.c
index 956233b9..d42bab70 100644
--- a/src/parser_json.c
+++ b/src/parser_json.c
@@ -503,7 +503,8 @@ static const struct proto_desc *proto_lookup_byname(const char *name)
&proto_udplite,
&proto_tcp,
&proto_dccp,
- &proto_sctp
+ &proto_sctp,
+ &proto_th,
};
unsigned int i;
@@ -519,11 +520,10 @@ static struct expr *json_parse_payload_expr(struct json_ctx *ctx,
{
const char *protocol, *field, *base;
int offset, len, val;
+ struct expr *expr;
if (!json_unpack(root, "{s:s, s:i, s:i}",
"base", &base, "offset", &offset, "len", &len)) {
- struct expr *expr;
-
if (!strcmp(base, "ll")) {
val = PROTO_BASE_LL_HDR;
} else if (!strcmp(base, "nh")) {
@@ -553,7 +553,12 @@ static struct expr *json_parse_payload_expr(struct json_ctx *ctx,
protocol, field);
return NULL;
}
- return payload_expr_alloc(int_loc, proto, val);
+ expr = payload_expr_alloc(int_loc, proto, val);
+
+ if (proto == &proto_th)
+ expr->payload.is_raw = true;
+
+ return expr;
}
json_error(ctx, "Invalid payload expression properties.");
return NULL;