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 exceptionImplement custom data type validators
Release 1.8.2
Create reports from a subset of nodes
Inspect the same variable(s) across multiple nodes
Check for Vagrant boxes or Docker containers before starting the lab and display pointers to build recipes.
Check installed Ansible collections before starting netlab up or netlab initial
New device: Sonic (based on Azure sonic-vs images). It supports IPv4, IPv6, and EBGP.
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 pluginsImplement 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 ofr1
)
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
netlab up command can reload saved device configurations instead of starting the initial device configuration process.
DHCP configuration module implements DHCP clients, DHCP servers, and DHCP relays for IPv4 and IPv6.
Lab topology can include control plane- and network services daemons running in Linux containers.
BGP configuration module supports 4-octet BGP AS numbers and large BGP communities.
Validation plugins allow you to write more powerful validation tests without creating complex Jinja2 templates
IBGP sessions to routing daemons running on Linux VMs or containers can be established with external-facing IP addresses (not just remote loopbacks).
You can set netlab defaults from the environment variables
You can build Docker containers for the supported daemons with the netlab clab build command
Configuration template search paths and filenames are no longer hardcoded. Most can be configured in system defaults using defaults.paths dictionary.
New devices and daemons:
BIRD Internet Routing Daemon with OSPF and BGP support, including minimal bgp.session support.
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_
ornetlab_
, 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). Useip neigh
,ip route
,ip addr
andip link
. If you rely onnet-tools
, add the following line to your netlab defaults:
devices.linux.group_vars.netlab_net_tools: True
LLDP is no longer enabled on Ubuntu virtual machines by default as the installation of the LLDP service increases the lab setup time (more details). If you want to have LLDP running on all Linux virtual machines in your labs, add the following line to your netlab defaults:
devices.linux.group_vars.netlab_lldp_enable: True
The clab user-defined custom configuration files are no longer expected to be in the current directory but use the device-specific configuration deployment search paths. For example, the FRR
daemons
configuration template has to be in./templates/frr/daemons.j2
.
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 pathsNode 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
optionWiring 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 moduleSR 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 abortsStop ‘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
playbookImplement 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
parameterConsider 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