mirror of
https://git.kernel.org/pub/scm/network/iproute2/iproute2.git
synced 2024-11-15 05:55:11 +08:00
xfrm: prepare state offload logic to set mode
The offload in xfrm state requires to provide device and direction in order to activate it. However, in the help section, device and direction were displayed as an optional. As a preparation to addition of packet offload, let's fix the help section and refactor the code to be more clear. Signed-off-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: David Ahern <dsahern@kernel.org>
This commit is contained in:
parent
dc768a4585
commit
bdd19b1ede
@ -61,7 +61,7 @@ static void usage(void)
|
||||
" [ replay-seq-hi SEQ ] [ replay-oseq-hi SEQ ]\n"
|
||||
" [ flag FLAG-LIST ] [ sel SELECTOR ] [ LIMIT-LIST ] [ encap ENCAP ]\n"
|
||||
" [ coa ADDR[/PLEN] ] [ ctx CTX ] [ extra-flag EXTRA-FLAG-LIST ]\n"
|
||||
" [ offload [dev DEV] dir DIR ]\n"
|
||||
" [ offload dev DEV dir DIR ]\n"
|
||||
" [ output-mark OUTPUT-MARK [ mask MASK ] ]\n"
|
||||
" [ if_id IF_ID ] [ tfcpad LENGTH ]\n"
|
||||
"Usage: ip xfrm state allocspi ID [ mode MODE ] [ mark MARK [ mask MASK ] ]\n"
|
||||
@ -267,7 +267,7 @@ static int xfrm_state_extra_flag_parse(__u32 *extra_flags, int *argcp, char ***a
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xfrm_offload_dir_parse(__u8 *dir, int *argcp, char ***argvp)
|
||||
static bool xfrm_offload_dir_parse(__u8 *dir, int *argcp, char ***argvp)
|
||||
{
|
||||
int argc = *argcp;
|
||||
char **argv = *argvp;
|
||||
@ -277,12 +277,12 @@ static int xfrm_offload_dir_parse(__u8 *dir, int *argcp, char ***argvp)
|
||||
else if (strcmp(*argv, "out") == 0)
|
||||
*dir = 0;
|
||||
else
|
||||
invarg("DIR value is invalid", *argv);
|
||||
return false;
|
||||
|
||||
*argcp = argc;
|
||||
*argvp = argv;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
static int xfrm_state_modify(int cmd, unsigned int flags, int argc, char **argv)
|
||||
@ -424,24 +424,27 @@ static int xfrm_state_modify(int cmd, unsigned int flags, int argc, char **argv)
|
||||
addattr_l(&req.n, sizeof(req.buf), XFRMA_SEC_CTX,
|
||||
(void *)&ctx, ctx.sctx.len);
|
||||
} else if (strcmp(*argv, "offload") == 0) {
|
||||
is_offload = true;
|
||||
NEXT_ARG();
|
||||
if (strcmp(*argv, "dev") == 0) {
|
||||
NEXT_ARG();
|
||||
ifindex = ll_name_to_index(*argv);
|
||||
if (!ifindex) {
|
||||
invarg("value after \"offload dev\" is invalid", *argv);
|
||||
is_offload = false;
|
||||
}
|
||||
NEXT_ARG();
|
||||
}
|
||||
if (!ifindex)
|
||||
invarg("Invalid device name", *argv);
|
||||
} else
|
||||
invarg("Missing dev keyword", *argv);
|
||||
|
||||
NEXT_ARG();
|
||||
if (strcmp(*argv, "dir") == 0) {
|
||||
bool is_dir;
|
||||
|
||||
NEXT_ARG();
|
||||
xfrm_offload_dir_parse(&dir, &argc, &argv);
|
||||
} else {
|
||||
invarg("value after \"offload dir\" is invalid", *argv);
|
||||
is_offload = false;
|
||||
}
|
||||
is_dir = xfrm_offload_dir_parse(&dir, &argc,
|
||||
&argv);
|
||||
if (!is_dir)
|
||||
invarg("DIR value is invalid", *argv);
|
||||
} else
|
||||
invarg("Missing DIR keyword", *argv);
|
||||
is_offload = true;
|
||||
} else if (strcmp(*argv, "output-mark") == 0) {
|
||||
NEXT_ARG();
|
||||
if (get_u32(&output_mark.v, *argv, 0))
|
||||
|
@ -65,6 +65,11 @@ ip-xfrm \- transform configuration
|
||||
.IR MASK " ] ]"
|
||||
.RB "[ " if_id
|
||||
.IR IF-ID " ]"
|
||||
.RB "[ " offload
|
||||
.RB dev
|
||||
.IR DEV "
|
||||
.RB dir
|
||||
.IR DIR " ]"
|
||||
.RB "[ " tfcpad
|
||||
.IR LENGTH " ]"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user