As mention earlier, we start evaluate new SONIC version with MPLS support. For that purpose, we install latest SONIC release for our EdgeCore Wedge-100-32BF (Barefoot Tofino ASIC) which includes the new MPLS command.
Then we ran OSPF with Segment Routing to determine if MPLS table is correctly fulfill and if the ASIC switch MPLS packets.
Global results are NOK.
First, it seems that the libopensai provided with release SONiC-OS-master.33108-dirty-20210903.173050 is not supporting MPLS. Each time we try to enable MPLS on an interface, we got error in swss.log:
Sep 17 03:54:41.561007 sonic INFO /supervisord: syncd 2021-09-17 03:54:41.560626 BF_SAI ERROR - sai_set_router_interface_attribute:627: Failed to set attribute SAI_ROUTER_INTERFACE_ATTR_ADMIN_MPLS_STATE error: SAI_STATUS_NOT_SUPPORTED
Note that we try both 100G interface and breakout interfaces (4x10g). In addition, syncd and swss docker crash and we must manually restart them or reboot the switch.
Second, once OSPF started, Segment Routing information are correctly exchange and OSPF / ZEBRA configure the MPLS table. With vtysh a 'show mpls table' or 'show ip ospf database segment-routing' will provide the correct values. Unfortunately, MPLS table is not configured at the Linux Kernel level. Running 'ip -M route' is empty and 'ip route' will provide IP route without MPLS label while both tables should be configured with appropriate MPLS label according to Segment Routing information.
The test was conducted against a Juniper MX router as OSPF neighbor.
It seems that without appropriate libopensai which support MPLS for the Tofino ASIC, we can't get MPLS support. Is somebody know when this such version will be available ?
Is there a way to test MPLS without such support ? I mean that got at least Linux Kernel MPLS table fulfill by Zebra FPM ?
PS. To activate OSPF, you must first add a trap for ospf in /etc/sonic/coop_db.json like for bgp, then adjust MTU according to the neighbor (Juniper 10g interface has an MTU set to 1500 while Wedge has an MTU set to 9100 on 100g and breakout interfaces) and launch ospfd with:
'docker exec -it bgp /usr/lib/frr/ospfd -d -f /etc/sonic/frr/ospfd.conf'