summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFernando Fernandez Mancera <ffmancera@riseup.net>2019-03-27 11:37:57 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2019-04-08 23:46:50 +0200
commit7fcccaebfd0ac5a4f001b5d5cd3c6ffbaa71cfe6 (patch)
treec38017a75f493dba514b19c6361b80cd3e40595d
parentfdda1fad8853b92bac726cbe162b58a5b73c8b4d (diff)
json: osf: add version json support
Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--src/json.c7
-rw-r--r--src/parser_json.c9
2 files changed, 13 insertions, 3 deletions
diff --git a/src/json.c b/src/json.c
index 276a3c0f..4900c023 100644
--- a/src/json.c
+++ b/src/json.c
@@ -864,7 +864,12 @@ json_t *socket_expr_json(const struct expr *expr, struct output_ctx *octx)
json_t *osf_expr_json(const struct expr *expr, struct output_ctx *octx)
{
- json_t *root = json_pack("{s:s}", "key", "name");
+ json_t *root;
+
+ if (expr->osf.flags & NFT_OSF_F_VERSION)
+ root = json_pack("{s:s}", "key", "version");
+ else
+ root = json_pack("{s:s}", "key", "name");
switch (expr->osf.ttl) {
case 1:
diff --git a/src/parser_json.c b/src/parser_json.c
index 704d85dc..827604be 100644
--- a/src/parser_json.c
+++ b/src/parser_json.c
@@ -381,6 +381,7 @@ static struct expr *json_parse_osf_expr(struct json_ctx *ctx,
const char *type, json_t *root)
{
const char *key, *ttl;
+ uint32_t flagval = 0;
uint8_t ttlval = 0;
if (json_unpack_err(ctx, root, "{s:s}", "key", &key))
@@ -397,8 +398,12 @@ static struct expr *json_parse_osf_expr(struct json_ctx *ctx,
}
}
- if (!strcmp(key, "name"))
- return osf_expr_alloc(int_loc, ttlval);
+ if (!strcmp(key, "name")) {
+ return osf_expr_alloc(int_loc, ttlval, flagval);
+ } else if (!strcmp(key, "version")) {
+ flagval |= NFT_OSF_F_VERSION;
+ return osf_expr_alloc(int_loc, ttlval, flagval);
+ }
json_error(ctx, "Invalid osf key value.");
return NULL;