How to install Sonic on Celestica dx010 100g switch In this document i am going to talk about installation of Sonic Network operating system on celestica dx010 32x100G switches If you do these steps you'll end up with a l2 switch that can forward 100g per port. Keep in mind that Spanning tree is still an issue on Sonic. Important : Make sure you check the Sonic HCL, if your model is not there, don't try to do this installation. Upgrading or re-installing onie Onie is the Network operating system loader created by open network computing. It is a software to create zero touch provisioning on open compute / Bare metal switches. there are some binaries supplied by open compute platform, and you can compile or cross compile your version of it. By your version i meant the model of the bare metal switch. before 2016 ONL which is sonic based on, supported powerpc cpu models however with sonic you are stuck with intel and some arm cpu's, no powerpc cpu is supported or can be compiled. Compiling onie To compile onie you need to read this documentation and have many headaches. I can't get in to details here because it will use a lot of space but it is a good documentation and pretty straight-forward to do. Onie build documentation Basically it will create a folder with many permutations of onie for every device out there. if your device is a Powerpc platform then you'll need to do a cross-compile installation or upgrading onie using u-boot After powercycle press any key to stop u-boot process. take backup of current environment using printenv output should look like below, please copy and paste it somwhere safe. Click for environment details ```=> printenv active=image2 autoload=no backup=image1 baudrate=115200 bootactive=fsload 1000000 $active; bootm 1000074 bootargs=root=dev/ram console=ttyS0,115200 bootbackup=fsload 1000000 $backup; bootm 1000074 bootcmd=run check_boot_reason; run nos_bootcmd; run onie_bootcmd bootdelay=3 bootfile=uImage bootimage1=fsload 1000000 image1; bootm 1000074 bootimage2=fsload 1000000 image2; bootm 1000074 check_boot_reason=if test -n $onie_boot_reason; then setenv onie_bootargs boot_reason=$onie_boot_rea son; run onie_bootcmd; fi; consoledev=ttyS0 dboot=setenv bootargs root=/dev/ram mtdparts=physmap-flash.0:126336k(jffs2),4096k(onie),128k(u-boot- env),512k(u-boot) quiet console=ttyS0,$baudrate $dbootfrom && bootimg $dkaddr $draddr $ddaddr ddaddr=0x0D000000 dhcp_user-class=powerpc-quanta_ly2r-r0_uboot dhcp_vendor-class-identifier=powerpc-quanta_ly2r-r0 diag_bootcmd=run dsdboot || run flash_bootcmd || run dnetboot dkaddr=0x0A000000 dmemerase=mw $dkaddr 0 100; mw $draddr 0 100; mw $ddaddr 0 100; setenv dbootfrom dnetboot=run dmemerase; run dnetcheck; if test -n $dbootfrom && test $dbootfrom = netboot; then run dboot; fi dnetcheck=echo Checking diag from tftp server...; if tftp $dkaddr uImage && tftp $draddr uInitrd2m & & tftp $ddaddr ly2r.dtb; then setenv dbootfrom netboot; fi draddr=0x0B000000 dsdboot=run dmemerase; run dsdcheck; if test -n $dbootfrom && test $dbootfrom = sdboot; then run dbo ot; fi dsdcheck=echo Checking diag from Secure Digital Card...; if mmcinfo && ext2load mmc 0:1 $dkaddr uIma ge && ext2load mmc 0:1 $draddr uInitrd2m && ext2load mmc 0:1 $ddaddr ly2r.dtb; then setenv dbootfrom sdboot; fi ethact=eTSEC1 ethaddr=a8:1e:84:58:67:10 flash_bootcmd=setenv bootargs root=/dev/ram mtdparts=physmap-flash.0:58368k(jffs2),3968k(ramdisk),30 72k(kernel),128k(dtb),60800k(empty),4096k(onie),128k(u-boot-env),512k(u-boot) console=ttyS0,$baudrat e; bootm EBCE0000 EB900000 EBFE0000 hostname=LY2RP2020 hwconfig=usb1:dr_mode=host,phy_type=ulpi,esdhc ipaddr=192.168.2.1 loadaddr=1000000 loads_echo=1 mtddevnum=0 mtdids=nor0=nor0 [0/0] mtdparts=nor0:65536k(jffs2),60800k(open),4096k(ONIE),128k(u-boot-env),512k(u-boot) nfsboot=setenv bootargs root=/dev/nfs rw nfsroot=$serverip:$rootpath ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off console=$consoledev,$baudrate $othbootargs;tftp $loadaddr $bootfile;tftp $fdtaddr $fdtfile;bootm $loadaddr - $fdtaddr nos_bootcmd=run bootactive; run bootbackup; run bootimage1; run bootimage2 onie_args=run onie_initargs onie_platformargs onie_bootcmd=echo Loading Open Network Install Environment ...; echo Platform: $onie_platform ; echo Version : $onie_version ; cp.b $onie_start $loadaddr ${onie_sz.b} && run onie_args && bootm ${loadaddr} onie_dropbear_dss_host_key=begin-base64@600@d#AAAAB3NzaC1kc3MAAACBAOCuKIyK2CzC6aUUNVfJLj6SlJ+anzWWUbuqtyn4#oty/BYzbG7rk+9exB/I9SOBMf0n8BHGJOdS+hXVFe8CAGf0fI7AlHF0zTZCN#kZAW70T175b4AZC8zCegABBKv86s0s7OT4qOXLCeYjCM9gMWHRDAYHDfzktY#vBHapERPhIHzAAAAFQDfAxkC7+W/gxwO8BAg9Se08laRBwAAAIEAyjX1GFoX#oqPyEVn/qQ85xXpo3fr3UNT/NmZZGXQFZ+pUnHDOO6OwTZB0XLpPxzQ8WUVJ#Bt9d2tLC5Sw6rCp7odbp0Od9uWOc7ljt7HKtQVuodB/yjt9KbQc69sOY25bC#efY2c0IcZ9LiNbQbH4COR6zGMLzA2XgHQ7uJ7xmV1fsAAACBAJP+ZxxFAehm#H9Ac5HUHYG4ithFYK7l5MHRrA/pEGuqwUeezUKO9B8soCP9r4SoT/vLzUxQ5#TMwyANyi7BRjKnkjrRjJ/r6o9t5PS7YuGm/3G6hOL7UHJoDIDFuznL9NG+f4#GhHF6NElGGnpmATry0+5gTN2KDYlZLoMriGaGBLVAAAAFQCDpjU05iU1Lbci#IvGrJfEo2HQweg==#====# onie_dropbear_rsa_host_key=begin-base64@600@r#AAAAB3NzaC1yc2EAAAADAQABAAAAgQC8AVEAfeuMSVYNPJPULsBYL0KrFOOM#62CmnWNODmX230TZYW/DDv/NSOMUNFUR109MpzEyy8WmNqqNl+h0X3dK/KUy#H4iZhIxXXYaRu8Yywfaf/xXNnCcQqdj5JYmNGlaRggcvkbYhnX2Hus7LrkGP#k0xdkl5erOsUGPmnf5RLNQAAAIAqqn3Qh8MiBi6iOGIwICAEo00U+FufyncX#uNYli7z2JrtAPg2YDdpdozHtjubTcrKLadIPfhEv5G4WTigx6Mxwcw1oHUon#LoBzMCEjULMpyReO5xQcyV0WTLyPncPgqh4wtT7gr2ePkEASwMgcIiXu0tV9#Q81k8UOcMZQz5kc3QQAAAEEA8mO+xK2LBWrmT37yh3c4xbg/Naj60CPxzRKR#HF0w6FzL8BcCAL009z/YHtIJVpoXo321c8DNazZ47hQEoQpv0QAAAEEAxo/Q#1zXuEwsJUqrOE5RZ8KdfsQSEw9I+Pl8pDNBV06MTbnQPgjMr9beD6NfSo1po#uZmbPVzaakzOtyduVCqCJQ==#====# onie_initargs=setenv bootargs quiet console=$consoledev,$baudrate onie_machine=quanta_ly2r onie_machine_rev=0 onie_platform=powerpc-quanta_ly2r-r0 onie_platformargs=setenv bootargs $bootargs serial_num=${serial#} eth_addr=$ethaddr $onie_bootargs $onie_debugargs onie_rescue=setenv onie_boot_reason rescue && boot onie_start=0xefb60000 onie_sz.b=0x00400000 onie_uninstall=setenv onie_boot_reason uninstall && boot onie_update=setenv onie_boot_reason update && boot onie_vendor_id=7244 onie_version=2015.05-v1.2-9d597eb partition=nor0,0 platform=quanta_ly2r ramboot=setenv bootargs root=/dev/ram rw console=$consoledev,$baudrate $othbootargs; tftp $ramdiskaddr $ramdiskfile;tftp $loadaddr $bootfile;tftp $fdtaddr $fdtfile;bootm $loadaddr $ramdiskaddr $fdtaddr rootpath=/opt/nfsroot serial#=QTFCEA7070054 serverip=192.168.2.11 stderr=serial stdin=serial stdout=serial ver=U-Boot 2010.12 (Oct 14 2016 - 16:28:02) - ONIE 2015.05-v1.2-9d597eb Environment size: 5059/8188 bytes``` We are going to change environment as shown and explanied below, Set ip address to eth0/management port of bare metal switch setenv ipaddr 4.3.2.2 setenv netmask 255.255.255.252 Specify tftp server address setenv serverip 4.3.2.1 save changes save Make sure have the same subnet with tftp server After this point all the procedure will be destructive, please keep in mind that you might loose the current boot configuration or configurations within device. specify space in flash setenv start 0xefb60000 setenv sz.b 0x4a0000 upload file to ram tftp onie-quanta_ly2r-r0.bin Disable protection on flash and erase the old onie protect off $start +${sz.b} && erase $start +${sz.b} start flashing cp.b $fileaddr $start ${sz.b} && protect on $start +${sz.b} after this point Onie will be upgraded/installed and procedure will reset the device booting into new onie and it's environment Installing sonic Before install Sonic is a buggy software, there are many missing features, and because of that there are many builds for every vendor the list is here we are going to use 202111 edition on celestica dx010 installation Onie will boot up and you will be greeted with onie-discovery process, unless you did special dhcp configurations, we will need to stop onie-discovery onie-discover-stop then the ip addressing ip addr add 4.3.2.2/30 dev eth0 ip link set up dev eth0 start installing sonic onie-nos-install tftp://4.3.2.1/sonic-buildimage.broadcom at this point onie installer will do its thing after 5-10 minutes you will be greeted with sonics login screen After install Default user name: admin default pass : YourPaSsWoRd By default sonic names every 100g interface with steps of 4, Ethernet0,Ethernet4,Ethernet8 and there are aliases for you to see which port are you working on admin@sonic:~$ show interfaces status Interface Lanes Speed MTU FEC Alias Vlan Oper Admin Type Asym PFC ----------- --------------- ------- ----- ----- ------- ------ ------ ------- -------------- ---------- Ethernet0 65 10G 9100 N/A Eth1/1 routed down down QSFP+ or later N/A Ethernet1 66 10G 9100 N/A Eth1/2 routed down down QSFP+ or later N/A Ethernet2 67 10G 9100 N/A Eth1/3 routed down down QSFP+ or later N/A Ethernet3 68 10G 9100 N/A Eth1/4 routed down down QSFP+ or later N/A Ethernet4 69 10G 9100 N/A Eth2/1 routed down down QSFP+ or later N/A Ethernet5 70 10G 9100 N/A Eth2/2 routed down down QSFP+ or later N/A Ethernet6 71 10G 9100 N/A Eth2/3 routed down down QSFP+ or later N/A Ethernet7 72 10G 9100 N/A Eth2/4 routed down down QSFP+ or later N/A Ethernet8 73,74,75,76 100G 9100 N/A Eth3 routed down up N/A N/A Ethernet12 77,78,79,80 100G 9100 N/A Eth4 routed down up N/A N/A Ethernet16 33,34,35,36 100G 9100 N/A Eth5 routed down up N/A N/A Ethernet20 37,38,39,40 100G 9100 N/A Eth6 routed down up N/A N/A Ethernet24 41,42,43,44 100G 9100 N/A Eth7 routed down up N/A N/A Ethernet28 45,46,47,48 100G 9100 N/A Eth8 routed down up N/A N/A Ethernet32 49,50,51,52 100G 9100 N/A Eth9 routed down up N/A N/A Ethernet36 53,54,55,56 100G 9100 N/A Eth10 routed down up N/A N/A Ethernet40 57,58,59,60 100G 9100 N/A Eth11 routed down up N/A N/A Ethernet44 61,62,63,64 100G 9100 N/A Eth12 routed down up N/A N/A Ethernet48 81,82,83,84 100G 9100 N/A Eth13 routed down up N/A N/A Ethernet52 85,86,87,88 100G 9100 N/A Eth14 routed down up N/A N/A Ethernet56 89,90,91,92 100G 9100 N/A Eth15 routed down up N/A N/A Ethernet60 93,94,95,96 100G 9100 N/A Eth16 routed down up N/A N/A Ethernet64 97,98,99,100 100G 9100 N/A Eth17 routed down up N/A N/A Ethernet68 101,102,103,104 100G 9100 N/A Eth18 routed down up N/A N/A Ethernet72 105,106,107,108 100G 9100 N/A Eth19 routed down up N/A N/A Ethernet76 109,110,111,112 100G 9100 N/A Eth20 routed down up N/A N/A Ethernet80 1,2,3,4 100G 9100 N/A Eth21 routed down up N/A N/A Ethernet84 5,6,7,8 100G 9100 N/A Eth22 routed down up N/A N/A Ethernet88 9,10,11,12 100G 9100 N/A Eth23 routed down up N/A N/A Ethernet92 13,14,15,16 100G 9100 N/A Eth24 routed down up N/A N/A Ethernet96 17 25G 9100 N/A Eth25/1 routed down down QSFP+ or later N/A Ethernet97 18 25G 9100 N/A Eth25/2 routed down down QSFP+ or later N/A Ethernet98 19 25G 9100 N/A Eth25/3 routed down down QSFP+ or later N/A Ethernet99 20 25G 9100 N/A Eth25/4 routed down down QSFP+ or later N/A Ethernet100 21,22,23,24 100G 9100 N/A Eth26 routed down up N/A N/A Ethernet104 25,26,27,28 100G 9100 N/A Eth27 routed down up N/A N/A Ethernet108 29,30,31,32 40G 9100 N/A Eth28 routed down up QSFP+ or later N/A Ethernet112 113,114,115,116 100G 9100 N/A Eth29 routed down up N/A N/A Ethernet116 117,118,119,120 40G 9100 N/A Eth30 routed down up QSFP+ or later N/A Ethernet120 121,122,123,124 100G 9100 N/A Eth31 routed down up N/A N/A Ethernet124 125,126,127,128 100G 9100 N/A Eth32 routed down up N/A N/A Sonic has some problems, it's not the news, it's a fact. One of them is this installation media doesn't create a running environment, to do that follow the steps below sudo sonic-cfggen --preset l2 -p -H -k Seastone-DX010 -w sudo config reload -y sudo reboot Clear the IP addresses from each interface show runningconfiguration interfaces | grep \| | awk -F'"' '{ print $2 }' | awk -F'|' '{ print "sudo config interface ip remove "$1" "$2 }' > /var/tmp/remove-l3-ips bash /var/tmp/remove-l3-ips rm -f /var/tmp/remove-l3-ips Configure sonic Layer1 Every port and platform or asic has different abilities or features, for example you can breakout every port on a celestica dx010 how ever an edge-core AS9716-32D will only do breakouts on Ethernet0-20 which is the top row of switch. I was able to work with 3rdparty qsfp modules on sonic however i couldn't find an HCL about qsfps . Breakouts You neeed to do everything written on after install to be able to do breakouts. Supported breakouts are ; 1x100G[100g] 1x100G[40g] 2x50G[50G] 4x25G[25G] 4x25G[10G] to break out 1 port to 4 10g ports sudo config interface breakout Ethernet96 4x25G[10G] -y a normal output should look like below, after this you will need to reboot the switch. admin@sonic:~$ sudo config interface breakout Ethernet96 4x25G[10G] -y Running Breakout Mode : 1x100G[40G] Target Breakout Mode : 4x25G[10G] Ports to be deleted : { "Ethernet96": "100000" } Ports to be added : { "Ethernet96": "25000", "Ethernet97": "25000", "Ethernet98": "25000", "Ethernet99": "25000" } After running Logic to limit the impact Final list of ports to be deleted : { "Ethernet96": "100000" } Final list of ports to be added : { "Ethernet96": "25000", "Ethernet97": "25000", "Ethernet98": "25000", "Ethernet99": "25000" } sonic_yang(6):Note: Below table(s) have no YANG models: SNMP, SNMP_COMMUNITY Below Config can not be verified, It may cause harm to the system {} Do you wish to Continue? [y/N]: y Breakout process got successfully completed. Please note loaded setting will be lost after system reboot. To preserve setting, run `config save`. Dont forget to save :) admin@sonic:~$ sudo config save Existing files will be overwritten, continue? [y/N]: y Running command: /usr/local/bin/sonic-cfggen -d --print-data > /etc/sonic/config_db.json You will reboot the switch so it can show newly emerged ports. After reboot you will have Ethernet 96 to 99, set the speeed to 10g on those interfaces config interface speed Ethernet96 10000 And start the port, config interface startup Ethernet96 Do this for every port you broke and want to work immediately Layer2 Creating Vlans here sudo config vlan add 1000 vlans and membership to see the details show vlan brief tagging, untagged ports tagged sudo config vlan member add 1000 Ethernet48 untagged sudo config vlan member add -u 1000 Ethernet48 You can use the following commands to edit ports in bulk seq 36 39|xargs -i -t sudo config interface speed Ethernet{} 10000 seq 36 39|xargs -i -t sudo config interface startup Ethernet{} seq 36 39|xargs -i -t sudo config vlan member add -u 1000 Ethernet{} Layer3 intervlan routing to add an ip or svi to vlan 1 use the command below admin@sonic:~$ sudo config interface ip add Vlan1000 192.168.1.2/24 routed interfaces as in svi configuration but this time use the port name sudo config interface ip add Ethernet4 192.168.1.2/24