From 1ed84c4626973cee92e4a238ad55f7ba1f5af249 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Mon, 20 Feb 2017 18:06:32 +0100 Subject: src: implement add/create/delete for ct helper objects Signed-off-by: Florian Westphal Acked-by: Pablo Neira Ayuso --- src/rule.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/rule.c') diff --git a/src/rule.c b/src/rule.c index 453aa2f2..997a6243 100644 --- a/src/rule.c +++ b/src/rule.c @@ -885,6 +885,7 @@ void cmd_free(struct cmd *cmd) break; case CMD_OBJ_COUNTER: case CMD_OBJ_QUOTA: + case CMD_OBJ_CT_HELPER: obj_free(cmd->object); break; default: @@ -1001,6 +1002,7 @@ static int do_command_add(struct netlink_ctx *ctx, struct cmd *cmd, bool excl) return do_add_setelems(ctx, &cmd->handle, cmd->expr, excl); case CMD_OBJ_COUNTER: case CMD_OBJ_QUOTA: + case CMD_OBJ_CT_HELPER: return netlink_add_obj(ctx, &cmd->handle, cmd->object, excl); default: BUG("invalid command object type %u\n", cmd->obj); @@ -1071,6 +1073,9 @@ static int do_command_delete(struct netlink_ctx *ctx, struct cmd *cmd) case CMD_OBJ_QUOTA: return netlink_delete_obj(ctx, &cmd->handle, &cmd->location, NFT_OBJECT_QUOTA); + case CMD_OBJ_CT_HELPER: + return netlink_delete_obj(ctx, &cmd->handle, &cmd->location, + NFT_OBJECT_CT_HELPER); default: BUG("invalid command object type %u\n", cmd->obj); } @@ -1455,6 +1460,7 @@ static int do_command_list(struct netlink_ctx *ctx, struct cmd *cmd) case CMD_OBJ_QUOTA: case CMD_OBJ_QUOTAS: return do_list_obj(ctx, cmd, NFT_OBJECT_QUOTA); + case CMD_OBJ_CT_HELPER: case CMD_OBJ_CT_HELPERS: return do_list_obj(ctx, cmd, NFT_OBJECT_CT_HELPER); default: @@ -1603,6 +1609,22 @@ static int do_command_describe(struct netlink_ctx *ctx, struct cmd *cmd) return 0; } +struct cmd *cmd_alloc_obj_ct(enum cmd_ops op, int type, const struct handle *h, + const struct location *loc, void *data) +{ + enum cmd_obj cmd_obj; + + switch (type) { + case NFT_OBJECT_CT_HELPER: + cmd_obj = CMD_OBJ_CT_HELPER; + break; + default: + BUG("missing type mapping"); + } + + return cmd_alloc(op, cmd_obj, h, loc, data); +} + int do_command(struct netlink_ctx *ctx, struct cmd *cmd) { switch (cmd->op) { -- cgit v1.2.3