SONiC Device Profile
Background
Devices are recognized in the Apstra environment with device profiles. They capture device-specific semantics, which are required for the Apstra software to discover them and to run network configs that work well for the datapath once inside the blueprint.
Device profiles are REST entities, which enable you to create, edit, delete, and list during the design phase. Device profiles are used to create interface maps, which get directly used inside the Apstra config rendering engine when blueprints are deployed.
This document covers the knowledge required to create (and edit) a semantically correct Sonic DP, so that not only does it pass the validations in place in Apstra which ensure the right DP is created in the database, but also honors the vendor semantic requirement applicable to the device so that it does not result in deploy failure when the generated configuration is pushed to the network device.
Problem Statement
Device profiles are vendor semantics-aware data structures. To create a device profile, you need the device specification from the vendor. To create a valid and config-friendly JSON, you'll need to translate these specifications into the Apstra device profile data model.
Solution
The high level data model is the same for all DPs. The same keys are used for every device profile. The way we get the values might differ, or might be loaded with a vendor constraint. The document enlists the following:
- The schema of the DP and the nested elements inside the DP.
- The meaning of each key value pair in the schema.
- The vendor specific recipe the values are populated.
- List any constraints, corner cases to consider, especially for port configurations for certain (group of) models.
- Any lessons learnt along the way creating those DPs already in production useful in creating future ones.
User Interface
When you create device profiles from the Apstra GUI, some of your entries are semantically validated. It's not completely capable of ensuring deep vendor-specific constraints and requirements though. With the exact vendor specification, the GUI assists you with creating a semantically valid DP which becomes part of the Apstra database data model.
Alternatively, you can write your own Python code that contains the vendor specifications, normalize it as per Apstra DP data model and generate the json to then import with the GUI.
Selector information
Entering the correct information in all four of the selector fields is critical for the device to get matched to the device profile.
Selector Field | Value | Command to get the information on device |
---|---|---|
model | 0x21 | show platform syseeprom |
manufacturer | If 0x2D in syseeprom, 0x2D else 0x2B | show platform syseeprom |
OS family | SONiC | Show version |
version | .* | Show version |
Capabilities
If you have the device specification, you can obtain its hardware and software capabilities for entry into the device profile.
The table below contains commonly found values in SONiC devices (based on qualified devices).
Selector Field | Value | Command to get the information on device |
---|---|---|
userland | 64 (int) | Does not affect config |
form_factor | ‘1RU’ (string) | Does not affect config |
ecmp_limit | 64 (int) | Does not affect config |
asic | ‘T2’ (string) | Does not affect config |
cpu | ‘x86’ (string) | Does not affect config |
ram | 16 (int) (Note, the unit is in GB) | Does not affect config |
onie | True (bool) (default) | Does not affect config |
lxc | True (bool) (default) | Does not affect config |
Interface naming conventions
Sonic follows the naming conventions per the sonic port name file as found Azure SONIC on the github master. https://github.com/Azure/SONiC/blob/master/doc/sonic-port-name.md
To create a SONIC device profile, you must read through the device specific port_config.ini (for example, sonic-buildimage/device/mellanox/x86_64-mlnx_msn2100-r0/ACS-MSN2100/port_config.ini) file and follow the instructions in the above link to come up with the right interface names.
The port_congi.ini specifies interface names that SONiC uses. The device profile must match interface names which will generate the PORT configs in the configuration file (config_db.json) . For this document purposes, port_config.ini and config_db.json should have the same interface naming standard. Use those interface names in your DP along with the lane numbers provided in the port_cfg.ini file. Once a device profile has been generated based on the aforementioned steps, Apstra will use that along with the LD to generate the Interface Map (IM). Apstra as part of its validation will make sure that the IM (which describes the port and its speeds) are indeed available and supported under “/usr/share/sonic/device/ x86_64-mlnx_msn2100-r0/ACS-MSN2100/port_config.ini” . This validation is performed to make sure SONiC NOS stack does not fail due to unsupported port configuration (in config_db.json) getting wrongly generated in Apstra due to wrong DP. So it is important that the end user makes sure the DP that is generated for a SONiC platform has the correct interface names and lane maps as reflected in port_config.ini file for that particular platform. A platform may have a few different port_config.ini files part of different HWSKUs for that platform. Apstra will try to validate the generated port configs with any of the available options for that platform. Apstra currently does not use the Dynamic Port breakout feature which is on-going in the SONiC project.
Troubleshooting
Device mismatch usually occurs at the beginning of a device’s lifecycle. If the device is not selecting the device profile, check the four selector fields in the device profile.
If ports are configured with incorrect speeds or if the OS-specific port constraints were not handled in the device profile or interface map, then deploy errors could be raised.
A possible flow for root cause would be:
- Check the DP for obvious port capabilities errors. Is the port really capable of the speeds the DP has configured. The device specific port_config.ini Sonic open source project is a good resource to parse for ERROR messages.
- Check if the DP has configured autoneg or disabled interfaces correctly. Autoneg and disabled can both be expressed in the interface setting field.
- When debugging the interface names and lane mapping, please take a look at the corresponding port_config.ini. As an example for AS5712-54X edgecore/accton box we can get the port_config.ini file that has the details like lane/name/alias at https://github.com/Azure/sonic-buildimage/tree/master/device/accton/x86_64-accton_as5712_54x-r0/Accton-AS5712-54X
- You can find the naming constraints in the official SONiC documentation. For example if you want to generate the interface names for Accton 5712 54X running SONIC, the port_config.ini is the authority. https://github.com/Azure/sonic-buildimage/blob/master/device/accton/x86_64-accton_as5712_54x-r0/Accton-AS5712-54X/port_config.ini Sometimes the device might have inter-port constraints. For SONiC, it's generally laid out in the port_config.ini file. A specific platform could have multiple port_config.ini files, and a specific manufacturer with each port_config.ini file residing in their on HWSKU folders in the sonic image (like the one referenced above). The ability to try out different port speeds on (outside of what is listed in the port_config.ini) will need knowledge of the chipset and also the physical switch manufacturer to see what can be achieved. This information may not be available in any white papers unless requested of vendors.
Example: DP and port_config.ini
Port_config.ini from sonic-buildimage is below for Dell_Z9100 (x86_64-dell_z9100_c2538-r0/Force10-Z9100-C32
# name lanes alias index Ethernet0 49,50,51,52 hundredGigE1/1 1 Ethernet4 53,54,55,56 hundredGigE1/2 2 Ethernet8 57,58,59,60 hundredGigE1/3 3 Ethernet12 61,62,63,64 hundredGigE1/4 4 Ethernet16 65,66,67,68 hundredGigE1/5 5 Ethernet20 69,70,71,72 hundredGigE1/6 6 Ethernet24 73,74,75,76 hundredGigE1/7 7 Ethernet28 77,78,79,80 hundredGigE1/8 8 Ethernet32 37,38,39,40 hundredGigE1/9 9 Ethernet36 33,34,35,36 hundredGigE1/10 10 Ethernet40 45,46,47,48 hundredGigE1/11 11 Ethernet44 41,42,43,44 hundredGigE1/12 12 Ethernet48 81,82,83,84 hundredGigE1/13 13 Ethernet52 85,86,87,88 hundredGigE1/14 14 Ethernet56 89,90,91,92 hundredGigE1/15 15 Ethernet60 93,94,95,96 hundredGigE1/16 16 Ethernet64 97,98,99,100 hundredGigE1/17 17 Ethernet68 101,102,103,104 hundredGigE1/18 18 Ethernet72 105,106,107,108 hundredGigE1/19 19 Ethernet76 109,110,111,112 hundredGigE1/20 20 Ethernet80 21,22,23,24 hundredGigE1/21 21 Ethernet84 17,18,19,20 hundredGigE1/22 22 Ethernet88 29,30,31,32 hundredGigE1/23 23 Ethernet92 25,26,27,28 hundredGigE1/24 24 Ethernet96 117,118,119,120 hundredGigE1/25 25 Ethernet100 113,114,115,116 hundredGigE1/26 26 Ethernet104 125,126,127,128 hundredGigE1/27 27 Ethernet108 121,122,123,124 hundredGigE1/28 28 Ethernet112 5,6,7,8 hundredGigE1/29 29 Ethernet116 1,2,3,4 hundredGigE1/30 30 Ethernet120 13,14,15,16 hundredGigE1/31 31 Ethernet124 9,10,11,12 hundredGigE1/32 32
Translate port_config to a port-to-lane_map data structure using parse.py script:
Parse.py ========= #!/usr/bin/python # Copyright (c) 2017 Apstrktr, Inc. All rights reserved. # Apstrktr, Inc. Confidential and Proprietary. # # This source code is licensed under End User License Agreement found in the # LICENSE file at http://apstra.com/eula # pylint: disable=line-too-long import sys from pprint import pprint # Run the program as ./parse.py <path_to_sonic_platform_port_config.ini> # ex: ./parse.py sonic-buildimage/device/mellanox/x86_64-mlnx_msn2100-r0/ACS-MSN2100/port_config.ini def get_lanemap(buf): if not buf: return None d = {} interface_indices = [] for line in buf.split('\n'): if line.startswith('#'): continue words = line.split(' ') words = [word for word in words if len(word)] if not len(words): continue intf = words[0][8:] lane = words[1].split(',') interface_indices.append(intf) if len(lane) > 1: one = 'Ethernet' + str(intf) two = 'Ethernet' + str(int(intf)+1) three = 'Ethernet' + str(int(intf)+2) four = 'Ethernet' + str(int(intf)+3) d.update({one:lane[0]}) d.update({two:lane[1]}) d.update({three:lane[2]}) d.update({four:lane[3]}) else: d.update({words[0]:words[1]}) return {'interface_names' : interface_indices, 'lane_mapping' : d} def parse_portconfig(f): buf = '' with open(f, 'r') as stream: buf = stream.read() return {'<Platform>': get_lanemap(buf)} if __name__ == '__main__': assert len(sys.argv) > 1, "Missing port_config.ini in cmdline" print "Collecting lane information from ", sys.argv[1] pprint(parse_portconfig(sys.argv[1])) print "=========================================================================================" print " Substitute <Platform> with an identifier for the platform" print " Append the dump into sdk/device-profile/sonic.py's sonic_device_info dictionary" print "=========================================================================================" To run parse.py parse.py <Path to the port_config.ini file from sonic_buildimage> Example: parse.py sonic-buildimage/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-C32/port_config.ini Collecting lane information from sonic-buildimage/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-C32/port_config.ini {'<Platform>': {'interface_names': ['0', '4', '8', '12', '16', '20', '24', '28', '32', '36', '40', '44', '48', '52', '56', '60', '64', '68', '72', '76', '80', '84', '88', '92', '96', '100', '104', '108', '112', '116', '120', '124'], 'lane_mapping': {'Ethernet0': '49', 'Ethernet1': '50', 'Ethernet10': '59', 'Ethernet100': '113', 'Ethernet101': '114', 'Ethernet102': '115', 'Ethernet103': '116', 'Ethernet104': '125', 'Ethernet105': '126', 'Ethernet106': '127', 'Ethernet107': '128', 'Ethernet108': '121', 'Ethernet109': '122', 'Ethernet11': '60', 'Ethernet110': '123', 'Ethernet111': '124', 'Ethernet112': '5', 'Ethernet113': '6', 'Ethernet114': '7', 'Ethernet115': '8', 'Ethernet116': '1', 'Ethernet117': '2', 'Ethernet118': '3', 'Ethernet119': '4', 'Ethernet12': '61', 'Ethernet120': '13', 'Ethernet121': '14', 'Ethernet122': '15', 'Ethernet123': '16', 'Ethernet124': '9', 'Ethernet125': '10', 'Ethernet126': '11', 'Ethernet127': '12', 'Ethernet13': '62', 'Ethernet14': '63', 'Ethernet15': '64', 'Ethernet16': '65', 'Ethernet17': '66', 'Ethernet18': '67', 'Ethernet19': '68', 'Ethernet2': '51', 'Ethernet20': '69', 'Ethernet21': '70', 'Ethernet22': '71', 'Ethernet23': '72', 'Ethernet24': '73', 'Ethernet25': '74', 'Ethernet26': '75', 'Ethernet27': '76', 'Ethernet28': '77', 'Ethernet29': '78', 'Ethernet3': '52', 'Ethernet30': '79', 'Ethernet31': '80', 'Ethernet32': '37', 'Ethernet33': '38', 'Ethernet34': '39', 'Ethernet35': '40', 'Ethernet36': '33', 'Ethernet37': '34', 'Ethernet38': '35', 'Ethernet39': '36', 'Ethernet4': '53', 'Ethernet40': '45', 'Ethernet41': '46', 'Ethernet42': '47', 'Ethernet43': '48', 'Ethernet44': '41', 'Ethernet45': '42', 'Ethernet46': '43', 'Ethernet47': '44', 'Ethernet48': '81', 'Ethernet49': '82', 'Ethernet5': '54', 'Ethernet50': '83', 'Ethernet51': '84', 'Ethernet52': '85', 'Ethernet53': '86', 'Ethernet54': '87', 'Ethernet55': '88', 'Ethernet56': '89', 'Ethernet57': '90', 'Ethernet58': '91', 'Ethernet59': '92', 'Ethernet6': '55', 'Ethernet60': '93', 'Ethernet61': '94', 'Ethernet62': '95', 'Ethernet63': '96', 'Ethernet64': '97', 'Ethernet65': '98', 'Ethernet66': '99', 'Ethernet67': '100', 'Ethernet68': '101', 'Ethernet69': '102', 'Ethernet7': '56', 'Ethernet70': '103', 'Ethernet71': '104', 'Ethernet72': '105', 'Ethernet73': '106', 'Ethernet74': '107', 'Ethernet75': '108', 'Ethernet76': '109', 'Ethernet77': '110', 'Ethernet78': '111', 'Ethernet79': '112', 'Ethernet8': '57', 'Ethernet80': '21', 'Ethernet81': '22', 'Ethernet82': '23', 'Ethernet83': '24', 'Ethernet84': '17', 'Ethernet85': '18', 'Ethernet86': '19', 'Ethernet87': '20', 'Ethernet88': '29', 'Ethernet89': '30', 'Ethernet9': '58', 'Ethernet90': '31', 'Ethernet91': '32', 'Ethernet92': '25', 'Ethernet93': '26', 'Ethernet94': '27', 'Ethernet95': '28', 'Ethernet96': '117', 'Ethernet97': '118', 'Ethernet98': '119', 'Ethernet99': '120'}}} ========================================================================================= Substitute <Platform> with an identifier for the platform Append the dump into sdk/device-profile/sonic.py's sonic_device_info dictionary =========================================================================================
The output from above will become a dictionary entry in sonic_device_info in the sonic device_profile generator python file.
Corresponding Device Profile generated in Apstra:
{ "hardware_capabilities": { "asic": "TH", "cpu": "x86", "ecmp_limit": 64, "form_factor": "1RU", "ram": 16, "userland": 64 }, "id": "Force10-Z9100_SONiC", "label": "Dell Force10-Z9100_SONiC", "ports": [ { "column_id": 1, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 0, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet0", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"49,50,51,52\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet0", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"49,50,51,52\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 1, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 1, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet4", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"53,54,55,56\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet4", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"53,54,55,56\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 2, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 2, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet8", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"57,58,59,60\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet8", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"57,58,59,60\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 2, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 3, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet12", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"61,62,63,64\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet12", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"61,62,63,64\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 3, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 4, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet16", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"65,66,67,68\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet16", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"65,66,67,68\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 3, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 5, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet20", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"69,70,71,72\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet20", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"69,70,71,72\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 4, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 6, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet24", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"73,74,75,76\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet24", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"73,74,75,76\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 4, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 7, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet28", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"77,78,79,80\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet28", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"77,78,79,80\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 5, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 8, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet32", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"37,38,39,40\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet32", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"37,38,39,40\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 5, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 9, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet36", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"33,34,35,36\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet36", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"33,34,35,36\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 6, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 10, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet40", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"45,46,47,48\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet40", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"45,46,47,48\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 6, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 11, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet44", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"41,42,43,44\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet44", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"41,42,43,44\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 7, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 12, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet48", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"81,82,83,84\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet48", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"81,82,83,84\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 7, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 13, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet52", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"85,86,87,88\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet52", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"85,86,87,88\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 8, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 14, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet56", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"89,90,91,92\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet56", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"89,90,91,92\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 8, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 15, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet60", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"93,94,95,96\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet60", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"93,94,95,96\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 9, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 16, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet64", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"97,98,99,100\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet64", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"97,98,99,100\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 9, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 17, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet68", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"101,102,103,104\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet68", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"101,102,103,104\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 10, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 18, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet72", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"105,106,107,108\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet72", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"105,106,107,108\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 10, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 19, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet76", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"109,110,111,112\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet76", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"109,110,111,112\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 11, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 20, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet80", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"21,22,23,24\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet80", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"21,22,23,24\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 11, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 21, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet84", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"17,18,19,20\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet84", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"17,18,19,20\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 12, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 22, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet88", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"29,30,31,32\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet88", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"29,30,31,32\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 12, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 23, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet92", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"25,26,27,28\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet92", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"25,26,27,28\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 13, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 24, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet96", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"117,118,119,120\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet96", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"117,118,119,120\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 13, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 25, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet100", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"113,114,115,116\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet100", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"113,114,115,116\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 14, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 26, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet104", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"125,126,127,128\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet104", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"125,126,127,128\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 14, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 27, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet108", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"121,122,123,124\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet108", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"121,122,123,124\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 15, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 28, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet112", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"5,6,7,8\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet112", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"5,6,7,8\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 15, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 29, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet116", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"1,2,3,4\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet116", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"1,2,3,4\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 16, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 30, "row_id": 1, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet120", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"13,14,15,16\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet120", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"13,14,15,16\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] }, { "column_id": 16, "connector_type": "qsfp28", "failure_domain_id": 1, "panel_id": 1, "port_id": 31, "row_id": 2, "slot_id": 0, "transformations": [ { "interfaces": [ { "interface_id": 1, "name": "Ethernet124", "setting": "{\"interface\": {\"speed\": \"100000\", \"lane_map\": \"9,10,11,12\"}}", "speed": { "unit": "G", "value": 100 }, "state": "active" } ], "is_default": true, "transformation_id": 1 }, { "interfaces": [ { "interface_id": 1, "name": "Ethernet124", "setting": "{\"interface\": {\"speed\": \"40000\", \"lane_map\": \"9,10,11,12\"}}", "speed": { "unit": "G", "value": 40 }, "state": "active" } ], "is_default": false, "transformation_id": 2 } ] } ], "selector": { "manufacturer": "Dell|DELL", "model": "Z9100-ON", "os": "SONiC", "os_version": ".*" }, "slot_count": 0, "software_capabilities": { "lxc_support": false, "onie": true } }