<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.nesevo.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PierreLancastre</id>
	<title>NesevoWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.nesevo.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PierreLancastre"/>
	<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php/Special:Contributions/PierreLancastre"/>
	<updated>2026-06-02T20:50:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=VyosAristaCVX-VXLAN-lab&amp;diff=3012</id>
		<title>VyosAristaCVX-VXLAN-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=VyosAristaCVX-VXLAN-lab&amp;diff=3012"/>
		<updated>2022-04-05T12:42:31Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
More and more, EVPN is making its place in Datacenter field. Mainstream vendors integrate its support, with VXLAN or MPLS for data plane + BGP for control plane. In previous labs, we were able to observe that interoperability was quite good between vendors. Nevertheless, even we've already tested CumulusVX, there are also other open sources NOS which can support EVPN.&lt;br /&gt;
&lt;br /&gt;
Today we'll test VyOS in it's latest rolling version, which handles the support of EVPN.&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* create a VXLAN Fabric with VyOS nodes&lt;br /&gt;
* provide a L2VPN and a L3VPN to client nodes within the fabric&lt;br /&gt;
* integrate some other vendors node into the fabric, here Arista and Cumulus VX&lt;br /&gt;
* test that all works as expected&lt;br /&gt;
&lt;br /&gt;
=== Lab setup ===&lt;br /&gt;
To reach those goals, we'll use the EVE-NG tool in community edition (https://www.eve-ng.net/index.php/download/#DL-COMM) and use the following NOS version : &lt;br /&gt;
&lt;br /&gt;
* Vyatta VyOS 1.4 rolling &amp;lt;-- free to download https://vyos.net/get/nightly-builds/&lt;br /&gt;
* Arista vEOS 4.26.0F lab edition &amp;lt;-- need a support account&lt;br /&gt;
* Nvidia Cumulus VX 4.2.1 lab edition &amp;lt;-- free to download https://www.nvidia.com/en-us/networking/ethernet-switching/cumulus-vx/download/&lt;br /&gt;
&lt;br /&gt;
We'll build a 3-tiers fabric, with leaf/spine/superspine devices, VXLAN/EVPN running on all nodes. It gives the following setup: &lt;br /&gt;
&lt;br /&gt;
[[File:nesevo-Lab-Vyatta-Arista-CVX.png]]&lt;br /&gt;
&lt;br /&gt;
On EVE-NG, we add IP information, ASN, loopback IPs. All other information will be past after when dealing with technical details.    &lt;br /&gt;
&lt;br /&gt;
So, it gives:      &lt;br /&gt;
&lt;br /&gt;
[[File:2022-02_eveng-lab-vyatta-cum-arista.png]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;span class=&amp;quot;mw-headline&amp;quot;&amp;gt;VXLAN/BGP infos&amp;lt;/span&amp;gt; ====&lt;br /&gt;
Note: in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 6 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
|200&lt;br /&gt;
|the 6 clients have their own subnets. Here we use only one vni because no ESI will be implemented. One leaf one subnet.&lt;br /&gt;
|}&lt;br /&gt;
Client devices are represented by computers on EVE-NG. IPs in green are using the L2VPN service (extended layer 2 between pods) and IPs in orange the L3VPN service (routing service).&lt;br /&gt;
&lt;br /&gt;
Below some diagrams showing the logic topologies : &lt;br /&gt;
&lt;br /&gt;
[[File:nesevo-Lab-Vyatta-Arista-CVX-l2vpn.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:nesevo-Lab-Vyatta-Arista-CVX-l3vpn.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below the link to the configurations to allow you to quickly reproduce the tab.&lt;br /&gt;
&lt;br /&gt;
To be noted that the configurations are not &amp;quot;ready-to-prod &amp;quot; and need to be optimized (adding bfd, bgp optimization, etc.). Some typos can subsist. Whatever, the lab works and gives the expected results :)&lt;br /&gt;
&lt;br /&gt;
Link to devices configurations : [https://wiki.nesevo.com/images/3/32/02.lab-vyos-eos-cvx_v2.zip lab-vyos-eos-cvx_v2.zip]&lt;br /&gt;
&lt;br /&gt;
=== Lab details ===&lt;br /&gt;
Considering that the lab is up and running, we'll now come back to the architecture.&lt;br /&gt;
&lt;br /&gt;
We have 3 kinds of network nodes : &lt;br /&gt;
&lt;br /&gt;
* leaf switches, on edge, which provide L2 and L3 services.&lt;br /&gt;
* couple of spine switches which allow leaf from a same pod to exchange traffic. They are also connected to superspine to reach other pods&lt;br /&gt;
* superspine switches which interconnext the different spine switches from the different pods, thus allowing interpods traffic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All those network devices control plane can exchange routes' information within 2 layers of bgp : underlay and overlay.&lt;br /&gt;
&lt;br /&gt;
The role of the &amp;quot;underlay&amp;quot; is to dynamically route the traffic between loopback interfaces from the different nodes. Loopback interfaces are used to mount BGP sessions for the underlay and are used as VTEP interfaces on leaf nodes. Generally, it's better to have 2 different Loopback for this usage (in case of anycast vtep setup for example), but some vendors don't allow to 2 loopback interfaces in the same routing context. Whatever, in our setup, having only one loopback is fine.  &lt;br /&gt;
&lt;br /&gt;
Here, the underlay is done in eBGP, &amp;lt;u&amp;gt;ipv4 unicast family only + route-map to only redistribute loopback interfaces IP&amp;lt;/u&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* Each node mount a session to the directly connected peers. &lt;br /&gt;
* Each leaf node has a dedicated ASN. &lt;br /&gt;
* Each couple of spine/superspine has a ASN for two, to follow the best practices to optimize the routing table (ECMP).&lt;br /&gt;
&lt;br /&gt;
The role of the &amp;quot;overlay&amp;quot; is to exchange EVPN routes type 2,3,5 here (type 1/4 routes seem to not be managed by VyOS at the moment, TBC). &lt;br /&gt;
&lt;br /&gt;
* eBGP multihop sessions are mounted to directly neighbor loopback IPs.&lt;br /&gt;
* policies/options are set to not change the original nexthop when propagating routes&lt;br /&gt;
* for L2 services we only allow the redistribution of type 2 (macip) and type 3 (inclusive mcast for BUM management) routes&lt;br /&gt;
* for L3 services we only allow the redistribution of type 5 (prefix) routes&lt;br /&gt;
* regarding the setup, to enhance the scalability, it could be nice to use dedicated nodes (VM or phys) to take the role of route-servers. Here, we could connect them to superspine. Thus, spine/superspine would only do underlay and could not be a bottleneck for the control plane scalability&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Moreover, regarding the lab setup, no bgp pic / bfd / VMTO / other option are implemented to optimize the convergence / traffic delivery. The goal was to verify that VyOS is compatible in a basic but functionnal VXLAN setup.&lt;br /&gt;
&lt;br /&gt;
Now, we'll take a look on the different output from the 2 vendors leaf / spine / superspine to verify that all works as expected.&lt;br /&gt;
&lt;br /&gt;
We verify that underlay works well. All is fine if: &lt;br /&gt;
&lt;br /&gt;
* we have an eBGP session per directly connected peer&lt;br /&gt;
* we receive the same number of prefixes per peer type: &lt;br /&gt;
** a leef has to receive the same number of prefixes from its spine neighbors&lt;br /&gt;
** spine neigbors have to receive the same amount of prefixes from superspine, and reciprocally&lt;br /&gt;
** all VTEP IPs have to be known into the GRT (global routing table / default routing instance)&lt;br /&gt;
&lt;br /&gt;
====== On VyOS ======&lt;br /&gt;
Below we can see that we receive 17 prefixes from both neighbors and that we know all loopback IPs from the setup (13 remote, 1 local). We have a bit too much routes, because on Cumulus nodes the filters that I have configured seem misconstructed.&lt;br /&gt;
&lt;br /&gt;
To be noted that spine will announce all the Loopback IPs except the one from it's twin, since they are not directly connected and superspine respect as loop protection constraint (don't reflect routes originated by an ASN &amp;quot;X&amp;quot; to a peer from the same ASN &amp;quot;X&amp;quot;).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip bgp summary established &lt;br /&gt;
&lt;br /&gt;
IPv4 Unicast Summary (VRF default):&lt;br /&gt;
BGP router identifier 10.255.255.5, local AS number 65011 vrf-id 0&lt;br /&gt;
BGP table version 20&lt;br /&gt;
RIB entries 37, using 6808 bytes of memory&lt;br /&gt;
Peers 2, using 1446 KiB of memory&lt;br /&gt;
Peer groups 2, using 128 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc&lt;br /&gt;
10.254.254.9    4      65001     29993     29988        0    0    0 02w6d19h           17       19 N/A&lt;br /&gt;
10.254.254.11   4      65001     17218     17220        0    0    0 01w4d22h           17       19 N/A&lt;br /&gt;
&lt;br /&gt;
Displayed neighbors 2&lt;br /&gt;
Total number of neighbors 2&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip route | match /32&lt;br /&gt;
B&amp;gt;* 10.255.255.1/32 [20/0] via 10.254.254.9, eth0, weight 1, 02w6d19h&lt;br /&gt;
B&amp;gt;* 10.255.255.2/32 [20/0] via 10.254.254.11, eth1, weight 1, 01w4d22h&lt;br /&gt;
B&amp;gt;* 10.255.255.3/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.4/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
C&amp;gt;* 10.255.255.5/32 is directly connected, dum0, 02w6d19h&lt;br /&gt;
B&amp;gt;* 10.255.255.6/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d22h&lt;br /&gt;
B&amp;gt;* 10.255.255.7/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.8/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.9/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.10/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.11/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d01h&lt;br /&gt;
B&amp;gt;* 10.255.255.12/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d00h&lt;br /&gt;
B&amp;gt;* 10.255.255.13/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d01h&lt;br /&gt;
B&amp;gt;* 10.255.255.14/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d00h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== On Arista ======&lt;br /&gt;
We verify that we receive prefix + same leaf / superspine / remote pods spine IPs (we note there misses some filters on spine since we receive /31 interco routes): &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
leaf1-pod3#show ip bgp neighbors 10.254.254.43 received-routes &lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
          10.254.254.36/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.38/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.42/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.44/31       10.254.254.43         -       -          -       -       65004 65016 ?&lt;br /&gt;
          10.254.254.46/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
 *        10.255.255.1/32        10.254.254.43         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 *        10.255.255.2/32        10.254.254.43         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 *        10.255.255.3/32        10.254.254.43         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 *        10.255.255.4/32        10.254.254.43         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 *        10.255.255.5/32        10.254.254.43         -       -          -       -       65004 65003 65001 65011 ?&lt;br /&gt;
 *        10.255.255.6/32        10.254.254.43         -       -          -       -       65004 65003 65001 65012 ?&lt;br /&gt;
 *        10.255.255.7/32        10.254.254.43         -       -          -       -       65004 65003 65002 65013 ?&lt;br /&gt;
 *        10.255.255.8/32        10.254.254.43         -       -          -       -       65004 65003 65002 65014 ?&lt;br /&gt;
 *        10.255.255.9/32        10.254.254.43         -       -          -       -       65004 65003 ?&lt;br /&gt;
 *        10.255.255.10/32       10.254.254.43         -       -          -       -       65004 65003 ?&lt;br /&gt;
 *        10.255.255.12/32       10.254.254.43         -       -          -       -       65004 65016 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.14/32       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
leaf1-pod3#show ip bgp neighbors 10.254.254.41 received-routes&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 * &amp;gt;      10.255.255.1/32        10.254.254.41         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.2/32        10.254.254.41         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.3/32        10.254.254.41         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.4/32        10.254.254.41         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.5/32        10.254.254.41         -       -          -       -       65004 65003 65001 65011 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.6/32        10.254.254.41         -       -          -       -       65004 65003 65001 65012 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.7/32        10.254.254.41         -       -          -       -       65004 65003 65002 65013 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.8/32        10.254.254.41         -       -          -       -       65004 65003 65002 65014 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.9/32        10.254.254.41         -       -          -       -       65004 65003 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.10/32       10.254.254.41         -       -          -       -       65004 65003 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.12/32       10.254.254.41         -       -          -       -       65004 65016 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.13/32       10.254.254.41         -       -          -       -       65004 i&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== On Cumulus ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp summary &lt;br /&gt;
show bgp ipv4 unicast summary&lt;br /&gt;
=============================&lt;br /&gt;
BGP router identifier 10.255.255.12, local AS number 65016 vrf-id 0&lt;br /&gt;
BGP table version 103&lt;br /&gt;
RIB entries 37, using 7104 bytes of memory&lt;br /&gt;
Peers 2, using 43 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor                   V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd&lt;br /&gt;
10.254.254.45              4      65004    306764    261331        0    0    0 01:39:02           12&lt;br /&gt;
spine1-pod3(10.254.254.47) 4      65004    261602    261664        0    0    0 01w2d02h           16&lt;br /&gt;
&lt;br /&gt;
Total number of neighbors 2&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show route | grep /32&lt;br /&gt;
B&amp;gt;* 10.255.255.1/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.2/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.3/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.4/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.5/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.6/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.7/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.8/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.9/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.10/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.11/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
C&amp;gt;* 10.255.255.12/32 is directly connected, lo, 01w2d02h&lt;br /&gt;
B&amp;gt;* 10.255.255.13/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.14/32 [20/0] via 10.254.254.47, swp2, weight 1, 01w2d02h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;We can also verify that routing is ok by pinging remote loopback IPs from local loopback + check eBGP EVPN session status: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ping example from VyOS leaf&lt;br /&gt;
vyos@leaf1-pod1:~$ ping 10.255.255.12 source-address 10.255.255.5&lt;br /&gt;
PING 10.255.255.12 (10.255.255.12) from 10.255.255.5 : 56(84) bytes of data.&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=1 ttl=61 time=2.60 ms&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=2 ttl=61 time=2.54 ms&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=3 ttl=61 time=2.44 ms&lt;br /&gt;
&lt;br /&gt;
# check of EVPN sessions on the different vendors&lt;br /&gt;
&lt;br /&gt;
# vyos&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn summary &lt;br /&gt;
BGP router identifier 10.255.255.5, local AS number 65011 vrf-id 0&lt;br /&gt;
BGP table version 0&lt;br /&gt;
RIB entries 31, using 5704 bytes of memory&lt;br /&gt;
Peers 2, using 1446 KiB of memory&lt;br /&gt;
Peer groups 2, using 128 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc&lt;br /&gt;
10.255.255.1    4      65001     30205     30208        0    0    0 02w6d21h           13       13 N/A&lt;br /&gt;
10.255.255.2    4      65001     17392     17429        0    0    0 01w5d00h           11       13 N/A&lt;br /&gt;
&lt;br /&gt;
# Arista&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show bgp evpn summary&lt;br /&gt;
BGP summary information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Neighbor Status Codes: m - Under maintenance&lt;br /&gt;
  Description              Neighbor         V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc&lt;br /&gt;
  OVL_spine1-pod3          10.255.255.13    4 65004          15608     15503    0    0 00:03:47 Estab   17     17&lt;br /&gt;
  OVL_spine2-pod3          10.255.255.14    4 65004         262780    308558    0    0    9d02h Estab   13     13&lt;br /&gt;
&lt;br /&gt;
# Cumulus&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp l2vpn evpn summary&lt;br /&gt;
BGP router identifier 10.255.255.12, local AS number 65016 vrf-id 0&lt;br /&gt;
BGP table version 0&lt;br /&gt;
RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
Peers 2, using 43 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor                   V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd&lt;br /&gt;
10.255.255.13              4      65004    307243    261693        0    0    0 00:04:25           14&lt;br /&gt;
spine1-pod3(10.255.255.14) 4      65004    262001    262025        0    0    0 01w2d02h           10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On EVPN, we should receive quite the same number of prefixes from both spine, but looks like there differences of best path election + redistribution between vendors. Perhaps something to dig. The most important point is to verify that the FIB for the services are consistent. &lt;br /&gt;
&lt;br /&gt;
==== L2 service implementation ====&lt;br /&gt;
On that topic, we'll firstly focus on the Layer 2 service. To be sure that all works as expected we have to check that: &lt;br /&gt;
&lt;br /&gt;
* mac-address-table are consistent on the whole fabric. In traditionnal L2 setup, switch FIBs depend of the traffic passing through them and a mac @ can be see &amp;quot;everywhere&amp;quot; if it does a BUM on the network. In VXLAN, in a mac-vrf topology without filer, even a host doesn't send BUM, the mac address is propagated on the whole fabric (within BGP update). But, as it is on traditional L2 topology, you have to be sure that mac @ table aging time are consistent on all devices, with an aging time superior to ARP timer on hosts. &lt;br /&gt;
* routes type 2 are visible on each leaf nodes for a same vni, routes type 3 to reach remote VTEP have to be learned&lt;br /&gt;
* a common route-target for the VRF routes need to be used/set within policies. In effect, there are differences between vendors on route &amp;quot;tagging&amp;quot; (features to auto generate route-target, &amp;quot;hard coded&amp;quot; alogos, etc.). Here, on VyOS, we got to add adminstrative extended communities within route-map for the L2 VNI. We'll show it below&lt;br /&gt;
* all fabric connections (interconnections between network nodes) have the sufficient &amp;quot;IP MTU&amp;quot;. Please keep in mind that VXLAN overhead has a size of 50 bytes. So, to be sure that Jumbo traffic for host is ok, configure it at least at 9050 Bytes. I would advise to push it at 9100 Bytes in case of VXLAN usage on client HOSTS for Virtualized setup on servers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check FDB on leaf switch + debug type 2 routes' propagation for leaf1 pod1&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
##############&lt;br /&gt;
# VyOS&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb&lt;br /&gt;
50:01:00:01:00:02 dev eth2 vlan 1 master br100 permanent&lt;br /&gt;
50:01:00:01:00:02 dev eth2 master br100 permanent&lt;br /&gt;
33:33:00:00:00:01 dev eth2 self permanent&lt;br /&gt;
33:33:00:00:00:02 dev eth2 self permanent&lt;br /&gt;
01:00:5e:00:00:01 dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:0e dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:03 dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:00 dev eth2 self permanent&lt;br /&gt;
33:33:00:00:00:01 dev br100 self permanent&lt;br /&gt;
33:33:00:00:00:02 dev br100 self permanent&lt;br /&gt;
33:33:ff:01:00:02 dev br100 self permanent&lt;br /&gt;
01:00:5e:00:00:6a dev br100 self permanent&lt;br /&gt;
33:33:00:00:00:6a dev br100 self permanent&lt;br /&gt;
01:00:5e:00:00:01 dev br100 self permanent&lt;br /&gt;
33:33:ff:00:00:00 dev br100 self permanent&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 vlan 1 extern_learn master br100 &lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 extern_learn master br100 &lt;br /&gt;
8a:d0:00:16:1c:17 dev vxlan100 vlan 1 master br100 permanent&lt;br /&gt;
8a:d0:00:16:1c:17 dev vxlan100 master br100 permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.6 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.11 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.12 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.7 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.8 self permanent&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 dst 10.255.255.12 self extern_learn &lt;br /&gt;
&lt;br /&gt;
# and to focus on remote nodes&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb | grep &amp;quot;self extern_learn&amp;quot;&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 dst 10.255.255.12 self extern_learn &lt;br /&gt;
00:50:79:66:68:13 dev vxlan100 dst 10.255.255.11 self extern_learn &lt;br /&gt;
00:50:79:66:68:19 dev vxlan100 dst 10.255.255.8 self extern_learn &lt;br /&gt;
00:50:79:66:68:0c dev vxlan100 dst 10.255.255.6 self extern_learn &lt;br /&gt;
00:50:79:66:68:17 dev vxlan100 dst 10.255.255.7 self extern_learn &lt;br /&gt;
&lt;br /&gt;
# or on local clients &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb | grep eth | grep -v perm&lt;br /&gt;
00:50:79:66:68:0b dev eth2 master br100 &lt;br /&gt;
&lt;br /&gt;
# Now if we want to focus on route type 3 learned &lt;br /&gt;
&lt;br /&gt;
Displayed 7 prefixes (12 paths) (of requested type)&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn route type 3 | grep Dis&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
Route Distinguisher: 10.255.255.6:3&lt;br /&gt;
Route Distinguisher: 10.255.255.7:2&lt;br /&gt;
Route Distinguisher: 10.255.255.8:2&lt;br /&gt;
Route Distinguisher: 10.255.255.11:100&lt;br /&gt;
Route Distinguisher: 10.255.255.12:100&lt;br /&gt;
&lt;br /&gt;
# we notice that RDs for VyOS nodes don't respect the logic of &amp;lt;Loopback:vni&amp;gt;. It s because for the moment we can't set it by vni (or I didn't find how to do that)&lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Arista&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
# we check the fdb. Remote host are behind the port Vx1&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show mac address-table vlan 100&lt;br /&gt;
          Mac Address Table&lt;br /&gt;
------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Vlan    Mac Address       Type        Ports      Moves   Last Move&lt;br /&gt;
----    -----------       ----        -----      -----   ---------&lt;br /&gt;
 100    0050.7966.680c    DYNAMIC     Vx1        1       0:00:38 ago&lt;br /&gt;
 100    0050.7966.6813    DYNAMIC     Et3        1       0:14:08 ago&lt;br /&gt;
 100    0050.7966.6815    DYNAMIC     Vx1        1       9 days, 2:36:39 ago&lt;br /&gt;
 100    0050.7966.6817    DYNAMIC     Vx1        1       0:00:36 ago&lt;br /&gt;
 100    0050.7966.6819    DYNAMIC     Vx1        1       0:00:35 ago&lt;br /&gt;
Total Mac Addresses for this criterion: 5&lt;br /&gt;
&lt;br /&gt;
# we check that all VTEP are ready for BUM&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show bgp evpn route-type imet | i &amp;gt;&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.5:3 imet 10.255.255.5&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.6:3 imet 10.255.255.6&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.7:2 imet 10.255.255.7&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.8:2 imet 10.255.255.8&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.11:100 imet 10.255.255.11&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.12:100 imet 10.255.255.12&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show vxlan vtep detail&lt;br /&gt;
Remote VTEPS for Vxlan1:&lt;br /&gt;
&lt;br /&gt;
VTEP               Learned Via        MAC Address Learning       Tunnel Type(s) &lt;br /&gt;
------------------ ------------------ -------------------------- -------------- &lt;br /&gt;
10.255.255.5       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.6       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.7       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.8       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.12      control plane      control plane              flood, unicast &lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Cumulus&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
# we check the fdb. Remote host are behind the port Vx1&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bridge macs vlan 100&lt;br /&gt;
&lt;br /&gt;
VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
----  ------  ---------  -----------------  ----------  ---------  ------------  ----------------&lt;br /&gt;
 100  bridge  bridge     50:01:00:11:00:03              permanent                9 days, 02:47:42&lt;br /&gt;
 100  bridge  swp3       00:50:79:66:68:15                                       00:00:06&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0c                         extern_learn  00:00:40&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:13                         extern_learn  00:21:01&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:17                         extern_learn  00:00:38&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:19                         extern_learn  00:00:36&lt;br /&gt;
&lt;br /&gt;
# --&amp;gt; here we see that it misses the @mac from the host on leaf1 pod1. &lt;br /&gt;
# we check the evpn routes on the Cumulus node and we see that from leaf1 pod1 vni 100 we have only those routes&lt;br /&gt;
&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
&lt;br /&gt;
# --&amp;gt; something is wrong on the remote leaf.&lt;br /&gt;
# on the leaf we check the policy for the EVPN routes export&lt;br /&gt;
&lt;br /&gt;
  route-map RM-OUT-VNI {&lt;br /&gt;
         rule 1 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type multicast&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 2 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type prefix&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 3 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     vni 200&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:200&lt;br /&gt;
                 }&lt;br /&gt;
&lt;br /&gt;
# we notice that a typo in rule numbering removed the export of macip routes for vni 100.&lt;br /&gt;
# we correct that : &lt;br /&gt;
&lt;br /&gt;
route-map RM-OUT-VNI {&lt;br /&gt;
         rule 1 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type multicast&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 2 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type macip&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 3 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type prefix&lt;br /&gt;
                     vni 200&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:200&lt;br /&gt;
                 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# once corrected we check the fdb on the cumulus node + evpn routes&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bridge macs vlan 100&lt;br /&gt;
&lt;br /&gt;
VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
----  ------  ---------  -----------------  ----------  ---------  ------------  ----------------&lt;br /&gt;
 100  bridge  bridge     50:01:00:11:00:03              permanent                9 days, 02:51:48&lt;br /&gt;
 100  bridge  swp3       00:50:79:66:68:15                                       00:02:01&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0b                         extern_learn  00:00:26&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0c                         extern_learn  00:04:46&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:13                         extern_learn  00:25:08&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:17                         extern_learn  00:04:45&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:19                         extern_learn  00:04:43&lt;br /&gt;
&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
*  [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# we have now Type 2 routes, all is ok now and we learn the client mac 00:50:79:66:68:0b&lt;br /&gt;
# Nevertheless, the trafic was working between the client hosts, but trafic from Cumulus leaf client to VyOS leaf client was broadcasted to all leaf since the @mac was not advertised on the fabric&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;It could be interesting to check how each node is configured to deliver the service, but the article would be too long. So, to sum the steps to provide a L2 service: &lt;br /&gt;
&lt;br /&gt;
# create a VLAN (on Arista) / bridge (VyOS and Cumulus) + associate it to the VNI/VXLAN instances/interface&lt;br /&gt;
# create the mac vrf + define the route-target into bgp (Arista + Cumulus) / update the route-maps + community list to allow the redistribution of the VNI routes (type 2 and type 3)&lt;br /&gt;
&lt;br /&gt;
==== L3 service implementation ====&lt;br /&gt;
Now, we'll now look at the L3 service. On that kind of setup we need to implement / check:&lt;br /&gt;
* leaf IP subnets are well redistributed betweeb all leaf (here we are in a vrf &amp;quot;any to any&amp;quot; topology)&lt;br /&gt;
* we only redistribute routes for IP prefix. Routes type 2 (mac @) don't need to be redistributed between leaf&lt;br /&gt;
* that all clients can ping each other through the L3VPN&lt;br /&gt;
&lt;br /&gt;
To achieve that, we need to implement analog configuration than for the L2 service, but with the following differences: &lt;br /&gt;
&lt;br /&gt;
* create a VLAN (on Arista) / bridge (VyOS and Cumulus) + associate it to the VNI/VXLAN instances|interface&lt;br /&gt;
* create the L3 VRF + define the route-target into bgp (Arista + Cumulus + VyOS) + allow connected routes distribution (Arista / Cumulus) / update the route-maps + community list to allow the redistribution of the VNI routes (type 5) for VyOS / restrict the routes redistribution to type 5 routes into the VNI (Cumulus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we check the routing table with common cli commands + into the EVPN RIB :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# check routes into the vrf &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip route vrf VRF-L3-1&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,&lt;br /&gt;
       f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF VRF-L3-1:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 02w6d22h&lt;br /&gt;
C&amp;gt;* 192.168.10.0/24 is directly connected, br200, 02w6d22h&lt;br /&gt;
B&amp;gt;* 192.168.20.0/24 [20/0] via 10.255.255.6, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
B&amp;gt;* 192.168.30.0/24 [20/0] via 10.255.255.7, br200 onlink, weight 1, 05:04:15&lt;br /&gt;
B&amp;gt;* 192.168.40.0/24 [20/0] via 10.255.255.8, br200 onlink, weight 1, 04:59:41&lt;br /&gt;
B&amp;gt;* 192.168.50.0/24 [20/0] via 10.255.255.11, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
B&amp;gt;* 192.168.60.0/24 [20/0] via 10.255.255.12, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show ip route vrf VRF-L3-1&lt;br /&gt;
&lt;br /&gt;
VRF: VRF-L3-1&lt;br /&gt;
Codes: C - connected, S - static, K - kernel, &lt;br /&gt;
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,&lt;br /&gt;
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,&lt;br /&gt;
       N2 - OSPF NSSA external type2, B - BGP, B I - iBGP, B E - eBGP,&lt;br /&gt;
       R - RIP, I L1 - IS-IS level 1, I L2 - IS-IS level 2,&lt;br /&gt;
       O3 - OSPFv3, A B - BGP Aggregate, A O - OSPF Summary,&lt;br /&gt;
       NG - Nexthop Group Static Route, V - VXLAN Control Service,&lt;br /&gt;
       DH - DHCP client installed default route, M - Martian,&lt;br /&gt;
       DP - Dynamic Policy Route, L - VRF Leaked,&lt;br /&gt;
       G  - gRIBI, RC - Route Cache Route&lt;br /&gt;
&lt;br /&gt;
Gateway of last resort is not set&lt;br /&gt;
&lt;br /&gt;
 B E      192.168.10.0/24 [200/0] via VTEP 10.255.255.5 VNI 200 router-mac 12:9b:9b:d8:f6:86 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.20.0/24 [200/0] via VTEP 10.255.255.6 VNI 200 router-mac 50:01:00:02:00:03 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.30.0/24 [200/0] via VTEP 10.255.255.7 VNI 200 router-mac 50:01:00:09:00:03 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.40.0/24 [200/0] via VTEP 10.255.255.8 VNI 200 router-mac 50:01:00:0a:00:03 local-interface Vxlan1&lt;br /&gt;
 C        192.168.50.0/24 is directly connected, Vlan200&lt;br /&gt;
 B E      192.168.60.0/24 [200/0] via VTEP 10.255.255.12 VNI 200 router-mac 50:01:00:11:00:03 local-interface Vxlan1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show route vrf VRF-L3-1&lt;br /&gt;
show ip route vrf VRF-L3-1 &lt;br /&gt;
===========================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued route, r - rejected route&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VRF VRF-L3-1:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 01w2d03h&lt;br /&gt;
B&amp;gt;* 192.168.10.0/24 [20/0] via 10.255.255.5, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.20.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.30.0/24 [20/0] via 10.255.255.7, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.40.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.50.0/24 [20/0] via 10.255.255.11, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
C&amp;gt;* 192.168.60.0/24 is directly connected, vlan200, 01w2d03h&lt;br /&gt;
&lt;br /&gt;
# we can notice that the output are quite similar, except on Arista which indicates the VNI for remote targets, instead of referencing the local bridge / vlan200&lt;br /&gt;
&lt;br /&gt;
# Now we check the routes for the VNI 200&lt;br /&gt;
&lt;br /&gt;
# VyOS &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn route type prefix &lt;br /&gt;
BGP table version is 1, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[EthTag]:[ESI]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5             0         32768 ?&lt;br /&gt;
                    ET:8 RT:65000:200 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65001 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65001 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.11:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65001 65003 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65001 65003 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
Route Distinguisher: 10.255.255.12:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12                          0 65001 65003 65004 65016 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:11:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12                          0 65001 65003 65004 65016 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:11:00:03&lt;br /&gt;
&lt;br /&gt;
# Arista&lt;br /&gt;
                        &lt;br /&gt;
leaf1-pod3#show bgp evpn route ip-prefix ipv4 &lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  LocPref Weight  Path&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.5:200 ip-prefix 192.168.10.0/24&lt;br /&gt;
                                 10.255.255.5          -       100     0       65004 65003 65001 65011 ?&lt;br /&gt;
 *       RD: 10.255.255.5:200 ip-prefix 192.168.10.0/24&lt;br /&gt;
                                 10.255.255.5          -       100     0       65004 65003 65001 65011 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.6:200 ip-prefix 192.168.20.0/24&lt;br /&gt;
                                 10.255.255.6          -       100     0       65004 65003 65001 65012 ?&lt;br /&gt;
 *       RD: 10.255.255.6:200 ip-prefix 192.168.20.0/24&lt;br /&gt;
                                 10.255.255.6          -       100     0       65004 65003 65001 65012 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.7:200 ip-prefix 192.168.30.0/24&lt;br /&gt;
                                 10.255.255.7          -       100     0       65004 65003 65002 65013 ?&lt;br /&gt;
 *       RD: 10.255.255.7:200 ip-prefix 192.168.30.0/24&lt;br /&gt;
                                 10.255.255.7          -       100     0       65004 65003 65002 65013 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.8:200 ip-prefix 192.168.40.0/24&lt;br /&gt;
                                 10.255.255.8          -       100     0       65004 65003 65002 65014 ?&lt;br /&gt;
 *       RD: 10.255.255.8:200 ip-prefix 192.168.40.0/24&lt;br /&gt;
                                 10.255.255.8          -       100     0       65004 65003 65002 65014 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.11:200 ip-prefix 192.168.50.0/24&lt;br /&gt;
                                 -                     -       -       0       i&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.12:10200 ip-prefix 192.168.60.0/24&lt;br /&gt;
                                 10.255.255.12         -       100     0       65004 65016 i&lt;br /&gt;
 *       RD: 10.255.255.12:10200 ip-prefix 192.168.60.0/24&lt;br /&gt;
                                 10.255.255.12         -       100     0       65004 65016 i&lt;br /&gt;
&lt;br /&gt;
# CVX&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp l2vpn evpn route type prefix&lt;br /&gt;
BGP table version is 7, local router ID is 10.255.255.12&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65004 65003 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65004 65003 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65004 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65004 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65004 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65004 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.11:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
Route Distinguisher: 10.255.255.12:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12            0         32768 i&lt;br /&gt;
                    ET:8 RT:65000:200 Rmac:50:01:00:11:00:03&lt;br /&gt;
&lt;br /&gt;
# Now we check with traceroute on the 3 clients connected on focused leaf switches&lt;br /&gt;
&lt;br /&gt;
# client leaf VyOS&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.50.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=1 ttl=62 time=16.456 ms&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=2 ttl=62 time=11.852 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.60.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=1 ttl=62 time=5.554 ms&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=2 ttl=62 time=4.432 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.50.2&lt;br /&gt;
trace to 192.168.50.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.10.1   0.499 ms  3.143 ms  1.432 ms&lt;br /&gt;
 2   192.168.50.1   10.465 ms  12.512 ms  8.992 ms&lt;br /&gt;
 3   *192.168.50.2   11.056 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; trace 192.168.60.2&lt;br /&gt;
trace to 192.168.60.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.10.1   0.525 ms  0.312 ms  0.278 ms&lt;br /&gt;
 2   192.168.60.1   4.949 ms  4.232 ms  4.022 ms&lt;br /&gt;
 3   *192.168.60.2   4.167 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# client leaf Arista&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.10.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.10.2 icmp_seq=1 ttl=62 time=10.914 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.60.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=1 ttl=62 time=11.755 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.10.2&lt;br /&gt;
trace to 192.168.10.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.50.1   4.742 ms  4.123 ms  4.293 ms&lt;br /&gt;
 2   192.168.10.1   12.550 ms  15.039 ms  9.411 ms&lt;br /&gt;
 3   *192.168.10.2   8.939 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; &lt;br /&gt;
VPCS&amp;gt; trace 192.168.60.2&lt;br /&gt;
trace to 192.168.60.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.50.1   3.073 ms  2.901 ms  2.585 ms&lt;br /&gt;
 2   192.168.60.1   10.815 ms  11.493 ms  12.144 ms&lt;br /&gt;
 3   *192.168.60.2   10.429 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
# client leaf Cumulus&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.10.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.10.2 icmp_seq=1 ttl=62 time=4.731 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.50.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=1 ttl=62 time=11.722 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.50.2&lt;br /&gt;
trace to 192.168.50.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.60.1   0.487 ms  0.266 ms  0.248 ms&lt;br /&gt;
 2   192.168.50.1   6.691 ms  6.281 ms  6.613 ms&lt;br /&gt;
 3   *192.168.50.2   9.355 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; &lt;br /&gt;
VPCS&amp;gt; trace 192.168.10.2&lt;br /&gt;
trace to 192.168.10.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.60.1   0.436 ms  0.315 ms  0.380 ms&lt;br /&gt;
 2   192.168.10.1   4.535 ms  4.661 ms  3.994 ms&lt;br /&gt;
 3   *192.168.10.2   4.292 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conclusion of the lab ===&lt;br /&gt;
These first results are satisfying, it comforts the idea that VXLAN is a strong option to deliver L2/L3 services in datacenters, but not only. This kind of architecture is more and more chosen in campus designs, PRA, NFV solutions.&lt;br /&gt;
&lt;br /&gt;
The support of this technology on more and more open source NOS are encouraging regarding the innovation. If we look at Vyatta project for example, whom OS can be compiled &amp;quot;brick per brick&amp;quot;, we could imagine to create NFV CPEs providing VXLAN fabric extensions of some client VRFs. CPE could be connected to the central Fabric within encrypted tunnels (wireguard,ipsec) or through direct link over MacSec (this feature in on the Vyatta Roadmap).&lt;br /&gt;
&lt;br /&gt;
Please contact us if you want to feed the topic / discuss the lab.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
&lt;br /&gt;
Pierre L.&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=VyosAristaCVX-VXLAN-lab&amp;diff=3011</id>
		<title>VyosAristaCVX-VXLAN-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=VyosAristaCVX-VXLAN-lab&amp;diff=3011"/>
		<updated>2022-04-05T12:40:19Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
More and more, EVPN is making its place in Datacenter field. Mainstream vendors integrate its support, with VXLAN or MPLS for data plane + BGP for control plane. In previous labs, we were able to observe that interoperability was quite good between vendors. Nevertheless, even we've already tested CumulusVX, there are also other open sources NOS which can support EVPN.&lt;br /&gt;
&lt;br /&gt;
Today we'll test VyOS in it's latest rolling version, which handles the support of EVPN.&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* create a VXLAN Fabric with VyOS nodes&lt;br /&gt;
* provide a L2VPN and a L3VPN to client nodes within the fabric&lt;br /&gt;
* integrate some other vendors node into the fabric, here Arista and Cumulus VX&lt;br /&gt;
* test that all works as expected&lt;br /&gt;
&lt;br /&gt;
=== Lab setup ===&lt;br /&gt;
To reach those goals, we'll use the EVE-NG tool in community edition (https://www.eve-ng.net/index.php/download/#DL-COMM) and use the following NOS version : &lt;br /&gt;
&lt;br /&gt;
* Vyatta VyOS 1.4 rolling &amp;lt;-- free to download https://vyos.net/get/nightly-builds/&lt;br /&gt;
* Arista vEOS 4.26.0F lab edition &amp;lt;-- need a support account&lt;br /&gt;
* Nvidia Cumulus VX 4.2.1 lab edition &amp;lt;-- free to download https://www.nvidia.com/en-us/networking/ethernet-switching/cumulus-vx/download/&lt;br /&gt;
&lt;br /&gt;
We'll build a 3-tiers fabric, with leaf/spine/superspine devices, VXLAN/EVPN running on all nodes. It gives the following setup: &lt;br /&gt;
&lt;br /&gt;
[[File:nesevo-Lab-Vyatta-Arista-CVX.png]]&lt;br /&gt;
&lt;br /&gt;
On EVE-NG, we add IP information, ASN, loopback IPs. All other information will be past after when dealing with technical details.    &lt;br /&gt;
&lt;br /&gt;
So, it gives:      &lt;br /&gt;
&lt;br /&gt;
[[File:2022-02_eveng-lab-vyatta-cum-arista.png]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;span class=&amp;quot;mw-headline&amp;quot;&amp;gt;VXLAN/BGP infos&amp;lt;/span&amp;gt; ====&lt;br /&gt;
Note: in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 6 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
|200&lt;br /&gt;
|the 6 clients have their own subnets. Here we use only one vni because no ESI will be implemented. One leaf one subnet.&lt;br /&gt;
|}&lt;br /&gt;
Client devices are represented by computers on EVE-NG. IPs in green are using the L2VPN service (extended layer 2 between pods) and IPs in orange the L3VPN service (routing service).&lt;br /&gt;
&lt;br /&gt;
Below some diagrams showing the logic topologies : &lt;br /&gt;
&lt;br /&gt;
[[File:Nesevo-Lab-Vyatta-Arista-CVX-l2vpn.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Nesevo-Lab-Vyatta-Arista-CVX-l3vpn.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below the link to the configurations to allow you to quickly reproduce the tab.&lt;br /&gt;
&lt;br /&gt;
To be noted that the configurations are not &amp;quot;ready-to-prod &amp;quot; and need to be optimized (adding bfd, bgp optimization, etc.). Some typos can subsist. Whatever, the lab works and gives the expected results :)&lt;br /&gt;
&lt;br /&gt;
Link to devices configurations : [[File:02.lab-vyos-eos-cvx_v2.zip]]&lt;br /&gt;
&lt;br /&gt;
=== Lab details ===&lt;br /&gt;
Considering that the lab is up and running, we'll now come back to the architecture.&lt;br /&gt;
&lt;br /&gt;
We have 3 kinds of network nodes : &lt;br /&gt;
&lt;br /&gt;
* leaf switches, on edge, which provide L2 and L3 services.&lt;br /&gt;
* couple of spine switches which allow leaf from a same pod to exchange traffic. They are also connected to superspine to reach other pods&lt;br /&gt;
* superspine switches which interconnext the different spine switches from the different pods, thus allowing interpods traffic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All those network devices control plane can exchange routes' information within 2 layers of bgp : underlay and overlay.&lt;br /&gt;
&lt;br /&gt;
The role of the &amp;quot;underlay&amp;quot; is to dynamically route the traffic between loopback interfaces from the different nodes. Loopback interfaces are used to mount BGP sessions for the underlay and are used as VTEP interfaces on leaf nodes. Generally, it's better to have 2 different Loopback for this usage (in case of anycast vtep setup for example), but some vendors don't allow to 2 loopback interfaces in the same routing context. Whatever, in our setup, having only one loopback is fine.  &lt;br /&gt;
&lt;br /&gt;
Here, the underlay is done in eBGP, &amp;lt;u&amp;gt;ipv4 unicast family only + route-map to only redistribute loopback interfaces IP&amp;lt;/u&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* Each node mount a session to the directly connected peers. &lt;br /&gt;
* Each leaf node has a dedicated ASN. &lt;br /&gt;
* Each couple of spine/superspine has a ASN for two, to follow the best practices to optimize the routing table (ECMP).&lt;br /&gt;
&lt;br /&gt;
The role of the &amp;quot;overlay&amp;quot; is to exchange EVPN routes type 2,3,5 here (type 1/4 routes seem to not be managed by VyOS at the moment, TBC). &lt;br /&gt;
&lt;br /&gt;
* eBGP multihop sessions are mounted to directly neighbor loopback IPs.&lt;br /&gt;
* policies/options are set to not change the original nexthop when propagating routes&lt;br /&gt;
* for L2 services we only allow the redistribution of type 2 (macip) and type 3 (inclusive mcast for BUM management) routes&lt;br /&gt;
* for L3 services we only allow the redistribution of type 5 (prefix) routes&lt;br /&gt;
* regarding the setup, to enhance the scalability, it could be nice to use dedicated nodes (VM or phys) to take the role of route-servers. Here, we could connect them to superspine. Thus, spine/superspine would only do underlay and could not be a bottleneck for the control plane scalability&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Moreover, regarding the lab setup, no bgp pic / bfd / VMTO / other option are implemented to optimize the convergence / traffic delivery. The goal was to verify that VyOS is compatible in a basic but functionnal VXLAN setup.&lt;br /&gt;
&lt;br /&gt;
Now, we'll take a look on the different output from the 2 vendors leaf / spine / superspine to verify that all works as expected.&lt;br /&gt;
&lt;br /&gt;
We verify that underlay works well. All is fine if: &lt;br /&gt;
&lt;br /&gt;
* we have an eBGP session per directly connected peer&lt;br /&gt;
* we receive the same number of prefixes per peer type: &lt;br /&gt;
** a leef has to receive the same number of prefixes from its spine neighbors&lt;br /&gt;
** spine neigbors have to receive the same amount of prefixes from superspine, and reciprocally&lt;br /&gt;
** all VTEP IPs have to be known into the GRT (global routing table / default routing instance)&lt;br /&gt;
&lt;br /&gt;
====== On VyOS ======&lt;br /&gt;
Below we can see that we receive 17 prefixes from both neighbors and that we know all loopback IPs from the setup (13 remote, 1 local). We have a bit too much routes, because on Cumulus nodes the filters that I have configured seem misconstructed.&lt;br /&gt;
&lt;br /&gt;
To be noted that spine will announce all the Loopback IPs except the one from it's twin, since they are not directly connected and superspine respect as loop protection constraint (don't reflect routes originated by an ASN &amp;quot;X&amp;quot; to a peer from the same ASN &amp;quot;X&amp;quot;).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip bgp summary established &lt;br /&gt;
&lt;br /&gt;
IPv4 Unicast Summary (VRF default):&lt;br /&gt;
BGP router identifier 10.255.255.5, local AS number 65011 vrf-id 0&lt;br /&gt;
BGP table version 20&lt;br /&gt;
RIB entries 37, using 6808 bytes of memory&lt;br /&gt;
Peers 2, using 1446 KiB of memory&lt;br /&gt;
Peer groups 2, using 128 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc&lt;br /&gt;
10.254.254.9    4      65001     29993     29988        0    0    0 02w6d19h           17       19 N/A&lt;br /&gt;
10.254.254.11   4      65001     17218     17220        0    0    0 01w4d22h           17       19 N/A&lt;br /&gt;
&lt;br /&gt;
Displayed neighbors 2&lt;br /&gt;
Total number of neighbors 2&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip route | match /32&lt;br /&gt;
B&amp;gt;* 10.255.255.1/32 [20/0] via 10.254.254.9, eth0, weight 1, 02w6d19h&lt;br /&gt;
B&amp;gt;* 10.255.255.2/32 [20/0] via 10.254.254.11, eth1, weight 1, 01w4d22h&lt;br /&gt;
B&amp;gt;* 10.255.255.3/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.4/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
C&amp;gt;* 10.255.255.5/32 is directly connected, dum0, 02w6d19h&lt;br /&gt;
B&amp;gt;* 10.255.255.6/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d22h&lt;br /&gt;
B&amp;gt;* 10.255.255.7/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.8/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.9/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.10/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.11/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d01h&lt;br /&gt;
B&amp;gt;* 10.255.255.12/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d00h&lt;br /&gt;
B&amp;gt;* 10.255.255.13/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d01h&lt;br /&gt;
B&amp;gt;* 10.255.255.14/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d00h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== On Arista ======&lt;br /&gt;
We verify that we receive prefix + same leaf / superspine / remote pods spine IPs (we note there misses some filters on spine since we receive /31 interco routes): &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
leaf1-pod3#show ip bgp neighbors 10.254.254.43 received-routes &lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
          10.254.254.36/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.38/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.42/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.44/31       10.254.254.43         -       -          -       -       65004 65016 ?&lt;br /&gt;
          10.254.254.46/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
 *        10.255.255.1/32        10.254.254.43         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 *        10.255.255.2/32        10.254.254.43         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 *        10.255.255.3/32        10.254.254.43         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 *        10.255.255.4/32        10.254.254.43         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 *        10.255.255.5/32        10.254.254.43         -       -          -       -       65004 65003 65001 65011 ?&lt;br /&gt;
 *        10.255.255.6/32        10.254.254.43         -       -          -       -       65004 65003 65001 65012 ?&lt;br /&gt;
 *        10.255.255.7/32        10.254.254.43         -       -          -       -       65004 65003 65002 65013 ?&lt;br /&gt;
 *        10.255.255.8/32        10.254.254.43         -       -          -       -       65004 65003 65002 65014 ?&lt;br /&gt;
 *        10.255.255.9/32        10.254.254.43         -       -          -       -       65004 65003 ?&lt;br /&gt;
 *        10.255.255.10/32       10.254.254.43         -       -          -       -       65004 65003 ?&lt;br /&gt;
 *        10.255.255.12/32       10.254.254.43         -       -          -       -       65004 65016 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.14/32       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
leaf1-pod3#show ip bgp neighbors 10.254.254.41 received-routes&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 * &amp;gt;      10.255.255.1/32        10.254.254.41         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.2/32        10.254.254.41         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.3/32        10.254.254.41         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.4/32        10.254.254.41         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.5/32        10.254.254.41         -       -          -       -       65004 65003 65001 65011 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.6/32        10.254.254.41         -       -          -       -       65004 65003 65001 65012 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.7/32        10.254.254.41         -       -          -       -       65004 65003 65002 65013 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.8/32        10.254.254.41         -       -          -       -       65004 65003 65002 65014 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.9/32        10.254.254.41         -       -          -       -       65004 65003 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.10/32       10.254.254.41         -       -          -       -       65004 65003 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.12/32       10.254.254.41         -       -          -       -       65004 65016 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.13/32       10.254.254.41         -       -          -       -       65004 i&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== On Cumulus ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp summary &lt;br /&gt;
show bgp ipv4 unicast summary&lt;br /&gt;
=============================&lt;br /&gt;
BGP router identifier 10.255.255.12, local AS number 65016 vrf-id 0&lt;br /&gt;
BGP table version 103&lt;br /&gt;
RIB entries 37, using 7104 bytes of memory&lt;br /&gt;
Peers 2, using 43 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor                   V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd&lt;br /&gt;
10.254.254.45              4      65004    306764    261331        0    0    0 01:39:02           12&lt;br /&gt;
spine1-pod3(10.254.254.47) 4      65004    261602    261664        0    0    0 01w2d02h           16&lt;br /&gt;
&lt;br /&gt;
Total number of neighbors 2&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show route | grep /32&lt;br /&gt;
B&amp;gt;* 10.255.255.1/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.2/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.3/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.4/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.5/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.6/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.7/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.8/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.9/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.10/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.11/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
C&amp;gt;* 10.255.255.12/32 is directly connected, lo, 01w2d02h&lt;br /&gt;
B&amp;gt;* 10.255.255.13/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.14/32 [20/0] via 10.254.254.47, swp2, weight 1, 01w2d02h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;We can also verify that routing is ok by pinging remote loopback IPs from local loopback + check eBGP EVPN session status: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ping example from VyOS leaf&lt;br /&gt;
vyos@leaf1-pod1:~$ ping 10.255.255.12 source-address 10.255.255.5&lt;br /&gt;
PING 10.255.255.12 (10.255.255.12) from 10.255.255.5 : 56(84) bytes of data.&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=1 ttl=61 time=2.60 ms&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=2 ttl=61 time=2.54 ms&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=3 ttl=61 time=2.44 ms&lt;br /&gt;
&lt;br /&gt;
# check of EVPN sessions on the different vendors&lt;br /&gt;
&lt;br /&gt;
# vyos&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn summary &lt;br /&gt;
BGP router identifier 10.255.255.5, local AS number 65011 vrf-id 0&lt;br /&gt;
BGP table version 0&lt;br /&gt;
RIB entries 31, using 5704 bytes of memory&lt;br /&gt;
Peers 2, using 1446 KiB of memory&lt;br /&gt;
Peer groups 2, using 128 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc&lt;br /&gt;
10.255.255.1    4      65001     30205     30208        0    0    0 02w6d21h           13       13 N/A&lt;br /&gt;
10.255.255.2    4      65001     17392     17429        0    0    0 01w5d00h           11       13 N/A&lt;br /&gt;
&lt;br /&gt;
# Arista&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show bgp evpn summary&lt;br /&gt;
BGP summary information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Neighbor Status Codes: m - Under maintenance&lt;br /&gt;
  Description              Neighbor         V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc&lt;br /&gt;
  OVL_spine1-pod3          10.255.255.13    4 65004          15608     15503    0    0 00:03:47 Estab   17     17&lt;br /&gt;
  OVL_spine2-pod3          10.255.255.14    4 65004         262780    308558    0    0    9d02h Estab   13     13&lt;br /&gt;
&lt;br /&gt;
# Cumulus&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp l2vpn evpn summary&lt;br /&gt;
BGP router identifier 10.255.255.12, local AS number 65016 vrf-id 0&lt;br /&gt;
BGP table version 0&lt;br /&gt;
RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
Peers 2, using 43 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor                   V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd&lt;br /&gt;
10.255.255.13              4      65004    307243    261693        0    0    0 00:04:25           14&lt;br /&gt;
spine1-pod3(10.255.255.14) 4      65004    262001    262025        0    0    0 01w2d02h           10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On EVPN, we should receive quite the same number of prefixes from both spine, but looks like there differences of best path election + redistribution between vendors. Perhaps something to dig. The most important point is to verify that the FIB for the services are consistent. &lt;br /&gt;
&lt;br /&gt;
==== L2 service implementation ====&lt;br /&gt;
On that topic, we'll firstly focus on the Layer 2 service. To be sure that all works as expected we have to check that: &lt;br /&gt;
&lt;br /&gt;
* mac-address-table are consistent on the whole fabric. In traditionnal L2 setup, switch FIBs depend of the traffic passing through them and a mac @ can be see &amp;quot;everywhere&amp;quot; if it does a BUM on the network. In VXLAN, in a mac-vrf topology without filer, even a host doesn't send BUM, the mac address is propagated on the whole fabric (within BGP update). But, as it is on traditional L2 topology, you have to be sure that mac @ table aging time are consistent on all devices, with an aging time superior to ARP timer on hosts. &lt;br /&gt;
* routes type 2 are visible on each leaf nodes for a same vni, routes type 3 to reach remote VTEP have to be learned&lt;br /&gt;
* a common route-target for the VRF routes need to be used/set within policies. In effect, there are differences between vendors on route &amp;quot;tagging&amp;quot; (features to auto generate route-target, &amp;quot;hard coded&amp;quot; alogos, etc.). Here, on VyOS, we got to add adminstrative extended communities within route-map for the L2 VNI. We'll show it below&lt;br /&gt;
* all fabric connections (interconnections between network nodes) have the sufficient &amp;quot;IP MTU&amp;quot;. Please keep in mind that VXLAN overhead has a size of 50 bytes. So, to be sure that Jumbo traffic for host is ok, configure it at least at 9050 Bytes. I would advise to push it at 9100 Bytes in case of VXLAN usage on client HOSTS for Virtualized setup on servers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check FDB on leaf switch + debug type 2 routes' propagation for leaf1 pod1&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
##############&lt;br /&gt;
# VyOS&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb&lt;br /&gt;
50:01:00:01:00:02 dev eth2 vlan 1 master br100 permanent&lt;br /&gt;
50:01:00:01:00:02 dev eth2 master br100 permanent&lt;br /&gt;
33:33:00:00:00:01 dev eth2 self permanent&lt;br /&gt;
33:33:00:00:00:02 dev eth2 self permanent&lt;br /&gt;
01:00:5e:00:00:01 dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:0e dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:03 dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:00 dev eth2 self permanent&lt;br /&gt;
33:33:00:00:00:01 dev br100 self permanent&lt;br /&gt;
33:33:00:00:00:02 dev br100 self permanent&lt;br /&gt;
33:33:ff:01:00:02 dev br100 self permanent&lt;br /&gt;
01:00:5e:00:00:6a dev br100 self permanent&lt;br /&gt;
33:33:00:00:00:6a dev br100 self permanent&lt;br /&gt;
01:00:5e:00:00:01 dev br100 self permanent&lt;br /&gt;
33:33:ff:00:00:00 dev br100 self permanent&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 vlan 1 extern_learn master br100 &lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 extern_learn master br100 &lt;br /&gt;
8a:d0:00:16:1c:17 dev vxlan100 vlan 1 master br100 permanent&lt;br /&gt;
8a:d0:00:16:1c:17 dev vxlan100 master br100 permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.6 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.11 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.12 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.7 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.8 self permanent&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 dst 10.255.255.12 self extern_learn &lt;br /&gt;
&lt;br /&gt;
# and to focus on remote nodes&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb | grep &amp;quot;self extern_learn&amp;quot;&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 dst 10.255.255.12 self extern_learn &lt;br /&gt;
00:50:79:66:68:13 dev vxlan100 dst 10.255.255.11 self extern_learn &lt;br /&gt;
00:50:79:66:68:19 dev vxlan100 dst 10.255.255.8 self extern_learn &lt;br /&gt;
00:50:79:66:68:0c dev vxlan100 dst 10.255.255.6 self extern_learn &lt;br /&gt;
00:50:79:66:68:17 dev vxlan100 dst 10.255.255.7 self extern_learn &lt;br /&gt;
&lt;br /&gt;
# or on local clients &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb | grep eth | grep -v perm&lt;br /&gt;
00:50:79:66:68:0b dev eth2 master br100 &lt;br /&gt;
&lt;br /&gt;
# Now if we want to focus on route type 3 learned &lt;br /&gt;
&lt;br /&gt;
Displayed 7 prefixes (12 paths) (of requested type)&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn route type 3 | grep Dis&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
Route Distinguisher: 10.255.255.6:3&lt;br /&gt;
Route Distinguisher: 10.255.255.7:2&lt;br /&gt;
Route Distinguisher: 10.255.255.8:2&lt;br /&gt;
Route Distinguisher: 10.255.255.11:100&lt;br /&gt;
Route Distinguisher: 10.255.255.12:100&lt;br /&gt;
&lt;br /&gt;
# we notice that RDs for VyOS nodes don't respect the logic of &amp;lt;Loopback:vni&amp;gt;. It s because for the moment we can't set it by vni (or I didn't find how to do that)&lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Arista&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
# we check the fdb. Remote host are behind the port Vx1&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show mac address-table vlan 100&lt;br /&gt;
          Mac Address Table&lt;br /&gt;
------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Vlan    Mac Address       Type        Ports      Moves   Last Move&lt;br /&gt;
----    -----------       ----        -----      -----   ---------&lt;br /&gt;
 100    0050.7966.680c    DYNAMIC     Vx1        1       0:00:38 ago&lt;br /&gt;
 100    0050.7966.6813    DYNAMIC     Et3        1       0:14:08 ago&lt;br /&gt;
 100    0050.7966.6815    DYNAMIC     Vx1        1       9 days, 2:36:39 ago&lt;br /&gt;
 100    0050.7966.6817    DYNAMIC     Vx1        1       0:00:36 ago&lt;br /&gt;
 100    0050.7966.6819    DYNAMIC     Vx1        1       0:00:35 ago&lt;br /&gt;
Total Mac Addresses for this criterion: 5&lt;br /&gt;
&lt;br /&gt;
# we check that all VTEP are ready for BUM&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show bgp evpn route-type imet | i &amp;gt;&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.5:3 imet 10.255.255.5&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.6:3 imet 10.255.255.6&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.7:2 imet 10.255.255.7&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.8:2 imet 10.255.255.8&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.11:100 imet 10.255.255.11&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.12:100 imet 10.255.255.12&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show vxlan vtep detail&lt;br /&gt;
Remote VTEPS for Vxlan1:&lt;br /&gt;
&lt;br /&gt;
VTEP               Learned Via        MAC Address Learning       Tunnel Type(s) &lt;br /&gt;
------------------ ------------------ -------------------------- -------------- &lt;br /&gt;
10.255.255.5       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.6       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.7       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.8       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.12      control plane      control plane              flood, unicast &lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Cumulus&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
# we check the fdb. Remote host are behind the port Vx1&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bridge macs vlan 100&lt;br /&gt;
&lt;br /&gt;
VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
----  ------  ---------  -----------------  ----------  ---------  ------------  ----------------&lt;br /&gt;
 100  bridge  bridge     50:01:00:11:00:03              permanent                9 days, 02:47:42&lt;br /&gt;
 100  bridge  swp3       00:50:79:66:68:15                                       00:00:06&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0c                         extern_learn  00:00:40&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:13                         extern_learn  00:21:01&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:17                         extern_learn  00:00:38&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:19                         extern_learn  00:00:36&lt;br /&gt;
&lt;br /&gt;
# --&amp;gt; here we see that it misses the @mac from the host on leaf1 pod1. &lt;br /&gt;
# we check the evpn routes on the Cumulus node and we see that from leaf1 pod1 vni 100 we have only those routes&lt;br /&gt;
&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
&lt;br /&gt;
# --&amp;gt; something is wrong on the remote leaf.&lt;br /&gt;
# on the leaf we check the policy for the EVPN routes export&lt;br /&gt;
&lt;br /&gt;
  route-map RM-OUT-VNI {&lt;br /&gt;
         rule 1 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type multicast&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 2 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type prefix&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 3 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     vni 200&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:200&lt;br /&gt;
                 }&lt;br /&gt;
&lt;br /&gt;
# we notice that a typo in rule numbering removed the export of macip routes for vni 100.&lt;br /&gt;
# we correct that : &lt;br /&gt;
&lt;br /&gt;
route-map RM-OUT-VNI {&lt;br /&gt;
         rule 1 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type multicast&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 2 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type macip&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 3 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type prefix&lt;br /&gt;
                     vni 200&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:200&lt;br /&gt;
                 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# once corrected we check the fdb on the cumulus node + evpn routes&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bridge macs vlan 100&lt;br /&gt;
&lt;br /&gt;
VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
----  ------  ---------  -----------------  ----------  ---------  ------------  ----------------&lt;br /&gt;
 100  bridge  bridge     50:01:00:11:00:03              permanent                9 days, 02:51:48&lt;br /&gt;
 100  bridge  swp3       00:50:79:66:68:15                                       00:02:01&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0b                         extern_learn  00:00:26&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0c                         extern_learn  00:04:46&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:13                         extern_learn  00:25:08&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:17                         extern_learn  00:04:45&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:19                         extern_learn  00:04:43&lt;br /&gt;
&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
*  [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# we have now Type 2 routes, all is ok now and we learn the client mac 00:50:79:66:68:0b&lt;br /&gt;
# Nevertheless, the trafic was working between the client hosts, but trafic from Cumulus leaf client to VyOS leaf client was broadcasted to all leaf since the @mac was not advertised on the fabric&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;It could be interesting to check how each node is configured to deliver the service, but the article would be too long. So, to sum the steps to provide a L2 service: &lt;br /&gt;
&lt;br /&gt;
# create a VLAN (on Arista) / bridge (VyOS and Cumulus) + associate it to the VNI/VXLAN instances/interface&lt;br /&gt;
# create the mac vrf + define the route-target into bgp (Arista + Cumulus) / update the route-maps + community list to allow the redistribution of the VNI routes (type 2 and type 3)&lt;br /&gt;
&lt;br /&gt;
==== L3 service implementation ====&lt;br /&gt;
Now, we'll now look at the L3 service. On that kind of setup we need to implement / check:&lt;br /&gt;
* leaf IP subnets are well redistributed betweeb all leaf (here we are in a vrf &amp;quot;any to any&amp;quot; topology)&lt;br /&gt;
* we only redistribute routes for IP prefix. Routes type 2 (mac @) don't need to be redistributed between leaf&lt;br /&gt;
* that all clients can ping each other through the L3VPN&lt;br /&gt;
&lt;br /&gt;
To achieve that, we need to implement analog configuration than for the L2 service, but with the following differences: &lt;br /&gt;
&lt;br /&gt;
* create a VLAN (on Arista) / bridge (VyOS and Cumulus) + associate it to the VNI/VXLAN instances|interface&lt;br /&gt;
* create the L3 VRF + define the route-target into bgp (Arista + Cumulus + VyOS) + allow connected routes distribution (Arista / Cumulus) / update the route-maps + community list to allow the redistribution of the VNI routes (type 5) for VyOS / restrict the routes redistribution to type 5 routes into the VNI (Cumulus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we check the routing table with common cli commands + into the EVPN RIB :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# check routes into the vrf &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip route vrf VRF-L3-1&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,&lt;br /&gt;
       f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF VRF-L3-1:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 02w6d22h&lt;br /&gt;
C&amp;gt;* 192.168.10.0/24 is directly connected, br200, 02w6d22h&lt;br /&gt;
B&amp;gt;* 192.168.20.0/24 [20/0] via 10.255.255.6, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
B&amp;gt;* 192.168.30.0/24 [20/0] via 10.255.255.7, br200 onlink, weight 1, 05:04:15&lt;br /&gt;
B&amp;gt;* 192.168.40.0/24 [20/0] via 10.255.255.8, br200 onlink, weight 1, 04:59:41&lt;br /&gt;
B&amp;gt;* 192.168.50.0/24 [20/0] via 10.255.255.11, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
B&amp;gt;* 192.168.60.0/24 [20/0] via 10.255.255.12, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show ip route vrf VRF-L3-1&lt;br /&gt;
&lt;br /&gt;
VRF: VRF-L3-1&lt;br /&gt;
Codes: C - connected, S - static, K - kernel, &lt;br /&gt;
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,&lt;br /&gt;
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,&lt;br /&gt;
       N2 - OSPF NSSA external type2, B - BGP, B I - iBGP, B E - eBGP,&lt;br /&gt;
       R - RIP, I L1 - IS-IS level 1, I L2 - IS-IS level 2,&lt;br /&gt;
       O3 - OSPFv3, A B - BGP Aggregate, A O - OSPF Summary,&lt;br /&gt;
       NG - Nexthop Group Static Route, V - VXLAN Control Service,&lt;br /&gt;
       DH - DHCP client installed default route, M - Martian,&lt;br /&gt;
       DP - Dynamic Policy Route, L - VRF Leaked,&lt;br /&gt;
       G  - gRIBI, RC - Route Cache Route&lt;br /&gt;
&lt;br /&gt;
Gateway of last resort is not set&lt;br /&gt;
&lt;br /&gt;
 B E      192.168.10.0/24 [200/0] via VTEP 10.255.255.5 VNI 200 router-mac 12:9b:9b:d8:f6:86 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.20.0/24 [200/0] via VTEP 10.255.255.6 VNI 200 router-mac 50:01:00:02:00:03 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.30.0/24 [200/0] via VTEP 10.255.255.7 VNI 200 router-mac 50:01:00:09:00:03 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.40.0/24 [200/0] via VTEP 10.255.255.8 VNI 200 router-mac 50:01:00:0a:00:03 local-interface Vxlan1&lt;br /&gt;
 C        192.168.50.0/24 is directly connected, Vlan200&lt;br /&gt;
 B E      192.168.60.0/24 [200/0] via VTEP 10.255.255.12 VNI 200 router-mac 50:01:00:11:00:03 local-interface Vxlan1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show route vrf VRF-L3-1&lt;br /&gt;
show ip route vrf VRF-L3-1 &lt;br /&gt;
===========================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued route, r - rejected route&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VRF VRF-L3-1:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 01w2d03h&lt;br /&gt;
B&amp;gt;* 192.168.10.0/24 [20/0] via 10.255.255.5, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.20.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.30.0/24 [20/0] via 10.255.255.7, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.40.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.50.0/24 [20/0] via 10.255.255.11, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
C&amp;gt;* 192.168.60.0/24 is directly connected, vlan200, 01w2d03h&lt;br /&gt;
&lt;br /&gt;
# we can notice that the output are quite similar, except on Arista which indicates the VNI for remote targets, instead of referencing the local bridge / vlan200&lt;br /&gt;
&lt;br /&gt;
# Now we check the routes for the VNI 200&lt;br /&gt;
&lt;br /&gt;
# VyOS &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn route type prefix &lt;br /&gt;
BGP table version is 1, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[EthTag]:[ESI]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5             0         32768 ?&lt;br /&gt;
                    ET:8 RT:65000:200 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65001 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65001 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.11:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65001 65003 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65001 65003 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
Route Distinguisher: 10.255.255.12:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12                          0 65001 65003 65004 65016 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:11:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12                          0 65001 65003 65004 65016 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:11:00:03&lt;br /&gt;
&lt;br /&gt;
# Arista&lt;br /&gt;
                        &lt;br /&gt;
leaf1-pod3#show bgp evpn route ip-prefix ipv4 &lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  LocPref Weight  Path&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.5:200 ip-prefix 192.168.10.0/24&lt;br /&gt;
                                 10.255.255.5          -       100     0       65004 65003 65001 65011 ?&lt;br /&gt;
 *       RD: 10.255.255.5:200 ip-prefix 192.168.10.0/24&lt;br /&gt;
                                 10.255.255.5          -       100     0       65004 65003 65001 65011 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.6:200 ip-prefix 192.168.20.0/24&lt;br /&gt;
                                 10.255.255.6          -       100     0       65004 65003 65001 65012 ?&lt;br /&gt;
 *       RD: 10.255.255.6:200 ip-prefix 192.168.20.0/24&lt;br /&gt;
                                 10.255.255.6          -       100     0       65004 65003 65001 65012 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.7:200 ip-prefix 192.168.30.0/24&lt;br /&gt;
                                 10.255.255.7          -       100     0       65004 65003 65002 65013 ?&lt;br /&gt;
 *       RD: 10.255.255.7:200 ip-prefix 192.168.30.0/24&lt;br /&gt;
                                 10.255.255.7          -       100     0       65004 65003 65002 65013 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.8:200 ip-prefix 192.168.40.0/24&lt;br /&gt;
                                 10.255.255.8          -       100     0       65004 65003 65002 65014 ?&lt;br /&gt;
 *       RD: 10.255.255.8:200 ip-prefix 192.168.40.0/24&lt;br /&gt;
                                 10.255.255.8          -       100     0       65004 65003 65002 65014 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.11:200 ip-prefix 192.168.50.0/24&lt;br /&gt;
                                 -                     -       -       0       i&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.12:10200 ip-prefix 192.168.60.0/24&lt;br /&gt;
                                 10.255.255.12         -       100     0       65004 65016 i&lt;br /&gt;
 *       RD: 10.255.255.12:10200 ip-prefix 192.168.60.0/24&lt;br /&gt;
                                 10.255.255.12         -       100     0       65004 65016 i&lt;br /&gt;
&lt;br /&gt;
# CVX&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp l2vpn evpn route type prefix&lt;br /&gt;
BGP table version is 7, local router ID is 10.255.255.12&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65004 65003 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65004 65003 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65004 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65004 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65004 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65004 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.11:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
Route Distinguisher: 10.255.255.12:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12            0         32768 i&lt;br /&gt;
                    ET:8 RT:65000:200 Rmac:50:01:00:11:00:03&lt;br /&gt;
&lt;br /&gt;
# Now we check with traceroute on the 3 clients connected on focused leaf switches&lt;br /&gt;
&lt;br /&gt;
# client leaf VyOS&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.50.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=1 ttl=62 time=16.456 ms&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=2 ttl=62 time=11.852 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.60.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=1 ttl=62 time=5.554 ms&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=2 ttl=62 time=4.432 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.50.2&lt;br /&gt;
trace to 192.168.50.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.10.1   0.499 ms  3.143 ms  1.432 ms&lt;br /&gt;
 2   192.168.50.1   10.465 ms  12.512 ms  8.992 ms&lt;br /&gt;
 3   *192.168.50.2   11.056 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; trace 192.168.60.2&lt;br /&gt;
trace to 192.168.60.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.10.1   0.525 ms  0.312 ms  0.278 ms&lt;br /&gt;
 2   192.168.60.1   4.949 ms  4.232 ms  4.022 ms&lt;br /&gt;
 3   *192.168.60.2   4.167 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# client leaf Arista&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.10.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.10.2 icmp_seq=1 ttl=62 time=10.914 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.60.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=1 ttl=62 time=11.755 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.10.2&lt;br /&gt;
trace to 192.168.10.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.50.1   4.742 ms  4.123 ms  4.293 ms&lt;br /&gt;
 2   192.168.10.1   12.550 ms  15.039 ms  9.411 ms&lt;br /&gt;
 3   *192.168.10.2   8.939 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; &lt;br /&gt;
VPCS&amp;gt; trace 192.168.60.2&lt;br /&gt;
trace to 192.168.60.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.50.1   3.073 ms  2.901 ms  2.585 ms&lt;br /&gt;
 2   192.168.60.1   10.815 ms  11.493 ms  12.144 ms&lt;br /&gt;
 3   *192.168.60.2   10.429 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
# client leaf Cumulus&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.10.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.10.2 icmp_seq=1 ttl=62 time=4.731 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.50.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=1 ttl=62 time=11.722 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.50.2&lt;br /&gt;
trace to 192.168.50.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.60.1   0.487 ms  0.266 ms  0.248 ms&lt;br /&gt;
 2   192.168.50.1   6.691 ms  6.281 ms  6.613 ms&lt;br /&gt;
 3   *192.168.50.2   9.355 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; &lt;br /&gt;
VPCS&amp;gt; trace 192.168.10.2&lt;br /&gt;
trace to 192.168.10.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.60.1   0.436 ms  0.315 ms  0.380 ms&lt;br /&gt;
 2   192.168.10.1   4.535 ms  4.661 ms  3.994 ms&lt;br /&gt;
 3   *192.168.10.2   4.292 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conclusion of the lab ===&lt;br /&gt;
These first results are satisfying, it comforts the idea that VXLAN is a strong option to deliver L2/L3 services in datacenters, but not only. This kind of architecture is more and more chosen in campus designs, PRA, NFV solutions.&lt;br /&gt;
&lt;br /&gt;
The support of this technology on more and more open source NOS are encouraging regarding the innovation. If we look at Vyatta project for example, whom OS can be compiled &amp;quot;brick per brick&amp;quot;, we could imagine to create NFV CPEs providing VXLAN fabric extensions of some client VRFs. CPE could be connected to the central Fabric within encrypted tunnels (wireguard,ipsec) or through direct link over MacSec (this feature in on the Vyatta Roadmap).&lt;br /&gt;
&lt;br /&gt;
Please contact us if you want to feed the topic / discuss the lab.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
&lt;br /&gt;
Pierre L.&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=VyosAristaCVX-VXLAN-lab&amp;diff=3010</id>
		<title>VyosAristaCVX-VXLAN-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=VyosAristaCVX-VXLAN-lab&amp;diff=3010"/>
		<updated>2022-04-05T12:37:45Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
More and more, EVPN is making its place in Datacenter field. Mainstream vendors integrate its support, with VXLAN or MPLS for data plane + BGP for control plane. In previous labs, we were able to observe that interoperability was quite good between vendors. Nevertheless, even we've already tested CumulusVX, there are also other open sources NOS which can support EVPN.&lt;br /&gt;
&lt;br /&gt;
Today we'll test VyOS in it's latest rolling version, which handles the support of EVPN.&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* create a VXLAN Fabric with VyOS nodes&lt;br /&gt;
* provide a L2VPN and a L3VPN to client nodes within the fabric&lt;br /&gt;
* integrate some other vendors node into the fabric, here Arista and Cumulus VX&lt;br /&gt;
* test that all works as expected&lt;br /&gt;
&lt;br /&gt;
=== Lab setup ===&lt;br /&gt;
To reach those goals, we'll use the EVE-NG tool in community edition (https://www.eve-ng.net/index.php/download/#DL-COMM) and use the following NOS version : &lt;br /&gt;
&lt;br /&gt;
* Vyatta VyOS 1.4 rolling &amp;lt;-- free to download https://vyos.net/get/nightly-builds/&lt;br /&gt;
* Arista vEOS 4.26.0F lab edition &amp;lt;-- need a support account&lt;br /&gt;
* Nvidia Cumulus VX 4.2.1 lab edition &amp;lt;-- free to download https://www.nvidia.com/en-us/networking/ethernet-switching/cumulus-vx/download/&lt;br /&gt;
&lt;br /&gt;
We'll build a 3-tiers fabric, with leaf/spine/superspine devices, VXLAN/EVPN running on all nodes. It gives the following setup: &lt;br /&gt;
&lt;br /&gt;
[[Datei:nesevo-Lab-Vyatta-Arista-CVX.png|rahmenlos|600x600px]]&lt;br /&gt;
&lt;br /&gt;
On EVE-NG, we add IP information, ASN, loopback IPs. All other information will be past after when dealing with technical details.    &lt;br /&gt;
&lt;br /&gt;
So, it gives:      &lt;br /&gt;
&lt;br /&gt;
[[Datei:2022-02_eveng-lab-vyatta-cum-arista.png|rahmenlos|600x600px]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;span class=&amp;quot;mw-headline&amp;quot;&amp;gt;VXLAN/BGP infos&amp;lt;/span&amp;gt; ====&lt;br /&gt;
Note: in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 6 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
|200&lt;br /&gt;
|the 6 clients have their own subnets. Here we use only one vni because no ESI will be implemented. One leaf one subnet.&lt;br /&gt;
|}&lt;br /&gt;
Client devices are represented by computers on EVE-NG. IPs in green are using the L2VPN service (extended layer 2 between pods) and IPs in orange the L3VPN service (routing service).&lt;br /&gt;
&lt;br /&gt;
Below some diagrams showing the logic topologies : &lt;br /&gt;
&lt;br /&gt;
[[Datei:Nesevo-Lab-Vyatta-Arista-CVX-l2vpn.png|rahmenlos|400x400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[https://wiki.nesevo.com/images/0/04/Nesevo-Lab-Vyatta-Arista-CVX-l3vpn.png|rahmenlos|400x400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below the link to the configurations to allow you to quickly reproduce the tab.&lt;br /&gt;
&lt;br /&gt;
To be noted that the configurations are not &amp;quot;ready-to-prod &amp;quot; and need to be optimized (adding bfd, bgp optimization, etc.). Some typos can subsist. Whatever, the lab works and gives the expected results :)&lt;br /&gt;
&lt;br /&gt;
Link to devices configurations : http://wiki.intra.nesevo.com/images/3/32/02.lab-vyos-eos-cvx_v2.zip&lt;br /&gt;
&lt;br /&gt;
=== Lab details ===&lt;br /&gt;
Considering that the lab is up and running, we'll now come back to the architecture.&lt;br /&gt;
&lt;br /&gt;
We have 3 kinds of network nodes : &lt;br /&gt;
&lt;br /&gt;
* leaf switches, on edge, which provide L2 and L3 services.&lt;br /&gt;
* couple of spine switches which allow leaf from a same pod to exchange traffic. They are also connected to superspine to reach other pods&lt;br /&gt;
* superspine switches which interconnext the different spine switches from the different pods, thus allowing interpods traffic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All those network devices control plane can exchange routes' information within 2 layers of bgp : underlay and overlay.&lt;br /&gt;
&lt;br /&gt;
The role of the &amp;quot;underlay&amp;quot; is to dynamically route the traffic between loopback interfaces from the different nodes. Loopback interfaces are used to mount BGP sessions for the underlay and are used as VTEP interfaces on leaf nodes. Generally, it's better to have 2 different Loopback for this usage (in case of anycast vtep setup for example), but some vendors don't allow to 2 loopback interfaces in the same routing context. Whatever, in our setup, having only one loopback is fine.  &lt;br /&gt;
&lt;br /&gt;
Here, the underlay is done in eBGP, &amp;lt;u&amp;gt;ipv4 unicast family only + route-map to only redistribute loopback interfaces IP&amp;lt;/u&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* Each node mount a session to the directly connected peers. &lt;br /&gt;
* Each leaf node has a dedicated ASN. &lt;br /&gt;
* Each couple of spine/superspine has a ASN for two, to follow the best practices to optimize the routing table (ECMP).&lt;br /&gt;
&lt;br /&gt;
The role of the &amp;quot;overlay&amp;quot; is to exchange EVPN routes type 2,3,5 here (type 1/4 routes seem to not be managed by VyOS at the moment, TBC). &lt;br /&gt;
&lt;br /&gt;
* eBGP multihop sessions are mounted to directly neighbor loopback IPs.&lt;br /&gt;
* policies/options are set to not change the original nexthop when propagating routes&lt;br /&gt;
* for L2 services we only allow the redistribution of type 2 (macip) and type 3 (inclusive mcast for BUM management) routes&lt;br /&gt;
* for L3 services we only allow the redistribution of type 5 (prefix) routes&lt;br /&gt;
* regarding the setup, to enhance the scalability, it could be nice to use dedicated nodes (VM or phys) to take the role of route-servers. Here, we could connect them to superspine. Thus, spine/superspine would only do underlay and could not be a bottleneck for the control plane scalability&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Moreover, regarding the lab setup, no bgp pic / bfd / VMTO / other option are implemented to optimize the convergence / traffic delivery. The goal was to verify that VyOS is compatible in a basic but functionnal VXLAN setup.&lt;br /&gt;
&lt;br /&gt;
Now, we'll take a look on the different output from the 2 vendors leaf / spine / superspine to verify that all works as expected.&lt;br /&gt;
&lt;br /&gt;
We verify that underlay works well. All is fine if: &lt;br /&gt;
&lt;br /&gt;
* we have an eBGP session per directly connected peer&lt;br /&gt;
* we receive the same number of prefixes per peer type: &lt;br /&gt;
** a leef has to receive the same number of prefixes from its spine neighbors&lt;br /&gt;
** spine neigbors have to receive the same amount of prefixes from superspine, and reciprocally&lt;br /&gt;
** all VTEP IPs have to be known into the GRT (global routing table / default routing instance)&lt;br /&gt;
&lt;br /&gt;
====== On VyOS ======&lt;br /&gt;
Below we can see that we receive 17 prefixes from both neighbors and that we know all loopback IPs from the setup (13 remote, 1 local). We have a bit too much routes, because on Cumulus nodes the filters that I have configured seem misconstructed.&lt;br /&gt;
&lt;br /&gt;
To be noted that spine will announce all the Loopback IPs except the one from it's twin, since they are not directly connected and superspine respect as loop protection constraint (don't reflect routes originated by an ASN &amp;quot;X&amp;quot; to a peer from the same ASN &amp;quot;X&amp;quot;).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip bgp summary established &lt;br /&gt;
&lt;br /&gt;
IPv4 Unicast Summary (VRF default):&lt;br /&gt;
BGP router identifier 10.255.255.5, local AS number 65011 vrf-id 0&lt;br /&gt;
BGP table version 20&lt;br /&gt;
RIB entries 37, using 6808 bytes of memory&lt;br /&gt;
Peers 2, using 1446 KiB of memory&lt;br /&gt;
Peer groups 2, using 128 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc&lt;br /&gt;
10.254.254.9    4      65001     29993     29988        0    0    0 02w6d19h           17       19 N/A&lt;br /&gt;
10.254.254.11   4      65001     17218     17220        0    0    0 01w4d22h           17       19 N/A&lt;br /&gt;
&lt;br /&gt;
Displayed neighbors 2&lt;br /&gt;
Total number of neighbors 2&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip route | match /32&lt;br /&gt;
B&amp;gt;* 10.255.255.1/32 [20/0] via 10.254.254.9, eth0, weight 1, 02w6d19h&lt;br /&gt;
B&amp;gt;* 10.255.255.2/32 [20/0] via 10.254.254.11, eth1, weight 1, 01w4d22h&lt;br /&gt;
B&amp;gt;* 10.255.255.3/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.4/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
C&amp;gt;* 10.255.255.5/32 is directly connected, dum0, 02w6d19h&lt;br /&gt;
B&amp;gt;* 10.255.255.6/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d22h&lt;br /&gt;
B&amp;gt;* 10.255.255.7/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.8/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.9/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.10/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.11/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d01h&lt;br /&gt;
B&amp;gt;* 10.255.255.12/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d00h&lt;br /&gt;
B&amp;gt;* 10.255.255.13/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d01h&lt;br /&gt;
B&amp;gt;* 10.255.255.14/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d00h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== On Arista ======&lt;br /&gt;
We verify that we receive prefix + same leaf / superspine / remote pods spine IPs (we note there misses some filters on spine since we receive /31 interco routes): &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
leaf1-pod3#show ip bgp neighbors 10.254.254.43 received-routes &lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
          10.254.254.36/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.38/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.42/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.44/31       10.254.254.43         -       -          -       -       65004 65016 ?&lt;br /&gt;
          10.254.254.46/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
 *        10.255.255.1/32        10.254.254.43         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 *        10.255.255.2/32        10.254.254.43         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 *        10.255.255.3/32        10.254.254.43         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 *        10.255.255.4/32        10.254.254.43         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 *        10.255.255.5/32        10.254.254.43         -       -          -       -       65004 65003 65001 65011 ?&lt;br /&gt;
 *        10.255.255.6/32        10.254.254.43         -       -          -       -       65004 65003 65001 65012 ?&lt;br /&gt;
 *        10.255.255.7/32        10.254.254.43         -       -          -       -       65004 65003 65002 65013 ?&lt;br /&gt;
 *        10.255.255.8/32        10.254.254.43         -       -          -       -       65004 65003 65002 65014 ?&lt;br /&gt;
 *        10.255.255.9/32        10.254.254.43         -       -          -       -       65004 65003 ?&lt;br /&gt;
 *        10.255.255.10/32       10.254.254.43         -       -          -       -       65004 65003 ?&lt;br /&gt;
 *        10.255.255.12/32       10.254.254.43         -       -          -       -       65004 65016 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.14/32       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
leaf1-pod3#show ip bgp neighbors 10.254.254.41 received-routes&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 * &amp;gt;      10.255.255.1/32        10.254.254.41         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.2/32        10.254.254.41         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.3/32        10.254.254.41         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.4/32        10.254.254.41         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.5/32        10.254.254.41         -       -          -       -       65004 65003 65001 65011 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.6/32        10.254.254.41         -       -          -       -       65004 65003 65001 65012 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.7/32        10.254.254.41         -       -          -       -       65004 65003 65002 65013 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.8/32        10.254.254.41         -       -          -       -       65004 65003 65002 65014 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.9/32        10.254.254.41         -       -          -       -       65004 65003 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.10/32       10.254.254.41         -       -          -       -       65004 65003 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.12/32       10.254.254.41         -       -          -       -       65004 65016 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.13/32       10.254.254.41         -       -          -       -       65004 i&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== On Cumulus ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp summary &lt;br /&gt;
show bgp ipv4 unicast summary&lt;br /&gt;
=============================&lt;br /&gt;
BGP router identifier 10.255.255.12, local AS number 65016 vrf-id 0&lt;br /&gt;
BGP table version 103&lt;br /&gt;
RIB entries 37, using 7104 bytes of memory&lt;br /&gt;
Peers 2, using 43 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor                   V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd&lt;br /&gt;
10.254.254.45              4      65004    306764    261331        0    0    0 01:39:02           12&lt;br /&gt;
spine1-pod3(10.254.254.47) 4      65004    261602    261664        0    0    0 01w2d02h           16&lt;br /&gt;
&lt;br /&gt;
Total number of neighbors 2&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show route | grep /32&lt;br /&gt;
B&amp;gt;* 10.255.255.1/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.2/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.3/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.4/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.5/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.6/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.7/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.8/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.9/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.10/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.11/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
C&amp;gt;* 10.255.255.12/32 is directly connected, lo, 01w2d02h&lt;br /&gt;
B&amp;gt;* 10.255.255.13/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.14/32 [20/0] via 10.254.254.47, swp2, weight 1, 01w2d02h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;We can also verify that routing is ok by pinging remote loopback IPs from local loopback + check eBGP EVPN session status: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ping example from VyOS leaf&lt;br /&gt;
vyos@leaf1-pod1:~$ ping 10.255.255.12 source-address 10.255.255.5&lt;br /&gt;
PING 10.255.255.12 (10.255.255.12) from 10.255.255.5 : 56(84) bytes of data.&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=1 ttl=61 time=2.60 ms&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=2 ttl=61 time=2.54 ms&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=3 ttl=61 time=2.44 ms&lt;br /&gt;
&lt;br /&gt;
# check of EVPN sessions on the different vendors&lt;br /&gt;
&lt;br /&gt;
# vyos&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn summary &lt;br /&gt;
BGP router identifier 10.255.255.5, local AS number 65011 vrf-id 0&lt;br /&gt;
BGP table version 0&lt;br /&gt;
RIB entries 31, using 5704 bytes of memory&lt;br /&gt;
Peers 2, using 1446 KiB of memory&lt;br /&gt;
Peer groups 2, using 128 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc&lt;br /&gt;
10.255.255.1    4      65001     30205     30208        0    0    0 02w6d21h           13       13 N/A&lt;br /&gt;
10.255.255.2    4      65001     17392     17429        0    0    0 01w5d00h           11       13 N/A&lt;br /&gt;
&lt;br /&gt;
# Arista&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show bgp evpn summary&lt;br /&gt;
BGP summary information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Neighbor Status Codes: m - Under maintenance&lt;br /&gt;
  Description              Neighbor         V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc&lt;br /&gt;
  OVL_spine1-pod3          10.255.255.13    4 65004          15608     15503    0    0 00:03:47 Estab   17     17&lt;br /&gt;
  OVL_spine2-pod3          10.255.255.14    4 65004         262780    308558    0    0    9d02h Estab   13     13&lt;br /&gt;
&lt;br /&gt;
# Cumulus&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp l2vpn evpn summary&lt;br /&gt;
BGP router identifier 10.255.255.12, local AS number 65016 vrf-id 0&lt;br /&gt;
BGP table version 0&lt;br /&gt;
RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
Peers 2, using 43 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor                   V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd&lt;br /&gt;
10.255.255.13              4      65004    307243    261693        0    0    0 00:04:25           14&lt;br /&gt;
spine1-pod3(10.255.255.14) 4      65004    262001    262025        0    0    0 01w2d02h           10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On EVPN, we should receive quite the same number of prefixes from both spine, but looks like there differences of best path election + redistribution between vendors. Perhaps something to dig. The most important point is to verify that the FIB for the services are consistent. &lt;br /&gt;
&lt;br /&gt;
==== L2 service implementation ====&lt;br /&gt;
On that topic, we'll firstly focus on the Layer 2 service. To be sure that all works as expected we have to check that: &lt;br /&gt;
&lt;br /&gt;
* mac-address-table are consistent on the whole fabric. In traditionnal L2 setup, switch FIBs depend of the traffic passing through them and a mac @ can be see &amp;quot;everywhere&amp;quot; if it does a BUM on the network. In VXLAN, in a mac-vrf topology without filer, even a host doesn't send BUM, the mac address is propagated on the whole fabric (within BGP update). But, as it is on traditional L2 topology, you have to be sure that mac @ table aging time are consistent on all devices, with an aging time superior to ARP timer on hosts. &lt;br /&gt;
* routes type 2 are visible on each leaf nodes for a same vni, routes type 3 to reach remote VTEP have to be learned&lt;br /&gt;
* a common route-target for the VRF routes need to be used/set within policies. In effect, there are differences between vendors on route &amp;quot;tagging&amp;quot; (features to auto generate route-target, &amp;quot;hard coded&amp;quot; alogos, etc.). Here, on VyOS, we got to add adminstrative extended communities within route-map for the L2 VNI. We'll show it below&lt;br /&gt;
* all fabric connections (interconnections between network nodes) have the sufficient &amp;quot;IP MTU&amp;quot;. Please keep in mind that VXLAN overhead has a size of 50 bytes. So, to be sure that Jumbo traffic for host is ok, configure it at least at 9050 Bytes. I would advise to push it at 9100 Bytes in case of VXLAN usage on client HOSTS for Virtualized setup on servers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check FDB on leaf switch + debug type 2 routes' propagation for leaf1 pod1&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
##############&lt;br /&gt;
# VyOS&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb&lt;br /&gt;
50:01:00:01:00:02 dev eth2 vlan 1 master br100 permanent&lt;br /&gt;
50:01:00:01:00:02 dev eth2 master br100 permanent&lt;br /&gt;
33:33:00:00:00:01 dev eth2 self permanent&lt;br /&gt;
33:33:00:00:00:02 dev eth2 self permanent&lt;br /&gt;
01:00:5e:00:00:01 dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:0e dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:03 dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:00 dev eth2 self permanent&lt;br /&gt;
33:33:00:00:00:01 dev br100 self permanent&lt;br /&gt;
33:33:00:00:00:02 dev br100 self permanent&lt;br /&gt;
33:33:ff:01:00:02 dev br100 self permanent&lt;br /&gt;
01:00:5e:00:00:6a dev br100 self permanent&lt;br /&gt;
33:33:00:00:00:6a dev br100 self permanent&lt;br /&gt;
01:00:5e:00:00:01 dev br100 self permanent&lt;br /&gt;
33:33:ff:00:00:00 dev br100 self permanent&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 vlan 1 extern_learn master br100 &lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 extern_learn master br100 &lt;br /&gt;
8a:d0:00:16:1c:17 dev vxlan100 vlan 1 master br100 permanent&lt;br /&gt;
8a:d0:00:16:1c:17 dev vxlan100 master br100 permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.6 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.11 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.12 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.7 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.8 self permanent&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 dst 10.255.255.12 self extern_learn &lt;br /&gt;
&lt;br /&gt;
# and to focus on remote nodes&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb | grep &amp;quot;self extern_learn&amp;quot;&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 dst 10.255.255.12 self extern_learn &lt;br /&gt;
00:50:79:66:68:13 dev vxlan100 dst 10.255.255.11 self extern_learn &lt;br /&gt;
00:50:79:66:68:19 dev vxlan100 dst 10.255.255.8 self extern_learn &lt;br /&gt;
00:50:79:66:68:0c dev vxlan100 dst 10.255.255.6 self extern_learn &lt;br /&gt;
00:50:79:66:68:17 dev vxlan100 dst 10.255.255.7 self extern_learn &lt;br /&gt;
&lt;br /&gt;
# or on local clients &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb | grep eth | grep -v perm&lt;br /&gt;
00:50:79:66:68:0b dev eth2 master br100 &lt;br /&gt;
&lt;br /&gt;
# Now if we want to focus on route type 3 learned &lt;br /&gt;
&lt;br /&gt;
Displayed 7 prefixes (12 paths) (of requested type)&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn route type 3 | grep Dis&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
Route Distinguisher: 10.255.255.6:3&lt;br /&gt;
Route Distinguisher: 10.255.255.7:2&lt;br /&gt;
Route Distinguisher: 10.255.255.8:2&lt;br /&gt;
Route Distinguisher: 10.255.255.11:100&lt;br /&gt;
Route Distinguisher: 10.255.255.12:100&lt;br /&gt;
&lt;br /&gt;
# we notice that RDs for VyOS nodes don't respect the logic of &amp;lt;Loopback:vni&amp;gt;. It s because for the moment we can't set it by vni (or I didn't find how to do that)&lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Arista&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
# we check the fdb. Remote host are behind the port Vx1&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show mac address-table vlan 100&lt;br /&gt;
          Mac Address Table&lt;br /&gt;
------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Vlan    Mac Address       Type        Ports      Moves   Last Move&lt;br /&gt;
----    -----------       ----        -----      -----   ---------&lt;br /&gt;
 100    0050.7966.680c    DYNAMIC     Vx1        1       0:00:38 ago&lt;br /&gt;
 100    0050.7966.6813    DYNAMIC     Et3        1       0:14:08 ago&lt;br /&gt;
 100    0050.7966.6815    DYNAMIC     Vx1        1       9 days, 2:36:39 ago&lt;br /&gt;
 100    0050.7966.6817    DYNAMIC     Vx1        1       0:00:36 ago&lt;br /&gt;
 100    0050.7966.6819    DYNAMIC     Vx1        1       0:00:35 ago&lt;br /&gt;
Total Mac Addresses for this criterion: 5&lt;br /&gt;
&lt;br /&gt;
# we check that all VTEP are ready for BUM&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show bgp evpn route-type imet | i &amp;gt;&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.5:3 imet 10.255.255.5&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.6:3 imet 10.255.255.6&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.7:2 imet 10.255.255.7&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.8:2 imet 10.255.255.8&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.11:100 imet 10.255.255.11&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.12:100 imet 10.255.255.12&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show vxlan vtep detail&lt;br /&gt;
Remote VTEPS for Vxlan1:&lt;br /&gt;
&lt;br /&gt;
VTEP               Learned Via        MAC Address Learning       Tunnel Type(s) &lt;br /&gt;
------------------ ------------------ -------------------------- -------------- &lt;br /&gt;
10.255.255.5       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.6       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.7       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.8       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.12      control plane      control plane              flood, unicast &lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Cumulus&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
# we check the fdb. Remote host are behind the port Vx1&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bridge macs vlan 100&lt;br /&gt;
&lt;br /&gt;
VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
----  ------  ---------  -----------------  ----------  ---------  ------------  ----------------&lt;br /&gt;
 100  bridge  bridge     50:01:00:11:00:03              permanent                9 days, 02:47:42&lt;br /&gt;
 100  bridge  swp3       00:50:79:66:68:15                                       00:00:06&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0c                         extern_learn  00:00:40&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:13                         extern_learn  00:21:01&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:17                         extern_learn  00:00:38&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:19                         extern_learn  00:00:36&lt;br /&gt;
&lt;br /&gt;
# --&amp;gt; here we see that it misses the @mac from the host on leaf1 pod1. &lt;br /&gt;
# we check the evpn routes on the Cumulus node and we see that from leaf1 pod1 vni 100 we have only those routes&lt;br /&gt;
&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
&lt;br /&gt;
# --&amp;gt; something is wrong on the remote leaf.&lt;br /&gt;
# on the leaf we check the policy for the EVPN routes export&lt;br /&gt;
&lt;br /&gt;
  route-map RM-OUT-VNI {&lt;br /&gt;
         rule 1 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type multicast&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 2 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type prefix&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 3 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     vni 200&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:200&lt;br /&gt;
                 }&lt;br /&gt;
&lt;br /&gt;
# we notice that a typo in rule numbering removed the export of macip routes for vni 100.&lt;br /&gt;
# we correct that : &lt;br /&gt;
&lt;br /&gt;
route-map RM-OUT-VNI {&lt;br /&gt;
         rule 1 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type multicast&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 2 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type macip&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 3 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type prefix&lt;br /&gt;
                     vni 200&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:200&lt;br /&gt;
                 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# once corrected we check the fdb on the cumulus node + evpn routes&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bridge macs vlan 100&lt;br /&gt;
&lt;br /&gt;
VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
----  ------  ---------  -----------------  ----------  ---------  ------------  ----------------&lt;br /&gt;
 100  bridge  bridge     50:01:00:11:00:03              permanent                9 days, 02:51:48&lt;br /&gt;
 100  bridge  swp3       00:50:79:66:68:15                                       00:02:01&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0b                         extern_learn  00:00:26&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0c                         extern_learn  00:04:46&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:13                         extern_learn  00:25:08&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:17                         extern_learn  00:04:45&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:19                         extern_learn  00:04:43&lt;br /&gt;
&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
*  [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# we have now Type 2 routes, all is ok now and we learn the client mac 00:50:79:66:68:0b&lt;br /&gt;
# Nevertheless, the trafic was working between the client hosts, but trafic from Cumulus leaf client to VyOS leaf client was broadcasted to all leaf since the @mac was not advertised on the fabric&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;It could be interesting to check how each node is configured to deliver the service, but the article would be too long. So, to sum the steps to provide a L2 service: &lt;br /&gt;
&lt;br /&gt;
# create a VLAN (on Arista) / bridge (VyOS and Cumulus) + associate it to the VNI/VXLAN instances/interface&lt;br /&gt;
# create the mac vrf + define the route-target into bgp (Arista + Cumulus) / update the route-maps + community list to allow the redistribution of the VNI routes (type 2 and type 3)&lt;br /&gt;
&lt;br /&gt;
==== L3 service implementation ====&lt;br /&gt;
Now, we'll now look at the L3 service. On that kind of setup we need to implement / check:&lt;br /&gt;
* leaf IP subnets are well redistributed betweeb all leaf (here we are in a vrf &amp;quot;any to any&amp;quot; topology)&lt;br /&gt;
* we only redistribute routes for IP prefix. Routes type 2 (mac @) don't need to be redistributed between leaf&lt;br /&gt;
* that all clients can ping each other through the L3VPN&lt;br /&gt;
&lt;br /&gt;
To achieve that, we need to implement analog configuration than for the L2 service, but with the following differences: &lt;br /&gt;
&lt;br /&gt;
* create a VLAN (on Arista) / bridge (VyOS and Cumulus) + associate it to the VNI/VXLAN instances|interface&lt;br /&gt;
* create the L3 VRF + define the route-target into bgp (Arista + Cumulus + VyOS) + allow connected routes distribution (Arista / Cumulus) / update the route-maps + community list to allow the redistribution of the VNI routes (type 5) for VyOS / restrict the routes redistribution to type 5 routes into the VNI (Cumulus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we check the routing table with common cli commands + into the EVPN RIB :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# check routes into the vrf &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip route vrf VRF-L3-1&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,&lt;br /&gt;
       f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF VRF-L3-1:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 02w6d22h&lt;br /&gt;
C&amp;gt;* 192.168.10.0/24 is directly connected, br200, 02w6d22h&lt;br /&gt;
B&amp;gt;* 192.168.20.0/24 [20/0] via 10.255.255.6, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
B&amp;gt;* 192.168.30.0/24 [20/0] via 10.255.255.7, br200 onlink, weight 1, 05:04:15&lt;br /&gt;
B&amp;gt;* 192.168.40.0/24 [20/0] via 10.255.255.8, br200 onlink, weight 1, 04:59:41&lt;br /&gt;
B&amp;gt;* 192.168.50.0/24 [20/0] via 10.255.255.11, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
B&amp;gt;* 192.168.60.0/24 [20/0] via 10.255.255.12, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show ip route vrf VRF-L3-1&lt;br /&gt;
&lt;br /&gt;
VRF: VRF-L3-1&lt;br /&gt;
Codes: C - connected, S - static, K - kernel, &lt;br /&gt;
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,&lt;br /&gt;
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,&lt;br /&gt;
       N2 - OSPF NSSA external type2, B - BGP, B I - iBGP, B E - eBGP,&lt;br /&gt;
       R - RIP, I L1 - IS-IS level 1, I L2 - IS-IS level 2,&lt;br /&gt;
       O3 - OSPFv3, A B - BGP Aggregate, A O - OSPF Summary,&lt;br /&gt;
       NG - Nexthop Group Static Route, V - VXLAN Control Service,&lt;br /&gt;
       DH - DHCP client installed default route, M - Martian,&lt;br /&gt;
       DP - Dynamic Policy Route, L - VRF Leaked,&lt;br /&gt;
       G  - gRIBI, RC - Route Cache Route&lt;br /&gt;
&lt;br /&gt;
Gateway of last resort is not set&lt;br /&gt;
&lt;br /&gt;
 B E      192.168.10.0/24 [200/0] via VTEP 10.255.255.5 VNI 200 router-mac 12:9b:9b:d8:f6:86 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.20.0/24 [200/0] via VTEP 10.255.255.6 VNI 200 router-mac 50:01:00:02:00:03 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.30.0/24 [200/0] via VTEP 10.255.255.7 VNI 200 router-mac 50:01:00:09:00:03 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.40.0/24 [200/0] via VTEP 10.255.255.8 VNI 200 router-mac 50:01:00:0a:00:03 local-interface Vxlan1&lt;br /&gt;
 C        192.168.50.0/24 is directly connected, Vlan200&lt;br /&gt;
 B E      192.168.60.0/24 [200/0] via VTEP 10.255.255.12 VNI 200 router-mac 50:01:00:11:00:03 local-interface Vxlan1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show route vrf VRF-L3-1&lt;br /&gt;
show ip route vrf VRF-L3-1 &lt;br /&gt;
===========================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued route, r - rejected route&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VRF VRF-L3-1:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 01w2d03h&lt;br /&gt;
B&amp;gt;* 192.168.10.0/24 [20/0] via 10.255.255.5, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.20.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.30.0/24 [20/0] via 10.255.255.7, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.40.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.50.0/24 [20/0] via 10.255.255.11, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
C&amp;gt;* 192.168.60.0/24 is directly connected, vlan200, 01w2d03h&lt;br /&gt;
&lt;br /&gt;
# we can notice that the output are quite similar, except on Arista which indicates the VNI for remote targets, instead of referencing the local bridge / vlan200&lt;br /&gt;
&lt;br /&gt;
# Now we check the routes for the VNI 200&lt;br /&gt;
&lt;br /&gt;
# VyOS &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn route type prefix &lt;br /&gt;
BGP table version is 1, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[EthTag]:[ESI]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5             0         32768 ?&lt;br /&gt;
                    ET:8 RT:65000:200 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65001 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65001 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.11:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65001 65003 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65001 65003 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
Route Distinguisher: 10.255.255.12:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12                          0 65001 65003 65004 65016 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:11:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12                          0 65001 65003 65004 65016 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:11:00:03&lt;br /&gt;
&lt;br /&gt;
# Arista&lt;br /&gt;
                        &lt;br /&gt;
leaf1-pod3#show bgp evpn route ip-prefix ipv4 &lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  LocPref Weight  Path&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.5:200 ip-prefix 192.168.10.0/24&lt;br /&gt;
                                 10.255.255.5          -       100     0       65004 65003 65001 65011 ?&lt;br /&gt;
 *       RD: 10.255.255.5:200 ip-prefix 192.168.10.0/24&lt;br /&gt;
                                 10.255.255.5          -       100     0       65004 65003 65001 65011 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.6:200 ip-prefix 192.168.20.0/24&lt;br /&gt;
                                 10.255.255.6          -       100     0       65004 65003 65001 65012 ?&lt;br /&gt;
 *       RD: 10.255.255.6:200 ip-prefix 192.168.20.0/24&lt;br /&gt;
                                 10.255.255.6          -       100     0       65004 65003 65001 65012 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.7:200 ip-prefix 192.168.30.0/24&lt;br /&gt;
                                 10.255.255.7          -       100     0       65004 65003 65002 65013 ?&lt;br /&gt;
 *       RD: 10.255.255.7:200 ip-prefix 192.168.30.0/24&lt;br /&gt;
                                 10.255.255.7          -       100     0       65004 65003 65002 65013 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.8:200 ip-prefix 192.168.40.0/24&lt;br /&gt;
                                 10.255.255.8          -       100     0       65004 65003 65002 65014 ?&lt;br /&gt;
 *       RD: 10.255.255.8:200 ip-prefix 192.168.40.0/24&lt;br /&gt;
                                 10.255.255.8          -       100     0       65004 65003 65002 65014 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.11:200 ip-prefix 192.168.50.0/24&lt;br /&gt;
                                 -                     -       -       0       i&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.12:10200 ip-prefix 192.168.60.0/24&lt;br /&gt;
                                 10.255.255.12         -       100     0       65004 65016 i&lt;br /&gt;
 *       RD: 10.255.255.12:10200 ip-prefix 192.168.60.0/24&lt;br /&gt;
                                 10.255.255.12         -       100     0       65004 65016 i&lt;br /&gt;
&lt;br /&gt;
# CVX&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp l2vpn evpn route type prefix&lt;br /&gt;
BGP table version is 7, local router ID is 10.255.255.12&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65004 65003 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65004 65003 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65004 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65004 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65004 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65004 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.11:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
Route Distinguisher: 10.255.255.12:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12            0         32768 i&lt;br /&gt;
                    ET:8 RT:65000:200 Rmac:50:01:00:11:00:03&lt;br /&gt;
&lt;br /&gt;
# Now we check with traceroute on the 3 clients connected on focused leaf switches&lt;br /&gt;
&lt;br /&gt;
# client leaf VyOS&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.50.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=1 ttl=62 time=16.456 ms&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=2 ttl=62 time=11.852 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.60.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=1 ttl=62 time=5.554 ms&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=2 ttl=62 time=4.432 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.50.2&lt;br /&gt;
trace to 192.168.50.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.10.1   0.499 ms  3.143 ms  1.432 ms&lt;br /&gt;
 2   192.168.50.1   10.465 ms  12.512 ms  8.992 ms&lt;br /&gt;
 3   *192.168.50.2   11.056 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; trace 192.168.60.2&lt;br /&gt;
trace to 192.168.60.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.10.1   0.525 ms  0.312 ms  0.278 ms&lt;br /&gt;
 2   192.168.60.1   4.949 ms  4.232 ms  4.022 ms&lt;br /&gt;
 3   *192.168.60.2   4.167 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# client leaf Arista&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.10.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.10.2 icmp_seq=1 ttl=62 time=10.914 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.60.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=1 ttl=62 time=11.755 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.10.2&lt;br /&gt;
trace to 192.168.10.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.50.1   4.742 ms  4.123 ms  4.293 ms&lt;br /&gt;
 2   192.168.10.1   12.550 ms  15.039 ms  9.411 ms&lt;br /&gt;
 3   *192.168.10.2   8.939 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; &lt;br /&gt;
VPCS&amp;gt; trace 192.168.60.2&lt;br /&gt;
trace to 192.168.60.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.50.1   3.073 ms  2.901 ms  2.585 ms&lt;br /&gt;
 2   192.168.60.1   10.815 ms  11.493 ms  12.144 ms&lt;br /&gt;
 3   *192.168.60.2   10.429 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
# client leaf Cumulus&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.10.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.10.2 icmp_seq=1 ttl=62 time=4.731 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.50.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=1 ttl=62 time=11.722 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.50.2&lt;br /&gt;
trace to 192.168.50.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.60.1   0.487 ms  0.266 ms  0.248 ms&lt;br /&gt;
 2   192.168.50.1   6.691 ms  6.281 ms  6.613 ms&lt;br /&gt;
 3   *192.168.50.2   9.355 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; &lt;br /&gt;
VPCS&amp;gt; trace 192.168.10.2&lt;br /&gt;
trace to 192.168.10.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.60.1   0.436 ms  0.315 ms  0.380 ms&lt;br /&gt;
 2   192.168.10.1   4.535 ms  4.661 ms  3.994 ms&lt;br /&gt;
 3   *192.168.10.2   4.292 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conclusion of the lab ===&lt;br /&gt;
These first results are satisfying, it comforts the idea that VXLAN is a strong option to deliver L2/L3 services in datacenters, but not only. This kind of architecture is more and more chosen in campus designs, PRA, NFV solutions.&lt;br /&gt;
&lt;br /&gt;
The support of this technology on more and more open source NOS are encouraging regarding the innovation. If we look at Vyatta project for example, whom OS can be compiled &amp;quot;brick per brick&amp;quot;, we could imagine to create NFV CPEs providing VXLAN fabric extensions of some client VRFs. CPE could be connected to the central Fabric within encrypted tunnels (wireguard,ipsec) or through direct link over MacSec (this feature in on the Vyatta Roadmap).&lt;br /&gt;
&lt;br /&gt;
Please contact us if you want to feed the topic / discuss the lab.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
&lt;br /&gt;
Pierre L.&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=File:02.lab-vyos-eos-cvx_v2.zip&amp;diff=3009</id>
		<title>File:02.lab-vyos-eos-cvx v2.zip</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=File:02.lab-vyos-eos-cvx_v2.zip&amp;diff=3009"/>
		<updated>2022-04-05T12:34:47Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=File:Nesevo-Lab-Vyatta-Arista-CVX-l3vpn.png&amp;diff=3008</id>
		<title>File:Nesevo-Lab-Vyatta-Arista-CVX-l3vpn.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=File:Nesevo-Lab-Vyatta-Arista-CVX-l3vpn.png&amp;diff=3008"/>
		<updated>2022-04-05T12:33:31Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=File:Nesevo-Lab-Vyatta-Arista-CVX-l2vpn.png&amp;diff=3007</id>
		<title>File:Nesevo-Lab-Vyatta-Arista-CVX-l2vpn.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=File:Nesevo-Lab-Vyatta-Arista-CVX-l2vpn.png&amp;diff=3007"/>
		<updated>2022-04-05T12:33:14Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=File:2022-02_eveng-lab-vyatta-cum-arista.png&amp;diff=3006</id>
		<title>File:2022-02 eveng-lab-vyatta-cum-arista.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=File:2022-02_eveng-lab-vyatta-cum-arista.png&amp;diff=3006"/>
		<updated>2022-04-05T12:32:03Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=File:Nesevo-Lab-Vyatta-Arista-CVX.png&amp;diff=3005</id>
		<title>File:Nesevo-Lab-Vyatta-Arista-CVX.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=File:Nesevo-Lab-Vyatta-Arista-CVX.png&amp;diff=3005"/>
		<updated>2022-04-05T12:31:36Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=VyosAristaCVX-VXLAN-lab&amp;diff=3004</id>
		<title>VyosAristaCVX-VXLAN-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=VyosAristaCVX-VXLAN-lab&amp;diff=3004"/>
		<updated>2022-04-05T12:28:14Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
More and more, EVPN is making its place in Datacenter field. Mainstream vendors integrate its support, with VXLAN or MPLS for data plane + BGP for control plane. In previous labs, we were able to observe that interoperability was quite good between vendors. Nevertheless, even we've already tested CumulusVX, there are also other open sources NOS which can support EVPN.&lt;br /&gt;
&lt;br /&gt;
Today we'll test VyOS in it's latest rolling version, which handles the support of EVPN.&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* create a VXLAN Fabric with VyOS nodes&lt;br /&gt;
* provide a L2VPN and a L3VPN to client nodes within the fabric&lt;br /&gt;
* integrate some other vendors node into the fabric, here Arista and Cumulus VX&lt;br /&gt;
* test that all works as expected&lt;br /&gt;
&lt;br /&gt;
=== Lab setup ===&lt;br /&gt;
To reach those goals, we'll use the EVE-NG tool in community edition (https://www.eve-ng.net/index.php/download/#DL-COMM) and use the following NOS version : &lt;br /&gt;
&lt;br /&gt;
* Vyatta VyOS 1.4 rolling &amp;lt;-- free to download https://vyos.net/get/nightly-builds/&lt;br /&gt;
* Arista vEOS 4.26.0F lab edition &amp;lt;-- need a support account&lt;br /&gt;
* Nvidia Cumulus VX 4.2.1 lab edition &amp;lt;-- free to download https://www.nvidia.com/en-us/networking/ethernet-switching/cumulus-vx/download/&lt;br /&gt;
&lt;br /&gt;
We'll build a 3-tiers fabric, with leaf/spine/superspine devices, VXLAN/EVPN running on all nodes. It gives the following setup: &lt;br /&gt;
&lt;br /&gt;
[[Datei:Nesevo-Lab-Vyatta-Arista-CVX.png|rahmenlos|600x600px]]&lt;br /&gt;
&lt;br /&gt;
On EVE-NG, we add IP information, ASN, loopback IPs. All other information will be past after when dealing with technical details.    &lt;br /&gt;
&lt;br /&gt;
So, it gives:      &lt;br /&gt;
&lt;br /&gt;
[[Datei:2022-02_eveng-lab-vyatta-cum-arista.png|rahmenlos|600x600px]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;span class=&amp;quot;mw-headline&amp;quot;&amp;gt;VXLAN/BGP infos&amp;lt;/span&amp;gt; ====&lt;br /&gt;
Note: in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 6 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
|200&lt;br /&gt;
|the 6 clients have their own subnets. Here we use only one vni because no ESI will be implemented. One leaf one subnet.&lt;br /&gt;
|}&lt;br /&gt;
Client devices are represented by computers on EVE-NG. IPs in green are using the L2VPN service (extended layer 2 between pods) and IPs in orange the L3VPN service (routing service).&lt;br /&gt;
&lt;br /&gt;
Below some diagrams showing the logic topologies : &lt;br /&gt;
&lt;br /&gt;
[[Datei:Nesevo-Lab-Vyatta-Arista-CVX-l2vpn.png|rahmenlos|400x400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Nesevo-Lab-Vyatta-Arista-CVX-l3vpn.png|rahmenlos|400x400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below the link to the configurations to allow you to quickly reproduce the tab.&lt;br /&gt;
&lt;br /&gt;
To be noted that the configurations are not &amp;quot;ready-to-prod &amp;quot; and need to be optimized (adding bfd, bgp optimization, etc.). Some typos can subsist. Whatever, the lab works and gives the expected results :)&lt;br /&gt;
&lt;br /&gt;
Link to devices configurations : http://wiki.intra.nesevo.com/images/3/32/02.lab-vyos-eos-cvx_v2.zip&lt;br /&gt;
&lt;br /&gt;
=== Lab details ===&lt;br /&gt;
Considering that the lab is up and running, we'll now come back to the architecture.&lt;br /&gt;
&lt;br /&gt;
We have 3 kinds of network nodes : &lt;br /&gt;
&lt;br /&gt;
* leaf switches, on edge, which provide L2 and L3 services.&lt;br /&gt;
* couple of spine switches which allow leaf from a same pod to exchange traffic. They are also connected to superspine to reach other pods&lt;br /&gt;
* superspine switches which interconnext the different spine switches from the different pods, thus allowing interpods traffic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All those network devices control plane can exchange routes' information within 2 layers of bgp : underlay and overlay.&lt;br /&gt;
&lt;br /&gt;
The role of the &amp;quot;underlay&amp;quot; is to dynamically route the traffic between loopback interfaces from the different nodes. Loopback interfaces are used to mount BGP sessions for the underlay and are used as VTEP interfaces on leaf nodes. Generally, it's better to have 2 different Loopback for this usage (in case of anycast vtep setup for example), but some vendors don't allow to 2 loopback interfaces in the same routing context. Whatever, in our setup, having only one loopback is fine.  &lt;br /&gt;
&lt;br /&gt;
Here, the underlay is done in eBGP, &amp;lt;u&amp;gt;ipv4 unicast family only + route-map to only redistribute loopback interfaces IP&amp;lt;/u&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* Each node mount a session to the directly connected peers. &lt;br /&gt;
* Each leaf node has a dedicated ASN. &lt;br /&gt;
* Each couple of spine/superspine has a ASN for two, to follow the best practices to optimize the routing table (ECMP).&lt;br /&gt;
&lt;br /&gt;
The role of the &amp;quot;overlay&amp;quot; is to exchange EVPN routes type 2,3,5 here (type 1/4 routes seem to not be managed by VyOS at the moment, TBC). &lt;br /&gt;
&lt;br /&gt;
* eBGP multihop sessions are mounted to directly neighbor loopback IPs.&lt;br /&gt;
* policies/options are set to not change the original nexthop when propagating routes&lt;br /&gt;
* for L2 services we only allow the redistribution of type 2 (macip) and type 3 (inclusive mcast for BUM management) routes&lt;br /&gt;
* for L3 services we only allow the redistribution of type 5 (prefix) routes&lt;br /&gt;
* regarding the setup, to enhance the scalability, it could be nice to use dedicated nodes (VM or phys) to take the role of route-servers. Here, we could connect them to superspine. Thus, spine/superspine would only do underlay and could not be a bottleneck for the control plane scalability&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Moreover, regarding the lab setup, no bgp pic / bfd / VMTO / other option are implemented to optimize the convergence / traffic delivery. The goal was to verify that VyOS is compatible in a basic but functionnal VXLAN setup.&lt;br /&gt;
&lt;br /&gt;
Now, we'll take a look on the different output from the 2 vendors leaf / spine / superspine to verify that all works as expected.&lt;br /&gt;
&lt;br /&gt;
We verify that underlay works well. All is fine if: &lt;br /&gt;
&lt;br /&gt;
* we have an eBGP session per directly connected peer&lt;br /&gt;
* we receive the same number of prefixes per peer type: &lt;br /&gt;
** a leef has to receive the same number of prefixes from its spine neighbors&lt;br /&gt;
** spine neigbors have to receive the same amount of prefixes from superspine, and reciprocally&lt;br /&gt;
** all VTEP IPs have to be known into the GRT (global routing table / default routing instance)&lt;br /&gt;
&lt;br /&gt;
====== On VyOS ======&lt;br /&gt;
Below we can see that we receive 17 prefixes from both neighbors and that we know all loopback IPs from the setup (13 remote, 1 local). We have a bit too much routes, because on Cumulus nodes the filters that I have configured seem misconstructed.&lt;br /&gt;
&lt;br /&gt;
To be noted that spine will announce all the Loopback IPs except the one from it's twin, since they are not directly connected and superspine respect as loop protection constraint (don't reflect routes originated by an ASN &amp;quot;X&amp;quot; to a peer from the same ASN &amp;quot;X&amp;quot;).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip bgp summary established &lt;br /&gt;
&lt;br /&gt;
IPv4 Unicast Summary (VRF default):&lt;br /&gt;
BGP router identifier 10.255.255.5, local AS number 65011 vrf-id 0&lt;br /&gt;
BGP table version 20&lt;br /&gt;
RIB entries 37, using 6808 bytes of memory&lt;br /&gt;
Peers 2, using 1446 KiB of memory&lt;br /&gt;
Peer groups 2, using 128 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc&lt;br /&gt;
10.254.254.9    4      65001     29993     29988        0    0    0 02w6d19h           17       19 N/A&lt;br /&gt;
10.254.254.11   4      65001     17218     17220        0    0    0 01w4d22h           17       19 N/A&lt;br /&gt;
&lt;br /&gt;
Displayed neighbors 2&lt;br /&gt;
Total number of neighbors 2&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip route | match /32&lt;br /&gt;
B&amp;gt;* 10.255.255.1/32 [20/0] via 10.254.254.9, eth0, weight 1, 02w6d19h&lt;br /&gt;
B&amp;gt;* 10.255.255.2/32 [20/0] via 10.254.254.11, eth1, weight 1, 01w4d22h&lt;br /&gt;
B&amp;gt;* 10.255.255.3/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.4/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
C&amp;gt;* 10.255.255.5/32 is directly connected, dum0, 02w6d19h&lt;br /&gt;
B&amp;gt;* 10.255.255.6/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d22h&lt;br /&gt;
B&amp;gt;* 10.255.255.7/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.8/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.9/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.10/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.11/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d01h&lt;br /&gt;
B&amp;gt;* 10.255.255.12/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d00h&lt;br /&gt;
B&amp;gt;* 10.255.255.13/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d01h&lt;br /&gt;
B&amp;gt;* 10.255.255.14/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d00h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== On Arista ======&lt;br /&gt;
We verify that we receive prefix + same leaf / superspine / remote pods spine IPs (we note there misses some filters on spine since we receive /31 interco routes): &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
leaf1-pod3#show ip bgp neighbors 10.254.254.43 received-routes &lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
          10.254.254.36/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.38/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.42/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.44/31       10.254.254.43         -       -          -       -       65004 65016 ?&lt;br /&gt;
          10.254.254.46/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
 *        10.255.255.1/32        10.254.254.43         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 *        10.255.255.2/32        10.254.254.43         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 *        10.255.255.3/32        10.254.254.43         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 *        10.255.255.4/32        10.254.254.43         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 *        10.255.255.5/32        10.254.254.43         -       -          -       -       65004 65003 65001 65011 ?&lt;br /&gt;
 *        10.255.255.6/32        10.254.254.43         -       -          -       -       65004 65003 65001 65012 ?&lt;br /&gt;
 *        10.255.255.7/32        10.254.254.43         -       -          -       -       65004 65003 65002 65013 ?&lt;br /&gt;
 *        10.255.255.8/32        10.254.254.43         -       -          -       -       65004 65003 65002 65014 ?&lt;br /&gt;
 *        10.255.255.9/32        10.254.254.43         -       -          -       -       65004 65003 ?&lt;br /&gt;
 *        10.255.255.10/32       10.254.254.43         -       -          -       -       65004 65003 ?&lt;br /&gt;
 *        10.255.255.12/32       10.254.254.43         -       -          -       -       65004 65016 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.14/32       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
leaf1-pod3#show ip bgp neighbors 10.254.254.41 received-routes&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 * &amp;gt;      10.255.255.1/32        10.254.254.41         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.2/32        10.254.254.41         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.3/32        10.254.254.41         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.4/32        10.254.254.41         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.5/32        10.254.254.41         -       -          -       -       65004 65003 65001 65011 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.6/32        10.254.254.41         -       -          -       -       65004 65003 65001 65012 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.7/32        10.254.254.41         -       -          -       -       65004 65003 65002 65013 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.8/32        10.254.254.41         -       -          -       -       65004 65003 65002 65014 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.9/32        10.254.254.41         -       -          -       -       65004 65003 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.10/32       10.254.254.41         -       -          -       -       65004 65003 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.12/32       10.254.254.41         -       -          -       -       65004 65016 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.13/32       10.254.254.41         -       -          -       -       65004 i&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== On Cumulus ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp summary &lt;br /&gt;
show bgp ipv4 unicast summary&lt;br /&gt;
=============================&lt;br /&gt;
BGP router identifier 10.255.255.12, local AS number 65016 vrf-id 0&lt;br /&gt;
BGP table version 103&lt;br /&gt;
RIB entries 37, using 7104 bytes of memory&lt;br /&gt;
Peers 2, using 43 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor                   V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd&lt;br /&gt;
10.254.254.45              4      65004    306764    261331        0    0    0 01:39:02           12&lt;br /&gt;
spine1-pod3(10.254.254.47) 4      65004    261602    261664        0    0    0 01w2d02h           16&lt;br /&gt;
&lt;br /&gt;
Total number of neighbors 2&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show route | grep /32&lt;br /&gt;
B&amp;gt;* 10.255.255.1/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.2/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.3/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.4/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.5/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.6/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.7/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.8/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.9/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.10/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.11/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
C&amp;gt;* 10.255.255.12/32 is directly connected, lo, 01w2d02h&lt;br /&gt;
B&amp;gt;* 10.255.255.13/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.14/32 [20/0] via 10.254.254.47, swp2, weight 1, 01w2d02h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;We can also verify that routing is ok by pinging remote loopback IPs from local loopback + check eBGP EVPN session status: &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ping example from VyOS leaf&lt;br /&gt;
vyos@leaf1-pod1:~$ ping 10.255.255.12 source-address 10.255.255.5&lt;br /&gt;
PING 10.255.255.12 (10.255.255.12) from 10.255.255.5 : 56(84) bytes of data.&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=1 ttl=61 time=2.60 ms&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=2 ttl=61 time=2.54 ms&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=3 ttl=61 time=2.44 ms&lt;br /&gt;
&lt;br /&gt;
# check of EVPN sessions on the different vendors&lt;br /&gt;
&lt;br /&gt;
# vyos&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn summary &lt;br /&gt;
BGP router identifier 10.255.255.5, local AS number 65011 vrf-id 0&lt;br /&gt;
BGP table version 0&lt;br /&gt;
RIB entries 31, using 5704 bytes of memory&lt;br /&gt;
Peers 2, using 1446 KiB of memory&lt;br /&gt;
Peer groups 2, using 128 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc&lt;br /&gt;
10.255.255.1    4      65001     30205     30208        0    0    0 02w6d21h           13       13 N/A&lt;br /&gt;
10.255.255.2    4      65001     17392     17429        0    0    0 01w5d00h           11       13 N/A&lt;br /&gt;
&lt;br /&gt;
# Arista&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show bgp evpn summary&lt;br /&gt;
BGP summary information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Neighbor Status Codes: m - Under maintenance&lt;br /&gt;
  Description              Neighbor         V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc&lt;br /&gt;
  OVL_spine1-pod3          10.255.255.13    4 65004          15608     15503    0    0 00:03:47 Estab   17     17&lt;br /&gt;
  OVL_spine2-pod3          10.255.255.14    4 65004         262780    308558    0    0    9d02h Estab   13     13&lt;br /&gt;
&lt;br /&gt;
# Cumulus&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp l2vpn evpn summary&lt;br /&gt;
BGP router identifier 10.255.255.12, local AS number 65016 vrf-id 0&lt;br /&gt;
BGP table version 0&lt;br /&gt;
RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
Peers 2, using 43 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor                   V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd&lt;br /&gt;
10.255.255.13              4      65004    307243    261693        0    0    0 00:04:25           14&lt;br /&gt;
spine1-pod3(10.255.255.14) 4      65004    262001    262025        0    0    0 01w2d02h           10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On EVPN, we should receive quite the same number of prefixes from both spine, but looks like there differences of best path election + redistribution between vendors. Perhaps something to dig. The most important point is to verify that the FIB for the services are consistent. &lt;br /&gt;
&lt;br /&gt;
==== L2 service implementation ====&lt;br /&gt;
On that topic, we'll firstly focus on the Layer 2 service. To be sure that all works as expected we have to check that: &lt;br /&gt;
&lt;br /&gt;
* mac-address-table are consistent on the whole fabric. In traditionnal L2 setup, switch FIBs depend of the traffic passing through them and a mac @ can be see &amp;quot;everywhere&amp;quot; if it does a BUM on the network. In VXLAN, in a mac-vrf topology without filer, even a host doesn't send BUM, the mac address is propagated on the whole fabric (within BGP update). But, as it is on traditional L2 topology, you have to be sure that mac @ table aging time are consistent on all devices, with an aging time superior to ARP timer on hosts. &lt;br /&gt;
* routes type 2 are visible on each leaf nodes for a same vni, routes type 3 to reach remote VTEP have to be learned&lt;br /&gt;
* a common route-target for the VRF routes need to be used/set within policies. In effect, there are differences between vendors on route &amp;quot;tagging&amp;quot; (features to auto generate route-target, &amp;quot;hard coded&amp;quot; alogos, etc.). Here, on VyOS, we got to add adminstrative extended communities within route-map for the L2 VNI. We'll show it below&lt;br /&gt;
* all fabric connections (interconnections between network nodes) have the sufficient &amp;quot;IP MTU&amp;quot;. Please keep in mind that VXLAN overhead has a size of 50 bytes. So, to be sure that Jumbo traffic for host is ok, configure it at least at 9050 Bytes. I would advise to push it at 9100 Bytes in case of VXLAN usage on client HOSTS for Virtualized setup on servers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check FDB on leaf switch + debug type 2 routes' propagation for leaf1 pod1&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
##############&lt;br /&gt;
# VyOS&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb&lt;br /&gt;
50:01:00:01:00:02 dev eth2 vlan 1 master br100 permanent&lt;br /&gt;
50:01:00:01:00:02 dev eth2 master br100 permanent&lt;br /&gt;
33:33:00:00:00:01 dev eth2 self permanent&lt;br /&gt;
33:33:00:00:00:02 dev eth2 self permanent&lt;br /&gt;
01:00:5e:00:00:01 dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:0e dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:03 dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:00 dev eth2 self permanent&lt;br /&gt;
33:33:00:00:00:01 dev br100 self permanent&lt;br /&gt;
33:33:00:00:00:02 dev br100 self permanent&lt;br /&gt;
33:33:ff:01:00:02 dev br100 self permanent&lt;br /&gt;
01:00:5e:00:00:6a dev br100 self permanent&lt;br /&gt;
33:33:00:00:00:6a dev br100 self permanent&lt;br /&gt;
01:00:5e:00:00:01 dev br100 self permanent&lt;br /&gt;
33:33:ff:00:00:00 dev br100 self permanent&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 vlan 1 extern_learn master br100 &lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 extern_learn master br100 &lt;br /&gt;
8a:d0:00:16:1c:17 dev vxlan100 vlan 1 master br100 permanent&lt;br /&gt;
8a:d0:00:16:1c:17 dev vxlan100 master br100 permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.6 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.11 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.12 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.7 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.8 self permanent&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 dst 10.255.255.12 self extern_learn &lt;br /&gt;
&lt;br /&gt;
# and to focus on remote nodes&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb | grep &amp;quot;self extern_learn&amp;quot;&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 dst 10.255.255.12 self extern_learn &lt;br /&gt;
00:50:79:66:68:13 dev vxlan100 dst 10.255.255.11 self extern_learn &lt;br /&gt;
00:50:79:66:68:19 dev vxlan100 dst 10.255.255.8 self extern_learn &lt;br /&gt;
00:50:79:66:68:0c dev vxlan100 dst 10.255.255.6 self extern_learn &lt;br /&gt;
00:50:79:66:68:17 dev vxlan100 dst 10.255.255.7 self extern_learn &lt;br /&gt;
&lt;br /&gt;
# or on local clients &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb | grep eth | grep -v perm&lt;br /&gt;
00:50:79:66:68:0b dev eth2 master br100 &lt;br /&gt;
&lt;br /&gt;
# Now if we want to focus on route type 3 learned &lt;br /&gt;
&lt;br /&gt;
Displayed 7 prefixes (12 paths) (of requested type)&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn route type 3 | grep Dis&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
Route Distinguisher: 10.255.255.6:3&lt;br /&gt;
Route Distinguisher: 10.255.255.7:2&lt;br /&gt;
Route Distinguisher: 10.255.255.8:2&lt;br /&gt;
Route Distinguisher: 10.255.255.11:100&lt;br /&gt;
Route Distinguisher: 10.255.255.12:100&lt;br /&gt;
&lt;br /&gt;
# we notice that RDs for VyOS nodes don't respect the logic of &amp;lt;Loopback:vni&amp;gt;. It s because for the moment we can't set it by vni (or I didn't find how to do that)&lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Arista&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
# we check the fdb. Remote host are behind the port Vx1&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show mac address-table vlan 100&lt;br /&gt;
          Mac Address Table&lt;br /&gt;
------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Vlan    Mac Address       Type        Ports      Moves   Last Move&lt;br /&gt;
----    -----------       ----        -----      -----   ---------&lt;br /&gt;
 100    0050.7966.680c    DYNAMIC     Vx1        1       0:00:38 ago&lt;br /&gt;
 100    0050.7966.6813    DYNAMIC     Et3        1       0:14:08 ago&lt;br /&gt;
 100    0050.7966.6815    DYNAMIC     Vx1        1       9 days, 2:36:39 ago&lt;br /&gt;
 100    0050.7966.6817    DYNAMIC     Vx1        1       0:00:36 ago&lt;br /&gt;
 100    0050.7966.6819    DYNAMIC     Vx1        1       0:00:35 ago&lt;br /&gt;
Total Mac Addresses for this criterion: 5&lt;br /&gt;
&lt;br /&gt;
# we check that all VTEP are ready for BUM&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show bgp evpn route-type imet | i &amp;gt;&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.5:3 imet 10.255.255.5&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.6:3 imet 10.255.255.6&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.7:2 imet 10.255.255.7&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.8:2 imet 10.255.255.8&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.11:100 imet 10.255.255.11&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.12:100 imet 10.255.255.12&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show vxlan vtep detail&lt;br /&gt;
Remote VTEPS for Vxlan1:&lt;br /&gt;
&lt;br /&gt;
VTEP               Learned Via        MAC Address Learning       Tunnel Type(s) &lt;br /&gt;
------------------ ------------------ -------------------------- -------------- &lt;br /&gt;
10.255.255.5       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.6       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.7       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.8       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.12      control plane      control plane              flood, unicast &lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Cumulus&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
# we check the fdb. Remote host are behind the port Vx1&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bridge macs vlan 100&lt;br /&gt;
&lt;br /&gt;
VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
----  ------  ---------  -----------------  ----------  ---------  ------------  ----------------&lt;br /&gt;
 100  bridge  bridge     50:01:00:11:00:03              permanent                9 days, 02:47:42&lt;br /&gt;
 100  bridge  swp3       00:50:79:66:68:15                                       00:00:06&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0c                         extern_learn  00:00:40&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:13                         extern_learn  00:21:01&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:17                         extern_learn  00:00:38&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:19                         extern_learn  00:00:36&lt;br /&gt;
&lt;br /&gt;
# --&amp;gt; here we see that it misses the @mac from the host on leaf1 pod1. &lt;br /&gt;
# we check the evpn routes on the Cumulus node and we see that from leaf1 pod1 vni 100 we have only those routes&lt;br /&gt;
&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
&lt;br /&gt;
# --&amp;gt; something is wrong on the remote leaf.&lt;br /&gt;
# on the leaf we check the policy for the EVPN routes export&lt;br /&gt;
&lt;br /&gt;
  route-map RM-OUT-VNI {&lt;br /&gt;
         rule 1 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type multicast&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 2 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type prefix&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 3 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     vni 200&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:200&lt;br /&gt;
                 }&lt;br /&gt;
&lt;br /&gt;
# we notice that a typo in rule numbering removed the export of macip routes for vni 100.&lt;br /&gt;
# we correct that : &lt;br /&gt;
&lt;br /&gt;
route-map RM-OUT-VNI {&lt;br /&gt;
         rule 1 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type multicast&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 2 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type macip&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 3 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type prefix&lt;br /&gt;
                     vni 200&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:200&lt;br /&gt;
                 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# once corrected we check the fdb on the cumulus node + evpn routes&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bridge macs vlan 100&lt;br /&gt;
&lt;br /&gt;
VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
----  ------  ---------  -----------------  ----------  ---------  ------------  ----------------&lt;br /&gt;
 100  bridge  bridge     50:01:00:11:00:03              permanent                9 days, 02:51:48&lt;br /&gt;
 100  bridge  swp3       00:50:79:66:68:15                                       00:02:01&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0b                         extern_learn  00:00:26&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0c                         extern_learn  00:04:46&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:13                         extern_learn  00:25:08&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:17                         extern_learn  00:04:45&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:19                         extern_learn  00:04:43&lt;br /&gt;
&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
*  [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# we have now Type 2 routes, all is ok now and we learn the client mac 00:50:79:66:68:0b&lt;br /&gt;
# Nevertheless, the trafic was working between the client hosts, but trafic from Cumulus leaf client to VyOS leaf client was broadcasted to all leaf since the @mac was not advertised on the fabric&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;It could be interesting to check how each node is configured to deliver the service, but the article would be too long. So, to sum the steps to provide a L2 service: &lt;br /&gt;
&lt;br /&gt;
# create a VLAN (on Arista) / bridge (VyOS and Cumulus) + associate it to the VNI/VXLAN instances/interface&lt;br /&gt;
# create the mac vrf + define the route-target into bgp (Arista + Cumulus) / update the route-maps + community list to allow the redistribution of the VNI routes (type 2 and type 3)&lt;br /&gt;
&lt;br /&gt;
==== L3 service implementation ====&lt;br /&gt;
Now, we'll now look at the L3 service. On that kind of setup we need to implement / check:&lt;br /&gt;
* leaf IP subnets are well redistributed betweeb all leaf (here we are in a vrf &amp;quot;any to any&amp;quot; topology)&lt;br /&gt;
* we only redistribute routes for IP prefix. Routes type 2 (mac @) don't need to be redistributed between leaf&lt;br /&gt;
* that all clients can ping each other through the L3VPN&lt;br /&gt;
&lt;br /&gt;
To achieve that, we need to implement analog configuration than for the L2 service, but with the following differences: &lt;br /&gt;
&lt;br /&gt;
* create a VLAN (on Arista) / bridge (VyOS and Cumulus) + associate it to the VNI/VXLAN instances|interface&lt;br /&gt;
* create the L3 VRF + define the route-target into bgp (Arista + Cumulus + VyOS) + allow connected routes distribution (Arista / Cumulus) / update the route-maps + community list to allow the redistribution of the VNI routes (type 5) for VyOS / restrict the routes redistribution to type 5 routes into the VNI (Cumulus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we check the routing table with common cli commands + into the EVPN RIB :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# check routes into the vrf &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip route vrf VRF-L3-1&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,&lt;br /&gt;
       f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF VRF-L3-1:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 02w6d22h&lt;br /&gt;
C&amp;gt;* 192.168.10.0/24 is directly connected, br200, 02w6d22h&lt;br /&gt;
B&amp;gt;* 192.168.20.0/24 [20/0] via 10.255.255.6, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
B&amp;gt;* 192.168.30.0/24 [20/0] via 10.255.255.7, br200 onlink, weight 1, 05:04:15&lt;br /&gt;
B&amp;gt;* 192.168.40.0/24 [20/0] via 10.255.255.8, br200 onlink, weight 1, 04:59:41&lt;br /&gt;
B&amp;gt;* 192.168.50.0/24 [20/0] via 10.255.255.11, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
B&amp;gt;* 192.168.60.0/24 [20/0] via 10.255.255.12, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show ip route vrf VRF-L3-1&lt;br /&gt;
&lt;br /&gt;
VRF: VRF-L3-1&lt;br /&gt;
Codes: C - connected, S - static, K - kernel, &lt;br /&gt;
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,&lt;br /&gt;
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,&lt;br /&gt;
       N2 - OSPF NSSA external type2, B - BGP, B I - iBGP, B E - eBGP,&lt;br /&gt;
       R - RIP, I L1 - IS-IS level 1, I L2 - IS-IS level 2,&lt;br /&gt;
       O3 - OSPFv3, A B - BGP Aggregate, A O - OSPF Summary,&lt;br /&gt;
       NG - Nexthop Group Static Route, V - VXLAN Control Service,&lt;br /&gt;
       DH - DHCP client installed default route, M - Martian,&lt;br /&gt;
       DP - Dynamic Policy Route, L - VRF Leaked,&lt;br /&gt;
       G  - gRIBI, RC - Route Cache Route&lt;br /&gt;
&lt;br /&gt;
Gateway of last resort is not set&lt;br /&gt;
&lt;br /&gt;
 B E      192.168.10.0/24 [200/0] via VTEP 10.255.255.5 VNI 200 router-mac 12:9b:9b:d8:f6:86 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.20.0/24 [200/0] via VTEP 10.255.255.6 VNI 200 router-mac 50:01:00:02:00:03 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.30.0/24 [200/0] via VTEP 10.255.255.7 VNI 200 router-mac 50:01:00:09:00:03 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.40.0/24 [200/0] via VTEP 10.255.255.8 VNI 200 router-mac 50:01:00:0a:00:03 local-interface Vxlan1&lt;br /&gt;
 C        192.168.50.0/24 is directly connected, Vlan200&lt;br /&gt;
 B E      192.168.60.0/24 [200/0] via VTEP 10.255.255.12 VNI 200 router-mac 50:01:00:11:00:03 local-interface Vxlan1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show route vrf VRF-L3-1&lt;br /&gt;
show ip route vrf VRF-L3-1 &lt;br /&gt;
===========================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued route, r - rejected route&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VRF VRF-L3-1:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 01w2d03h&lt;br /&gt;
B&amp;gt;* 192.168.10.0/24 [20/0] via 10.255.255.5, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.20.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.30.0/24 [20/0] via 10.255.255.7, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.40.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.50.0/24 [20/0] via 10.255.255.11, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
C&amp;gt;* 192.168.60.0/24 is directly connected, vlan200, 01w2d03h&lt;br /&gt;
&lt;br /&gt;
# we can notice that the output are quite similar, except on Arista which indicates the VNI for remote targets, instead of referencing the local bridge / vlan200&lt;br /&gt;
&lt;br /&gt;
# Now we check the routes for the VNI 200&lt;br /&gt;
&lt;br /&gt;
# VyOS &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn route type prefix &lt;br /&gt;
BGP table version is 1, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[EthTag]:[ESI]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5             0         32768 ?&lt;br /&gt;
                    ET:8 RT:65000:200 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65001 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65001 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.11:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65001 65003 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65001 65003 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
Route Distinguisher: 10.255.255.12:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12                          0 65001 65003 65004 65016 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:11:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12                          0 65001 65003 65004 65016 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:11:00:03&lt;br /&gt;
&lt;br /&gt;
# Arista&lt;br /&gt;
                        &lt;br /&gt;
leaf1-pod3#show bgp evpn route ip-prefix ipv4 &lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  LocPref Weight  Path&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.5:200 ip-prefix 192.168.10.0/24&lt;br /&gt;
                                 10.255.255.5          -       100     0       65004 65003 65001 65011 ?&lt;br /&gt;
 *       RD: 10.255.255.5:200 ip-prefix 192.168.10.0/24&lt;br /&gt;
                                 10.255.255.5          -       100     0       65004 65003 65001 65011 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.6:200 ip-prefix 192.168.20.0/24&lt;br /&gt;
                                 10.255.255.6          -       100     0       65004 65003 65001 65012 ?&lt;br /&gt;
 *       RD: 10.255.255.6:200 ip-prefix 192.168.20.0/24&lt;br /&gt;
                                 10.255.255.6          -       100     0       65004 65003 65001 65012 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.7:200 ip-prefix 192.168.30.0/24&lt;br /&gt;
                                 10.255.255.7          -       100     0       65004 65003 65002 65013 ?&lt;br /&gt;
 *       RD: 10.255.255.7:200 ip-prefix 192.168.30.0/24&lt;br /&gt;
                                 10.255.255.7          -       100     0       65004 65003 65002 65013 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.8:200 ip-prefix 192.168.40.0/24&lt;br /&gt;
                                 10.255.255.8          -       100     0       65004 65003 65002 65014 ?&lt;br /&gt;
 *       RD: 10.255.255.8:200 ip-prefix 192.168.40.0/24&lt;br /&gt;
                                 10.255.255.8          -       100     0       65004 65003 65002 65014 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.11:200 ip-prefix 192.168.50.0/24&lt;br /&gt;
                                 -                     -       -       0       i&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.12:10200 ip-prefix 192.168.60.0/24&lt;br /&gt;
                                 10.255.255.12         -       100     0       65004 65016 i&lt;br /&gt;
 *       RD: 10.255.255.12:10200 ip-prefix 192.168.60.0/24&lt;br /&gt;
                                 10.255.255.12         -       100     0       65004 65016 i&lt;br /&gt;
&lt;br /&gt;
# CVX&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp l2vpn evpn route type prefix&lt;br /&gt;
BGP table version is 7, local router ID is 10.255.255.12&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65004 65003 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65004 65003 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65004 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65004 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65004 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65004 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.11:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
Route Distinguisher: 10.255.255.12:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12            0         32768 i&lt;br /&gt;
                    ET:8 RT:65000:200 Rmac:50:01:00:11:00:03&lt;br /&gt;
&lt;br /&gt;
# Now we check with traceroute on the 3 clients connected on focused leaf switches&lt;br /&gt;
&lt;br /&gt;
# client leaf VyOS&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.50.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=1 ttl=62 time=16.456 ms&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=2 ttl=62 time=11.852 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.60.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=1 ttl=62 time=5.554 ms&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=2 ttl=62 time=4.432 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.50.2&lt;br /&gt;
trace to 192.168.50.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.10.1   0.499 ms  3.143 ms  1.432 ms&lt;br /&gt;
 2   192.168.50.1   10.465 ms  12.512 ms  8.992 ms&lt;br /&gt;
 3   *192.168.50.2   11.056 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; trace 192.168.60.2&lt;br /&gt;
trace to 192.168.60.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.10.1   0.525 ms  0.312 ms  0.278 ms&lt;br /&gt;
 2   192.168.60.1   4.949 ms  4.232 ms  4.022 ms&lt;br /&gt;
 3   *192.168.60.2   4.167 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# client leaf Arista&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.10.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.10.2 icmp_seq=1 ttl=62 time=10.914 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.60.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=1 ttl=62 time=11.755 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.10.2&lt;br /&gt;
trace to 192.168.10.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.50.1   4.742 ms  4.123 ms  4.293 ms&lt;br /&gt;
 2   192.168.10.1   12.550 ms  15.039 ms  9.411 ms&lt;br /&gt;
 3   *192.168.10.2   8.939 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; &lt;br /&gt;
VPCS&amp;gt; trace 192.168.60.2&lt;br /&gt;
trace to 192.168.60.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.50.1   3.073 ms  2.901 ms  2.585 ms&lt;br /&gt;
 2   192.168.60.1   10.815 ms  11.493 ms  12.144 ms&lt;br /&gt;
 3   *192.168.60.2   10.429 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
# client leaf Cumulus&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.10.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.10.2 icmp_seq=1 ttl=62 time=4.731 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.50.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=1 ttl=62 time=11.722 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.50.2&lt;br /&gt;
trace to 192.168.50.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.60.1   0.487 ms  0.266 ms  0.248 ms&lt;br /&gt;
 2   192.168.50.1   6.691 ms  6.281 ms  6.613 ms&lt;br /&gt;
 3   *192.168.50.2   9.355 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; &lt;br /&gt;
VPCS&amp;gt; trace 192.168.10.2&lt;br /&gt;
trace to 192.168.10.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.60.1   0.436 ms  0.315 ms  0.380 ms&lt;br /&gt;
 2   192.168.10.1   4.535 ms  4.661 ms  3.994 ms&lt;br /&gt;
 3   *192.168.10.2   4.292 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conclusion of the lab ===&lt;br /&gt;
These first results are satisfying, it comforts the idea that VXLAN is a strong option to deliver L2/L3 services in datacenters, but not only. This kind of architecture is more and more chosen in campus designs, PRA, NFV solutions.&lt;br /&gt;
&lt;br /&gt;
The support of this technology on more and more open source NOS are encouraging regarding the innovation. If we look at Vyatta project for example, whom OS can be compiled &amp;quot;brick per brick&amp;quot;, we could imagine to create NFV CPEs providing VXLAN fabric extensions of some client VRFs. CPE could be connected to the central Fabric within encrypted tunnels (wireguard,ipsec) or through direct link over MacSec (this feature in on the Vyatta Roadmap).&lt;br /&gt;
&lt;br /&gt;
Please contact us if you want to feed the topic / discuss the lab.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
&lt;br /&gt;
Pierre L.&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=VyosAristaCVX-VXLAN-lab&amp;diff=3003</id>
		<title>VyosAristaCVX-VXLAN-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=VyosAristaCVX-VXLAN-lab&amp;diff=3003"/>
		<updated>2022-04-05T12:26:02Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: Created page with &amp;quot;Introduction  More and more, EVPN is making its place in Datacenter field. Mainstream vendors integrate its support, with VXLAN or MPLS for data plane + BGP for control plane....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Introduction&lt;br /&gt;
&lt;br /&gt;
More and more, EVPN is making its place in Datacenter field. Mainstream vendors integrate its support, with VXLAN or MPLS for data plane + BGP for control plane. In previous labs, we were able to observe that interoperability was quite good between vendors. Nevertheless, even we've already tested CumulusVX, there are also other open sources NOS which can support EVPN.&lt;br /&gt;
&lt;br /&gt;
Today we'll test VyOS in it's latest rolling version, which handles the support of EVPN.&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
create a VXLAN Fabric with VyOS nodes&lt;br /&gt;
provide a L2VPN and a L3VPN to client nodes within the fabric&lt;br /&gt;
integrate some other vendors node into the fabric, here Arista and Cumulus VX&lt;br /&gt;
test that all works as expected&lt;br /&gt;
Lab setup&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the EVE-NG tool in community edition (https://www.eve-ng.net/index.php/download/#DL-COMM) and use the following NOS version :&lt;br /&gt;
&lt;br /&gt;
Vyatta VyOS 1.4 rolling &amp;lt;-- free to download https://vyos.net/get/nightly-builds/&lt;br /&gt;
Arista vEOS 4.26.0F lab edition &amp;lt;-- need a support account&lt;br /&gt;
Nvidia Cumulus VX 4.2.1 lab edition &amp;lt;-- free to download https://www.nvidia.com/en-us/networking/ethernet-switching/cumulus-vx/download/&lt;br /&gt;
&lt;br /&gt;
We'll build a 3-tiers fabric, with leaf/spine/superspine devices, VXLAN/EVPN running on all nodes. It gives the following setup:&lt;br /&gt;
&lt;br /&gt;
On EVE-NG, we add IP information, ASN, loopback IPs. All other information will be past after when dealing with technical details.&lt;br /&gt;
&lt;br /&gt;
So, it gives:&lt;br /&gt;
&lt;br /&gt;
VXLAN/BGP infos&lt;br /&gt;
&lt;br /&gt;
Note: in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
service	vlan id	route-target	VNI	Commentaires&lt;br /&gt;
L2 cross-DC	100	target:65000:100	100	the 6 clients are in the same broadcast domain / subnet&lt;br /&gt;
L3VPN cros-DC	200	target:65000:200	200	the 6 clients have their own subnets. Here we use only one vni because no ESI will be implemented. One leaf one subnet.&lt;br /&gt;
&lt;br /&gt;
Client devices are represented by computers on EVE-NG. IPs in green are using the L2VPN service (extended layer 2 between pods) and IPs in orange the L3VPN service (routing service).&lt;br /&gt;
&lt;br /&gt;
Below some diagrams showing the logic topologies :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below the link to the configurations to allow you to quickly reproduce the tab.&lt;br /&gt;
&lt;br /&gt;
To be noted that the configurations are not &amp;quot;ready-to-prod &amp;quot; and need to be optimized (adding bfd, bgp optimization, etc.). Some typos can subsist. Whatever, the lab works and gives the expected results :)&lt;br /&gt;
&lt;br /&gt;
Link to devices configurations : http://wiki.intra.nesevo.com/images/3/32/02.lab-vyos-eos-cvx_v2.zip&lt;br /&gt;
&lt;br /&gt;
Lab details&lt;br /&gt;
&lt;br /&gt;
Considering that the lab is up and running, we'll now come back to the architecture.&lt;br /&gt;
&lt;br /&gt;
We have 3 kinds of network nodes :&lt;br /&gt;
&lt;br /&gt;
leaf switches, on edge, which provide L2 and L3 services.&lt;br /&gt;
couple of spine switches which allow leaf from a same pod to exchange traffic. They are also connected to superspine to reach other pods&lt;br /&gt;
superspine switches which interconnext the different spine switches from the different pods, thus allowing interpods traffic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All those network devices control plane can exchange routes' information within 2 layers of bgp : underlay and overlay.&lt;br /&gt;
&lt;br /&gt;
The role of the &amp;quot;underlay&amp;quot; is to dynamically route the traffic between loopback interfaces from the different nodes. Loopback interfaces are used to mount BGP sessions for the underlay and are used as VTEP interfaces on leaf nodes. Generally, it's better to have 2 different Loopback for this usage (in case of anycast vtep setup for example), but some vendors don't allow to 2 loopback interfaces in the same routing context. Whatever, in our setup, having only one loopback is fine.&lt;br /&gt;
&lt;br /&gt;
Here, the underlay is done in eBGP, ipv4 unicast family only + route-map to only redistribute loopback interfaces IP.&lt;br /&gt;
&lt;br /&gt;
Each node mount a session to the directly connected peers.&lt;br /&gt;
Each leaf node has a dedicated ASN.&lt;br /&gt;
Each couple of spine/superspine has a ASN for two, to follow the best practices to optimize the routing table (ECMP).&lt;br /&gt;
&lt;br /&gt;
The role of the &amp;quot;overlay&amp;quot; is to exchange EVPN routes type 2,3,5 here (type 1/4 routes seem to not be managed by VyOS at the moment, TBC).&lt;br /&gt;
&lt;br /&gt;
eBGP multihop sessions are mounted to directly neighbor loopback IPs.&lt;br /&gt;
policies/options are set to not change the original nexthop when propagating routes&lt;br /&gt;
for L2 services we only allow the redistribution of type 2 (macip) and type 3 (inclusive mcast for BUM management) routes&lt;br /&gt;
for L3 services we only allow the redistribution of type 5 (prefix) routes&lt;br /&gt;
regarding the setup, to enhance the scalability, it could be nice to use dedicated nodes (VM or phys) to take the role of route-servers. Here, we could connect them to superspine. Thus, spine/superspine would only do underlay and could not be a bottleneck for the control plane scalability&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Moreover, regarding the lab setup, no bgp pic / bfd / VMTO / other option are implemented to optimize the convergence / traffic delivery. The goal was to verify that VyOS is compatible in a basic but functionnal VXLAN setup.&lt;br /&gt;
&lt;br /&gt;
Now, we'll take a look on the different output from the 2 vendors leaf / spine / superspine to verify that all works as expected.&lt;br /&gt;
&lt;br /&gt;
We verify that underlay works well. All is fine if:&lt;br /&gt;
&lt;br /&gt;
we have an eBGP session per directly connected peer&lt;br /&gt;
we receive the same number of prefixes per peer type:&lt;br /&gt;
a leef has to receive the same number of prefixes from its spine neighbors&lt;br /&gt;
spine neigbors have to receive the same amount of prefixes from superspine, and reciprocally&lt;br /&gt;
all VTEP IPs have to be known into the GRT (global routing table / default routing instance)&lt;br /&gt;
On VyOS&lt;br /&gt;
&lt;br /&gt;
Below we can see that we receive 17 prefixes from both neighbors and that we know all loopback IPs from the setup (13 remote, 1 local). We have a bit too much routes, because on Cumulus nodes the filters that I have configured seem misconstructed.&lt;br /&gt;
&lt;br /&gt;
To be noted that spine will announce all the Loopback IPs except the one from it's twin, since they are not directly connected and superspine respect as loop protection constraint (don't reflect routes originated by an ASN &amp;quot;X&amp;quot; to a peer from the same ASN &amp;quot;X&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip bgp summary established &lt;br /&gt;
&lt;br /&gt;
IPv4 Unicast Summary (VRF default):&lt;br /&gt;
BGP router identifier 10.255.255.5, local AS number 65011 vrf-id 0&lt;br /&gt;
BGP table version 20&lt;br /&gt;
RIB entries 37, using 6808 bytes of memory&lt;br /&gt;
Peers 2, using 1446 KiB of memory&lt;br /&gt;
Peer groups 2, using 128 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc&lt;br /&gt;
10.254.254.9    4      65001     29993     29988        0    0    0 02w6d19h           17       19 N/A&lt;br /&gt;
10.254.254.11   4      65001     17218     17220        0    0    0 01w4d22h           17       19 N/A&lt;br /&gt;
&lt;br /&gt;
Displayed neighbors 2&lt;br /&gt;
Total number of neighbors 2&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip route | match /32&lt;br /&gt;
B&amp;gt;* 10.255.255.1/32 [20/0] via 10.254.254.9, eth0, weight 1, 02w6d19h&lt;br /&gt;
B&amp;gt;* 10.255.255.2/32 [20/0] via 10.254.254.11, eth1, weight 1, 01w4d22h&lt;br /&gt;
B&amp;gt;* 10.255.255.3/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.4/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
C&amp;gt;* 10.255.255.5/32 is directly connected, dum0, 02w6d19h&lt;br /&gt;
B&amp;gt;* 10.255.255.6/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d22h&lt;br /&gt;
B&amp;gt;* 10.255.255.7/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.8/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.9/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.10/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w4d18h&lt;br /&gt;
B&amp;gt;* 10.255.255.11/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d01h&lt;br /&gt;
B&amp;gt;* 10.255.255.12/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d00h&lt;br /&gt;
B&amp;gt;* 10.255.255.13/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d01h&lt;br /&gt;
B&amp;gt;* 10.255.255.14/32 [20/0] via 10.254.254.9, eth0, weight 1, 01w2d00h&lt;br /&gt;
&lt;br /&gt;
On Arista&lt;br /&gt;
&lt;br /&gt;
We verify that we receive prefix + same leaf / superspine / remote pods spine IPs (we note there misses some filters on spine since we receive /31 interco routes):&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show ip bgp neighbors 10.254.254.43 received-routes &lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
          10.254.254.36/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.38/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.42/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
          10.254.254.44/31       10.254.254.43         -       -          -       -       65004 65016 ?&lt;br /&gt;
          10.254.254.46/31       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
 *        10.255.255.1/32        10.254.254.43         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 *        10.255.255.2/32        10.254.254.43         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 *        10.255.255.3/32        10.254.254.43         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 *        10.255.255.4/32        10.254.254.43         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 *        10.255.255.5/32        10.254.254.43         -       -          -       -       65004 65003 65001 65011 ?&lt;br /&gt;
 *        10.255.255.6/32        10.254.254.43         -       -          -       -       65004 65003 65001 65012 ?&lt;br /&gt;
 *        10.255.255.7/32        10.254.254.43         -       -          -       -       65004 65003 65002 65013 ?&lt;br /&gt;
 *        10.255.255.8/32        10.254.254.43         -       -          -       -       65004 65003 65002 65014 ?&lt;br /&gt;
 *        10.255.255.9/32        10.254.254.43         -       -          -       -       65004 65003 ?&lt;br /&gt;
 *        10.255.255.10/32       10.254.254.43         -       -          -       -       65004 65003 ?&lt;br /&gt;
 *        10.255.255.12/32       10.254.254.43         -       -          -       -       65004 65016 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.14/32       10.254.254.43         0       -          -       -       65004 ?&lt;br /&gt;
leaf1-pod3#show ip bgp neighbors 10.254.254.41 received-routes&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 * &amp;gt;      10.255.255.1/32        10.254.254.41         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.2/32        10.254.254.41         -       -          -       -       65004 65003 65001 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.3/32        10.254.254.41         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.4/32        10.254.254.41         -       -          -       -       65004 65003 65002 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.5/32        10.254.254.41         -       -          -       -       65004 65003 65001 65011 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.6/32        10.254.254.41         -       -          -       -       65004 65003 65001 65012 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.7/32        10.254.254.41         -       -          -       -       65004 65003 65002 65013 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.8/32        10.254.254.41         -       -          -       -       65004 65003 65002 65014 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.9/32        10.254.254.41         -       -          -       -       65004 65003 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.10/32       10.254.254.41         -       -          -       -       65004 65003 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.12/32       10.254.254.41         -       -          -       -       65004 65016 ?&lt;br /&gt;
 * &amp;gt;      10.255.255.13/32       10.254.254.41         -       -          -       -       65004 i&lt;br /&gt;
&lt;br /&gt;
On Cumulus&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp summary &lt;br /&gt;
show bgp ipv4 unicast summary&lt;br /&gt;
=============================&lt;br /&gt;
BGP router identifier 10.255.255.12, local AS number 65016 vrf-id 0&lt;br /&gt;
BGP table version 103&lt;br /&gt;
RIB entries 37, using 7104 bytes of memory&lt;br /&gt;
Peers 2, using 43 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor                   V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd&lt;br /&gt;
10.254.254.45              4      65004    306764    261331        0    0    0 01:39:02           12&lt;br /&gt;
spine1-pod3(10.254.254.47) 4      65004    261602    261664        0    0    0 01w2d02h           16&lt;br /&gt;
&lt;br /&gt;
Total number of neighbors 2&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show route | grep /32&lt;br /&gt;
B&amp;gt;* 10.255.255.1/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.2/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.3/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.4/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.5/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.6/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.7/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.8/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.9/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.10/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.11/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
C&amp;gt;* 10.255.255.12/32 is directly connected, lo, 01w2d02h&lt;br /&gt;
B&amp;gt;* 10.255.255.13/32 [20/0] via 10.254.254.45, swp1, weight 1, 01:39:03&lt;br /&gt;
B&amp;gt;* 10.255.255.14/32 [20/0] via 10.254.254.47, swp2, weight 1, 01w2d02h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can also verify that routing is ok by pinging remote loopback IPs from local loopback + check eBGP EVPN session status:&lt;br /&gt;
&lt;br /&gt;
# ping example from VyOS leaf&lt;br /&gt;
vyos@leaf1-pod1:~$ ping 10.255.255.12 source-address 10.255.255.5&lt;br /&gt;
PING 10.255.255.12 (10.255.255.12) from 10.255.255.5 : 56(84) bytes of data.&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=1 ttl=61 time=2.60 ms&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=2 ttl=61 time=2.54 ms&lt;br /&gt;
64 bytes from 10.255.255.12: icmp_seq=3 ttl=61 time=2.44 ms&lt;br /&gt;
&lt;br /&gt;
# check of EVPN sessions on the different vendors&lt;br /&gt;
&lt;br /&gt;
# vyos&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn summary &lt;br /&gt;
BGP router identifier 10.255.255.5, local AS number 65011 vrf-id 0&lt;br /&gt;
BGP table version 0&lt;br /&gt;
RIB entries 31, using 5704 bytes of memory&lt;br /&gt;
Peers 2, using 1446 KiB of memory&lt;br /&gt;
Peer groups 2, using 128 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc&lt;br /&gt;
10.255.255.1    4      65001     30205     30208        0    0    0 02w6d21h           13       13 N/A&lt;br /&gt;
10.255.255.2    4      65001     17392     17429        0    0    0 01w5d00h           11       13 N/A&lt;br /&gt;
&lt;br /&gt;
# Arista&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show bgp evpn summary&lt;br /&gt;
BGP summary information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Neighbor Status Codes: m - Under maintenance&lt;br /&gt;
  Description              Neighbor         V AS           MsgRcvd   MsgSent  InQ OutQ  Up/Down State   PfxRcd PfxAcc&lt;br /&gt;
  OVL_spine1-pod3          10.255.255.13    4 65004          15608     15503    0    0 00:03:47 Estab   17     17&lt;br /&gt;
  OVL_spine2-pod3          10.255.255.14    4 65004         262780    308558    0    0    9d02h Estab   13     13&lt;br /&gt;
&lt;br /&gt;
# Cumulus&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp l2vpn evpn summary&lt;br /&gt;
BGP router identifier 10.255.255.12, local AS number 65016 vrf-id 0&lt;br /&gt;
BGP table version 0&lt;br /&gt;
RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
Peers 2, using 43 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor                   V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd&lt;br /&gt;
10.255.255.13              4      65004    307243    261693        0    0    0 00:04:25           14&lt;br /&gt;
spine1-pod3(10.255.255.14) 4      65004    262001    262025        0    0    0 01w2d02h           10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On EVPN, we should receive quite the same number of prefixes from both spine, but looks like there differences of best path election + redistribution between vendors. Perhaps something to dig. The most important point is to verify that the FIB for the services are consistent.&lt;br /&gt;
&lt;br /&gt;
L2 service implementation&lt;br /&gt;
&lt;br /&gt;
On that topic, we'll firstly focus on the Layer 2 service. To be sure that all works as expected we have to check that:&lt;br /&gt;
&lt;br /&gt;
mac-address-table are consistent on the whole fabric. In traditionnal L2 setup, switch FIBs depend of the traffic passing through them and a mac @ can be see &amp;quot;everywhere&amp;quot; if it does a BUM on the network. In VXLAN, in a mac-vrf topology without filer, even a host doesn't send BUM, the mac address is propagated on the whole fabric (within BGP update). But, as it is on traditional L2 topology, you have to be sure that mac @ table aging time are consistent on all devices, with an aging time superior to ARP timer on hosts.&lt;br /&gt;
routes type 2 are visible on each leaf nodes for a same vni, routes type 3 to reach remote VTEP have to be learned&lt;br /&gt;
a common route-target for the VRF routes need to be used/set within policies. In effect, there are differences between vendors on route &amp;quot;tagging&amp;quot; (features to auto generate route-target, &amp;quot;hard coded&amp;quot; alogos, etc.). Here, on VyOS, we got to add adminstrative extended communities within route-map for the L2 VNI. We'll show it below&lt;br /&gt;
all fabric connections (interconnections between network nodes) have the sufficient &amp;quot;IP MTU&amp;quot;. Please keep in mind that VXLAN overhead has a size of 50 bytes. So, to be sure that Jumbo traffic for host is ok, configure it at least at 9050 Bytes. I would advise to push it at 9100 Bytes in case of VXLAN usage on client HOSTS for Virtualized setup on servers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check FDB on leaf switch + debug type 2 routes' propagation for leaf1 pod1&lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# VyOS&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb&lt;br /&gt;
50:01:00:01:00:02 dev eth2 vlan 1 master br100 permanent&lt;br /&gt;
50:01:00:01:00:02 dev eth2 master br100 permanent&lt;br /&gt;
33:33:00:00:00:01 dev eth2 self permanent&lt;br /&gt;
33:33:00:00:00:02 dev eth2 self permanent&lt;br /&gt;
01:00:5e:00:00:01 dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:0e dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:03 dev eth2 self permanent&lt;br /&gt;
01:80:c2:00:00:00 dev eth2 self permanent&lt;br /&gt;
33:33:00:00:00:01 dev br100 self permanent&lt;br /&gt;
33:33:00:00:00:02 dev br100 self permanent&lt;br /&gt;
33:33:ff:01:00:02 dev br100 self permanent&lt;br /&gt;
01:00:5e:00:00:6a dev br100 self permanent&lt;br /&gt;
33:33:00:00:00:6a dev br100 self permanent&lt;br /&gt;
01:00:5e:00:00:01 dev br100 self permanent&lt;br /&gt;
33:33:ff:00:00:00 dev br100 self permanent&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 vlan 1 extern_learn master br100 &lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 extern_learn master br100 &lt;br /&gt;
8a:d0:00:16:1c:17 dev vxlan100 vlan 1 master br100 permanent&lt;br /&gt;
8a:d0:00:16:1c:17 dev vxlan100 master br100 permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.6 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.11 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.12 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.7 self permanent&lt;br /&gt;
00:00:00:00:00:00 dev vxlan100 dst 10.255.255.8 self permanent&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 dst 10.255.255.12 self extern_learn &lt;br /&gt;
&lt;br /&gt;
# and to focus on remote nodes&lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb | grep &amp;quot;self extern_learn&amp;quot;&lt;br /&gt;
00:50:79:66:68:15 dev vxlan100 dst 10.255.255.12 self extern_learn &lt;br /&gt;
00:50:79:66:68:13 dev vxlan100 dst 10.255.255.11 self extern_learn &lt;br /&gt;
00:50:79:66:68:19 dev vxlan100 dst 10.255.255.8 self extern_learn &lt;br /&gt;
00:50:79:66:68:0c dev vxlan100 dst 10.255.255.6 self extern_learn &lt;br /&gt;
00:50:79:66:68:17 dev vxlan100 dst 10.255.255.7 self extern_learn &lt;br /&gt;
&lt;br /&gt;
# or on local clients &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bridge br100 fdb | grep eth | grep -v perm&lt;br /&gt;
00:50:79:66:68:0b dev eth2 master br100 &lt;br /&gt;
&lt;br /&gt;
# Now if we want to focus on route type 3 learned &lt;br /&gt;
&lt;br /&gt;
Displayed 7 prefixes (12 paths) (of requested type)&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn route type 3 | grep Dis&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
Route Distinguisher: 10.255.255.6:3&lt;br /&gt;
Route Distinguisher: 10.255.255.7:2&lt;br /&gt;
Route Distinguisher: 10.255.255.8:2&lt;br /&gt;
Route Distinguisher: 10.255.255.11:100&lt;br /&gt;
Route Distinguisher: 10.255.255.12:100&lt;br /&gt;
&lt;br /&gt;
# we notice that RDs for VyOS nodes don't respect the logic of &amp;lt;Loopback:vni&amp;gt;. It s because for the moment we can't set it by vni (or I didn't find how to do that)&lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Arista&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
# we check the fdb. Remote host are behind the port Vx1&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show mac address-table vlan 100&lt;br /&gt;
          Mac Address Table&lt;br /&gt;
------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Vlan    Mac Address       Type        Ports      Moves   Last Move&lt;br /&gt;
----    -----------       ----        -----      -----   ---------&lt;br /&gt;
 100    0050.7966.680c    DYNAMIC     Vx1        1       0:00:38 ago&lt;br /&gt;
 100    0050.7966.6813    DYNAMIC     Et3        1       0:14:08 ago&lt;br /&gt;
 100    0050.7966.6815    DYNAMIC     Vx1        1       9 days, 2:36:39 ago&lt;br /&gt;
 100    0050.7966.6817    DYNAMIC     Vx1        1       0:00:36 ago&lt;br /&gt;
 100    0050.7966.6819    DYNAMIC     Vx1        1       0:00:35 ago&lt;br /&gt;
Total Mac Addresses for this criterion: 5&lt;br /&gt;
&lt;br /&gt;
# we check that all VTEP are ready for BUM&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show bgp evpn route-type imet | i &amp;gt;&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.5:3 imet 10.255.255.5&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.6:3 imet 10.255.255.6&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.7:2 imet 10.255.255.7&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.8:2 imet 10.255.255.8&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.11:100 imet 10.255.255.11&lt;br /&gt;
 * &amp;gt;Ec   RD: 10.255.255.12:100 imet 10.255.255.12&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show vxlan vtep detail&lt;br /&gt;
Remote VTEPS for Vxlan1:&lt;br /&gt;
&lt;br /&gt;
VTEP               Learned Via        MAC Address Learning       Tunnel Type(s) &lt;br /&gt;
------------------ ------------------ -------------------------- -------------- &lt;br /&gt;
10.255.255.5       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.6       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.7       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.8       control plane      control plane              flood, unicast &lt;br /&gt;
10.255.255.12      control plane      control plane              flood, unicast &lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Cumulus&lt;br /&gt;
##############&lt;br /&gt;
&lt;br /&gt;
# we check the fdb. Remote host are behind the port Vx1&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bridge macs vlan 100&lt;br /&gt;
&lt;br /&gt;
VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
----  ------  ---------  -----------------  ----------  ---------  ------------  ----------------&lt;br /&gt;
 100  bridge  bridge     50:01:00:11:00:03              permanent                9 days, 02:47:42&lt;br /&gt;
 100  bridge  swp3       00:50:79:66:68:15                                       00:00:06&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0c                         extern_learn  00:00:40&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:13                         extern_learn  00:21:01&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:17                         extern_learn  00:00:38&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:19                         extern_learn  00:00:36&lt;br /&gt;
&lt;br /&gt;
# --&amp;gt; here we see that it misses the @mac from the host on leaf1 pod1. &lt;br /&gt;
# we check the evpn routes on the Cumulus node and we see that from leaf1 pod1 vni 100 we have only those routes&lt;br /&gt;
&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
&lt;br /&gt;
# --&amp;gt; something is wrong on the remote leaf.&lt;br /&gt;
# on the leaf we check the policy for the EVPN routes export&lt;br /&gt;
&lt;br /&gt;
  route-map RM-OUT-VNI {&lt;br /&gt;
         rule 1 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type multicast&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 2 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type prefix&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 3 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     vni 200&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:200&lt;br /&gt;
                 }&lt;br /&gt;
&lt;br /&gt;
# we notice that a typo in rule numbering removed the export of macip routes for vni 100.&lt;br /&gt;
# we correct that : &lt;br /&gt;
&lt;br /&gt;
route-map RM-OUT-VNI {&lt;br /&gt;
         rule 1 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type multicast&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 2 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type macip&lt;br /&gt;
                     vni 100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:100&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         rule 3 {&lt;br /&gt;
             action permit&lt;br /&gt;
             match {&lt;br /&gt;
                 evpn {&lt;br /&gt;
                     route-type prefix&lt;br /&gt;
                     vni 200&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             set {&lt;br /&gt;
                 extcommunity {&lt;br /&gt;
                     rt 65000:200&lt;br /&gt;
                 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# once corrected we check the fdb on the cumulus node + evpn routes&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bridge macs vlan 100&lt;br /&gt;
&lt;br /&gt;
VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
----  ------  ---------  -----------------  ----------  ---------  ------------  ----------------&lt;br /&gt;
 100  bridge  bridge     50:01:00:11:00:03              permanent                9 days, 02:51:48&lt;br /&gt;
 100  bridge  swp3       00:50:79:66:68:15                                       00:02:01&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0b                         extern_learn  00:00:26&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:0c                         extern_learn  00:04:46&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:13                         extern_learn  00:25:08&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:17                         extern_learn  00:04:45&lt;br /&gt;
 100  bridge  vni100     00:50:79:66:68:19                         extern_learn  00:04:43&lt;br /&gt;
&lt;br /&gt;
Route Distinguisher: 10.255.255.5:3&lt;br /&gt;
*  [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:50:79:66:68:0b]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*  [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
*&amp;gt; [3]:[0]:[32]:[10.255.255.5]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 RT:65011:100 ET:8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# we have now Type 2 routes, all is ok now and we learn the client mac 00:50:79:66:68:0b&lt;br /&gt;
# Nevertheless, the trafic was working between the client hosts, but trafic from Cumulus leaf client to VyOS leaf client was broadcasted to all leaf since the @mac was not advertised on the fabric&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It could be interesting to check how each node is configured to deliver the service, but the article would be too long. So, to sum the steps to provide a L2 service:&lt;br /&gt;
&lt;br /&gt;
create a VLAN (on Arista) / bridge (VyOS and Cumulus) + associate it to the VNI/VXLAN instances/interface&lt;br /&gt;
create the mac vrf + define the route-target into bgp (Arista + Cumulus) / update the route-maps + community list to allow the redistribution of the VNI routes (type 2 and type 3)&lt;br /&gt;
L3 service implementation&lt;br /&gt;
&lt;br /&gt;
Now, we'll now look at the L3 service. On that kind of setup we need to implement / check:&lt;br /&gt;
&lt;br /&gt;
leaf IP subnets are well redistributed betweeb all leaf (here we are in a vrf &amp;quot;any to any&amp;quot; topology)&lt;br /&gt;
we only redistribute routes for IP prefix. Routes type 2 (mac @) don't need to be redistributed between leaf&lt;br /&gt;
that all clients can ping each other through the L3VPN&lt;br /&gt;
&lt;br /&gt;
To achieve that, we need to implement analog configuration than for the L2 service, but with the following differences:&lt;br /&gt;
&lt;br /&gt;
create a VLAN (on Arista) / bridge (VyOS and Cumulus) + associate it to the VNI/VXLAN instances|interface&lt;br /&gt;
create the L3 VRF + define the route-target into bgp (Arista + Cumulus + VyOS) + allow connected routes distribution (Arista / Cumulus) / update the route-maps + community list to allow the redistribution of the VNI routes (type 5) for VyOS / restrict the routes redistribution to type 5 routes into the VNI (Cumulus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we check the routing table with common cli commands + into the EVPN RIB :&lt;br /&gt;
&lt;br /&gt;
# check routes into the vrf &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show ip route vrf VRF-L3-1&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,&lt;br /&gt;
       f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF VRF-L3-1:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 02w6d22h&lt;br /&gt;
C&amp;gt;* 192.168.10.0/24 is directly connected, br200, 02w6d22h&lt;br /&gt;
B&amp;gt;* 192.168.20.0/24 [20/0] via 10.255.255.6, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
B&amp;gt;* 192.168.30.0/24 [20/0] via 10.255.255.7, br200 onlink, weight 1, 05:04:15&lt;br /&gt;
B&amp;gt;* 192.168.40.0/24 [20/0] via 10.255.255.8, br200 onlink, weight 1, 04:59:41&lt;br /&gt;
B&amp;gt;* 192.168.50.0/24 [20/0] via 10.255.255.11, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
B&amp;gt;* 192.168.60.0/24 [20/0] via 10.255.255.12, br200 onlink, weight 1, 05:11:08&lt;br /&gt;
&lt;br /&gt;
leaf1-pod3#show ip route vrf VRF-L3-1&lt;br /&gt;
&lt;br /&gt;
VRF: VRF-L3-1&lt;br /&gt;
Codes: C - connected, S - static, K - kernel, &lt;br /&gt;
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,&lt;br /&gt;
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,&lt;br /&gt;
       N2 - OSPF NSSA external type2, B - BGP, B I - iBGP, B E - eBGP,&lt;br /&gt;
       R - RIP, I L1 - IS-IS level 1, I L2 - IS-IS level 2,&lt;br /&gt;
       O3 - OSPFv3, A B - BGP Aggregate, A O - OSPF Summary,&lt;br /&gt;
       NG - Nexthop Group Static Route, V - VXLAN Control Service,&lt;br /&gt;
       DH - DHCP client installed default route, M - Martian,&lt;br /&gt;
       DP - Dynamic Policy Route, L - VRF Leaked,&lt;br /&gt;
       G  - gRIBI, RC - Route Cache Route&lt;br /&gt;
&lt;br /&gt;
Gateway of last resort is not set&lt;br /&gt;
&lt;br /&gt;
 B E      192.168.10.0/24 [200/0] via VTEP 10.255.255.5 VNI 200 router-mac 12:9b:9b:d8:f6:86 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.20.0/24 [200/0] via VTEP 10.255.255.6 VNI 200 router-mac 50:01:00:02:00:03 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.30.0/24 [200/0] via VTEP 10.255.255.7 VNI 200 router-mac 50:01:00:09:00:03 local-interface Vxlan1&lt;br /&gt;
 B E      192.168.40.0/24 [200/0] via VTEP 10.255.255.8 VNI 200 router-mac 50:01:00:0a:00:03 local-interface Vxlan1&lt;br /&gt;
 C        192.168.50.0/24 is directly connected, Vlan200&lt;br /&gt;
 B E      192.168.60.0/24 [200/0] via VTEP 10.255.255.12 VNI 200 router-mac 50:01:00:11:00:03 local-interface Vxlan1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show route vrf VRF-L3-1&lt;br /&gt;
show ip route vrf VRF-L3-1 &lt;br /&gt;
===========================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued route, r - rejected route&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VRF VRF-L3-1:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 01w2d03h&lt;br /&gt;
B&amp;gt;* 192.168.10.0/24 [20/0] via 10.255.255.5, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.20.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.30.0/24 [20/0] via 10.255.255.7, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.40.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
B&amp;gt;* 192.168.50.0/24 [20/0] via 10.255.255.11, vlan200 onlink, weight 1, 03:18:37&lt;br /&gt;
C&amp;gt;* 192.168.60.0/24 is directly connected, vlan200, 01w2d03h&lt;br /&gt;
&lt;br /&gt;
# we can notice that the output are quite similar, except on Arista which indicates the VNI for remote targets, instead of referencing the local bridge / vlan200&lt;br /&gt;
&lt;br /&gt;
# Now we check the routes for the VNI 200&lt;br /&gt;
&lt;br /&gt;
# VyOS &lt;br /&gt;
&lt;br /&gt;
vyos@leaf1-pod1:~$ show bgp l2vpn evpn route type prefix &lt;br /&gt;
BGP table version is 1, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[EthTag]:[ESI]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5             0         32768 ?&lt;br /&gt;
                    ET:8 RT:65000:200 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65001 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65001 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.11:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65001 65003 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65001 65003 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
Route Distinguisher: 10.255.255.12:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12                          0 65001 65003 65004 65016 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:11:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12                          0 65001 65003 65004 65016 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:11:00:03&lt;br /&gt;
&lt;br /&gt;
# Arista&lt;br /&gt;
                        &lt;br /&gt;
leaf1-pod3#show bgp evpn route ip-prefix ipv4 &lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
Router identifier 10.255.255.11, local AS number 65015&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&lt;br /&gt;
                    S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
                    % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&lt;br /&gt;
&lt;br /&gt;
          Network                Next Hop              Metric  LocPref Weight  Path&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.5:200 ip-prefix 192.168.10.0/24&lt;br /&gt;
                                 10.255.255.5          -       100     0       65004 65003 65001 65011 ?&lt;br /&gt;
 *       RD: 10.255.255.5:200 ip-prefix 192.168.10.0/24&lt;br /&gt;
                                 10.255.255.5          -       100     0       65004 65003 65001 65011 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.6:200 ip-prefix 192.168.20.0/24&lt;br /&gt;
                                 10.255.255.6          -       100     0       65004 65003 65001 65012 ?&lt;br /&gt;
 *       RD: 10.255.255.6:200 ip-prefix 192.168.20.0/24&lt;br /&gt;
                                 10.255.255.6          -       100     0       65004 65003 65001 65012 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.7:200 ip-prefix 192.168.30.0/24&lt;br /&gt;
                                 10.255.255.7          -       100     0       65004 65003 65002 65013 ?&lt;br /&gt;
 *       RD: 10.255.255.7:200 ip-prefix 192.168.30.0/24&lt;br /&gt;
                                 10.255.255.7          -       100     0       65004 65003 65002 65013 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.8:200 ip-prefix 192.168.40.0/24&lt;br /&gt;
                                 10.255.255.8          -       100     0       65004 65003 65002 65014 ?&lt;br /&gt;
 *       RD: 10.255.255.8:200 ip-prefix 192.168.40.0/24&lt;br /&gt;
                                 10.255.255.8          -       100     0       65004 65003 65002 65014 ?&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.11:200 ip-prefix 192.168.50.0/24&lt;br /&gt;
                                 -                     -       -       0       i&lt;br /&gt;
 * &amp;gt;     RD: 10.255.255.12:10200 ip-prefix 192.168.60.0/24&lt;br /&gt;
                                 10.255.255.12         -       100     0       65004 65016 i&lt;br /&gt;
 *       RD: 10.255.255.12:10200 ip-prefix 192.168.60.0/24&lt;br /&gt;
                                 10.255.255.12         -       100     0       65004 65016 i&lt;br /&gt;
&lt;br /&gt;
# CVX&lt;br /&gt;
&lt;br /&gt;
cumulus@cumulus:mgmt:~$ net show bgp l2vpn evpn route type prefix&lt;br /&gt;
BGP table version is 7, local router ID is 10.255.255.12&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.10.0]&lt;br /&gt;
                    10.255.255.5                           0 65004 65003 65001 65011 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:12:9b:9b:d8:f6:86&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65004 65003 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.20.0]&lt;br /&gt;
                    10.255.255.6                           0 65004 65003 65001 65012 ?&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:02:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65004 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.30.0]&lt;br /&gt;
                    10.255.255.7                           0 65004 65003 65002 65013 ?&lt;br /&gt;
                    RT:65000:200 RT:65013:200 ET:8 Rmac:50:01:00:09:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65004 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.40.0]&lt;br /&gt;
                    10.255.255.8                           0 65004 65003 65002 65014 ?&lt;br /&gt;
                    RT:65000:200 RT:65014:200 ET:8 Rmac:50:01:00:0a:00:03&lt;br /&gt;
Route Distinguisher: 10.255.255.11:200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.50.0]&lt;br /&gt;
                    10.255.255.11                          0 65004 65015 i&lt;br /&gt;
                    RT:65000:200 ET:8 Rmac:50:01:00:cd:ff:68&lt;br /&gt;
Route Distinguisher: 10.255.255.12:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.60.0]&lt;br /&gt;
                    10.255.255.12            0         32768 i&lt;br /&gt;
                    ET:8 RT:65000:200 Rmac:50:01:00:11:00:03&lt;br /&gt;
&lt;br /&gt;
# Now we check with traceroute on the 3 clients connected on focused leaf switches&lt;br /&gt;
&lt;br /&gt;
# client leaf VyOS&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.50.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=1 ttl=62 time=16.456 ms&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=2 ttl=62 time=11.852 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.60.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=1 ttl=62 time=5.554 ms&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=2 ttl=62 time=4.432 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.50.2&lt;br /&gt;
trace to 192.168.50.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.10.1   0.499 ms  3.143 ms  1.432 ms&lt;br /&gt;
 2   192.168.50.1   10.465 ms  12.512 ms  8.992 ms&lt;br /&gt;
 3   *192.168.50.2   11.056 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; trace 192.168.60.2&lt;br /&gt;
trace to 192.168.60.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.10.1   0.525 ms  0.312 ms  0.278 ms&lt;br /&gt;
 2   192.168.60.1   4.949 ms  4.232 ms  4.022 ms&lt;br /&gt;
 3   *192.168.60.2   4.167 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# client leaf Arista&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.10.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.10.2 icmp_seq=1 ttl=62 time=10.914 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.60.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.60.2 icmp_seq=1 ttl=62 time=11.755 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.10.2&lt;br /&gt;
trace to 192.168.10.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.50.1   4.742 ms  4.123 ms  4.293 ms&lt;br /&gt;
 2   192.168.10.1   12.550 ms  15.039 ms  9.411 ms&lt;br /&gt;
 3   *192.168.10.2   8.939 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; &lt;br /&gt;
VPCS&amp;gt; trace 192.168.60.2&lt;br /&gt;
trace to 192.168.60.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.50.1   3.073 ms  2.901 ms  2.585 ms&lt;br /&gt;
 2   192.168.60.1   10.815 ms  11.493 ms  12.144 ms&lt;br /&gt;
 3   *192.168.60.2   10.429 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
# client leaf Cumulus&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; ping 192.168.10.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.10.2 icmp_seq=1 ttl=62 time=4.731 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; ping 192.168.50.2&lt;br /&gt;
&lt;br /&gt;
84 bytes from 192.168.50.2 icmp_seq=1 ttl=62 time=11.722 ms&lt;br /&gt;
^C&lt;br /&gt;
VPCS&amp;gt; trace 192.168.50.2&lt;br /&gt;
trace to 192.168.50.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.60.1   0.487 ms  0.266 ms  0.248 ms&lt;br /&gt;
 2   192.168.50.1   6.691 ms  6.281 ms  6.613 ms&lt;br /&gt;
 3   *192.168.50.2   9.355 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
VPCS&amp;gt; &lt;br /&gt;
VPCS&amp;gt; trace 192.168.10.2&lt;br /&gt;
trace to 192.168.10.2, 8 hops max, press Ctrl+C to stop&lt;br /&gt;
 1   192.168.60.1   0.436 ms  0.315 ms  0.380 ms&lt;br /&gt;
 2   192.168.10.1   4.535 ms  4.661 ms  3.994 ms&lt;br /&gt;
 3   *192.168.10.2   4.292 ms (ICMP type:3, code:3, Destination port unreachable)&lt;br /&gt;
&lt;br /&gt;
Conclusion of the lab&lt;br /&gt;
&lt;br /&gt;
These first results are satisfying, it comforts the idea that VXLAN is a strong option to deliver L2/L3 services in datacenters, but not only. This kind of architecture is more and more chosen in campus designs, PRA, NFV solutions.&lt;br /&gt;
&lt;br /&gt;
The support of this technology on more and more open source NOS are encouraging regarding the innovation. If we look at Vyatta project for example, whom OS can be compiled &amp;quot;brick per brick&amp;quot;, we could imagine to create NFV CPEs providing VXLAN fabric extensions of some client VRFs. CPE could be connected to the central Fabric within encrypted tunnels (wireguard,ipsec) or through direct link over MacSec (this feature in on the Vyatta Roadmap).&lt;br /&gt;
&lt;br /&gt;
Please contact us if you want to feed the topic / discuss the lab.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
&lt;br /&gt;
Pierre L.&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=3002</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=3002"/>
		<updated>2022-04-05T12:24:15Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
Welcome to our Labs Wiki page. &lt;br /&gt;
&lt;br /&gt;
Here you'll find our shares about what we've experimented in lab. Results / observations could change today with latest versions and our knowledge improvement. &lt;br /&gt;
&lt;br /&gt;
Don't hesitate to share your feedbacks, thanks.&lt;br /&gt;
&lt;br /&gt;
= VyOS/Arista/CVX Lab with EVE-NG =&lt;br /&gt;
&lt;br /&gt;
[[VyosAristaCVX-VXLAN-lab]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus ContainerLab =&lt;br /&gt;
&lt;br /&gt;
[[Cumulus-Nokia-Lab]]&lt;br /&gt;
&lt;br /&gt;
= SONiC with Docker =&lt;br /&gt;
&lt;br /&gt;
[[Sonic-lab]]&lt;br /&gt;
&lt;br /&gt;
= M-Vendor VXLAN Lab with EVE-NG =&lt;br /&gt;
&lt;br /&gt;
[[Mvendor-VXLAN-lab]]&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Cumulus-Nokia-Lab&amp;diff=3001</id>
		<title>Cumulus-Nokia-Lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Cumulus-Nokia-Lab&amp;diff=3001"/>
		<updated>2021-12-03T08:46:34Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!Loopback/VTEP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[https://wiki.nesevo.com/images/6/66/20211008_lab-nokia-cvx.zip 20211008_lab-nokia-cvx.zip]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2997</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2997"/>
		<updated>2021-10-29T13:44:35Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
Welcome to our Labs Wiki page. &lt;br /&gt;
&lt;br /&gt;
Here you'll find our shares about what we've experimented in lab. Results / observations could change today with latest versions and our knowledge improvement. &lt;br /&gt;
&lt;br /&gt;
Don't hesitate to share your feedbacks, thanks.&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus ContainerLab =&lt;br /&gt;
&lt;br /&gt;
[[Cumulus-Nokia-Lab]]&lt;br /&gt;
&lt;br /&gt;
= SONiC with Docker =&lt;br /&gt;
&lt;br /&gt;
[[Sonic-lab]]&lt;br /&gt;
&lt;br /&gt;
= M-Vendor VXLAN Lab with EVE-NG =&lt;br /&gt;
&lt;br /&gt;
[[Mvendor-VXLAN-lab]]&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2996</id>
		<title>Mvendor-VXLAN-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2996"/>
		<updated>2021-10-29T13:38:22Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
These labs were realized end of 2020. So different behaviors could be observed today with last releases, in a good or a bad way. &lt;br /&gt;
&lt;br /&gt;
Archives posted are not production-ready and can carry unused/incomplete config parts&lt;br /&gt;
&lt;br /&gt;
Analyzes and conclusions are not an absolute truth. So if you have remarks/advices, please share :)&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Lab Target&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The target of the lab is to build a multivendor lab, with an architecture reflecting those deployed in customers' environment.&lt;br /&gt;
&lt;br /&gt;
This lab will be constructed in several steps, starting in a virtual version, followed by a physical one.&lt;br /&gt;
&lt;br /&gt;
For the moment, we are working on typical &amp;quot;modern&amp;quot; datacenters implementations :&lt;br /&gt;
&lt;br /&gt;
* EVPN/VXLAN layer 2 only&lt;br /&gt;
* EVPN/VXLAN layer 2 + layer 3 per rack (ou layer 3 anycast gw)&lt;br /&gt;
* EVPN within MPLS en L2/L3&lt;br /&gt;
* &amp;quot;standard&amp;quot; IP Fabric&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Host specifications&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Server : - Intel Xeon E5-1660v3 - 64GB DDR4 ECC 2133MHz - 2x HDD SATA 4TB Datacenter Class Soft RA&lt;br /&gt;
System : VMware ESXi 6.7 U3&lt;br /&gt;
&lt;br /&gt;
Software versions :&lt;br /&gt;
&lt;br /&gt;
All network devices instances run within EVE-NG software , here EVE-NG 2.0.3-110 The software has been installed with an OVF available on the website https://www.eve-ng.net/&lt;br /&gt;
&lt;br /&gt;
Regarding the vendors images, they have been downloaded on the vendors portals (or provided by them directly). &lt;br /&gt;
&lt;br /&gt;
* Arista : veos-4.24.1F&lt;br /&gt;
* Juniper MX : 20.1R1.11-limited-VCP&lt;br /&gt;
* Juniper QFX : 18.4R1.8&lt;br /&gt;
* Juniper SRX : next-gen 20.1R1.11&lt;br /&gt;
* Nokia  : 7750 VSR-I timos-20.7R1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;Password used :&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Nokia : admin:nokia2020&lt;br /&gt;
* Arista : admin: &amp;lt;-- no password&lt;br /&gt;
* Juniper : root:Juniper&lt;br /&gt;
* Cumulus : cumulus:CumulusLinux!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= GOAL =&lt;br /&gt;
The target of this lab is to put in place a setup providing a &amp;quot;cross-dc&amp;quot; switch, multi-vendor, based on EVPN/VXLAN technology.&lt;br /&gt;
&lt;br /&gt;
In this lab, we have :&lt;br /&gt;
&lt;br /&gt;
* Arista devices as Spine nodes&lt;br /&gt;
* Spine nodes carry directly DCI connections&lt;br /&gt;
* Local Spine share the same autonomous system&lt;br /&gt;
* Leaf devices are from different vendors : Juniper, Arista, Nokia and Cumulus&lt;br /&gt;
* attached host are single-homed and are simulated by Arista instances. Thus allowing to test N vlans at the same time&lt;br /&gt;
* EVPN uses VXLAN encapsulation, the control plane is BGP base. All nodes have dedicated private ASN (except for local SPINE)&lt;br /&gt;
* Underlay is managed by eBGP sessions, where only Loopback IPs are distributed. Those IPs are used as VTEP IPs by LEAF nodes&lt;br /&gt;
* Overlay is managed by eBGP multihop sessions between loopback IPs. Well think to only activate EVPN family for those sessions + define the upsate-source IP (loopback IP)&lt;br /&gt;
&lt;br /&gt;
== Configurations + diagrams ==&lt;br /&gt;
&lt;br /&gt;
[[File:Lab-mvendor-vxlan-l2-nok-ars-jun-cum.jpeg]]&lt;br /&gt;
[[https://wiki.nesevo.com/images/9/96/Mvendor-lab-4_vendors.zip Attach:Mvendor-lab-4_vendors.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:L2-L3-mvendor-vxlan-direct-dci.png]]&lt;br /&gt;
[[https://wiki.nesevo.com/images/3/38/Mvendor-lab_5-vendors.zip Attach:Mvendor-lab_5-vendors.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Observations ==&lt;br /&gt;
Juniper vQFX supports only vlan-aware-bundle service in VXLAN (one EVPN instance for N VLAN)&lt;br /&gt;
&lt;br /&gt;
On Arista you can choose either use VLAN-BASED or VLAN-AWARE-BUNDLE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    vlan 100&lt;br /&gt;
       rd 10.255.255.5:1&lt;br /&gt;
       route-target both 65000:100&lt;br /&gt;
       redistribute learned&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    vlan-aware-bundle LAB&lt;br /&gt;
       rd 10.255.255.5:1&lt;br /&gt;
       route-target both 65000:100&lt;br /&gt;
       redistribute learned&lt;br /&gt;
       vlan 100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Nokia I've only found the way to do vlan-based.&lt;br /&gt;
&lt;br /&gt;
It can be seen in type-routes (ether tag id part in yellow bellow) :&lt;br /&gt;
&lt;br /&gt;
Arista vlan-based :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.5&lt;br /&gt;
2:10.255.255.5:1::0::50:01:00:3e:d9:dc/304 MAC/IP&lt;br /&gt;
2:10.255.255.5:1::0::50:01:00:3e:d9:dc/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arista vlan-bundle (the ::0:: is replaced by ::100::):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.8&lt;br /&gt;
2:10.255.255.8:1::100::50:01:00:cd:ff:68/304 MAC/IP&lt;br /&gt;
2:10.255.255.8:1::100::50:01:00:cd:ff:68/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Juniper vlan-bundle :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.10&lt;br /&gt;
2:10.255.255.10:1::100::50:01:00:36:5f:a1/304 MAC/IP&lt;br /&gt;
2:10.255.255.10:1::100::50:01:00:36:5f:a1/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nokia vlan based :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.9&lt;br /&gt;
&lt;br /&gt;
2:10.255.255.9:100::0::50:01:00:06:09:e7/304 MAC/IP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the border effect is that on Arista devices, fdb install routes basing on ether tag id. Juniper doesn't do that (as Nokia)&lt;br /&gt;
&lt;br /&gt;
Juniper DC1 output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show ethernet-switching table&lt;br /&gt;
MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)&lt;br /&gt;
Ethernet switching table : 6 entries, 6 learned&lt;br /&gt;
Routing instance : default-switch&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    Vlan                MAC                 MAC      Logical                Active&lt;br /&gt;
    name                address             flags    interface              source&lt;br /&gt;
    VL_100              50:01:00:06:09:e7   D        vtep.32770             10.255.255.9                  NOKIA-DC2&lt;br /&gt;
    VL_100              50:01:00:36:5f:a1   D        vtep.32773             10.255.255.10                JUNIPER-DC2&lt;br /&gt;
    VL_100              50:01:00:3e:d9:dc   D        vtep.32769             10.255.255.5                  ARISTA-DC1&lt;br /&gt;
    VL_100              50:01:00:65:ae:e8   D        vtep.32772             10.255.255.6                  NOKIA-DC1&lt;br /&gt;
    VL_100              50:01:00:96:6b:29   D        xe-0/0/3.0          &lt;br /&gt;
    VL_100              50:01:00:cd:ff:68   D        vtep.32771             10.255.255.8                    ARISTA-DC2&lt;br /&gt;
&lt;br /&gt;
Nokia DC1 output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Forwarding Database, Service 100 ServId     MAC               Source-Identifier       Type     Last Change&lt;br /&gt;
             Transport:Tnl-Id                         Age      &lt;br /&gt;
&lt;br /&gt;
----100        50:01:00:06:09:e7 vxlan-1:                Evpn     10/15/20 08:50:03                           NOKIA-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.9:100&lt;br /&gt;
100        50:01:00:36:5f:a1 vxlan-1:                Evpn     10/15/20 08:50:03                               JUNIPER-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.10:100&lt;br /&gt;
100        50:01:00:3e:d9:dc vxlan-1:                Evpn     10/15/20 09:16:27                           ARISTA-DC1&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.5:100&lt;br /&gt;
100        50:01:00:65:ae:e8 sap:1/1/c2/1:100        L/150    10/13/20 16:51:07&lt;br /&gt;
&lt;br /&gt;
100        50:01:00:96:6b:29 vxlan-1:                Evpn     10/15/20 08:50:03                             JUNIPER-DC1&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.7:100&lt;br /&gt;
100        50:01:00:cd:ff:68 vxlan-1:                Evpn     10/15/20 08:51:55                               ARISTA-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.8:100&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arista DC2 output&lt;br /&gt;
&lt;br /&gt;
vlan-aware bundle :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#show mac address-table&lt;br /&gt;
           Mac Address Table&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
----Vlan    Mac Address       Type        Ports      Moves   Last Move&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
---------------       ----        -----      -----   ---------&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  100    5001.0036.5fa1    DYNAMIC     Vx1        1       0:37:45 ago     JUNIPER-DC2&lt;br /&gt;
 &lt;br /&gt;
  100    5001.003e.d9dc    DYNAMIC     Vx1        1       0:13:14 ago    ARISTA-DC1&lt;br /&gt;
 &lt;br /&gt;
  100    5001.0096.6b29    DYNAMIC     Vx1        1       0:37:45 ago     JUNIPER-DC1&lt;br /&gt;
 &lt;br /&gt;
  100    5001.00cd.ff68    DYNAMIC     Et2        1       1 day, 19:22:18 ago&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Only mac @ for Arista / Juniper are installed even the Nokia routes are well received&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#   show bgp evpn rd 10.255.255.6:100&lt;br /&gt;
&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
&lt;br /&gt;
Router identifier 10.255.255.8, local AS number 65021&lt;br /&gt;
&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                     S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
 &lt;br /&gt;
                     % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
           Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.6:100 mac-ip 5001.0065.aee8&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  *  ec   RD: 10.255.255.6:100 mac-ip 5001.0065.aee8&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.6:100 imet 10.255.255.6&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  *  ec   RD: 10.255.255.6:100 imet 10.255.255.6&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
compared to Juniper routes for example :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#   show bgp evpn rd 10.255.255.7:1&lt;br /&gt;
&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
&lt;br /&gt;
Router identifier 10.255.255.8, local AS number 65021&lt;br /&gt;
&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                     S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
 &lt;br /&gt;
                     % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
           Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.7:1 mac-ip 100 5001.0096.6b29&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.7          -       100     0       65002 65001 65013 i&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ether tag id makes the difference for me.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, since no type 2 routes is received, the packets from Arista to Nokia are processed as BUM (so sent to all VTEP from the VXLAN instance).&lt;br /&gt;
&lt;br /&gt;
Some tests wee done with L3 routing, details coming&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2995</id>
		<title>Mvendor-VXLAN-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2995"/>
		<updated>2021-10-29T13:38:05Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
These labs were realized end of 2020. So different behaviors could be observed today with last releases, in a good or a bad way. &lt;br /&gt;
&lt;br /&gt;
Archives posted are not production-ready and can carry unused/incomplete config parts&lt;br /&gt;
&lt;br /&gt;
Analyzes and conclusions are not an absolute truth. So if you have remarks/advices, please share :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Lab Target&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The target of the lab is to build a multivendor lab, with an architecture reflecting those deployed in customers' environment.&lt;br /&gt;
&lt;br /&gt;
This lab will be constructed in several steps, starting in a virtual version, followed by a physical one.&lt;br /&gt;
&lt;br /&gt;
For the moment, we are working on typical &amp;quot;modern&amp;quot; datacenters implementations :&lt;br /&gt;
&lt;br /&gt;
* EVPN/VXLAN layer 2 only&lt;br /&gt;
* EVPN/VXLAN layer 2 + layer 3 per rack (ou layer 3 anycast gw)&lt;br /&gt;
* EVPN within MPLS en L2/L3&lt;br /&gt;
* &amp;quot;standard&amp;quot; IP Fabric&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Host specifications&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Server : - Intel Xeon E5-1660v3 - 64GB DDR4 ECC 2133MHz - 2x HDD SATA 4TB Datacenter Class Soft RA&lt;br /&gt;
System : VMware ESXi 6.7 U3&lt;br /&gt;
&lt;br /&gt;
Software versions :&lt;br /&gt;
&lt;br /&gt;
All network devices instances run within EVE-NG software , here EVE-NG 2.0.3-110 The software has been installed with an OVF available on the website https://www.eve-ng.net/&lt;br /&gt;
&lt;br /&gt;
Regarding the vendors images, they have been downloaded on the vendors portals (or provided by them directly). &lt;br /&gt;
&lt;br /&gt;
* Arista : veos-4.24.1F&lt;br /&gt;
* Juniper MX : 20.1R1.11-limited-VCP&lt;br /&gt;
* Juniper QFX : 18.4R1.8&lt;br /&gt;
* Juniper SRX : next-gen 20.1R1.11&lt;br /&gt;
* Nokia  : 7750 VSR-I timos-20.7R1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;Password used :&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Nokia : admin:nokia2020&lt;br /&gt;
* Arista : admin: &amp;lt;-- no password&lt;br /&gt;
* Juniper : root:Juniper&lt;br /&gt;
* Cumulus : cumulus:CumulusLinux!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= GOAL =&lt;br /&gt;
The target of this lab is to put in place a setup providing a &amp;quot;cross-dc&amp;quot; switch, multi-vendor, based on EVPN/VXLAN technology.&lt;br /&gt;
&lt;br /&gt;
In this lab, we have :&lt;br /&gt;
&lt;br /&gt;
* Arista devices as Spine nodes&lt;br /&gt;
* Spine nodes carry directly DCI connections&lt;br /&gt;
* Local Spine share the same autonomous system&lt;br /&gt;
* Leaf devices are from different vendors : Juniper, Arista, Nokia and Cumulus&lt;br /&gt;
* attached host are single-homed and are simulated by Arista instances. Thus allowing to test N vlans at the same time&lt;br /&gt;
* EVPN uses VXLAN encapsulation, the control plane is BGP base. All nodes have dedicated private ASN (except for local SPINE)&lt;br /&gt;
* Underlay is managed by eBGP sessions, where only Loopback IPs are distributed. Those IPs are used as VTEP IPs by LEAF nodes&lt;br /&gt;
* Overlay is managed by eBGP multihop sessions between loopback IPs. Well think to only activate EVPN family for those sessions + define the upsate-source IP (loopback IP)&lt;br /&gt;
&lt;br /&gt;
== Configurations + diagrams ==&lt;br /&gt;
&lt;br /&gt;
[[File:Lab-mvendor-vxlan-l2-nok-ars-jun-cum.jpeg]]&lt;br /&gt;
[[https://wiki.nesevo.com/images/9/96/Mvendor-lab-4_vendors.zip Attach:Mvendor-lab-4_vendors.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:L2-L3-mvendor-vxlan-direct-dci.png]]&lt;br /&gt;
[[https://wiki.nesevo.com/images/3/38/Mvendor-lab_5-vendors.zip Attach:Mvendor-lab_5-vendors.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Observations ==&lt;br /&gt;
Juniper vQFX supports only vlan-aware-bundle service in VXLAN (one EVPN instance for N VLAN)&lt;br /&gt;
&lt;br /&gt;
On Arista you can choose either use VLAN-BASED or VLAN-AWARE-BUNDLE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    vlan 100&lt;br /&gt;
       rd 10.255.255.5:1&lt;br /&gt;
       route-target both 65000:100&lt;br /&gt;
       redistribute learned&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    vlan-aware-bundle LAB&lt;br /&gt;
       rd 10.255.255.5:1&lt;br /&gt;
       route-target both 65000:100&lt;br /&gt;
       redistribute learned&lt;br /&gt;
       vlan 100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Nokia I've only found the way to do vlan-based.&lt;br /&gt;
&lt;br /&gt;
It can be seen in type-routes (ether tag id part in yellow bellow) :&lt;br /&gt;
&lt;br /&gt;
Arista vlan-based :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.5&lt;br /&gt;
2:10.255.255.5:1::0::50:01:00:3e:d9:dc/304 MAC/IP&lt;br /&gt;
2:10.255.255.5:1::0::50:01:00:3e:d9:dc/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arista vlan-bundle (the ::0:: is replaced by ::100::):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.8&lt;br /&gt;
2:10.255.255.8:1::100::50:01:00:cd:ff:68/304 MAC/IP&lt;br /&gt;
2:10.255.255.8:1::100::50:01:00:cd:ff:68/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Juniper vlan-bundle :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.10&lt;br /&gt;
2:10.255.255.10:1::100::50:01:00:36:5f:a1/304 MAC/IP&lt;br /&gt;
2:10.255.255.10:1::100::50:01:00:36:5f:a1/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nokia vlan based :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.9&lt;br /&gt;
&lt;br /&gt;
2:10.255.255.9:100::0::50:01:00:06:09:e7/304 MAC/IP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the border effect is that on Arista devices, fdb install routes basing on ether tag id. Juniper doesn't do that (as Nokia)&lt;br /&gt;
&lt;br /&gt;
Juniper DC1 output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show ethernet-switching table&lt;br /&gt;
MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)&lt;br /&gt;
Ethernet switching table : 6 entries, 6 learned&lt;br /&gt;
Routing instance : default-switch&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    Vlan                MAC                 MAC      Logical                Active&lt;br /&gt;
    name                address             flags    interface              source&lt;br /&gt;
    VL_100              50:01:00:06:09:e7   D        vtep.32770             10.255.255.9                  NOKIA-DC2&lt;br /&gt;
    VL_100              50:01:00:36:5f:a1   D        vtep.32773             10.255.255.10                JUNIPER-DC2&lt;br /&gt;
    VL_100              50:01:00:3e:d9:dc   D        vtep.32769             10.255.255.5                  ARISTA-DC1&lt;br /&gt;
    VL_100              50:01:00:65:ae:e8   D        vtep.32772             10.255.255.6                  NOKIA-DC1&lt;br /&gt;
    VL_100              50:01:00:96:6b:29   D        xe-0/0/3.0          &lt;br /&gt;
    VL_100              50:01:00:cd:ff:68   D        vtep.32771             10.255.255.8                    ARISTA-DC2&lt;br /&gt;
&lt;br /&gt;
Nokia DC1 output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Forwarding Database, Service 100 ServId     MAC               Source-Identifier       Type     Last Change&lt;br /&gt;
             Transport:Tnl-Id                         Age      &lt;br /&gt;
&lt;br /&gt;
----100        50:01:00:06:09:e7 vxlan-1:                Evpn     10/15/20 08:50:03                           NOKIA-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.9:100&lt;br /&gt;
100        50:01:00:36:5f:a1 vxlan-1:                Evpn     10/15/20 08:50:03                               JUNIPER-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.10:100&lt;br /&gt;
100        50:01:00:3e:d9:dc vxlan-1:                Evpn     10/15/20 09:16:27                           ARISTA-DC1&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.5:100&lt;br /&gt;
100        50:01:00:65:ae:e8 sap:1/1/c2/1:100        L/150    10/13/20 16:51:07&lt;br /&gt;
&lt;br /&gt;
100        50:01:00:96:6b:29 vxlan-1:                Evpn     10/15/20 08:50:03                             JUNIPER-DC1&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.7:100&lt;br /&gt;
100        50:01:00:cd:ff:68 vxlan-1:                Evpn     10/15/20 08:51:55                               ARISTA-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.8:100&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arista DC2 output&lt;br /&gt;
&lt;br /&gt;
vlan-aware bundle :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#show mac address-table&lt;br /&gt;
           Mac Address Table&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
----Vlan    Mac Address       Type        Ports      Moves   Last Move&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
---------------       ----        -----      -----   ---------&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  100    5001.0036.5fa1    DYNAMIC     Vx1        1       0:37:45 ago     JUNIPER-DC2&lt;br /&gt;
 &lt;br /&gt;
  100    5001.003e.d9dc    DYNAMIC     Vx1        1       0:13:14 ago    ARISTA-DC1&lt;br /&gt;
 &lt;br /&gt;
  100    5001.0096.6b29    DYNAMIC     Vx1        1       0:37:45 ago     JUNIPER-DC1&lt;br /&gt;
 &lt;br /&gt;
  100    5001.00cd.ff68    DYNAMIC     Et2        1       1 day, 19:22:18 ago&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Only mac @ for Arista / Juniper are installed even the Nokia routes are well received&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#   show bgp evpn rd 10.255.255.6:100&lt;br /&gt;
&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
&lt;br /&gt;
Router identifier 10.255.255.8, local AS number 65021&lt;br /&gt;
&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                     S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
 &lt;br /&gt;
                     % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
           Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.6:100 mac-ip 5001.0065.aee8&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  *  ec   RD: 10.255.255.6:100 mac-ip 5001.0065.aee8&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.6:100 imet 10.255.255.6&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  *  ec   RD: 10.255.255.6:100 imet 10.255.255.6&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
compared to Juniper routes for example :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#   show bgp evpn rd 10.255.255.7:1&lt;br /&gt;
&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
&lt;br /&gt;
Router identifier 10.255.255.8, local AS number 65021&lt;br /&gt;
&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                     S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
 &lt;br /&gt;
                     % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
           Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.7:1 mac-ip 100 5001.0096.6b29&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.7          -       100     0       65002 65001 65013 i&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ether tag id makes the difference for me.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, since no type 2 routes is received, the packets from Arista to Nokia are processed as BUM (so sent to all VTEP from the VXLAN instance).&lt;br /&gt;
&lt;br /&gt;
Some tests wee done with L3 routing, details coming&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2994</id>
		<title>Mvendor-VXLAN-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2994"/>
		<updated>2021-10-29T13:35:59Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
These labs were realized end of 2020. So different behaviors could be observed today with last releases, in a good or a bad way. &lt;br /&gt;
&lt;br /&gt;
Archives posted are not production-ready and can carry unused/incomplete config parts&lt;br /&gt;
&lt;br /&gt;
Analyzes and conclusions are not an absolute truth. So if you have remarks/advices, please share :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Lab Target&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The target of the lab is to build a multivendor lab, with an architecture reflecting those deployed in customers' environment.&lt;br /&gt;
&lt;br /&gt;
This lab will be constructed in several steps, starting in a virtual version, followed by a physical one.&lt;br /&gt;
&lt;br /&gt;
For the moment, we are working on typical &amp;quot;modern&amp;quot; datacenters implementations :&lt;br /&gt;
&lt;br /&gt;
* EVPN/VXLAN layer 2 only&lt;br /&gt;
* EVPN/VXLAN layer 2 + layer 3 per rack (ou layer 3 anycast gw)&lt;br /&gt;
* EVPN within MPLS en L2/L3&lt;br /&gt;
* &amp;quot;standard&amp;quot; IP Fabric&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Host specifications&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Server : - Intel Xeon E5-1660v3 - 64GB DDR4 ECC 2133MHz - 2x HDD SATA 4TB Datacenter Class Soft RA&lt;br /&gt;
System : VMware ESXi 6.7 U3&lt;br /&gt;
&lt;br /&gt;
Software versions :&lt;br /&gt;
&lt;br /&gt;
All network devices instances run within EVE-NG software , here EVE-NG 2.0.3-110 The software has been installed with an OVF available on the website https://www.eve-ng.net/&lt;br /&gt;
&lt;br /&gt;
Regarding the vendors images, they have been downloaded on the vendors portals (or provided by them directly). &lt;br /&gt;
&lt;br /&gt;
* Arista : veos-4.24.1F&lt;br /&gt;
* Juniper MX : 20.1R1.11-limited-VCP&lt;br /&gt;
* Juniper QFX : 18.4R1.8&lt;br /&gt;
* Juniper SRX : next-gen 20.1R1.11&lt;br /&gt;
* Nokia  : 7750 VSR-I timos-20.7R1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;Password used :&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Nokia : admin:nokia2020&lt;br /&gt;
* Arista : admin: &amp;lt;-- no password&lt;br /&gt;
* Juniper : root:Juniper&lt;br /&gt;
* Cumulus : cumulus:CumulusLinux!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= GOAL =&lt;br /&gt;
The target of this lab is to put in place a setup providing a &amp;quot;cross-dc&amp;quot; switch, multi-vendor, based on EVPN/VXLAN technology.&lt;br /&gt;
&lt;br /&gt;
In this lab, we have :&lt;br /&gt;
&lt;br /&gt;
* Arista devices as Spine nodes&lt;br /&gt;
* Spine nodes carry directly DCI connections&lt;br /&gt;
* Local Spine share the same autonomous system&lt;br /&gt;
* Leaf devices are from different vendors : Juniper, Arista, Nokia and Cumulus&lt;br /&gt;
* attached host are single-homed and are simulated by Arista instances. Thus allowing to test N vlans at the same time&lt;br /&gt;
* EVPN uses VXLAN encapsulation, the control plane is BGP base. All nodes have dedicated private ASN (except for local SPINE)&lt;br /&gt;
* Underlay is managed by eBGP sessions, where only Loopback IPs are distributed. Those IPs are used as VTEP IPs by LEAF nodes&lt;br /&gt;
* Overlay is managed by eBGP multihop sessions between loopback IPs. Well think to only activate EVPN family for those sessions + define the upsate-source IP (loopback IP)&lt;br /&gt;
&lt;br /&gt;
= Configurations + diagrams =&lt;br /&gt;
&lt;br /&gt;
[[File:Lab-mvendor-vxlan-l2-nok-ars-jun-cum.jpeg]]&lt;br /&gt;
[[https://wiki.nesevo.com/images/9/96/Mvendor-lab-4_vendors.zip Attach:Mvendor-lab-4_vendors.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:L2-L3-mvendor-vxlan-direct-dci.png]]&lt;br /&gt;
[[https://wiki.nesevo.com/images/3/38/Mvendor-lab_5-vendors.zip Attach:Mvendor-lab_5-vendors.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Note ==&lt;br /&gt;
Juniper vQFX supports only vlan-aware-bundle service in VXLAN (one EVPN instance for N VLAN)&lt;br /&gt;
&lt;br /&gt;
On Arista you can choose either use VLAN-BASED or VLAN-AWARE-BUNDLE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    vlan 100&lt;br /&gt;
       rd 10.255.255.5:1&lt;br /&gt;
       route-target both 65000:100&lt;br /&gt;
       redistribute learned&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    vlan-aware-bundle LAB&lt;br /&gt;
       rd 10.255.255.5:1&lt;br /&gt;
       route-target both 65000:100&lt;br /&gt;
       redistribute learned&lt;br /&gt;
       vlan 100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Nokia I've only found the way to do vlan-based.&lt;br /&gt;
&lt;br /&gt;
It can be seen in type-routes (ether tag id part in yellow bellow) :&lt;br /&gt;
&lt;br /&gt;
Arista vlan-based :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.5&lt;br /&gt;
2:10.255.255.5:1::0::50:01:00:3e:d9:dc/304 MAC/IP&lt;br /&gt;
2:10.255.255.5:1::0::50:01:00:3e:d9:dc/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arista vlan-bundle (the ::0:: is replaced by ::100::):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.8&lt;br /&gt;
2:10.255.255.8:1::100::50:01:00:cd:ff:68/304 MAC/IP&lt;br /&gt;
2:10.255.255.8:1::100::50:01:00:cd:ff:68/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Juniper vlan-bundle :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.10&lt;br /&gt;
2:10.255.255.10:1::100::50:01:00:36:5f:a1/304 MAC/IP&lt;br /&gt;
2:10.255.255.10:1::100::50:01:00:36:5f:a1/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nokia vlan based :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.9&lt;br /&gt;
&lt;br /&gt;
2:10.255.255.9:100::0::50:01:00:06:09:e7/304 MAC/IP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the border effect is that on Arista devices, fdb install routes basing on ether tag id. Juniper doesn't do that (as Nokia)&lt;br /&gt;
&lt;br /&gt;
Juniper DC1 output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show ethernet-switching table&lt;br /&gt;
MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)&lt;br /&gt;
Ethernet switching table : 6 entries, 6 learned&lt;br /&gt;
Routing instance : default-switch&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    Vlan                MAC                 MAC      Logical                Active&lt;br /&gt;
    name                address             flags    interface              source&lt;br /&gt;
    VL_100              50:01:00:06:09:e7   D        vtep.32770             10.255.255.9                  NOKIA-DC2&lt;br /&gt;
    VL_100              50:01:00:36:5f:a1   D        vtep.32773             10.255.255.10                JUNIPER-DC2&lt;br /&gt;
    VL_100              50:01:00:3e:d9:dc   D        vtep.32769             10.255.255.5                  ARISTA-DC1&lt;br /&gt;
    VL_100              50:01:00:65:ae:e8   D        vtep.32772             10.255.255.6                  NOKIA-DC1&lt;br /&gt;
    VL_100              50:01:00:96:6b:29   D        xe-0/0/3.0          &lt;br /&gt;
    VL_100              50:01:00:cd:ff:68   D        vtep.32771             10.255.255.8                    ARISTA-DC2&lt;br /&gt;
&lt;br /&gt;
Nokia DC1 output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Forwarding Database, Service 100 ServId     MAC               Source-Identifier       Type     Last Change&lt;br /&gt;
             Transport:Tnl-Id                         Age      &lt;br /&gt;
&lt;br /&gt;
----100        50:01:00:06:09:e7 vxlan-1:                Evpn     10/15/20 08:50:03                           NOKIA-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.9:100&lt;br /&gt;
100        50:01:00:36:5f:a1 vxlan-1:                Evpn     10/15/20 08:50:03                               JUNIPER-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.10:100&lt;br /&gt;
100        50:01:00:3e:d9:dc vxlan-1:                Evpn     10/15/20 09:16:27                           ARISTA-DC1&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.5:100&lt;br /&gt;
100        50:01:00:65:ae:e8 sap:1/1/c2/1:100        L/150    10/13/20 16:51:07&lt;br /&gt;
&lt;br /&gt;
100        50:01:00:96:6b:29 vxlan-1:                Evpn     10/15/20 08:50:03                             JUNIPER-DC1&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.7:100&lt;br /&gt;
100        50:01:00:cd:ff:68 vxlan-1:                Evpn     10/15/20 08:51:55                               ARISTA-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.8:100&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arista DC2 output&lt;br /&gt;
&lt;br /&gt;
vlan-aware bundle :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#show mac address-table&lt;br /&gt;
           Mac Address Table&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
----Vlan    Mac Address       Type        Ports      Moves   Last Move&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
---------------       ----        -----      -----   ---------&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  100    5001.0036.5fa1    DYNAMIC     Vx1        1       0:37:45 ago     JUNIPER-DC2&lt;br /&gt;
 &lt;br /&gt;
  100    5001.003e.d9dc    DYNAMIC     Vx1        1       0:13:14 ago    ARISTA-DC1&lt;br /&gt;
 &lt;br /&gt;
  100    5001.0096.6b29    DYNAMIC     Vx1        1       0:37:45 ago     JUNIPER-DC1&lt;br /&gt;
 &lt;br /&gt;
  100    5001.00cd.ff68    DYNAMIC     Et2        1       1 day, 19:22:18 ago&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Only mac @ for Arista / Juniper are installed even the Nokia routes are well received&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#   show bgp evpn rd 10.255.255.6:100&lt;br /&gt;
&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
&lt;br /&gt;
Router identifier 10.255.255.8, local AS number 65021&lt;br /&gt;
&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                     S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
 &lt;br /&gt;
                     % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
           Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.6:100 mac-ip 5001.0065.aee8&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  *  ec   RD: 10.255.255.6:100 mac-ip 5001.0065.aee8&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.6:100 imet 10.255.255.6&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  *  ec   RD: 10.255.255.6:100 imet 10.255.255.6&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
compared to Juniper routes for example :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#   show bgp evpn rd 10.255.255.7:1&lt;br /&gt;
&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
&lt;br /&gt;
Router identifier 10.255.255.8, local AS number 65021&lt;br /&gt;
&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                     S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
 &lt;br /&gt;
                     % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
           Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.7:1 mac-ip 100 5001.0096.6b29&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.7          -       100     0       65002 65001 65013 i&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ether tag id makes the difference for me.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, since no type 2 routes is received, the packets from Arista to Nokia are processed as BUM (so sent to all VTEP from the VXLAN instance).&lt;br /&gt;
&lt;br /&gt;
Below the sources of different versions of the lab :&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=File:L2-L3-mvendor-vxlan-direct-dci.png&amp;diff=2993</id>
		<title>File:L2-L3-mvendor-vxlan-direct-dci.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=File:L2-L3-mvendor-vxlan-direct-dci.png&amp;diff=2993"/>
		<updated>2021-10-29T13:29:33Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=File:Lab-mvendor-vxlan-l2-nok-ars-jun-cum.jpeg&amp;diff=2992</id>
		<title>File:Lab-mvendor-vxlan-l2-nok-ars-jun-cum.jpeg</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=File:Lab-mvendor-vxlan-l2-nok-ars-jun-cum.jpeg&amp;diff=2992"/>
		<updated>2021-10-29T13:28:54Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=File:Mvendor-lab_5-vendors.zip&amp;diff=2991</id>
		<title>File:Mvendor-lab 5-vendors.zip</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=File:Mvendor-lab_5-vendors.zip&amp;diff=2991"/>
		<updated>2021-10-29T13:28:31Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=File:Mvendor-lab-4_vendors.zip&amp;diff=2990</id>
		<title>File:Mvendor-lab-4 vendors.zip</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=File:Mvendor-lab-4_vendors.zip&amp;diff=2990"/>
		<updated>2021-10-29T13:27:59Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2989</id>
		<title>Mvendor-VXLAN-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2989"/>
		<updated>2021-10-29T13:26:26Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
These labs were realized end of 2020. So different behaviors could be observed today with last releases, in a good or a bad way. &lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Lab Target&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The target of the lab is to build a multivendor lab, with an architecture reflecting those deployed in customers' environment.&lt;br /&gt;
&lt;br /&gt;
This lab will be constructed in several steps, starting in a virtual version, followed by a physical one.&lt;br /&gt;
&lt;br /&gt;
For the moment, we are working on typical &amp;quot;modern&amp;quot; datacenters implementations :&lt;br /&gt;
&lt;br /&gt;
* EVPN/VXLAN layer 2 only&lt;br /&gt;
* EVPN/VXLAN layer 2 + layer 3 per rack (ou layer 3 anycast gw)&lt;br /&gt;
* EVPN within MPLS en L2/L3&lt;br /&gt;
* &amp;quot;standard&amp;quot; IP Fabric&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Host specifications&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Server : - Intel Xeon E5-1660v3 - 64GB DDR4 ECC 2133MHz - 2x HDD SATA 4TB Datacenter Class Soft RA&lt;br /&gt;
System : VMware ESXi 6.7 U3&lt;br /&gt;
&lt;br /&gt;
Software versions :&lt;br /&gt;
&lt;br /&gt;
All network devices instances run within EVE-NG software , here EVE-NG 2.0.3-110 The software has been installed with an OVF available on the website https://www.eve-ng.net/&lt;br /&gt;
&lt;br /&gt;
Regarding the vendors images, they have been downloaded on the vendors portals (or provided by them directly). &lt;br /&gt;
&lt;br /&gt;
* Arista : veos-4.24.1F&lt;br /&gt;
* Juniper MX : 20.1R1.11-limited-VCP&lt;br /&gt;
* Juniper QFX : 18.4R1.8&lt;br /&gt;
* Juniper SRX : next-gen 20.1R1.11&lt;br /&gt;
* Nokia  : 7750 VSR-I timos-20.7R1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;Password used :&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Nokia : admin:nokia2020&lt;br /&gt;
* Arista : admin: &amp;lt;-- no password&lt;br /&gt;
* Juniper : root:Juniper&lt;br /&gt;
* Cumulus : cumulus:CumulusLinux!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= GOAL =&lt;br /&gt;
The target of this lab is to put in place a setup providing a &amp;quot;cross-dc&amp;quot; switch, multi-vendor, based on EVPN/VXLAN technology.&lt;br /&gt;
&lt;br /&gt;
In this lab, we have :&lt;br /&gt;
&lt;br /&gt;
* Arista devices as Spine nodes&lt;br /&gt;
* Spine nodes carry directly DCI connections&lt;br /&gt;
* Local Spine share the same autonomous system&lt;br /&gt;
* Leaf devices are from different vendors : Juniper, Arista, Nokia and Cumulus&lt;br /&gt;
* attached host are single-homed and are simulated by Arista instances. Thus allowing to test N vlans at the same time&lt;br /&gt;
* EVPN uses VXLAN encapsulation, the control plane is BGP base. All nodes have dedicated private ASN (except for local SPINE)&lt;br /&gt;
* Underlay is managed by eBGP sessions, where only Loopback IPs are distributed. Those IPs are used as VTEP IPs by LEAF nodes&lt;br /&gt;
* Overlay is managed by eBGP multihop sessions between loopback IPs. Well think to only activate EVPN family for those sessions + define the upsate-source IP (loopback IP)&lt;br /&gt;
&lt;br /&gt;
= Configurations + diagrams =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Note ==&lt;br /&gt;
Juniper vQFX supports only vlan-aware-bundle service in VXLAN (one EVPN instance for N VLAN)&lt;br /&gt;
&lt;br /&gt;
On Arista you can choose either use VLAN-BASED or VLAN-AWARE-BUNDLE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    vlan 100&lt;br /&gt;
       rd 10.255.255.5:1&lt;br /&gt;
       route-target both 65000:100&lt;br /&gt;
       redistribute learned&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    vlan-aware-bundle LAB&lt;br /&gt;
       rd 10.255.255.5:1&lt;br /&gt;
       route-target both 65000:100&lt;br /&gt;
       redistribute learned&lt;br /&gt;
       vlan 100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Nokia I've only found the way to do vlan-based.&lt;br /&gt;
&lt;br /&gt;
It can be seen in type-routes (ether tag id part in yellow bellow) :&lt;br /&gt;
&lt;br /&gt;
Arista vlan-based :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.5&lt;br /&gt;
2:10.255.255.5:1::0::50:01:00:3e:d9:dc/304 MAC/IP&lt;br /&gt;
2:10.255.255.5:1::0::50:01:00:3e:d9:dc/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arista vlan-bundle (the ::0:: is replaced by ::100::):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.8&lt;br /&gt;
2:10.255.255.8:1::100::50:01:00:cd:ff:68/304 MAC/IP&lt;br /&gt;
2:10.255.255.8:1::100::50:01:00:cd:ff:68/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Juniper vlan-bundle :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.10&lt;br /&gt;
2:10.255.255.10:1::100::50:01:00:36:5f:a1/304 MAC/IP&lt;br /&gt;
2:10.255.255.10:1::100::50:01:00:36:5f:a1/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nokia vlan based :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.9&lt;br /&gt;
&lt;br /&gt;
2:10.255.255.9:100::0::50:01:00:06:09:e7/304 MAC/IP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the border effect is that on Arista devices, fdb install routes basing on ether tag id. Juniper doesn't do that (as Nokia)&lt;br /&gt;
&lt;br /&gt;
Juniper DC1 output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show ethernet-switching table&lt;br /&gt;
MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)&lt;br /&gt;
Ethernet switching table : 6 entries, 6 learned&lt;br /&gt;
Routing instance : default-switch&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    Vlan                MAC                 MAC      Logical                Active&lt;br /&gt;
    name                address             flags    interface              source&lt;br /&gt;
    VL_100              50:01:00:06:09:e7   D        vtep.32770             10.255.255.9                  NOKIA-DC2&lt;br /&gt;
    VL_100              50:01:00:36:5f:a1   D        vtep.32773             10.255.255.10                JUNIPER-DC2&lt;br /&gt;
    VL_100              50:01:00:3e:d9:dc   D        vtep.32769             10.255.255.5                  ARISTA-DC1&lt;br /&gt;
    VL_100              50:01:00:65:ae:e8   D        vtep.32772             10.255.255.6                  NOKIA-DC1&lt;br /&gt;
    VL_100              50:01:00:96:6b:29   D        xe-0/0/3.0          &lt;br /&gt;
    VL_100              50:01:00:cd:ff:68   D        vtep.32771             10.255.255.8                    ARISTA-DC2&lt;br /&gt;
&lt;br /&gt;
Nokia DC1 output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Forwarding Database, Service 100 ServId     MAC               Source-Identifier       Type     Last Change&lt;br /&gt;
             Transport:Tnl-Id                         Age      &lt;br /&gt;
&lt;br /&gt;
----100        50:01:00:06:09:e7 vxlan-1:                Evpn     10/15/20 08:50:03                           NOKIA-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.9:100&lt;br /&gt;
100        50:01:00:36:5f:a1 vxlan-1:                Evpn     10/15/20 08:50:03                               JUNIPER-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.10:100&lt;br /&gt;
100        50:01:00:3e:d9:dc vxlan-1:                Evpn     10/15/20 09:16:27                           ARISTA-DC1&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.5:100&lt;br /&gt;
100        50:01:00:65:ae:e8 sap:1/1/c2/1:100        L/150    10/13/20 16:51:07&lt;br /&gt;
&lt;br /&gt;
100        50:01:00:96:6b:29 vxlan-1:                Evpn     10/15/20 08:50:03                             JUNIPER-DC1&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.7:100&lt;br /&gt;
100        50:01:00:cd:ff:68 vxlan-1:                Evpn     10/15/20 08:51:55                               ARISTA-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.8:100&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arista DC2 output&lt;br /&gt;
&lt;br /&gt;
vlan-aware bundle :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#show mac address-table&lt;br /&gt;
           Mac Address Table&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
----Vlan    Mac Address       Type        Ports      Moves   Last Move&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
---------------       ----        -----      -----   ---------&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  100    5001.0036.5fa1    DYNAMIC     Vx1        1       0:37:45 ago     JUNIPER-DC2&lt;br /&gt;
 &lt;br /&gt;
  100    5001.003e.d9dc    DYNAMIC     Vx1        1       0:13:14 ago    ARISTA-DC1&lt;br /&gt;
 &lt;br /&gt;
  100    5001.0096.6b29    DYNAMIC     Vx1        1       0:37:45 ago     JUNIPER-DC1&lt;br /&gt;
 &lt;br /&gt;
  100    5001.00cd.ff68    DYNAMIC     Et2        1       1 day, 19:22:18 ago&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Only mac @ for Arista / Juniper are installed even the Nokia routes are well received&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#   show bgp evpn rd 10.255.255.6:100&lt;br /&gt;
&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
&lt;br /&gt;
Router identifier 10.255.255.8, local AS number 65021&lt;br /&gt;
&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                     S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
 &lt;br /&gt;
                     % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
           Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.6:100 mac-ip 5001.0065.aee8&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  *  ec   RD: 10.255.255.6:100 mac-ip 5001.0065.aee8&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.6:100 imet 10.255.255.6&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  *  ec   RD: 10.255.255.6:100 imet 10.255.255.6&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
compared to Juniper routes for example :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#   show bgp evpn rd 10.255.255.7:1&lt;br /&gt;
&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
&lt;br /&gt;
Router identifier 10.255.255.8, local AS number 65021&lt;br /&gt;
&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                     S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
 &lt;br /&gt;
                     % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
           Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.7:1 mac-ip 100 5001.0096.6b29&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.7          -       100     0       65002 65001 65013 i&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ether tag id makes the difference for me.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, since no type 2 routes is received, the packets from Arista to Nokia are processed as BUM (so sent to all VTEP from the VXLAN instance).&lt;br /&gt;
&lt;br /&gt;
Below the sources of different versions of the lab :&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2988</id>
		<title>Mvendor-VXLAN-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2988"/>
		<updated>2021-10-29T13:21:49Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This lab was realized early 2021. So different behaviors could be observed today with last releases, in a good or a bad way. &lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Lab Target&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The target of the lab is to build a multivendor lab, with an architecture reflecting those deployed in customers' environment.&lt;br /&gt;
&lt;br /&gt;
This lab will be constructed in several steps, starting in a virtual version, followed by a physical one.&lt;br /&gt;
&lt;br /&gt;
For the moment, we are working on typical &amp;quot;modern&amp;quot; datacenters implementations :&lt;br /&gt;
&lt;br /&gt;
* EVPN/VXLAN layer 2 only&lt;br /&gt;
* EVPN/VXLAN layer 2 + layer 3 per rack (ou layer 3 anycast gw)&lt;br /&gt;
* EVPN within MPLS en L2/L3&lt;br /&gt;
* &amp;quot;standard&amp;quot; IP Fabric&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Host specifications&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Server : - Intel Xeon E5-1660v3 - 64GB DDR4 ECC 2133MHz - 2x HDD SATA 4TB Datacenter Class Soft RA&lt;br /&gt;
System : VMware ESXi 6.7 U3&lt;br /&gt;
&lt;br /&gt;
Software versions :&amp;lt;&lt;br /&gt;
&lt;br /&gt;
All network devices instances run within EVE-NG software , here EVE-NG 2.0.3-110 The software has been installed with an OVF available on the website https://www.eve-ng.net/&lt;br /&gt;
&lt;br /&gt;
Regarding the vendors images, they have been downloaded on the vendors portals (or provided by them directly). &lt;br /&gt;
&lt;br /&gt;
* Arista : veos-4.24.1F&lt;br /&gt;
* Juniper MX : 20.1R1.11-limited-VCP&lt;br /&gt;
* Juniper QFX : 18.4R1.8&lt;br /&gt;
* Juniper SRX : next-gen 20.1R1.11&lt;br /&gt;
* Nokia  : 7750 VSR-I timos-20.7R1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;Password used :&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Nokia : admin:nokia2020&lt;br /&gt;
* Arista : admin: &amp;lt;-- no password&lt;br /&gt;
* Juniper : root:Juniper&lt;br /&gt;
* Cumulus : cumulus:CumulusLinux!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= GOAL =&lt;br /&gt;
The target of this lab is to put in place a setup providing a &amp;quot;cross-dc&amp;quot; switch, multi-vendor, based on EVPN/VXLAN technology.&lt;br /&gt;
&lt;br /&gt;
In this lab, we have :&lt;br /&gt;
&lt;br /&gt;
* Arista devices as Spine nodes&lt;br /&gt;
* Spine nodes carry directly DCI connections&lt;br /&gt;
* Local Spine share the same autonomous system&lt;br /&gt;
* Leaf devices are from different vendors : Juniper, Arista, Nokia and Cumulus&lt;br /&gt;
* attached host are single-homed and are simulated by Arista instances. Thus allowing to test N vlans at the same time&lt;br /&gt;
* EVPN uses VXLAN encapsulation, the control plane is BGP base. All nodes have dedicated private ASN (except for local SPINE)&lt;br /&gt;
* Underlay is managed by eBGP sessions, where only Loopback IPs are distributed. Those IPs are used as VTEP IPs by LEAF nodes&lt;br /&gt;
* Overlay is managed by eBGP multihop sessions between loopback IPs. Well think to only activate EVPN family for those sessions + define the upsate-source IP (loopback IP)&lt;br /&gt;
&lt;br /&gt;
= LAB DIAGRAM =&lt;br /&gt;
[[Datei:Lab-mvendor-vxlan-l2-nok-ars-jun-cum.jpeg|klasse=ve-pasteProtect]]&lt;br /&gt;
&lt;br /&gt;
= Configurations =&lt;br /&gt;
[[:Datei:Config-lab-mvendor-vxlan-l2-nok-ars-jun-cum.zip|Datei:config-lab-mvendor-vxlan-l2-nok-ars-jun-cum.zip]]&lt;br /&gt;
&lt;br /&gt;
== Note ==&lt;br /&gt;
Juniper vQFX supports only vlan-aware-bundle service in VXLAN (one EVPN instance for N VLAN)&lt;br /&gt;
&lt;br /&gt;
On Arista you can choose either use VLAN-BASED or VLAN-AWARE-BUNDLE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    vlan 100&lt;br /&gt;
       rd 10.255.255.5:1&lt;br /&gt;
       route-target both 65000:100&lt;br /&gt;
       redistribute learned&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    vlan-aware-bundle LAB&lt;br /&gt;
       rd 10.255.255.5:1&lt;br /&gt;
       route-target both 65000:100&lt;br /&gt;
       redistribute learned&lt;br /&gt;
       vlan 100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Nokia I've only found the way to do vlan-based.&lt;br /&gt;
&lt;br /&gt;
It can be seen in type-routes (ether tag id part in yellow bellow) :&lt;br /&gt;
&lt;br /&gt;
Arista vlan-based :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.5&lt;br /&gt;
2:10.255.255.5:1::0::50:01:00:3e:d9:dc/304 MAC/IP&lt;br /&gt;
2:10.255.255.5:1::0::50:01:00:3e:d9:dc/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arista vlan-bundle (the ::0:: is replaced by ::100::):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.8&lt;br /&gt;
2:10.255.255.8:1::100::50:01:00:cd:ff:68/304 MAC/IP&lt;br /&gt;
2:10.255.255.8:1::100::50:01:00:cd:ff:68/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Juniper vlan-bundle :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.10&lt;br /&gt;
2:10.255.255.10:1::100::50:01:00:36:5f:a1/304 MAC/IP&lt;br /&gt;
2:10.255.255.10:1::100::50:01:00:36:5f:a1/304 MAC/IP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nokia vlan based :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show route | match 2:10.255.255.9&lt;br /&gt;
&lt;br /&gt;
2:10.255.255.9:100::0::50:01:00:06:09:e7/304 MAC/IP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the border effect is that on Arista devices, fdb install routes basing on ether tag id. Juniper doesn't do that (as Nokia)&lt;br /&gt;
&lt;br /&gt;
Juniper DC1 output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{master:0}&lt;br /&gt;
root@QFX_DC1&amp;gt; show ethernet-switching table&lt;br /&gt;
MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)&lt;br /&gt;
Ethernet switching table : 6 entries, 6 learned&lt;br /&gt;
Routing instance : default-switch&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    Vlan                MAC                 MAC      Logical                Active&lt;br /&gt;
    name                address             flags    interface              source&lt;br /&gt;
    VL_100              50:01:00:06:09:e7   D        vtep.32770             10.255.255.9                  NOKIA-DC2&lt;br /&gt;
    VL_100              50:01:00:36:5f:a1   D        vtep.32773             10.255.255.10                JUNIPER-DC2&lt;br /&gt;
    VL_100              50:01:00:3e:d9:dc   D        vtep.32769             10.255.255.5                  ARISTA-DC1&lt;br /&gt;
    VL_100              50:01:00:65:ae:e8   D        vtep.32772             10.255.255.6                  NOKIA-DC1&lt;br /&gt;
    VL_100              50:01:00:96:6b:29   D        xe-0/0/3.0          &lt;br /&gt;
    VL_100              50:01:00:cd:ff:68   D        vtep.32771             10.255.255.8                    ARISTA-DC2&lt;br /&gt;
&lt;br /&gt;
Nokia DC1 output&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Forwarding Database, Service 100 ServId     MAC               Source-Identifier       Type     Last Change&lt;br /&gt;
             Transport:Tnl-Id                         Age      &lt;br /&gt;
&lt;br /&gt;
----100        50:01:00:06:09:e7 vxlan-1:                Evpn     10/15/20 08:50:03                           NOKIA-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.9:100&lt;br /&gt;
100        50:01:00:36:5f:a1 vxlan-1:                Evpn     10/15/20 08:50:03                               JUNIPER-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.10:100&lt;br /&gt;
100        50:01:00:3e:d9:dc vxlan-1:                Evpn     10/15/20 09:16:27                           ARISTA-DC1&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.5:100&lt;br /&gt;
100        50:01:00:65:ae:e8 sap:1/1/c2/1:100        L/150    10/13/20 16:51:07&lt;br /&gt;
&lt;br /&gt;
100        50:01:00:96:6b:29 vxlan-1:                Evpn     10/15/20 08:50:03                             JUNIPER-DC1&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.7:100&lt;br /&gt;
100        50:01:00:cd:ff:68 vxlan-1:                Evpn     10/15/20 08:51:55                               ARISTA-DC2&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                              10.255.255.8:100&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arista DC2 output&lt;br /&gt;
&lt;br /&gt;
vlan-aware bundle :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#show mac address-table&lt;br /&gt;
           Mac Address Table&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
----Vlan    Mac Address       Type        Ports      Moves   Last Move&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
---------------       ----        -----      -----   ---------&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  100    5001.0036.5fa1    DYNAMIC     Vx1        1       0:37:45 ago     JUNIPER-DC2&lt;br /&gt;
 &lt;br /&gt;
  100    5001.003e.d9dc    DYNAMIC     Vx1        1       0:13:14 ago    ARISTA-DC1&lt;br /&gt;
 &lt;br /&gt;
  100    5001.0096.6b29    DYNAMIC     Vx1        1       0:37:45 ago     JUNIPER-DC1&lt;br /&gt;
 &lt;br /&gt;
  100    5001.00cd.ff68    DYNAMIC     Et2        1       1 day, 19:22:18 ago&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Only mac @ for Arista / Juniper are installed even the Nokia routes are well received&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#   show bgp evpn rd 10.255.255.6:100&lt;br /&gt;
&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
&lt;br /&gt;
Router identifier 10.255.255.8, local AS number 65021&lt;br /&gt;
&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                     S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
 &lt;br /&gt;
                     % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
           Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.6:100 mac-ip 5001.0065.aee8&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  *  ec   RD: 10.255.255.6:100 mac-ip 5001.0065.aee8&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.6:100 imet 10.255.255.6&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
 &lt;br /&gt;
  *  ec   RD: 10.255.255.6:100 imet 10.255.255.6&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.6          -       100     0       65002 65001 65012 i&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
compared to Juniper routes for example :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LEAF-ARS-DC2#   show bgp evpn rd 10.255.255.7:1&lt;br /&gt;
&lt;br /&gt;
BGP routing table information for VRF default&lt;br /&gt;
&lt;br /&gt;
Router identifier 10.255.255.8, local AS number 65021&lt;br /&gt;
&lt;br /&gt;
Route status codes: s - suppressed, * - valid, &amp;gt; - active, E - ECMP head, e - ECMP&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                     S - Stale, c - Contributing to ECMP, b - backup&lt;br /&gt;
 &lt;br /&gt;
                     % - Pending BGP convergence&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
&lt;br /&gt;
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
           Network                Next Hop              Metric  AIGP       LocPref Weight  Path&lt;br /&gt;
 &lt;br /&gt;
  * &amp;gt;Ec   RD: 10.255.255.7:1 mac-ip 100 5001.0096.6b29&lt;br /&gt;
 &lt;br /&gt;
                                 10.255.255.7          -       100     0       65002 65001 65013 i&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ether tag id makes the difference for me.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, since no type 2 routes is received, the packets from Arista to Nokia are processed as BUM (so sent to all VTEP from the VXLAN instance).&lt;br /&gt;
&lt;br /&gt;
Below the sources of different versions of the lab :&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2987</id>
		<title>Mvendor-VXLAN-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Mvendor-VXLAN-lab&amp;diff=2987"/>
		<updated>2021-10-29T13:07:44Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: Created page with &amp;quot;&amp;lt;div&amp;gt; = Useful Infos =  == &amp;lt;span&amp;gt;Lab Target&amp;lt;/span&amp;gt; == The target of the lab is to build a multivendor lab, with an architecture reflecting those deployed in customers' environ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div&amp;gt;&lt;br /&gt;
= Useful Infos =&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Lab Target&amp;lt;/span&amp;gt; ==&lt;br /&gt;
The target of the lab is to build a multivendor lab, with an architecture reflecting those deployed in customers' environment?.&lt;br /&gt;
&lt;br /&gt;
This lab will be constructed in several steps, starting in a virtual version, followed by a physical one.&lt;br /&gt;
&lt;br /&gt;
For the moment, we are working on typical &amp;quot;modern&amp;quot; datacenters implementations :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* EVPN/VXLAN layer 2 only&lt;br /&gt;
* EVPN/VXLAN layer 2 + layer 3 per rack (ou layer 3 anycast gw)&lt;br /&gt;
* EVPN en MPLS en L2/L3&lt;br /&gt;
* &amp;quot;standard&amp;quot; IP Fabric&lt;br /&gt;
&lt;br /&gt;
but there are also labs for SP customers running LDP/OSPF or SR/ISIS for EVPN/L3VPN services.&lt;br /&gt;
&lt;br /&gt;
One goal is to spot/identify the (in)compatibilities between the different vendors, and build the different configurations to be able to provide &amp;quot;ready-to-deploy&amp;quot; setup. In add, working permits to securize the project of vendors migration / NOS migration (ex : EOS to Sonic for Arista).&lt;br /&gt;
&lt;br /&gt;
Once the different setup consolidated, we can begin an automation work, within tools like ansible/saltstack/other, in parallel with the implementation of propietary vendor tools (like Arista Cloudvision).&lt;br /&gt;
&lt;br /&gt;
The idea behing of all of that is to gain a good knwoledge of the products, wihtou necessarily being expert, but ideally with front-desk-setup, reflecting &amp;quot;the real life&amp;quot;. In add, for me a work has to be led to implement a ZTP/ material validation setup, in order to improve/securize at most the deployment/assets management.&lt;br /&gt;
&lt;br /&gt;
Now, the more vendors we have the best it is. We have to sollicitate the different vendors and communicate about the different setup in a &amp;quot;high level manner&amp;quot;, without taking publicly position. The idea is to stay neutral whatever happens.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span&amp;gt;Host specifications&amp;lt;/span&amp;gt; ==&lt;br /&gt;
For the moment, I'm working on an OVH dedicated server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;Commercial reference :&amp;lt;/span&amp;gt; RISE-LE-1 - Intel Xeon E5-1660v3 - 64GB DDR4 ECC 2133MHz - 2x HDD SATA 4TB Datacenter Class Soft RA&lt;br /&gt;
&lt;br /&gt;
Système (OS) VMware ESXi 6.7 U3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;Software versions :&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All network devices instances run within EVE-NG software , here EVE-NG 2.0.3-110 The software has been installed with an OVF available on the website https://www.eve-ng.net/&lt;br /&gt;
&lt;br /&gt;
Regarding the vendors images, they have been downloaded on the vendors portals (or provided by them directly). For Juniper you need a &amp;quot;special&amp;quot; account to be allowed to download the images, on Arista it's free even you are a simple user. For Nokia I don't know, but I suppose it's just in deal contexts since the licences are mandatory and need to be generated by Nokia guys.&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Arista : veos-4.24.1F&lt;br /&gt;
* Juniper MX : 20.1R1.11-limited-VCP&lt;br /&gt;
* Juniper QFX : 18.4R1.8&lt;br /&gt;
* Juniper SRX : next-gen 20.1R1.11&lt;br /&gt;
* Nokia  : 7750 VSR-I timos-20.7R1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;Password used :&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Nokia : admin:nokia2020&lt;br /&gt;
* Arista : admin: &amp;lt;-- no password&lt;br /&gt;
* Juniper : root:Juniper&lt;br /&gt;
* Cumulus : cumulus:CumulusLinux!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2986</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2986"/>
		<updated>2021-10-29T13:07:25Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
Welcome to our Labs Wiki page. &lt;br /&gt;
&lt;br /&gt;
Here you'll find our shares about what we've experimented in lab.&lt;br /&gt;
&lt;br /&gt;
Don't hesitate to share your feedbacks, thanks.&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus ContainerLab =&lt;br /&gt;
&lt;br /&gt;
[[Cumulus-Nokia-Lab]]&lt;br /&gt;
&lt;br /&gt;
= SONiC with Docker =&lt;br /&gt;
&lt;br /&gt;
[[Sonic-lab]]&lt;br /&gt;
&lt;br /&gt;
= M-Vendor VXLAN Lab with EVE-NG =&lt;br /&gt;
&lt;br /&gt;
[[Mvendor-VXLAN-lab]]&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Sonic-lab&amp;diff=2985</id>
		<title>Sonic-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Sonic-lab&amp;diff=2985"/>
		<updated>2021-10-29T08:47:37Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
Lab archive [https://wiki.nesevo.com/images/0/0a/Sonic-lab-20201030.zip Sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
* to have installed docker by using ./install_docker_ovs.sh &lt;br /&gt;
* to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&lt;br /&gt;
* launches the containers without Docket network features&lt;br /&gt;
* create network namespaces&lt;br /&gt;
* build linux bridges to interconnect the containers&lt;br /&gt;
* configure host IPs&lt;br /&gt;
* launch startup sonic scripts into sonic devices&lt;br /&gt;
* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2984</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2984"/>
		<updated>2021-10-29T08:39:47Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* SONiC Lab Docker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
Welcome to our Labs Wiki page. &lt;br /&gt;
&lt;br /&gt;
Here you'll find our shares about what we've experimented in lab.&lt;br /&gt;
&lt;br /&gt;
Don't hesitate to share your feedbacks, thanks.&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus ContainerLab =&lt;br /&gt;
&lt;br /&gt;
[[Cumulus-Nokia-Lab]]&lt;br /&gt;
&lt;br /&gt;
= SONiC with Docker =&lt;br /&gt;
&lt;br /&gt;
[[Sonic-lab]]&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2983</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2983"/>
		<updated>2021-10-29T08:38:35Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
Welcome to our Labs Wiki page. &lt;br /&gt;
&lt;br /&gt;
Here you'll find our shares about what we've experimented in lab.&lt;br /&gt;
&lt;br /&gt;
Don't hesitate to share your feedbacks, thanks.&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus ContainerLab =&lt;br /&gt;
&lt;br /&gt;
[[Cumulus-Nokia-Lab]]&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab Docker =&lt;br /&gt;
&lt;br /&gt;
[[Sonic-lab]]&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2982</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2982"/>
		<updated>2021-10-29T08:36:21Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* SONiC Lab Docker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus ContainerLab =&lt;br /&gt;
&lt;br /&gt;
[[Cumulus-Nokia-Lab]]&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab Docker =&lt;br /&gt;
&lt;br /&gt;
[[Sonic-lab]]&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2981</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2981"/>
		<updated>2021-10-29T08:35:59Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* SONiC Lab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus ContainerLab =&lt;br /&gt;
&lt;br /&gt;
[[Cumulus-Nokia-Lab]]&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab Docker =&lt;br /&gt;
&lt;br /&gt;
[[sonic-lab]]&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2980</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2980"/>
		<updated>2021-10-29T08:35:39Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* Nokia/Cumulus Multi-Vendor Lab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus ContainerLab =&lt;br /&gt;
&lt;br /&gt;
[[Cumulus-Nokia-Lab]]&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
[[sonic-lab]]&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2979</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2979"/>
		<updated>2021-10-29T08:35:14Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* SONiC Lab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
[[Cumulus-Nokia-Lab]]&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
[[sonic-lab]]&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Sonic-lab&amp;diff=2978</id>
		<title>Sonic-lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Sonic-lab&amp;diff=2978"/>
		<updated>2021-10-29T08:34:39Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: Created page with &amp;quot; &amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;  == Lab diagram == File:SONIC_LAB.jpg  Lab archive [https://wiki....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
Lab archive [https://wiki.nesevo.com/images/0/0a/Sonic-lab-20201030.zip Sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
* to have installed docker by using ./install_docker_ovs.sh &lt;br /&gt;
* to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2977</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2977"/>
		<updated>2021-10-29T08:34:01Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* Nokia/Cumulus Multi-Vendor Lab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
[[Cumulus-Nokia-Lab]]&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
Lab archive [https://wiki.nesevo.com/images/0/0a/Sonic-lab-20201030.zip Sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
* to have installed docker by using ./install_docker_ovs.sh &lt;br /&gt;
* to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Cumulus-Nokia-Lab&amp;diff=2976</id>
		<title>Cumulus-Nokia-Lab</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Cumulus-Nokia-Lab&amp;diff=2976"/>
		<updated>2021-10-29T08:33:39Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: Created page with &amp;quot;The targets of this lab are to :  * mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles * make this environment work for different kinds of setup : cross-DC L2,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[https://wiki.nesevo.com/images/6/66/20211008_lab-nokia-cvx.zip 20211008_lab-nokia-cvx.zip]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2975</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2975"/>
		<updated>2021-10-29T08:32:58Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* Nokia/Cumulus Multi-Vendor Lab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
[[Cumulus-Nokia-Lab]]&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[https://wiki.nesevo.com/images/6/66/20211008_lab-nokia-cvx.zip 20211008_lab-nokia-cvx.zip]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
Lab archive [https://wiki.nesevo.com/images/0/0a/Sonic-lab-20201030.zip Sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
* to have installed docker by using ./install_docker_ovs.sh &lt;br /&gt;
* to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2974</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2974"/>
		<updated>2021-10-29T08:20:35Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* Nokia/Cumulus Multi-Vendor Lab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[https://wiki.nesevo.com/images/6/66/20211008_lab-nokia-cvx.zip 20211008_lab-nokia-cvx.zip]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
Lab archive [https://wiki.nesevo.com/images/0/0a/Sonic-lab-20201030.zip Sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
* to have installed docker by using ./install_docker_ovs.sh &lt;br /&gt;
* to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=File:20211008_lab-nokia-cvx.zip&amp;diff=2973</id>
		<title>File:20211008 lab-nokia-cvx.zip</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=File:20211008_lab-nokia-cvx.zip&amp;diff=2973"/>
		<updated>2021-10-29T08:19:06Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2972</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2972"/>
		<updated>2021-10-29T08:17:11Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* Lab diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
Lab archive [https://wiki.nesevo.com/images/0/0a/Sonic-lab-20201030.zip Sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
* to have installed docker by using ./install_docker_ovs.sh &lt;br /&gt;
* to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2971</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2971"/>
		<updated>2021-10-29T08:15:59Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* run ping */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
Lab archive [https://wiki.nesevo.com/images/0/0a/Sonic-lab-20201030.zip Sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
- to have installed docker by using ./install_docker_ovs.sh - to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2970</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2970"/>
		<updated>2021-10-29T08:15:14Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* Lab diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
Lab archive [https://wiki.nesevo.com/images/0/0a/Sonic-lab-20201030.zip Sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
- to have installed docker by using ./install_docker_ovs.sh - to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2969</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2969"/>
		<updated>2021-10-29T08:12:49Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* Lab diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;Lab archive [Attach:Sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
- to have installed docker by using ./install_docker_ovs.sh - to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2968</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2968"/>
		<updated>2021-10-29T08:12:19Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* Lab diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;Lab archive [File:Sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
- to have installed docker by using ./install_docker_ovs.sh - to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=File:Sonic-lab-20201030.zip&amp;diff=2967</id>
		<title>File:Sonic-lab-20201030.zip</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=File:Sonic-lab-20201030.zip&amp;diff=2967"/>
		<updated>2021-10-29T08:11:18Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2966</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2966"/>
		<updated>2021-10-29T08:10:02Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* check ip route */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;Lab archive [http://wiki.intra.nesevo.com/uploads/LAB/sonic-lab-20201030.zip Attach:sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
- to have installed docker by using ./install_docker_ovs.sh - to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2965</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2965"/>
		<updated>2021-10-29T08:09:13Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* check bgp sessions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;Lab archive [http://wiki.intra.nesevo.com/uploads/LAB/sonic-lab-20201030.zip Attach:sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
- to have installed docker by using ./install_docker_ovs.sh - to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2964</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2964"/>
		<updated>2021-10-29T08:08:25Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* run ping */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;Lab archive [http://wiki.intra.nesevo.com/uploads/LAB/sonic-lab-20201030.zip Attach:sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
- to have installed docker by using ./install_docker_ovs.sh - to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2963</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2963"/>
		<updated>2021-10-29T08:07:10Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* check bgp sessions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;Lab archive [http://wiki.intra.nesevo.com/uploads/LAB/sonic-lab-20201030.zip Attach:sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
- to have installed docker by using ./install_docker_ovs.sh - to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2962</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2962"/>
		<updated>2021-10-29T08:05:47Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* check ip route */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;Lab archive [http://wiki.intra.nesevo.com/uploads/LAB/sonic-lab-20201030.zip Attach:sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
- to have installed docker by using ./install_docker_ovs.sh - to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2961</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2961"/>
		<updated>2021-10-29T08:04:33Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* SONiC Lab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;Lab archive [http://wiki.intra.nesevo.com/uploads/LAB/sonic-lab-20201030.zip Attach:sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
- to have installed docker by using ./install_docker_ovs.sh - to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
	<entry>
		<id>http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2960</id>
		<title>Nesevo Virtual Labs</title>
		<link rel="alternate" type="text/html" href="http://wiki.nesevo.com/index.php?title=Nesevo_Virtual_Labs&amp;diff=2960"/>
		<updated>2021-10-29T08:02:24Z</updated>

		<summary type="html">&lt;p&gt;PierreLancastre: /* Lab diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:nesevo-labs-v2.png]]&lt;br /&gt;
&lt;br /&gt;
= Nokia/Cumulus Multi-Vendor Lab =&lt;br /&gt;
&lt;br /&gt;
The targets of this lab are to :&lt;br /&gt;
&lt;br /&gt;
* mix Nokia SR-Linux and Cumulus VXLAN nodes, in spine or leaf roles&lt;br /&gt;
* make this environment work for different kinds of setup : cross-DC L2, differentiated L3 gateways per leaf per VRF, anycast gateway cross or intra DC, etc.&lt;br /&gt;
* spot compatibility issues if existing&lt;br /&gt;
&lt;br /&gt;
To reach those goals, we'll use the Nokia lab tool &amp;quot;containerlab&amp;quot; https://containerlab.srlinux.dev/, labs from https://clabs.netdevops.me/ helped a lot. Many thanks to the contributors.&lt;br /&gt;
&lt;br /&gt;
We'll need a Linux host with Docker installed on it + kvm virtualization enhancements activated (important if your host is a VM). If virtualization optimization is not ok, you won't be able to launch the most of devices.&lt;br /&gt;
&lt;br /&gt;
Installation details are referenced there : https://containerlab.srlinux.dev/install/&lt;br /&gt;
&lt;br /&gt;
Once installed, you'll need to register the different NOS images you'll use. Cumulus image is present on a public registrery, but Nokia/Arista/Juniper are not, you'll need a vendor support account to retreive them. Once downloaded (.tgz file typically) you can &amp;quot;docker load&amp;quot; the image :&lt;br /&gt;
&lt;br /&gt;
For private images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker load -i 21.6.1-235.tar.xz	      /* (Nokia)  */&lt;br /&gt;
sudo docker load -i cEOS64-lab-4.26.1F.tar    /* (Arista) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For public images :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker pull networkop/cx:4.3.0     /* (Cumulus) */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify your installed images, you can run &amp;quot;sudo docker images&amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
plancastre@containerlab:~/00.LAB/senss$ sudo docker images&lt;br /&gt;
REPOSITORY                        TAG          IMAGE ID       CREATED        SIZE&lt;br /&gt;
networkop/cx                      4.3.0        a40541ed15ba   2 weeks ago    733MB&lt;br /&gt;
srlinux                           21.6.1-235   e29aed30e83f   3 weeks ago    1.14GB&lt;br /&gt;
networkop/ignite                  dev          dcc5eff29355   4 weeks ago    37.9MB&lt;br /&gt;
networkop/kernel                  4.19         e794d8875f83   3 months ago   88MB&lt;br /&gt;
frrouting/frr                     v7.5.1       c3e13a4c5918   3 months ago   123MB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Once you've got all your images, to run the lab, you'll need a .yml file defining the topology to run.&lt;br /&gt;
&lt;br /&gt;
In our lab, we've started with the 5-clos lab file from Nokia site, which we've forked. &lt;br /&gt;
&lt;br /&gt;
We can see there is a branch &amp;quot;kinds&amp;quot; where we can define templates of nodes, in order to not rewrite whole parameters when creating nodes. For the images, it's important to take the repository name + tag.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the tag is &amp;quot;latest&amp;quot; it is not needed.&lt;br /&gt;
&lt;br /&gt;
All supported &amp;quot;kinds&amp;quot; are referenced there : https://containerlab.srlinux.dev/manual/kinds/kinds/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' yml is indentation sensitive, so please respect the &amp;quot;double space&amp;quot; used to define hierarchy. Below the lab diagram + the yml file associated &lt;br /&gt;
&lt;br /&gt;
== Infos on nodes ==&lt;br /&gt;
&lt;br /&gt;
=== L3 infos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Device&lt;br /&gt;
!OS&lt;br /&gt;
!ASN&lt;br /&gt;
!VTEP IP&lt;br /&gt;
!swp1 or eth1/1&lt;br /&gt;
!swp2 or eth1/2&lt;br /&gt;
!swp3 or eth1/3&lt;br /&gt;
!SVI&lt;br /&gt;
|-&lt;br /&gt;
|client1&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.1/24&lt;br /&gt;
vlan200: 192.168.2.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client2&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.2/24&lt;br /&gt;
vlan200: 192.168.2.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.200.0/24 via 192.168.2.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client3&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.1/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|client4&lt;br /&gt;
|Linux&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|vlan100: 192.168.1.3/24&lt;br /&gt;
vlan200: 192.168.200.2/24&lt;br /&gt;
&lt;br /&gt;
route 192.168.2.0/24 via 192.168.200.254&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|leaf1&lt;br /&gt;
|CVX&lt;br /&gt;
|65011&lt;br /&gt;
|10.255.255.5/32&lt;br /&gt;
|10.254.254.8/31&lt;br /&gt;
|10.254.254.10/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65012&lt;br /&gt;
|10.255.255.6/32&lt;br /&gt;
|10.254.254.12/31&lt;br /&gt;
|10.254.254.14/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.2.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf3&lt;br /&gt;
|CVX&lt;br /&gt;
|65013&lt;br /&gt;
|10.255.255.7/32&lt;br /&gt;
|10.254.254.22/31&lt;br /&gt;
|10.254.254.24/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|vlan200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|leaf4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65014&lt;br /&gt;
|10.255.255.8/32&lt;br /&gt;
|10.254.254.26/31&lt;br /&gt;
|10.254.254.28/31&lt;br /&gt;
|trunk vlan 100,200&lt;br /&gt;
|irb0.200 : 192.168.200.254/24&lt;br /&gt;
|-&lt;br /&gt;
|spine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.1/32&lt;br /&gt;
|10.254.254.9/31&lt;br /&gt;
|10.254.254.13/31&lt;br /&gt;
|10.254.254.0/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine2&lt;br /&gt;
|CVX&lt;br /&gt;
|65001&lt;br /&gt;
|10.255.255.2/32&lt;br /&gt;
|10.254.254.11/31&lt;br /&gt;
|10.254.254.15/31&lt;br /&gt;
|10.254.254.16/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine3&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.3/32&lt;br /&gt;
|10.254.254.23/31&lt;br /&gt;
|10.254.254.27/31&lt;br /&gt;
|10.254.254.18/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|spine4&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65002&lt;br /&gt;
|10.255.255.4/32&lt;br /&gt;
|10.254.254.25/31&lt;br /&gt;
|10.254.254.29/31&lt;br /&gt;
|10.254.254.20/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine1&lt;br /&gt;
|CVX&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.9/32&lt;br /&gt;
|10.254.254.1/31&lt;br /&gt;
|10.254.254.19/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|superspine2&lt;br /&gt;
|SRLinux&lt;br /&gt;
|65003&lt;br /&gt;
|10.255.255.10/32&lt;br /&gt;
|10.254.254.17/31&lt;br /&gt;
|10.254.254.21/31&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|&amp;lt;none&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VXLAN/BGP infos ===&lt;br /&gt;
Note : in our lab, route-distinguisher is constructed on the model &amp;lt;loopback_ip&amp;gt;:&amp;lt;vlan_id&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!service&lt;br /&gt;
!vlan id&lt;br /&gt;
!route-target&lt;br /&gt;
!VNI&lt;br /&gt;
!Commentaires&lt;br /&gt;
|-&lt;br /&gt;
|L2 cross-DC&lt;br /&gt;
|100&lt;br /&gt;
|target:65000:100&lt;br /&gt;
|100&lt;br /&gt;
|the 4 clients are in the same broadcast domain / subnet&lt;br /&gt;
|-&lt;br /&gt;
|L3VPN cros-DC&lt;br /&gt;
|200&lt;br /&gt;
|target:65000:200&lt;br /&gt;
target:65000:10200&lt;br /&gt;
|200 (for L2)&lt;br /&gt;
10200 (for routing)&lt;br /&gt;
|the 4 clients are separated in 2 different subnets. Traffic is routed within dedicated VNI&lt;br /&gt;
To be noted that in the current setup VMTO is not implemented, so cross DC traffic is not optimized.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:Lab-srl-diagram.png|ohne|mini|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== yml lab file ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# topology documentation: http://containerlab.srlinux.dev/lab-examples/min-5clos/&lt;br /&gt;
name: lab-srl-cum &lt;br /&gt;
&lt;br /&gt;
topology:&lt;br /&gt;
  kinds:&lt;br /&gt;
    srl:&lt;br /&gt;
      image: srlinux:21.6.1-235 &lt;br /&gt;
    linux:&lt;br /&gt;
      image: ghcr.io/hellt/network-multitool&lt;br /&gt;
    cvx:&lt;br /&gt;
      image: networkop/cx:4.3.0&lt;br /&gt;
      runtime: docker&lt;br /&gt;
  nodes:&lt;br /&gt;
    leaf1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
    leaf3:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    leaf4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixrd2&lt;br /&gt;
&lt;br /&gt;
    spine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine2:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    spine3:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
    spine4:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    superspine1:&lt;br /&gt;
      kind: cvx&lt;br /&gt;
    superspine2:&lt;br /&gt;
      kind: srl&lt;br /&gt;
      type: ixr6&lt;br /&gt;
&lt;br /&gt;
    client1:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client2:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client3:&lt;br /&gt;
      kind: linux&lt;br /&gt;
    client4:&lt;br /&gt;
      kind: linux&lt;br /&gt;
&lt;br /&gt;
  links:&lt;br /&gt;
    # leaf to spine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp1&amp;quot;, &amp;quot;spine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf1:swp2&amp;quot;, &amp;quot;spine2:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-1&amp;quot;, &amp;quot;spine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf2:e1-2&amp;quot;, &amp;quot;spine2:swp2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD1&lt;br /&gt;
    - endpoints: [&amp;quot;spine1:swp3&amp;quot;, &amp;quot;superspine1:swp1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine2:swp3&amp;quot;, &amp;quot;superspine2:e1-1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # leaf to spine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp1&amp;quot;, &amp;quot;spine3:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf3:swp2&amp;quot;, &amp;quot;spine4:e1-1&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-1&amp;quot;, &amp;quot;spine3:e1-2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;leaf4:e1-2&amp;quot;, &amp;quot;spine4:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # spine to superspine links POD2&lt;br /&gt;
    - endpoints: [&amp;quot;spine3:e1-3&amp;quot;, &amp;quot;superspine1:swp2&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;spine4:e1-3&amp;quot;, &amp;quot;superspine2:e1-2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    # client connection links&lt;br /&gt;
    - endpoints: [&amp;quot;client1:eth1&amp;quot;, &amp;quot;leaf1:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client2:eth1&amp;quot;, &amp;quot;leaf2:e1-3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client3:eth1&amp;quot;, &amp;quot;leaf3:swp3&amp;quot;]&lt;br /&gt;
    - endpoints: [&amp;quot;client4:eth1&amp;quot;, &amp;quot;leaf4:e1-3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the nodes are defined, we have to define the needed connections between the nodes.&lt;br /&gt;
&lt;br /&gt;
Each endpoint is defined as '&amp;lt;nowiki/&amp;gt;'''&amp;lt;nowiki/&amp;gt;'&amp;lt;node_name&amp;gt;:&amp;lt;interface_name&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
When all is ok, you can launch in suduoer the topology. &lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo containerlab deploy --topo topo.clab.yml --reconfigure&lt;br /&gt;
&lt;br /&gt;
Note: The option &amp;quot;reconfigure&amp;quot; is used there in order to not have to destroy instances when updating topology/relaunching.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Another info regarding the yml file, it's possible to quickly generate files with the '''&amp;quot;containerlab gen -n 3tier --nodes 4,2,1&amp;quot;''' command for example. https://containerlab.srlinux.dev/cmd/generate/&lt;br /&gt;
&lt;br /&gt;
To be noted that the &amp;quot;tier-x&amp;quot; notion in containerlab is inversed regarding the rfc 7938 (tier1 is superspine level into the rfc, tier1 is leaf level in nokia tool)&lt;br /&gt;
&lt;br /&gt;
At the end of the topology launch, you can retreive the details :&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
INFO[0011] Writing /etc/hosts file                      &lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
| #  |             Name             | Container ID |              Image              | Kind  | Group |  State  |  IPv4 Address   |     IPv6 Address     |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
|  1 | clab-lab-srl-cum-client1     | 25e2bbf6b13f | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.2/24  | 2001:172:20:20::2/64 |&lt;br /&gt;
|  2 | clab-lab-srl-cum-client2     | 17d82d5a6e21 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.4/24  | 2001:172:20:20::4/64 |&lt;br /&gt;
|  3 | clab-lab-srl-cum-client3     | f8d78527c1b1 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.6/24  | 2001:172:20:20::6/64 |&lt;br /&gt;
|  4 | clab-lab-srl-cum-client4     | 913a0172d0c5 | ghcr.io/hellt/network-multitool | linux |       | running | 172.20.20.10/24 | 2001:172:20:20::a/64 |&lt;br /&gt;
|  5 | clab-lab-srl-cum-leaf1       | 9ffc334af2b1 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.9/24  | 2001:172:20:20::9/64 |&lt;br /&gt;
|  6 | clab-lab-srl-cum-leaf2       | 7d3eb855d749 | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.14/24 | 2001:172:20:20::e/64 |&lt;br /&gt;
|  7 | clab-lab-srl-cum-leaf3       | e0d36ffc606a | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.7/24  | 2001:172:20:20::7/64 |&lt;br /&gt;
|  8 | clab-lab-srl-cum-leaf4       | e6753b1d099e | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.12/24 | 2001:172:20:20::c/64 |&lt;br /&gt;
|  9 | clab-lab-srl-cum-spine1      | a7e63993d052 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.5/24  | 2001:172:20:20::5/64 |&lt;br /&gt;
| 10 | clab-lab-srl-cum-spine2      | 3124250d5b75 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.3/24  | 2001:172:20:20::3/64 |&lt;br /&gt;
| 11 | clab-lab-srl-cum-spine3      | 5e300ca3f66f | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.11/24 | 2001:172:20:20::b/64 |&lt;br /&gt;
| 12 | clab-lab-srl-cum-spine4      | 0a59e60a596b | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.13/24 | 2001:172:20:20::d/64 |&lt;br /&gt;
| 13 | clab-lab-srl-cum-superspine1 | 3d9935413fc2 | networkop/cx:4.3.0              | cvx   |       | running | 172.20.20.8/24  | 2001:172:20:20::8/64 |&lt;br /&gt;
| 14 | clab-lab-srl-cum-superspine2 | 5bc58d423e2c | srlinux:21.6.1-235              | srl   |       | running | 172.20.20.15/24 | 2001:172:20:20::f/64 |&lt;br /&gt;
+----+------------------------------+--------------+---------------------------------+-------+-------+---------+-----------------+----------------------+&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The containerlab program creates the updates into the host file + generates an ansible inventory file.&lt;br /&gt;
&lt;br /&gt;
There are different ways to connect onto the docker instances, within docker exec commands or SSH directly the IP address related above.&lt;br /&gt;
&lt;br /&gt;
For example :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-spine1 bash &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch a bash on the cumulus device (then you run the different net commands)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it clab-lab-srl-cum-leaf2 sr_cli &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;--&amp;gt;&amp;gt;&amp;gt; allows to launch the cli on a SRLinux device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To end this setup preparation, the containerlab tool integrates an option to launch a webserver showing the lab topology in graph + node details&lt;br /&gt;
&lt;br /&gt;
By default, it's listening on port 50080 of the host&lt;br /&gt;
&lt;br /&gt;
Then, you can access to the following web page showing the topology + lab infos &lt;br /&gt;
&lt;br /&gt;
[[File:Lab graph tool.jpg|ohne|mini|900x900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to stop a lab, please run '''&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;containerlab destroy --topo &amp;lt;topology&amp;gt;.yml&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
At this step, nodes are running, connections are done, but configurations are empty.&lt;br /&gt;
&lt;br /&gt;
'''So, it's time to configure them :)'''&lt;br /&gt;
&lt;br /&gt;
Configuration files are attached to this blog. Once validated, they are exportable and can be called by the tool when launching the lab. Below how to do it :&lt;br /&gt;
&lt;br /&gt;
Firstable, once you ve finished your &amp;quot;hand made config&amp;quot;, you can run the following command to save it :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
containerlab save -t quickstart.clab.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;'''To be noted it's only working for Nokia nodes in this lab'''. CVX configurations will have to be called by another method (or pushed manually)&lt;br /&gt;
&lt;br /&gt;
It will create one folder per node into the lab folder which gives the following tree :&lt;br /&gt;
[[File:Topology-srl.jpg|ohne|mini]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note''': For Cumulus, you can apparently retrieve configurations files within adding the following parameters into lab config file. '''To be tested.''' some lab samples here : https://github.com/hellt/clabs/blob/main/labs/cvx04/symm-mh.clab.yml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we have the lab running, below the different commands to check that all is working as expected : &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check L2 tables ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show network-instance mac-vrf-100 bridge-table mac-table all                                                                                     &lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	Mac-table of network instance mac-vrf-100&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	|      Address       |               Destination               | Dest Index |    Type     | Active  | Aging  |               Last Update               |&lt;br /&gt;
	+====================+=========================================+============+=============+=========+========+=========================================+&lt;br /&gt;
	| AA:C1:AB:0C:60:D6  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T13:06:17.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.8 vni:100               | 67         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:23:31:04  | ethernet-1/3.100                        | 2          | learnt      | true    | 300    | 2021-10-08T13:06:10.000Z                |&lt;br /&gt;
	| AA:C1:AB:4B:FF:71  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:55:28.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.5 vni:100               | 60         |             |         |        |                                         |&lt;br /&gt;
	| AA:C1:AB:B5:79:50  | vxlan-interface:vxlan1.100              | 6379518792 | evpn        | true    | N/A    | 2021-10-08T12:43:37.000Z                |&lt;br /&gt;
	|                    | vtep:10.255.255.7 vni:100               | 64         |             |         |        |                                         |&lt;br /&gt;
	+--------------------+-----------------------------------------+------------+-------------+---------+--------+-----------------------------------------+&lt;br /&gt;
	Total Irb Macs            :    0 Total    0 Active&lt;br /&gt;
	Total Static Macs         :    0 Total    0 Active&lt;br /&gt;
	Total Duplicate Macs      :    0 Total    0 Active&lt;br /&gt;
	Total Learnt Macs         :    1 Total    1 Active&lt;br /&gt;
	Total Evpn Macs           :    3 Total    3 Active&lt;br /&gt;
	Total Evpn static Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Irb anycast Macs    :    0 Total    0 Active&lt;br /&gt;
	Total Macs                :    4 Total    4 Active&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                     &lt;br /&gt;
&lt;br /&gt;
Note : type learnt matches the local learnt mac, evpn are learnt within VXLAN                                                    &lt;br /&gt;
	&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 100&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:00:02&lt;br /&gt;
	 100  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     22:2d:67:f1:bb:26              permanent                02:17:21&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:0c:60:d6                         extern_learn  &amp;lt;1 sec&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:23:31:04                         extern_learn  00:00:07&lt;br /&gt;
	 100  bridge  vni100     aa:c1:ab:b5:79:50                         extern_learn  00:13:28&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show bridge macs vlan 200&lt;br /&gt;
	&lt;br /&gt;
	VLAN  Master  Interface  MAC                TunnelDest  State      Flags         LastSeen&lt;br /&gt;
	----  ------  ---------  -----------------  ----------  ---------  ------------  --------&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4b:ff:71                                       00:08:46&lt;br /&gt;
	 200  bridge  swp3       aa:c1:ab:4f:f2:e7              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     00:00:5e:00:01:01              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     1e:0d:aa:46:53:b1              permanent                02:16:36&lt;br /&gt;
	 200  bridge  vni200     02:77:6b:ff:00:41              static     sticky        01:00:52&lt;br /&gt;
	 200  bridge  vni200     02:f8:b8:ff:00:41              static     sticky        00:14:26&lt;br /&gt;
	 200  bridge  vni200     aa:c1:ab:b5:79:50                         extern_learn  00:11:51&lt;br /&gt;
	 200  bridge  vni10200   02:77:6b:ff:00:00                         extern_learn  00:53:02&lt;br /&gt;
	 200  bridge  vni10200   02:f8:b8:ff:00:00                         extern_learn  00:14:26&lt;br /&gt;
	 200  bridge  vni10200   86:5e:aa:ca:50:be              permanent                02:16:36&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Note : the macs with permanent flag are local interfaces, physical ou logic (vtep)&lt;br /&gt;
Note2 : extern_learn mac are the one learned via the VXLAN infra (and mapped to the vnixxx interface)&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp tables  ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	:leaf2# show arpnd arp-entries                                                                                                                           &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| ethernet-1/1  |             0 |   10.254.254.13 |       dynamic | AA:C1:AB:59:65:EA           | 3 hours from now                                        |&lt;br /&gt;
	| ethernet-1/2  |             0 |   10.254.254.15 |       dynamic | AA:C1:AB:CB:F8:8A           | 3 hours from now                                        |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	| mgmt0         |             0 |     172.20.20.1 |       dynamic | 02:42:63:9E:74:03           | 2 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 5 (0 static, 5 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                                                                       &lt;br /&gt;
	&lt;br /&gt;
Note : on Nokia you have to sort the entries basing on subinterface and the retrieve the L3VPN attached	&lt;br /&gt;
&lt;br /&gt;
	A:leaf2# show arpnd arp-entries subinterface 200                                                                                                          &lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	|   Interface   | Subinterface  |    Neighbor     |    Origin     |     Link layer address      |                         Expiry                          |&lt;br /&gt;
	+===============+===============+=================+===============+=============================+=========================================================+&lt;br /&gt;
	| irb0          |           200 |     192.168.2.1 |          evpn | AA:C1:AB:4B:FF:71           |                                                         |&lt;br /&gt;
	| irb0          |           200 |     192.168.2.2 |       dynamic | AA:C1:AB:23:31:04           | 3 hours from now                                        |&lt;br /&gt;
	+---------------+---------------+-----------------+---------------+-----------------------------+---------------------------------------------------------+&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	  Total entries : 2 (0 static, 2 dynamic)&lt;br /&gt;
	----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
	--{ + running }--[  ]--                                            &lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
Here we retrieve all arp infos linked to evpn&lt;br /&gt;
&lt;br /&gt;
	root@leaf1-cum-dc1:/# net show evpn arp-cache vni all&lt;br /&gt;
	VNI 100 #ARP (IPv4 and IPv6, local and remote) 2&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.1.3     remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	192.168.1.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 200 #ARP (IPv4 and IPv6, local and remote) 4&lt;br /&gt;
	&lt;br /&gt;
	Flags: I=local-inactive, P=peer-active, X=peer-proxy&lt;br /&gt;
	Neighbor        Type   Flags State    MAC               Remote ES/VTEP                 Seq #'s&lt;br /&gt;
	192.168.2.1     local        active   aa:c1:ab:4b:ff:71                                0/0&lt;br /&gt;
	192.168.200.254 remote       active   00:00:5e:00:01:01 10.255.255.8                   0/0&lt;br /&gt;
	192.168.2.254   remote       active   00:00:5e:00:01:01 10.255.255.6                   0/0&lt;br /&gt;
	192.168.200.1   remote       active   aa:c1:ab:b5:79:50 10.255.255.7                   0/0&lt;br /&gt;
	&lt;br /&gt;
	VNI 400 #ARP (IPv4 and IPv6, local and remote) 0&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - underlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep ipv4                                                                                                                                                                                                                                             &lt;br /&gt;
	| default     | 10.254.254.19  | udl-superspine          | S         | 65003           | established      | 0d:0h:22m:44s    | ipv4-unicast          | [13/4/4]       |&lt;br /&gt;
	| default     | 10.254.254.22  | udl-leaf    			 | S         | 65013           | established      | 0d:0h:22m:52s    | ipv4-unicast          | [13/1/4]       |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cumulus : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	root@leaf3:/# net show bgp ipv4 unicast summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 13&lt;br /&gt;
	RIB entries 25, using 4800 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.254.254.23   4      65002       466       403        0    0    0 00:19:34            4       13&lt;br /&gt;
	10.254.254.25   4      65002       434       355        0    0    0 00:17:10            8       13&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check bgp sessions' status - overlay ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
	A:spine3# show network-instance default protocols bgp neighbor | grep evpn                                                                                                                                                                                                                                             &lt;br /&gt;
	| default  | 10.255.255.7    | ovl-leaf            | S         | 65013           | established  | 0d:0h:24m:14s| evpn      | [15/0/11]  |&lt;br /&gt;
	| default  | 10.255.255.9    | ovl-superspine      | S         | 65003           | established  | 0d:0h:24m:7s | evpn      | [11/0/4]   |&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
	root@leaf3-cum-dc1:/# net show bgp evpn summary&lt;br /&gt;
	BGP router identifier 10.255.255.7, local AS number 65013 vrf-id 0&lt;br /&gt;
	BGP table version 0&lt;br /&gt;
	RIB entries 29, using 5568 bytes of memory&lt;br /&gt;
	Peers 2, using 43 KiB of memory&lt;br /&gt;
	&lt;br /&gt;
	Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt&lt;br /&gt;
	10.255.255.3    4      65002      5618      4742        0    0    0 03:53:35           19       27&lt;br /&gt;
	10.255.255.4    4      65002      5565      4694        0    0    0 03:51:11           19       27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check EVPN L2 tables///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route type 2&lt;br /&gt;
BGP table version is 17, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.5:100&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
Route Distinguisher: 10.255.255.5:200&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.2.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:200 RT:65011:10200 ET:8 Rmac:aa:c1:ab:4f:f2:e7&lt;br /&gt;
Route Distinguisher: 10.255.255.6:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.2.254]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:77:6b:ff:00:41]&lt;br /&gt;
                    10.255.255.6                           0 65002 65003 65001 65012 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
Route Distinguisher: 10.255.255.7:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
Route Distinguisher: 10.255.255.7:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.200.1]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:200&lt;br /&gt;
Route Distinguisher: 10.255.255.8:200&lt;br /&gt;
*  [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[00:00:5e:00:01:01]:[32]:[192.168.200.254]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*  [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[02:f8:b8:ff:00:41]&lt;br /&gt;
                    10.255.255.8                           0 65002 65014 i&lt;br /&gt;
                    RT:65000:200 ET:8 MM:0, sticky MAC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and if we focus on our vni 100&lt;br /&gt;
&lt;br /&gt;
root@leaf3-cum-dc1:/# net show bgp evpn route vni 100 type 2     &lt;br /&gt;
BGP table version is 48, local router ID is 10.255.255.7&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*  [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:4b:ff:71]:[32]:[192.168.1.1]&lt;br /&gt;
                    10.255.255.5                           0 65002 65003 65001 65011 i&lt;br /&gt;
                    RT:65000:100 ET:8&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
*&amp;gt; [2]:[0]:[48]:[aa:c1:ab:b5:79:50]:[32]:[192.168.1.3]&lt;br /&gt;
                    10.255.255.7                       32768 i&lt;br /&gt;
                    ET:8 RT:65000:100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The additional route type &amp;quot;MAC+IP&amp;quot; is optional and is useful/mandatory when you do anycast irb.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check tables EVPN L3 ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Nokia :&lt;br /&gt;
&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2# show network-instance ip-vrf-200 route-table all                                                                                                  &lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
IPv4 Unicast route table of network instance ip-vrf-200&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
|        Prefix         |  ID   | Route Type |     Route Owner      |      Best/Fib-       |  Metric  |  Pref   |   Next-hop   |   Next-hop   |&lt;br /&gt;
|                       |       |            |                      |     status(slot)     |          |         |    (Type)    |  Interface   |&lt;br /&gt;
+=======================+=======+============+======================+======================+==========+=========+==============+==============+&lt;br /&gt;
| 192.168.2.0/24        | 9     | local      | net_inst_mgr         | True/success         | 0        | 0       | 192.168.2.25 | irb0.200     |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | 4 (direct)   |              |&lt;br /&gt;
| 192.168.2.254/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (extract)    |              |&lt;br /&gt;
| 192.168.2.255/32      | 9     | host       | net_inst_mgr         | True/success         | 0        | 0       | None         | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (broadcast)  |              |&lt;br /&gt;
| 192.168.200.0/24      | 0     | bgp-evpn   | bgp_evpn_mgr         | True/success         | 0        | 170     | 10.255.255.8 | None         |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | (indirect/vx |              |&lt;br /&gt;
|                       |       |            |                      |                      |          |         | lan)         |              |&lt;br /&gt;
+-----------------------+-------+------------+----------------------+----------------------+----------+---------+--------------+--------------+&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
4 IPv4 routes total&lt;br /&gt;
4 IPv4 prefixes with active routes&lt;br /&gt;
0 IPv4 prefixes with active ECMP routes&lt;br /&gt;
-----------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
--{ + running }--[  ]--                                                                                                                                    &lt;br /&gt;
A:leaf2#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;didn't spotted how to show evpn routes in a bgp fashion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cumulus :&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show route vrf ip-vrf-200&lt;br /&gt;
show ip route vrf ip-vrf-200 &lt;br /&gt;
=============================&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,&lt;br /&gt;
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,&lt;br /&gt;
       F - PBR, f - OpenFabric,&lt;br /&gt;
       &amp;gt; - selected route, * - FIB route, q - queued, r - rejected, b - backup&lt;br /&gt;
       t - trapped, o - offload failure&lt;br /&gt;
&lt;br /&gt;
VRF ip-vrf-200:&lt;br /&gt;
K&amp;gt;* 0.0.0.0/0 [255/8192] unreachable (ICMP unreachable), 04:48:42&lt;br /&gt;
B   192.168.2.0/24 [20/0] via 10.255.255.6, vlan200 onlink, weight 1, 04:27:26&lt;br /&gt;
C&amp;gt;* 192.168.2.0/24 is directly connected, vlan200, 04:48:42&lt;br /&gt;
B&amp;gt;* 192.168.200.0/24 [20/0] via 10.255.255.8, vlan200 onlink, weight 1, 03:48:49&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@leaf1-cum-dc1:/# net show bgp evpn route type 5&lt;br /&gt;
BGP table version is 3, local router ID is 10.255.255.5&lt;br /&gt;
Status codes: s suppressed, d damped, h history, * valid, &amp;gt; best, i - internal&lt;br /&gt;
Origin codes: i - IGP, e - EGP, ? - incomplete&lt;br /&gt;
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]&lt;br /&gt;
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]&lt;br /&gt;
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]&lt;br /&gt;
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]&lt;br /&gt;
&lt;br /&gt;
   Network          Next Hop            Metric LocPrf Weight Path&lt;br /&gt;
                    Extended Community&lt;br /&gt;
Route Distinguisher: 10.255.255.6:10200&lt;br /&gt;
*  [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.2.0]&lt;br /&gt;
                    10.255.255.6                           0 65001 65012 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:77:6b:ff:00:00&lt;br /&gt;
Route Distinguisher: 10.255.255.8:10200&lt;br /&gt;
*&amp;gt; [5]:[0]:[24]:[192.168.200.0]&lt;br /&gt;
                    10.255.255.8                           0 65001 65003 65002 65014 i&lt;br /&gt;
                    RT:65000:10200 ET:8 Rmac:02:f8:b8:ff:00:00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Check arp hosts ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bash-5.0# arp &lt;br /&gt;
	Address                  HWtype  HWaddress           Flags Mask            Iface&lt;br /&gt;
	192.168.1.3              ether   aa:c1:ab:b5:79:50   C                     eth1.100&lt;br /&gt;
	192.168.1.4              ether   aa:c1:ab:0c:60:d6   C                     eth1.100&lt;br /&gt;
	192.168.2.2              ether   aa:c1:ab:23:31:04   C                     eth1.200&lt;br /&gt;
	192.168.2.254            ether   aa:c1:ab:4f:f2:e7   C                     eth1.200&lt;br /&gt;
	192.168.1.2              ether   aa:c1:ab:23:31:04   C                     eth1.100&lt;br /&gt;
	containerlab.local       ether   02:42:63:9e:74:03   C                     eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Ping ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
From client #1 /&lt;br /&gt;
&lt;br /&gt;
	L2 service ping (vlan 100) ----------------------&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.2&lt;br /&gt;
		PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.812 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 MsgRcvd&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.3&lt;br /&gt;
		PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=1.40 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.3 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.403/1.403/1.403/0.000 ms&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.1.4&lt;br /&gt;
		PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=1.62 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.1.4 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 1.619/1.619/1.619/0.000 ms&lt;br /&gt;
&lt;br /&gt;
	L3 service ping (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.1&lt;br /&gt;
		PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.053 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.1 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 1ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms&lt;br /&gt;
		bash-5.0# ^C&lt;br /&gt;
		bash-5.0# ping -c 1 192.168.2.2&lt;br /&gt;
		PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
		64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.611 ms&lt;br /&gt;
		&lt;br /&gt;
		--- 192.168.2.2 ping statistics ---&lt;br /&gt;
		1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;
		rtt min/avg/max/mdev = 0.611/0.611/0.611/0.000 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
Traceroute ///&lt;br /&gt;
-------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	L3 service traceroute (vlan 200)&lt;br /&gt;
&lt;br /&gt;
		bash-5.0# traceroute 192.168.200.1&lt;br /&gt;
		traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 46 byte packets&lt;br /&gt;
		 1  192.168.2.254 (192.168.2.254)  0.012 ms  0.010 ms  0.007 ms&lt;br /&gt;
		 2  192.168.200.254 (192.168.200.254)  2.751 ms  *  2.549 ms&lt;br /&gt;
		 3  192.168.200.1 (192.168.200.1)  2.084 ms  1.805 ms  1.761 ms&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To come back on the setup, we wanted to implement solutions inspired by the &amp;lt;nowiki&amp;gt;RFC 7938&amp;lt;/nowiki&amp;gt; rfc7938  (see section 5.2.1)&lt;br /&gt;
&lt;br /&gt;
* eBGP will be used for Underlay and Overlay&lt;br /&gt;
* eBGP single-hop sessions are established over direct point-to-point links interconnecting the network nodes, no multi-hop or loopback sessions are used, even in the case of multiple links between the same pair of nodes.&lt;br /&gt;
* Private Use ASNs from the range 64512-65534 are used to avoid ASN conflicts.&lt;br /&gt;
* A single ASN is allocated to all of the Clos topology's Tier 1 devices.&lt;br /&gt;
* A unique ASN is allocated to each set of Tier 2 devices in the same cluster.&lt;br /&gt;
* A unique ASN is allocated to every Tier 3 device (e.g., ToR) in this topology.&lt;br /&gt;
&lt;br /&gt;
In add, depending of network nodes, it will be interesting to :&lt;br /&gt;
&lt;br /&gt;
* Add fast-failover option for underlay + add link-debounce on links to limit possible impacts in case of link flaps. BFD could be considered in some cases&lt;br /&gt;
* Have the best ECMP hashing algorythm on leaf nodes. On tier-1/tier-2 levels hashing will be based on underlay part (trafic inter-vtep), so L3-L4 decision, but some models can retreive the vni-id if I well remember.&lt;br /&gt;
* Implement the &amp;quot;multipath relax&amp;quot; since we could have multiple AS paths for a same destination.&lt;br /&gt;
* Implement gshut community on underlay (on tier-1/tier-2) or at least policies to prepend underlay routes to avoid some nodes in case of maintenance.&lt;br /&gt;
&lt;br /&gt;
== Thoughts/Points to deepend ==&lt;br /&gt;
On leaf nodes, LACP over multiple nodes is feasible within ESI, but impact on incidents/maintenance can vary depending on the vendors. &lt;br /&gt;
&lt;br /&gt;
'''Tests need to be done to check that.''' &lt;br /&gt;
&lt;br /&gt;
Some sysadmin would like to KISS and have client servers connected in active/passive bonding, with eventually single-leaf ports aggregation.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' NH ESI in FIB management on ingress nodes can have some limitations (numbers of installable next-hop, load-balancing, etc. oftenly linked to the node chipset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another important engineering point to define at the beginning is : '''Do we authorize multisite L2 propagation or not ?''' &lt;br /&gt;
&lt;br /&gt;
From my point-of-view, the smaller are the L2 segments the better it is. I would suggest Local L2 segments wit anycast gateways provided by Leaf switches, with L3 routing between DCs within EVPN type5 routes sharing only. Nevertheless, some business requirements for endcustomers can keep extended L2 alive.&lt;br /&gt;
&lt;br /&gt;
We have to be careful when implementing Consistent hashing. ex: &amp;lt;nowiki&amp;gt;https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-44/Layer-3/Routing/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If possible activate it per VRF, not globally, and restrict on dedicated subnets &amp;lt;&amp;lt; depends of the vendor, it can be dangerous regarding memory management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Think at configuring the bgp option to not advertise routes to peers before they are installed in FIB.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can implement leaf roles in some cases, to be able to do &amp;quot;light traffic engineering &amp;quot; on DCI links in some setup. &lt;br /&gt;
&lt;br /&gt;
These roles will be managed within bgp communities added to VTEP /32. Look at the diagram below. Depending of the colour, the eBGP sessions between SupS will prepend or not the VTEP IPs announced to the remote DC&lt;br /&gt;
&lt;br /&gt;
[[File:Fabric-roles.jpg|ohne|mini|1200x1200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''To be continued'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab archives ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Reminder : following config are for lab, so please don't pay attention on typos/lack of security params/unused config. Thanks \o/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SRLinux : admin/&amp;lt;no_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CVX : cumulus/cumulus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lab archives ===&lt;br /&gt;
layer 2 (vlan 100) + layer 3 (vlan 200) lab, 10/12/2021 &lt;br /&gt;
[[File:20211008 lab-nokia-cvx-containerlab.zip|ohne|mini]]&lt;br /&gt;
&amp;lt;u&amp;gt;If you want to exchange about that lab, those topics, please don't hesitate to contact us&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SONiC Lab =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;to be noted that those informations are included into the readme.md file into the archive&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lab diagram ==&lt;br /&gt;
[[File:SONIC_LAB.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;Lab archive [http://wiki.intra.nesevo.com/uploads/LAB/sonic-lab-20201030.zip Attach:sonic-lab-20201030.zip]&lt;br /&gt;
&lt;br /&gt;
This lab is a forked lab from many found on @, starting from Microsoft one : https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch&lt;br /&gt;
&lt;br /&gt;
The target of this lab is to simulate a simple IP/Fabric in SPINE/LEAF topology. Each Leaf provide local L2 connectivity + L3 gateways to hosts. Flows between hosts from different leaf are L3 routed, in a &amp;quot;node path&amp;quot; LEAF-SPINE-LEAF.&lt;br /&gt;
&lt;br /&gt;
Nothing complicated, but it allows to put a first foot into SONiC world :)&lt;br /&gt;
&lt;br /&gt;
For the moment, as far as we know, MC-LAG + EVPN/VXLAN features are only available on entreprise SONiC versions. Tests to come once physic switches in enterprise version will be available in our lab.&lt;br /&gt;
&lt;br /&gt;
The diagram of the architecture is into the zip file (SONIC_LAB.jpg)&lt;br /&gt;
&lt;br /&gt;
To run the lab you need :&lt;br /&gt;
&lt;br /&gt;
- to have installed docker by using ./install_docker_ovs.sh - to run the ./load_image.sh in order to get the Sonic image&lt;br /&gt;
&lt;br /&gt;
Note : don't change file / folders names of network devices (leafX, spineX)&lt;br /&gt;
&lt;br /&gt;
Once you're ready, please run the lab by launching &amp;quot;./start.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The script :&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 	* launches the containers without Docket network features&lt;br /&gt;
 	* create network namespaces&lt;br /&gt;
 	* build linux bridges to interconnect the containers&lt;br /&gt;
 	* configure host IPs&lt;br /&gt;
 	* launch startup sonic scripts into sonic devices&lt;br /&gt;
 	* once devices started, checks + ping tests are run. If all BGP sessions are ok on spine + all ping are fine, the setup works well.&lt;br /&gt;
The &amp;quot;start&amp;quot; script has several comments, perhaps without the right vocabulary, so please be tolerant :)&lt;br /&gt;
&lt;br /&gt;
If you want to stop the lab, please launch &amp;quot;./stop.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Below some useful commands to run for sonic containers :&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;run ping&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; ping &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command triggers ping into the targetted container :&lt;br /&gt;
&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it leaf1 ping 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
PING 192.168.1.1 (192.168.1.1): 56 data bytes&lt;br /&gt;
&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.052 ms&lt;br /&gt;
&lt;br /&gt;
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.034 ms&lt;br /&gt;
&lt;br /&gt;
^C--- 192.168.1.1 ping statistics ---&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check bgp sessions&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print the bgp status.&lt;br /&gt;
&lt;br /&gt;
Below, we run it on one spine, you should have 4 sessiosn UP (for the 4 leaves)&lt;br /&gt;
&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip bgp sum&amp;quot;&lt;br /&gt;
&lt;br /&gt;
BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
&lt;br /&gt;
RIB entries 8, using 896 bytes of memory&lt;br /&gt;
&lt;br /&gt;
Peers 4, using 18 KiB of memory&lt;br /&gt;
&lt;br /&gt;
Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
&lt;br /&gt;
10.1.0.0        4 65101    6409    6411        0    0    0 01:46:46        3&lt;br /&gt;
&lt;br /&gt;
10.1.0.2        4 65102    6406    6410        0    0    0 01:46:44        3&lt;br /&gt;
&lt;br /&gt;
10.1.0.4        4 65103    6407    6410        0    0    0 01:46:44        4&lt;br /&gt;
&lt;br /&gt;
10.1.0.6        4 65104    6406    6412        0    0    0 01:46:46        1&lt;br /&gt;
&lt;br /&gt;
Total number of neighbors 4&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span&amp;gt;check ip route&amp;lt;/span&amp;gt; ===&lt;br /&gt;
sudo docker exec -it &amp;lt;container&amp;gt; vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This command sollicitates the SONiC shell of the targeted container, in order to print its routing table?&lt;br /&gt;
&lt;br /&gt;
plancastre@dockerhost:~/00.Projects/p4-version-pla$ sudo docker exec -it spine1 vtysh -c &amp;quot;show ip route&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Codes: K - kernel route, C - connected, S - static, R - RIP,&lt;br /&gt;
&lt;br /&gt;
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel,&lt;br /&gt;
&lt;br /&gt;
&amp;gt; - selected route, * - FIB route&lt;br /&gt;
&lt;br /&gt;
C&amp;gt;* 10.1.0.0/31 is directly connected, Vlan11&lt;br /&gt;
&lt;br /&gt;
C&amp;gt;* 10.1.0.2/31 is directly connected, Vlan21&lt;br /&gt;
&lt;br /&gt;
C&amp;gt;* 10.1.0.4/31 is directly connected, Vlan31&lt;br /&gt;
&lt;br /&gt;
C&amp;gt;* 10.1.0.6/31 is directly connected, Vlan41&lt;br /&gt;
&lt;br /&gt;
C&amp;gt;* 127.0.0.0/8 is directly connected, lo&lt;br /&gt;
&lt;br /&gt;
B&amp;gt;* 192.168.1.0/24 [20/0] via 10.1.0.0, Vlan11, 01:47:23&lt;br /&gt;
&lt;br /&gt;
B&amp;gt;* 192.168.2.0/24 [20/0] via 10.1.0.2, Vlan21, 01:47:21&lt;br /&gt;
&lt;br /&gt;
B&amp;gt;* 192.168.3.0/24 [20/0] via 10.1.0.4, Vlan31, 01:47:21&lt;br /&gt;
&lt;br /&gt;
B&amp;gt;* 192.168.4.0/24 [20/0] via 10.1.0.6, Vlan41, 01:47:23&lt;br /&gt;
&lt;br /&gt;
For more commands check SONiC docs : https://github.com/Azure/sonic-utilities/blob/master/doc/Command-Reference.md&lt;br /&gt;
&lt;br /&gt;
To finish, below the output of the start.sh when all goes well&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 plancastre@dockerhost:~/00.Projects/p4-version-pla$ ./start.sh &lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating the containers: starting&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 0b4bbb3c6cfc9895466ea13a9e940d1a176d66f45deee9752e9b4732d735bb03&lt;br /&gt;
 5ca9486baab3e8a5259062167132a944eee717875d3cc1ef29fe490cba3184c1&lt;br /&gt;
 46c9c09dba27a32715b9fbe0bc434a9284b9d59317d278df693f425cb669f037&lt;br /&gt;
 898e6afbcb2977115acbba2a69d069796cfd70fb90228b6c18e09ba4584365f7&lt;br /&gt;
 eb9b3ef6d14784c9ffe4d9d5df3e921a24559889cb8770d226263aad6761182a&lt;br /&gt;
 ae5f3b2c628da687eaabb331dc2cd989e71bcb386854e7a0be6ec587df99d49a&lt;br /&gt;
 122197bffd7566a01ce3b6565fdfb6eb893aab7d5236f14e5a9bbbe95037ced2&lt;br /&gt;
 a604520a080e2a2184598ad1d915c0c182d16e5185033373e95a4772d8978a67&lt;br /&gt;
 0c49e18d78b2aa7c8ef8e937b60285aa56ec0bf4a8530226285270a085e11d5c&lt;br /&gt;
 eb66336b8c6bd8333f1f4f685369e6cac973b817c35bb7126ac4d7ba72ef71bf&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Retreiving PID from docker containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network namespaces for containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 List of created namespaces&lt;br /&gt;
 ns_host4&lt;br /&gt;
 ns_host3&lt;br /&gt;
 ns_host2&lt;br /&gt;
 ns_host1&lt;br /&gt;
 ns_spine2&lt;br /&gt;
 ns_spine1&lt;br /&gt;
 ns_leaf4&lt;br /&gt;
 ns_leaf3&lt;br /&gt;
 ns_leaf2&lt;br /&gt;
 ns_leaf1&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Creating network connectivity between containers&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now assigning IPs to hosts (host1 to host4)&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Configuration of containers is now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now booting switches, please wait 2 minutes for switches to load&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 2 minutes period is finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now fixing the iptables&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Backend actions are now finished&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now we'll check in 15 sec that BGP peers are all Up&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE1 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.1.0.1, local AS number 65001&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.1.0.0        4 65101      94      97        0    0    0 00:01:28        4&lt;br /&gt;
 10.1.0.2        4 65102      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.4        4 65103      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 10.1.0.6        4 65104      95      97        0    0    0 00:01:28        5&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 SPINE2 check BGP Sessions&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 BGP router identifier 10.2.0.1, local AS number 65002&lt;br /&gt;
 RIB entries 8, using 896 bytes of memory&lt;br /&gt;
 Peers 4, using 18 KiB of memory&lt;br /&gt;
 Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd&lt;br /&gt;
 10.2.0.0        4 65101      93      96        0    0    0 00:01:29        2&lt;br /&gt;
 10.2.0.2        4 65102      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.4        4 65103      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 10.2.0.6        4 65104      94     100        0    0    0 00:01:32        1&lt;br /&gt;
 Total number of neighbors 4&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 Now if all is ok, we'll do some ping tests&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=17.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=9.14 ms&lt;br /&gt;
 --- 192.168.1.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1000ms&lt;br /&gt;
 rtt min/avg/max/mdev = 9.145/13.390/17.636/4.247 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=23.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=6.21 ms&lt;br /&gt;
 --- 192.168.2.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 6.218/14.950/23.683/8.733 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=18.8 ms&lt;br /&gt;
 64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=12.7 ms&lt;br /&gt;
 --- 192.168.3.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 12.716/15.764/18.812/3.048 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 ping its gateway&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.4.1 (192.168.4.1) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=1 ttl=64 time=17.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.1: icmp_seq=2 ttl=64 time=4.46 ms&lt;br /&gt;
 --- 192.168.4.1 ping statistics ---&lt;br /&gt;
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 4.464/11.107/17.750/6.643 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host1 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=16.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.049/17.253/19.532/1.615 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=15.5 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=14.3 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.312/15.592/16.939/1.083 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=16.0 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=20.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=16.8 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.048/17.871/20.739/2.058 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host2 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=16.9 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.222/16.583/16.924/0.286 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.6 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=18.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=26.8 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 16.620/20.549/26.887/4.524 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=33.8 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=27.7 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=20.2 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 20.216/27.259/33.818/5.566 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host3 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=14.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=19.5 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=15.5 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.535/16.549/19.541/2.162 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=16.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=14.6 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=18.2 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.643/16.458/18.278/1.491 ms&lt;br /&gt;
 PING 192.168.4.2 (192.168.4.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=1 ttl=61 time=15.3 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=2 ttl=61 time=14.1 ms&lt;br /&gt;
 64 bytes from 192.168.4.2: icmp_seq=3 ttl=61 time=13.1 ms&lt;br /&gt;
 --- 192.168.4.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 13.171/14.234/15.334/0.883 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 host4 sends 3 ping the 3 other hosts&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=21.9 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=21.3 ms&lt;br /&gt;
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=14.6 ms&lt;br /&gt;
 --- 192.168.1.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.619/19.284/21.932/3.310 ms&lt;br /&gt;
 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=1 ttl=61 time=14.8 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=2 ttl=61 time=18.4 ms&lt;br /&gt;
 64 bytes from 192.168.2.2: icmp_seq=3 ttl=61 time=14.1 ms&lt;br /&gt;
 --- 192.168.2.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2002ms&lt;br /&gt;
 rtt min/avg/max/mdev = 14.148/15.786/18.409/1.879 ms&lt;br /&gt;
 PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=1 ttl=61 time=16.2 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=2 ttl=61 time=15.1 ms&lt;br /&gt;
 64 bytes from 192.168.3.2: icmp_seq=3 ttl=61 time=18.9 ms&lt;br /&gt;
 --- 192.168.3.2 ping statistics ---&lt;br /&gt;
 3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;br /&gt;
 rtt min/avg/max/mdev = 15.117/16.788/18.962/1.612 ms&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
 If bot spine have all BGP sessions and all ping succeeded, all works well&lt;br /&gt;
 Congrats ! please check readme file to find some details&lt;br /&gt;
 ---------------------------------------------------&lt;/div&gt;</summary>
		<author><name>PierreLancastre</name></author>
	</entry>
</feed>