diff --git a/ansible/library/generate_golden_config_db.py b/ansible/library/generate_golden_config_db.py index 96d1e314341..69652debd00 100644 --- a/ansible/library/generate_golden_config_db.py +++ b/ansible/library/generate_golden_config_db.py @@ -588,6 +588,23 @@ def generate_lt2_ft2_golden_config_db(self): return json.dumps({"PORT": port_config}, indent=4) + def generate_t0_f2_golden_config_db(self): + """ + Generate golden_config for t0-f2 to enable link_training on server facing ports. + """ + SUPPORTED_TOPO = ["t0-f2-d40u8"] + if self.topo_name not in SUPPORTED_TOPO: + return "{}" + ori_config = json.loads(self.get_config_from_minigraph()) + golden_config = ori_config + golden_config["PORT"] = ori_config.get("PORT", {}) + for _, config in golden_config["PORT"].items(): + # Enable link_training for server facing ports + if "Server" in config.get("description", ""): + config["link_training"] = "on" + + return json.dumps({'PORT': golden_config['PORT']}, indent=4) + def generate(self): module_msg = "Success to generate golden_config_db.json" # topo check @@ -600,6 +617,9 @@ def generate(self): config = self.generate_smartswitch_golden_config_db() module_msg = module_msg + " for smartswitch" self.module.run_command("sudo rm -f {}".format(TEMP_SMARTSWITCH_CONFIG_PATH)) + elif "t0-f2" in self.topo_name: + config = self.generate_t0_f2_golden_config_db() + module_msg = module_msg + " for t0-f2" elif "ft2" in self.topo_name or "lt2" in self.topo_name: config = self.generate_lt2_ft2_golden_config_db() elif "t2" in self.topo_name and self.macsec_profile: diff --git a/ansible/module_utils/graph_utils.py b/ansible/module_utils/graph_utils.py index cba06aca187..3d23953c9e5 100644 --- a/ansible/module_utils/graph_utils.py +++ b/ansible/module_utils/graph_utils.py @@ -213,6 +213,7 @@ def csv_to_graph_facts(self): end_port_mac = link.get("EndPortMac", None) autoneg_mode = link.get("AutoNeg") fec_disable = link.get("FECDisable", False) + linktraining_mode = link.get("LinkTraining", "") links.setdefault(start_device, {}) links.setdefault(end_device, {}) @@ -242,6 +243,10 @@ def csv_to_graph_facts(self): start_port_linked_port.update({"autoneg": autoneg_mode}) end_port_linked_port.update({"autoneg": autoneg_mode}) + if linktraining_mode: + start_port_linked_port.update({"linktraining": linktraining_mode}) + end_port_linked_port.update({"linktraining": linktraining_mode}) + if start_port_mac: start_port_linked_port.update({"mac": start_port_mac}) diff --git a/ansible/roles/fanout/templates/sonic_deploy_202405.j2 b/ansible/roles/fanout/templates/sonic_deploy_202405.j2 index a8657ec3b5d..ab6529639ff 100644 --- a/ansible/roles/fanout/templates/sonic_deploy_202405.j2 +++ b/ansible/roles/fanout/templates/sonic_deploy_202405.j2 @@ -19,10 +19,15 @@ {% if fanout_hwsku == "Arista-720DT-G48S4" and (fanout_port_config[port_name]['lanes'] | int) <= 24 %} "autoneg": "on", {% endif %} - {% if fanout_port_config[port_name]['speed'] | default('100000') in ["100000", "400000", "800000"] %} + {% if fanout_port_config[port_name]['speed'] | default('100000') in ["100000", "200000", "400000", "800000"] %} "fec" : "rs", {% endif %} {% if port_name in device_conn[inventory_hostname] %} + {% if 'linktraining' in device_conn[inventory_hostname][port_name] %} + {% if 'on' in device_conn[inventory_hostname][port_name]['linktraining'] %} + "link_training": "on", + {% endif %} + {% endif %} {% if 'autoneg' in device_conn[inventory_hostname][port_name] %} {% if 'on' in device_conn[inventory_hostname][port_name]['autoneg'] %} "autoneg": "on", diff --git a/ansible/roles/fanout/templates/sonic_deploy_202505.j2 b/ansible/roles/fanout/templates/sonic_deploy_202505.j2 index e94dc4f2a8d..4d58d7fdfea 100644 --- a/ansible/roles/fanout/templates/sonic_deploy_202505.j2 +++ b/ansible/roles/fanout/templates/sonic_deploy_202505.j2 @@ -22,10 +22,17 @@ {% if fanout_hwsku == "Arista-720DT-G48S4" and (fanout_port_config[port_name]['lanes'] | int) <= 24 %} "autoneg": "on", {% endif %} - {% if fanout_port_config[port_name]['speed'] | default('100000') == "100000" %} + {% if fanout_port_config[port_name]['speed'] | default('100000') in ["100000", "200000", "400000", "800000"] %} "fec" : "rs", {% endif %} {% if port_name in device_conn[inventory_hostname] %} + {% if 'linktraining' in device_conn[inventory_hostname][port_name] %} + {% if 'on' in device_conn[inventory_hostname][port_name]['linktraining'] %} + "link_training": "on", + {% elif 'off' in device_conn[inventory_hostname][port_name]['linktraining'] %} + "link_training": "off", + {% endif %} + {% endif %} {% if 'autoneg' in device_conn[inventory_hostname][port_name] %} {% if 'on' in device_conn[inventory_hostname][port_name]['autoneg'] %} "autoneg": "on",