CBFC Virtual Channels Configuration

This section describes the commands related to configuring Credit-Based Flow Control (CBFC) Virtual Channels (VCs). These commands allow you to manage the number of VCs, their types, and other related parameters for both the CBFC receiver and transmitter.

CBFC Per-Port VC Configuration Commands

CBFC Per-VC VC Configuration Commands

CBFC VC Manual Configuration Commands

Manual and Automatic Configuration

CBFC VCs configuration supports both manual and automatic VC configurations.

  • Manual Configuration allows you to configure both the CBFC receiver and transmitter VCs. This mode provides maximum flexibility and control, enabling you to tailor the VC configuration to specific deployment requirements. However, it requires a solid understanding of CBFC concepts and operation.

  • Auto Configuration uses LLDP-based link negotiation to exchange and negotiate CBFC VC settings between two connected ports. This mode simplifies configuration and reduces the risk of misconfiguration, making it easier to deploy CBFC. However, it offers less flexibility than manual configuration.

Staged and Active Configuration Model

The system uses a staged/active configuration model to manage CBFC VC settings. Configuration changes are first made to the staged configuration, allowing them to be reviewed and validated before being applied to the active configuration, which controls the operation of the CBFC VCs.

Manual Configuration Workflow

In manual configuration mode, changes take effect only after they are explicitly applied:

Edit Staged Configuration
    ↓
Apply Staged Configuration
    ↓
Active Configuration Takes Effect

Auto Configuration Workflow

In automatic configuration mode, changes made to the staged configuration are applied during LLDP-based link negotiation and become active once the negotiation completes successfully:

Edit Staged Configuration
    ↓
Link Negotiation (Applies Staged Configuration)
    ↓
Active Configuration Takes Effect

Staged and Active Configuration Storages

Each port has six conceptual VC configuration data storages as shown in the figure below, four are staged configuration data storages and two are active configuration data storages.

CBFC Virtual Channels Configuration Concept

Fig. 3.29 CBFC Virtual Channels Configuration Concept

The four staged configuration data storages are used to store the configuration data for Link Negotiation:

Staged Configuration Data Storage

Description

Access Method

CBFC Local Receiver Staged Configuration

The staged configuration data storage for the CBFC local receiver on the port. Allows direct configuration. Applying the staged configuration to the active configuration will provision the CBFC receiver VC on the port.

Read-Write (RW)

CBFC Remote Sender Staged Configuration

The staged configuration data storage for the CBFC remote sender on the port. Updated and used by the Link Negotiation process. Not allowed to be directly configured.

Read-Only (RO)

CBFC Local Sender Staged Configuration

The staged configuration data storage for the CBFC local sender on the port. Allows direct configuration. Applying the staged configuration to the active configuration will provision the CBFC sender VC on the port.

RW

CBFC Remote Receiver Staged Configuration

The staged configuration data storage for the CBFC remote receiver on the port. Updated and used by the Link Negotiation process. Not allowed to be directly configured.

RO

The two active configuration data storages are used to provision the CBFC receiver and sender VCs on the port.

Active Configuration Data Storage

Description

Access Method

CBFC Local Receiver Active Configuration

The active configuration data storage for the CBFC local receiver on the port. Only can be updated by applying the staged configuration to the active configuration. Not allowed to be directly configured. Configuration data in this storage has immediate effect on the CBFC receiver VCs on the port.

RO

CBFC Local Sender Active Configuration

The active configuration data storage for the CBFC local sender on the port. Only can be updated by applying the staged configuration to the active configuration. Not allowed to be directly configured. Configuration data in this storage has immediate effect on the CBFC sender VCs on the port.

RO

Configuration Storage Indexing

To provide a consistent way to access the configuration data storages, each storage is assigned with an index as shown below. The index is used in the configuration commands to specify which configuration data storage to access.

  • 0 = CBFC_LOCAL_RX_STAGED: CBFC Local Receiver Staged Configuration, RW.

  • 1 = CBFC_LOCAL_TX_STAGED: CBFC Local Sender Staged Configuration, RW.

  • 2 = CBFC_LOCAL_RX_ACTIVE: CBFC Local Receiver Active Configuration, RO.

  • 3 = CBFC_LOCAL_TX_ACTIVE: CBFC Local Sender Active Configuration, RO.

  • 4 = CBFC_REMOTE_TX_STAGED: CBFC Remote Sender Staged Configuration, RO.

  • 5 = CBFC_REMOTE_RX_STAGED: CBFC Remote Receiver Staged Configuration, RO.

For example, to set the number of VCs in the CBFC Local Receiver Staged Configuration, you would use P_UE_CBFC_NUMVCS [0] number_of_vcs; to get the number of VCs in the CBFC Remote Sender Staged Configuration, you would use P_UE_CBFC_NUMVCS [4] ?.

Configuration Data Model

The data model for each CBFC VC configuration data storage is the same, shown as below.

num_vcs: U32, number of vcs
credit_size: U32, credit size in bytes, ignored by best-effort vc
credit_method: Enum, credit method, ignored by best-effort vc
total_credits: U32, total credits, ignored by best-effort vc
packet_overhead: S32, packet overhead in bytes, ignored by best-effort vc
per-vc:
  vc_index: U32, vc index, RO
  vc_is_lossless: Bool, vc type
  vc_credit_limit: U32, lossless vc credit limit, ignored by best-effort vc
  vc_mapping: lossless vc mapping, ignored by best-effort vc
  vc_rtr: Bool, lossless vc ready-to-receive status, used by rx to indicate active/inactive, ignored by best-effort vc
  vc_rts: Bool, lossless vc ready-to-send status, used by tx to indicate acti ve/inactive, ignored by best-effort vc

VC Configuration Principles

Staged (local) configuration is always be identical to the Active configuration, except during the Link Negotiation process. As soon as the Link Negotiation process is complete, the Staged configuration is immediately copied to the Active configuration.

What is described below is about which lossless VC configuration parameters are not allowed to be changed when Link Negotiation (auto-configuration) is in use.

if Link Negotiation is in use:
  SenderLocalStaged.all = read-only
  ReceiverLocalStaged.NumVCs = read-only

    if ReceiverLocalActive.Vc[any].Type == LOSSLESS:
      # If any lossless VC is active, lossless VC port config must not be changed.

      ReceiverLocalStaged.CreditSize = read-only
      ReceiverLocalStaged.PacketOverhead = read-only
      ReceiverLocalStaged.CreditLimitMethod = read-only

      # Total credit list is allowed to change, only if the method is TotalCreditLimit.
      if ReceiverLocalStaged.CreditLimitMethod == "TotalCreditLimit":
        ReceiverLocalStaged.TotalCreditLimit = read-write
      else:
        ReceiverLocalStaged.TotalCreditLimit = read-only

      for each ReceiverLocalActive Lossless VC[x]:
        # Allow changing the VC type from lossless to best-effort.
        ReceiverLocalStaged.Vc[x].Type = read-write

        # VC mapping should not be changed if the VC is active
        ReceiverLocalStaged.Vc[x].VcMappingType = read-only
        ReceiverLocalStaged.Vc[x].VcMappingMask = read-only
        ReceiverLocalStaged.Vc[x].VcMappingValue = read-only

        # Per-VC credit limit must not be changed if the VC is active
        ReceiverLocalStaged.Vc[x].VcMappingPerVcCreditLimit = read-only

      for each ReceiverLocalActive Best-Effort VC[y]:
        # Allow changing the VC type from best-effort to lossless.
        ReceiverLocalStaged.Vc[y].Type = read-write

        # Allow configuring the VC mapping if the VC is best-effort.
        ReceiverLocalStaged.Vc[y].VcMappingType = read-write
        ReceiverLocalStaged.Vc[y].VcMappingMask = read-write
        ReceiverLocalStaged.Vc[y].VcMappingValue = read-write

        # Allow configuring the per-VC credit limit only if the credit limit method is PerVC.
        if ReceiverLocalStaged.CreditLimitMethod == "PerVC":
          ReceiverLocalStaged.Vc[y].VcMappingPerVcCreditLimit = read-write
        else:
          ReceiverLocalStaged.Vc[y].VcMappingPerVcCreditLimit = read-only

    else:
      # If there is no active lossless VC, all VCs are allowed to be changed.
      ReceiverLocalStaged.all = read-write

else:
  SenderLocalStaged.all = read-write
  ReceiverLocalStaged.all = read-write