feat(ansible): Repurpose obsolete vpp-device
[csit.git] / resources / libraries / python / autogen / Regenerator.py
index 3011b06..ce8f21d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2022 Cisco and/or its affiliates.
+# Copyright (c) 2024 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:
 # 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:
@@ -17,6 +17,7 @@ TODO: How can we check each suite id is unique,
       when currently the suite generation is run on each directory separately?
 """
 
       when currently the suite generation is run on each directory separately?
 """
 
+import copy
 import sys
 
 from glob import glob
 import sys
 
 from glob import glob
@@ -116,54 +117,72 @@ def check_suite_tag(suite_tag, prolog):
         raise ValueError(f"Suite tag found {found} times for {suite_tag}")
 
 
         raise ValueError(f"Suite tag found {found} times for {suite_tag}")
 
 
-def add_default_testcases(testcase, iface, suite_id, file_out, tc_kwargs_list):
+def filter_and_edit_kwargs_for_astf(suite_id, kwargs):
+    """Return possibly edited kwargs, or None if to be skipped.
+
+    This is a code block used in few places.
+    Kwargs is (a copy of) one item from tc_kwargs_list.
+    Currently, the editable field is frame_size,
+    to be increased to for tests with data (not just CPS).
+
+    :param suite_id: Suite ID.
+    :param kwargs: Key-value pairs used to construct one testcase.
+    :type suite_id: str
+    :type tc_kwargs_list: dict
+    :returns: Edited kwargs.
+    :rtype Optional[dict]
+    """
+    if u"-cps-" in suite_id:
+        # Contrary to UDP, there is no place to affect frame size
+        # in TCP CPS tests. Actual frames are close to min size.
+        # UDP uses the min value too, for fairer comparison to TCP.
+        if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
+            return None
+    elif (u"-pps-" in suite_id or u"-tput-" in suite_id):
+        if u"imix" in str(kwargs[u"frame_size"]).lower():
+            # ASTF does not support IMIX (yet).
+            return None
+        if kwargs[u"frame_size"] in MIN_FRAME_SIZE_VALUES:
+            # Minimal (TRex) TCP data frame is 80B for IPv4.
+            # In future, we may want to have also IPv6 TCP.
+            # UDP uses the same value, for fairer comparison to TCP.
+            kwargs[u"frame_size"] = 100
+    return kwargs
+
+
+def add_default_testcases(
+        testcase, nic_code, suite_id, file_out, tc_kwargs_list):
     """Add default testcases to file.
 
     :param testcase: Testcase class.
     """Add default testcases to file.
 
     :param testcase: Testcase class.
-    :param iface: Interface.
+    :param nic_code: NIC code.
     :param suite_id: Suite ID.
     :param file_out: File to write testcases to.
     :param tc_kwargs_list: Key-value pairs used to construct testcases.
     :type testcase: Testcase
     :param suite_id: Suite ID.
     :param file_out: File to write testcases to.
     :param tc_kwargs_list: Key-value pairs used to construct testcases.
     :type testcase: Testcase
-    :type iface: str
+    :type nic_code: str
     :type suite_id: str
     :type file_out: file
     :type tc_kwargs_list: dict
     """
     :type suite_id: str
     :type file_out: file
     :type tc_kwargs_list: dict
     """
-    for kwargs in tc_kwargs_list:
+    for kwas in tc_kwargs_list:
+        # We may edit framesize for ASTF, the copy should be local.
+        kwargs = copy.deepcopy(kwas)
         # TODO: Is there a better way to disable some combinations?
         emit = True
         # TODO: Is there a better way to disable some combinations?
         emit = True
-        if kwargs[u"frame_size"] == 9000:
-            if u"vic1227" in iface:
-                # Not supported in HW.
-                emit = False
-            if u"vic1385" in iface:
-                # Not supported in HW.
-                emit = False
-        if u"-16vm2t-" in suite_id or u"-16dcr2t-" in suite_id:
-            if kwargs[u"phy_cores"] > 3:
-                # CSIT lab only has 28 (physical) core processors,
-                # so these test would fail when attempting to assign cores.
-                emit = False
-        if u"-24vm1t-" in suite_id or u"-24dcr1t-" in suite_id:
-            if kwargs[u"phy_cores"] > 3:
-                # CSIT lab only has 28 (physical) core processors,
-                # so these test would fail when attempting to assign cores.
-                emit = False
+        core_scale = Constants.NIC_CODE_TO_CORESCALE[nic_code]
         if u"soak" in suite_id:
             # Soak test take too long, do not risk other than tc01.
             if kwargs[u"phy_cores"] != 1:
                 emit = False
         if u"soak" in suite_id:
             # Soak test take too long, do not risk other than tc01.
             if kwargs[u"phy_cores"] != 1:
                 emit = False
-            if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
-                emit = False
-        if (
-                u"-cps-" in suite_id
-                or u"-pps-" in suite_id
-                or u"-tput-" in suite_id
-        ):
-            if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
-                emit = False
-        if emit:
+            if u"reassembly" in suite_id:
+                if kwargs[u"frame_size"] != 1518:
+                    emit = False
+
+        kwargs.update({'phy_cores': kwas['phy_cores']*core_scale})
+
+        kwargs = filter_and_edit_kwargs_for_astf(suite_id, kwargs)
+        if emit and kwargs is not None:
             file_out.write(testcase.generate(**kwargs))
 
 
             file_out.write(testcase.generate(**kwargs))
 
 
@@ -207,17 +226,11 @@ def add_trex_testcases(testcase, suite_id, file_out, tc_kwargs_list):
     :type file_out: file
     :type tc_kwargs_list: dict
     """
     :type file_out: file
     :type tc_kwargs_list: dict
     """
-    for kwargs in tc_kwargs_list:
-        # TODO: Is there a better way to disable some combinations?
-        emit = True
-        if (
-                u"-cps-" in suite_id
-                or u"-pps-" in suite_id
-                or u"-tput-" in suite_id
-        ):
-            if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
-                emit = False
-        if emit:
+    for kwas in tc_kwargs_list:
+        # We may edit framesize for ASTF, the copy should be local.
+        kwargs = copy.deepcopy(kwas)
+        kwargs = filter_and_edit_kwargs_for_astf(suite_id, kwargs)
+        if kwargs is not None:
             file_out.write(testcase.generate(**kwargs))
 
 
             file_out.write(testcase.generate(**kwargs))
 
 
@@ -233,75 +246,75 @@ def write_default_files(in_filename, in_prolog, kwargs_list):
     """
     for suite_type in Constants.PERF_TYPE_TO_KEYWORD:
         tmp_filename = replace_defensively(
     """
     for suite_type in Constants.PERF_TYPE_TO_KEYWORD:
         tmp_filename = replace_defensively(
-            in_filename, u"ndrpdr", suite_type, 1,
-            u"File name should contain suite type once.", in_filename
+            in_filename, "ndrpdr", suite_type, 1,
+            "File name should contain suite type once.", in_filename
         )
         tmp_prolog = replace_defensively(
         )
         tmp_prolog = replace_defensively(
-            in_prolog, u"ndrpdr".upper(), suite_type.upper(), 1,
-            u"Suite type should appear once in uppercase (as tag).",
+            in_prolog, "ndrpdr".upper(), suite_type.upper(), 1,
+            "Suite type should appear once in uppercase (as tag).",
             in_filename
         )
         tmp_prolog = replace_defensively(
             tmp_prolog,
             in_filename
         )
         tmp_prolog = replace_defensively(
             tmp_prolog,
-            u"Find NDR and PDR intervals using optimized search",
+            "Find NDR and PDR intervals using optimized search",
             Constants.PERF_TYPE_TO_KEYWORD[suite_type], 1,
             Constants.PERF_TYPE_TO_KEYWORD[suite_type], 1,
-            u"Main search keyword should appear once in suite.",
+            "Main search keyword should appear once in suite.",
             in_filename
         )
         tmp_prolog = replace_defensively(
             tmp_prolog,
             in_filename
         )
         tmp_prolog = replace_defensively(
             tmp_prolog,
-            Constants.PERF_TYPE_TO_SUITE_DOC_VER[u"ndrpdr"],
+            Constants.PERF_TYPE_TO_SUITE_DOC_VER["ndrpdr"],
             Constants.PERF_TYPE_TO_SUITE_DOC_VER[suite_type],
             Constants.PERF_TYPE_TO_SUITE_DOC_VER[suite_type],
-            1, u"Exact suite type doc not found.", in_filename
+            1, "Exact suite type doc not found.", in_filename
         )
         tmp_prolog = replace_defensively(
             tmp_prolog,
         )
         tmp_prolog = replace_defensively(
             tmp_prolog,
-            Constants.PERF_TYPE_TO_TEMPLATE_DOC_VER[u"ndrpdr"],
+            Constants.PERF_TYPE_TO_TEMPLATE_DOC_VER["ndrpdr"],
             Constants.PERF_TYPE_TO_TEMPLATE_DOC_VER[suite_type],
             Constants.PERF_TYPE_TO_TEMPLATE_DOC_VER[suite_type],
-            1, u"Exact template type doc not found.", in_filename
+            1, "Exact template type doc not found.", in_filename
         )
         _, suite_id, _ = get_iface_and_suite_ids(tmp_filename)
         testcase = Testcase.default(suite_id)
         )
         _, suite_id, _ = get_iface_and_suite_ids(tmp_filename)
         testcase = Testcase.default(suite_id)
-        for nic_name in Constants.NIC_NAME_TO_CODE:
+        for nic_code in Constants.NIC_CODE_TO_NAME:
+            nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
             tmp2_filename = replace_defensively(
             tmp2_filename = replace_defensively(
-                tmp_filename, u"10ge2p1x710",
-                Constants.NIC_NAME_TO_CODE[nic_name], 1,
-                u"File name should contain NIC code once.", in_filename
+                tmp_filename, "10ge2p1x710", nic_code, 1,
+                "File name should contain NIC code once.", in_filename
             )
             tmp2_prolog = replace_defensively(
             )
             tmp2_prolog = replace_defensively(
-                tmp_prolog, u"Intel-X710", nic_name, 2,
-                u"NIC name should appear twice (tag and variable).",
+                tmp_prolog, "Intel-X710", nic_name, 2,
+                "NIC name should appear twice (tag and variable).",
                 in_filename
             )
                 in_filename
             )
-            if tmp2_prolog.count(u"HW_") == 2:
+            if tmp2_prolog.count("HW_") == 2:
                 # TODO CSIT-1481: Crypto HW should be read
                 #      from topology file instead.
                 if nic_name in Constants.NIC_NAME_TO_CRYPTO_HW:
                     tmp2_prolog = replace_defensively(
                 # TODO CSIT-1481: Crypto HW should be read
                 #      from topology file instead.
                 if nic_name in Constants.NIC_NAME_TO_CRYPTO_HW:
                     tmp2_prolog = replace_defensively(
-                        tmp2_prolog, u"HW_DH895xcc",
+                        tmp2_prolog, "HW_DH895xcc",
                         Constants.NIC_NAME_TO_CRYPTO_HW[nic_name], 1,
                         Constants.NIC_NAME_TO_CRYPTO_HW[nic_name], 1,
-                        u"HW crypto name should appear.", in_filename
+                        "HW crypto name should appear.", in_filename
                     )
             iface, old_suite_id, old_suite_tag = get_iface_and_suite_ids(
                 tmp2_filename
             )
                     )
             iface, old_suite_id, old_suite_tag = get_iface_and_suite_ids(
                 tmp2_filename
             )
-            if u"DPDK" in in_prolog:
+            if "DPDK" in in_prolog:
                 for driver in Constants.DPDK_NIC_NAME_TO_DRIVER[nic_name]:
                     out_filename = replace_defensively(
                         tmp2_filename, old_suite_id,
                         Constants.DPDK_NIC_DRIVER_TO_SUITE_PREFIX[driver] \
                             + old_suite_id,
                 for driver in Constants.DPDK_NIC_NAME_TO_DRIVER[nic_name]:
                     out_filename = replace_defensively(
                         tmp2_filename, old_suite_id,
                         Constants.DPDK_NIC_DRIVER_TO_SUITE_PREFIX[driver] \
                             + old_suite_id,
-                        1, u"Error adding driver prefix.", in_filename
+                        1, "Error adding driver prefix.", in_filename
                     )
                     out_prolog = replace_defensively(
                     )
                     out_prolog = replace_defensively(
-                        tmp2_prolog, u"vfio-pci", driver, 1,
-                        u"Driver name should appear once.", in_filename
+                        tmp2_prolog, "vfio-pci", driver, 1,
+                        "Driver name should appear once.", in_filename
                     )
                     out_prolog = replace_defensively(
                         out_prolog,
                     )
                     out_prolog = replace_defensively(
                         out_prolog,
-                        Constants.DPDK_NIC_DRIVER_TO_TAG[u"vfio-pci"],
+                        Constants.DPDK_NIC_DRIVER_TO_TAG["vfio-pci"],
                         Constants.DPDK_NIC_DRIVER_TO_TAG[driver], 1,
                         Constants.DPDK_NIC_DRIVER_TO_TAG[driver], 1,
-                        u"Driver tag should appear once.", in_filename
+                        "Driver tag should appear once.", in_filename
                     )
                     iface, suite_id, suite_tag = get_iface_and_suite_ids(
                         out_filename
                     )
                     iface, suite_id, suite_tag = get_iface_and_suite_ids(
                         out_filename
@@ -316,36 +329,41 @@ def write_default_files(in_filename, in_prolog, kwargs_list):
                     check_suite_tag(suite_tag, out_prolog)
                     # TODO: Reorder loops so suite_id is finalized sooner.
                     testcase = Testcase.default(suite_id)
                     check_suite_tag(suite_tag, out_prolog)
                     # TODO: Reorder loops so suite_id is finalized sooner.
                     testcase = Testcase.default(suite_id)
-                    with open(out_filename, u"wt") as file_out:
+                    with open(out_filename, "wt") as file_out:
                         file_out.write(out_prolog)
                         add_default_testcases(
                         file_out.write(out_prolog)
                         add_default_testcases(
-                            testcase, iface, suite_id, file_out, kwargs_list
+                            testcase, nic_code, suite_id, file_out, kwargs_list
                         )
                 continue
             for driver in Constants.NIC_NAME_TO_DRIVER[nic_name]:
                 out_filename = replace_defensively(
                     tmp2_filename, old_suite_id,
                     Constants.NIC_DRIVER_TO_SUITE_PREFIX[driver] + old_suite_id,
                         )
                 continue
             for driver in Constants.NIC_NAME_TO_DRIVER[nic_name]:
                 out_filename = replace_defensively(
                     tmp2_filename, old_suite_id,
                     Constants.NIC_DRIVER_TO_SUITE_PREFIX[driver] + old_suite_id,
-                    1, u"Error adding driver prefix.", in_filename
+                    1, "Error adding driver prefix.", in_filename
                 )
                 out_prolog = replace_defensively(
                 )
                 out_prolog = replace_defensively(
-                    tmp2_prolog, u"vfio-pci", driver, 1,
-                    u"Driver name should appear once.", in_filename
+                    tmp2_prolog, "vfio-pci", driver, 1,
+                    "Driver name should appear once.", in_filename
                 )
                 out_prolog = replace_defensively(
                 )
                 out_prolog = replace_defensively(
-                    out_prolog, Constants.NIC_DRIVER_TO_TAG[u"vfio-pci"],
+                    out_prolog, Constants.NIC_DRIVER_TO_TAG["vfio-pci"],
                     Constants.NIC_DRIVER_TO_TAG[driver], 1,
                     Constants.NIC_DRIVER_TO_TAG[driver], 1,
-                    u"Driver tag should appear once.", in_filename
+                    "Driver tag should appear once.", in_filename
                 )
                 out_prolog = replace_defensively(
                 )
                 out_prolog = replace_defensively(
-                    out_prolog, Constants.NIC_DRIVER_TO_PLUGINS[u"vfio-pci"],
+                    out_prolog, Constants.NIC_DRIVER_TO_PLUGINS["vfio-pci"],
                     Constants.NIC_DRIVER_TO_PLUGINS[driver], 1,
                     Constants.NIC_DRIVER_TO_PLUGINS[driver], 1,
-                    u"Driver plugin should appear once.", in_filename
+                    "Driver plugin should appear once.", in_filename
                 )
                 out_prolog = replace_defensively(
                 )
                 out_prolog = replace_defensively(
-                    out_prolog, Constants.NIC_DRIVER_TO_VFS[u"vfio-pci"],
+                    out_prolog, Constants.NIC_DRIVER_TO_VFS["vfio-pci"],
                     Constants.NIC_DRIVER_TO_VFS[driver], 1,
                     Constants.NIC_DRIVER_TO_VFS[driver], 1,
-                    u"NIC VFs argument should appear once.", in_filename
+                    "NIC VFs argument should appear once.", in_filename
+                )
+                out_prolog = replace_defensively(
+                    out_prolog, Constants.NIC_CODE_TO_PFS["10ge2p1x710"],
+                    Constants.NIC_CODE_TO_PFS[nic_code], 1,
+                    "NIC PFs argument should appear once.", in_filename
                 )
                 iface, suite_id, suite_tag = get_iface_and_suite_ids(
                     out_filename
                 )
                 iface, suite_id, suite_tag = get_iface_and_suite_ids(
                     out_filename
@@ -360,10 +378,10 @@ def write_default_files(in_filename, in_prolog, kwargs_list):
                 check_suite_tag(suite_tag, out_prolog)
                 # TODO: Reorder loops so suite_id is finalized sooner.
                 testcase = Testcase.default(suite_id)
                 check_suite_tag(suite_tag, out_prolog)
                 # TODO: Reorder loops so suite_id is finalized sooner.
                 testcase = Testcase.default(suite_id)
-                with open(out_filename, u"wt") as file_out:
+                with open(out_filename, "wt") as file_out:
                     file_out.write(out_prolog)
                     add_default_testcases(
                     file_out.write(out_prolog)
                     add_default_testcases(
-                        testcase, iface, suite_id, file_out, kwargs_list
+                        testcase, nic_code, suite_id, file_out, kwargs_list
                     )
 
 
                     )
 
 
@@ -383,10 +401,10 @@ def write_reconf_files(in_filename, in_prolog, kwargs_list):
     """
     _, suite_id, _ = get_iface_and_suite_ids(in_filename)
     testcase = Testcase.default(suite_id)
     """
     _, suite_id, _ = get_iface_and_suite_ids(in_filename)
     testcase = Testcase.default(suite_id)
-    for nic_name in Constants.NIC_NAME_TO_CODE:
+    for nic_code in Constants.NIC_CODE_TO_NAME:
+        nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
         tmp_filename = replace_defensively(
         tmp_filename = replace_defensively(
-            in_filename, u"10ge2p1x710",
-            Constants.NIC_NAME_TO_CODE[nic_name], 1,
+            in_filename, u"10ge2p1x710", nic_code, 1,
             u"File name should contain NIC code once.", in_filename
         )
         tmp_prolog = replace_defensively(
             u"File name should contain NIC code once.", in_filename
         )
         tmp_prolog = replace_defensively(
@@ -431,6 +449,11 @@ def write_reconf_files(in_filename, in_prolog, kwargs_list):
                 Constants.NIC_DRIVER_TO_VFS[driver], 1,
                 u"NIC VFs argument should appear once.", in_filename
             )
                 Constants.NIC_DRIVER_TO_VFS[driver], 1,
                 u"NIC VFs argument should appear once.", in_filename
             )
+            out_prolog = replace_defensively(
+                out_prolog, Constants.NIC_CODE_TO_PFS["10ge2p1x710"],
+                Constants.NIC_CODE_TO_PFS[nic_code], 1,
+                "NIC PFs argument should appear once.", in_filename
+            )
             iface, suite_id, suite_tag = get_iface_and_suite_ids(out_filename)
             out_prolog = replace_defensively(
                 out_prolog, old_suite_tag, suite_tag, 1,
             iface, suite_id, suite_tag = get_iface_and_suite_ids(out_filename)
             out_prolog = replace_defensively(
                 out_prolog, old_suite_tag, suite_tag, 1,
@@ -459,10 +482,10 @@ def write_tcp_files(in_filename, in_prolog, kwargs_list):
     # TODO: Generate rps from cps? There are subtle differences.
     _, suite_id, suite_tag = get_iface_and_suite_ids(in_filename)
     testcase = Testcase.tcp(suite_id)
     # TODO: Generate rps from cps? There are subtle differences.
     _, suite_id, suite_tag = get_iface_and_suite_ids(in_filename)
     testcase = Testcase.tcp(suite_id)
-    for nic_name in Constants.NIC_NAME_TO_CODE:
+    for nic_code in Constants.NIC_CODE_TO_NAME:
+        nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
         tmp_filename = replace_defensively(
         tmp_filename = replace_defensively(
-            in_filename, u"10ge2p1x710",
-            Constants.NIC_NAME_TO_CODE[nic_name], 1,
+            in_filename, u"10ge2p1x710", nic_code, 1,
             u"File name should contain NIC code once.", in_filename
         )
         tmp_prolog = replace_defensively(
             u"File name should contain NIC code once.", in_filename
         )
         tmp_prolog = replace_defensively(
@@ -498,6 +521,11 @@ def write_tcp_files(in_filename, in_prolog, kwargs_list):
                 Constants.NIC_DRIVER_TO_VFS[driver], 1,
                 u"NIC VFs argument should appear once.", in_filename
             )
                 Constants.NIC_DRIVER_TO_VFS[driver], 1,
                 u"NIC VFs argument should appear once.", in_filename
             )
+            out_prolog = replace_defensively(
+                out_prolog, Constants.NIC_CODE_TO_PFS["10ge2p1x710"],
+                Constants.NIC_CODE_TO_PFS[nic_code], 1,
+                "NIC PFs argument should appear once.", in_filename
+            )
             iface, suite_id, suite_tag = get_iface_and_suite_ids(out_filename)
             out_prolog = replace_defensively(
                 out_prolog, old_suite_tag, suite_tag, 1,
             iface, suite_id, suite_tag = get_iface_and_suite_ids(out_filename)
             out_prolog = replace_defensively(
                 out_prolog, old_suite_tag, suite_tag, 1,
@@ -522,10 +550,10 @@ def write_iperf3_files(in_filename, in_prolog, kwargs_list):
     """
     _, suite_id, suite_tag = get_iface_and_suite_ids(in_filename)
     testcase = Testcase.iperf3(suite_id)
     """
     _, suite_id, suite_tag = get_iface_and_suite_ids(in_filename)
     testcase = Testcase.iperf3(suite_id)
-    for nic_name in Constants.NIC_NAME_TO_CODE:
+    for nic_code in Constants.NIC_CODE_TO_NAME:
+        nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
         out_filename = replace_defensively(
         out_filename = replace_defensively(
-            in_filename, u"10ge2p1x710",
-            Constants.NIC_NAME_TO_CODE[nic_name], 1,
+            in_filename, u"10ge2p1x710", nic_code, 1,
             u"File name should contain NIC code once.", in_filename
         )
         out_prolog = replace_defensively(
             u"File name should contain NIC code once.", in_filename
         )
         out_prolog = replace_defensively(
@@ -580,10 +608,10 @@ def write_trex_files(in_filename, in_prolog, kwargs_list):
         )
         _, suite_id, suite_tag = get_iface_and_suite_ids(tmp_filename)
         testcase = Testcase.trex(suite_id)
         )
         _, suite_id, suite_tag = get_iface_and_suite_ids(tmp_filename)
         testcase = Testcase.trex(suite_id)
-        for nic_name in Constants.NIC_NAME_TO_CODE:
+        for nic_code in Constants.NIC_CODE_TO_NAME:
+            nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
             out_filename = replace_defensively(
             out_filename = replace_defensively(
-                tmp_filename, u"10ge2p1x710",
-                Constants.NIC_NAME_TO_CODE[nic_name], 1,
+                tmp_filename, u"10ge2p1x710", nic_code, 1,
                 u"File name should contain NIC code once.", in_filename
             )
             out_prolog = replace_defensively(
                 u"File name should contain NIC code once.", in_filename
             )
             out_prolog = replace_defensively(
@@ -614,10 +642,10 @@ def write_device_files(in_filename, in_prolog, kwargs_list):
         )
         _, suite_id, _ = get_iface_and_suite_ids(tmp_filename)
         testcase = Testcase.default(suite_id)
         )
         _, suite_id, _ = get_iface_and_suite_ids(tmp_filename)
         testcase = Testcase.default(suite_id)
-        for nic_name in Constants.NIC_NAME_TO_CODE:
+        for nic_code in Constants.NIC_CODE_TO_NAME:
+            nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
             tmp2_filename = replace_defensively(
             tmp2_filename = replace_defensively(
-                tmp_filename, u"10ge2p1x710",
-                Constants.NIC_NAME_TO_CODE[nic_name], 1,
+                tmp_filename, u"10ge2p1x710", nic_code, 1,
                 u"File name should contain NIC code once.", in_filename
             )
             tmp2_prolog = replace_defensively(
                 u"File name should contain NIC code once.", in_filename
             )
             tmp2_prolog = replace_defensively(
@@ -653,6 +681,11 @@ def write_device_files(in_filename, in_prolog, kwargs_list):
                     Constants.NIC_DRIVER_TO_VFS[driver], 1,
                     u"NIC VFs argument should appear once.", in_filename
                 )
                     Constants.NIC_DRIVER_TO_VFS[driver], 1,
                     u"NIC VFs argument should appear once.", in_filename
                 )
+                out_prolog = replace_defensively(
+                    out_prolog, Constants.NIC_CODE_TO_PFS["10ge2p1x710"],
+                    Constants.NIC_CODE_TO_PFS[nic_code], 1,
+                    "NIC PFs argument should appear once.", in_filename
+                )
                 iface, suite_id, suite_tag = get_iface_and_suite_ids(
                     out_filename
                 )
                 iface, suite_id, suite_tag = get_iface_and_suite_ids(
                     out_filename
                 )