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: legacy
|
||||||
-
|
-
|
||||||
name: switchdev
|
name: switchdev
|
||||||
|
-
|
||||||
|
name: switchdev-inactive
|
||||||
-
|
-
|
||||||
type: enum
|
type: enum
|
||||||
name: eswitch-inline-mode
|
name: eswitch-inline-mode
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,10 @@ The following is a list of E-Switch attributes.
|
||||||
rules.
|
rules.
|
||||||
* ``switchdev`` allows for more advanced offloading capabilities of
|
* ``switchdev`` allows for more advanced offloading capabilities of
|
||||||
the E-Switch to hardware.
|
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``
|
* - ``inline-mode``
|
||||||
- enum
|
- enum
|
||||||
- Some HWs need the VF driver to put part of the packet
|
- Some HWs need the VF driver to put part of the packet
|
||||||
|
|
@ -74,3 +78,12 @@ Example Usage
|
||||||
|
|
||||||
# enable encap-mode with legacy mode
|
# enable encap-mode with legacy mode
|
||||||
$ devlink dev eswitch set pci/0000:08:00.0 mode legacy inline-mode none encap-mode basic
|
$ 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 {
|
enum devlink_eswitch_mode {
|
||||||
DEVLINK_ESWITCH_MODE_LEGACY,
|
DEVLINK_ESWITCH_MODE_LEGACY,
|
||||||
DEVLINK_ESWITCH_MODE_SWITCHDEV,
|
DEVLINK_ESWITCH_MODE_SWITCHDEV,
|
||||||
|
DEVLINK_ESWITCH_MODE_SWITCHDEV_INACTIVE,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum devlink_eswitch_inline_mode {
|
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] = {
|
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_BUS_NAME] = { .type = NLA_NUL_STRING, },
|
||||||
[DEVLINK_ATTR_DEV_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_INLINE_MODE] = NLA_POLICY_MAX(NLA_U8, 3),
|
||||||
[DEVLINK_ATTR_ESWITCH_ENCAP_MODE] = NLA_POLICY_MAX(NLA_U8, 1),
|
[DEVLINK_ATTR_ESWITCH_ENCAP_MODE] = NLA_POLICY_MAX(NLA_U8, 1),
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue