UTI: PoC - Read data from parquets 63/35763/8
authorTibor Frank <tifrank@cisco.com>
Thu, 24 Mar 2022 07:43:32 +0000 (08:43 +0100)
committerTibor Frank <tifrank@cisco.com>
Tue, 29 Mar 2022 11:09:59 +0000 (11:09 +0000)
Change-Id: Ie53954b2b8695ed9e5415ea604a8f3b229552489
Signed-off-by: Tibor Frank <tifrank@cisco.com>
resources/tools/dash/app/app.ini
resources/tools/dash/app/pal/__init__.py
resources/tools/dash/app/pal/data/data.py [new file with mode: 0644]
resources/tools/dash/app/pal/data/data.yaml [new file with mode: 0644]
resources/tools/dash/app/pal/trending/data.py [deleted file]
resources/tools/dash/app/pal/trending/graphs.py [new file with mode: 0644]
resources/tools/dash/app/pal/trending/layout.py
resources/tools/dash/app/pal/trending/spec_test_selection.yaml
resources/tools/dash/app/pal/trending/trending.py

index bff7c12..796f332 100644 (file)
@@ -1,5 +1,6 @@
 [uwsgi]
 ini = :pal
+py-autoreload = 0
 
 [pal]
 module = wsgi:app
index 863fd08..17264c8 100644 (file)
@@ -50,8 +50,9 @@ def init_app():
         from .trending.trending import init_trending
         app = init_trending(app)
 
-        from .report.report import init_report
-        app = init_report(app)
+        # Temporarily switched off
+        # from .report.report import init_report
+        # app = init_report(app)
 
     return app
 
diff --git a/resources/tools/dash/app/pal/data/data.py b/resources/tools/dash/app/pal/data/data.py
new file mode 100644 (file)
index 0000000..9ce09e7
--- /dev/null
@@ -0,0 +1,202 @@
+# Copyright (c) 2022 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Prepare data for Plotly Dash."""
+
+import logging
+from time import time
+
+import awswrangler as wr
+
+from yaml import load, FullLoader, YAMLError
+from awswrangler.exceptions import EmptyDataFrame, NoFilesFound
+
+
+class Data:
+    """
+    """
+
+    def __init__(self, data_spec_file, debug=False):
+        """
+        """
+
+        # Inputs:
+        self._data_spec_file = data_spec_file
+        self._debug = debug
+
+        # Specification of data to be read from parquets:
+        self._data_spec = None
+
+        # Data frame to keep the data:
+        self._data = None
+
+        # Read from files:
+        try:
+            with open(self._data_spec_file, "r") as file_read:
+                self._data_spec = load(file_read, Loader=FullLoader)
+        except IOError as err:
+            raise RuntimeError(
+                f"Not possible to open the file {self._data_spec_file,}\n{err}"
+            )
+        except YAMLError as err:
+            raise RuntimeError(
+                f"An error occurred while parsing the specification file "
+                f"{self._data_spec_file,}\n"
+                f"{err}"
+            )
+
+    @property
+    def data(self):
+        return self._data
+
+    def _get_columns(self, parquet):
+        try:
+            return self._data_spec[parquet]["columns"]
+        except KeyError as err:
+            raise RuntimeError(
+                f"The parquet {parquet} is not defined in the specification "
+                f"file {self._data_spec_file} or it does not have any columns "
+                f"specified.\n{err}"
+            )
+
+    def _get_path(self, parquet):
+        try:
+            return self._data_spec[parquet]["path"]
+        except KeyError as err:
+            raise RuntimeError(
+                f"The parquet {parquet} is not defined in the specification "
+                f"file {self._data_spec_file} or it does not have the path "
+                f"specified.\n{err}"
+            )
+
+    def _create_dataframe_from_parquet(self,
+        path, partition_filter=None, columns=None,
+        validate_schema=False, last_modified_begin=None,
+        last_modified_end=None):
+        """Read parquet stored in S3 compatible storage and returns Pandas
+        Dataframe.
+
+        :param path: S3 prefix (accepts Unix shell-style wildcards)
+            (e.g. s3://bucket/prefix) or list of S3 objects paths
+            (e.g. [s3://bucket/key0, s3://bucket/key1]).
+        :param partition_filter: Callback Function filters to apply on PARTITION
+            columns (PUSH-DOWN filter). This function MUST receive a single
+            argument (Dict[str, str]) where keys are partitions names and values
+            are partitions values. Partitions values will be always strings
+            extracted from S3. This function MUST return a bool, True to read
+            the partition or False to ignore it. Ignored if dataset=False.
+        :param columns: Names of columns to read from the file(s).
+        :param validate_schema: Check that individual file schemas are all the
+            same / compatible. Schemas within a folder prefix should all be the
+            same. Disable if you have schemas that are different and want to
+            disable this check.
+        :param last_modified_begin: Filter the s3 files by the Last modified
+            date of the object. The filter is applied only after list all s3
+            files.
+        :param last_modified_end: Filter the s3 files by the Last modified date
+            of the object. The filter is applied only after list all s3 files.
+        :type path: Union[str, List[str]]
+        :type partition_filter: Callable[[Dict[str, str]], bool], optional
+        :type columns: List[str], optional
+        :type validate_schema: bool, optional
+        :type last_modified_begin: datetime, optional
+        :type last_modified_end: datetime, optional
+        :returns: Pandas DataFrame or None if DataFrame cannot be fetched.
+        :rtype: DataFrame
+        """
+        df = None
+        start = time()
+        try:
+            df = wr.s3.read_parquet(
+                path=path,
+                path_suffix="parquet",
+                ignore_empty=True,
+                validate_schema=validate_schema,
+                use_threads=True,
+                dataset=True,
+                columns=columns,
+                partition_filter=partition_filter,
+                last_modified_begin=last_modified_begin,
+                last_modified_end=last_modified_end
+            )
+            if self._debug:
+                df.info(verbose=True, memory_usage='deep')
+                logging.info(
+                    u"\n"
+                    f"Creation of dataframe {path} took: {time() - start}"
+                    u"\n"
+                    f"{df}"
+                    u"\n"
+                )
+        except NoFilesFound as err:
+            logging.error(f"No parquets found.\n{err}")
+        except EmptyDataFrame as err:
+            logging.error(f"No data.\n{err}")
+
+        self._data = df
+        return df
+
+    def read_stats(self):
+        """Read Suite Result Analysis data partition from parquet.
+        """
+        lambda_f = lambda part: True if part["stats_type"] == "sra" else False
+
+        return self._create_dataframe_from_parquet(
+            path=self._get_path("statistics"),
+            partition_filter=lambda_f,
+            columns=None  # Get all columns.
+        )
+
+    def read_trending_mrr(self):
+        """Read MRR data partition from parquet.
+        """
+        lambda_f = lambda part: True if part["test_type"] == "mrr" else False
+
+        return self._create_dataframe_from_parquet(
+            path=self._get_path("trending-mrr"),
+            partition_filter=lambda_f,
+            columns=self._get_columns("trending-mrr")
+        )
+
+    def read_trending_ndrpdr(self):
+        """Read NDRPDR data partition from iterative parquet.
+        """
+        lambda_f = lambda part: True if part["test_type"] == "ndrpdr" else False
+
+        return self._create_dataframe_from_parquet(
+            path=self._get_path("trending-ndrpdr"),
+            partition_filter=lambda_f,
+            columns=self._get_columns("trending-ndrpdr")
+        )
+
+    def read_iterative_mrr(self):
+        """Read MRR data partition from iterative parquet.
+        """
+        lambda_f = lambda part: True if part["test_type"] == "mrr" else False
+
+        return self._create_dataframe_from_parquet(
+            path=self._get_path("iterative-mrr"),
+            partition_filter=lambda_f,
+            columns=self._get_columns("iterative-mrr")
+        )
+
+    def read_iterative_ndrpdr(self):
+        """Read NDRPDR data partition from parquet.
+        """
+        lambda_f = lambda part: True if part["test_type"] == "ndrpdr" else False
+
+        return self._create_dataframe_from_parquet(
+            path=self._get_path("iterative-ndrpdr"),
+            partition_filter=lambda_f,
+            columns=self._get_columns("iterative-ndrpdr")
+        )
diff --git a/resources/tools/dash/app/pal/data/data.yaml b/resources/tools/dash/app/pal/data/data.yaml
new file mode 100644 (file)
index 0000000..45e7f6b
--- /dev/null
@@ -0,0 +1,182 @@
+statistics:
+  path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/stats
+trending-mrr:
+  path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/trending
+  columns:
+    - job
+    - build
+    - dut_type
+    - dut_version
+    - hosts
+    - start_time
+    - passed
+    - test_id
+    - test_name_long
+    - test_name_short
+    - version
+    - result_receive_rate_rate_avg
+    - result_receive_rate_rate_stdev
+    - result_receive_rate_rate_unit
+    - result_receive_rate_rate_values
+trending-ndrpdr:
+  path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/trending
+  columns:
+    - job
+    - build
+    - dut_type
+    - dut_version
+    - hosts
+    - start_time
+    - passed
+    - test_id
+    - test_name_long
+    - test_name_short
+    - version
+    - result_pdr_upper_rate_unit
+    - result_pdr_upper_rate_value
+    - result_pdr_upper_bandwidth_unit
+    - result_pdr_upper_bandwidth_value
+    - result_pdr_lower_rate_unit
+    - result_pdr_lower_rate_value
+    - result_pdr_lower_bandwidth_unit
+    - result_pdr_lower_bandwidth_value
+    - result_ndr_upper_rate_unit
+    - result_ndr_upper_rate_value
+    - result_ndr_upper_bandwidth_unit
+    - result_ndr_upper_bandwidth_value
+    - result_ndr_lower_rate_unit
+    - result_ndr_lower_rate_value
+    - result_ndr_lower_bandwidth_unit
+    - result_ndr_lower_bandwidth_value
+    - result_latency_reverse_pdr_90_avg
+    - result_latency_reverse_pdr_90_hdrh
+    - result_latency_reverse_pdr_90_max
+    - result_latency_reverse_pdr_90_min
+    - result_latency_reverse_pdr_90_unit
+    - result_latency_reverse_pdr_50_avg
+    - result_latency_reverse_pdr_50_hdrh
+    - result_latency_reverse_pdr_50_max
+    - result_latency_reverse_pdr_50_min
+    - result_latency_reverse_pdr_50_unit
+    - result_latency_reverse_pdr_10_avg
+    - result_latency_reverse_pdr_10_hdrh
+    - result_latency_reverse_pdr_10_max
+    - result_latency_reverse_pdr_10_min
+    - result_latency_reverse_pdr_10_unit
+    - result_latency_reverse_pdr_0_avg
+    - result_latency_reverse_pdr_0_hdrh
+    - result_latency_reverse_pdr_0_max
+    - result_latency_reverse_pdr_0_min
+    - result_latency_reverse_pdr_0_unit
+    - result_latency_forward_pdr_90_avg
+    - result_latency_forward_pdr_90_hdrh
+    - result_latency_forward_pdr_90_max
+    - result_latency_forward_pdr_90_min
+    - result_latency_forward_pdr_90_unit
+    - result_latency_forward_pdr_50_avg
+    - result_latency_forward_pdr_50_hdrh
+    - result_latency_forward_pdr_50_max
+    - result_latency_forward_pdr_50_min
+    - result_latency_forward_pdr_50_unit
+    - result_latency_forward_pdr_10_avg
+    - result_latency_forward_pdr_10_hdrh
+    - result_latency_forward_pdr_10_max
+    - result_latency_forward_pdr_10_min
+    - result_latency_forward_pdr_10_unit
+    - result_latency_forward_pdr_0_avg
+    - result_latency_forward_pdr_0_hdrh
+    - result_latency_forward_pdr_0_max
+    - result_latency_forward_pdr_0_min
+    - result_latency_forward_pdr_0_unit
+iterative-mrr:
+  path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/iterative_rls2202
+  columns:
+    - job
+    - build
+    - dut_type
+    - dut_version
+    - hosts
+    - start_time
+    - passed
+    - test_id
+    - test_name_long
+    - test_name_short
+    - version
+    - result_receive_rate_rate_avg
+    - result_receive_rate_rate_stdev
+    - result_receive_rate_rate_unit
+    - result_receive_rate_rate_values
+iterative-ndrpdr:
+  path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/iterative_rls2202
+  columns:
+    - job
+    - build
+    - dut_type
+    - dut_version
+    - hosts
+    - start_time
+    - passed
+    - test_id
+    - test_name_long
+    - test_name_short
+    - version
+    - result_pdr_upper_rate_unit
+    - result_pdr_upper_rate_value
+    - result_pdr_upper_bandwidth_unit
+    - result_pdr_upper_bandwidth_value
+    - result_pdr_lower_rate_unit
+    - result_pdr_lower_rate_value
+    - result_pdr_lower_bandwidth_unit
+    - result_pdr_lower_bandwidth_value
+    - result_ndr_upper_rate_unit
+    - result_ndr_upper_rate_value
+    - result_ndr_upper_bandwidth_unit
+    - result_ndr_upper_bandwidth_value
+    - result_ndr_lower_rate_unit
+    - result_ndr_lower_rate_value
+    - result_ndr_lower_bandwidth_unit
+    - result_ndr_lower_bandwidth_value
+    - result_latency_reverse_pdr_90_avg
+    - result_latency_reverse_pdr_90_hdrh
+    - result_latency_reverse_pdr_90_max
+    - result_latency_reverse_pdr_90_min
+    - result_latency_reverse_pdr_90_unit
+    - result_latency_reverse_pdr_50_avg
+    - result_latency_reverse_pdr_50_hdrh
+    - result_latency_reverse_pdr_50_max
+    - result_latency_reverse_pdr_50_min
+    - result_latency_reverse_pdr_50_unit
+    - result_latency_reverse_pdr_10_avg
+    - result_latency_reverse_pdr_10_hdrh
+    - result_latency_reverse_pdr_10_max
+    - result_latency_reverse_pdr_10_min
+    - result_latency_reverse_pdr_10_unit
+    - result_latency_reverse_pdr_0_avg
+    - result_latency_reverse_pdr_0_hdrh
+    - result_latency_reverse_pdr_0_max
+    - result_latency_reverse_pdr_0_min
+    - result_latency_reverse_pdr_0_unit
+    - result_latency_forward_pdr_90_avg
+    - result_latency_forward_pdr_90_hdrh
+    - result_latency_forward_pdr_90_max
+    - result_latency_forward_pdr_90_min
+    - result_latency_forward_pdr_90_unit
+    - result_latency_forward_pdr_50_avg
+    - result_latency_forward_pdr_50_hdrh
+    - result_latency_forward_pdr_50_max
+    - result_latency_forward_pdr_50_min
+    - result_latency_forward_pdr_50_unit
+    - result_latency_forward_pdr_10_avg
+    - result_latency_forward_pdr_10_hdrh
+    - result_latency_forward_pdr_10_max
+    - result_latency_forward_pdr_10_min
+    - result_latency_forward_pdr_10_unit
+    - result_latency_forward_pdr_0_avg
+    - result_latency_forward_pdr_0_hdrh
+    - result_latency_forward_pdr_0_max
+    - result_latency_forward_pdr_0_min
+    - result_latency_forward_pdr_0_unit
+# coverage-ndrpdr:
+#   path: str
+#   columns:
+#     - list
\ No newline at end of file
diff --git a/resources/tools/dash/app/pal/trending/data.py b/resources/tools/dash/app/pal/trending/data.py
deleted file mode 100644 (file)
index a4f183b..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2022 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Prepare data for Plotly Dash.
-"""
-
-import pandas as pd
-
-
-def read_data():
-    """Create Pandas DataFrame from local CSV.
-
-    Only for DEMO
-    """
-
-    return pd.read_csv(
-        u"https://s3-docs.fd.io/csit/master/trending/_static/vpp/"
-        u"csit-vpp-perf-mrr-weekly-master-2n-aws-trending.csv"
-    )
diff --git a/resources/tools/dash/app/pal/trending/graphs.py b/resources/tools/dash/app/pal/trending/graphs.py
new file mode 100644 (file)
index 0000000..a20ce8e
--- /dev/null
@@ -0,0 +1,126 @@
+# Copyright (c) 2022 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+"""
+
+
+import plotly.graph_objects as go
+import pandas as pd
+import re
+
+from datetime import datetime
+
+from dash import no_update
+
+
+def trending_tput(data: pd.DataFrame, sel:dict, layout: dict, start: datetime,
+    end: datetime):
+    """
+    """
+
+    if not sel:
+        return no_update, no_update
+
+    def _generate_trace(ttype: str, name: str, df: pd.DataFrame,
+        start: datetime, end: datetime):
+
+        value = {
+            "mrr": "result_receive_rate_rate_avg",
+            "ndr": "result_ndr_lower_rate_value",
+            "pdr": "result_pdr_lower_rate_value"
+        }
+        unit = {
+            "mrr": "result_receive_rate_rate_unit",
+            "ndr": "result_ndr_lower_rate_unit",
+            "pdr": "result_pdr_lower_rate_unit"
+        }
+
+        x_axis = [
+            d for d in df["start_time"] if d >= start and d <= end
+        ]
+        hover_txt = list()
+        for _, row in df.iterrows():
+            hover_itm = (
+                f"date: "
+                f"{row['start_time'].strftime('%d-%m-%Y %H:%M:%S')}<br>"
+                f"average [{row[unit[ttype]]}]: "
+                f"{row[value[ttype]]}<br>"
+                f"{row['dut_type']}-ref: {row['dut_version']}<br>"
+                f"csit-ref: {row['job']}/{row['build']}"
+            )
+            if ttype == "mrr":
+                stdev = (
+                    f"stdev [{row['result_receive_rate_rate_unit']}]: "
+                    f"{row['result_receive_rate_rate_stdev']}<br>"
+                )
+            else:
+                stdev = ""
+            hover_itm = hover_itm.replace("<stdev>", stdev)
+            hover_txt.append(hover_itm)
+
+        return go.Scatter(
+            x=x_axis,
+            y=df[value[ttype]],
+            name=name,
+            mode="markers+lines",
+            text=hover_txt,
+            hoverinfo=u"text+name"
+        )
+
+    # Generate graph:
+    fig = go.Figure()
+    for itm in sel:
+        phy = itm["phy"].split("-")
+        if len(phy) == 4:
+            topo, arch, nic, drv = phy
+            if drv in ("dpdk", "ixgbe"):
+                drv = ""
+            else:
+                drv += "-"
+        else:
+            continue
+        cadence = \
+            "weekly" if (arch == "aws" or itm["testtype"] != "mrr") else "daily"
+        sel_topo_arch = (
+            f"csit-vpp-perf-"
+            f"{itm['testtype'] if itm['testtype'] == 'mrr' else 'ndrpdr'}-"
+            f"{cadence}-master-{topo}-{arch}"
+        )
+        df_sel = data.loc[(data["job"] == sel_topo_arch)]
+        regex = (
+            f"^.*{nic}.*\.{itm['framesize']}-{itm['core']}-{drv}{itm['test']}-"
+            f"{'mrr' if itm['testtype'] == 'mrr' else 'ndrpdr'}$"
+        )
+        df = df_sel.loc[
+            df_sel["test_id"].apply(
+                lambda x: True if re.search(regex, x) else False
+            )
+        ].sort_values(by="start_time", ignore_index=True)
+        name = (
+            f"{itm['phy']}-{itm['framesize']}-{itm['core']}-"
+            f"{itm['test']}-{itm['testtype']}"
+        )
+        fig.add_trace(_generate_trace(itm['testtype'], name, df, start, end))
+
+    style={
+        "vertical-align": "top",
+        "display": "inline-block",
+        "width": "80%",
+        "padding": "5px"
+    }
+
+    layout = layout.get("plot-trending", dict())
+    fig.update_layout(layout)
+
+    return fig, style
index 9153081..081f977 100644 (file)
@@ -15,7 +15,7 @@
 """
 
 
-import plotly.graph_objects as go
+import pandas as pd
 
 from dash import dcc
 from dash import html
@@ -25,16 +25,16 @@ from dash.exceptions import PreventUpdate
 from yaml import load, FullLoader, YAMLError
 from datetime import datetime, timedelta
 
-from pprint import pformat
-
-from .data import read_data
+from ..data.data import Data
+from .graphs import trending_tput
 
 
 class Layout:
     """
     """
 
-    def __init__(self, app, html_layout_file, spec_file, graph_layout_file):
+    def __init__(self, app, html_layout_file, spec_file, graph_layout_file,
+        data_spec_file):
         """
         """
 
@@ -43,9 +43,20 @@ class Layout:
         self._html_layout_file = html_layout_file
         self._spec_file = spec_file
         self._graph_layout_file = graph_layout_file
+        self._data_spec_file = data_spec_file
 
         # Read the data:
-        self._data = read_data()
+        data_mrr = Data(
+            data_spec_file=self._data_spec_file,
+            debug=True
+        ).read_trending_mrr()
+
+        data_ndrpdr = Data(
+            data_spec_file=self._data_spec_file,
+            debug=True
+        ).read_trending_ndrpdr()
+
+        self._data = pd.concat([data_mrr, data_ndrpdr], ignore_index=True)
 
         # Read from files:
         self._html_layout = ""
@@ -105,6 +116,10 @@ class Layout:
     def data(self):
         return self._data
 
+    @property
+    def layout(self):
+        return self._graph_layout
+
     def add_content(self):
         """
         """
@@ -195,9 +210,6 @@ class Layout:
                         )
                     ]
                 ),
-                # Debug output, TODO: Remove
-                html.H5("Debug output"),
-                html.Pre(id="div-ctrl-info")
             ]
         )
 
@@ -289,11 +301,12 @@ class Layout:
                 html.Br(),
                 dcc.DatePickerRange(
                     id="dpr-period",
-                    min_date_allowed=datetime(2021, 1, 1),
+                    min_date_allowed=datetime.utcnow() - timedelta(days=180),
                     max_date_allowed=datetime.utcnow(),
                     initial_visible_month=datetime.utcnow(),
                     start_date=datetime.utcnow() - timedelta(days=180),
-                    end_date=datetime.utcnow()
+                    end_date=datetime.utcnow(),
+                    display_format="D MMMM YY"
                 )
             ]
         )
@@ -446,7 +459,6 @@ class Layout:
 
         @app.callback(
             Output("graph", "figure"),
-            Output("div-ctrl-info", "children"),  # Debug output TODO: Remove
             Output("selected-tests", "data"),  # Store
             Output("cl-selected", "options"),  # User selection
             Output("dd-ctrl-phy", "value"),
@@ -525,12 +537,14 @@ class Layout:
                                         "core": core.lower(),
                                         "testtype": ttype.lower()
                                     })
-                return (no_update, no_update, store_sel, _list_tests(), None,
+                return (no_update, store_sel, _list_tests(), None,
                     None, None, no_update)
 
             elif trigger_id in ("btn-sel-display", "dpr-period"):
-                fig, style = _update_graph(store_sel, d_start, d_end)
-                return (fig, pformat(store_sel), no_update, no_update,
+                fig, style = trending_tput(
+                    self.data, store_sel, self.layout, d_start, d_end
+                )
+                return (fig, no_update, no_update,
                     no_update, no_update, no_update, style)
 
             elif trigger_id == "btn-sel-remove":
@@ -540,91 +554,18 @@ class Layout:
                         if item["id"] not in list_sel:
                             new_store_sel.append(item)
                     store_sel = new_store_sel
-                    fig, style = _update_graph(store_sel, d_start, d_end)
-                return (fig, pformat(store_sel), store_sel, _list_tests(),
-                    no_update, no_update, no_update, style)
-
-        def _update_graph(sel, start, end):
-            """
-            """
-
-            if not sel:
-                return no_update, no_update
-
-            def _is_selected(label, sel):
-                for itm in sel:
-                    phy = itm["phy"].split("-")
-                    if len(phy) == 4:
-                        topo, arch, nic, drv = phy
-                    else:
-                        continue
-                    if nic not in label:
-                        continue
-                    if drv != "dpdk" and drv not in label:
-                        continue
-                    if itm["test"] not in label:
-                        continue
-                    if itm["framesize"] not in label:
-                        continue
-                    if itm["core"] not in label:
-                        continue
-                    if itm["testtype"] not in label:
-                        continue
-                    return (
-                        f"{itm['phy']}-{itm['framesize']}-{itm['core']}-"
-                        f"{itm['test']}-{itm['testtype']}"
+                if store_sel:
+                    fig, style = trending_tput(
+                        self.data, store_sel, self.layout, d_start, d_end
                     )
+                    return (fig, store_sel, _list_tests(),
+                    no_update, no_update, no_update, style)
                 else:
-                    return None
-
-            style={
-                "vertical-align": "top",
-                "display": "inline-block",
-                "width": "80%",
-                "padding": "5px"
-            }
-
-            fig = go.Figure()
-            dates = self.data.iloc[[0], 1:].values.flatten().tolist()[::-1]
-            x_data = [
-                datetime(
-                    int(date[0:4]), int(date[4:6]), int(date[6:8]),
-                    int(date[9:11]), int(date[12:])
-                ) for date in dates
-            ]
-            x_data_range = [
-                date for date in x_data if date >= start and date <= end
-            ]
-            vpp = self.data.iloc[[1], 1:].values.flatten().tolist()[::-1]
-            csit = list(self.data.columns[1:])[::-1]
-            labels = list(self.data["Build Number:"][3:])
-            for i in range(3, len(self.data)):
-                name = _is_selected(labels[i-3], sel)
-                if not name:
-                    continue
-                y_data = [
-                    float(v) / 1e6 for v in \
-                        self.data.iloc[[i], 1:].values.flatten().tolist()[::-1]
-                ]
-                hover_txt = list()
-                for x_idx, x_itm in enumerate(x_data):
-                    hover_txt.append(
-                        f"date: {x_itm}<br>"
-                        f"average [Mpps]: {y_data[x_idx]}<br>"
-                        f"vpp-ref: {vpp[x_idx]}<br>"
-                        f"csit-ref: {csit[x_idx]}"
-                    )
-                fig.add_trace(
-                    go.Scatter(
-                        x=x_data_range,
-                        y= y_data,
-                        name=name,
-                        mode="markers+lines",
-                        text=hover_txt,
-                        hoverinfo=u"text+name"
-                    )
-                )
-            layout = self._graph_layout.get("plot-trending", dict())
-            fig.update_layout(layout)
-
-            return fig, style
+                    style={
+                        "vertical-align": "top",
+                        "display": "none",
+                        "width": "80%",
+                        "padding": "5px"
+                    }
+                    return (no_update, store_sel, _list_tests(),
+                        no_update, no_update, no_update, style)
index fe99801..4d177c0 100644 (file)
       - ethip4-ip4base
     core: [1C, 2C]
     frame-size: [64B, 1518B]
+    test-type: [MRR, ]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C]
+    frame-size: [64B, 1518B]
+    test-type: [MRR, ]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip4base
+    core: [1C, 2C]
+    frame-size: [78B, 1518B]
+    test-type: [MRR, ]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip4scale20k
+      - ethip6-ip4scale20k-rnd
+    core: [1C, 2C]
+    frame-size: [78B, 1518B]
+    test-type: [MRR, ]
+2n-clx-100ge2p1cx556a-rdma:
+  memif-base:
+    label: LXC/DRC Container Memif
+    test:
+      - eth-l2bdbasemaclrn-eth-2memif-1dcr
+      - eth-l2xcbase-eth-2memif-1dcr
+      - ethip4-ip4base-eth-2memif-1dcr
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-features:
+    label: IPv4 Routing Features
+    test:
+      - ethip4udp-ip4base-iacl50sf-10kflows
+      - ethip4udp-ip4base-iacl50sl-10kflows
+      - ethip4udp-ip4base-oacl50sf-10kflows
+      - ethip4udp-ip4base-oacl50sl-10kflows
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  vhost-base:
+    label: VMs vhost-user
+    test:
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+2n-clx-10ge2p1x710-avf:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale1mmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+2n-clx-10ge2p1x710-dpdk:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+2n-clx-25ge2p1xxv710-af_xdp:
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+2n-clx-25ge2p1xxv710-avf:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - dot1q-l2bdbasemaclrn
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+      - eth-l2bdscale100kmaclrn
+      - eth-l2bdscale1mmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale200k
+      - ethip4-ip4scale2m
+      - ethip4-ip4scale20k-rnd
+      - ethip4-ip4scale200k-rnd
+      - ethip4-ip4scale2m-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-features:
+    label: IPv4 Routing Features
+    test:
+      - ethip4udp-ip4base-iacl50sf-10kflows
+      - ethip4udp-ip4base-iacl50sl-10kflows
+      - ethip4udp-ip4base-oacl50sf-10kflows
+      - ethip4udp-ip4base-oacl50sl-10kflows
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+      - ethip6-ip6scale200k
+      - ethip6-ip6scale200k-rnd
+      - ethip6-ip6scale2m
+      - ethip6-ip6scale2m-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ethip4-ethip4udpgeneve:
+    label: IPv4 Tunnels
+    test:
+      - ethip4--ethip4udpgeneve-1tun-ip4base
+      - ethip4--ethip4udpgeneve-4tun-ip4base
+      - ethip4--ethip4udpgeneve-16tun-ip4base
+      - ethip4--ethip4udpgeneve-64tun-ip4base
+      - ethip4--ethip4udpgeneve-256tun-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  memif-base:
+    label: LXC/DRC Container Memif
+    test:
+      - eth-l2bdbasemaclrn-eth-2memif-1dcr
+      - eth-l2xcbase-eth-2memif-1dcr
+      - ethip4-ip4base-eth-2memif-1dcr
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44det-ip4-stl-bidir:
+    label: NAT44 Deterministic BiDir
+    test:
+      - ethip4udp-nat44det-h1024-p63-s64512
+      - ethip4udp-nat44det-h16384-p63-s1032192
+      - ethip4udp-nat44det-h65536-p63-s4128758
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-stl-unidir:
+    label: NAT44 ED UniDir
+    test:
+      - ethip4udp-nat44ed-h1024-p63-s64512-udir
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-udp-stf-cps:
+    label: NAT44 ED UDP CPS
+    test:
+      - ethip4udp-ip4base-h1024-p63-s64512-cps
+      - ethip4udp-ip4base-h16384-p63-s1032192-cps
+      - ethip4udp-ip4base-h65536-p63-s4128768-cps
+      - ethip4udp-nat44ed-h1024-p63-s64512-cps
+      - ethip4udp-nat44ed-h16384-p63-s1032192-cps
+      - ethip4udp-nat44ed-h65536-p63-s4128768-cps
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-tcp-stf-cps:
+    label: NAT44 ED TCP CPS
+    test:
+      - ethip4tcp-ip4base-h1024-p63-s64512-cps
+      - ethip4tcp-ip4base-h16384-p63-s1032192-cps
+      - ethip4tcp-ip4base-h65536-p63-s4128768-cps
+      - ethip4tcp-nat44ed-h1024-p63-s64512-cps
+      - ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+      - ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-udp-tput:
+    label: NAT44 ED UDP TPUT
+    test:
+      - ethip4udp-nat44ed-h1024-p63-s64512-tput
+      - ethip4udp-nat44ed-h16384-p63-s1032192-tput
+      - ethip4udp-nat44ed-h65536-p63-s4128768-tput
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-tcp-tput:
+    label: NAT44 ED TCP TPUT
+    test:
+      - ethip4tcp-nat44ed-h1024-p63-s64512-tput
+      - ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+      - ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  vhost-base:
+    label: VMs vhost-user
+    test:
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+      - eth-l2xcbase-eth-2vhostvr1024-1vm
+      - eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  # vnf-service-chains-routing:
+  # cnf-service-chains-routing:
+  # cnf-service-pipelines-routing:
+  # vnf-service-chains-tunnels:
+2n-clx-25ge2p1xxv710-dpdk:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+      - eth-l2bdscale100kmaclrn
+      - eth-l2bdscale1mmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  memif-base:
+    label: LXC/DRC Container Memif
+    test:
+      - eth-l2bdbasemaclrn-eth-2memif-1dcr
+      - eth-l2xcbase-eth-2memif-1dcr
+      - ethip4-ip4base-eth-2memif-1dcr
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  vhost-base:
+    label: VMs vhost-user
+    test:
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+2n-dnv-10ge2p1x553-ixgbe:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+2n-icx-25ge2p1xxv710-af_xdp:
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+2n-icx-25ge2p1xxv710-avf:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - dot1q-l2bdbasemaclrn
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+      - eth-l2bdscale100kmaclrn
+      - eth-l2bdscale1mmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale200k
+      - ethip4-ip4scale2m
+      - ethip4-ip4scale20k-rnd
+      - ethip4-ip4scale200k-rnd
+      - ethip4-ip4scale2m-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-features:
+    label: IPv4 Routing Features
+    test:
+      - ethip4udp-ip4base-iacl50sf-10kflows
+      - ethip4udp-ip4base-iacl50sl-10kflows
+      - ethip4udp-ip4base-oacl50sf-10kflows
+      - ethip4udp-ip4base-oacl50sl-10kflows
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+      - ethip6-ip6scale200k
+      - ethip6-ip6scale200k-rnd
+      - ethip6-ip6scale2m
+      - ethip6-ip6scale2m-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ethip4-ethip4udpgeneve:
+    label: IPv4 Tunnels
+    test:
+      - ethip4--ethip4udpgeneve-1tun-ip4base
+      - ethip4--ethip4udpgeneve-4tun-ip4base
+      - ethip4--ethip4udpgeneve-16tun-ip4base
+      - ethip4--ethip4udpgeneve-64tun-ip4base
+      - ethip4--ethip4udpgeneve-256tun-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44det-ip4-stl-bidir:
+    label: NAT44 Deterministic BiDir
+    test:
+      - ethip4udp-nat44det-h1024-p63-s64512
+      - ethip4udp-nat44det-h16384-p63-s1032192
+      - ethip4udp-nat44det-h65536-p63-s4128758
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-stl-unidir:
+    label: NAT44 ED UniDir
+    test:
+      - ethip4udp-nat44ed-h1024-p63-s64512-udir
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-udp-stf-cps:
+    label: NAT44 ED UDP CPS
+    test:
+      - ethip4udp-ip4base-h1024-p63-s64512-cps
+      - ethip4udp-ip4base-h16384-p63-s1032192-cps
+      - ethip4udp-ip4base-h65536-p63-s4128768-cps
+      - ethip4udp-nat44ed-h1024-p63-s64512-cps
+      - ethip4udp-nat44ed-h16384-p63-s1032192-cps
+      - ethip4udp-nat44ed-h65536-p63-s4128768-cps
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-tcp-stf-cps:
+    label: NAT44 ED TCP CPS
+    test:
+      - ethip4tcp-ip4base-h1024-p63-s64512-cps
+      - ethip4tcp-ip4base-h16384-p63-s1032192-cps
+      - ethip4tcp-ip4base-h65536-p63-s4128768-cps
+      - ethip4tcp-nat44ed-h1024-p63-s64512-cps
+      - ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+      - ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-udp-tput:
+    label: NAT44 ED UDP TPUT
+    test:
+      - ethip4udp-nat44ed-h1024-p63-s64512-tput
+      - ethip4udp-nat44ed-h16384-p63-s1032192-tput
+      - ethip4udp-nat44ed-h65536-p63-s4128768-tput
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-tcp-tput:
+    label: NAT44 ED TCP TPUT
+    test:
+      - ethip4tcp-nat44ed-h1024-p63-s64512-tput
+      - ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+      - ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  vhost-base:
+    label: VMs vhost-user
+    test:
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+      - eth-l2xcbase-eth-2vhostvr1024-1vm
+      - eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  memif-base:
+    label: LXC/DRC Container Memif
+    test:
+      - eth-l2bdbasemaclrn-eth-2memif-1dcr
+      - eth-l2xcbase-eth-2memif-1dcr
+      - ethip4-ip4base-eth-2memif-1dcr
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+2n-icx-25ge2p1xxv710-dpdk:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+      - eth-l2bdscale100kmaclrn
+      - eth-l2bdscale1mmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  memif-base:
+    label: LXC/DRC Container Memif
+    test:
+      - eth-l2bdbasemaclrn-eth-2memif-1dcr
+      - eth-l2xcbase-eth-2memif-1dcr
+      - ethip4-ip4base-eth-2memif-1dcr
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  vhost-base:
+    label: VMs vhost-user
+    test:
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+2n-skx-10ge2p1x710-avf:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale1mmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+2n-skx-10ge2p1x710-dpdk:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale1mmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+2n-skx-25ge2p1xxv710-af_xdp:
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+2n-skx-25ge2p1xxv710-avf:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - dot1q-l2bdbasemaclrn
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+      - eth-l2bdscale100kmaclrn
+      - eth-l2bdscale1mmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale200k
+      - ethip4-ip4scale2m
+      - ethip4-ip4scale20k-rnd
+      - ethip4-ip4scale200k-rnd
+      - ethip4-ip4scale2m-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-features:
+    label: IPv4 Routing Features
+    test:
+      - ethip4udp-ip4base-iacl50sf-10kflows
+      - ethip4udp-ip4base-iacl50sl-10kflows
+      - ethip4udp-ip4base-oacl50sf-10kflows
+      - ethip4udp-ip4base-oacl50sl-10kflows
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+      - ethip6-ip6scale200k
+      - ethip6-ip6scale200k-rnd
+      - ethip6-ip6scale2m
+      - ethip6-ip6scale2m-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ethip4-ethip4udpgeneve:
+    label: IPv4 Tunnels
+    test:
+      - ethip4--ethip4udpgeneve-1tun-ip4base
+      - ethip4--ethip4udpgeneve-4tun-ip4base
+      - ethip4--ethip4udpgeneve-16tun-ip4base
+      - ethip4--ethip4udpgeneve-64tun-ip4base
+      - ethip4--ethip4udpgeneve-256tun-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  memif-base:
+    label: LXC/DRC Container Memif
+    test:
+      - eth-l2bdbasemaclrn-eth-2memif-1dcr
+      - eth-l2xcbase-eth-2memif-1dcr
+      - ethip4-ip4base-eth-2memif-1dcr
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44det-ip4-stl-bidir:
+    label: NAT44 Deterministic BiDir
+    test:
+      - ethip4udp-nat44det-h1024-p63-s64512
+      - ethip4udp-nat44det-h16384-p63-s1032192
+      - ethip4udp-nat44det-h65536-p63-s4128758
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-stl-unidir:
+    label: NAT44 ED UniDir
+    test:
+      - ethip4udp-nat44ed-h1024-p63-s64512-udir
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-udp-stf-cps:
+    label: NAT44 ED UDP CPS
+    test:
+      - ethip4udp-ip4base-h1024-p63-s64512-cps
+      - ethip4udp-ip4base-h16384-p63-s1032192-cps
+      - ethip4udp-ip4base-h65536-p63-s4128768-cps
+      - ethip4udp-nat44ed-h1024-p63-s64512-cps
+      - ethip4udp-nat44ed-h16384-p63-s1032192-cps
+      - ethip4udp-nat44ed-h65536-p63-s4128768-cps
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-tcp-stf-cps:
+    label: NAT44 ED TCP CPS
+    test:
+      - ethip4tcp-ip4base-h1024-p63-s64512-cps
+      - ethip4tcp-ip4base-h16384-p63-s1032192-cps
+      - ethip4tcp-ip4base-h65536-p63-s4128768-cps
+      - ethip4tcp-nat44ed-h1024-p63-s64512-cps
+      - ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+      - ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-udp-tput:
+    label: NAT44 ED UDP TPUT
+    test:
+      - ethip4udp-nat44ed-h1024-p63-s64512-tput
+      - ethip4udp-nat44ed-h16384-p63-s1032192-tput
+      - ethip4udp-nat44ed-h65536-p63-s4128768-tput
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  nat44ed-ip4-tcp-tput:
+    label: NAT44 ED TCP TPUT
+    test:
+      - ethip4tcp-nat44ed-h1024-p63-s64512-tput
+      - ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+      - ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  vhost-base:
+    label: VMs vhost-user
+    test:
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+      - eth-l2xcbase-eth-2vhostvr1024-1vm
+      - eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+2n-skx-25ge2p1xxv710-dpdk:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+      - eth-l2bdscale100kmaclrn
+      - eth-l2bdscale1mmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
     test-type: [MRR, NDR, PDR]
   ip4-scale:
     label: IPv4 Routing Scale
     test:
       - ethip4-ip4scale20k
       - ethip4-ip4scale20k-rnd
-    core: [1C, 2C]
-    frame-size: [64B, 1518B]
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
     test-type: [MRR, NDR, PDR]
   ip6-base:
     label: IPv6 Routing Base
     test:
-      - ethip6-ip4base
-    core: [1C, 2C]
-    frame-size: [78B, 1518B]
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
     test-type: [MRR, NDR, PDR]
   ip6-scale:
     label: IPv6 Routing Scale
     test:
-      - ethip6-ip4scale20k
-      - ethip6-ip4scale20k-rnd
-    core: [1C, 2C]
-    frame-size: [78B, 1518B]
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  memif-base:
+    label: LXC/DRC Container Memif
+    test:
+      - eth-l2bdbasemaclrn-eth-2memif-1dcr
+      - eth-l2xcbase-eth-2memif-1dcr
+      - ethip4-ip4base-eth-2memif-1dcr
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  vhost-base:
+    label: VMs vhost-user
+    test:
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+      - eth-l2xcbase-eth-2vhostvr1024-1vm
+      - eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
     test-type: [MRR, NDR, PDR]
-# 2n-clx-cx556a-rdma:
-# 2n-clx-x710-avf:
-# 2n-clx-x710-dpdk:
-# 2n-clx-xxv710-af_xdp:
-# 2n-clx-xxv710-avf:
-#     l2-base:
-#     l2-scale:
-#     ip4-base:
-#     ip4-scale:
-#     ip4-features:
-#     ip6-base:
-#     ip6-scale:
-#     ethip4-ethip4udpgeneve:
-#     nat44det-ip4-stl-bidir:
-#     nat44ed-ip4-stl-unidir:
-#     nat44ed-ip4-udp-stf-cps:
-#     nat44ed-ip4-tcp-stf-cps:
-#     nat44ed-ip4-udp-stf-pps:
-#     nat44ed-ip4-tcp-stf-pps:
-#     nat44ed-ip4-udp-tput:
-#     nat44ed-ip4-tcp-tput:
-#     vhost-base:
-#     memif-base:
-#     vnf-service-chains-routing:
-#     cnf-service-chains-routing:
-#     cnf-service-pipelines-routing:
-#     vnf-service-chains-tunnels:
-# 2n-clx-xxv710-dpdk:
-# 2n-dnv-x553-ixgbe:
-# 2n-icx-xxv710-avf:
-# 2n-icx-xxv710-dpdk:
-# 2n-skx-x710-avf:
-# 2n-skx-x710-dpdk:
-# 2n-skx-xxv710-avf:
-# 2n-skx-xxv710-dpdk:
-# 2n-tx2-xl710-af_xdp:
-# 2n-tx2-xl710-avf:
-# 2n-tx2-xl710-dpdk:
-# 2n-zn2-x710-avf:
-# 2n-zn2-x710-dpdk:
-# 2n-zn2-cx556a-rdma:
-# 2n-zn2-xxv710-avf:
-# 2n-zn2-xxv710-dpdk:
+2n-tx2-40ge2p1xl710-af_xdp:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+      - eth-l2bdscale100kmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale200k
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale200k
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+2n-tx2-40ge2p1xl710-dpdk:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - dot1q-l2bdbasemaclrn
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+      - eth-l2bdscale100kmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  l2-features:
+    label: L2 Ethernet Switching Features
+    test:
+      - eth-l2bdbasemaclrn-iacl50sf-10kflows
+      - eth-l2bdbasemaclrn-iacl50sl-10kflows
+      - eth-l2bdbasemaclrn-oacl50sf-10kflows
+      - eth-l2bdbasemaclrn-oacl50sl-10kflows
+      - eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ipsec:
+    label: IPSec IPv4 Routing
+    test:
+      - ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+      - ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+      - ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+      - ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+      - ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+      - ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+      - ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+      - ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+      - ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+    core: [1C, 2C, 4C]
+    frame-size: [1518B, IMIX]
+    test-type: [MRR, ]
+  ipsec-policy:
+    label: IPSec IPv4 Routing Policy
+    test:
+      - ethip4ipsec1spe-cache-ip4base-policy-outbound-nocrypto
+      - ethip4ipsec1spe-ip4base-policy-outbound-nocrypto
+      - ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-udir
+      - ethip4ipsec100spe-cache-ip4base-policy-outbound-nocrypto
+      - ethip4ipsec100spe-ip4base-policy-outbound-nocrypto
+      - ethip4ipsec1000spe-cache-ip4base-policy-outbound-nocrypto
+      - ethip4ipsec1000spe-ip4base-policy-outbound-nocrypto
+      - ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-udir
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale200k
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-features:
+    label: IPv4 Routing Features
+    test:
+      - ethip4-ip4base-iacldstbase
+      - ethip4udp-ip4base-iacl50sf-10kflows
+      - ethip4udp-ip4base-iacl50sl-10kflows
+      - ethip4udp-ip4base-oacl50sf-10kflows
+      - ethip4udp-ip4base-oacl50sl-10kflows
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale200k
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  ip6-features:
+    label: IPv6 Routing Features
+    test:
+      - ethip6-ip6base-iacldstbase
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  memif-base:
+    label: LXC/DRC Container Memif
+    test:
+      - eth-l2bdbasemaclrn-eth-2memif-1dcr
+      - eth-l2xcbase-eth-2memif-1dcr
+      - ethip4-ip4base-eth-2memif-1dcr
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+2n-zn2-10ge2p1x710-avf:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+2n-zn2-10ge2p1x710-dpdk:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+2n-zn2-100ge2p1cx556a-rdma:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - dot1q-l2bdbasemaclrn
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+      - eth-l2bdscale100kmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+      - ethip6-ip6scale200k
+      - ethip6-ip6scale200k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  ip4-features:
+    label: IPv4 Routing Features
+    test:
+      - ethip4udp-ip4base-iacl50sf-10kflows
+      - ethip4udp-ip4base-iacl50sl-10kflows
+      - ethip4udp-ip4base-oacl50sf-10kflows
+      - ethip4udp-ip4base-oacl50sl-10kflows
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  memif-base:
+    label: LXC/DRC Container Memif
+    test:
+      - eth-l2bdbasemaclrn-eth-2memif-1dcr
+      - eth-l2xcbase-eth-2memif-1dcr
+      - ethip4-ip4base-eth-2memif-1dcr
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  vhost-base:
+    label: VMs vhost-user
+    test:
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+      - eth-l2xcbase-eth-2vhostvr1024-1vm
+      - eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+2n-zn2-25ge2p1xxv710-avf:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - dot1q-l2bdbasemaclrn
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+      - eth-l2bdscale100kmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-features:
+    label: IPv4 Routing Features
+    test:
+      - ethip4udp-ip4base-iacl50sf-10kflows
+      - ethip4udp-ip4base-iacl50sl-10kflows
+      - ethip4udp-ip4base-oacl50sf-10kflows
+      - ethip4udp-ip4base-oacl50sl-10kflows
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+      - ethip6-ip6scale200k
+      - ethip6-ip6scale200k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  ethip4-ethip4udpgeneve:
+    label: IPv4 Tunnels
+    test:
+      - ethip4--ethip4udpgeneve-1tun-ip4base
+      - ethip4--ethip4udpgeneve-4tun-ip4base
+      - ethip4--ethip4udpgeneve-16tun-ip4base
+      - ethip4--ethip4udpgeneve-64tun-ip4base
+      - ethip4--ethip4udpgeneve-256tun-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  memif-base:
+    label: LXC/DRC Container Memif
+    test:
+      - eth-l2bdbasemaclrn-eth-2memif-1dcr
+      - eth-l2xcbase-eth-2memif-1dcr
+      - ethip4-ip4base-eth-2memif-1dcr
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  nat44det-ip4-stl-bidir:
+    label: NAT44 Deterministic BiDir
+    test:
+      - ethip4udp-nat44det-h1024-p63-s64512
+      - ethip4udp-nat44det-h16384-p63-s1032192
+      - ethip4udp-nat44det-h65536-p63-s4128758
+      - ethip4udp-nat44det-h262144-p63-s16515072
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  vhost-base:
+    label: VMs vhost-user
+    test:
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+      - eth-l2xcbase-eth-2vhostvr1024-1vm
+      - eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+2n-zn2-25ge2p1xxv710-dpdk:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+      - eth-l2bdscale100kmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  memif-base:
+    label: LXC/DRC Container Memif
+    test:
+      - eth-l2bdbasemaclrn-eth-2memif-1dcr
+      - eth-l2xcbase-eth-2memif-1dcr
+      - ethip4-ip4base-eth-2memif-1dcr
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  vhost-base:
+    label: VMs vhost-user
+    test:
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
 3n-aws-50ge1p1ena-dpdk:
   ip4-base:
     label: IPv4 Routing Base
       - ethip4-ip4base
     core: [1C, 2C]
     frame-size: [64B, 1518B]
-    test-type: [MRR, NDR, PDR]
-
+    test-type: [MRR, ]
   ip4-scale:
     label: IPv4 Routing Scale
     test:
       - ethip4-ip4scale20k-rnd
     core: [1C, 2C]
     frame-size: [64B, 1518B]
-    test-type: [MRR, NDR, PDR]
-
+    test-type: [MRR, ]
   ipsec-base:
     label: IPSec IPv4 Routing Base
     test:
       - ethip4ipsec40tnlsw-ip4base-int-aes256gcm
     core: [1C, 2C]
     frame-size: [IMIX, 1518B]
+    test-type: [MRR, ]
+3n-dnv-10ge2p1x553-ixgbe:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  l2-scale:
+    label: L2 Ethernet Switching Scale
+    test:
+      - eth-l2bdscale10kmaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-scale:
+    label: IPv4 Routing Scale
+    test:
+      - ethip4-ip4scale20k
+      - ethip4-ip4scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  ip6-scale:
+    label: IPv6 Routing Scale
+    test:
+      - ethip6-ip6scale20k
+      - ethip6-ip6scale20k-rnd
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  ip4-tunnels:
+    label: IPv4 Tunnels
+    test:
+      - ethip4vxlan-l2xcbase
+      - ethip4vxlan-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ipsec:
+    label: IPSec IPv4 Routing
+    test:
+      - ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+    core: [1C, 2C, 4C]
+    frame-size: [1518B, IMIX]
+    test-type: [MRR, ]
+  ipsec-scheduler:
+    label: IPSec IPv4 Routing Scheduler
+    test:
+      - ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+    core: [2C, 3C, 4C]
+    frame-size: [1518B, IMIX]
+    test-type: [MRR, ]
+3n-icx-25ge2p1xxv710-avf:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - dot1q-l2bdbasemaclrn
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  srv6:
+    label: SRv6 Routing
+    test:
+      - ethip6ip6-ip6base-srv6enc1sid
+      - ethip6srhip6-ip6base-srv6enc2sids
+      - ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+      - ethip6srhip6-ip6base-srv6proxy-dyn
+      - ethip6srhip6-ip6base-srv6proxy-masq
+      - ethip6srhip6-ip6base-srv6proxy-stat
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-tunnels:
+    label: IPv4 Tunnels
+    test:
+      - ethip4gtpusw-ip4base
+      - ethip4vxlan-l2bdbasemaclrn
+      - ethip4vxlan-l2xcbase
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ipsec:
+    label: IPSec IPv4 Routing
+    test:
+      - ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+    core: [1C, 2C, 4C]
+    frame-size: [1518B, IMIX]
+    test-type: [MRR, NDR, PDR]
+  ipsec-scheduler:
+    label: IPSec IPv4 Routing Scheduler
+    test:
+      - ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+      - ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+    core: [2C, 3C, 4C]
+    frame-size: [1518B, IMIX]
+    test-type: [MRR, NDR, PDR]
+3n-icx-25ge2p1xxv710-dpdk:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-tunnels:
+    label: IPv4 Tunnels
+    test:
+      - ethip4gtpusw-ip4base
+      - ethip4vxlan-l2bdbasemaclrn
+      - ethip4vxlan-l2xcbase
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ipsec:
+    label: IPSec IPv4 Routing
+    test:
+      - ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+    core: [1C, 2C, 4C]
+    frame-size: [1518B, IMIX]
+    test-type: [MRR, NDR, PDR]
+  ipsec-scheduler:
+    label: IPSec IPv4 Routing Scheduler
+    test:
+      - ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+      - ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+    core: [2C, 3C, 4C]
+    frame-size: [1518B, IMIX]
     test-type: [MRR, NDR, PDR]
-# 3n-dnv-x553-ixgbe:
-# 3n-icx-xxv710-avf:
-# 3n-icx-xxv710-dpdk:
-# 3n-skx-x710-avf:
-# 3n-skx-xxv710-avf:
-# 3n-skx-xxv710-dpdk:
-# 3n-tsh-x520-ixgbe:
+3n-skx-10ge2p1x710-avf:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+3n-skx-25ge2p1xxv710-avf:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - dot1q-l2bdbasemaclrn
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-tunnels:
+    label: IPv4 Tunnels
+    test:
+      - ethip4gtpusw-ip4base
+      - ethip4vxlan-l2bdbasemaclrn
+      - ethip4vxlan-l2xcbase
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  srv6:
+    label: SRv6 Routing
+    test:
+      - ethip6ip6-ip6base-srv6enc1sid
+      - ethip6srhip6-ip6base-srv6enc2sids
+      - ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+      - ethip6srhip6-ip6base-srv6proxy-dyn
+      - ethip6srhip6-ip6base-srv6proxy-masq
+      - ethip6srhip6-ip6base-srv6proxy-stat
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ipsec:
+    label: IPSec IPv4 Routing
+    test:
+      - ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+    core: [1C, 2C, 4C]
+    frame-size: [1518B, IMIX]
+    test-type: [MRR, NDR, PDR]
+  ipsec-scheduler:
+    label: IPSec IPv4 Routing Scheduler
+    test:
+      - ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+      - ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+    core: [2C, 3C, 4C]
+    frame-size: [1518B, IMIX]
+    test-type: [MRR, NDR, PDR]
+3n-skx-25ge2p1xxv710-dpdk:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, NDR, PDR]
+  ip4-tunnels:
+    label: IPv4 Tunnels
+    test:
+      - ethip4gtpusw-ip4base
+      - ethip4vxlan-l2bdbasemaclrn
+      - ethip4vxlan-l2xcbase
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, NDR, PDR]
+  ipsec:
+    label: IPSec IPv4 Routing
+    test:
+      - ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+    core: [1C, 2C, 4C]
+    frame-size: [1518B, IMIX]
+    test-type: [MRR, NDR, PDR]
+  ipsec-scheduler:
+    label: IPSec IPv4 Routing Scheduler
+    test:
+      - ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+      - ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+    core: [2C, 3C, 4C]
+    frame-size: [1518B, IMIX]
+    test-type: [MRR, NDR, PDR]
+3n-tsh-10ge2p1x520-ixgbe:
+  l2-base:
+    label: L2 Ethernet Switching Base
+    test:
+      - dot1q-l2bdbasemaclrn
+      - eth-l2xcbase
+      - eth-l2patch
+      - eth-l2bdbasemaclrn
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  l2-features:
+    label: L2 Ethernet Switching Features
+    test:
+      - eth-l2bdbasemaclrn-iacl50sf-10kflows
+      - eth-l2bdbasemaclrn-iacl50sl-10kflows
+      - eth-l2bdbasemaclrn-oacl50sf-10kflows
+      - eth-l2bdbasemaclrn-oacl50sl-10kflows
+      - eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-base:
+    label: IPv4 Routing Base
+    test:
+      - ethip4-ip4base
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip4-features:
+    label: IPv4 Routing Features
+    test:
+      - ethip4udp-ip4base-iacl50sf-10kflows
+      - ethip4udp-ip4base-iacl50sl-10kflows
+      - ethip4udp-ip4base-oacl50sf-10kflows
+      - ethip4udp-ip4base-oacl50sl-10kflows
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ip6-base:
+    label: IPv6 Routing Base
+    test:
+      - ethip6-ip6base
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  srv6:
+    label: SRv6 Routing
+    test:
+      - ethip6ip6-ip6base-srv6enc1sid
+      - ethip6srhip6-ip6base-srv6enc2sids
+      - ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+      - ethip6srhip6-ip6base-srv6proxy-dyn
+      - ethip6srhip6-ip6base-srv6proxy-masq
+      - ethip6srhip6-ip6base-srv6proxy-stat
+    core: [1C, 2C, 4C]
+    frame-size: [78B, ]
+    test-type: [MRR, ]
+  ip4-tunnels:
+    label: IPv4 Tunnels
+    test:
+      - ethip4vxlan-l2bdbasemaclrn
+      - ethip4vxlan-l2xcbase
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  ipsec:
+    label: IPSec IPv4 Routing
+    test:
+      - ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+      - ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+      - ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+      - ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+      - ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+      - ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+    core: [1C, 2C, 4C]
+    frame-size: [1518B, IMIX]
+    test-type: [MRR, ]
+  ipsec-policy:
+    label: IPSec IPv4 Routing Policy
+    test:
+      - ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+      - ethip4ipsec40tnlsw-ip4base-policy-aes256gcm
+      - ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
+  vhost-base:
+    label: VMs vhost-user
+    test:
+      - eth-l2xcbase-eth-2vhostvr1024-1vm
+      - eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+      - ethip4-ip4base-eth-2vhostvr1024-1vm
+      - ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+      - ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+      - ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+    core: [1C, 2C, 4C]
+    frame-size: [64B, ]
+    test-type: [MRR, ]
index dd323c5..7801e9c 100644 (file)
@@ -41,7 +41,8 @@ def init_trending(server):
         app=dash_app,
         html_layout_file="pal/trending/html_layout.txt",
         spec_file="pal/trending/spec_test_selection.yaml",
-        graph_layout_file="pal/trending/layout.yaml"
+        graph_layout_file="pal/trending/layout.yaml",
+        data_spec_file="pal/data/data.yaml"
     )
     dash_app.index_string = layout.html_layout
     dash_app.layout = layout.add_content()