From 6a41f61b69ab911def1b6a8b9a68013ce62e099c Mon Sep 17 00:00:00 2001 From: Darren Loher Date: Fri, 2 Aug 2024 11:59:25 -0700 Subject: [PATCH 1/3] DP-1.16: Remove MFF as a requirement (#3349) These qos features are not inherently dependent on FFF vs. MFF devices. So the minimum platform to be used is FFF. --- .../ingress_traffic_classification_and_rewrite_test/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/feature/qos/otg_tests/ingress_traffic_classification_and_rewrite_test/README.md b/feature/qos/otg_tests/ingress_traffic_classification_and_rewrite_test/README.md index ea81528919c..93feae4293b 100644 --- a/feature/qos/otg_tests/ingress_traffic_classification_and_rewrite_test/README.md +++ b/feature/qos/otg_tests/ingress_traffic_classification_and_rewrite_test/README.md @@ -150,5 +150,4 @@ rpcs: ## Minimum DUT platform requirement -* MFF - A modular form factor device containing LINECARDs, FABRIC and redundant CONTROLLER_CARD components * FFF - fixed form factor From 55e86900e5949ea3dd90168adbba470f68b071c0 Mon Sep 17 00:00:00 2001 From: Darren Loher Date: Fri, 2 Aug 2024 12:01:13 -0700 Subject: [PATCH 2/3] Add PF-1.1, PF-1.2 to test registry (#3348) * Add PF-1.1, PF-1.2 to test registry --- testregistry.textproto | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/testregistry.textproto b/testregistry.textproto index c828b110579..ca67d751278 100644 --- a/testregistry.textproto +++ b/testregistry.textproto @@ -345,6 +345,18 @@ test: { id: "P4RT-7.2" readme: "https://github.com/openconfig/featureprofiles/blob/main/feature/experimental/p4rt/otg_tests/lldp_packetout_test/README.md" } +test: { + id: "PF-1.1" + description: "IPv4/IPv6 policy-forwarding to indirect NH matching DSCP/TC" + readme: "https://github.com/openconfig/featureprofiles/feature/policy_forwarding/otg_tests/match_dscp_indirect_next_hop/README.md" + exec: " " +} +test: { + id: "PF-1.2" + description: "Policy-based traffic GRE Encapsulation to IPv4 GRE tunnel" + readme: "https://github.com/openconfig/featureprofiles/feature/policy_forwarding/encapsulation/otg_tests/encap_gre_ipv4/README.md" + exec: " " +} test: { id: "PLT-1.1" description: "Interface breakout Test" @@ -1642,4 +1654,4 @@ test: { description: "Connect to another container on a local node" readme: "https://github.com/openconfig/featureprofiles/blob/main/feature/container/networking/tests/container_connectivity/README.md" exec: " " -} \ No newline at end of file +} From 0ee03fe11992f6bf80b7cb3644c252883dc549b0 Mon Sep 17 00:00:00 2001 From: ihebboubaker <126072465+ihebboubaker@users.noreply.github.com> Date: Sat, 3 Aug 2024 01:54:33 +0100 Subject: [PATCH 3/3] Create a Readme file for DP-1.15 Egress Strict Priority scheduler (#3043) * Create a Readme file for DP-1.15 Egress Strict Priority scheduler --- .../README.md | 224 ++++++++++++++++++ testregistry.textproto | 6 + 2 files changed, 230 insertions(+) create mode 100644 feature/qos/otg_tests/egress_strict_priority_scheduler_test/README.md diff --git a/feature/qos/otg_tests/egress_strict_priority_scheduler_test/README.md b/feature/qos/otg_tests/egress_strict_priority_scheduler_test/README.md new file mode 100644 index 00000000000..be2d7963ed2 --- /dev/null +++ b/feature/qos/otg_tests/egress_strict_priority_scheduler_test/README.md @@ -0,0 +1,224 @@ +# DP-1.15: Egress Strict Priority scheduler + +## Summary + +This test validates the proper functionality of an egress strict priority scheduler on a network device. By configuring multiple priority queues with specific traffic classes and generating traffic loads that exceed interface capacity, we will verify that the scheduler adheres to the strict priority scheme, prioritizing higher-priority traffic even under congestion. + +## Testbed type + +* [`featureprofiles/topologies/atedut_4.testbed`](https://github.com/openconfig/featureprofiles/blob/main/topologies/atedut_4.testbed) + +## Procedure + +### Test environment setup + +* DUT has 2 ingress ports and 1 egress port with the same port speed. The + interface can be a physical interface or LACP bundle interface with the + same aggregated speed. + + ``` + | | ---- | ATE Port 1 | + [ ATE Port 3 ] ---- | DUT | | | + | | ---- | ATE Port 2 | + ``` + +* Traffic classes: + + * We will use 6 traffic classes NC1, AF4, AF3, AF2, AF1 and BE1. + +* Traffic types: + + * All the traffic tests apply to both IPv4 and IPv6 and also MPLS traffic. + +* Queue types: + + * NC1/AF4/AF3/AF2/AF1/BE1 will have strict priority queues (be1 - priority 6, af1 - priority 5, ..., nc1 - priority 1) + +* Test results should be independent of the location of interfaces. For + example, 2 input interfaces and output interface could be located on + + * Same ASIC-based forwarding engine + * Different ASIC-based forwarding engine on same line card + * Different ASIC-based forwarding engine on different line cards + +* Test results should be the same for port speeds 100G and 400G. + +* Counters should be also verified for each test case: + + * /qos/interfaces/interface/output/queues/queue/state/transmit-pkts + * /qos/interfaces/interface/output/queues/queue/state/dropped-pkts + * transmit-pkts should be equal to the number of Rx pkts on Ixia port + * dropped-pkts should be equal to diff between the number of Tx and the + number Rx pkts on Ixia ports + +* Latency: + + * Should be < 100000ns + +#### Configuration + +* Forwarding Classes: Configure six forwarding classes (be1, af1, af2, af3, af4, nc1) based on the classification table provided. +* Egress Scheduler: Apply a multi-level strict-priority scheduling policy on the desired egress interface. Assign priorities to each forwarding class according to the strict priority test traffic tables (be1 - priority 6, af1 - priority 5, ..., nc1 - priority 1). + +* Classification table + + IPv4 TOS | IPv6 TC | MPLS EXP | Forwarding class + ------------- | ----------------------- | ----------------------- | --------------------- + 0 | 0-7 | 0 | be1 + 1 | 8-15 | 1 | af1 + 2 | 16-23 | 2 | af2 + 3 | 24-31 | 3 | af3 + 4,5 | 32-47 | 4,5 | af4 + 6,7 | 48-63 | 6,7 | nc1 + +### DP-1.15.1: Egress Strict Priority scheduler for IPv4 Traffic + +* Traffic Generation: + * Traffic Profiles: Define traffic profiles for each forwarding class using the ATE, adhering to the linerates (%) specified in the strict priority test traffic tables. + + * Strict Priority Test traffic table for ATE Port 1 + + Forwarding class | Priority | Traffic linerate (%) | Frame size | Expected Loss % + ----------------- |--------------------- | --------------------------- |--------------------- | ----------------------------------- + be1 | 6 | 12 | 512 | 100 + af1 | 5 | 12 | 512 | 100 + af2 | 4 | 10 | 512 | 50 + af3 | 3 | 12 | 512 | 0 + af4 | 2 | 30 | 512 | 0 + nc1 | 1 | 1 | 512 | 0 + + * Strict Priority Test traffic table for ATE Port 2 + + Forwarding class | Priority | Traffic linerate (%) | Frame size | Expected Loss % + ----------------- |--------------------- | --------------------------- |--------------------- | ----------------------------------- + be1 | 6 | 12 | 512 | 100 + af1 | 5 | 12 | 512 | 100 + af2 | 4 | 10 | 512 | 50 + af3 | 3 | 12 | 512 | 0 + af4 | 2 | 30 | 512 | 0 + nc1 | 1 | 1 | 512 | 0 + + +* Verification: + * Loss Rate: Capture packet loss for every generated flow and verify that loss for each flow does not exceed expected loss specified in the tables above. + * Telemetry: Utilize OpenConfig telemetry parameters to validate that per queue dropped packets statistics corresponds (with error margin) to the packet loss reported for every flow matching that particular queue. + +### DP-1.15.2: Egress Strict Priority scheduler for IPv6 Traffic + +* Traffic Generation: + * Traffic Profiles: Define traffic profiles for each forwarding class using the ATE, adhering to the linerates (%) specified in the strict priority test traffic tables. + + * Strict Priority Test traffic table for ATE Port 1 + + Forwarding class | Priority | Traffic linerate (%) | Frame size | Expected Loss % + ----------------- |--------------------- | --------------------------- |--------------------- | ----------------------------------- + be1 | 6 | 12 | 512 | 100 + af1 | 5 | 12 | 512 | 100 + af2 | 4 | 10 | 512 | 50 + af3 | 3 | 12 | 512 | 0 + af4 | 2 | 30 | 512 | 0 + nc1 | 1 | 1 | 512 | 0 + + * Strict Priority Test traffic table for ATE Port 2 + + Forwarding class | Priority | Traffic linerate (%) | Frame size | Expected Loss % + ----------------- |--------------------- | --------------------------- |--------------------- | ----------------------------------- + be1 | 6 | 12 | 512 | 100 + af1 | 5 | 12 | 512 | 100 + af2 | 4 | 10 | 512 | 50 + af3 | 3 | 12 | 512 | 0 + af4 | 2 | 30 | 512 | 0 + nc1 | 1 | 1 | 512 | 0 + + +* Verification: + * Loss Rate: Capture packet loss for every generated flow and verify that loss for each flow does not exceed expected loss specified in the tables above. + * Telemetry: Utilize OpenConfig telemetry parameters to validate that per queue dropped packets statistics corresponds (with error margin) to the packet loss reported for every flow matching that particular queue. + +### DP-1.15.3: Egress Strict Priority scheduler for MPLS Traffic + +* Traffic Generation: + * Traffic Profiles: Define traffic profiles for each forwarding class using the ATE, adhering to the linerates (%) specified in the strict priority test traffic tables. + + * Strict Priority Test traffic table for ATE Port 1 + + Forwarding class | Priority | Traffic linerate (%) | Frame size | Expected Loss % + ----------------- |--------------------- | --------------------------- |--------------------- | ----------------------------------- + be1 | 6 | 12 | 512 | 100 + af1 | 5 | 12 | 512 | 100 + af2 | 4 | 10 | 512 | 50 + af3 | 3 | 12 | 512 | 0 + af4 | 2 | 30 | 512 | 0 + nc1 | 1 | 1 | 512 | 0 + + * Strict Priority Test traffic table for ATE Port 2 + + Forwarding class | Priority | Traffic linerate (%) | Frame size | Expected Loss % + ----------------- |--------------------- | --------------------------- |--------------------- | ----------------------------------- + be1 | 6 | 12 | 512 | 100 + af1 | 5 | 12 | 512 | 100 + af2 | 4 | 10 | 512 | 50 + af3 | 3 | 12 | 512 | 0 + af4 | 2 | 30 | 512 | 0 + nc1 | 1 | 1 | 512 | 0 + + +* Verification: + * Loss Rate: Capture packet loss for every generated flow and verify that loss for each flow does not exceed expected loss specified in the tables above. + * Telemetry: Utilize OpenConfig telemetry parameters to validate that per queue dropped packets statistics corresponds (with error margin) to the packet loss reported for every flow matching that particular queue. + +## OpenConfig Path and RPC Coverage + +The below yaml defines the OC paths intended to be covered by this test. + +```yaml +paths: + ## Config paths + ### Classifiers + /qos/classifiers/classifier/config/name: + /qos/classifiers/classifier/config/type: + /qos/classifiers/classifier/terms/term/config/id: + /qos/classifiers/classifier/terms/term/conditions/ipv4/config/dscp-set: + /qos/classifiers/classifier/terms/term/conditions/ipv6/config/dscp-set: + /qos/classifiers/classifier/terms/term/conditions/mpls/config/traffic-class: + /qos/classifiers/classifier/terms/term/actions/config/target-group: + + ### Forwarding Groups + /qos/forwarding-groups/forwarding-group/config/name: + /qos/forwarding-groups/forwarding-group/config/output-queue: + + ### Queue + /qos/queues/queue/config/name: + + ### Interfaces + /qos/interfaces/interface/input/classifiers/classifier/config/type: + /qos/interfaces/interface/input/classifiers/classifier/config/name: + /qos/interfaces/interface/output/queues/queue/config/name: + /qos/interfaces/interface/output/scheduler-policy/config/name: + + ### Scheduler policy + /qos/scheduler-policies/scheduler-policy/config/name: + /qos/scheduler-policies/scheduler-policy/schedulers/scheduler/config/priority: + /qos/scheduler-policies/scheduler-policy/schedulers/scheduler/config/sequence: + /qos/scheduler-policies/scheduler-policy/schedulers/scheduler/config/type: + /qos/scheduler-policies/scheduler-policy/schedulers/scheduler/inputs/input/config/id: + /qos/scheduler-policies/scheduler-policy/schedulers/scheduler/inputs/input/config/input-type: + /qos/scheduler-policies/scheduler-policy/schedulers/scheduler/inputs/input/config/queue: + + ## State paths + /qos/interfaces/interface/output/queues/queue/state/name: + /qos/interfaces/interface/output/queues/queue/state/transmit-pkts: + /qos/interfaces/interface/output/queues/queue/state/transmit-octets: + /qos/interfaces/interface/output/queues/queue/state/dropped-pkts: + /qos/interfaces/interface/output/queues/queue/state/dropped-octets: + +rpcs: + gnmi: + gNMI.Set: + gNMI.Subscribe: +``` + +## Minimum DUT platform requirement + +* MFF - A modular form factor device containing LINECARDs, FABRIC and redundant CONTROLLER_CARD components +* FFF - fixed form factor diff --git a/testregistry.textproto b/testregistry.textproto index ca67d751278..f6201525b5b 100644 --- a/testregistry.textproto +++ b/testregistry.textproto @@ -202,6 +202,12 @@ test: { readme: "https://github.com/openconfig/featureprofiles/blob/main/feature/qos/ecn/otg_tests/DSCP-transparency/README.md" exec: " " } +test: { + id: "DP-1.15" + description: "Egress Strict Priority scheduler" + readme: "https://github.com/openconfig/featureprofiles/blob/main/feature/qos/otg_tests/egress_strict_priority_scheduler_test/README.md" + exec: " " +} test: { id: "DP-1.16" description: "Ingress traffic classification and rewrite"