# Changes in Release 25.11 ```eval_rst .. contents:: Table of Contents :depth: 2 :local: ``` (release-25.11)= ## New Functionality * The **[netlab graph](netlab-graph)** command can generate PNG/SVG/JPEG/PDF graphs if you have D2 or Graphviz installed * You can generate [reports](netlab-report) and [graphs](netlab-graph), or inspect transformed topology data without starting a lab * You can use device-based groups (for example, **eos** or **frr** groups) to set node attributes ([breaking change](release-25.11-breaking-groups)). Previously, these groups could be used solely to set Ansible group variables. * Internal **ipaddr**/**hwaddr** Jinja2 filters (see also [](release-25.11-breaking)) **Minor improvements** * Make netlab documentation available on [GitHub Pages](https://ipspace.github.io/netlab/) * When needed, unzip disk images in the **[netlab libvirt package](netlab-libvirt-package)** command * Calculate missing OSPF interface timers * Warn about Ansible 12.x installation instead of giving up immediately * The **[files](plugin-files)** plugin refuses to create files outside of the lab directory * Use a generic "wait for SSH server" readiness test for all vrnetlab-based containers * Use a generic "wait for the first physical interface" readiness test for all Junos-based devices * Add **clab.network-mode** node setting to [disconnect a node from the management network](clab-network-mode) (needed in labs with more than ~1000 devices) * Generate warnings for EVPN and L3VPN BGP sessions without extended communities (release-25.11-device-features)= ## New Device Features Cisco IOS/XE: * [SRv6](module-srv6) support on Catalyst 8000v, IOL, and IOLL2 OpenBSD: * [RIPv2 and RIPng](module-ripv2) support * Redistribution of static/connected routes into OSPFv2/OSPFv3 (release-25.11-device-fixes)= ## Minor Device Changes and Configuration Templates Fixes FRRouting: * Change default release to 10.5.0 SR Linux: * Change default release to 25.10.1 Junos: * Use **next_hop_self** and **rr_client** BGP neighbor attributes in BGP configuration template * Set next-hop-self in Junos BGP policies only for IPv4/IPv6 AF Mikrotik RouterOS: * Change default release to 7.18.2 ## New Developer Documentation * BGP configuration templates * RIPv2/RIPng configuration templates (release-25.11-breaking)= ## Breaking changes ### Built-in ipaddr/hwaddr Jinja2 Filters The [drastic changes made in Ansible core release 2.19](https://blog.ipspace.net/2025/09/netlab-25-09-post1/) broke several built-in netlab templates, forcing us to use Ansible 11.x with netlab release 25.09-post1. _netlab_ used core- and **ipaddr** Ansible filters in its Jinja2 templates, but even the import of these filters triggered the changes in Jinja2 behavior, making a clean split with Ansible *in core netlab code* the only viable option. The device configuration templates are not affected as they're rendered within an Ansible playbook. _netlab_ release 25.11 implements its own version of **ipaddr** and **hwaddr** filters, which provide the small subset of functionality required in built-in Jinja2 templates. This change might break customized provider configuration file templates, custom daemon configuration files, complex validation code using Jinja2 expressions, or custom reports. ```{warning} While the built-in Jinja2 templates are used to generate daemon configuration files, the **‌netlab initial --output** command still uses an Ansible playbook (and Ansible filters) to generate them. You can find the correct version of the daemon configuration files in the **‌clab_files/_node_** directory. We plan to fix this behavior in the next _netlab_ release. ``` Please open an issue if you need an Ansible filter or **ipaddr** behavior that we did not implement. (release-25.11-breaking-groups)= ### Device-Based Groups Previous _netlab_ releases allowed you to specify members of a device group (for example, **eos** or **frr** group). Starting with release 25.11, _netlab_ builds the member list of device groups from node **device** attribute, and reports an error if you define a **member** list in such a group. (bug-fixes-25.11)= ## Bug Fixes * Remove readiness check for libvirt IOS-XR * Ensure that the 'indent' filter is not called on an empty string * Replace symlinks in VRF config templates with file paths * Set bgp.advertise on main loopback to simplify BGP config templates * Disable Sphinx "strikethrough only works in HTML" warnings * Avoid superfluous EBGP sessions for BGP Confederation members within the same sub-AS * Check IPv4/IPv6 session activation in per-AF BGP graphs * Handle an edge case of 'template/base' configlet (#2738) * Add integration test support for Python 3.14 (#2737) * Initial configuration fails when intf.ipv4 is undefined (#2769) * Fix 'when' conditions in Ansible playbooks/task lists (#2764) * Selective execution of create/config steps in integration tests * Use importlib to test module import in the 'netlab version' command * Tweak VRF tests to cope with Schroedinger ping * Fix SR Linux version detection (#2793) * Check variable type of netlab **defaults** when initializing the list of modules * Fix: bgp.originate plugin borked 'module' attribute on hosts * Mark netsim package as mypy-typed * Move CL "is NVUE ready" check into readiness-check task list (#2790) * FRR: Use 'rr_client' neighbor attribute to configure EVPN RR client (#2783) * Fix: Convert IOLL2 VLAN template symlinks into includes (#2781) * Simplify BGP per-AF neighbor activation logic (EOS, FRR, IOS) (#2779) * ArubaCX: Check for static route nexthop data before using it (#2786) (doc-fixes-25.11)= ## Documentation Fixes * Add information on build **netscaler** containers * Describe how the DHCP module builds DHCP pools * Try using Paramiko with Ansible if access to Cisco IOS fails * Remove a bogus footnote in updated OSPF documentation * Caveat: latest supported RouterOS release is 7.18.2 (#2796)