2022-04-18 14:42:26 +08:00
|
|
|
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
|
|
|
|
=================
|
|
|
|
Devlink Line card
|
|
|
|
=================
|
|
|
|
|
|
|
|
Background
|
|
|
|
==========
|
|
|
|
|
|
|
|
The ``devlink-linecard`` mechanism is targeted for manipulation of
|
|
|
|
line cards that serve as a detachable PHY modules for modular switch
|
|
|
|
system. Following operations are provided:
|
|
|
|
|
|
|
|
* Get a list of supported line card types.
|
|
|
|
* Provision of a slot with specific line card type.
|
|
|
|
* Get and monitor of line card state and its change.
|
|
|
|
|
|
|
|
Line card according to the type may contain one or more gearboxes
|
|
|
|
to mux the lanes with certain speed to multiple ports with lanes
|
|
|
|
of different speed. Line card ensures N:M mapping between
|
|
|
|
the switch ASIC modules and physical front panel ports.
|
|
|
|
|
|
|
|
Overview
|
|
|
|
========
|
|
|
|
|
|
|
|
Each line card devlink object is created by device driver,
|
|
|
|
according to the physical line card slots available on the device.
|
|
|
|
|
|
|
|
Similar to splitter cable, where the device might have no way
|
|
|
|
of detection of the splitter cable geometry, the device
|
|
|
|
might not have a way to detect line card type. For that devices,
|
|
|
|
concept of provisioning is introduced. It allows the user to:
|
|
|
|
|
|
|
|
* Provision a line card slot with certain line card type
|
|
|
|
|
|
|
|
- Device driver would instruct the ASIC to prepare all
|
|
|
|
resources accordingly. The device driver would
|
|
|
|
create all instances, namely devlink port and netdevices
|
|
|
|
that reside on the line card, according to the line card type
|
|
|
|
* Manipulate of line card entities even without line card
|
|
|
|
being physically connected or powered-up
|
|
|
|
* Setup splitter cable on line card ports
|
|
|
|
|
|
|
|
- As on the ordinary ports, user may provision a splitter
|
|
|
|
cable of a certain type, without the need to
|
|
|
|
be physically connected to the port
|
|
|
|
* Configure devlink ports and netdevices
|
|
|
|
|
|
|
|
Netdevice carrier is decided as follows:
|
|
|
|
|
|
|
|
* Line card is not inserted or powered-down
|
|
|
|
|
|
|
|
- The carrier is always down
|
|
|
|
* Line card is inserted and powered up
|
|
|
|
|
|
|
|
- The carrier is decided as for ordinary port netdevice
|
|
|
|
|
|
|
|
Line card state
|
|
|
|
===============
|
|
|
|
|
|
|
|
The ``devlink-linecard`` mechanism supports the following line card states:
|
|
|
|
|
|
|
|
* ``unprovisioned``: Line card is not provisioned on the slot.
|
|
|
|
* ``unprovisioning``: Line card slot is currently being unprovisioned.
|
|
|
|
* ``provisioning``: Line card slot is currently in a process of being provisioned
|
|
|
|
with a line card type.
|
|
|
|
* ``provisioning_failed``: Provisioning was not successful.
|
|
|
|
* ``provisioned``: Line card slot is provisioned with a type.
|
2022-04-18 14:42:27 +08:00
|
|
|
* ``active``: Line card is powered-up and active.
|
2022-04-18 14:42:26 +08:00
|
|
|
|
|
|
|
The following diagram provides a general overview of ``devlink-linecard``
|
|
|
|
state transitions::
|
|
|
|
|
|
|
|
+-------------------------+
|
|
|
|
| |
|
|
|
|
+----------------------------------> unprovisioned |
|
|
|
|
| | |
|
|
|
|
| +--------|-------^--------+
|
|
|
|
| | |
|
|
|
|
| | |
|
|
|
|
| +--------v-------|--------+
|
|
|
|
| | |
|
|
|
|
| | provisioning |
|
|
|
|
| | |
|
|
|
|
| +------------|------------+
|
|
|
|
| |
|
|
|
|
| +-----------------------------+
|
|
|
|
| | |
|
2022-04-18 14:42:27 +08:00
|
|
|
| +------------v------------+ +------------v------------+ +-------------------------+
|
|
|
|
| | | | ----> |
|
|
|
|
+----- provisioning_failed | | provisioned | | active |
|
|
|
|
| | | | <---- |
|
|
|
|
| +------------^------------+ +------------|------------+ +-------------------------+
|
2022-04-18 14:42:26 +08:00
|
|
|
| | |
|
|
|
|
| | |
|
|
|
|
| | +------------v------------+
|
|
|
|
| | | |
|
|
|
|
| | | unprovisioning |
|
|
|
|
| | | |
|
|
|
|
| | +------------|------------+
|
|
|
|
| | |
|
|
|
|
| +-----------------------------+
|
|
|
|
| |
|
|
|
|
+-----------------------------------------------+
|
|
|
|
|
|
|
|
|
|
|
|
Example usage
|
|
|
|
=============
|
|
|
|
|
|
|
|
.. code:: shell
|
|
|
|
|
|
|
|
$ devlink lc show [ DEV [ lc LC_INDEX ] ]
|
|
|
|
$ devlink lc set DEV lc LC_INDEX [ { type LC_TYPE | notype } ]
|
|
|
|
|
|
|
|
# Show current line card configuration and status for all slots:
|
|
|
|
$ devlink lc
|
|
|
|
|
|
|
|
# Set slot 8 to be provisioned with type "16x100G":
|
|
|
|
$ devlink lc set pci/0000:01:00.0 lc 8 type 16x100G
|
|
|
|
|
|
|
|
# Set slot 8 to be unprovisioned:
|
|
|
|
$ devlink lc set pci/0000:01:00.0 lc 8 notype
|