Changes in Release 25.09
New Functionality
Link impairment (implemented with Linux netem queuing discipline) can be defined in lab topology or configured/controlled with the netlab tc command
New device: Nokia SR-SIM
Specify the lab topology in the netlab create/up command as a filename or URL
Configurable IPv6 Router Advertisement parameters
The files plugin allows you to store the content of short files directly in the lab topology, making it easier to create portable lab topologies that can be downloaded from the Internet (including straight from GitHub repositories).
The functionality of the files plugin allows you to define shared custom configuration templates in the lab topology or inline custom configuration directly within node/group data or validation tests.
New reports
isis-nodes
(available as text, Markdown, or HTML) reports IS-IS nodes, areas, system IDs, and IS-typesssh_config
report creates an SSH configuration file you can use to establish SSH sessions with the lab devices using the netlab server as a proxy host.
Performance and scalability improvement
Shared container files (for example, /etc/hosts shared across all Linux and FRR containers) significantly reduce the lab creation time in large topologies.
Use Python
pickle
instead of YAML to create a snapshot file of the transformed topology dataCache Jinja2 environments and templates
Allow more than 250 nodes in a lab topology
Change management MAC address calculation for large topologies [1]
Graphing improvements
isis
graph type creates a graph of IS-IS routing, including areas, color-coded circuit types, and stub networksGraph titles can be defined with the graph.title topology parameter
BGP graphs can display a subset of address families. They can also display VRF BGP sessions as dashed lines.
Add ‘color’, ‘width’, and ‘fill’ attributes to GraphViz and D2 graphs
Add localas_ibgp/confed_ebgp session styling to D2/GraphViz graphs
Minor improvements
Implement select IGP parameters on the primary loopback interface, allowing you to disable an IGP on the loopback interface, or set the loopback OSPF area or OSPF/IS-IS cost.
Enable setting IS-IS circuit type at interface level (implemented on all platforms supporting IS-IS)
Add ‘–suffix’ parameter to ‘netlab collect’
Add per-node libvirt port forwarding
Allow regular expressions to select tests executed by the netlab validate command
BGP
next-hop-self
andrr-client
attributes (previously computed in the configuration templates) are calculated in the BGP data transformation code, ensuring consistent multi-vendor deployments and enabling a complete IBGP local-as implementation. The new attributes are used on Arista EOS, Cisco IOS/IOS-XE, and FRR.Add ‘–format’ parameter to ‘netlab graph’ command
Graphing software installation script
New Device Features
Arista EOS:
Configurable IPv6 RA parameters
IS-IS circuit-type and IS-IS BFD support for IPv6
Remove lldp commands that trigger an Arista EOS bug from collected configurations
Aruba CX:
Support for VLAN-aware EVPN bundles
Cisco IOS:
Configurable IPv6 RA parameters
Use ‘send-community both’ on IOS/XE longing to be back in the 90s
Add configurable ‘debug at startup’ capability
FRR:
Configurable IPv6 RA parameters
Initial configuration template enables logging to
/tmp/logging
Add configurable ‘debug at startup’ capability
Change default release to 10.4.1
Junos:
Support for explicit EVPN VLAN-aware bundle on vJunos-switch
Originate BGP default route on VRF EBGP sessions
Linux:
Enable IPv6 LLA-only interfaces
SR Linux:
Change default release to 25.7.1
VyOS:
Use a
vbash
wrapper to support simpler configuration templates that contain just the set commands (previous configuration templates were always completevbash
scripts)
Fixes in Configuration Templates
Junos
Use only relevant filter-lists in Junos policy statements
Linux:
Fix DHCPv6 client on Ubuntu/Netplan
Breaking changes
Changes in the snapshot file format:
netlab a
pickle
snapshot file to store the transformed lab topology data. It still generates thenetlab.snapshot.yml
file in case you want to use it with your own scripts, but no longer reads it when executing netlab commands.The snapshot file (pickle and YAML version) includes the
_netlab_version
key, which is checked when reading the snapshot data, making it harder to accidentally specify another YAML file as the snapshot file[2].
Warning
Due to the snapshot file format changes, shut down all lab instances before upgrading to release 25.09.
Other potentially-breaking changes:
The D2 graph styling is now defined in the defaults.outputs.d2.styles dictionary. The mapping of extra styling attributes is defined in the defaults.outputs.d2.style_map dictionary. netlab automatically migrates previously defined custom styling of node types, IBGP, and EBGP sessions before creating the graph.
The D2
interfaces
feature is no longer available. We removed the correspondingoutputs.d2.node_interfaces
system default.
Bug Fixes
Use ‘_netlab_version’ attribute to check the validity of the snapshot file (#2662)
Recognize provider- and output- global attributes
‘netlab collect’ does not need to load the topology snapshot
Display the correct netlab command in the subcommand parser help
Bump containerlab version to 0.69.3 (#2651)
Add VRF information to BGP neighbor data (#2639)
Fix a missing f-string in libvirt.py (#2636)
Make “bgp._session_clear” VRF-aware (#2630)
Add “ruff check” to GH actions, clean up the imports (#2627)
Refactor ‘interface_feature_check’ in link transformation code
Add plugin usage statistics (#2595)
Recognize absolute/relative paths in ‘netlab config’ (#2587)
Include VRF BGP sessions in the BGP graph (#2596)
Check ‘next-hop-self force’ on all IBGP sessions in localas-ibgp test
Recognize absolute directory paths in collect-configs playbook (#2586)
Add the ‘error’ data type to warn users about missing plugins (#2579)
Implement “float” and “time” data types (#2620)
Remove FRR release pin from the EVPN EBGP integration test
Check IPv4 and IPv6 IBGP session in LLA/Locpref test
Add netlab environment variables to reporting environment
Make the ifname of host-side part of vEth pair unique (#2570)
Allow output-specific attributes in group node data (#2566)
Use yaml to parse netlab environment variables
Device-specific attributes like ios.debug can be global
Add split_line attribute to list validation
Use shared logic to generate (consistent) D2 and GraphViz graphs
Add IS-IS circuit type to capabilities displayed by show module
Add unique (text) ID to netlab statistics file
Enable device-specific attributes regardless of lab devices
Set ‘rr_client’ and ‘next_hop_self’ attributes on BGP neighbor data
A router with localas_ibgp session MUST change NH on all IBGP routes
Missing f-string in links RA error messages
Include environment variables when generating graphs
Print defaults set from environment variables in -vv mode
Implement
str.removeprefix
instrings.utils
for Python 3.8
Documentation Fixes
Clarify the “clab.config_template” example
Add testing instructions to the Ubuntu installation document
Clean up the generic Linux installation documentation
Document the “no lldp transmit/receive” EOS SNAFU (#2584)
Expand the list of contributors
Google Cloud can enable nested virtualization via CLI/API
Document device debugging approaches
Change all stale vrnetlab URLs to the actual location
Document vJunosEvolved VM gotchas