X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=extensions%2Flibxt_MARK.c;h=146a5d61cf699fba52c9a59dacc2a5fc877d592d;hb=8e9ca1108100ce68542998d71a98092b66e17398;hp=4be56334fca7234ad78e276986e93f972fab782f;hpb=e851e213d0ee0d4b022e6df27d0a8d7033cc9a64;p=iptables.git diff --git a/extensions/libxt_MARK.c b/extensions/libxt_MARK.c index 4be5633..146a5d6 100644 --- a/extensions/libxt_MARK.c +++ b/extensions/libxt_MARK.c @@ -39,6 +39,7 @@ static const struct option mark_tg_opts[] = { {.name = "and-mark", .has_arg = true, .val = '&'}, {.name = "or-mark", .has_arg = true, .val = '|'}, {.name = "xor-mark", .has_arg = true, .val = '^'}, + {.name = "copy-xid", .has_arg = true, .val = '%'}, { .name = NULL } }; @@ -50,6 +51,7 @@ static void mark_tg_help(void) " --set-mark value[/mask] Clear bits in mask and OR value into nfmark\n" " --and-mark bits Binary AND the nfmark with bits\n" " --or-mark bits Binary OR the nfmark with bits\n" +" --copy-xid Set nfmark to be the connection xid (PlanetLab specific)\n" " --xor-mask bits Binary XOR the nfmark with bits\n" "\n"); } @@ -184,6 +186,12 @@ static int mark_tg_parse(int c, char **argv, int invert, unsigned int *flags, info->mask = 0; break; + case '%': /* --copy-xid */ + param_act(P_ONE_ACTION, "MARK", *flags & F_MARK); + info->mark = 0; + info->mask = mask; + break; + default: return false; } @@ -196,7 +204,7 @@ static void mark_tg_check(unsigned int flags) { if (flags == 0) exit_error(PARAMETER_PROBLEM, "MARK: One of the --set-xmark, " - "--{and,or,xor,set}-mark options is required"); + "--{and,or,xor,set}-mark, or --copy-xid options is required"); } static void