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.
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. |
|
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. |
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. |
|
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. |
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