diff options
author | Phil Sutter <phil@nwl.cc> | 2018-06-08 17:27:16 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2018-06-11 11:31:49 +0200 |
commit | e8b5419b94e230d008d6701b66d02434a7cb1152 (patch) | |
tree | 0870685808e4259f7808f5e3ea797fe79e38e4f2 /src/parser_json.c | |
parent | cd102c36aedf2a8f65ff235a009f297352cd6b65 (diff) |
JSON: Add support for socket expression
Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/parser_json.c')
-rw-r--r-- | src/parser_json.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/parser_json.c b/src/parser_json.c index e340bebc..d60cbad8 100644 --- a/src/parser_json.c +++ b/src/parser_json.c @@ -10,6 +10,7 @@ #include <netlink.h> #include <parser.h> #include <rule.h> +#include <socket.h> #include <netdb.h> #include <netinet/icmp6.h> @@ -345,6 +346,27 @@ static struct expr *json_parse_meta_expr(struct json_ctx *ctx, return meta_expr_alloc(int_loc, key); } +static struct expr *json_parse_socket_expr(struct json_ctx *ctx, + const char *type, json_t *root) +{ + const char *key; + int keyval = -1; + + + if (json_unpack_err(ctx, root, "{s:s}", "key", &key)) + return NULL; + + if (!strcmp(key, "transparent")) + keyval = NFT_SOCKET_TRANSPARENT; + + if (keyval == -1) { + json_error(ctx, "Invalid socket key value."); + return NULL; + } + + return socket_expr_alloc(int_loc, keyval); +} + static int json_parse_payload_field(const struct proto_desc *desc, const char *name, int *field) { @@ -1157,6 +1179,7 @@ static struct expr *json_parse_expr(struct json_ctx *ctx, json_t *root) { "exthdr", json_parse_exthdr_expr, CTX_F_PRIMARY | CTX_F_SET_RHS | CTX_F_SES | CTX_F_MAP }, { "tcp option", json_parse_tcp_option_expr, CTX_F_PRIMARY | CTX_F_SET_RHS | CTX_F_MANGLE | CTX_F_SES }, { "meta", json_parse_meta_expr, CTX_F_STMT | CTX_F_PRIMARY | CTX_F_SET_RHS | CTX_F_MANGLE | CTX_F_SES | CTX_F_MAP }, + { "socket", json_parse_socket_expr, CTX_F_PRIMARY }, { "rt", json_parse_rt_expr, CTX_F_STMT | CTX_F_PRIMARY | CTX_F_SET_RHS | CTX_F_SES | CTX_F_MAP }, { "ct", json_parse_ct_expr, CTX_F_STMT | CTX_F_PRIMARY | CTX_F_SET_RHS | CTX_F_MANGLE | CTX_F_SES | CTX_F_MAP }, { "numgen", json_parse_numgen_expr, CTX_F_STMT | CTX_F_PRIMARY | CTX_F_SET_RHS | CTX_F_SES | CTX_F_MAP }, |