#
Quality of Service
#
URL
frinx-openconfig-qos:qos
#
OPENCONFIG YANG
{
"qos": {
"config": {
"frinx-saos-qos-extension:enabled": true
},
"interfaces": {
"interface": [
{
"interface-id": {{eth_ifc_name}},
"config": {
"interface-id": {{eth_ifc_name}},
"frinx-saos-qos-extension:enabled": true,
"frinx-saos-qos-extension:mode": {{mode}}
},
"input": {
"config": {
"frinx-qos-extension:service-policy": "{{qos_input_policy_name}}"
}
},
"output": {
"config": {
"frinx-qos-extension:service-policy": "{{qos_output_policy_name}}"
}
}
}
]
}
}
}
#
URL
frinx-openconfig-qos:qos/classifiers/classifier={{class_name}}?content=nonconfig
#
OPENCONFIG YANG
{
"classifier": [
{
"name": "{{class_name}}",
"config": {
"name": "{{class_name}}"
"frinx-qos-extension:operation": {{matching_rule}}
},
"terms": {
"term": [
{
"id": "{{term_id}}",
"config": {
"id": "{{term_id}}"
},
"conditions": {
"frinx-qos-extension:qos-group": [{{term_c_qos_grp}}],
"frinx-qos-extension:precedence": [{{term_c_common_prec}}],
"ipv4|6": {
"config": {
"frinx-qos-extension:precedence": "[{{term_c_ipv4_prec}}]"
"frinx-qos-extension:acl-ref": "{{term_c_acl_ref}}",
"frinx-qos-extension:dscp-enum": "{{term_c_dscp_enum}}"
}
},
"mpls": {
"config": {
"traffic-class": ["{{term_c_tc}}"]
}
},
"frinx-qos-extension:multiple-cos": {
"cos-sets": [
{
"id": {{id_number_of_set}},
"elements": {
"inner": {{term_c_cos_inner}}, //true or false
"element": [
{
"id": {{term_c_cos}}
}
]
}
}
]
}
},
"actions": {
"config": {
"target-group": {{policy_name}}
},
"remark": {
"config": {
"frinx-qos-extension:set-precedence": [{{term_s_common_prec}}],
"frinx-qos-extension:set-qos-group": [{{term_s_qos_grp}}],
"set-mpls-tc": {{term_s_tc}}
}
}
}
}
]
}
}
]
}
#
URL
frinx-openconfig-qos:qos/scheduler-policies/scheduler-policy={{policy_name}}
#
OPENCONFIG YANG
{
"scheduler-policy": [
{
"name": "{{policy_name}}",
"config": {
"name": "{{policy_name}}",
"frinx-saos-qos-extension:interface-id": "{{eth_ifc_name}}"
}
"schedulers": {
"scheduler": [
{
"sequence": "{{scheduler_seq}}", //internal value indicating the class-map sequence,starting with 1
"config": {
"sequence": "{{scheduler_seq}}",
"frinx-saos-qos-extension:type": {{scheduler_type}},
"frinx-saos-qos-extension:vs-name": {{vs_ni_name}},
"priority": "{{scheduler_strict_priority}}", // STRICT or null
"frinx-qos-extension:service-policy": "{{scheduler_policy_name}}",
"frinx-qos-extension:vrp-precedence": "{{precedence_name}}",
"frinx-qos-extension:behavior": "{{behavior_name}}"
},
"inputs": {
"input": [
{
"id": "{{class_name}}",
"config": {
"id": "{{class_name}}",
"queue": "{{class_name}}",
"weight": "{{scheduler_priority}}",
"frinx-qos-extension:cos": {{scheduler_cos}},
"frinx-qos-extension:statistic": "{{traffic_statistics}}"
}
}
]
},
"one-rate-two-color": {
"config": {
"cir": {{1r2c_scheduler_cir}},
"bc": {{1r2c_scheduler_bc}},
"cir-pct": {{1r2c_scheduler_bw_pct}},
"cir-pct-remaining": {{1r2c_scheduler_bw_rem}},
"frinx-qos-extension:max-queue-depth-bps": {{1r2c_scheduler_max_queue_depth_bps}},
"frinx-qos-extension:drop-method": "{{drop_method_name}}",
"frinx-qos-extension:color-mode": "{{color_mode_name}}"
},
"conform-action": {
"config": {
"frinx-qos-extension:cos-transmit": {{1r2c_conform_cos}},
"frinx-qos-extension:dei-transmit": {{1r2c_conform_dei}},
"frinx-qos-extension:dscp-transmit": {{1r2c_conform_dscp}},
"frinx-qos-extension:qos-transmit": {{1r2c_conform_qos}},
"frinx-qos-extension:transmit": {{1r2c_conform_transmit}} // true or false
}
},
"exceed-action": {
"config": {
"frinx-qos-extension:cos-transmit": {{1r2c_exceed_cos}},
"frinx-qos-extension:dei-transmit": {{1r2c_exceed_dei}},
"frinx-qos-extension:dscp-transmit": {{1r2c_exceed_dscp}},
"frinx-qos-extension:qos-transmit": {{1r2c_exceed_qos}},
"frinx-qos-extension:transmit": {{1r2c_exceed_transmit}}, // true or false
"drop": {{1r2c_exceed_drop}} // true or false
}
},
"frinx-qos-extension:yellow-action": {
"config": {
"frinx-qos-extension:cos-transmit": {{1r2c_yellow_cos}},
"frinx-qos-extension:dei-transmit": {{1r2c_yellow_dei}},
"frinx-qos-extension:dscp-transmit": {{1r2c_yellow_dscp}},
"frinx-qos-extension:qos-transmit": {{1r2c_yellow_qos}},
"frinx-qos-extension:transmit": {{1r2c_yellow_transmit}}, // true or false
"drop": {{1r2c_yellow_drop}} // true or false
}
}
},
"two-rate-three-color": {
"config": {
"cir": {{scheduler_cir}},
"cir-pct": {{scheduler_bw_pct}},
"cir-pct-remaining": {{scheduler_bw_pct_rem}},
"pir": {{scheduler_pir}},
"be": {{scheduler_be}},
"max-queue-depth-pct": {{scheduler_rate_pct}},
"frinx-qos-extension:max-queue-depth-ms": {{scheduler_max_queue_depth_ms}},
"frinx-saos-qos-extension:congestion-avoidance": {{scheduler_congestion}},
"frinx-saos-qos-extension:weight": {{scheduler_saos_weight}},
"frinx-qos-extension:traffic-action": "{{traffic_action_name}}"
}
}
}
]
}
}
]
}
#
OS Configuration Commands
#
Cisco IOS 12, 15, 16 / IOS XE 15, 16, 17
#
CLI
interface {{eth_ifc_name}}
service-policy input {{qos_input_policy_name}}
service-policy output {{qos_output_policy_name}}
class-map match-any|match-all {{class_name}}
match cos {{term_c_cos_inner}} {{term_c_cos}}
match qos-group {{term_c_qos_grp}}
match ip dscp {{term_c_dscp_enum}}
policy-map {{policy_name}}
class {{class_name}}
set cos {{scheduler_cos}}
police cir {{1r2c_scheduler_cir}} bc {{1r2c_scheduler_bc}} conform-action {{1r2c_conform_transmit}} exceed-action {{1r2c_exceed_transmit}}
police cir {{1r2c_scheduler_cir}} bc {{1r2c_scheduler_bc}} conform-action {{1r2c_conform_transmit}} exceed-action {{1r2c_exceed_drop}}
police cir {{1r2c_scheduler_cir}} bc {{1r2c_scheduler_bc}} conform-action set-cos-transmit {{1r2c_conform_cos}} exceed-action set-cos-transmit {{1r2c_exceed_cos}}
police cir {{1r2c_scheduler_cir}} bc {{1r2c_scheduler_bc}} conform-action set-dot1ad-dei-transmit {{1r2c_conform_dei}} exceed-action set-dot1ad-dei-transmit {{1r2c_exceed_dei}}
police cir {{1r2c_scheduler_cir}} bc {{1r2c_scheduler_bc}} conform-action set-dscp-transmit {{1r2c_conform_dscp}} exceed-action set-dscp-transmit {{1r2c_exceed_dscp}}
police cir {{1r2c_scheduler_cir}} bc {{1r2c_scheduler_bc}} conform-action set-qos-transmit {{1r2c_conform_qos}} exceed-action set-qos-transmit {{1r2c_exceed_qos}}
priority|no priority // based on {{scheduler_strict_priority}}
bandwidth percent {{1r2c_scheduler_bw_pct}}
bandwidth remaining percent {{1r2c_scheduler_bw_rem}}
shape average {{1r2c_scheduler_max_queue_depth_bps}}
service-policy {{scheduler_policy_name}}
#
Usage
A term marks one or more conditions depending on the class-map type.
- When class-map type: match-all, there is just one term, that MUST be called 'all'.
- When class-map type: match-any, the terms are numbered from 1 ... number_of_conditions. In this case, the {{term_id}} marks the line, where the conditions specified in conditions is written.
#
Cisco IOS XR 5.3.4
#
CLI
class-map match-any|match-all {{class_name}}
match qos-group {{term_c_qos_grp}}
match mpls experimental topmost {{term_c_tc}}
match precedence {{term_c_common_prec}}
match precedence ipv4 {{term_c_ipv4_prec}}
match access-group ipv4|6 {{term_c_acl_ref}}
end-class-map
policy-map {{policy_name}}
class {{class_name}}
set qos-group {{term_s_qos_grp}}
set mpls experimental topmost {{term_s_tc}}
set precedence {{term_s_common_prec}}
priority level {{scheduler_priority}}
police rate percent {{scheduler_rate_pct}}
queue-limit {{scheduler_max_queue_depth_ms}} ms
bandwidth percent {{scheduler_bw_pct}}
bandwidth remaining percent {{scheduler_bw_pct_rem}}
#
Usage
A term marks one or more conditions depending on the class-map type.
- When class-map type: match-all, there is just one term, that MUST be called 'all'.
- When class-map type: match-any, the terms are numbered from 1 ... number_of_conditions. In this case, the {{term_id}} marks the line, where the conditions specified in conditions is written.
Example:
class-map match-any {{class_name}}
match qos-group {{term_c_qos_grp}}
match mpls experimental topmost {{term_c_tc}}
match precedence {{term_c_common_prec}}
match precedence ipv4 {{term_c_ipv4_prec}}
match access-group ipv4|6 {{term_c_acl_ref}}
end-class-map
will create 5 terms numbered from 1 to 5, where term 1 contains condition for qos-group, term 2 contains condition for mpls, etc.
Writing will occur in ascending order. Reading is the same, first condition is put into first term, etc.
#
Huawei NE5000E (V800R009C10SPC310)
#
CLI
traffic classifier {{class_name}} operator {{matching_rule}}
if-match dscp {{term_c_dscp_enum}}
traffic behavior {{behavior_name}}
statistic {{traffic_statistics}}
queue {{traffic_action_name}} bandwidth pct {{scheduler_bw_pct}}
car cir pct {{1r2c_scheduler_bw_pct}} mode {{color_mode_name}} green pass {{1r2c_conform_transmit}} {{1r2c_conform_cos}} yellow pass {{1r2c_yellow_transmit}} {{1r2c_yellow_cos}} red pass {{1r2c_exceed_transmit}} {{1r2c_exceed_cos}}
traffic policy {{policy_name}}
classifier {{class_name}} behavior {{behavior_name} precedence {{precedence_name}}
#
Unit
Link to github : huawei-unit
#
Ciena SAOS 6.14
#
CLI
traffic-profiling enable
traffic-profiling enable port {{eth_ifc_name}}
traffic-profiling set port {{eth_ifc_name}} mode {{mode}}
traffic-profiling standard-profile create port {{eth_ifc_name}} name {{policy_name}} vs {{vsi_ni_name}} cir {{scheduler_cir}}
traffic-profiling enable is a conversion of {{qos_enabled}} set to true
traffic-profiling disable is a conversion of {{qos_enabled}} set to false
{{scheduler_type}} can be port_policy - this issues traffic-profiling commands. The {{scheduler_seq}} will be always 0, there can be just one scheduler of this type.
{{scheduler_type}} can be queue_group_policy - this issues traffic-services command. The {{scheduler_seq}} is represented by queue number.
traffic-services queuing egress-port-queue-group set queue {{scheduler_seq}} port {{eth_ifc_name}} eir {{scheduler_pir}} ebs {{scheduler_be}} scheduler-weight {{scheduler_saos_weight}} congestion-avoidance-profile {{scheduler_congestion}}
traffic-services queuing egress-port-queue-group set queue {{scheduler_seq}} port {{eth_ifc_name}} eir {{scheduler_pir}} scheduler-weight {{scheduler_saos_weight}} congestion-avoidance-profile {{scheduler_congestion}}