(release-25.09)= # Changes in Release 25.09 ```eval_rst .. contents:: Table of Contents :depth: 2 :local: ``` ## New Functionality * Link impairment (implemented with Linux *netem* queuing discipline) can be defined in [lab topology](links-netem) or configured/controlled with the **[netlab tc](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](links-ra) parameters * The [**files** plugin](plugin-files) 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](plugin-files-configlets) in the lab topology or [inline custom configuration](plugin-files-node-config) directly within node/group data or validation tests. (release-25.09-reports)= **New reports** * `isis-nodes` (available as text, Markdown, or HTML) reports IS-IS nodes, areas, system IDs, and IS-types * `ssh_config` report [creates an SSH configuration file](external-ssh-forwarding) you can use to establish SSH sessions with the lab devices using the _netlab_ server as a proxy host. (release-25.09-performance)= **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 data * Cache Jinja2 environments and templates * Allow more than 250 nodes in a lab topology * Change management MAC address calculation for large topologies [^MMA] [^MMA]: The node ID is usually inserted into the fourth octet of the management MAC address to deal with devices that derive interface MAC addresses from the management MAC address. This approach clearly does not work for topologies larger than 255 devices. (release-25.09-graph)= **Graphing improvements** * `isis` graph type creates a graph of IS-IS routing, including areas, color-coded circuit types, and stub networks * Graph 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](isis-platform)) * Add '--suffix' parameter to 'netlab collect' * Add per-node libvirt port forwarding * Allow regular expressions to select tests executed by the **[netlab validate](netlab-validate)** command * BGP `next-hop-self` and `rr-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 (release-25.09-device-features)= ## 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](node-debug-attribute)' capability FRR: * Configurable IPv6 RA parameters * Initial configuration template enables logging to `/tmp/logging` * Add configurable '[debug at startup](node-debug-attribute)' 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 complete `vbash` scripts) (release-25.09-device-fixes)= ## Fixes in Configuration Templates Junos * Use only relevant filter-lists in Junos policy statements Linux: * Fix DHCPv6 client on Ubuntu/Netplan ## Breaking changes (release-25.09-breaking)= Changes in the snapshot file format: * _netlab_ a `pickle` snapshot file to store the transformed lab topology data. It still generates the `netlab.snapshot.yml` file in case you want to use it with your own scripts, but no longer reads it when executing **[netlab](netlab-cli)** 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[^QIC]. [^QIC]: Which usually results in spectacular crashes because _netlab_ assumes the snapshot data is sane. ```{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 corresponding `outputs.d2.node_interfaces` system default. ## Bug Fixes (bug-fixes-25.09)= * 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` in `strings.utils` for Python 3.8 ## Documentation Fixes (doc-fixes-25.09)= * 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