Supported Platforms

Supported Virtual Network Devices

netlab supports these virtual network devices or their physical equivalents (when using external virtualization provider).

Virtual network device

netlab device type

support level

Arista vEOS❗/cEOS❗

eos

full

Arrcus ArcOS ❗

arcos

best effort

Aruba AOS-CX ❗

arubacx

full

Cisco 8000v ❗

cisco8000v

minimal

Cisco ASAv ❗

asav

minimal

Cisco Catalyst 8000v ❗

cat8000v

full

Cisco CSR 1000v ❗

csr

full

Cisco IOS-on-Linux (IOL) ❗

iol

full

Cisco IOS-on-Linux L2 image (IOL L2)❗

ioll2

full

Cisco IOSv ❗

iosv

full

Cisco IOSvL2 ❗

iosvl2

full

Cisco IOS XRv/XRd ❗

iosxr

full (XRd only)

Cisco Nexus 9300v ❗

nxos

best effort

Cumulus Linux 4.x/5.x ❗

cumulus

end of life

Cumulus Linux 5.x (NVUE) ❗

cumulus_nvue

minimal

Dell OS10 ❗

dellos10

full

Extreme Networks EXOS ❗

exos

minimal

Fortinet FortiOS ❗

fortios

minimal

FRRouting (FRR) ❗

frr

full

Generic Linux host

linux

full

Juniper cRPD

crpd

full

Juniper cSRX ❗

csrx

minimal

Juniper vMX ❗

vmx

best effort

Juniper vPTX (vJunos EVO) ❗

vptx

full

Juniper vSRX 3.0 ❗

vsrx

best effort

vJunos-switch ❗

vjunos-switch

full

vJunos-router ❗

vjunos-router

full

Mikrotik RouterOS 6 (CHR) ❗

routeros

end of life

Mikrotik RouterOS 7 (CHR) ❗

routeros7

minimal

Netscaler CPX

netscaler

minimal

Nokia SR Linux ❗

srlinux

full

Nokia SR OS ❗

sros

best effort[1]

Nokia SR-SIM ❗

srsim

full

OpenBSD ❗

openbsd

best effort

SONiC ❗

sonic

minimal

VPP (fd.io) ❗

vpp

minimal

VyOS 1.4 ❗

vyos

full

netlab also supports the following daemons (control-plane software running in containers):

Daemon

netlab device type

support level

BIRD Internet Routing Daemon ❗

bird

full

dnsmasq DHCP server ❗

dnsmasq

full

Kubernetes in Docker

kind

best effort

You can also run network management software and even some network services products (for example, NetScaler) as custom Linux containers.

The support level of a platform is defined as:

  • full – a core contributor is regularly implementing new features. We run a full suite of integration tests for every release that could impact the device behavior (for example, due to changes in configuration templates).

  • best effort – while a core contributor might still work on the platform, we don’t run integration tests (usually due to limited availability of the VM/container image). YMMV.

  • minimal – don’t expect too much[2]. What you see is pretty much what you’ll get (and in many cases, it did not go through integration tests).

  • end-of-life – these platforms are still part of netlab package because the storage prices keep falling.

Tip

Use netlab show devices to display the up-to-date device list and device support levels.

Most devices behave as routers (or layer-3 switches); the following devices can take multiple roles or behave as IP hosts:

Device

router

host

bridge

Arista EOS

✅

✅

✅

BIRD

✅

✅

❌

Cisco IOS[*1]

✅

✅

✅

dnsmasq

❌

✅

❌

FRRouting

✅

✅

✅

KinD cluster

✅

✅

❌

Linux

❌

✅

❌

Linux (containers)

❌

✅

✅

OpenBSD

✅

✅

❌

VPP fd.io container

✅

❌

✅

Notes:

Supported Virtualization Providers

netlab create can generate configuration files for these virtualization providers:

  • vagrant-libvirt, including support for veryisolated private networks and UDP point-to-point tunnels.

  • Containerlab

  • External – meta virtualization provider that allows you to configure external physical or virtual devices with netlab

Warning

We’re sunsetting the libvirt provider. More details.

You cannot use all supported network devices with all virtualization providers. These are the supported combinations (use netlab show images command to display the current system settings); daemons always run in containers.

Virtual network device

Vagrant
Libvirt

Containerlab

Arista vEOS

✅

✅

Arrcus ArcOS

❌

✅

Aruba AOS-CX

✅

✅❗

Cisco 8000v

❌

✅

Cisco ASAv

✅

✅ ❗

Cisco Catalyst 8000v

✅

✅❗

Cisco CSR 1000v

✅

✅❗

Cisco IOL

❌

✅❗

Cisco IOL L2

❌

✅❗

Cisco IOSv

✅

✅❗

Cisco IOSvL2

✅

✅❗

Cisco IOS XRv/XRd

✅

✅❗

Cisco Nexus 9300v

✅ ❗

✅❗

Cumulus Linux

✅

✅❗

Cumulus Linux 5.x (NVUE)

✅

✅❗

Dell OS10

✅

✅

Extreme Networks EXOS

✅

✅❗

Fortinet FortiOS

✅

✅

FRR

✅❗

✅

Generic Linux (Ubuntu/Alpine)

❗

✅

Juniper cRPD

❌

✅

Juniper cSRX

❌

✅

Juniper vMX

❌

✅❗

Juniper vPTX

✅

✅❗

Juniper vSRX 3.0

✅

✅❗

vJunos-switch

❌

✅❗

vJunos-router

❌

✅❗

Mikrotik RouterOS 6

✅

❌

Mikrotik RouterOS 7

✅

❌

Netscaler CPX

❌

✅

Nokia SR Linux

❌

✅

Nokia SR OS

❌

✅

Nokia SR-SIM

❌

✅

OpenBSD

✅

✅

SONiC

✅

✅

VPP

❌

✅

VyOS

✅

✅❗

Note:

  • external provider can be used with all devices supported by netlab.

Vagrant configuration files for KVM/libvirt environments specify the number of virtual CPUs and the amount of memory allocated to each network device. These are the default values; you can change them with node parameters.

Virtual network device

netlab
device type

CPUs

memory

libvirt NIC model

Arista vEOS

eos

2

4096

virtio

Aruba AOS-CX

arubacx

2

4096

virtio

Cisco ASAv

asav

1

2048

virtio

Cisco Catalyst 8000v

cat8000v

2

4096

virtio

Cisco CSR 1000v

csr

2

4096

virtio

Cisco IOSv

iosv

1

512

e1000

Cisco IOSvL2

iosvl2

1

1024

e1000

Cisco IOS XRv

iosxr

2

8192

e1000

Cisco Nexus 9300v

nxos

2

6144 ❗

e1000

Cumulus Linux

cumulus

2

1024

virtio

Cumulus Linux 5.x (NVUE)

cumulus_nvue

2

1024

virtio

Dell OS10

dellos10

2

2048

e1000

Extreme Networks EXOS

exos

1

1024

rtl8139

Fortinet FortiOS

fortios

1

2048

virtio

FRR

frr

1

1024

virtio

Generic Linux host

linux

1

1024

virtio

Juniper vSRX 3.0

vsrx

2

4096

virtio

Juniper vPTX

vptx

4

8192

virtio

Mikrotik RouterOS 6

routeros

1

256

virtio

Mikrotik RouterOS 7

routeros7

2

256

e1000

OpenBSD

openbsd

1

1024

virtio

Sonic

sonic

2

4096

virtio

VyOS

vyos

2

1024

virtio

Tip

‌virtio is the default KVM/libvirt NIC model.

Configuration Deployments

netlab can deploy configuration on all supported devices. It can also collect device configuration and reload it after a lab restart on these devices:

Device

Collect

configuration

Reload

configuration

Arista EOS

✅

✅

Arrcus ArcOS

✅

❌

Aruba AOS-CX

✅

✅

Cisco ASAv

✅

✅

Cisco IOS[*1]

✅

✅

Cisco IOS XR[*2]

✅

✅

Cisco Nexus OS

✅

✅

Cumulus 5.x (NVUE)

✅

❌

Cumulus Linux

✅

✅

Dell OS10

✅

✅

Extreme EXOS

✅

❌

Fortinet FortiOS firewall

✅

❌

FRRouting

✅

✅

Juniper cSRX

✅

❌

Junos[*3]

✅

✅

Mikrotik RouterOS 6

✅

❌

Mikrotik RouterOS 7

✅

❌

Nokia SR Linux

✅

✅

Nokia SR OS[*4]

✅

❌

SONiC

✅

❌

VyOS

✅

✅

Note

Use the netlab initial -o command to create configuration files in a custom directory.

Configuration Deployment Mechanisms

netlab can use a variety of device configuration deployment mechanisms:

Method

Description

daemon
configurations

Daemon configuration files are generated on the host and mapped into the containers running daemons like dnsmasq or bird

ansible

Starts an Ansible playbook that uses device-specific task lists executing Ansible device modules

sh

Uses docker exec command to execute shell scripts mapped into containers[3]

cp_sh

Copies shell scripts into containers (using docker cp) or virtual machines (using netmiko implementation of scp) and executed within them with docker exec or netmiko.send_command().

ns

Uses ip netns exec to execute shell scripts on the host within the container namespace[4]

netmiko

Uses the netmiko library to send configuration commands over an SSH session. netlab install ansible automatically installs the netmiko library; you can also install it manually with pip3 install netmiko.

startup

Configuration files are merged into a partial startup configuration that is passed to the containerlab startup-config parameter. This experimental method works only for containers and won’t report device configuration errors.

netlab uses Ansible playbooks and device-specific task lists to deploy device configuration snippets onto most devices, with these notable exceptions:

Device

Provider

Default configuration deployment method

BIRD

clab

Daemon configuration files and bash scripts[5]

dnsmasq

clab

Daemon configuration files and bash scripts[6]

FRRouting

clab

bash and vtysh scripts[7]

Junos cRPD

clab

bash scripts[8]

KinD

clab

bash scripts copied into and executed in containers

Linux

clab

host- or container-side scripts[9]

Sonic

clab

inherits FRRouting configuration methods

VPP

clab

bash scripts, node configuration files, and VPP CLI configuration files[10]

Several other devices can use configuration methods faster than Ansible playbooks. These configuration methods are not enabled by default; you have to set the netlab_config_mode device group variable[11] or node parameter to use them:

Device

Alternate

deployment method

Arista EOS

netmiko

Arista EOS (containers)

netmiko, sh

Aruba AOS-CX (containers)

startup

Cisco IOS[*1]

netmiko

Cisco IOS (containers)[*2]

startup, netmiko

Cisco IOS XRv/XRd (containers)

sh

Dell OS10 (containers)

startup

dnsmasq

sh

FRRouting (VMs)

cp_sh

Junos (containers)[*3]

startup

KinD cluster

sh

Linux (containers)

sh

Linux (VMs)

cp_sh

SONiC (VMs)

cp_sh

Notes:

  • When using the sh method on Arista cEOS containers, netlab converts the device configurations into FastCli scripts and executes them as Linux scripts within the cEOS container. This method works on EOS software releases that have the ‌platform tfa phy control-frame disabled interface configuration command (probably starting with EOS release 4.30)

  • The Cisco IOS XRd sh deployment method uses a custom bash script that calls the xrapply ZTP command to load and commit a configuration file. The custom script is used as the shebang interpreter for the configuration snippets. This deployment method does not work on XRd vRouter or XRv virtual machines packaged into vrnetlab containers.

Initial Device Configurations

The following system-wide features are configured on supported network operating systems as part of the initial device configuration; hostname and hosts table are configured on daemons.

Operating system

Hostname

IPv4/IPv6
hosts

LLDP

IPv4
Loopback

IPv6
Loopback

Arista EOS

✅

✅

✅

✅

✅

Arrcus ArcOS

✅

❌

❌

✅

✅

Aruba AOS-CX

✅

✅

✅

✅

✅

Cisco ASAv

✅

✅

❌

❌

❌

Cisco IOS/IOS XE[12]

✅

✅

✅

✅

✅

Cisco IOS XR[13]

✅

✅

✅

✅

✅

Cisco Nexus OS

✅

✅

✅

✅

✅

Cumulus Linux

✅

✅[14]

✅

✅

✅

Cumulus Linux 5.x (NVUE)

✅

✅

✅

✅

✅

Dell OS10

✅

✅

✅

✅

✅

Extreme Networks EXOS

✅

❌

✅

✅

✅

Fortinet FortiOS

✅

❌

✅

✅

✅

FRR

✅

✅[14]

❌

✅

✅

Generic Linux

✅

✅[14]

✅❗

✅

✅

Juniper cSRX

✅

✅

❌

❌

❌

Junos[15]

✅

❌

✅

✅

✅

Mikrotik RouterOS 6

✅

✅

✅❗

✅

✅

Mikrotik RouterOS 7

✅

✅

✅❗

✅

✅

Netscaler CPX

✅

❌

❌

❌

❌

Nokia SR Linux

✅

✅

✅

✅

✅

Nokia SR OS[16]

✅

✅

✅

✅

✅

OpenBSD

✅

✅

❌

✅

✅

Sonic

✅

✅

❌

✅

✅

Sonic (containerlab)

✅

✅

❌

✅

✅

VyOS

✅

✅

✅

✅

✅

The following interface parameters are configured on supported network operating systems as part of the initial device configuration:

Operating system

Interface
description

Interface
bandwidth

MTU

Additional
loopbacks

Arista EOS

✅

✅

✅

✅

Arrcus ArcOS

❌

❌

✅

✅

Aruba AOS-CX

✅

❌

✅

✅

Cisco ASAv

✅

❌

✅

❌

Cisco IOSv/IOSvL2

✅

✅

✅

✅

Cisco IOS XE[17]

✅

✅

✅❗❗

✅

Cisco IOS XR[13]

✅

✅ ❗

✅

✅

Cisco Nexus OS

✅

✅

✅

✅

Cumulus Linux

✅

✅

✅

✅

Cumulus Linux 5.x (NVUE)

✅

❌

✅

✅

Dell OS10

✅

❌

✅

✅

Extreme Networks EXOS

✅

❌

✅

❌

Fortinet FortiOS

✅

✅

✅❗

❌

FRR

✅

✅

✅

✅

Generic Linux

❌

❌

✅

❌

Juniper cSRX

✅

❌

✅

❌

Junos[15]

✅

✅

✅

❌

Mikrotik RouterOS 6

✅

❌

✅

❌

Mikrotik RouterOS 7

✅

❌

✅

✅

Nokia SR Linux

✅

❌

✅

✅

Nokia SR OS[16]

✅

❌

✅

✅

OpenBSD

✅

❌

✅

❌

Sonic

✅

✅

✅

✅

Sonic (containerlab)

✅

✅

✅

✅

VyOS

✅

❌

✅

✅

The following interface addresses are supported on various platforms; most daemons support only numbered IPv4 and IPv6 interfaces.

Operating system

IPv4
addresses

IPv6
addresses

Unnumbered
IPv4 interfaces

Configurable
IPv6 RA

Arista EOS

✅

✅

✅

✅

Arrcus ArcOS

✅

✅

❌

❌

Aruba AOS-CX

✅

✅

✅

❌

Cisco ASAv

✅

✅

❌

❌

Cisco IOSv/IOSvL2

✅

✅

❌

✅

Cisco IOS XE[17]

✅

✅

✅

✅

Cisco IOS XR[13]

✅

✅

✅

❌

Cisco Nexus OS

✅

✅

✅

❌

Cumulus Linux

✅

✅

✅

❌

Cumulus Linux 5.x (NVUE)

✅

✅

✅

❌

Dell OS10

✅

✅

❌

❌

Extreme Networks EXOS

✅

✅

❌

✅

Fortinet FortiOS

✅

✅

❌

❌

FRR

✅

✅

✅

✅

Generic Linux

✅

✅

❌

❌

Juniper cSRX

✅

✅

❌

❌

Junos[15]

✅

✅

✅

❌

Mikrotik RouterOS 6

✅

✅

❌

❌

Mikrotik RouterOS 7

✅

✅

❌

❌

Netscaler CPX

✅

❌

❌

❌

Nokia SR Linux

✅

✅

❌

❌

Nokia SR OS[16]

✅

✅

✅

❌

OpenBSD

✅

✅

❌

❌

Sonic

✅

✅

✅

❌

VPP

✅

✅

✅

✅

VyOS

✅

✅

✅

❌

Tip

Some platforms can enable additional functionality during the initial device configuration:

Operating system

Debugging
attribute
[18]

Cisco IOS/IOS XE[12]

ios.debug

FRRouting

frr.debug

Supported Configuration Modules

Routing protocol configuration modules are supported on these devices[19]

Operating system

OSPF

IS-IS

EIGRP

BGP

RIPv2/ng

Arista EOS

✅

✅

❌

✅

✅

Arrcus ArcOS ❗

✅

✅

❌

✅

❌

Aruba AOS-CX

✅

❌

❌

✅

❌

BIRD Internet Routing Daemon

✅ ❗

❌

❌

✅ ❗

❌

Cisco ASAv

✅ ❗

✅ ❗

❌

✅

❌

Cisco IOS/IOS XE[12]

✅

✅

✅

✅

✅

Cisco IOS XR[13]

✅

✅

❌

✅

❌

Cisco Nexus OS

✅

✅

✅

✅

❌

Cumulus Linux

✅

❌

❌

✅

✅

Cumulus Linux 5.x (NVUE)

✅

❌

❌

✅ ❗

❌

Dell OS10

✅ ❗

❌

❌

✅

❌

Extreme Networks EXOS

✅

❌

❌

❌

❌

Fortinet FortiOS

✅ ❗

❌

❌

✅

❌

FRR

✅

✅

❌

✅

✅

Junos[15]

✅

✅

❌

✅

❌

Mikrotik RouterOS 6

✅

❌

❌

✅

❌

Mikrotik RouterOS 7

✅

❌

❌

✅

❌

Nokia SR Linux

✅

✅

❌

✅

❌

Nokia SR OS[16]

✅

✅

❌

✅

✅

OpenBSD

✅

❌

❌

✅

✅

Sonic

❌

❌

❌

✅

❌

Sonic (containerlab)

✅

✅

❌

✅

✅

VyOS

✅

✅

❌

✅

❌

These devices support additional control-plane protocols or BGP address families:

Operating system

BFD

EVPN

MPLS/VPN

FHRP

Arista EOS

✅

✅

✅

✅

Arrcus ArcOS ❗

✅

✅

✅

✅

Aruba AOS-CX

✅

✅

✅

✅

BIRD

❌

✅

❌

✅

Cisco IOS XE[17]

✅

✅

✅

✅

Cisco IOSv/IOSvL2

✅

❌

✅

✅

Cisco IOS XR[13]

❌

✅

✅

✅

Cisco Nexus OS

✅

✅

❌

✅

Cumulus Linux

✅

✅

❌

✅

Dell OS10

✅

✅

❌

❌

Extreme Networks EXOS

❌

❌

❌

✅

FRR

✅

✅

✅

❌

Juniper cRPD

✅

❌

✅

❌

Juniper vMX

✅

❌

✅

✅

Juniper vPTX

✅

✅

✅

✅

Juniper vSRX 3.0

✅

❌

✅

✅

vJunos-switch

✅

✅

✅

✅

vJunos-router

✅

❌

✅

✅

Mikrotik RouterOS 6

✅

❌

✅

❌

Mikrotik RouterOS 7

✅

❌

✅

❌

Nokia SR Linux

✅

✅

✅

✅

Nokia SR OS[16]

✅

✅

✅

✅

Sonic (containerlab)

✅

✅

✅

✅

VyOS

✅

✅

✅

❌

Notes:

  • FRHP = First-Hop Redundancy Protocol (anycast gateway or VRRP)

The layer-2 control plane configuration modules are supported on these devices[19]:

Operating system

Spanning
Tree Protocol

Link Aggregation
Groups

Arista EOS

✅

✅

Arrcus ArcOS ❗

✅❗

✅

Aruba CX

✅

✅

BIRD

❌

✅

Cumulus Linux

✅

✅

Cumulus Linux 5.x (NVUE)

✅

✅

Dell OS10

✅

✅

dnsmasq

❌

✅

FRR

✅

✅

Linux

❌

✅

Sonic (containerlab)

❌

✅

The data plane configuration modules are supported on these devices[19]:

Operating system

VLAN

VRF

VXLAN

MPLS

SR-MPLS

SRv6

Arista EOS

✅

✅

✅

✅

✅

❌

Arrcus ArcOS ❗

✅

✅

✅❗

✅❗

✅❗

✅❗

Aruba AOS-CX

✅

✅

✅❗

❗

❌

❌

BIRD

✅

✅

✅

❌

❌

❌

Cisco 8000v (IOS XR)

✅

✅

❌

✅

✅

✅

Cisco Catalyst 8000v

✅

✅

✅

✅

✅

✅

Cisco CSR 1000v

✅

✅

✅

✅

✅

❌

Cisco IOL/IOLL2

✅

✅

✅❗

✅

✅

✅

Cisco IOSv/IOSvL2

✅

✅

❌

✅

❌

❌

Cisco IOS XR

❌

✅

❌

✅

✅

✅

Cisco Nexus OS

✅

✅

✅

❌

❌

❌

Cumulus Linux

✅

✅

✅

❌

❌

❌

Cumulus Linux 5.x (NVUE)

✅

❗

❌

❌

❌

❌

Dell OS10

✅

✅

✅

❌

❌

❌

Extreme Networks EXOS

✅

❌

❌

❌

❌

❌

FRR

✅

✅

✅

✅

✅

✅

Juniper cRPD

❌

❌

❌

✅

✅

❌

Juniper vMX

✅

✅

❌

✅

✅

❌

Juniper vPTX

✅

✅

✅ ❗

✅

✅

❌

Juniper vSRX 3.0

❌

✅

❌

❌

❌

❌

vJunos-switch

✅

✅

✅

❌

❌

❌

vJunos-router

❌

✅

❌

❌

❌

❌

Mikrotik RouterOS 6

✅

✅

❌

✅

❌

❌

Mikrotik RouterOS 7

✅

✅

✅

✅

❌

❌

Nokia SR Linux

✅

✅

✅

✅

✅

❌

Nokia SR OS[16]

✅

✅

✅

✅

✅

✅

OpenBSD

✅

❌

✅

❌

❌

Sonic (containerlab)

✅

✅

✅

✅

✅

✅❗

VyOS

✅

✅

✅

✅

❌

❌

Network services configuration modules are supported on these devices[19]

Operating system

DHCP

DHCPv6

Arista EOS

✅

✅

dnsmasq

✅

✅

Cisco CSR 1000v

✅

✅

Cisco IOSv/IOSvL2

✅

✅

Cumulus Linux

✅

✅

Tip

See integration test results for more details.

IPv6 Support

Core netlab functionality and all multi-protocol routing protocol configuration modules fully support IPv6. However, you might not be able to configure IPv6 versions of some routing protocols on all platforms.

Operating system

OSPFv3

IS-IS MT

EIGRP
IPv6 AF

BGP
IPv6 AF

SR-MPLS

Arista EOS

✅

✅

❌

✅

✅

Arrcus ArcOS

✅

❌❗

❌

✅

❌

Aruba AOS-CX

✅

❌

❌

✅

❌

BIRD

✅

❌

❌

✅

❌

Cisco ASAv

❌

✅

❌

✅

❌

Cisco IOS/IOS XE[12]

✅

✅

✅

✅

❌

Cisco IOS XR[13]

✅

✅

❌

✅

✅

Cisco Nexus OS

✅

✅

✅

✅

❌

Cumulus Linux 4.x

✅

❌

❌

✅

❌

Cumulus Linux NVUE

❌

❌

❌

✅

❌

Dell OS10

✅

❌

❌

✅

❌

Extreme Networks EXOS

✅

❌

❌

❌

❌

Fortinet FortiOS

✅

❌

❌

✅

❌

FRR

✅

✅

❌

✅

❌

Junos[15]

✅

✅

✅

❌

✅

Mikrotik RouterOS 6

❌

❌

❌

✅

❌

Mikrotik RouterOS 7

✅

❌

❌

✅

❌

Nokia SR Linux

✅

✅

❌

✅

✅

Nokia SR OS[16]

✅

✅

❌

✅

✅

OpenBSD

✅

❌

❌

✅

❌

Sonic

❌

❌

❌

✅

❌

Sonic (containerlab)

✅

✅

❌

✅

✅

VyOS

✅

✅

❌

✅

❌

Unknown Devices

You can use device type unknown to add unsupported devices to a netlab-managed virtual lab. netlab assumes an unknown device supports all configuration modules and will prepare the data structures and Ansible inventory you need to configure the device.

Unknown devices are placed in the unprovisioned group and are not configured by the netlab up or netlab initial commands.

To add an unknown device to a lab: