[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <740d6e75fc1c8f14d4c02b28bb9bca9210ca42b1.1652179360.git.leonro@nvidia.com>
Date: Tue, 10 May 2022 13:49:06 +0300
From: Leon Romanovsky <leon@...nel.org>
To: Steffen Klassert <steffen.klassert@...unet.com>,
David Ahern <dsahern@...il.com>
Cc: Leon Romanovsky <leonro@...dia.com>,
"David S . Miller" <davem@...emloft.net>,
Herbert Xu <herbert@...dor.apana.org.au>,
netdev@...r.kernel.org, Raed Salem <raeds@...dia.com>,
ipsec-devel <devel@...ux-ipsec.org>
Subject: [PATCH iproute2-next 2/4] xfrm: prepare state offload logic to set mode
From: Leon Romanovsky <leonro@...dia.com>
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 full offload, let's fix the help
section and refactor the code to be more clear.
Signed-off-by: Leon Romanovsky <leonro@...dia.com>
---
ip/xfrm_state.c | 35 +++++++++++++++++++----------------
man/man8/ip-xfrm.8 | 5 +++++
2 files changed, 24 insertions(+), 16 deletions(-)
diff --git a/ip/xfrm_state.c b/ip/xfrm_state.c
index 6fee7efd..9b6659a1 100644
--- a/ip/xfrm_state.c
+++ b/ip/xfrm_state.c
@@ -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"
@@ -272,7 +272,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;
@@ -282,12 +282,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)
@@ -429,24 +429,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))
diff --git a/man/man8/ip-xfrm.8 b/man/man8/ip-xfrm.8
index bf725cab..4243a023 100644
--- a/man/man8/ip-xfrm.8
+++ b/man/man8/ip-xfrm.8
@@ -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 " ]"
--
2.35.1
Powered by blists - more mailing lists