DCBX and LLDP-DCB: Configuration and Verification - 夜莺博客

DCBX and LLDP-DCB: Configuration and Verification

Lossless Ethernet does not work because you configured PFC on a switch. It works because both ends agreed on the same parameters, and the protocol that performs that agreement is DCBX, carried inside LLDP. When a RoCEv2 fabric silently degrades — pause frames on the wrong priority, ETS bandwidth not matching the design — the cause is almost always a DCBX negotiation that never completed, or completed asymmetrically. This article explains what DCBX exchanges, how to enable it correctly, and how to prove the negotiation worked.

What DCB, DCBX, LLDP and PFC have to do with each other

  • DCB is the feature set: Priority Flow Control (PFC) for per-priority pause, Enhanced Transmission Selection (ETS) for bandwidth groups and priority, and Application priorities that map a protocol to a traffic class.
  • PFC pauses traffic per 802.1p priority instead of the whole link, which is what makes per-class lossless operation possible.
  • ETS guarantees bandwidth to a group and controls how unused bandwidth is redistributed.
  • DCBX is the negotiation protocol, transported in LLDP TLVs, that lets each end advertise and learn the PFC and ETS configuration.
  • LLDP is simply the carrier. If LLDP is not running on the link, DCBX cannot run.

The practical consequence: a server NIC learns its PFC and ETS settings from the switch, so a switch that never advertises them produces a host that runs lossy while the operator believes the fabric is lossless.

Enabling DCBX correctly

On OS10 and most enterprise platforms, DCBX must be enabled both globally and on the interface. Enabling it globally alone leaves the port negotiating nothing; enabling it per interface while the global feature is off produces the same result. Then check the TLV status:

OS10# configure terminal
OS10(config)# dcbx enable
OS10(config)# interface ethernet 1/1/1
OS10(conf-if-eth1/1/1)# dcbx enable
OS10(conf-if-eth1/1/1)# end

OS10# show lldp dcbx
OS10# show lldp dcbx detail
OS10# show lldp dcbx ets detail
OS10# show lldp dcbx pfc detail
OS10# show lldp dcbx interface ethernet 1/1/1

show lldp dcbx interface is the per-port truth: it displays the DCBX configuration and the status of the PFC and ETS TLVs for that link. A port showing the feature as not operational is either not running LLDP, or has a peer that is not speaking DCBX.

Willing and non-willing roles

DCBX roles decide who accepts configuration from the peer. A willing port adopts the peer's settings; a non-willing (configuring) port imposes its own. Designs differ:

  • Switch configures, host follows — the switch is non-willing for PFC and ETS, the server NIC is willing. Most common in managed deployments, because one policy source is easier to audit.
  • Host configures — used in some converged infrastructure where the NIC owns the application priority map.
  • Asymmetric settings — some DCB features tolerate different configuration at each end, which is exactly why "misconfiguration detected" is a per-feature state rather than one global flag.

Note that full autoconfiguration of port roles (auto-upstream and auto-downstream) is not universally supported; where it is not, DCBX detects a peer misconfiguration but will not resolve it for you. That detection is still valuable — it turns a silent lossy flow into a visible alarm.

Verifying a lossless path end to end

  1. Confirm LLDP is up on both ends and the neighbour is visible: show lldp neighbors.
  2. Confirm DCBX negotiated: the PFC and ETS TLVs should be shown as operational, not just configured.
  3. Confirm negotiation direction: check whether the local port is displaying the peer's values or its own — a willing port that shows different values from the design means the peer is imposing something else.
  4. Confirm traffic is landing in the right priority: check the DSCP-to-priority and CoS-to-queue maps on both ends; a RoCE flow marked DSCP 26 that the switch maps to a non-PFC priority will still be dropped under congestion.
  5. Confirm pause frames are counted where expected: per-priority PFC counters on the receiving port should increment during congestion and stay at zero on non-lossless priorities.

The traps worth repeating

  • DCBX enabled globally but not per interface (or the reverse) — the most common single cause of "lossless" fabric that is not lossless.
  • LLDP disabled for policy reasons — DCBX dies with it. If you must suppress LLDP on server-facing ports, configure PFC and ETS statically on both ends and document that DCBX is not in use.
  • Priority mismatch between the application map and the QoS map — the negotiation succeeds because both ends agree on a priority that no flow actually uses.
  • Only checking one end — DCBX is a two-sided protocol. Verify from both the switch and the server NIC side before declaring victory.

See also: lossless RoCE with PFC and ECN on MLNX-OS, Dell OS10 priority flow control, and RoCEv2 lossless Ethernet PFC and ECN.

原文链接:https://www.dell.com/support/manuals/en-ae/dell-emc-smartfabric-os10/smartfabric-os-user-guide-10-5-0/dcbx-configuration-notes