Changes in Release 2.0

New Functionality

Release 2.0.0

Retirements

Minor improvements

  • Names of defaults.const.validate constants can be used as wait times in the validation wait parameter

  • Recognize all and device types in the node selection expressions used in netlab inspect, netlab report and netlab exec commands

  • Use a different Ansible task list when reloading device configuration

  • Accept ‘int’ and ‘bool’ values for management IP addresses

  • Combine default tcpdump flags with user filter in the netlab capture command

  • Change the installed Vagrant version to 2.4.3-1

  • Check reserved ranges (local network, multicast) during IPv4/IPv6 address/prefix validation

  • Warn about EBGP ‘bgp’ attributes used on intra-AS links/vlans

New device features

Arista EOS:

  • Configuration reload uses configure replace command

  • You can use Arista EOS as router, host or bridge node

ArubaCX:

  • Unnumbered interfaces, including OSPFv2 support (requires release 10.14 or later)

Bird:

  • BGP session features: BFD, BGP timers, default route origination, GTSM

  • RFC 8950 (IPv4 AF over IPv6 BGP session) support

  • BGP remove private AS

  • VLAN and LAG support

  • netlab clab build can build Bird v2 or Bird v3 containers

  • Route redistribution into OSPF

  • OSPF timers, router priority, and passwords

  • IPv6 RA configuration (#2109)

  • You can use Bird as router or host

Cisco IOS:

  • Configuration reload uses configure replace command

  • You can use Cisco IOS as router, host or bridge node

Dell OS10:

  • BGP BFD, timers, passwords, and default route origination

  • BGP AS manipulation: allowas-in and remove-private-as

  • OSPF default route origination

  • Routing policies, prefix lists, AS-path filters, and BGP community filters

  • Static routes

FRR:

  • SRv6 with IS-IS

  • BGP L3VPN over SRv6

  • You can use FRR as router or host node

Junos:

  • Routing policies, prefix lists, AS-path filters, and BGP community filters

  • Static routes

  • BGP routing policies, local preference, MED, weight, AS-path prepending

  • Major cleanup and refactoring of routing policies

  • MAC-VRF EVPN implementation

Linux:

  • VLAN support on Linux containers (#2103)

  • You can use Linux containers as host or bridge nodes

SR Linux:

  • Release 25.3.1 support, including version-specific configuration templates that work with 24.10 and 25.3 releases

  • Support for configuration reload with netlab up –reload command

VyOS:

  • Static routes

Fixes in configuration templates:

Arista EOS:

  • Disable PHY control messages with ‘netlab_phy_control’ variable

  • IBGP routes are reflected over local-as IBGP sessions, their next hop is forced to self

ArubaCX:

  • Simplified Vagrant box build recipe

  • Do a soft clear of all BGP sessions after a routing policy change

Bird:

  • Configure logging to /var/log/bird

  • Filter BGP communities per neighbor type

  • Advertise IPv6 loopback as /128 in OSPF

  • Do not send IPv6 RA in ‘host’ role

  • Set ‘next-hop-self always’ on local-as IBGP sessions (#2110)

Cisco IOS:

  • Do a soft-clear of global and VRF BGP sessions after a routing policy change

  • IBGP routes are reflected over local-as IBGP sessions, their next hop is forced to self

Cumulus Linux:

  • Change STP parameters on the bridge and VXLAN interfaces

Cumulus Linux NVUE:

  • Explicitly enable IPv6 on extra loopbacks interfaces (#2118)

  • Filter duplicate VRF BGP network statements

Dell OS10:

  • Fix VRF context for the bgp.policy plugin configuration

  • Fix BGP address family activation (#2075)

  • Configure per-VRF BGP router-id (#2073)

  • Move route-target configuration to VRF module, apply only when BGP module is used (#2055)

dnsmasq:

  • Dnsmasq: Ubuntu 24.04 as the base image

FRR:

  • Replace obsolete ‘brctl’ commands with modern equivalents (#2107)

  • Fix the ARP sysctl settings on VARP/anycast GW MACVLAN interface (#2100)

  • Assign VARP/VRRP interfaces to the correct VRF

  • IBGP routes are reflected over local-as IBGP sessions, their next hop is forced to self

Junos:

  • Shutdown unused BGP neighbors on Junos

Linux:

  • Set default arp_announce value to 2 (#2159)

  • IPv4 unnumbered peering

  • Create extra loopback interfaces on Linux-based daemons (#2114)

  • Postpone disabling IPv6 on interfaces on Ubuntu until after netplan has been applied (#2247)

SR Linux:

  • Configure per-VRF BGP router ID (#2077)

  • Fix the BGP AF activation (#2074)

VyOS:

  • Check for configuration failures in Ansible playbooks

  • VyOS: work around the LLDP configuration inconsistency between release 1.4 and 1.5

  • Routing policies shall consider only IPv4 and IPv6 AF (#2146)

  • Fix BGP router-id on VRFs (#2072)

Breaking changes

Release 2.0.0

We implemented a generic mechanism to indicate that an attribute should not be inherited from a parent object (groups → nodes, nodes → interfaces, links → interfaces…). Setting an attribute to False will break the inheritance chain and remove the attribute.

The only exceptions are the attributes that can accept a False value (bools, IP addresses/prefixes); the inheritance chain is broken due to the presence of attributes with False values, but they are not removed.

The change did not impact any of our transformation and integration tests, so it should be pretty safe. However, it is not impossible that you’ll discover an edge case that works differently than it did in the past.

Bug Fixes

Bug Fixes in Release 2.0.0

  • Add a hint regarding node/gateway id conflict

  • The ‘prefix6’ attribute should not be copied into link/node data (#2235)

  • ‘false’ value of an attribute with ‘true_value’ crashed validation

  • BGP session attributes can be removed with False value

  • Set defaults.provider when changing top-level provider

  • Change filelock minimum release to 3.16.1 (still supporting Python 3.8)

  • EVPN: Report an error when VNIs are used with mpls transport (#2205)

  • Enable VPNv4/VPNv6 AF based on mpls.vpn settings (#2221)

  • Consider intf/node bgp.local_as when computing ‘external’ role (#2215)

  • Prune IGP interfaces based on IGP/interface AF match (#2211)

  • Multi-protocol BFD whacked the IGP AF information (#2210)

  • Make ‘localas_ibgp’ a valid bgp.activate value (#2207)

  • Rename ‘netlab usage’ to ‘netlab help’, use rich console to print help

  • Add provider-specific node roles to daemons

  • Configure IPv6 LLA on bird loopback intf only when needed

  • BGP RFC 8950 test: DUT role must be set to ‘router’

  • SR Linux: Need to explicitly specify type as link-local for static LLA (#2186)

  • BGP-with-BFD integration test

  • Provider-specific features disable DHCP clients on cEOS and Linux (#2181)

  • Make DHCP error messages provider-aware (#2180)

  • Implement provider-specific module/role support (#2177)

  • Fix the description of DHCP feature flags

  • Routing object normalization crashed on group objects

  • Always set ‘disable_ipv6’ flag on Linux interfaces (#2176)

  • Save collected SR Linux configs into ‘.cfg’ files

  • Remove ‘building config’ banner from collected IOS configuration

  • Expand routing object shortcut definitions with the ‘normalize’ hook (#2168)

  • Implement static (defaults-driven) module hooks (#2166)

  • Fix: Insane ‘plugin’ values could crash netlab

  • Copyright and license: Update year to 2025 (#2165)

  • Fix double transformation for routing.community objects (#2164)

  • Split group sanity checks from in-depth data validation (#2163)

  • BGP module does not need pre_default hook

  • Configure VXLAN after BGP

  • Check source VRF of IPv4 addresses used on unnumbered VRF interfaces (#2123)

  • Move VRF loopback creation to post_link_transform hook (#2122)

  • Refactor the role-specific node transformation into a separate subsystem (#2095)

  • Check for a Linux bridge in the forwarding path of LAG links

  • Extract warnings generated in integration tests and store them in test results

  • Use report_quirk for consistent reporting of device quirks (#2083)

  • Remove paramiko-specific options from ansible.cfg (#2081)

  • ‘loopback’ attribute in global VRF definition must be a bool (#2076)

  • Allow ‘no quirk flag’ in devices.report_quirk

  • Select the best (not first) interface for daemon control-plane IP address

  • Add the ‘activate’ dictionary to VRF EBGP neighbors (#2060)

  • Replace calls to string.format with strings.eval_format (#2063)

  • Add VPNv4/VPNv6 AF checks to EOS/FRR BGP validation functions

  • Add checks for BGP session and AF activation to EVPN integration tests

  • Deal with inconsistent FRR ‘bgp neighbor’ JSON data structure

  • Allow ‘bgp.multihop’ node attribute

  • Check AF activation in FRR/EOS BGP validation functions

  • Add a dump of config variables to ‘config’ validation action

Documentation Fixes

Documentation Fixes in Release 2.0.0

  • Make VirtualBox and direct Windows/macOS installations obsolete

  • Document the impact of specifying a node parameter for an auto-created node (#2106)

  • Allow interface name to be set on a per-interface basis (#2105)

  • IBGP sessions within VRFs do not work