The Linux Kernel

6.4.0

Quick search

Contents

  • A guide to the Kernel Development Process
  • Submitting patches: the essential guide to getting your code into the kernel
  • Code of conduct
  • Kernel Maintainer Handbook
  • All development-process docs
  • Core API Documentation
  • Driver implementer's API guide
  • Kernel subsystem documentation
    • Driver implementer's API guide
    • Core API Documentation
    • Locking
    • Accounting
    • Block
    • CD-ROM
    • CPUFreq - CPU frequency and voltage scaling code in the Linux(TM) kernel
    • Frame Buffer
    • FPGA
    • Human Interface Devices (HID)
    • I2C/SMBus Subsystem
    • Industrial I/O
    • ISDN
    • InfiniBand
    • LEDs
    • NetLabel
    • Networking
      • AF_XDP
      • Bare UDP Tunnelling Module Documentation
      • batman-adv
      • SocketCAN - Controller Area Network
      • The UCAN Protocol
      • Hardware Device Drivers
      • Distributed Switch Architecture
      • Linux Devlink Documentation
      • CAIF
      • Netlink interface for ethtool
      • IEEE 802.15.4 Developer's Guide
      • J1939 Documentation
      • Linux Networking and Network Devices APIs
      • MSG_ZEROCOPY
      • FAILOVER
      • Net DIM - Generic Network Dynamic Interrupt Moderation
      • NET_FAILOVER
      • Page Pool API
      • PHY Abstraction Layer
      • phylink
      • IP-Aliasing
      • Ethernet Bridging
      • SNMP counter
      • Checksum Offloads
      • Segmentation Offloads
      • Scaling in the Linux Networking Stack
      • Kernel TLS
      • Kernel TLS offload
      • In-Kernel TLS Handshake
      • Linux NFC subsystem
      • Netdev private dataroom for 6lowpan interfaces
      • 6pack Protocol
      • ARCnet Hardware
      • ARCnet
      • ATM
      • AX.25
      • Linux Ethernet Bonding Driver HOWTO
      • cdc_mbim - Driver for CDC MBIM Mobile Broadband modems
      • DCCP protocol
      • DCTCP (DataCenter TCP)
      • DNS Resolver Module
      • Softnet Driver Issues
      • EQL Driver: Serial IP Load Balancing HOWTO
      • LC-trie implementation notes
      • Linux Socket Filtering aka Berkeley Packet Filter (BPF)
      • Generic HDLC layer
      • Generic Netlink
      • Generic networking statistics for netlink users
      • The Linux kernel GTP tunneling module
      • Identifier Locator Addressing (ILA)
      • IOAM6 Sysfs variables
      • AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation
      • IP dynamic address hack-port v0.03
      • IPsec
      • IP Sysctl
      • IPv6
      • IPVLAN Driver HOWTO
      • IPvs-sysctl
      • Kernel Connection Multiplexor
      • L2TP
      • The Linux LAPB Module Interface
      • How to use packet injection with mac80211
      • Management Component Transport Protocol (MCTP)
      • MPLS Sysfs variables
      • MPTCP Sysfs variables
      • HOWTO for multiqueue network device support
      • NAPI
      • Netconsole
      • Netdev features mess and how to get out from it alive
      • Network Devices, the Kernel, and You!
      • Netfilter Sysfs variables
      • NETIF Msg Level
      • Resilient Next-hop Groups
      • Netfilter Conntrack Sysfs variables
      • Netfilter's flowtable infrastructure
      • Open vSwitch datapath developer documentation
      • Operational States
      • Packet MMAP
      • Linux Phonet protocol family
      • HOWTO for the linux packet generator
      • PLIP: The Parallel Line Internet Protocol Device
      • PPP Generic Driver and Channel Interface
      • The proc/net/tcp and proc/net/tcp6 variables
      • How to use radiotap headers
      • RDS
      • Linux wireless regulatory documentation
      • Network Function Representors
      • RxRPC Network Protocol
      • SOCKET OPTIONS
      • SECURITY
      • EXAMPLE CLIENT USAGE
      • Linux Kernel SCTP
      • LSM/SeLinux secid
      • Seg6 Sysfs variables
      • struct sk_buff
      • SMC Sysctl
      • Interface statistics
      • Stream Parser (strparser)
      • Ethernet switch device driver model (switchdev)
      • Sysfs tagging
      • TC Actions - Environmental Rules
      • TC queue based filtering
      • Thin-streams and TCP
      • Team
      • Timestamping
      • Linux Kernel TIPC
      • Transparent proxy support
      • Universal TUN/TAP device driver
      • The UDP-Lite protocol (RFC 3828)
      • Virtual Routing and Forwarding (VRF)
      • Virtual eXtensible Local Area Networking documentation
      • Linux X.25 Project
      • X.25 Device Driver Interface
      • XFRM device - offloading the IPsec computations
      • XFRM proc - /proc/net/xfrm_* files
      • XFRM
      • XFRM Syscall
      • XDP RX Metadata
    • PCMCIA
    • Power Management
    • TCM Virtual Device
    • Timers
    • Serial Peripheral Interface (SPI)
    • 1-Wire Subsystem
    • Watchdog Support
    • Virtualization Support
    • Input Documentation
    • Hardware Monitoring
    • GPU Driver Developer's Guide
    • Compute Accelerators
    • Security Documentation
    • Sound Subsystem Documentation
    • Crypto API
    • Filesystems in the Linux kernel
    • Memory Management Documentation
    • BPF Documentation
    • USB support
    • PCI Bus Subsystem
    • SCSI Subsystem
    • Assorted Miscellaneous Devices Documentation
    • Scheduler
    • MHI
    • PECI Subsystem
  • Locking in the kernel
  • Linux kernel licensing rules
  • How to write kernel documentation
  • Development tools for the kernel
  • Kernel Testing Guide
  • Kernel Hacking Guides
  • Linux Tracing Technologies
  • fault-injection
  • Kernel Livepatching
  • Rust
  • The Linux kernel user's and administrator's guide
  • The kernel build system
  • Reporting issues
  • User-space tools
  • The Linux kernel user-space API guide
  • The Linux kernel firmware guide
  • Open Firmware and Devicetree
  • CPU Architectures
  • Unsorted Documentation
  • Translations

This Page

  • Show Source

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¶

$ 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
©The kernel development community. | Powered by Sphinx 5.0.1 & Alabaster 0.7.12 | Page source