Message ID | 20231002104349.971927-2-tariqt@nvidia.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 27fd1bfa1b5f1f4ec004b2647d269f6c3e66c8f8 |
Delegated to: | David Ahern |
Headers | show |
Series | devlink: Add port function attributes for ipsec | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
On 10/2/23 4:43 AM, Tariq Toukan wrote: > From: Dima Chumak <dchumak@nvidia.com> > > Support port function commands to enable / disable IPsec crypto > offloads, this is used to control the port IPsec device capabilities. > > When IPsec crypto capability is disabled for a function of the port > (default), function cannot offload IPsec operation. When enabled, IPsec > operation can be offloaded by the function of the port. > > Enabling IPsec crypto offloads lets the kernel to delegate XFRM state > processing and encrypt/decrypt operation to the device hardware. > > Example of a PCI VF port which supports IPsec crypto offloads: > > $ devlink port show pci/0000:06:00.0/1 > pci/0000:06:00.0/1: type eth netdev enp6s0pf0vf0 flavour pcivf pfnum 0 vfnum 0 > function: > hw_addr 00:00:00:00:00:00 roce enable ipsec_crypto disable > > $ devlink port function set pci/0000:06:00.0/1 ipsec_crypto enable > > $ devlink port show pci/0000:06:00.0/1 > pci/0000:06:00.0/1: type eth netdev enp6s0pf0vf0 flavour pcivf pfnum 0 vfnum 0 > function: > hw_addr 00:00:00:00:00:00 roce enable ipsec_crypto enable > Why not just 'ipsec' instead of 'ipsec_crypto'? What value does the extra '_crypto' provide?
On Tue, Oct 03, 2023 at 08:46:51AM -0600, David Ahern wrote: > On 10/2/23 4:43 AM, Tariq Toukan wrote: > > From: Dima Chumak <dchumak@nvidia.com> > > > > Support port function commands to enable / disable IPsec crypto > > offloads, this is used to control the port IPsec device capabilities. > > > > When IPsec crypto capability is disabled for a function of the port > > (default), function cannot offload IPsec operation. When enabled, IPsec > > operation can be offloaded by the function of the port. > > > > Enabling IPsec crypto offloads lets the kernel to delegate XFRM state > > processing and encrypt/decrypt operation to the device hardware. > > > > Example of a PCI VF port which supports IPsec crypto offloads: > > > > $ devlink port show pci/0000:06:00.0/1 > > pci/0000:06:00.0/1: type eth netdev enp6s0pf0vf0 flavour pcivf pfnum 0 vfnum 0 > > function: > > hw_addr 00:00:00:00:00:00 roce enable ipsec_crypto disable > > > > $ devlink port function set pci/0000:06:00.0/1 ipsec_crypto enable > > > > $ devlink port show pci/0000:06:00.0/1 > > pci/0000:06:00.0/1: type eth netdev enp6s0pf0vf0 flavour pcivf pfnum 0 vfnum 0 > > function: > > hw_addr 00:00:00:00:00:00 roce enable ipsec_crypto enable > > > > Why not just 'ipsec' instead of 'ipsec_crypto'? What value does the > extra '_crypto' provide? There are two IPsec offloaded modes: crypto offload and packet offload. They need to be separated and can operate independently as these modes per-SA/policy. To make it more clear to users, we are using ipsec_crypto to be explicit. Thanks > > >
diff --git a/devlink/devlink.c b/devlink/devlink.c index d1795f616ca0..7852a47fc98a 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -2271,6 +2271,18 @@ static int dl_argv_parse(struct dl *dl, uint64_t o_required, if (mig) opts->port_fn_caps.value |= DEVLINK_PORT_FN_CAP_MIGRATABLE; o_found |= DL_OPT_PORT_FN_CAPS; + } else if (dl_argv_match(dl, "ipsec_crypto") && + (o_all & DL_OPT_PORT_FN_CAPS)) { + bool ipsec_crypto; + + dl_arg_inc(dl); + err = dl_argv_bool(dl, &ipsec_crypto); + if (err) + return err; + opts->port_fn_caps.selector |= DEVLINK_PORT_FN_CAP_IPSEC_CRYPTO; + if (ipsec_crypto) + opts->port_fn_caps.value |= DEVLINK_PORT_FN_CAP_IPSEC_CRYPTO; + o_found |= DL_OPT_PORT_FN_CAPS; } else { pr_err("Unknown option \"%s\"\n", dl_argv(dl)); return -EINVAL; @@ -4644,6 +4656,7 @@ static void cmd_port_help(void) pr_err(" devlink port unsplit DEV/PORT_INDEX\n"); pr_err(" devlink port function set DEV/PORT_INDEX [ hw_addr ADDR ] [ state { active | inactive } ]\n"); pr_err(" [ roce { enable | disable } ] [ migratable { enable | disable } ]\n"); + pr_err(" [ ipsec_crypto { enable | disable } ]\n"); pr_err(" devlink port function rate { help | show | add | del | set }\n"); pr_err(" devlink port param set DEV/PORT_INDEX name PARAMETER value VALUE cmode { permanent | driverinit | runtime }\n"); pr_err(" devlink port param show [DEV/PORT_INDEX name PARAMETER]\n"); @@ -4769,6 +4782,10 @@ static void pr_out_port_function(struct dl *dl, struct nlattr **tb_port) print_string(PRINT_ANY, "migratable", " migratable %s", port_fn_caps->value & DEVLINK_PORT_FN_CAP_MIGRATABLE ? "enable" : "disable"); + if (port_fn_caps->selector & DEVLINK_PORT_FN_CAP_IPSEC_CRYPTO) + print_string(PRINT_ANY, "ipsec_crypto", " ipsec_crypto %s", + port_fn_caps->value & DEVLINK_PORT_FN_CAP_IPSEC_CRYPTO ? + "enable" : "disable"); } if (!dl->json_output) @@ -4960,6 +4977,7 @@ static void cmd_port_function_help(void) { pr_err("Usage: devlink port function set DEV/PORT_INDEX [ hw_addr ADDR ] [ state { active | inactive } ]\n"); pr_err(" [ roce { enable | disable } ] [ migratable { enable | disable } ]\n"); + pr_err(" [ ipsec_crypto { enable | disable } ]\n"); pr_err(" devlink port function rate { help | show | add | del | set }\n"); } diff --git a/man/man8/devlink-port.8 b/man/man8/devlink-port.8 index 56049f7349a8..534d2cbe8fa9 100644 --- a/man/man8/devlink-port.8 +++ b/man/man8/devlink-port.8 @@ -77,6 +77,9 @@ devlink-port \- devlink port configuration .RI "[ " .BR migratable " { " enable " | " disable " }" .RI "]" +.RI "[ " +.BR ipsec_crypto " { " enable " | " disable " }" +.RI "]" .ti -8 .BR "devlink port function rate " @@ -222,6 +225,11 @@ Set the RoCE capability of the function. .BR migratable " { " enable " | " disable " } " Set the migratable capability of the function. +.TP +.BR ipsec_crypto " { " enable " | " disable " } " +Set the IPsec crypto offload capability of the function. Controls XFRM state +crypto operation (Encrypt/Decrypt) offload. + .ti -8 .SS devlink port del - delete a devlink port .PP @@ -351,6 +359,11 @@ devlink port function set pci/0000:01:00.0/1 migratable enable This will enable the migratable functionality of the function. .RE .PP +devlink port function set pci/0000:01:00.0/1 ipsec_crypto enable +.RS 4 +This will enable the IPsec crypto offload functionality of the function. +.RE +.PP devlink port function set pci/0000:01:00.0/1 hw_addr 00:00:00:11:22:33 state active .RS 4 Configure hardware address and also active the function. When a function is