@@ -52,6 +52,9 @@ vi:ts=4 sw=4
<option>-s | --stateless</option>
</arg>
<arg choice="opt">
+ <option>-c | --check</option>
+ </arg>
+ <arg choice="opt">
<option>[-I | --includepath]</option>
<replaceable>directory</replaceable>
</arg>
@@ -130,6 +133,14 @@ vi:ts=4 sw=4
</listitem>
</varlistentry>
<varlistentry>
+ <term><option>-c, --check</option></term>
+ <listitem>
+ <para>
+ Check commands validity without actually applying the changes.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><option>-N</option></term>
<listitem>
<para>
@@ -33,6 +33,7 @@ struct output_ctx {
struct nft_ctx {
struct output_ctx output;
+ bool check;
};
extern unsigned int max_errors;
@@ -40,6 +40,7 @@ static unsigned int num_include_paths = 1;
enum opt_vals {
OPT_HELP = 'h',
OPT_VERSION = 'v',
+ OPT_CHECK = 'c',
OPT_FILE = 'f',
OPT_INTERACTIVE = 'i',
OPT_INCLUDEPATH = 'I',
@@ -51,7 +52,7 @@ enum opt_vals {
OPT_INVALID = '?',
};
-#define OPTSTRING "hvf:iI:vnsNa"
+#define OPTSTRING "hvcf:iI:vnsNa"
static const struct option options[] = {
{
@@ -63,6 +64,10 @@ static const struct option options[] = {
.val = OPT_VERSION,
},
{
+ .name = "check",
+ .val = OPT_CHECK,
+ },
+ {
.name = "file",
.val = OPT_FILE,
.has_arg = 1,
@@ -113,6 +118,7 @@ static void show_help(const char *name)
" -h, --help Show this help\n"
" -v, --version Show version information\n"
"\n"
+" -c --check Check commands validity without actually applying the changes.\n"
" -f, --file <filename> Read input from <filename>\n"
" -i, --interactive Read input from interactive CLI\n"
"\n"
@@ -202,7 +208,8 @@ static int nft_netlink(struct parser_state *state, struct list_head *msgs,
if (ret < 0)
goto out;
}
- mnl_batch_end(batch);
+ if (!nft->check)
+ mnl_batch_end(batch);
if (!mnl_batch_ready(batch))
goto out;
@@ -278,6 +285,9 @@ int main(int argc, char * const *argv)
printf("%s v%s (%s)\n",
PACKAGE_NAME, PACKAGE_VERSION, RELEASE_NAME);
exit(NFT_EXIT_SUCCESS);
+ case OPT_CHECK:
+ nft.check = true;
+ break;
case OPT_FILE:
filename = optarg;
break;
Sometimes it can be useful to test if a command is valid without applying any change to the rule-set. This commit adds a new option flag (-c | --check) that performs a dry run execution of the commands. Signed-off-by: Pablo M. Bermudo Garay <pablombg@gmail.com> --- doc/nft.xml | 11 +++++++++++ include/nftables.h | 1 + src/main.c | 14 ++++++++++++-- 3 files changed, 24 insertions(+), 2 deletions(-)