mirror of https://github.com/torvalds/linux.git
devlink: Introduce switchdev_inactive eswitch mode
Adds DEVLINK_ESWITCH_MODE_SWITCHDEV_INACTIVE attribute to UAPI and documentation. Before having traffic flow through an eswitch, a user may want to have the ability to block traffic towards the FDB until FDB is fully programmed and the user is ready to send traffic to it. For example: when two eswitches are present for vports in a multi-PF setup, one eswitch may take over the traffic from the other when the user chooses. Before this take over, a user may want to first program the inactive eswitch and then once ready redirect traffic to this new eswitch. switchdev modes transition semantics: legacy->switchdev_inactive: Create switchdev mode normally, traffic not allowed to flow yet. switchdev_inactive->switchdev: Enable traffic to flow. switchdev->switchdev_inactive: Block traffic on the FDB, FDB and representros state and content is preserved. When eswitch is configured to this mode, traffic is ignored/dropped on this eswitch FDB, while current configuration is kept, e.g FDB rules and netdev representros are kept available, FDB programming is allowed. Example: # start inactive switchdev devlink dev eswitch set pci/0000:08:00.1 mode switchdev_inactive # setup TC rules, representors etc .. # activate devlink dev eswitch set pci/0000:08:00.1 mode switchdev Signed-off-by: Saeed Mahameed <saeedm@nvidia.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Link: https://patch.msgid.link/20251108070404.1551708-2-saeed@kernel.org Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
8180c4fa54
commit
0e535824d0
|
|
@ -99,6 +99,8 @@ definitions:
|
|||
name: legacy
|
||||
-
|
||||
name: switchdev
|
||||
-
|
||||
name: switchdev-inactive
|
||||
-
|
||||
type: enum
|
||||
name: eswitch-inline-mode
|
||||
|
|
|
|||
|
|
@ -39,6 +39,10 @@ The following is a list of E-Switch attributes.
|
|||
rules.
|
||||
* ``switchdev`` allows for more advanced offloading capabilities of
|
||||
the E-Switch to hardware.
|
||||
* ``switchdev_inactive`` switchdev mode but starts inactive, doesn't allow traffic
|
||||
until explicitly activated. This mode is useful for orchestrators that
|
||||
want to prepare the device in switchdev mode but only activate it when
|
||||
all configurations are done.
|
||||
* - ``inline-mode``
|
||||
- enum
|
||||
- Some HWs need the VF driver to put part of the packet
|
||||
|
|
@ -74,3 +78,12 @@ Example Usage
|
|||
|
||||
# enable encap-mode with legacy mode
|
||||
$ devlink dev eswitch set pci/0000:08:00.0 mode legacy inline-mode none encap-mode basic
|
||||
|
||||
# start switchdev mode in inactive state
|
||||
$ devlink dev eswitch set pci/0000:08:00.0 mode switchdev_inactive
|
||||
|
||||
# setup switchdev configurations, representors, FDB entries, etc..
|
||||
...
|
||||
|
||||
# activate switchdev mode to allow traffic
|
||||
$ devlink dev eswitch set pci/0000:08:00.0 mode switchdev
|
||||
|
|
|
|||
|
|
@ -181,6 +181,7 @@ enum devlink_sb_threshold_type {
|
|||
enum devlink_eswitch_mode {
|
||||
DEVLINK_ESWITCH_MODE_LEGACY,
|
||||
DEVLINK_ESWITCH_MODE_SWITCHDEV,
|
||||
DEVLINK_ESWITCH_MODE_SWITCHDEV_INACTIVE,
|
||||
};
|
||||
|
||||
enum devlink_eswitch_inline_mode {
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@ static const struct nla_policy devlink_eswitch_get_nl_policy[DEVLINK_ATTR_DEV_NA
|
|||
static const struct nla_policy devlink_eswitch_set_nl_policy[DEVLINK_ATTR_ESWITCH_ENCAP_MODE + 1] = {
|
||||
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
|
||||
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
|
||||
[DEVLINK_ATTR_ESWITCH_MODE] = NLA_POLICY_MAX(NLA_U16, 1),
|
||||
[DEVLINK_ATTR_ESWITCH_MODE] = NLA_POLICY_MAX(NLA_U16, 2),
|
||||
[DEVLINK_ATTR_ESWITCH_INLINE_MODE] = NLA_POLICY_MAX(NLA_U8, 3),
|
||||
[DEVLINK_ATTR_ESWITCH_ENCAP_MODE] = NLA_POLICY_MAX(NLA_U8, 1),
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue