HQoS Configuration

Basic QoS Configuration Elements

The figure below shows the dependencies between the various QoS configuration elements.

hqos components configuration

To configure QoS, perform the following steps which include creating a QoS profile and enabling QoS on a Subscriber-Interface or L3-Interface.

  1. Define a QoS profile with classifier, multifield-classifier, class-policer-map, policer, class-queue-map, scheduler-map, and remark-map based on SLAs.

  2. Create a Behavioral Aggregate (BA) and/or Multifield (MF) classifier to classify the network traffic at the ingress.

  3. Create a policer to police the classified traffic at the ingress with the CIR/PIR defined.

  4. Create necessary class-to-policer-map to map the classes to policer levels (mandatory for policing).

  5. Create necessary queues with proper size to queue the classified traffic before egressing the traffic.

  6. Create queue groups and define queue numbers (1/4/8).
    NOTE: For the system to initialize with a single queue in a Queue-Group, a system reboot is required.

  7. Create the necessary class-to-queue map to map the classes to queues (mandatory for queuing).

  8. Specify scheduler(s) with type as required.

  9. (Optional) Create the shaper (low-flow / high-flow) and attach it to queue(s) and/or scheduler(s).

  10. Specify a scheduler map to define a set of relationships between parent (scheduler or port) and child (queue/queue-group or scheduler) at the egress.

  11. (optional) Create Remark-Map for QoS field remarking of the outgoing packet.

  12. For the downstream traffic, map the MPLS EXP classifier either to an instance or global entity and/or the Multifield (MF) classifier as a global entity (refer to the figure above.)

  13. (optional) Map the MPLS-IPv4/IPv6 remark-map either to an instance or configure it as a global entity.

Priority propagation is enabled by default. To disable the Priority Propagation, we recommend doing this at the beginning and not during an active session.

Hierarchical QoS

Basic Quality of Service (QoS) is designed to provide a single level of traffic scheduling. In contrast, Hierarchical Quality of Service (HQoS) offers a more sophisticated approach to traffic treatment, utilizing multiple levels of scheduling in a hierarchical manner based on Service Level Agreements (SLAs).

The figure below shows the additional dependencies for Multi-level HQoS.

hqos multi level

Below are the figures depicting an example of scheduling hierarchy.

hqos scheduling config hierarchy
hqos scheduling config hierarchy1

To configure HQoS, map the level-3 to level-5 hierarchy in multi-level HQoS to a different scheduler to represent it and map it to the physical interface.

Configuration Syntax and Commands

The configurations in this section exemplify the setup of Hierarchical Quality of Service (HQoS) for a subscriber with a residential profile and a Service Level Agreement (SLA) of 20Mbps upstream and downstream. The setup also encompasses four different service types, namely Best Effort(BE), Low-Delay(LD), Low-Loss(LL) and Voice(VO). Different services are assigned to various policer levels for upstream traffic based on their respective traffic classes. Meanwhile, for downstream traffic, these same services are assigned to different queues depending on their traffic class. The traffic class is determined by the configuration of either the BA or MF classifier.

The following sections describe the HQoS configuration syntax and commands.

Configuring QoS Profiles

A profile configuration defines the QoS profile that is installed on the subscriber or L3 interfaces. The following sections explain the different elements of the QoS profiles that you can create and attach.

Use the following CLI syntax to configure a QoS profile:

set forwarding-options class-of-service profile <profile-name> <attribute> <value>

Attribute Description

<profile-name>

Specifies the name of the QoS profile

classifier-name <classifier-name>

Specifies the name of the BA classifier

multifield-classifier-name <multifield-classifier-name>

Specifies the name of the multifield classifier

class-policer-map-name <class-policer-map-name>

Specifies the name of the map that associates a class with a policer level.

policer-name <policer-name>

Specifies the policer name

class-queue-map-name <class-queue-map-name>

Specifies the name of the map that associates a class with a queue

scheduler-map-name <scheduler-map-name>

Specifies the name of the scheduler map

remark-map-name <remark-map-name>

Specifies the name of the remark map

egress-class-policer-map-name <egress-class-policer-map-name>

Specifies the name of the egress Class Policer Map.
This configuration applies only to the L2X traffic on the LAG interface.

egress-policer-name <egress-policer-name>

Specifies the name of the egress policer.
This configuration applies only to the L2X traffic on the LAG interface.

In the following example, the QoS profile residential is configured with classifier-name subs-pbit-class, class-policer-map policer-map-residential, policer policer-residential, class-queue-map subs-4queues, scheduler-map subs-4queues-residential, and remark-map subs-remarking-residential.

set forwarding-options class-of-service profile residential
set forwarding-options class-of-service profile residential classifier-name subs-pbit-class
set forwarding-options class-of-service profile residential class-queue-map-name subs-4queues
set forwarding-options class-of-service profile residential remark-map-name subs-remarking-residential
set forwarding-options class-of-service profile residential policer-name policer-residential
set forwarding-options class-of-service profile residential class-policer-map-name policer-map-residential
set forwarding-options class-of-service profile residential scheduler-map-name subs-4queues-residential
commit

The following example shows the QoS profile configuration of the residential profile:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service profile
{
  "rtbrick-config:profile": [
    {
      "profile-name": "residential",
      "classifier-name": "subs-pbit-class",
      "class-queue-map-name": "subs-4queues",
      "remark-map-name": "subs-remarking-residential",
      "policer-name": "policer-residential",
      "class-policer-map-name": "policer-map-residential",
      "scheduler-map-name": "subs-4queues-residential"
    }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

Behavior Aggregate (BA) Classifier Configuration

Use the following CLI syntax to configure the BA classifier:

set forwarding-options class-of-service classifier <classifier-name> <attribute> <value>

Attribute Description

<classifier-name>

Specifies the classifier name

match-type <match-type>

Specifies the type of traffic to classify, that is, ipv4-tos, ipv6-tc, ieee-802.1, exp

match-type <match-type> codepoint <codepoint>

Specifies the code-point value based on the match-type

match-type <match-type> codepoint <codepoint> class <class>

Specifies the traffic class as class-0, class-1, class-2, class-3, class-4, class-5, class-6, and class-7

match-type <match-type> codepoint <codepoint> remark-codepoint <remark-codepoint>

Specifies the remark-codepoint that is used for remarking

The following example configures the BA classifier subs-pbit-class for traffic ieee-802.1 with a match code point 2 classified as class class-1.

set forwarding-options class-of-service classifier subs-pbit-class match-type ieee-802.1 codepoint 2 class class-1
commit

The following example shows BA classifier configuration.

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service classifier
{
  "rtbrick-config:classifier": [
    {
      "classifier-name": "subs-pbit-class",
      "match-type": [
        {
          "match-type": "ieee-802.1",
          "codepoint": [
            {
              "codepoint": 2,
              "class": "class-1"
            }
          ]
        }
      ]
    }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

Multifield Classifier (MFC) Configuration

Use the following CLI syntax to configure the multifield classifier.

set forwarding-options class-of-service multifield-classifier <attribute> <value>

Starting from Release 20.10.2, Multifield Classifier configuration requires explicit use of ordinal keywords.
Attribute Description

acl <l3v4 | l3v6> <…​>

Specifies the l3v4 / l3v6 ACL rule for multifield classifier configurations. For more information on configuring the ACL match rules, see the sections below.

IPv4 ACL Configuration Configuration

Use the following CLI syntax to configure the IPv4 ACL Match Configuration for the multifield classifier:

set forwarding-options class-of-service multifield-classifier acl l3v4 rule <rule-name> ordinal <ordinal-value> <attribute> <Value>

Attribute Description

<rule-name>

Specifies the multifield classifier rule name

ordinal <ordinal-value>

Specifies the ordinal that is used for traffic policy rule referencing

match <destination-ipv4-prefix>

Specifies the destination IPv4 prefix address

match <destination-ipv4-prefix-list>

Specifies the destination IPv4 prefix list name

match <direction>

Specifies the acl l3 traffic direction match

match <ip-protocol>

Specifies the IP protocol such as UDP or TCP

match <destination-l4-port>

Specifies the Layer 4 destination port number

match <ipv4-tos>

Specifies the IPv4 ToS value

match <ipv4-dscp>

Specifies the IPv4 Differentiated Services Code Point (DSCP) value

match <forward-class>

Specifies the forward class name

match <mpls-traffic>

Specifies the MPLS traffic

match <source-ipv4-prefix>

Specifies the source IPv4 prefix address

match <source-ipv4-prefix-list>

Specifies the source IPv4 prefix list name

match <source-l4-port>

Specifies the Layer 4 source port number

action forward-class <class>

class-0, class-1, class-2, class-3, class-4, class-5, class-6, class-7

action remark-codepoint <remark-codepoint>

Specifies the remark-map codepoint value

Multifield classification commonly matches on IP address fields, the IP protocol type field, or the port number in the UDP or TCP pseudo-header field.

The l3v4 acl-type multifield classifier is configured with a qualifier/match based on ipv4-tos (128, 160) and source-ipv4-prefix (132.1.1.3/32) with action as forward-class (class-0,class-1).

set forwarding-options class-of-service multifield-classifier acl l3v4 rule global_mfc
set forwarding-options class-of-service multifield-classifier acl l3v4 rule global_mfc ordinal 1001
set forwarding-options class-of-service multifield-classifier acl l3v4 rule global_mfc ordinal 1001 match ipv4-tos 128
set forwarding-options class-of-service multifield-classifier acl l3v4 rule global_mfc ordinal 1001 match source-ipv4-prefix 132.1.1.3/32
set forwarding-options class-of-service multifield-classifier acl l3v4 rule global_mfc ordinal 1001 action forward-class class-0
set forwarding-options class-of-service multifield-classifier acl l3v4 rule global_mfc ordinal 1002
set forwarding-options class-of-service multifield-classifier acl l3v4 rule global_mfc ordinal 1002 match ipv4-tos 160
set forwarding-options class-of-service multifield-classifier acl l3v4 rule global_mfc ordinal 1002 match source-ipv4-prefix 132.1.1.3/32
set forwarding-options class-of-service multifield-classifier acl l3v4 rule global_mfc ordinal 1002 action forward-class class-1
commit

The following example shows the IPv4 Match Configuration for the multifield classifier:

supervisor@rtbrick>C-BNG.rtbrick.net: cfg> show config forwarding-options class-of-service multifield-classifier acl l3v4 rule global_mfc
{
    "rtbrick-config:rule": [
      {
        "rule-name": "global_mfc",
        "ordinal": [
          {
            "ordinal-value": 1001,
            "match": {
              "ipv4-tos": 128,
              "source-ipv4-prefix": "132.1.1.3/32"
            },
            "action": {
              "forward-class": "class-0"
            }
          },
          {
            "ordinal-value": 1002,
            "match": {
              "ipv4-tos": 160,
              "source-ipv4-prefix": "132.1.1.3/32"
            },
            "action": {
              "forward-class": "class-1"
            }
          }
        ]
      }
    ]
  }
IPv6 ACL Configuration Configuration

Use the following CLI syntax to configure the IPv6 ACL match configuration for the multifield classifier:

set forwarding-options class-of-service multifield-classifier acl l3v6 rule <rule-name> ordinal <ordinal-value> <attribute> <value>

Attribute Description

<rule-name>

Specifies the multifield classifier rule name

ordinal <ordinal-value>

Specifies the ordinal that is used for traffic policy rule referencing

match <destination-ipv6-prefix>

Specifies the destination IPv6 prefix address

match <destination-ipv6-prefix-list>

Specifies the destination IPv6 prefix list name

match <ip-protocol>

Specifies the IP protocol such as UDP or TCP

match <destination-l4-port>

Specifies the Layer 4 destination port number

match <ipv6-tc>

Specifies the IPv6 traffic class value

match <forward-class>

Specifies the forward class name

match <mpls-traffic>

Specifies the MPLS traffic

match <source-ipv6-prefix>

Specifies the source IPv6 prefix address

match <source-ipv6-prefix-list>

Specifies the source IPv6 prefix list name

match <source-l4-port>

Specifies the Layer 4 source port number

action forward-class <class>

class-0, class-1, class-2, class-3, class-4, class-5, class-6, class-7

action remark-codepoint <remark-codepoint>

Specifies the remark-map codepoint value

In the following example, the l3v6 acl-type multifield classifier is configured with qualifier/match based on ipv6-tc (128, 160) and source-ipv6-prefix (132:1:1::3/32) with action as forward-class (class-0,class-1).

set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1001
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1001 match ipv6-tc 128
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1001 match source-ipv6-prefix 132::1::3/32
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1001 action forward-class class-0
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1002
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1002 match ipv6-tc 160
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1002 match source-ipv6-prefix 132:1:1::3/32
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1002 action forward-class class-1
commit

The following example shows the IPv6 match configuration for the multifield classifier:

supervisor@rtbrick>C-BNG.rtbrick.net: cfg> show config forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc
{
    "rtbrick-config:rule": [
      {
        "rule-name": "global_mfc",
        "ordinal": [
          {
            "ordinal-value": 1001,
            "match": {
              "ipv6-tc": 128,
              "source-ipv6-prefix": "132:1:1::3/32"
            },
            "action": {
              "forward-class": "class-0"
            }
          },
          {
            "ordinal-value": 1002,
            "match": {
              "ipv6-tc": 160,
              "source-ipv6-prefix": "132:1:1::3/32"
            },
            "action": {
              "forward-class": "class-1"
            }
          }
        ]
      }
    ]
  }
IPv4/IPv6 Priority Configuration

Use the following CLI syntax to configure the IPv4/IPv6 priority configuration:

set forwarding-options class-of-service multifield-classifier acl [l3v4|l3v6] rule <rule-name> <attribute> <value>

Attribute Description

<rule-name>

Specifies the multifield classifier rule name

ordinal <ordinal-value>

Specifies the ordinal that is used for traffic policy rule referencing

ordinal <ordinal-value> <priority>

Specify the ACL priority value. Range: 0 - 65535.

The following example configures the l3v6 acl-type multifield classifier with qualifier/match based on ipv6-tc (128) and source-ipv6-prefix(132:1:1::3/32) with action as forward-class (class-0,class-1) along with priority value (100, 200). When there are multiple qualifiers or actions, the one with the higher priority takes precedence over the others.

set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1001
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1001 match ipv6-tc 128
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1001 match source-ipv6-prefix 132::1::3/32
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1001 priority 100
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1001 action forward-class class-0
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1002
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1002 match ipv6-tc 128
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1002 match source-ipv6-prefix 132:1:1::3/32
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1002 priority 200
set forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc ordinal 1002 action forward-class class-1
commit

The following example shows the IPv4 priority configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service multifield-classifier acl l3v4 rule rtb_mfc


supervisor@rtbrick>C-BNG.rtbrick.net: cfg> show config forwarding-options class-of-service multifield-classifier acl l3v6 rule global_mfc
{
    "rtbrick-config:rule": [
      {
        "rule-name": "global_mfc",
        "ordinal": [
          {
            "ordinal-value": 1001,
            "priority": 100,
            "match": {
              "ipv6-tc": 128,
              "source-ipv6-prefix": "132:1:1::3/32"
            },
            "action": {
              "forward-class": "class-0"
            }
          },
          {
            "ordinal-value": 1002,
            "priority": 200,
            "match": {
              "ipv6-tc": 160,
              "source-ipv6-prefix": "132:1:1::3/32"
            },
            "action": {
              "forward-class": "class-1"
            }
          }
        ]
      }
    ]
  }
supervisor@rtbrick>LEAF01: cfg>

Policer Configuration

Use the following CLI syntax to configure the QoS policer:

set forwarding-options class-of-service policer <policer-name> <attribue> <value>

Attribute Description

<policer-name>

Specifies the policer name.

<levels>

Specifies levels in the policer. There is only support for the policer levels 1 and 4.

<type>

Specifies the policer type.

<flag>

Specifies the policer flags.

level1-rates cir <cir>

Specifies the committed information rate (CIR) in Kilobits per second (Kbps) for level-1. The same is applicable for level-2 to level-4.

level1-rates pir <pir>

Specifies the peak information rate (PIR) in Kilobits per second (Kbps) for level-1. The same is applicable for level-2 to level-4.

level1-rates cbs <cbs>

Specifies the Committed burst size (CBS) in Kilobits per second (Kbps) for level-1. The same is applicable for level-2 to level-4.

level1-rates pbs <pbs>

Specifies the peak burst size (PBS) in Kilobits per second (Kbps) for level-1. The same is applicable for level-2 to level-4.

level1-rates max-cir <max-cir>

Specifies the maximum for the level-1 committed information rate (CIR) in kilobits per second (Kbps). The same is applicable for level-2 to level-4.

level1-rates max-pir <max-pir>

Specifies the maximum for the level-1 peak information rate (PIR) in Kilobits per second (Kbps). The same is applicable for level-2 to level-4.

The following example configures the QoS policer policer-residential with multi-level policers (levels=4), CIR, PIR rates, and burst sizes (CBS, PBS) for each level (level-1, level-2, level-3 and level-4). Also, two-rate-three-color policer type and color-blind as the default configuration. The four-level Policer configuration is as follows:

  • Level-1(cir=2Mbps, pir=2.5Mbps, cbs=1000, pbs=1000)

  • Level-2(cir=3Mbps, pir=3.5Mbps, cbs=1000, pbs=1000)

  • Level-3(cir=4Mbps, pir=4.5Mbps, cbs=1000, pbs=1000)

  • Level-4(cir=1Mbps, pir=1.5Mbps, cbs=1000, pbs=1000)

set forwarding-options class-of-service policer policer-residential
set forwarding-options class-of-service policer policer-residential level1-rates cir 2000
set forwarding-options class-of-service policer policer-residential level1-rates cbs 1000
set forwarding-options class-of-service policer policer-residential level1-rates pir 2500
set forwarding-options class-of-service policer policer-residential level1-rates pbs 1000
set forwarding-options class-of-service policer policer-residential level2-rates cir 3000
set forwarding-options class-of-service policer policer-residential level2-rates cbs 1000
set forwarding-options class-of-service policer policer-residential level2-rates pir 3500
set forwarding-options class-of-service policer policer-residential level2-rates pbs 1000
set forwarding-options class-of-service policer policer-residential level3-rates cir 4000
set forwarding-options class-of-service policer policer-residential level3-rates cbs 1000
set forwarding-options class-of-service policer policer-residential level3-rates pir 4500
set forwarding-options class-of-service policer policer-residential level3-rates pbs 1000
set forwarding-options class-of-service policer policer-residential level4-rates cir 1000
set forwarding-options class-of-service policer policer-residential level4-rates cbs 1000
set forwarding-options class-of-service policer policer-residential level4-rates pir 1500
set forwarding-options class-of-service policer policer-residential level4-rates pbs 1000
set forwarding-options class-of-service policer policer-residential levels 4
set forwarding-options class-of-service policer policer-residential type two-rate-three-color
commit

The following example shows the QoS policer level rates configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service policer policer-residential
{
  "rtbrick-config:policer": [
{
            "policer-name": "policer-residential",
            "level1-rates": {
              "cir": 2000,
              "cbs": 1000,
              "pir": 2500,
              "pbs": 1000
            },
            "level2-rates": {
              "cir": 3000,
              "cbs": 1000,
              "pir": 3500,
              "pbs": 1000
            },
            "level3-rates": {
              "cir": 4000,
              "cbs": 1000,
              "pir": 4500,
              "pbs": 1000
            },
            "level4-rates": {
              "cir": 1000,
              "cbs": 1000,
              "pir": 1500,
              "pbs": 1000
            },
            "levels": 4,
            "type": "two-rate-three-color"
          }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

Class-Policer-Map Configuration

Use the following CLI syntax to configure the Class-Policer-Map:

set forwarding-options class-of-service class-policer-map <class-policer-map-name> <attribue> <value>

Attribute Description

<class-policer-map-name>

Specifies the class policer map name,

class <class>

Specifies the class such as class-0, class-1, class-2, class-3, class-4, class-5, class-6, class-7

class <class> <policer-level>

Specifies the policer levels. The supported levels are: level-1, level-2, level-3, and level-4

Below is an example configuration of the class-policer-map, which sets up level-1 to level-4 policer levels.

  • class-0 mapped to policer level-1

  • class-1 mapped to policer level-2

  • class-2 mapped to policer level-3

  • class-3 mapped to policer level-4

set forwarding-options class-of-service class-policer-map policer-map-residential class class-0 policer-level level-1
set forwarding-options class-of-service class-policer-map policer-map-residential class class-1 policer-level level-2
set forwarding-options class-of-service class-policer-map policer-map-residential class class-2 policer-level level-3
set forwarding-options class-of-service class-policer-map policer-map-residential class class-3 policer-level level-4
commit

The following example shows the class-policer-map configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service class-policer-map policer-map-l2tp
{
  "rtbrick-config:class-policer-map": [
{
            "class-policer-map-name": "policer-map-residential",
            "class": [
              {
                "class": "class-0",
                "policer-level": "level-1"
              },
              {
                "class": "class-1",
                "policer-level": "level-2"
              },
              {
                "class": "class-2",
                "policer-level": "level-3"
              },
              {
                "class": "class-3",
                "policer-level": "level-4"
              }
            ]
          }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

Queue Configuration

Use the following CLI syntax to configure a queue:

set forwarding-options class-of-service queue <queue-name> <atribute> <value>

Attribute Description

<queue-name>

Specifies the queue name

queue-size <queue-size>

Specifies the size of the queue in bytes

<shaper-name>

(Optional) Specifies the shaper that is associated with the queue

wred minimum-threshold <minimum-threshold>

Specifies the minimum average queue size to apply WRED in bytes

wred maximum-threshold <maximum-threshold>

Specifies the maximum average queue size to apply WRED in bytes

wred drop-probability <drop-probability>

WRED drop probability applied at the maximum threshold

header-compensation bytes <bytes>

Specifies the header compensation value

header-compensation decrement true

Specifies whether the header compensation value is to be decremented.

The following example configures four queues with different traffic streams named BE_SUBS, LD_SUBS, LL_SUBS and VO_SUBS with queue attributes queue-size, queue header-compensation & queue shaper for Best Effort(BE), Low-Delay(LD), Low-Loss(LL) and Voice(VO) Queues.

set forwarding-options class-of-service queue BE_SUBS
set forwarding-options class-of-service queue BE_SUBS queue-size 375000
set forwarding-options class-of-service queue BE_SUBS header-compensation bytes 22
set forwarding-options class-of-service queue BE_SUBS header-compensation bytes 22 decrement true
set forwarding-options class-of-service queue LD_SUBS
set forwarding-options class-of-service queue LD_SUBS queue-size 625000
set forwarding-options class-of-service queue LD_SUBS header-compensation bytes 22
set forwarding-options class-of-service queue LD_SUBS header-compensation bytes 22 decrement true
set forwarding-options class-of-service queue LL_SUBS
set forwarding-options class-of-service queue LL_SUBS queue-size 625000
set forwarding-options class-of-service queue LL_SUBS header-compensation bytes 22
set forwarding-options class-of-service queue LL_SUBS header-compensation bytes 22 decrement true
set forwarding-options class-of-service queue VO_SUBS
set forwarding-options class-of-service queue VO_SUBS queue-size 156250
set forwarding-options class-of-service queue VO_SUBS header-compensation bytes 22
set forwarding-options class-of-service queue VO_SUBS header-compensation bytes 22 decrement true
set forwarding-options class-of-service queue VO_SUBS shaper-name shaper_VO
commit

The following example shows the queue configuration:

supervisor@DT-STD-23-2402>bm14-tst.fsn.rtbrick.net: cfg> show config forwarding-options class-of-service queue
{
  "rtbrick-config:queue": [
{
            "queue-name": "BE_SUBS",
            "queue-size": 375000,
            "header-compensation": {
              "bytes": 22,
              "decrement": "true"
            }
          },
          {
            "queue-name": "LD_SUBS",
            "queue-size": 625000,
            "header-compensation": {
              "bytes": 22,
              "decrement": "true"
            }
          },
          {
            "queue-name": "LL_SUBS",
            "queue-size": 625000,
            "header-compensation": {
              "bytes": 22,
              "decrement": "true"
            }
          },
          {
            "queue-name": "VO_SUBS",
            "queue-size": 156250,
            "shaper-name": "shaper_VO",
            "header-compensation": {
              "bytes": 22,
              "decrement": "true"
            }
          }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

Queue-Group Configuration

Queue group size: 1 or 4 or 8

Use the following CLI syntax to configure a queue group:

set forwarding-options class-of-service queue-group <queue-group-name> <attribute> <value>

Attribute Description

<queue-group-name>

User-defined name for the queue-group

queue-numbers <queue-numbers>

Specifies the number of queues in a Queue Group

The following examples configure the queue group with queue numbers 1 and 4.

set forwarding-options class-of-service queue-group subs-4queues queue-numbers 1
commit

The following example shows the queue group configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service queue-group
{
  "rtbrick-config:queue-group": [
    {
      "queue-group-name": "subs-4queues",
      "queue-numbers": 1
    }
  ]
}
supervisor@rtbrick>LEAF01: cfg>
set forwarding-options class-of-service queue-group subs-4queues queue-numbers 4
commit

The following example shows the queue group configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service queue-group
{
  "rtbrick-config:queue-group": [
    {
      "queue-group-name": "subs-4queues",
      "queue-numbers": 4
    }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

Class-Queue-Map Configuration

Use the following CLI syntax to configure the class-queue-map:

set forwarding-options class-of-service class-queue-map <class-queue-map-name> <attribute> <value>

Attribute Description

<class-queue-map-name>

Specifies the class queue map name

class <class>

Specifies the class such as class-0, class-1, class-2, class-3, class-4, class-5, class-6, class-7

class <class> queue-name <queue-name>

Specifies the queue name

The following example configures the class-queue-map for the specific classes and queues:

  • class-0 mapped to queue BE_SUBS

  • class-1 mapped to queue LD_SUBS

  • class-2 mapped to queue LL_SUBS

  • class-3 mapped to queue VO_SUBS

set forwarding-options class-of-service class-queue-map subs-4queues class-0 queue-name BE_SUBS
set forwarding-options class-of-service class-queue-map subs-4queues class-1 queue-name LD_SUBS
set forwarding-options class-of-service class-queue-map subs-4queues class-2 queue-name LL_SUBS
set forwarding-options class-of-service class-queue-map subs-4queues class-3 queue-name VO_SUBS
commit

The following example shows the class-queue-map configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service class-queue-map
{
  "rtbrick-config:class-queue-map": [
{
            "class-queue-map-name": "subs-4queues",
            "class": [
              {
                "class-type": "class-0",
                "queue-name": "BE_SUBS"
              },
              {
                "class-type": "class-1",
                "queue-name": "LD_SUBS"
              },
              {
                "class-type": "class-2",
                "queue-name": "LL_SUBS"
              },
              {
                "class-type": "class-3",
                "queue-name": "VO_SUBS"
              }
            ]
          }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

Scheduler Configuration

Use the following CLI syntax to configure a scheduler:

set forwarding-options class-of-service scheduler <attribue> <value>

Attribute Description

<scheduler-name>

User-defined Scheduler Name

<scheduler-name> shaper-name <shaper-name>

(Optional) User-defined Shaper Name

<scheduler-name> type <type>

Specifies the Scheduler Type
2sp_wfq_discrete
3sp_wfq_discrete
strict_priority
wfq_discrete_2sp
2sp_wfq_independent
fair_queueing
weighted_fair_queueing
wfq_independent_2sp

<scheduler-name> composite true

(Optional) keyword to specify the scheduler as composite type

The following example configures two schedulers: subs-4queues with scheduler type strict_priority for the Subscriber level, and pon0 with scheduler type fair_queueing for PON/GPON level.

set forwarding-options class-of-service scheduler subs-4queues
set forwarding-options class-of-service scheduler subs-4queues shaper shaper_session
set forwarding-options class-of-service scheduler subs-4queues type strict_priority
set forwarding-options class-of-service scheduler pon0
set forwarding-options class-of-service scheduler pon0 type fair_queueing
commit

The following example shows the QoS scheduler configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service scheduler
{
  "rtbrick-config:scheduler": [
          {
            "scheduler-name": "pon0",
            "type": "fair_queueing"
          },
          {
            "scheduler-name": "subs-4queues",
            "shaper-name": "shaper_session",
            "type": "strict_priority"
          }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

Priority Propagation

Use the following CLI syntax to configure priority propagation:

set forwarding-options class-of-service global priority-propagation [enable | disable]

The following example enables priority propagation at the global level to operate schedulers in dual-flow mode, with high-priority and low-priority flows.

set forwarding-options class-of-service global priority-propagation enable

The following example shows the priority propagation:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service global
{
  "rtbrick-config:global": {
    "priority-propagation": "enable"
  }
}
supervisor@rtbrick>LEAF01: cfg>

Shaper Configuration

Use the following CLI syntax to configure a shaper:

set forwarding-options class-of-service shaper <shaper-name> <attribue> <value>

Command Arguments
Attribute Description

<shaper-name>

User-defined shaper name

<shaping-rate-high>

High flow shaping rate in kilobits per second

<shaping-rate-low>

Low flow shaping rate in kilobits per second

  • If priority propagation is not enabled, high-flow shaping value will be considered for shaper.

  • If the scheduler type is strict_priority, the mapping of queues to priorities begins with strict_priority_1.

The following example configures the shaper high-flow and low-flow rates for Subscriber Session Level with shaper-name shaper_session and Queue Level with shaper-name shaper_VO.

set forwarding-options class-of-service shaper shaper_session
set forwarding-options class-of-service shaper shaper_session shaping-rate-high 10000
set forwarding-options class-of-service shaper shaper_session shaping-rate-low 100
set forwarding-options class-of-service shaper shaper_VO
set forwarding-options class-of-service shaper shaper_VO shaping-rate-high 2000
set forwarding-options class-of-service shaper shaper_VO shaping-rate-low 0
commit

The following example shows the shaper configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service shaper
{
  "rtbrick-config:shaper": [
          {
            "shaper-name": "shaper_VO",
            "shaping-rate-high": 2000,
            "shaping-rate-low": 0
          },
          {
            "shaper-name": "shaper_session",
            "shaping-rate-high": 10000,
            "shaping-rate-low": 100
          }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

Scheduler-Map Configuration

Use the following CLI syntax to configure a Scheduler-Map:

set forwarding-options class-of-service scheduler-map <scheduler-map-name> <attribue> <value>

Command arguments
Attribute Description

<scheduler-map-name>

Specifies the name of the scheduler-map

scheduler-name <scheduler-name>

Specifies the name of the scheduler

queue-group-name <group-name>

Specifies the name of the queue-group

queue-group-name <group-name> queue-name <name>

Specifies the name of the queue

queue-group-name <group-name> queue-name <name> connection-point <connection-point>

Specifies the type of connection point, such as no_priority, strict_priority_0, strict_priority_1, strict_priority_2, strict_priority

queue-group-name <group-name> queue-name <name> parent-flow <high-flow / low-flow>

(Optional) Specifies the type of the parent flow, that is high-flow or low-flow.

queue-group-name <group-name> queue-name <name> parent-scheduler-name <parent-scheduler-name>

Specifies the name of the parent scheduler

queue-group-name <group-name> queue-name <name> port-connection

<port-connection-type>

Specifies the type of port connection, that is, queue_to_port or scheduler_to_port

queue-group-name <group-name> queue-name <name> weight <weight>

The following example configures a scheduler map for OLT with schedmap-olt and for subscribers with subs-4queues-residential. OLT scheduler-map schedmap-olt is directly connected to the physical port and subs-4queues-residential connects different queues (BE_SUBS, LL_SUBS,LD_SUBS,VO_SUBS) with different connection-points(strict_priority_3, strict_priority_2, strict_priority_1, strict_priority_0).

set forwarding-options class-of-service scheduler-map schedmap-olt
set forwarding-options class-of-service scheduler-map schedmap-olt scheduler-name pon0
set forwarding-options class-of-service scheduler-map schedmap-olt scheduler-name pon0 port-connection scheduler_to_port
set forwarding-options class-of-service scheduler-map subs-4queues-residential
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name BE_SUBS
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name BE_SUBS parent-flow high-flow
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name BE_SUBS parent-scheduler-name subs-4queues
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name BE_SUBS connection-point strict_priority_3
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name LD_SUBS
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name LD_SUBS parent-flow high-flow
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name LD_SUBS parent-scheduler-name subs-4queues
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name LD_SUBS connection-point strict_priority_1
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name LL_SUBS
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name LL_SUBS parent-flow high-flow
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name LL_SUBS parent-scheduler-name subs-4queues
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name LL_SUBS connection-point strict_priority_2
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name VO_SUBS
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name VO_SUBS parent-flow high-flow
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name VO_SUBS parent-scheduler-name subs-4queues
set forwarding-options class-of-service scheduler-map subs-4queues-residential queue-group-name subs-4queues queue-name VO_SUBS connection-point strict_priority_0
set forwarding-options class-of-service scheduler-map subs-4queues-residential scheduler-name subs-4queues
set forwarding-options class-of-service scheduler-map subs-4queues-residential scheduler-name subs-4queues port-connection scheduler_to_port
commit

The following example shows the scheduler-map configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service scheduler-map
{
  "rtbrick-config:scheduler-map": [
{
            "scheduler-map-name": "schedmap-olt",
            "scheduler-name": [
              {
                "name": "pon0",
                "port-connection": "scheduler_to_port"
              }
            ]
          },
          {
            "scheduler-map-name": "subs-4queues-residential",
            "queue-group-name": [
              {
                "group-name": "subs-4queues",
                "queue-name": [
                  {
                    "name": "BE_SUBS",
                    "parent-flow": "high-flow",
                    "parent-scheduler-name": "subs-4queues",
                    "connection-point": "strict_priority_3"
                  },
                  {
                    "name": "LD_SUBS",
                    "parent-flow": "high-flow",
                    "parent-scheduler-name": "subs-4queues",
                    "connection-point": "strict_priority_1"
                  },
                  {
                    "name": "LL_SUBS",
                    "parent-flow": "high-flow",
                    "parent-scheduler-name": "subs-4queues",
                    "connection-point": "strict_priority_2"
                  },
                  {
                    "name": "VO_SUBS",
                    "parent-flow": "high-flow",
                    "parent-scheduler-name": "subs-4queues",
                    "connection-point": "strict_priority_0"
                  }
                ]
              }
            ],
            "scheduler-name": [
              {
                "name": "subs-4queues",
                "port-connection": "scheduler_to_port"
              }
            ]
          }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

Remark-Map Configuration

Use the following CLI syntax to configure the remark-map:

set forwarding-options class-of-service remark-map <remark-map-name> <attribute> <value>

Command arguments
Attribute Description

<remark-map-name>

Specifies the remaking map name

remark-type <remark-type>

Specifies the remarking type - ipv4-tos, ipv6-tc, mpls-ipv4, mpls-ipv6, ieee-802.1

remark-type <remark-type> <match-codepoint>

Specifies the match code point for the specified remarking type.

On the UfiSpace S9600-72XC, UfiSpace S9600-32X, and Delta AGCVA48S platforms, the match codepoint is TOS for VLAN IEEE-802.1p remarking.

remark-type <remark-type> <match-codepoint> color <color>

Indicates the color - all, green, yellow. Color is used to set different remark codepoints for the same match-codepoint based on color marked by the Policer.

remark-type <remark-type> <match-codepoint> color <color> remark-codepoint <remark-codepoint>

Specifies the remarking codepoint

In the following example, the remark map subs-remarking-residential is configured with match-codepoint as 128, 160, 192, and 224. The color is set to "all", and the remark-codepoint is 6.

set forwarding-options class-of-service remark-map subs-remarking-residential
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 128
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 128 color all
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 128 color all remark-codepoint 6
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 160
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 160 color all
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 160 color all remark-codepoint 6
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 192
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 192 color all
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 192 color all remark-codepoint 6
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 224
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 224 color all
set forwarding-options class-of-service remark-map subs-remarking-residential remark-type ieee-802.1 match-codepoint 224 color all remark-codepoint 6
commit

The following example shows the remark map configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service remark-map remark-exp remark-type ipv6-tc
{
  "rtbrick-config:remark-type": [
{
            "remark-map-name": "subs-remarking-residential",
            "remark-type": [
              {
                "remark-type": "ieee-802.1",
                "match-codepoint": [
                  {
                    "match-codepoint": 128,
                    "color": [
                      {
                        "color": "all",
                        "remark-codepoint": 6
                      }
                    ]
                  },
                  {
                    "match-codepoint": 160,
                    "color": [
                      {
                        "color": "all",
                        "remark-codepoint": 6
                      }
                    ]
                  },
                  {
                    "match-codepoint": 192,
                    "color": [
                      {
                        "color": "all",
                        "remark-codepoint": 6
                      }
                    ]
                  },
                  {
                    "match-codepoint": 224,
                    "color": [
                      {
                        "color": "all",
                        "remark-codepoint": 6
                      }
                    ]
                  }
                ]
              }
            ]
          }
  ]
}
supervisor@rtbrick>LEAF01: cfg>
Global Profile Mapping

Use the following CLI syntax to configure the remark map for a global profile.

set forwarding-options class-of-service global remark-map-name <remark-map-name>

Command arguments
Attribute Description

<remark-map-name>

Specifies the name of the remark map.

The following example configures the remark map for a global profile:

set forwarding-options class-of-service global remark-map-name subs-remarking-residential
commit

The following example shows the remark map for a global profile configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service global
{
  "rtbrick-config:global": {
    "multifield-classifier-name": "global_mfc",
    "remark-map-name": "subs-remarking-residential"
  }
}
supervisor@rtbrick>LEAF01: cfg>
Remark-map to Instance Mapping

Use the following CLI syntax to configure the remark map for an instance.

set forwarding-options class-of-service instance <instance-name> remark-map-name <remark-map-name>

Command arguments
Attribute Description

<instance-name>

Specifies the name of the instance.

<remark-map-name>

Specifies the name of the remark map.

The following example configures the remark map for the instance default.

set forwarding-options class-of-service instance default remark-map-name subs-remarking-residential
commit

The following example shows the remark map configuration for the instance default.

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service instance default
{
  "rtbrick-config:instance": [
    {
      "name": "default",
      "remark-map-name": "subs-remarking-residential"
    }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

QoS Global and Instance Configurations

The figure below shows the dependencies for per instance or global classifier and remark-map configurations.

hqos flow global instance

The following example configures the BA classifier subs-exp-class for traffic exp with match code point 2 classified as class class-1.

set forwarding-options class-of-service classifier subs-exp-class match-type exp codepoint 2 class class-1

BA Classifier to Global Mapping

The MPLS classifiers can be applied globally using global configuration.

set forwarding-options class-of-service global classifier-name <classifier-name>

Attribute Description

<classifier-name>

Specifies the classifier name

The following example shows how to configure the subs-exp-class BA Classifier for global mapping.

set forwarding-options class-of-service global classifier-name subs-exp-class
commit

The configuration for global mapping to the BA Classifier is shown in the following example.

supervisor@rtbrick>LEAF01: cfg> show config  forwarding-options class-of-service global classifier-name
{
  "rtbrick-config:classifier-name": "subs-exp-class"
}
supervisor@rtbrick>LEAF01: cfg>

Single Queue To Global Mapping

The Single-Queue can be enabled with global configuration.

For the system to initialize with a single queue in a Queue-Group, a system reboot is required.

set forwarding-options class-of-service global queue-group-profile single-queue

Attribute Description

The following example shows how to enable single-queue in a Queue-Group.

set forwarding-options class-of-service global queue-group-profile single-queue
commit

The configuration for a single queue in Queue-Group is shown in the following example.

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service global
{
  "rtbrick-config:global": {
    "queue-group-profile": "single-queue"
  }
}
supervisor@rtbrick>LEAF01: cfg>

Remark-Map To Global Mapping

Use the following CLI syntax to configure the remark map for a global profile.

set forwarding-options class-of-service global remark-map-name <remark-map-name>

Command arguments
Attribute Description

<remark-map-name>

Specifies the name of the remark map.

The following example configures the remark map for a global profile:

set forwarding-options class-of-service global remark-map-name subs-remarking-residential
commit

Multifield Classifier (MFC) to Global Mapping

Use the following CLI syntax to configure the MF Classifier to Global Mapping:

set forwarding-options class-of-service global multifield-classifier-name <multifield-classifier-name>

Attribute Description

<multifield-classifier-name>

Specifies the name of the multifield classifier

The following example configures the multifield Classifier to Global Mapping:

set forwarding-options class-of-service global multifield-classifier-name global_mfc
commit

The following example shows the multifield classifier to Global Mapping configuration:

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service global
{
  "rtbrick-config:global": {
    "multifield-classifier-name": "global_mfc"
  }
}
supervisor@rtbrick>LEAF01: cfg>

BA Classifier to Instance Mapping

The MPLS classifiers can be applied at an instance level using instance configuration.

set forwarding-options class-of-service instance <instance> classifier-name <classifier-name>

Attribute Description

<instance>

Specifies the instance name

<classifier-name>

Specifies the classifier name

The following example shows how to configure the subs-exp-class BA Classifier for the instance default.

set forwarding-options class-of-service instance default classifier-name subs-exp-class
commit

The configuration for instance mapping to the BA Classifier is shown in the following example.

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service instance default
{
  "rtbrick-config:instance": [
    {
      "name": "default",
      "classifier-name": "subs-exp-class"
    }
  ]
}
supervisor@rtbrick>LEAF01: cfg>

Remark-Map To Instance Mapping

Use the following CLI syntax to configure the remark map for an instance.

set forwarding-options class-of-service instance <instance-name> remark-map-name <remark-map-name>

Command arguments
Attribute Description

<instance-name>

Specifies the name of the instance.

<remark-map-name>

Specifies the name of the remark map.

The following example configures the remark map for the instance default:

set forwarding-options class-of-service instance default remark-map-name subs-remarking-residential
commit

The configuration for the remark map for an instance is shown in the following example.

supervisor@rtbrick>LEAF01: cfg> show config forwarding-options class-of-service instance default
{
  "rtbrick-config:instance": [
    {
      "name": "default",
      "remark-map-name": "subs-remarking-residential"
    }
  ]
}
supervisor@rtbrick>LEAF01: cfg>