Skip to content

Commit

Permalink
added SRL + cEOS bgp interop (#233)
Browse files Browse the repository at this point in the history
* removed unnecessary details

* moved srlceos diagram to its own file

* temp config for srlceos case

* added srlceos example

* bump mkdocs to 6.2.4
  • Loading branch information
hellt committed Jan 14, 2021
2 parents c77177d + 5cad1a0 commit f2e0028
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 18 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/docs-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: docker run -v $(pwd):/docs --entrypoint mkdocs squidfunk/mkdocs-material:6.1.5 build --clean --strict --site-dir /tmp/mkdocs-test
- run: docker run -v $(pwd):/docs --entrypoint mkdocs squidfunk/mkdocs-material:6.2.4 build --clean --strict --site-dir /tmp/mkdocs-test
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: docker run -v $(pwd):/docs --entrypoint mkdocs squidfunk/mkdocs-material:6.1.5 gh-deploy --force --strict
- run: docker run -v $(pwd):/docs --entrypoint mkdocs squidfunk/mkdocs-material:6.2.4 gh-deploy --force --strict
2 changes: 1 addition & 1 deletion .github/workflows/manual-pubdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: docker run -v $(pwd):/docs --entrypoint mkdocs squidfunk/mkdocs-material:6.1.5 gh-deploy --force --strict
- run: docker run -v $(pwd):/docs --entrypoint mkdocs squidfunk/mkdocs-material:6.2.4 gh-deploy --force --strict
128 changes: 119 additions & 9 deletions docs/lab-examples/srl-ceos.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,133 @@
| | |
| ----------------------------- | -------------------------------------------------------------------- |
| **Description** | A Nokia SR Linux connected back-to-back with Arista cEOS |
| **Components** | [Nokia SR Linux][srl], [Arista cEOS][ceos] |
| **Resource requirements**[^1] | :fontawesome-solid-microchip: 1 <br/>:fontawesome-solid-memory: 2 GB |
| **Topology file** | [srlceos01.yml][topofile] |
| **Name** | srlceos01 |
| | |
| ----------------------------- | -------------------------------------------------------------------------------- |
| **Description** | A Nokia SR Linux connected back-to-back with Arista cEOS |
| **Components** | [Nokia SR Linux][srl], [Arista cEOS][ceos] |
| **Resource requirements**[^1] | :fontawesome-solid-microchip: 1 <br/>:fontawesome-solid-memory: 2 GB |
| **Topology file** | [srlceos01.yml][topofile] |
| **Name** | srlceos01 |
| **Version information**[^2] | `containerlab:0.9.0`, `srlinux:20.6.3-145`, `ceos:4.25.0F`, `docker-ce:19.03.13` |

## Description
A lab consists of an SR Linux node connected with Arista cEOS via a point-to-point ethernet link. Both nodes are also connected with their management interfaces to the `containerlab` docker network.

<center><div class="mxgraph" style="max-width:100%;border:1px solid transparent;" data-mxgraph="{&quot;page&quot;:6,&quot;zoom&quot;:1.5,&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;check-visible-state&quot;:true,&quot;resize&quot;:true,&quot;url&quot;:&quot;https://raw.githubusercontent.com/srl-wim/containerlab-diagrams/main/containerlab.drawio&quot;}"></div></center>
<div class="mxgraph" style="max-width:100%;border:1px solid transparent;margin:0 auto; display:block;" data-mxgraph="{&quot;page&quot;:0,&quot;zoom&quot;:1.5,&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;check-visible-state&quot;:true,&quot;resize&quot;:true,&quot;url&quot;:&quot;https://raw.githubusercontent.com/srl-wim/container-lab/diagrams/srlceos01.drawio&quot;}"></div>

## Use cases
This lab allows users to launch basic interoperability scenarios between Nokia SR Linux and Arista cEOS operating systems.

### BGP
<div class="mxgraph" style="max-width:100%;border:1px solid transparent;margin:0 auto; display:block;" data-mxgraph="{&quot;page&quot;:1,&quot;zoom&quot;:1.5,&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;check-visible-state&quot;:true,&quot;resize&quot;:true,&quot;url&quot;:&quot;https://raw.githubusercontent.com/srl-wim/container-lab/diagrams/srlceos01.drawio&quot;}"></div>

This lab demonstrates a simple iBGP peering scenario between Nokia SR Linux and Arista cEOS. Both nodes exchange NLRI with their loopback prefix making it reachable.

#### Configuration
Once the lab is deployed with containerlab, use the following configuration instructions to make interfaces configuration and enable BGP on both nodes.

=== "srl"
Get into SR Linux CLI with `docker exec -it clab-srlceos01-srl sr_cli` and start configuration
```bash
# enter candidate datastore
enter candidate

# configure loopback and data interfaces
set / interface ethernet-1/1 admin-state enable
set / interface ethernet-1/1 subinterface 0 admin-state enable
set / interface ethernet-1/1 subinterface 0 ipv4 address 192.168.1.1/24

set / interface lo0 subinterface 0 admin-state enable
set / interface lo0 subinterface 0 ipv4 address 10.10.10.1/32
set / network-instance default interface ethernet-1/1.0
set / network-instance default interface lo0.0

# configure BGP
set / network-instance default protocols bgp admin-state enable
set / network-instance default protocols bgp router-id 10.10.10.1
set / network-instance default protocols bgp autonomous-system 65001
set / network-instance default protocols bgp group ibgp ipv4-unicast admin-state enable
set / network-instance default protocols bgp group ibgp export-policy export-lo
set / network-instance default protocols bgp neighbor 192.168.1.2 admin-state enable
set / network-instance default protocols bgp neighbor 192.168.1.2 peer-group ibgp

# create export policy
set / routing-policy policy export-lo statement 10 match protocol local
set / routing-policy policy export-lo statement 10 action accept

# commit config
commit now
```
=== "ceos"
Get into cEOS CLI with `docker exec -it clab-srlceos01-ceos Cli` and start configuration
```bash
# enter configuration mode
configure
ip routing

# configure loopback and data interfaces
interface Ethernet1
no switchport
ip address 192.168.1.2/24
exit
interface Loopback0
ip address 10.10.10.2/32
exit

# configure BGP
router bgp 65001
router-id 10.10.10.2
neighbor 192.168.1.1 remote-as 65001
network 10.10.10.2/32
exit
```

#### Verification
Once BGP peering is established, the routes can be seen in GRT of both nodes:

=== "srl"
```bash
A:srl# show network-instance default route-table ipv4-unicast summary | grep bgp
| 10.10.10.2/32 | 0 | true | bgp | 0 | 170 | 192.168.1.2 (indirect) | None |
```

=== "ceos"
```bash
ceos>show ip route

VRF: default
Codes: C - connected, S - static, K - kernel,
O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,
E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,
N2 - OSPF NSSA external type2, B - BGP, B I - iBGP, B E - eBGP,
R - RIP, I L1 - IS-IS level 1, I L2 - IS-IS level 2,
O3 - OSPFv3, A B - BGP Aggregate, A O - OSPF Summary,
NG - Nexthop Group Static Route, V - VXLAN Control Service,
DH - DHCP client installed default route, M - Martian,
DP - Dynamic Policy Route, L - VRF Leaked,
RC - Route Cache Route

Gateway of last resort:
K 0.0.0.0/0 [40/0] via 172.20.20.1, Management0

B I 10.10.10.1/32 [200/0] via 192.168.1.1, Ethernet1
C 10.10.10.2/32 is directly connected, Loopback0
C 172.20.20.0/24 is directly connected, Management0
C 192.168.1.0/24 is directly connected, Ethernet1
```

Data plane confirms that routes have been programmed to FIB:
```
A:srl# ping 10.10.10.2 network-instance default
Using network instance default
PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data.
64 bytes from 10.10.10.2: icmp_seq=1 ttl=64 time=3.47 ms
```



[srl]: https://www.nokia.com/networks/products/service-router-linux-NOS/
[ceos]: https://www.arista.com/en/products/software-controlled-container-networking
[topofile]: https://github.com/srl-wim/container-lab/tree/master/lab-examples/srlceos01/srlceos01.yml

[^1]: Resource requirements are provisional. Consult with the installation guides for additional information.
[^2]: The lab has been validated using these versions of the required tools/components. Using versions other than stated might lead to a non-operational setup process.

<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/hellt/drawio-js@main/embed2.js?&fetch=https%3A%2F%2Fraw.githubusercontent.com%2Fsrl-wim%2Fcontainerlab-diagrams%2Fmain%2Fcontainerlab.drawio" async></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/hellt/drawio-js@main/embed2.js" async></script>
1 change: 0 additions & 1 deletion docs/lab-examples/srl-crpd.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ A lab consists of an SR Linux node connected with Juniper cRPD via a point-to-po
## Use cases
This lab allows users to launch basic interoperability scenarios between Nokia SR Linux and Juniper cRPD network operating systems.

Below you will find configuration instructions to setup IS-IS routing protocol on both nodes and verify the successful control and data plane operation.
### OSPF
<div class="mxgraph" style="max-width:100%;border:1px solid transparent;margin:0 auto; display:block;" data-mxgraph="{&quot;page&quot;:2,&quot;zoom&quot;:1.5,&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;check-visible-state&quot;:true,&quot;resize&quot;:true,&quot;url&quot;:&quot;https://raw.githubusercontent.com/srl-wim/container-lab/diagrams/srlcrpd01&quot;}"></div>

Expand Down
2 changes: 1 addition & 1 deletion docs/manual/topo-def-file.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ topology:
```

This topology results in the two nodes being started up and interconnected with each other using a single point-po-point interface:
<div class="mxgraph" style="max-width:100%;border:1px solid transparent;margin:0 auto; display:block;" data-mxgraph="{&quot;page&quot;:6,&quot;zoom&quot;:2,&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;check-visible-state&quot;:true,&quot;resize&quot;:true,&quot;url&quot;:&quot;https://raw.githubusercontent.com/srl-wim/containerlab-diagrams/main/containerlab.drawio&quot;}"></div>
<div class="mxgraph" style="max-width:100%;border:1px solid transparent;margin:0 auto; display:block;" data-mxgraph="{&quot;page&quot;:0,&quot;zoom&quot;:1.5,&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;check-visible-state&quot;:true,&quot;resize&quot;:true,&quot;url&quot;:&quot;https://raw.githubusercontent.com/srl-wim/container-lab/diagrams/srlceos01.drawio&quot;}"></div>

Let's touch on the key components of the topology definition file used in this example.

Expand Down
2 changes: 1 addition & 1 deletion docs/manual/wireshark.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Since containerlab leverages linux network devices, users are free to use whatev
## Packet capture, namespaces and interfaces
Capturing the packets from an interface requires having that interface name and it's network namespace (netns). And that's it.

<div class="mxgraph" style="max-width:100%;border:1px solid transparent;margin:0 auto; display:block;" data-mxgraph="{&quot;page&quot;:6,&quot;zoom&quot;:2,&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;check-visible-state&quot;:true,&quot;resize&quot;:true,&quot;url&quot;:&quot;https://raw.githubusercontent.com/srl-wim/containerlab-diagrams/main/containerlab.drawio&quot;}"></div>
<div class="mxgraph" style="max-width:100%;border:1px solid transparent;margin:0 auto; display:block;" data-mxgraph="{&quot;page&quot;:0,&quot;zoom&quot;:1.5,&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;check-visible-state&quot;:true,&quot;resize&quot;:true,&quot;url&quot;:&quot;https://raw.githubusercontent.com/srl-wim/container-lab/diagrams/srlceos01.drawio&quot;}"></div>

Keep in mind, that containers employ network isolation by the means of network namespaces. As depicted above, each container has its own network namespace which is named exactly the same. This makes it trivial to pinpoint which namespace to use.

Expand Down
5 changes: 2 additions & 3 deletions lab-examples/srlceos01/srlceos01.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@ topology:
nodes:
srl:
kind: srl
type: ixrd2
image: srlinux
image: srlinux:20.6.3-145
license: license.key
ceos:
kind: ceos
image: ceos
image: ceos:4.25.0F

links:
- endpoints: ["srl:e1-1", "ceos:eth1"]

0 comments on commit f2e0028

Please sign in to comment.