| .. 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. | |
| * ``active``: Line card is powered-up and active. | |
| The following diagram provides a general overview of ``devlink-linecard`` | |
| state transitions:: | |
| +-------------------------+ | |
| | | | |
| +----------------------------------> unprovisioned | | |
| | | | | |
| | +--------|-------^--------+ | |
| | | | | |
| | | | | |
| | +--------v-------|--------+ | |
| | | | | |
| | | provisioning | | |
| | | | | |
| | +------------|------------+ | |
| | | | |
| | +-----------------------------+ | |
| | | | | |
| | +------------v------------+ +------------v------------+ +-------------------------+ | |
| | | | | ----> | | |
| +----- provisioning_failed | | provisioned | | active | | |
| | | | | <---- | | |
| | +------------^------------+ +------------|------------+ +-------------------------+ | |
| | | | | |
| | | | | |
| | | +------------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 |