Changes in Release 1.8

New Functionality

Release 1.8.4

  • Support for Cisco Catalyst 8000v

  • Unified support of vrnetlab containers (including ArubaCX, Cisco Catalyst 8000v, Cisco CSR 1000v, Dell OS10, Cisco Nexus 9000v, Mikrotik RouterOS, Juniper vMX, vPTX and vSRX)

  • Automated build of GitHub Codespaces devcontainer

  • Handle keyboard interrupts in long-running netlab commands, including netlab up, netlab initial and netlab validate.

  • Add --ready action to netlab initial command to wait for lab devices to become ready without configuring them.

New device features:

  • VyOS: support for RIPv2 and RIPng

Release 1.8.3

  • RIPv2/RIPng configuration module implemented on Arista EOS, Cisco IOS/IOS-XE, Cumulus Linux, FRR, and Nokia SR OS.

  • Implement BGP Link Bandwidth community in bgp.policy plugin. Available on Arista EOS, Cisco IOSv/IOS-XE, Cumulus Linux, FRR, and SR OS

  • Implement a BGP route server/client in bgp.session. It is available on Arista EOS, Bird, Cisco IOSv/IOS-XE, Cumulus Linux, and FRR.

  • Installation scripts work with Ubuntu 24.04. They were also tested on Ubuntu 22.04, Ubuntu 20.04, and Debian Bookworm.

  • netlab install describes Python package installation options and asks for user confirmation before installing packages as root.

  • The --user option of the netlab install command installs Python packages in the user’s .local directory.

Minor fixes in device configuration templates:

Aruba CX:

  • Reset BGP sessions after applying neighbor route-maps in bgp.policy template

FRR:

  • Load VRF kernel module during initial configuration, and disable management VRF when it is not available (#1210)

SR Linux:

  • Add +1 to allow-own-as value (#1189)

  • Fix next-hop-self for EBGP routes (#1203)

  • Add quirk to warn about BGP extended communities not being filtered (#1201)

  • Fix BGP prefix origination (#1200)

  • Fix IBGP local-as test case (#1199)

  • Add BGP export policy to filter what gets announced (#1204)

SR OS:

  • Fix ISIS context (#1188)

  • Add BGP export policy to filter what gets announced (#1204)

VyOS:

  • Support for the bgp.policy plugin (#1195)

New development tools:

  • bgp.policy integration tests

  • Implement Arista EOS and Cumulus Linux BGP and OSPF validation plugins, add integration tests for validation plugins

  • Refactor FRR BGP and OSPF validation plugin

  • Add ‘best’, ‘locpref’ and ‘med’ checks to the ‘bgp_prefix’ validation function

  • Move ‘aspath’ and ‘community’ checks into the main ‘bgp_prefix’ validation function

  • Validation plugins can Raise successful results with the log.Result exception or skip a test with the `log.Skipped exception

  • Implement custom data type validators

Release 1.8.2

Improvements in Vagrant box building process (netlab libvirt package command):

  • Automatically unpack OVA files

  • Use a temporary build directory within /tmp, resulting in cleaner source directories.

  • Use internal code to generate a Vagrant box, skipping the download of an external script and an extra copying operation.

  • The resulting Vagrant box is not compressed, resulting in significantly faster completion.

Other improvements:

  • Use defaults.paths setting when loading transformation plugins

  • Implement a mechanism to prepend/append directories to default search paths

  • Generate a warning if the topology was modified after the snapshot was created

  • IS-IS integration tests

  • Create different hostnames for VRF IP addresses (for example, r1-red instead of r1)

New device features:

  • Add box preinstall hook that copies extra Dell OS10 files to build directory (#1125)

Minor fixes in device configuration templates:

ArubaCX:

  • Enable IPv6 Router Advertisements

  • Implement VRF route redistribution between connected subnets, OSPF, and BGP

  • Reduce connect retry and advertisement interval BGP timers

Dell OS10:

  • Reduce the maximum boot waiting time to two minutes

  • Multiple BGP configuration fixes (including a fixed BGP template definition)

  • Do not set IPv6 ND on loopbacks

  • Reject lab topologies running OSPF on SVI interfaces

FRR:

  • Implement bgp.session parameters for unnumbered EBGP sessions

  • Management VRF in FRR containers

  • Use the same mechanism to build /etc/hosts in Linux/FRR containers and virtual machines

IOS/IOS XE:

  • Change loopback OSPFv3 network type to comply with RFC 5340

  • IOSv fix: configure ISIS routing process after enabling ISIS on interfaces

Nexus OS:

  • BGP community propagation on VRF EBGP sessions

  • Configuration errors in NXOS bgp.session template

  • Change loopback OSPFv3 network type to comply with RFC 5340

Nokia SR Linux:

  • Fix VRF BGP import/export policies

  • IS-IS over IPv4 unnumbered interfaces

  • Remove check for IPv6 LLA on interface EBGP sessions

  • Allow activation of IPv4 over IPv6 session and vice versa

  • Fix formatting of OSPF area ID as IPv4 address

  • Catch inter-VRF leaking scenarios without EVPN

  • Remove the hardcoded notion that stubs get implemented as loopbacks

  • Support OSPF over unnumbered ipv4 interfaces

  • Fix IS-IS cost metric configuration

  • Capture lack of IS-IS multi-topology support

Nokia SR OS:

  • Instantiate IS-IS in the correct context

  • Minor IPv6 gateway fixes

  • Set OSPF router ID

Mikrotik RouterOS7:

  • Enable IPv6 Router Advertisements using an interval of less than 30 seconds

  • Rewrite OSPF configuration template

  • Add ‘remove-private-as’ and refactor bgp.session configuration template

  • Change BGP configuration templates to use the new BGP and router redistribution configuration syntax

VyOS:

  • Restart FRR after changing the VyOS hostname

  • Refactor of bgp.session template (#1180)

New development tools:

  • Restructured bgp.session integration tests

  • Split the initial interface configuration test into addresses and MTU tests

  • Increase timeouts for GTSM and BGP password integration tests

  • New VRF integration test: BGP community propagation in VRF

Release 1.8.1

  • Refactor the netlab status printout

  • Add ‘retry tests until the timeout’ functionality to netlab validate (including the actual time it took to get the expected results).

  • Use SSH_CONNECTION local IP address when displaying the tool launch URL

  • Warn user about IBGP sessions on nodes that have no IGP

  • Display original system default path settings with the ‘netlab show defaults’ command

  • Implement feature check for VRF routing protocols and report errors when the lab topology uses unsupported protocols.

New device features:

  • OSPFv3 in VRFs, implemented on Arista EOS, Cisco IOS, Cisco IOS-XE, FRR, and Junos (vMX, vPTX, vSRX).

  • EBGP sessions over IPv4 unnumbered and IPv6 LLA interfaces on Arista EOS

  • The default Arista cEOS container version has been changed to 4.31.2F.

  • Cisco IOS XRd container support

  • Use standard Linux ‘lo’ loopback on FRR instead of ‘lo0’ dummy interface

  • Execute a series of integration tests with the device-module-test script. The results are available at https://netlab-cicd.pages.dev/

  • FRR supports VXLAN-over-IPv6

Minor fixes in device configuration templates:

Arista EOS:

  • Create next-hop-self route maps only when required

  • Reduce the IPv6 RA timer

  • Optimize OSPF convergence times

  • Configure OSPFv3 on interfaces before the interfaces are mentioned in the routing process.

Cisco IOS:

  • Optimize BGP configuration templates to improve convergence times

  • Replace ‘ipv6 ospf’ with ‘ospfv3’ commands

  • The loopback interface has to have an OSPFv3 point-to-point network type to be advertised with the configured prefix.

Cisco Nexus OS:

  • Reduce the IPv6 RA timer

  • The loopback interface has to have an OSPFv3 point-to-point network type to be advertised with the configured prefix.

  • Reduce OSPF SPF and LSA timers

  • Redistribute connected subnets into VRF OSPF instances

FRR:

  • Optimize OSPF convergence times

  • Set BGP router ID on FRR VRF BGP instances

  • Use ‘bridge fdb’ in VXLAN configuration to set the remote VTEP list

  • Remove SLAAC addresses from FRR interfaces

  • Reduce IS-IS LSP generation timers to speed up IS-IS convergence

Junos:

  • Redistribute connected subnets into VRF OSPF processes.

  • Enable RA on Junos interfaces

SROS:

  • Allow BGP next-hop resolution via LDP

New development tools:

  • Integration tests for bgp.session plugin

  • Enhance the IPv6 LLA/RFC8950 integration tests

  • Restructured VXLAN integration tests include multi-node test

  • Restructured VRF integration tests include IPv6 and OSPFv3 tests

  • netlab package includes Linux ping/route validation plugin and FRR OSPF/BGP validation plugin

  • Use ‘retry actions’ validation functionality in the initial configuration, OSPF, BGP, VLAN, VRF, and VXLAN integration tests

  • Add ‘netlab_interfaces’ list parameter to simplify configuration templates

  • Add ‘–validate’ option to ‘netlab up’ to auto-start validation

Release 1.8.0

New devices and daemons:

New device features:

  • DHCP clients on Cisco IOS, Arista EOS, Cumulus Linux, and Ubuntu VMs

  • DHCP servers on Cisco IOS, Arista EOS, dnsmasq, and Ubuntu VMs

  • VRF-aware DHCP server on Cisco IOS XE

  • DHCP relays on Cisco IOS, Arista EOS, Cumulus Linux, and Ubuntu VMs

  • Inter-VRF DHCP relay on Arista EOS and Cisco IOS XE

  • FRR can use the neighbor local-as command to create a fake IBGP session.

Minor improvements:

  • Node and group data can include any parameter starting with ansible_ or netlab_, making it easier to override Ansible variables for individual nodes.

  • Use physical interface for IBGP sessions with BGP daemons running on hosts.

Integration tests:

Release 1.8.0 includes improved BGP, OSPFv2, and OSPFv3 integration tests with automated validation.

Breaking changes

Release 1.8.0

  • The default MTU on Cumulus Linux VMs has been changed to 1500 bytes to ensure OSPFv2/OSPFv3 interoperability with other devices.

  • The netlab collect command no longer creates subdirectories with configuration files for Cumulus Linux devices. FRR configuration is stored in $nodename.cfg, ifupdown configuration in $nodename-interfaces, and FRR daemons in $nodename-frr.conf.

  • The stub link role no longer results in a passive IGP interface or BGP prefix advertisement. Instead, use protocol.passive and bgp.advertise link- or interface attributes instead.

  • groups.node_data attribute is deprecated. netlab generates a warning if you use it; future releases might throw an error.

  • net-tools (arp, route, ifconfig) are no longer installed by default on Ubuntu virtual machines as their installation increases the lab setup time (more details). Use ip neigh, ip route, ip addr and ip link. If you rely on net-tools, add the following line to your netlab defaults:

devices.linux.group_vars.netlab_net_tools: True
devices.linux.group_vars.netlab_lldp_enable: True

Bug Fixes

Bug Fixes in Release 1.8.4-post2

  • Save FRR running configuration (#1233)

  • Add missing __init__.py files in FRR validation modules (#1232)

Bug Fixes in Release 1.8.4-post1

  • Convert OSPF areas specified as integers into IP addresses (for example, area 0 becomes area 0.0.0.0)

  • A validation logging message was printed before the log system was initialized

  • Extra initial validation delay is no longer needed on vPTX

Bug Fixes in Release 1.8.4

  • Add missing IOS XR initial configuration file

  • Fix OSPFv3 unnumbered integration test

  • Rewrite FRR/clab modprobe test to work around Ansible stupidities

Bug Fixes in Release 1.8.3

  • Recreate topology.sys data when printing ‘connect to tool’ message in ‘netlab connect’

  • Check overlap with node names before creating BGP groups (fixes #1193)

  • Bug fix: use an older version of the Graphite container

  • Execute node custom configs after plugin custom configs (fixes #1198)

  • Don’t skip VXLAN module if a node has EVPN L3VNIs (fixes #1197)

  • bgp.session: Make ‘locpref’ and ‘med’ link/interface attributes

  • Report an error when a device template is not found in custom config directory

  • Update template file name rendering for custom configs in subdirectories (#1208)

  • Use absolute path to kvm-ok, document workarounds (fixes #1205)

  • Install libssh-dev (required by ansible-pylibssh on Ubuntu 24.04)

Bug Fixes in Release 1.8.2

  • Addressing report breaks in IPv4-only networks

  • Do not include missing directories in the evaluated search paths

  • Add system defaults (/etc/netlab) directory to search paths

  • Node name in links.interfaces should be a node_id

  • Create the box-building ASAv virtual machine using an XML template

  • Cleanup box building environment after a KeyboardInterrupt

  • Use explicit MTU in OSPF, BGP, VRF, and VXLAN integration tests

  • IBGP local-as is not supported on ArubaCX

  • Use ‘stub_loopback’ device setting before the system default

  • Always execute ‘vagrant box list’ and ‘docker images ls’, even when starting netlab up with --dry-run option

  • Wiring report crashes if an interface has no neighbors

  • netlab status should survive labs with missing ‘status’

  • Use low static VNI in multivendor VXLAN test

  • isis.network_type attribute could be a bool

  • Improve parsing of JSON results in netlab validate

  • Print error messages when failing to load validation plugins or when a validation plugin does not have the required action

  • Pass netlab connect -q flag to the logging module

  • SR Linux: Fix path to root CA for ‘netlab collect’

  • SR Linux: Cannot configure L2 MTU on IXR-H platforms

  • Clear BGP sessions after configuring parameters in bgp.session plugin

Bug Fixes in Release 1.8.1-post2

  • Node name in links.interfaces should be a node_id (not a generic identifier)

  • Addressing report fails in IPv4-only networks

Bug Fixes in Release 1.8.1-post1

  • Native routed VLAN does not work with a VLAN trunk on l3-switches (fixes #1088)

  • Create Vagrant box metadata in ‘netlab libvirt’ (fixes #1089)

  • Initialize the VRF ID/RD data structures when there are no global VRFs

  • Improve the definition of ‘identifier’ data type

  • Display a warning when removing a routing protocol module from a node (fixes #1094)

  • Generate a warning if a node has no active VRFs (fixes #1093)

  • Do not delete VRFs from node ‘vrfs’ dictionary if the node has VRF loopbacks

  • SROS: Fixes to accommodate IXR-X devices (#1103)

  • SR Linux: Fix asymmetric IRB configuration (#1107)

  • Dell OS10: Improvements/Fixes on EVPN+BGP+IPv6 (#1105)

  • SR OS: Fix sap id logic (#1101)

  • SR Linux: Fix BGP communities inside VRFs (#1100)

  • Execute ‘netlab initial -o’ on systems without viable Ansible connection

  • Quote config directory name passed from ‘netlab initial’ to Ansible

  • Transform MPLS module after VRF module (fixes #1096)

  • Dell OS10: fixes in VRF+BGP (#1090)

  • Assign a unique Router ID to every IOSv OSPF process (fixes #1066)

  • Junos quirk: a routing instance can have only one loopback (fixes #1065)

  • VyOS: Configure BGP router-id in IPv6-only VRFs (#1082)

  • VyOS: controlled BGP community propagation (#1080)

  • VyOS: fix VRF route leaking without BGP module (#1078)

  • VyOS: add cluster-id in rr config (#1075)

  • VyOS: support for sending IPv6 RA (#1076)

Bug Fixes in Release 1.8.1

  • strings.confirm function catches SIGINT and aborts

  • Stop ‘netlab down’ complaints with the double ‘–force’ option

  • Missing BGP prefix from a stub network in IPv6 BGP RR integration test

  • Fix Arista EOS VRF IPv6 routing typo

  • Set PYTHONPATH when running netlab from a Git repo

  • get_globbed_files should deal with path-as-string

  • Allow a list of target states in the FRR BGP validation plugin

  • Touch lock file in ‘netlab initial’ to extend ‘netlab validate’ delays

  • Use ‘bridge fdb’ on FRR instead of ‘ip link’ to set remote VTEP

  • Add ‘–skip-missing’ to ‘netlab validate’

  • ‘netlab status’ should return an error status if no labs are running

  • Choices of -t parameter of ‘netlab graph’ must be a list

  • Hints added to warnings should not get into ERROR_LOG

  • Python 3.12 does not like an ASCII smiley :(

  • Add ‘state=missing’ parameter to OSPF/OSPFv3 prefix validation

  • FRR needs router-id in VRF BGP in IPv6-only deployments

  • VXLAN is not implemented for vPTX

  • Catch exception thrown by `os.getcwd()

  • ‘netlab validate’ passed insufficient args to ‘netlab connect’

  • Return an error if ‘netlab show defaults’ cannot find the requested value

  • Text-only addressing report crashed in IPv6-only networks

  • Copy node OSPF data into VRFs and loopback interface to simplify config templates

  • FRR uses different JSON data structures for OSPFv2 and OSPFv3 routes

  • Don’t change multi-provider VLAN members to LAN links

  • Libvirt provider should batch only nodes using libvirt

  • Use double underscores in environment variables

  • Check that the ‘–node’ parameter in ‘netlab inspect’ is an identifier

  • NXOS template did not turn off switchport on L3 VLAN access links

Bug Fixes in Release 1.8.0-post2

  • Check the IOS XR management IP address only for the libvirt provider

  • Cannot mix include-tasks and import-tasks in recent Ansible versions

  • Cleanup the ‘using netlab from Git repo’ setup script

Bug Fixes in Release 1.8.0-post1

  • SSH options should be in key=value format

  • Create D2 links between LAN networks and nodes-in-clusters

  • Prevent vagrant complaining about vif interface names in multilab

  • Remove double curly braces from f-strings

Bug Fixes in Release 1.8.0

  • Make common error header optional when calling log.fatal

  • Unify configuration collection from FRR and Cumulus Linux

  • Collect Cumulus Linux configuration into the main output directory

  • Don’t prettify YAML output values that are not structured

  • ArubaCX EVPN VRF w/o L3VNI

  • Set LIBVIRT environment variables to have a consistent box-building environment

  • Replace Jinja2 logic when generating host-to-IP mappings with Ansible variable

  • Retain the order of configuration module deployment in the initial-config playbook

  • Implement warning-level error messages

  • Improve logging and error reporting in the ‘netlab libvirt package’ command.

  • Adapt to stricter IPv4 address checks introduced in netaddr 1.1.0

  • Avoid overloaded Ansible variable name

  • Add netlab directory to shell search path

  • Use shared task lists to deploy config templates with the netlab config command.

  • netlab initial could not configure the module(s) specified in the --module parameter

  • Consider the lab topology directory and current directory when searching for configuration templates.

Documentation Fixes

Documentation Fixes in Release 1.8.4-post2

  • clab configuration template search path for user-specified templates has changed in release 1.8.0

Documentation Fixes in Release 1.8.4-post1

  • FRR supports IPv4 EBGP AF over IPv6 LLA

Documentation Fixes in Release 1.8.3

  • FRR containers need the VRF kernel module on the host

Documentation Fixes in Release 1.8.2

  • Move generic box-building caveats into a single file

  • The ‘EVPN needs an AS’ hint should be more explicit

  • Updated Dell OS10 Ansible-related information

  • Update URL for the latest ArubaCX release

  • Optimized Aruba CX box-building recipe

  • Simplify RouterOS7 box building process

  • Updated platform documentation and added pointers to build recipes

  • Add a ‘write/reload’ step to dellos10 build recipe

  • nokia.grpc collection works with Ansible release 9.5.1

  • Describe how to get kvm-ok on non-Ubuntu distros

  • Document IS-IS caveats

  • Update Links between Network Devices documentation

Documentation Fixes in Release 1.8.1-post1

  • Explain why you can’t change a multilab-controlled setting (fixes #1102)

  • Explain the interaction between global- and node VRFs

  • Document Linux commands used by netlab (fixes #1097)

  • Enable RSA SSH keys on AlmaLinux to use Cisco IOSv (fixes #1098)

Documentation Fixes in Release 1.8.1

  • Use environment variables to set Multilab parameters

Documentation Fixes in Release 1.8.0-post2

  • Caveat: you might have to install MPLS drivers on Ubuntu

  • Caveat: IOS XR enables the SSH server before it configures users

Documentation Fixes in Release 1.8.0

  • Changed documentation theme colors and dark mode

  • Better description of custom group Ansible variables

  • RouterOS CHR upload limits and trial license usage.

  • Describe the handling of physical interface attributes on VLAN access links

  • Slightly rewritten vEOS Vagrant box configuration instructions

  • Add missing ‘netlab show’ commands to help file, fix typos