{%- set PORT_ALL = [] %} {%- for port in PORT %} {%- if PORT_ALL.append(port) %}{% endif %} {%- endfor %} {%- if PORT_ALL | sort_by_port_index %}{% endif %} {%- set port_names_list_all = [] %} {%- for port in PORT_ALL %} {%- if port_names_list_all.append(port) %}{% endif %} {%- endfor %} {%- set port_names_all = port_names_list_all | join(',') -%} {%- set PORT_ACTIVE = [] %} {%- if DEVICE_NEIGHBOR is not defined %} {%- set PORT_ACTIVE = PORT_ALL %} {%- else %} {%- for port in DEVICE_NEIGHBOR.keys() %} {%- if PORT_ACTIVE.append(port) %}{%- endif %} {%- endfor %} {%- endif %} {%- if PORT_ACTIVE | sort_by_port_index %}{% endif %} {%- set port_names_list_active = [] %} {%- for port in PORT_ACTIVE %} {%- if port_names_list_active.append(port) %}{%- endif %} {%- endfor %} {%- set port_names_active = port_names_list_active | join(',') -%} {%- set tunnel_qos_remap_enable = false %} {%- if ((SYSTEM_DEFAULTS is defined) and ('tunnel_qos_remap' in SYSTEM_DEFAULTS) and (SYSTEM_DEFAULTS['tunnel_qos_remap']['status'] == 'enabled')) %} {%- set tunnel_qos_remap_enable = true %} {%- endif %} {%- set port_names_list_extra_queues = [] %} {%- for port in PORT_ACTIVE %} {% if ((generate_dscp_to_tc_map is defined) and tunnel_qos_remap_enable) and (('type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'LeafRouter' and DEVICE_NEIGHBOR_METADATA is defined and DEVICE_NEIGHBOR[port].name in DEVICE_NEIGHBOR_METADATA and DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[port].name].type == 'ToRRouter') or ('subtype' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['subtype'] == 'DualToR' and DEVICE_NEIGHBOR_METADATA is defined and DEVICE_NEIGHBOR[port].name in DEVICE_NEIGHBOR_METADATA and DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[port].name].type == 'LeafRouter')) %} {%- if port_names_list_extra_queues.append(port) %}{%- endif %} {%- endif %} {%- endfor %} {%- set pfc_to_pg_map_supported_asics = ['mellanox', 'barefoot', 'marvell'] -%} {%- set backend_device_types = ['BackEndToRRouter', 'BackEndLeafRouter'] -%} {%- set apollo_resource_types = ['DL-NPU-Apollo'] -%} { {% if (generate_tc_to_pg_map is defined) and tunnel_qos_remap_enable %} {{- generate_tc_to_pg_map() }} {% else %} "TC_TO_PRIORITY_GROUP_MAP": { "AZURE": { "0": "0", "1": "0", "2": "0", "3": "3", "4": "4", "5": "0", "6": "0", "7": "7" } }, {% endif %} "MAP_PFC_PRIORITY_TO_QUEUE": { "AZURE": { "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "7": "7" } }, {% if (generate_tc_to_queue_map is defined) and tunnel_qos_remap_enable %} {{- generate_tc_to_queue_map() }} {% else %} "TC_TO_QUEUE_MAP": { "AZURE": { "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "7": "7" } }, {% endif %} {% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] in backend_device_types and 'storage_device' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['storage_device'] == 'true' %} "DOT1P_TO_TC_MAP": { "AZURE": { "0": "1", "1": "0", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "7": "7" } }, {% elif (generate_dscp_to_tc_map is defined) and tunnel_qos_remap_enable %} {{- generate_dscp_to_tc_map() }} {% else %} "DSCP_TO_TC_MAP": { "AZURE": { "0" : "1", "1" : "1", "2" : "1", "3" : "3", "4" : "4", "5" : "2", "6" : "1", "7" : "1", "8" : "0", "9" : "1", "10": "1", "11": "1", "12": "1", "13": "1", "14": "1", "15": "1", "16": "1", "17": "1", "18": "1", "19": "1", "20": "1", "21": "1", "22": "1", "23": "1", "24": "1", "25": "1", "26": "1", "27": "1", "28": "1", "29": "1", "30": "1", "31": "1", "32": "1", "33": "1", "34": "1", "35": "1", "36": "1", "37": "1", "38": "1", "39": "1", "40": "1", "41": "1", "42": "1", "43": "1", "44": "1", "45": "1", "46": "5", "47": "1", "48": "6", "49": "1", "50": "1", "51": "1", "52": "1", "53": "1", "54": "1", "55": "1", "56": "1", "57": "1", "58": "1", "59": "1", "60": "1", "61": "1", "62": "1", "63": "1" } }, {% endif %} {% if (generate_tc_to_dscp_map is defined) and tunnel_qos_remap_enable %} {{- generate_tc_to_dscp_map() }} {% endif %} {% if 'resource_type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['resource_type'] in apollo_resource_types %} "SCHEDULER": { "scheduler.0": { "type" : "DWRR", "weight": "1" }, "scheduler.1": { "type" : "DWRR", "weight": "1" }, "scheduler.2": { "type" : "DWRR", "weight": "100" } }, {% else %} "SCHEDULER": { "scheduler.0": { "type" : "DWRR", "weight": "14" }, "scheduler.1": { "type" : "DWRR", "weight": "15" } }, {% endif %} {% if asic_type in pfc_to_pg_map_supported_asics %} "PFC_PRIORITY_TO_PRIORITY_GROUP_MAP": { {% if port_names_list_extra_queues|length > 0 %} "AZURE_DUALTOR": { "2": "2", "3": "3", "4": "4", "6": "6" }, {% endif %} "AZURE": { "3": "3", "4": "4" } }, {% endif %} "PORT_QOS_MAP": { {% if generate_global_dscp_to_tc_map is defined %} {{- generate_global_dscp_to_tc_map() }} {% else %} "global": { "dscp_to_tc_map" : "[DSCP_TO_TC_MAP|AZURE]" }{% if PORT_ACTIVE %},{% endif %} {% endif %} {% for port in PORT_ACTIVE %} "{{ port }}": { {% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] in backend_device_types and 'storage_device' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['storage_device'] == 'true' %} "dot1p_to_tc_map" : "[DOT1P_TO_TC_MAP|AZURE]", {% else %} {% if different_dscp_to_tc_map and port not in port_names_list_extra_queues and tunnel_qos_remap_enable %} "dscp_to_tc_map" : "[DSCP_TO_TC_MAP|AZURE_UPLINK]", {% else %} "dscp_to_tc_map" : "[DSCP_TO_TC_MAP|AZURE]", {% endif %} {% endif %} "tc_to_queue_map" : "[TC_TO_QUEUE_MAP|AZURE]", "tc_to_pg_map" : "[TC_TO_PRIORITY_GROUP_MAP|AZURE]", "pfc_to_queue_map": "[MAP_PFC_PRIORITY_TO_QUEUE|AZURE]", {% if asic_type in pfc_to_pg_map_supported_asics %} {% if port in port_names_list_extra_queues %} "pfc_to_pg_map" : "[PFC_PRIORITY_TO_PRIORITY_GROUP_MAP|AZURE_DUALTOR]", {% else %} "pfc_to_pg_map" : "[PFC_PRIORITY_TO_PRIORITY_GROUP_MAP|AZURE]", {% endif %} {% endif %} {% if port in port_names_list_extra_queues %} "pfc_enable" : "2,3,4,6", {% else %} "pfc_enable" : "3,4", {% endif %} "pfcwd_sw_enable" : "3,4" }{% if not loop.last %},{% endif %} {% endfor %} }, {% if generate_wred_profiles is defined %} {{- generate_wred_profiles() }} {% else %} "WRED_PROFILE": { "AZURE_LOSSLESS" : { "wred_green_enable" : "true", "wred_yellow_enable" : "true", "wred_red_enable" : "true", "ecn" : "ecn_all", "green_max_threshold" : "2097152", "green_min_threshold" : "1048576", "yellow_max_threshold" : "2097152", "yellow_min_threshold" : "1048576", "red_max_threshold" : "2097152", "red_min_threshold" : "1048576", "green_drop_probability" : "5", "yellow_drop_probability": "5", "red_drop_probability" : "5" } }, {% endif %} "QUEUE": { {% for port in PORT_ACTIVE %} "{{ port }}|3": { "scheduler" : "[SCHEDULER|scheduler.1]", "wred_profile": "[WRED_PROFILE|AZURE_LOSSLESS]" }, {% endfor %} {% if 'resource_type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['resource_type'] in apollo_resource_types %} {% for port in PORT_ACTIVE %} "{{ port }}|4": { "scheduler" : "[SCHEDULER|scheduler.2]", "wred_profile": "[WRED_PROFILE|AZURE_LOSSLESS]" }, {% endfor %} {% else %} {% for port in PORT_ACTIVE %} "{{ port }}|4": { "scheduler" : "[SCHEDULER|scheduler.1]", "wred_profile": "[WRED_PROFILE|AZURE_LOSSLESS]" }, {% endfor %} {% endif %} {% for port in PORT_ACTIVE %} "{{ port }}|0": { "scheduler": "[SCHEDULER|scheduler.0]" }, {% endfor %} {% for port in PORT_ACTIVE %} "{{ port }}|1": { "scheduler": "[SCHEDULER|scheduler.0]" }, {% endfor %} {% for port in PORT_ACTIVE %} "{{ port }}|2": { {% if port in port_names_list_extra_queues %} "scheduler" : "[SCHEDULER|scheduler.1]", "wred_profile": "[WRED_PROFILE|AZURE_LOSSLESS]" {% else %} "scheduler": "[SCHEDULER|scheduler.0]" {% endif %} }, {% endfor %} {% for port in PORT_ACTIVE %} "{{ port }}|5": { "scheduler": "[SCHEDULER|scheduler.0]" }, {% endfor %} {% for port in PORT_ACTIVE %} "{{ port }}|6": { {% if port in port_names_list_extra_queues %} "scheduler" : "[SCHEDULER|scheduler.1]", "wred_profile": "[WRED_PROFILE|AZURE_LOSSLESS]" {% else %} "scheduler": "[SCHEDULER|scheduler.0]" {% endif %} }{% if not loop.last %},{% endif %} {% endfor %} } }