Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vxlan auto pull vlans and vrfs #405

Closed
wants to merge 34 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
0720ec1
EBGP underlay_as enhancements (#362)
jbemmel Aug 28, 2022
8c69dec
Disable address on bridge-only access VLANs and VLAN trunks. Fixes #3…
ipspace Aug 29, 2022
8902281
Added a test case for #361
ipspace Aug 29, 2022
2c55072
Implement per-VRF BGP router ID on Cisco IOS and Arista EOS
ipspace Aug 30, 2022
289195f
Config fix: Cisco IOS needs VLAN encapsulation on VRF-enabled subinte…
ipspace Aug 30, 2022
ba65edc
bgp.local_as implemented in the BGP configuration module
ipspace Aug 30, 2022
7411069
Configurable BGP transport sessions (#365) plus a redesign of BGP mod…
ipspace Aug 31, 2022
8ddf439
Rename 'replace_real_as' to 'replace_global_as'. Fixes #367
ipspace Sep 1, 2022
0f2285c
Implement 'message' attribute that's displayed after successful 'netl…
ipspace Sep 1, 2022
a76ba69
Implement 'localas_ibgp' on Cisco IOSv/IOS XE (see #368)
ipspace Sep 1, 2022
fd5849c
Configurable default BGP address families (implements #366)
ipspace Sep 1, 2022
9574892
Implement localas_ibgp on Arista EOS
ipspace Sep 1, 2022
579d990
EVPN IBGP-over-EBGP lab using new BGP attributes (and no plugin)
ipspace Sep 1, 2022
8580a13
Configurable BGP default AF on FRR and Cumulus Linux 4.0
ipspace Sep 2, 2022
d79c422
Nokia SR Linux: Set type of L2-only VRFs to mac-vrf (#373)
jbemmel Sep 2, 2022
2e707ff
Nokia SR Linux: Update BGP template to use the latest BGP parameters …
jbemmel Sep 2, 2022
91b355c
Support clab startup-config parameter (#374)
jbemmel Sep 2, 2022
a689633
Changed containerlab download url in install script (#382)
pbe9216 Sep 4, 2022
376a422
Clean up 'unnumbered EBGP sessions' code + Cumulus 4.x implementation
ipspace Sep 4, 2022
b1438cd
Nokia SR Linux RFC8950 support (#385)
jbemmel Sep 5, 2022
3099628
Bump Cumulus Linux version from 5.0.1 to 5.2.0
ipspace Sep 5, 2022
2d7df9f
Add dependency check for ansible-galaxy in gRPC installation script (…
jbemmel Sep 5, 2022
3c0be9b
Bug fix: CumulusLinux 5.x NVUE must use OSPF network statements (fixe…
ipspace Sep 5, 2022
c14b46e
Bug fix: CL NVUE configures unnumbered interface by setting its IP ad…
ipspace Sep 5, 2022
eb6acdc
Cumulus Linux NVUE: Implement new BGP attributes (default AF, RFC 8950)
ipspace Sep 5, 2022
db95abb
Enable BGP ipv6 unnumbered and local-as for FRR (#392)
jbemmel Sep 6, 2022
1ef2e57
Add srlinux support for ebgp.utils plugin (#395)
jbemmel Sep 6, 2022
68862ca
SR Linux: Implement BGP route policies to export only specific prefix…
jbemmel Sep 6, 2022
8c871e2
SR LInux: fix IPv6 LLA handling in ebgp.utils (#396)
jbemmel Sep 6, 2022
1fc4857
SR Linux: Refactor ebgp policies to propagate all bgp prefixes by def…
jbemmel Sep 6, 2022
af60a88
Remove obsolete ebgp-local_as plugin (#398)
jbemmel Sep 6, 2022
c831408
Docfix: CL 5.0 with NVUE cannot configure IBGP between loopbacks (#389)
ipspace Sep 7, 2022
f2433f2
Update doc to show current interface naming
jbemmel Sep 8, 2022
d773c77
This adds a 'node_pre_default' hook in the vxlan module (first such m…
jbemmel Sep 8, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/addressing.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ addressing:
* Management IP addresses are assigned from 192.168.121.0/24 CIDR block. The first IP address is 192.168.121.101 (*start* offset plus node ID)
* MAC addresses of management interfaces start with 08-4F-A9. The last byte of the MAC address is the node ID.

(addressing-unnumbered)=
## Unnumbered Interface Support

*netlab* supports unnumbered IPv4 and IPv6 interfaces:
Expand Down
22 changes: 22 additions & 0 deletions docs/caveats.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,28 @@
* *netlab* uses Cumulus VX containers created by Michael Kashin and downloaded from his Docker Hub account. Once Nvidia releases an official container image, change the container name with **defaults.devices.cumulus.clab.image** parameter (or by editing the `topology-defaults.yml` file included with *netlab*).
* The Cumulus VX 4.4.0 Vagrant box for VirtualBox is broken. *netlab* is using Cumulus VX 4.3.0 with *virtualbox* virtualization provider.

(caveats-cumulus-nvue)=

## Cumulus 5.0 with NVUE

You could configure Cumulus Linux 5.0 with configuration templates developed for Cumulus Linux 4.0 (use device type **cumulus** and specify desired device image), or with NVUE.

NVUE has several shortcomings that prevent *netlab* from configuring basic designs like IBGP on top of IGP. Don't be surprised if the labs that work with **cumulus** device don't work with **cumulus_nvue** device, and please create a GitHub issue whenever you find a glitch. We'd love to know (at least) what doesn't work as expected.

To run Cumulus Linux 5.x with **cumulus** device type, add the following lines to your lab topology:

```
defaults.devices.cumulus.libvirt.image: CumulusCommunity/cumulus-vx:5.2.0
defaults.devices.cumulus.libvirt.memory: 2048
```

Alternatively, you could add the following lines to your `~/.topology-defaults.yml` file:

```
devices.cumulus.libvirt.image: CumulusCommunity/cumulus-vx:5.2.0
devices.cumulus.libvirt.memory: 2048
```

## Fortinet FortiOS

* *FortiOS* VM images by default have a 15 day evaluation license. The VM has [limited capabilities](https://docs.fortinet.com/document/fortigate-private-cloud/6.0.0/fortigate-vm-on-kvm/504166/fortigate-vm-virtual-appliance-evaluation-license) without a license file. It will work for 15 days from first boot, at which point you must install a license file or recreate the vagrant box completely from scratch.
Expand Down
2 changes: 1 addition & 1 deletion docs/dev/config/vlan.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ devices:
features:
vlan:
model: router
svi_interface_name: "{ifname}.{vlan}"
svi_interface_name: "irb0.{vlan}"
subif_name: "{ifname}.{subif_index}"
vyos:
features:
Expand Down
1 change: 1 addition & 0 deletions docs/dev/guidelines.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ The easiest way to get started is to [add support for a new platform for an exis
device-box.md
device-features.md
devices.md
unnumbered.md
```

```eval_rst
Expand Down
80 changes: 80 additions & 0 deletions docs/dev/unnumbered.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Unnumbered Interfaces

*netlab* supports unnumbered IPv4, IPv6 (LLA) or dual-stack interfaces. There are two ways to create an unnumbered interface (or link):

* Set **unnumbered: true** on interface[^NLA] or link.
* Set **ipv4** and/or **ipv6** attribute to *True*.

**unnumbered** attribute is translated into **ipv4** and/or **ipv6** attributes set to *True* based on address families configured on node's loopback interface. With the default addressing setup, **unnumbered: True** results in **ipv4: True**, to enable dual-stack unnumbered interfaces with **unnumbered** attribute, add **ipv6** prefix to the **loopback** addressing pool. For more details, see [unnumbered interfaces](addressing-unnumbered) part of [addressing](../addressing.md) document.

## Implementing unnumbered interfaces

There is no standard way of implementing IPv4 unnumbered interfaces, and they might not be available on all platforms. IPv4 implementations of unnumbered interfaces usually use the loopback IPv4 address as the interface IPv4 address. For more details, read the [unnumbered interfaces](https://blog.ipspace.net/series/unnumbered-interfaces.html) series of blog posts on ipSpace.net.

Unnumbered IPv6 interfaces should use link-local addresses, a standard IPv6 feature.

If your device supports IPv6 LLA-only interface, set `topology-defaults.yml` attribute **devices._name_.features.initial.ipv6.lla** to *True*.

If your device supports IPv4 unnumbered interfaces, set `topology-defaults.yml` attribute **devices._name_.features.initial.ipv4.unnumbered** to *True*.

## Integration with IGP routing protocols

OSPF and IS-IS implementations might support unnumbered IPv4 interfaces[^OSPFv3]. The routing protocol configuration modules detect unnumbered IPv4 interfaces by checking the **unnumbered** and **ipv4** attributes -- if either one of them is set to *True*, the interface is an unnumbered IPv4 interface.

OSPFv2 can use unnumbered IPv4 interfaces on point-to-point links. If your device supports this functionality, set `topology-defaults.yml` attribute **devices._name_.features.ospf.unnumbered** to *True*. OSPFv2 cannot run over multi-access unnumbered IPv4 links.

Some IS-IS implementations support unnumbered IPv4 P2P links. If your device supports this, set `topology-defaults.yml` attribute **devices._name_.features.isis.unnumbered.ipv4** to *True*.

Fewer IS-IS implementations support unnumbered multi-access IPv4 links. To indicate your device can do that, set `topology-defaults.yml` attribute **devices._name_.features.isis.unnumbered.network** to *True*.

```{note}
If you're unsure what your device can do, set all three feature flags to *True*, start a lab, and check whether the adjacency- and routing tables are populated as expected.
```

## Unnumbered EBGP sessions

Several vendors implemented EBGP sessions between well-known IPv6 LLA addresses[^EBGP_LLA]. *netlab* does not support this half-baked attempt and implements IPv6 LLA sessions only for those devices that can configure EBGP session *on an interface*.

Devices supporting interface-level EBGP sessions between auto-generated IPv6 LLA can use these sessions to:

* Transport IPv6 prefixes with LLA next hop over IPv6 AF
* Transport IPv4 prefixes with IPv6 LLA next hop according to RFC 8950.

*netlab* core and BGP configuration module do not support:

* Running IPv4 AF with IPv4 next hops over IPv6 transport session
* Running IPv4 AF with RFC 8950-style IPv6 next hops over numbered IPv6 interfaces or over IBGP sessions.
* Creating IBGP sessions between IPv6 LLA addresses

```{note}
You can always extend *netlab* functionality with plugins and custom configuration modules.
```

*netlab* will create an IPv6 LLA EBGP session whenever it finds a pair of devices connected to the same link if the devices:

* Belong to different autonomous systems
* Have **ipv6** interface attribute set to *True*.

Whenever *netlab* encounters an EBGP session between IPv6 LLA interfaces, it sets **local_if** attribute in the neighbor data structure to simplify the device configuration templates.

If your device supports EBGP sessions between auto-generated IPv6 link-local addresses, set `topology-defaults.yml` attribute **devices._name_.features.bgp.ipv6_lla** to *True*.

*netlab* device configuration templates will enable RFC 8950-style IPv4-over-IPv6 address family on IPv6 LLA sessions if the interface has **ipv6** interface attribute set to *True* (indicating IPv6 LLA EBGP session) AND **ipv4** interface attribute set to *True*.

RFC 8950-style IPv4 address family [REALLY SHOULD NOT](https://www.rfc-editor.org/rfc/rfc6919#section-3) be enabled for:

* EBGP sessions running on numbered IPv6 interfaces
* Interfaces with IPv4 addresses regardless of the state of **ipv6** attribute.

BGP configuration module simplifies the device configuration templates conforming to the above restriction with the **ipv4_rfc8950** neighbor attribute which is set:

* when link or interface **unnumbered** attribute is set to *True* on both EBGP neighbors or
* when both IPv4 and IPv6 interface attributes are set to *True* on both EBGP neighbors.

If your device supports RFC 8950 (IPv4 with IPv6 next hops) on EBGP sessions between auto-generated IPv6 link-local addresses, set `topology-defaults.yml` attribute **devices._name_.features.bgp.rfc8950** to *True*.

[^NLA]: node-to-link attachment

[^OSPFv3]: OSPFv3 runs over IPv6 LLA. Decent IS-IS implementations should support IPv6 LLA-only segments. *netlab* therefore does not check whether an implementation supports IPv6 LLA-only segments.

[^EBGP_LLA]: An EBGP neighbor has to be configured using remote IPv6 LLA address and an interface name.
Loading