Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 18 additions & 8 deletions docs/caveats.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,18 @@
(caveats-eos)=
## Arista EOS

* Routed VLANs cannot be used in EVPN MPLS VLAN bundles
* Arista EOS uses an [invalid value for the suboption 150 of the DHCP option 82](https://blog.ipspace.net/2023/03/netlab-vrf-dhcp-relay.html#vendor-interoperability-is-fun) when doing inter-VRF DHCPv4 relaying.
* The DHCP client on Arista EOS is finicky. When the DHCP state changes on one of the data-plane Ethernet interfaces, the management interface might lose its IPv4 address.
* You can set Arista cEOS serial number and system MAC address with the **eos.serialnumber** and **eos.systemmacaddr** node properties.
### Arista vEOS VM Caveats

* Use **libvirt.uuid** node property to ensure a vEOS VM does not change its serial number every time you start the lab.

(caveats-ceos)=
### Arista cEOS Container Caveats

* Arista cEOS containers are configured through an Ansible playbook, using an SSH session with the **arista.eos.eos_config** Ansible modules. To configure them with Linux scripts using FastCLI, set the **defaults.devices.eos.clab.group_vars.netlab_config_mode** [topology default](topo-defaults) to **sh**. You can also set the **netlab_config_mode** node variable to **sh** to experiment with this feature.
* You can set Arista cEOS serial number and system MAC address with the **eos.serialnumber** and **eos.systemmacaddr** node properties.
* Anycast gateways and DHCP/DHCPv6 clients do not work on Arista cEOS Ethernet interfaces.
* Arista EOS cannot configure OSPF NSSA type-7 address ranges.
* IPv6 BFD for IS-IS cannot be enabled on individual interfaces. If you set **isis.bfd.ipv6** to *True*, BFD is enabled on all IS-IS interfaces.
* cEOS MPLS data plane was introduced in release 4.32.1F.
* Arista cEOS disables OSPFv2 on broadcast container stub interfaces (implemented as _dummy_ interfaces). _netlab_ automatically changes the OSPF network type for Arista cEOS dummy interfaces to **point-to-point**.
* Arista EOS virtual machines and containers use [proprietary control-plane messages to indicate the loss of Ethernet line protocol](https://blog.ipspace.net/2025/03/arista-spooky-action-distance/). Set the **netlab_phy_control** node variable to *False* to disable this functionality.
* Reloading device configurations that contain `no lldp transmit` or `no lldp receive` configuration command randomly fails due to an Arista EOS bug ([more details](https://github.com/ipspace/netlab/issues/2577)). Remove these commands from the saved device configurations before restarting the lab.

The default name of the management interface is **Management0** on vEOS and **Management1** on cEOS. If you'd like to change the management interface name on cEOS:

Expand All @@ -45,6 +45,16 @@ nodes:
intf_map: /mnt/flash/EosIntfMapping_json
```

### Other Arista EOS Caveats

* Routed VLANs cannot be used in EVPN MPLS VLAN bundles
* Arista EOS uses an [invalid value for the suboption 150 of the DHCP option 82](https://blog.ipspace.net/2023/03/netlab-vrf-dhcp-relay.html#vendor-interoperability-is-fun) when doing inter-VRF DHCPv4 relaying.
* The DHCP client on Arista EOS is finicky. When the DHCP state changes on one of the data-plane Ethernet interfaces, the management interface might lose its IPv4 address.
* Arista EOS cannot configure OSPF NSSA type-7 address ranges.
* IPv6 BFD for IS-IS cannot be enabled on individual interfaces. If you set **isis.bfd.ipv6** to *True*, BFD is enabled on all IS-IS interfaces.
* Arista EOS virtual machines and containers use [proprietary control-plane messages to indicate the loss of Ethernet line protocol](https://blog.ipspace.net/2025/03/arista-spooky-action-distance/). Set the **netlab_phy_control** node variable to *False* to disable this functionality. This functionality is automatically disabled if you use FastCli scripts to configure Arista cEOS containers.
* Device configurations that contain `no lldp transmit` or `no lldp receive` configuration command trigger configuration reload failures due to an Arista EOS bug ([more details](https://github.com/ipspace/netlab/issues/2577)). These commands are thus automatically removed from collected device configurations.

(caveats-aruba)=
## Aruba AOS-CX

Expand Down
4 changes: 0 additions & 4 deletions netsim/ansible/templates/lag/eos.j2
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,6 @@ interface {{ ch.ifname }}
channel-group {{ intf.lag.mlag.ifindex }} mode active
!
{% endfor %}

{% if 'gateway' in module %}
ip virtual-router mac-address mlag-peer
{% endif %}
{% endfor %}

{% for intf in interfaces if intf.type == 'lag' %}
Expand Down
3 changes: 3 additions & 0 deletions netsim/ansible/templates/normalize/eos.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{% for intf in interfaces if intf.virtual_interface is not defined %}
!
interface {{ intf.ifname }}
{% if node_provider == 'clab' and netlab_config_mode == 'sh' %}
platform tfa phy control-frame disabled
{% endif %}
{# 'no switchport' allocates an internal VLAN in range 1006-, causing issues when overlapping with topology vlans #}
shutdown
{% if l.mac_address is defined %}
Expand Down
2 changes: 1 addition & 1 deletion netsim/ansible/templates/ospf/eos.ospfv3.j2
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ interface {{ l.ifname }}
!
{% endfor %}
!
{% if ospf_vrf %}}
{% if ospf_vrf %}
ipv6 router ospf {{ ospf_pid }} vrf {{ ospf_vrf }}
{% else %}
ipv6 router ospf {{ ospf_pid }}
Expand Down
14 changes: 6 additions & 8 deletions netsim/ansible/templates/stp/eos.j2
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@
{% endif %}
{# options are 'none', rstp, rapid-pvst or mstp (default if not set) #}
spanning-tree mode {{ mode }}

{% if 'priority' in stp %}
spanning-tree priority {{ stp.priority }}
{% endif %}

!
{# Check for per-VLAN enable and priority; implies Rapid-PVST #}
{% if vlans is defined %}
{% for vname,vdata in vlans.items() %}
Expand All @@ -23,19 +22,18 @@ spanning-tree vlan-id {{ vdata.id }} priority {{ stp.priority }}
{% endif %}
{% endfor +%}
{% endif %}

!
{% for ifdata in interfaces if 'stp' in ifdata %}
{% if ifdata.vlan.trunk_id is defined or ifdata.vlan.access_id is defined %}
interface {{ ifdata.ifname }}
{% if not ifdata.stp.enable|default(True) %}
! Disable STP on this interface, i.e. dont receive or send BPDUs
! Disable STP on this interface, i.e. don't receive or send BPDUs
spanning-tree bpdufilter enable
{% elif 'port_priority' in ifdata.stp %}
#
# Use 16x port_priority to get the correct 4-bit value on the wire
#
!
! Use 16x port_priority to get the correct 4-bit value on the wire
!
spanning-tree port-priority {{ ifdata.stp.port_priority * 16 }}
#
{% endif %}
{% endif %}
{% if ifdata.stp.port_type is defined %}
Expand Down
10 changes: 10 additions & 0 deletions netsim/devices/eos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,16 @@ clab:
ansible_become: yes
ansible_become_method: enable
netlab_ready: [ ssh ]
netlab_config_path: /mnt/flash/ # These variables are used when netlab_config_mode == 'sh'
netlab_config_wrapper: |
{% if netlab_config_mode == 'sh' %}
#!/usr/bin/FastCli
configure terminal
{% endif %}
{{ netlab_config_text }}
{% if netlab_config_mode == 'sh' %}
end
{% endif %}
libvirt:
build: https://netlab.tools/labs/eos/
image: arista/veos
Expand Down
3 changes: 3 additions & 0 deletions netsim/extra/bgp.session/eos.j2
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,7 @@ router bgp {{ bgp.as }}
{% endfor %}
{% endif %}
!
{% if netlab_config_mode|default('') == 'sh' %}
do bash sleep 2
{% endif %}
do clear bgp vrf all
110 changes: 110 additions & 0 deletions tests/topology/expected/vxlan-router-stick.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,50 @@ module:
name: input
nodes:
r1:
_node_config:
initial: /mnt/flash/02-initial.sh:sh
normalize: /mnt/flash/01-normalize.sh:sh
ospf: /mnt/flash/04-ospf.sh:sh
vlan: /mnt/flash/03-vlan.sh:sh
vrf: /mnt/flash/05-vrf.sh:sh
vxlan: /mnt/flash/06-vxlan.sh:sh
af:
ipv4: true
vpnv4: true
box: none
clab:
binds:
- source: node_files/r1/normalize
target: /mnt/flash/01-normalize.sh
- source: node_files/r1/initial
target: /mnt/flash/02-initial.sh
- source: node_files/r1/vlan
target: /mnt/flash/03-vlan.sh
- source: node_files/r1/ospf
target: /mnt/flash/04-ospf.sh
- source: node_files/r1/vrf
target: /mnt/flash/05-vrf.sh
- source: node_files/r1/vxlan
target: /mnt/flash/06-vxlan.sh
config_templates:
- mode: sh
source: normalize
target: /mnt/flash/01-normalize.sh
- mode: sh
source: initial
target: /mnt/flash/02-initial.sh
- mode: sh
source: vlan
target: /mnt/flash/03-vlan.sh
- mode: sh
source: ospf
target: /mnt/flash/04-ospf.sh
- mode: sh
source: vrf
target: /mnt/flash/05-vrf.sh
- mode: sh
source: vxlan
target: /mnt/flash/06-vxlan.sh
env:
CLAB_MGMT_VRF: management
INTFTYPE: et
Expand Down Expand Up @@ -156,6 +195,13 @@ nodes:
- vrf
- vxlan
name: r1
netlab_ansible_skip_module:
- normalize
- initial
- vlan
- ospf
- vrf
- vxlan
ospf:
af:
ipv4: true
Expand Down Expand Up @@ -215,10 +261,31 @@ nodes:
vtep_list:
- 10.0.0.2
s1:
_node_config:
initial: /mnt/flash/02-initial.sh:sh
normalize: /mnt/flash/01-normalize.sh:sh
vlan: /mnt/flash/03-vlan.sh:sh
af:
ipv4: true
box: none
clab:
binds:
- source: node_files/s1/normalize
target: /mnt/flash/01-normalize.sh
- source: node_files/s1/initial
target: /mnt/flash/02-initial.sh
- source: node_files/s1/vlan
target: /mnt/flash/03-vlan.sh
config_templates:
- mode: sh
source: normalize
target: /mnt/flash/01-normalize.sh
- mode: sh
source: initial
target: /mnt/flash/02-initial.sh
- mode: sh
source: vlan
target: /mnt/flash/03-vlan.sh
env:
CLAB_MGMT_VRF: management
INTFTYPE: et
Expand Down Expand Up @@ -303,6 +370,10 @@ nodes:
module:
- vlan
name: s1
netlab_ansible_skip_module:
- normalize
- initial
- vlan
role: router
vlan:
max_bridge_group: 2
Expand All @@ -325,10 +396,43 @@ nodes:
ipv4: 172.16.0.0/24
vni: 101000
s2:
_node_config:
initial: /mnt/flash/02-initial.sh:sh
normalize: /mnt/flash/01-normalize.sh:sh
ospf: /mnt/flash/05-ospf.sh:sh
vlan: /mnt/flash/03-vlan.sh:sh
vxlan: /mnt/flash/04-vxlan.sh:sh
af:
ipv4: true
box: none
clab:
binds:
- source: node_files/s2/normalize
target: /mnt/flash/01-normalize.sh
- source: node_files/s2/initial
target: /mnt/flash/02-initial.sh
- source: node_files/s2/vlan
target: /mnt/flash/03-vlan.sh
- source: node_files/s2/vxlan
target: /mnt/flash/04-vxlan.sh
- source: node_files/s2/ospf
target: /mnt/flash/05-ospf.sh
config_templates:
- mode: sh
source: normalize
target: /mnt/flash/01-normalize.sh
- mode: sh
source: initial
target: /mnt/flash/02-initial.sh
- mode: sh
source: vlan
target: /mnt/flash/03-vlan.sh
- mode: sh
source: vxlan
target: /mnt/flash/04-vxlan.sh
- mode: sh
source: ospf
target: /mnt/flash/05-ospf.sh
env:
CLAB_MGMT_VRF: management
INTFTYPE: et
Expand Down Expand Up @@ -435,6 +539,12 @@ nodes:
- vxlan
- ospf
name: s2
netlab_ansible_skip_module:
- normalize
- initial
- vlan
- vxlan
- ospf
ospf:
af:
ipv4: true
Expand Down
4 changes: 3 additions & 1 deletion tests/topology/input/vxlan-router-stick.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
#
defaults.device: eos
provider: clab
defaults.devices.eos.clab.image: none
defaults.devices.eos.clab:
image: none
group_vars.netlab_config_mode: sh

groups:
router:
Expand Down