diff options
Diffstat (limited to 'ebtables-restore.c')
-rw-r--r-- | ebtables-restore.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/ebtables-restore.c b/ebtables-restore.c index ea02960..bb4d0cf 100644 --- a/ebtables-restore.c +++ b/ebtables-restore.c @@ -22,13 +22,25 @@ #include <string.h> #include <errno.h> #include <unistd.h> +#include <getopt.h> #include "include/ebtables_u.h" +static const struct option options[] = { + {.name = "noflush", .has_arg = 0, .val = 'n'}, + { 0 } +}; + static struct ebt_u_replace replace[3]; void ebt_early_init_once(); #define OPT_KERNELDATA 0x800 /* Also defined in ebtables.c */ +static void print_usage() +{ + fprintf(stderr, "Usage: ebtables-restore [ --noflush ]\n"); + exit(1); +} + static void copy_table_names() { strcpy(replace[0].name, "filter"); @@ -41,11 +53,20 @@ static void copy_table_names() int main(int argc_, char *argv_[]) { char *argv[EBTD_ARGC_MAX], cmdline[EBTD_CMDLINE_MAXLN]; - int i, offset, quotemode = 0, argc, table_nr = -1, line = 0, whitespace; + int i, offset, quotemode = 0, argc, table_nr = -1, line = 0, whitespace, c, flush = 1; char ebtables_str[] = "ebtables"; - if (argc_ != 1) - ebtrest_print_error("options are not supported"); + while ((c = getopt_long(argc_, argv_, "n", options, NULL)) != -1) { + switch(c) { + case 'n': + flush = 0; + break; + default: + print_usage(); + break; + } + } + ebt_silent = 0; copy_table_names(); ebt_early_init_once(); @@ -68,7 +89,7 @@ int main(int argc_, char *argv_[]) ebtrest_print_error("table '%s' was not recognized", cmdline+1); table_nr = i; replace[table_nr].command = 11; - ebt_get_kernel_table(&replace[table_nr], 1); + ebt_get_kernel_table(&replace[table_nr], flush); replace[table_nr].command = 0; replace[table_nr].flags = OPT_KERNELDATA; /* Prevent do_command from initialising replace */ continue; |