Sunday, January 17, 2021

Microsoft Sonic Virtual Switch on Eve-NG

Microsoft, SONiC is probabily the most popular open-source network operating system which is  currently being developed by a community of network market leaders: Broadcom, Marvell, Dell, Mellanox/NVIDIA, Intel, Microsoft and others. IT supports 101 whitebox platforms (by January 2021)  which you could find the latest list in https://github.com/Azure/SONiC/wiki/Supported-Devices-and-Platforms. 

To test and see how Sonic works it’s better to create a virtual topology (e.g. a data center Clos topology.) with a network emulation tool like GNS3, Eve-NG etc. On Sonic Github page there is a script to make Sonic-Virtual-Switch image with GNS3 but not for EVE-NG. I make Sonic work on Eve-NG. Here are the instructions: 

EVE-NG Sonic Configuration

I assume that you already installed Eve-NG and started using it. 

  • Copy the mssonic.yml file into “/opt/unetlab/html/templates/intel” or “/opt/unetlab/html/templates/amd” based on your cpu. 
  • Create a folder under “opt/unetlab/addons/qemu/” with name “mssonic-version/” . Folder name is really important since eve-ng understands that it is a a sonic image folder with naming convention. The first part of the folder name  must be "mssonic" if you are using my yml file and later you could add version to the folder name, e.g: "mssonic-202012"

        # mkdir pt/unetlab/addons/qemu/mssonic-202012
Copy sonic-vs.img.gz file (instructions are below) and move it to this folder.
  • Extract sonic-vs.img.gz 
  • Rename sonic-vs.img to virtioa.qcow2 (just rename,  no convert) 
        root@EVENG-SRLAB:/opt/unetlab/addons/qemu/mssonic-202012# mv sonic-vs.img virtioa.qcow2
As a last step you need to execute the command below, which should be done for any new image 
        /opt/unetlab/wrappers/unl_wrapper -a fixpermissions

Downloading Sonic-VS

Go to https://github.com/Azure/sonic-buildimage  and scroll down the page, click the build you would like to download (For EVE-NG it is VS) and go for the last stable build and download sonic-vs.img.gz. 




Management Ethernet

On Sonic, eth0 is the management interface and on Eve-NG i named management ethernet for sonic as "eth0_Management". If you would like to connect management ethernet of Sonic-VS to a cloud, switch etc., you could do it like in below picture. 

Keep in mind that Sonic 202012 does not support in-band management vrf, support will come with version 202106. 

Data Plane Ethernets

  • EVE-NG ethernet 0 == Sonic Ethernet0 
  • EVE-NG ethernet 1 == Sonic Ethernet4 (40G interfaces uses 4 lanes,) 

Chassis Mac Address 

Sonic-VS default configuration contains same router MAC address so you need to change it manually in config_db.json under DEVICE_METADATA section to make the MAC address unique for each switch. 

    "DEVICE_METADATA": {
        "localhost": {
            "bgp_asn": "65100",
            "buffer_model": "traditional",
            "default_bgp_status": "up",
            "default_pfcwd_status": "disable",
            "hostname": "sonic",
            "hwsku": "Force10-S6000",
            "mac": "52:54:00:12:34:56",
            "platform": "x86_64-kvm_x86_64-r0",
            "type": "LeafRouter"
        }
    },

Other Static Configs

Unfortunately Sonic-VS is pre-configured for a specific test environment all VS images will have the same ethernet, loopback ip address and bgp configurations, you need to manually erase them or import a base "config_db.json" file and execute ."config reload -y" 

What's Not Working on Sonic-VS 

Since there is no underlying chip, some features are not working or not implemented on Sonic-VS. Here are the ones i know of: 

  • Static-VXLAN is not working, only dynamic ones are working. 
  • Interface counters are not working these since there is no underlying chip / chip simulator. You have to rely on ‘ifconfig’ to track stats. 
  • Static-routes are not saved upon reboot. It is integrated on 2020-12 master branch but you need to:
    • Refer to PR https://github.com/Azure/SONiC/pull/585 for configuring the STATIC_ROUTE in config-DB and make sure to set “frr_mgmt_framework_config” to “true” in DEVICE_METADATA table.
    • Templates: https://github.com/Azure/sonic-buildimage/tree/202012/src/sonic-frr-mgmt-framework/templates/staticd 


0 comments:

Post a Comment

 

Internetworking Hints Copyright © 2011 -- Template created by O Pregador -- Powered by Blogger