summaryrefslogtreecommitdiffstats
path: root/src/rule.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2020-02-17 22:38:13 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2020-02-19 15:17:11 +0100
commitf8aec603aa7e9dad1316079d42c7efcc52b773fa (patch)
tree2c2f9c1c601610464431683c6d90ca0e8af27d2b /src/rule.c
parent9491f1a8eecf1c023ebe3a30b1e92e44a4a39a05 (diff)
src: initial extended netlink error reporting
This patch correlates the in-kernel extended netlink error offset and the location information. Assuming 'foo' table does not exist, then error reporting shows: # nft delete table foo Error: Could not process rule: No such file or directory delete table foo ^^^ Similarly, if table uniquely identified by handle '1234' does not exist, then error reporting shows: # nft delete table handle 1234 Error: Could not process rule: No such file or directory delete table handle 1234 ^^^^ Assuming 'bar' chain does not exists in the kernel, while 'foo' does: # nft delete chain foo bar Error: Could not process rule: No such file or directory delete chain foo bar ^^^ This also gives us a hint when adding rules: # nft add rule ip foo bar counter Error: Could not process rule: No such file or directory add rule ip foo bar counter ^^^ This is based on ("src: basic support for extended netlink errors") from Florian Westphal, posted in 2018, with no netlink offset correlation support. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/rule.c')
-rw-r--r--src/rule.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/rule.c b/src/rule.c
index 337a66bb..9307dad5 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -1377,6 +1377,14 @@ struct cmd *cmd_alloc(enum cmd_ops op, enum cmd_obj obj,
return cmd;
}
+void cmd_add_loc(struct cmd *cmd, uint16_t offset, struct location *loc)
+{
+ assert(cmd->num_attrs < NFT_NLATTR_LOC_MAX);
+ cmd->attr[cmd->num_attrs].offset = offset;
+ cmd->attr[cmd->num_attrs].location = loc;
+ cmd->num_attrs++;
+}
+
void nft_cmd_expand(struct cmd *cmd)
{
struct list_head new_cmds;