Skip to content

Commit 7d4946c

Browse files
authored
EXOS quirk: Rename VLAN 1 to Default (#3257)
1 parent 42a8d8d commit 7d4946c

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

netsim/ansible/templates/vlan/exos.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{% if vlans is defined %}
2-
configure vlan default delete ports all
2+
configure vlan Default delete ports all
33
{% endif %}
44
{% for ifdata in interfaces if ifdata.vlan is defined and ifdata.type|default('') not in ['svi','vlan_member'] %}
55
{% if ifdata.vlan.trunk is defined %}

netsim/devices/exos.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from ..utils import log
44
from . import _Quirks, need_ansible_collection, report_quirk
55

6+
EXOS_VLAN_1_NAME = 'Default'
67

78
def check_vrrp_address_families(node: Box) -> None:
89
for intf in node.interfaces:
@@ -17,11 +18,51 @@ def check_vrrp_address_families(node: Box) -> None:
1718
category=log.IncorrectType)
1819
return
1920

21+
def rename_interface_vlan_references(intf: Box, old_name: str, new_name: str) -> None:
22+
for kw in ('vlan.access','vlan.native','vlan.name','vlan_name','_vlan_native'):
23+
if intf.get(kw,None) == old_name:
24+
intf[kw] = new_name
25+
26+
trunk = intf.get('vlan.trunk',None)
27+
if trunk and old_name in trunk:
28+
trunk[new_name] = trunk.pop(old_name)
29+
30+
def default_vlan_1(node: Box) -> None:
31+
if 'vlans' not in node:
32+
return
33+
34+
if EXOS_VLAN_1_NAME in node.vlans and node.vlans[EXOS_VLAN_1_NAME].id != 1:
35+
report_quirk(
36+
text=f'{EXOS_VLAN_1_NAME} VLAN must have VLAN tag 1',
37+
node=node,
38+
category=log.IncorrectValue)
39+
return
40+
41+
vlan_1_name = next(
42+
(vname for vname,vdata in node.vlans.items()
43+
if vdata.get('id',None) == 1 and vname != EXOS_VLAN_1_NAME),
44+
None)
45+
if not vlan_1_name:
46+
return
47+
48+
node.vlans[EXOS_VLAN_1_NAME] = node.vlans.pop(vlan_1_name)
49+
50+
for intf in node.interfaces:
51+
rename_interface_vlan_references(intf,vlan_1_name,EXOS_VLAN_1_NAME)
52+
53+
report_quirk(
54+
text='Extreme EXOS reserves VLAN ID 1 for the built-in Default VLAN',
55+
more_data=f'Renaming VLAN {vlan_1_name} to {EXOS_VLAN_1_NAME} on node {node.name}',
56+
node=node,
57+
quirk='vlan.default_1',
58+
category=Warning)
2059

2160
class EXOS(_Quirks):
2261

2362
@classmethod
2463
def device_quirks(cls, node: Box, topology: Box) -> None:
64+
if 'vlan' in node.get('module',[]):
65+
default_vlan_1(node)
2566
if 'gateway' in node.get('module',[]):
2667
check_vrrp_address_families(node)
2768

0 commit comments

Comments
 (0)