118 lines
3.7 KiB
Diff
118 lines
3.7 KiB
Diff
From bdd19b1edec44c00c968950301074734cee54cab Mon Sep 17 00:00:00 2001
|
|
From: Leon Romanovsky <leonro@nvidia.com>
|
|
Date: Mon, 12 Dec 2022 09:54:04 +0200
|
|
Subject: [PATCH] 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.
|
|
|
|
Conflict:NA
|
|
Reference:https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit?id=bdd19b1edec44c00c968950301074734cee54cab
|
|
|
|
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
|
|
Signed-off-by: David Ahern <dsahern@kernel.org>
|
|
---
|
|
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 b2294d9f..6de2d28d 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"
|
|
@@ -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))
|
|
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.23.0
|