mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
5.1 KiB
122 lines
5.1 KiB
.. 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
|
|
|