From 082fb485187e2640cdae4952da3b8bd14512e9ef Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Thu, 12 Dec 2024 21:23:19 -0600 Subject: [PATCH 01/36] * Remove 'lag' as a link.type, but leave it as an interface.type * Modify lag member lag._parentindex to match lag.ifindex, not linkindex --- netsim/ansible/templates/lag/cumulus.j2 | 2 +- netsim/ansible/templates/lag/cumulus_nvue.j2 | 2 +- netsim/ansible/templates/lag/dellos10.j2 | 2 +- netsim/ansible/templates/lag/eos.j2 | 4 +- netsim/ansible/templates/lag/frr.j2 | 2 +- netsim/defaults/attributes.yml | 3 +- netsim/modules/lag.py | 19 +- tests/topology/expected/lag-l2.yml | 29 +- .../topology/expected/lag-l3-access-vlan.yml | 39 +-- tests/topology/expected/lag-l3-vlan-trunk.yml | 38 +-- tests/topology/expected/lag-l3.yml | 37 +-- tests/topology/expected/lag-mlag-m_to_m.yml | 80 ++---- tests/topology/expected/lag-mlag.yml | 230 +++++----------- .../expected/node.clone-plugin-lag.yml | 250 ++++++------------ 14 files changed, 227 insertions(+), 510 deletions(-) diff --git a/netsim/ansible/templates/lag/cumulus.j2 b/netsim/ansible/templates/lag/cumulus.j2 index ba27c821aa..b374daa36c 100644 --- a/netsim/ansible/templates/lag/cumulus.j2 +++ b/netsim/ansible/templates/lag/cumulus.j2 @@ -12,7 +12,7 @@ iface {{ data.ifname }} pre-up ip link add {{ data.ifname }} type bond bond-slaves {%- for i in interfaces - if i.lag._parentindex|default(False) == data.linkindex %} {{ i.ifname }}{%- endfor %} + if i.lag._parentindex|default(False) == data.lag.ifindex %} {{ i.ifname }}{%- endfor %} {% set _lacp = data.lag.lacp|default(lag.lacp) %} {% if _lacp=='slow' %} bond-lacp-rate slow diff --git a/netsim/ansible/templates/lag/cumulus_nvue.j2 b/netsim/ansible/templates/lag/cumulus_nvue.j2 index 9904cbe07f..97d19ae251 100644 --- a/netsim/ansible/templates/lag/cumulus_nvue.j2 +++ b/netsim/ansible/templates/lag/cumulus_nvue.j2 @@ -42,7 +42,7 @@ mode: static {% endif %} member: -{% for c in interfaces if c.lag._parentindex|default(False) == i.linkindex %} +{% for c in interfaces if c.lag._parentindex|default(False) == i.lag.ifindex %} {{ c.ifname }}: {} {% endfor %} {% endfor %} diff --git a/netsim/ansible/templates/lag/dellos10.j2 b/netsim/ansible/templates/lag/dellos10.j2 index 5d1b1cfe84..aece7c9457 100644 --- a/netsim/ansible/templates/lag/dellos10.j2 +++ b/netsim/ansible/templates/lag/dellos10.j2 @@ -23,7 +23,7 @@ interface {{ intf.ifname }} description "{{ intf.name }}" {% endif %} ! -{% for ch in interfaces if ch.lag._parentindex|default(False) == intf.linkindex %} +{% for ch in interfaces if ch.lag._parentindex|default(False) == intf.lag.ifindex %} {% set _lag_mode = 'on' if intf.lag.lacp|default('') == 'off' else 'active' if intf.lag.lacp_mode|default('') == 'active' else diff --git a/netsim/ansible/templates/lag/eos.j2 b/netsim/ansible/templates/lag/eos.j2 index 6e05346725..b40903d25e 100644 --- a/netsim/ansible/templates/lag/eos.j2 +++ b/netsim/ansible/templates/lag/eos.j2 @@ -26,7 +26,7 @@ mlag peer-link port-channel {{ intf.lag.mlag.ifindex }} no shutdown ! -{% for ch in ([intf]+interfaces) if ch==intf or ch.lag._parentindex|default(False) == intf.linkindex %} +{% for ch in ([intf]+interfaces) if ch==intf or ch.lag._parentindex|default(False) == intf.lag.ifindex %} interface {{ ch.ifname }} description {{ ch.name }} (peerlink in channel-group {{intf.lag.mlag.ifindex }}) channel-group {{ intf.lag.mlag.ifindex }} mode active @@ -47,7 +47,7 @@ interface {{ intf.ifname }} description {{ intf.name }} {% endif %} ! -{% for ch in interfaces if ch.lag._parentindex|default(False) == intf.linkindex %} +{% for ch in interfaces if ch.lag._parentindex|default(False) == intf.lag.ifindex %} ! {% set _lag_mode = 'on' if intf.lag.lacp|default('') == 'off' else diff --git a/netsim/ansible/templates/lag/frr.j2 b/netsim/ansible/templates/lag/frr.j2 index 0d93aebe7b..e5a4eeb881 100644 --- a/netsim/ansible/templates/lag/frr.j2 +++ b/netsim/ansible/templates/lag/frr.j2 @@ -1 +1 @@ -{% include "linux.j2" %} \ No newline at end of file +{% include "linux.j2" %} diff --git a/netsim/defaults/attributes.yml b/netsim/defaults/attributes.yml index ff247320c7..6c0bb2944b 100644 --- a/netsim/defaults/attributes.yml +++ b/netsim/defaults/attributes.yml @@ -60,7 +60,7 @@ link: # Global link attributes _alt_types: [ bool_false, prefix_str, named_pfx ] role: id pool: id - type: { type: str, valid_values: [ lan, p2p, stub, loopback, tunnel, vlan_member, lag ] } + type: { type: str, valid_values: [ lan, p2p, stub, loopback, tunnel, vlan_member, lag_temp ] } unnumbered: bool interfaces: mtu: { type: int, min_value: 64, max_value: 65535 } @@ -80,6 +80,7 @@ interface: # Interface (node-to-link attachment) attributes ipv6: { type: ipv6, use: interface } ifindex: int ifname: str + type: { type: str, valid_values: [ p2p, loopback, svi, lag ] } node: name: str # Validity of node name is checked in the nodes module diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 18b4f74912..c9b8c6fa8a 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -209,7 +209,7 @@ def analyze_lag(members: list, node_count: dict) -> typing.Tuple[bool,bool,str]: l.interfaces = [] # Build interface list for lag link skip_atts = list(topology.defaults.lag.attributes.lag_no_propagate) for node in node_count: - ifatts = data.get_box({ 'node': node }) + ifatts = data.get_box({ 'node': node, 'type': 'lag' }) for m in members: # Collect attributes from member links if node in [ i.node for i in m.interfaces ]:# ...in which is involved ifatts = ifatts + { k:v for k,v in m.items() if k not in skip_atts } @@ -240,7 +240,7 @@ def analyze_lag(members: list, node_count: dict) -> typing.Tuple[bool,bool,str]: member = data.get_box({ k:v for k,v in member.items() if k in keep_attr }) # Filter out things not needed member.linkindex = len(topology.links)+1 parent = _sl if _sl and member.interfaces[0].node in split_nodes else l - member.lag._parentindex = parent.linkindex # Keep track of parent + member.lag._parentindex = parent.linkindex # Keep track of parent, updated to lag.ifindex below if log.debug_active('lag'): print(f'LAG create_lag_member_links -> adding link {member}') topology.links.append(member) @@ -317,7 +317,7 @@ def process_lag_links(topology: Box) -> None: if not create_peer_links(l,topology): # Check for errors return else: - l.type = 'lag' + l.type = 'lag_temp' # Temporary virtual link, removed in module_post_link_transform create_lag_member_links(l,topology) topology.links[l.linkindex-1].lag.pop("members",None) @@ -379,6 +379,12 @@ def module_pre_transform(self, topology: Box) -> None: process_lag_links(topology) # Expand lag.members into additional p2p links + """ + Cleanup temporary 'lag_temp' links + """ + def module_post_link_transform(self, topology: Box) -> None: + topology.links = [ link for link in topology.links if link.type != 'lag_temp' ] + """ After attribute propagation and consolidation, verify that requested features are supported. Populate MLAG peer IP and virtual MAC @@ -390,7 +396,7 @@ def node_post_transform(self, node: Box, topology: Box) -> None: has_peerlink = False uses_mlag = False for i in node.interfaces: - if i.get(PEERLINK_ID_ATT,None): # Fill in peer loopback IP and vMAC for MLAG peer links + if i.get(PEERLINK_ID_ATT,None): # Fill in peer loopback IP and vMAC for MLAG peer links populate_mlag_peer(node,i,topology) has_peerlink = True elif i.type=='lag': @@ -405,6 +411,11 @@ def node_post_transform(self, node: Box, topology: Box) -> None: if i.lag.mode!='802.3ad': i.lag.lacp = 'off' # Disable LACP for other modes + linkindex = i.pop('linkindex',None) # Remove linkindex (not sure why it's still in there?) + for m in node.interfaces: # Update members to point to lag.ifindex, replacing linkindex + if m.get('lag._parentindex',None)==linkindex: + m.lag._parentindex = i.lag.ifindex # Make _parentindex point to lag.ifindex instead + lacp_mode = i.get('lag.lacp_mode') if lacp_mode=='passive' and not features.lag.get('passive',False): log.error(f'Node {node.name}({node.device}) does not support passive LACP configured on interface {i.ifname}', diff --git a/tests/topology/expected/lag-l2.yml b/tests/topology/expected/lag-l2.yml index e0e1b75ade..6ebc45229a 100644 --- a/tests/topology/expected/lag-l2.yml +++ b/tests/topology/expected/lag-l2.yml @@ -5,27 +5,6 @@ lag: lacp: fast lacp_mode: active links: -- _linkname: links[1] - bridge: input_1 - interfaces: - - ifindex: 30000 - ifname: port-channel1 - lag: - ifindex: 1 - node: r1 - - ifindex: 30000 - ifname: port-channel1 - lag: - ifindex: 1 - node: r2 - lag: {} - linkindex: 1 - mtu: 1600 - node_count: 2 - prefix: false - stp: - enable: false - type: lag - _linkname: links[1].lag[1] interfaces: - ifindex: 1 @@ -81,7 +60,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 1 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1600 name: r1 -> r2 neighbors: @@ -158,7 +141,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 1 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1600 name: r2 -> r1 neighbors: diff --git a/tests/topology/expected/lag-l3-access-vlan.yml b/tests/topology/expected/lag-l3-access-vlan.yml index ce93b4670e..88190272d4 100644 --- a/tests/topology/expected/lag-l3-access-vlan.yml +++ b/tests/topology/expected/lag-l3-access-vlan.yml @@ -5,37 +5,6 @@ lag: lacp: fast lacp_mode: active links: -- _linkname: links[1] - bridge: input_1 - interfaces: - - _vlan_mode: irb - ifindex: 30000 - ifname: bond1 - ipv4: 172.16.0.1/24 - lag: - ifindex: 1 - node: r1 - vlan: - access: v1 - - _vlan_mode: irb - ifindex: 30000 - ifname: bond1 - ipv4: 172.16.0.2/24 - lag: - ifindex: 1 - node: r2 - vlan: - access: v1 - lag: - lacp: 'off' - linkindex: 1 - node_count: 2 - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 - type: lag - vlan: - access: v1 - _linkname: links[1].lag[1] interfaces: - ifindex: 1 @@ -105,7 +74,11 @@ nodes: ifindex: 1 lacp: 'off' lacp_mode: active +<<<<<<< HEAD linkindex: 1 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: '[Access VLAN v1] r1 -> r2' neighbors: @@ -215,7 +188,11 @@ nodes: ifindex: 1 lacp: 'off' lacp_mode: active +<<<<<<< HEAD linkindex: 1 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: '[Access VLAN v1] r2 -> r1' neighbors: diff --git a/tests/topology/expected/lag-l3-vlan-trunk.yml b/tests/topology/expected/lag-l3-vlan-trunk.yml index cf2221dbcd..4f24367af6 100644 --- a/tests/topology/expected/lag-l3-vlan-trunk.yml +++ b/tests/topology/expected/lag-l3-vlan-trunk.yml @@ -5,36 +5,6 @@ lag: lacp: fast lacp_mode: active links: -- _linkname: links[1] - bridge: input_1 - interfaces: - - ifindex: 30000 - ifname: bond1 - lag: - ifindex: 1 - node: r1 - vlan: - trunk: - v1: {} - v2: {} - - ifindex: 30000 - ifname: bond1 - lag: - ifindex: 1 - node: r2 - vlan: - trunk: - v1: {} - v2: {} - lag: {} - linkindex: 1 - node_count: 2 - prefix: {} - type: lag - vlan: - trunk: - v1: {} - v2: {} - _linkname: links[1].lag[1] interfaces: - ifindex: 1 @@ -104,7 +74,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 1 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: r1 -> r2 neighbors: @@ -260,7 +234,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 1 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: r2 -> r1 neighbors: diff --git a/tests/topology/expected/lag-l3.yml b/tests/topology/expected/lag-l3.yml index f9a197a0ae..4532d254cf 100644 --- a/tests/topology/expected/lag-l3.yml +++ b/tests/topology/expected/lag-l3.yml @@ -5,27 +5,6 @@ lag: lacp: fast lacp_mode: active links: -- _linkname: links[1] - bridge: input_1 - interfaces: - - ifindex: 30000 - ifname: port-channel1 - ipv4: 10.1.0.1/30 - lag: - ifindex: 1 - node: r1 - - ifindex: 30000 - ifname: port-channel1 - ipv4: 10.1.0.2/30 - lag: - ifindex: 1 - node: r2 - lag: {} - linkindex: 1 - node_count: 2 - prefix: - ipv4: 10.1.0.0/30 - type: lag - _linkname: links[1].lag[1] interfaces: - ifindex: 1 @@ -71,17 +50,21 @@ nodes: interfaces: - ifindex: 30000 ifname: port-channel1 - ipv4: 10.1.0.1/30 + ipv4: 172.16.0.1/24 lag: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 1 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: r1 -> r2 neighbors: - ifname: port-channel1 - ipv4: 10.1.0.2/30 + ipv4: 172.16.0.2/24 node: r2 type: lag virtual_interface: true @@ -142,17 +125,21 @@ nodes: interfaces: - ifindex: 30000 ifname: port-channel1 - ipv4: 10.1.0.2/30 + ipv4: 172.16.0.2/24 lag: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 1 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: r2 -> r1 neighbors: - ifname: port-channel1 - ipv4: 10.1.0.1/30 + ipv4: 172.16.0.1/24 node: r1 type: lag virtual_interface: true diff --git a/tests/topology/expected/lag-mlag-m_to_m.yml b/tests/topology/expected/lag-mlag-m_to_m.yml index 119255c803..cf82996dae 100644 --- a/tests/topology/expected/lag-mlag-m_to_m.yml +++ b/tests/topology/expected/lag-mlag-m_to_m.yml @@ -51,62 +51,6 @@ links: node_count: 2 prefix: false type: p2p -- _linkname: links[3] - bridge: input_3 - interfaces: - - ifindex: 30000 - ifname: port-channel1 - lag: - _mlag: true - node: a2 - vlan: - trunk: - red: {} - - ifindex: 30000 - ifname: port-channel1 - lag: - _mlag: true - node: b2 - vlan: - trunk: - red: {} - lag: - ifindex: 1 - linkindex: 3 - node_count: 2 - prefix: {} - type: lag - vlan: - trunk: - red: {} -- _linkname: links[3]-2 - bridge: input_4 - interfaces: - - ifindex: 30000 - ifname: port-channel1 - lag: - _mlag: true - node: a1 - vlan: - trunk: - red: {} - - ifindex: 30000 - ifname: port-channel1 - lag: - _mlag: true - node: b1 - vlan: - trunk: - red: {} - lag: - ifindex: 1 - linkindex: 4 - node_count: 2 - prefix: {} - type: lag - vlan: - trunk: - red: {} - _linkname: links[3].lag[1] interfaces: - ifindex: 2 @@ -225,7 +169,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 4 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: a1 -> b1 neighbors: - ifname: port-channel1 @@ -240,7 +188,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 4 + _parentindex: 1 ifindex: 10 linkindex: 5 name: a1 -> b1 @@ -344,7 +292,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 3 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: a2 -> b2 neighbors: - ifname: port-channel1 @@ -359,7 +311,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 3 + _parentindex: 1 ifindex: 10 linkindex: 6 name: a2 -> b2 @@ -450,7 +402,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 4 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: b1 -> a1 neighbors: - ifname: port-channel1 @@ -465,7 +421,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 4 + _parentindex: 1 ifindex: 20 linkindex: 5 name: b1 -> a1 @@ -556,7 +512,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 3 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: b2 -> a2 neighbors: - ifname: port-channel1 @@ -571,7 +531,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 3 + _parentindex: 1 ifindex: 20 linkindex: 6 name: b2 -> a2 diff --git a/tests/topology/expected/lag-mlag.yml b/tests/topology/expected/lag-mlag.yml index baa979d004..63d5f78b27 100644 --- a/tests/topology/expected/lag-mlag.yml +++ b/tests/topology/expected/lag-mlag.yml @@ -31,144 +31,6 @@ links: node_count: 2 prefix: false type: p2p -- _linkname: links[2] - bridge: input_2 - interfaces: - - _vlan_mode: irb - ifindex: 30000 - ifname: bond1 - ipv4: 172.16.0.3/24 - lag: - ifindex: 1 - node: h1 - vlan: - access: red - - _vlan_mode: irb - ifindex: 30000 - ifname: port-channel1 - ipv4: 172.16.0.1/24 - lag: - _mlag: true - node: s1 - vlan: - access: red - - _vlan_mode: irb - ifindex: 30000 - ifname: port-channel1 - ipv4: 172.16.0.2/24 - lag: - _mlag: true - node: s2 - vlan: - access: red - lag: - ifindex: 1 - linkindex: 2 - node_count: 3 - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 - type: lag - vlan: - access: red -- _linkname: links[3] - bridge: input_3 - interfaces: - - ifindex: 30001 - ifname: bond2 - lag: - ifindex: 2 - node: h1 - - ifindex: 30001 - ifname: port-channel2 - lag: - ifindex: 2 - node: s1 - lag: {} - linkindex: 3 - node_count: 2 - pool: l2only - type: lag -- _linkname: links[4] - bridge: input_4 - interfaces: - - _vlan_mode: irb - ifindex: 30000 - ifname: bond1 - ipv4: 172.16.0.4/24 - lag: - ifindex: 1 - node: h2 - vlan: - access: red - - _vlan_mode: irb - ifindex: 30002 - ifname: port-channel3 - ipv4: 172.16.0.1/24 - lag: - _mlag: true - node: s1 - vlan: - access: red - - _vlan_mode: irb - ifindex: 30001 - ifname: port-channel3 - ipv4: 172.16.0.2/24 - lag: - _mlag: true - node: s2 - vlan: - access: red - lag: - ifindex: 3 - linkindex: 4 - node_count: 3 - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 - type: lag - vlan: - access: red -- _linkname: links[5] - bridge: input_5 - interfaces: - - _vlan_mode: irb - ifindex: 30001 - ifname: bond2 - ipv4: 172.16.0.4/24 - lag: - ifindex: 2 - node: h2 - vlan: - access: red - - _vlan_mode: irb - ifindex: 30003 - ifname: port-channel4 - ipv4: 172.16.0.1/24 - lag: - _mlag: true - node: s1 - vlan: - access: red - - _vlan_mode: irb - ifindex: 30002 - ifname: port-channel4 - ipv4: 172.16.0.2/24 - lag: - _mlag: true - node: s2 - vlan: - access: red - lag: - ifindex: 4 - linkindex: 5 - node_count: 3 - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 - type: lag - vlan: - access: red - _linkname: links[1].peerlink[2] interfaces: - ifindex: 2 @@ -378,7 +240,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 2 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: '[Access VLAN red] h1 -> [s1,s2]' neighbors: @@ -399,7 +265,11 @@ nodes: ifindex: 2 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 3 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: h1 -> s1 neighbors: @@ -411,7 +281,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 7 mtu: 1500 name: h1 -> s1 @@ -422,7 +292,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 8 mtu: 1500 name: h1 -> s1 @@ -433,7 +303,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 9 mtu: 1500 name: h1 -> s2 @@ -444,7 +314,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 10 mtu: 1500 name: h1 -> s2 @@ -455,7 +325,7 @@ nodes: - ifindex: 5 ifname: eth5 lag: - _parentindex: 3 + _parentindex: 2 linkindex: 11 mtu: 1500 name: h1 -> s1 @@ -466,7 +336,7 @@ nodes: - ifindex: 6 ifname: eth6 lag: - _parentindex: 3 + _parentindex: 2 linkindex: 12 mtu: 1500 name: h1 -> s1 @@ -545,7 +415,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 4 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: @@ -566,7 +440,11 @@ nodes: ifindex: 2 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 5 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: @@ -584,7 +462,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 13 mtu: 1500 name: h2 -> s1 @@ -595,7 +473,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 14 mtu: 1500 name: h2 -> s1 @@ -606,7 +484,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 15 mtu: 1500 name: h2 -> s2 @@ -617,7 +495,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 16 mtu: 1500 name: h2 -> s2 @@ -628,7 +506,7 @@ nodes: - ifindex: 5 ifname: eth5 lag: - _parentindex: 5 + _parentindex: 2 linkindex: 17 mtu: 1500 name: h2 -> s1 @@ -639,7 +517,7 @@ nodes: - ifindex: 6 ifname: eth6 lag: - _parentindex: 5 + _parentindex: 2 linkindex: 18 mtu: 1500 name: h2 -> s2 @@ -729,7 +607,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 2 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: '[Access VLAN red] s1 -> [h1,s2]' neighbors: @@ -750,7 +632,11 @@ nodes: ifindex: 2 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 3 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: s1 -> h1 neighbors: @@ -766,7 +652,11 @@ nodes: ifindex: 3 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 4 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: @@ -788,7 +678,11 @@ nodes: ifindex: 4 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 5 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: @@ -821,7 +715,7 @@ nodes: ifindex: 3 ifname: ethernet1/1/3 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 7 mtu: 1500 name: s1 -> h1 @@ -834,7 +728,7 @@ nodes: ifindex: 4 ifname: ethernet1/1/4 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 8 mtu: 1500 name: s1 -> h1 @@ -847,7 +741,7 @@ nodes: ifindex: 5 ifname: ethernet1/1/5 lag: - _parentindex: 3 + _parentindex: 2 linkindex: 11 mtu: 1500 name: s1 -> h1 @@ -860,7 +754,7 @@ nodes: ifindex: 6 ifname: ethernet1/1/6 lag: - _parentindex: 3 + _parentindex: 2 linkindex: 12 mtu: 1500 name: s1 -> h1 @@ -873,7 +767,7 @@ nodes: ifindex: 7 ifname: ethernet1/1/7 lag: - _parentindex: 4 + _parentindex: 3 linkindex: 13 mtu: 1500 name: s1 -> h2 @@ -886,7 +780,7 @@ nodes: ifindex: 8 ifname: ethernet1/1/8 lag: - _parentindex: 4 + _parentindex: 3 linkindex: 14 mtu: 1500 name: s1 -> h2 @@ -899,7 +793,7 @@ nodes: ifindex: 9 ifname: ethernet1/1/9 lag: - _parentindex: 5 + _parentindex: 4 linkindex: 17 mtu: 1500 name: s1 -> h2 @@ -989,7 +883,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 2 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: '[Access VLAN red] s2 -> [h1,s1]' neighbors: @@ -1011,7 +909,11 @@ nodes: ifindex: 3 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 4 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: @@ -1033,7 +935,11 @@ nodes: ifindex: 4 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 5 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: @@ -1066,7 +972,7 @@ nodes: ifindex: 3 ifname: ethernet1/1/3 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 9 mtu: 1500 name: s2 -> h1 @@ -1079,7 +985,7 @@ nodes: ifindex: 4 ifname: ethernet1/1/4 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 10 mtu: 1500 name: s2 -> h1 @@ -1092,7 +998,7 @@ nodes: ifindex: 5 ifname: ethernet1/1/5 lag: - _parentindex: 4 + _parentindex: 3 linkindex: 15 mtu: 1500 name: s2 -> h2 @@ -1105,7 +1011,7 @@ nodes: ifindex: 6 ifname: ethernet1/1/6 lag: - _parentindex: 4 + _parentindex: 3 linkindex: 16 mtu: 1500 name: s2 -> h2 @@ -1118,7 +1024,7 @@ nodes: ifindex: 7 ifname: ethernet1/1/7 lag: - _parentindex: 5 + _parentindex: 4 linkindex: 18 mtu: 1500 name: s2 -> h2 diff --git a/tests/topology/expected/node.clone-plugin-lag.yml b/tests/topology/expected/node.clone-plugin-lag.yml index 12388dbf98..1f936e8e99 100644 --- a/tests/topology/expected/node.clone-plugin-lag.yml +++ b/tests/topology/expected/node.clone-plugin-lag.yml @@ -29,152 +29,6 @@ links: node_count: 2 prefix: false type: p2p -- _linkname: links[2] - bridge: input_2 - interfaces: - - ifindex: 30000 - ifname: port-channel8 - node: r1 - - ifindex: 30000 - ifname: bond8 - node: h-01 - lag: - ifindex: 8 - linkindex: 2 - node_count: 2 - pool: l2only - type: lag -- _linkname: links[3] - bridge: input_3 - interfaces: - - ifindex: 30001 - ifname: port-channel9 - node: r1 - - ifindex: 30000 - ifname: bond9 - node: h-02 - lag: - ifindex: 9 - linkindex: 3 - node_count: 2 - pool: l2only - type: lag -- _linkname: links[4] - bridge: input_4 - interfaces: - - ifindex: 30000 - ifname: port-channel1 - lag: - ifindex: 1 - node: r2 - - ifindex: 30001 - ifname: bond9 - lag: - ifindex: 9 - node: h-01 - lag: {} - linkindex: 4 - node_count: 2 - pool: l2only - type: lag -- _linkname: links[5] - bridge: input_5 - interfaces: - - ifindex: 30001 - ifname: port-channel2 - lag: - ifindex: 2 - node: r2 - - ifindex: 30001 - ifname: bond10 - lag: - ifindex: 10 - node: h-02 - lag: {} - linkindex: 5 - node_count: 2 - pool: l2only - type: lag -- _linkname: links[6] - bridge: input_6 - interfaces: - - _vlan_mode: irb - ifindex: 30000 - ifname: bond1 - ipv4: 172.16.0.5/24 - lag: - ifindex: 1 - node: h2-01 - vlan: - access: red - - _vlan_mode: irb - ifindex: 30002 - ifname: port-channel10 - ipv4: 172.16.0.1/24 - lag: - _mlag: true - node: r1 - vlan: - access: red - - _vlan_mode: irb - ifindex: 30002 - ifname: port-channel10 - ipv4: 172.16.0.2/24 - lag: - _mlag: true - node: r2 - vlan: - access: red - lag: - ifindex: 10 - linkindex: 6 - node_count: 3 - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 - type: lag - vlan: - access: red -- _linkname: links[7] - bridge: input_7 - interfaces: - - _vlan_mode: irb - ifindex: 30000 - ifname: bond1 - ipv4: 172.16.0.6/24 - lag: - ifindex: 1 - node: h2-02 - vlan: - access: red - - _vlan_mode: irb - ifindex: 30003 - ifname: port-channel11 - ipv4: 172.16.0.1/24 - lag: - _mlag: true - node: r1 - vlan: - access: red - - _vlan_mode: irb - ifindex: 30003 - ifname: port-channel11 - ipv4: 172.16.0.2/24 - lag: - _mlag: true - node: r2 - vlan: - access: red - lag: - ifindex: 11 - linkindex: 7 - node_count: 3 - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 - type: lag - vlan: - access: red - _linkname: links[2].lag[1] interfaces: - ifindex: 2 @@ -361,7 +215,11 @@ nodes: ifindex: 8 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 2 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: h-01 -> r1 neighbors: - ifname: port-channel8 @@ -375,7 +233,11 @@ nodes: ifindex: 9 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 4 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: h-01 -> r2 neighbors: - ifname: port-channel1 @@ -386,7 +248,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 2 + _parentindex: 8 linkindex: 8 name: h-01 -> r1 neighbors: @@ -396,7 +258,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 2 + _parentindex: 8 linkindex: 9 name: h-01 -> r1 neighbors: @@ -406,7 +268,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 4 + _parentindex: 9 linkindex: 12 name: h-01 -> r2 neighbors: @@ -416,7 +278,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 4 + _parentindex: 9 linkindex: 13 name: h-01 -> r2 neighbors: @@ -454,7 +316,11 @@ nodes: ifindex: 9 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 3 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: h-02 -> r1 neighbors: - ifname: port-channel9 @@ -468,7 +334,11 @@ nodes: ifindex: 10 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 5 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: h-02 -> r2 neighbors: - ifname: port-channel2 @@ -479,7 +349,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 3 + _parentindex: 9 linkindex: 10 name: h-02 -> r1 neighbors: @@ -489,7 +359,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 3 + _parentindex: 9 linkindex: 11 name: h-02 -> r1 neighbors: @@ -499,7 +369,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 5 + _parentindex: 10 linkindex: 14 name: h-02 -> r2 neighbors: @@ -509,7 +379,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 5 + _parentindex: 10 linkindex: 15 name: h-02 -> r2 neighbors: @@ -547,7 +417,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 6 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] h2-01 -> [r1,r2]' neighbors: - ifname: port-channel10 @@ -564,7 +438,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 6 + _parentindex: 1 linkindex: 16 name: h2-01 -> r1 neighbors: @@ -574,7 +448,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 6 + _parentindex: 1 linkindex: 17 name: h2-01 -> r2 neighbors: @@ -642,7 +516,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 7 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] h2-02 -> [r1,r2]' neighbors: - ifname: port-channel11 @@ -659,7 +537,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 7 + _parentindex: 1 linkindex: 18 name: h2-02 -> r1 neighbors: @@ -669,7 +547,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 7 + _parentindex: 1 linkindex: 19 name: h2-02 -> r2 neighbors: @@ -752,7 +630,11 @@ nodes: ifindex: 8 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 2 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: r1 -> h-01 neighbors: - ifname: bond8 @@ -766,7 +648,11 @@ nodes: ifindex: 9 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 3 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: r1 -> h-02 neighbors: - ifname: bond9 @@ -781,7 +667,11 @@ nodes: ifindex: 10 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 6 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r1 -> [h2-01,r2]' neighbors: - ifname: bond1 @@ -802,7 +692,11 @@ nodes: ifindex: 11 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 7 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r1 -> [h2-02,r2]' neighbors: - ifname: bond1 @@ -819,7 +713,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 2 + _parentindex: 8 linkindex: 8 name: r1 -> h-01 neighbors: @@ -829,7 +723,7 @@ nodes: - ifindex: 3 ifname: Ethernet3 lag: - _parentindex: 2 + _parentindex: 8 linkindex: 9 name: r1 -> h-01 neighbors: @@ -839,7 +733,7 @@ nodes: - ifindex: 4 ifname: Ethernet4 lag: - _parentindex: 3 + _parentindex: 9 linkindex: 10 name: r1 -> h-02 neighbors: @@ -849,7 +743,7 @@ nodes: - ifindex: 5 ifname: Ethernet5 lag: - _parentindex: 3 + _parentindex: 9 linkindex: 11 name: r1 -> h-02 neighbors: @@ -859,7 +753,7 @@ nodes: - ifindex: 6 ifname: Ethernet6 lag: - _parentindex: 6 + _parentindex: 10 linkindex: 16 name: r1 -> h2-01 neighbors: @@ -869,7 +763,7 @@ nodes: - ifindex: 7 ifname: Ethernet7 lag: - _parentindex: 7 + _parentindex: 11 linkindex: 18 name: r1 -> h2-02 neighbors: @@ -950,7 +844,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 6 + _parentindex: 10 linkindex: 17 name: r2 -> h2-01 neighbors: @@ -960,7 +854,7 @@ nodes: - ifindex: 3 ifname: Ethernet3 lag: - _parentindex: 7 + _parentindex: 11 linkindex: 19 name: r2 -> h2-02 neighbors: @@ -997,7 +891,7 @@ nodes: - ifindex: 6 ifname: Ethernet6 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 12 name: r2 -> h-01 neighbors: @@ -1007,7 +901,7 @@ nodes: - ifindex: 7 ifname: Ethernet7 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 13 name: r2 -> h-01 neighbors: @@ -1017,7 +911,7 @@ nodes: - ifindex: 8 ifname: Ethernet8 lag: - _parentindex: 5 + _parentindex: 2 linkindex: 14 name: r2 -> h-02 neighbors: @@ -1027,7 +921,7 @@ nodes: - ifindex: 9 ifname: Ethernet9 lag: - _parentindex: 5 + _parentindex: 2 linkindex: 15 name: r2 -> h-02 neighbors: @@ -1040,7 +934,11 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 4 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: r2 -> h-01 neighbors: - ifname: bond9 @@ -1054,7 +952,11 @@ nodes: ifindex: 2 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 5 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: r2 -> h-02 neighbors: - ifname: bond10 @@ -1069,7 +971,11 @@ nodes: ifindex: 10 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 6 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r2 -> [h2-01,r1]' neighbors: - ifname: bond1 @@ -1090,7 +996,11 @@ nodes: ifindex: 11 lacp: fast lacp_mode: active +<<<<<<< HEAD linkindex: 7 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r2 -> [h2-02,r1]' neighbors: - ifname: bond1 From 95f6a5b76ad85baabea5fa70ffb99fd38f51a0d7 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Thu, 12 Dec 2024 21:52:38 -0600 Subject: [PATCH 02/36] 'lan' and 'stub' are used for --- netsim/defaults/attributes.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netsim/defaults/attributes.yml b/netsim/defaults/attributes.yml index 6c0bb2944b..9c4ecf4586 100644 --- a/netsim/defaults/attributes.yml +++ b/netsim/defaults/attributes.yml @@ -80,7 +80,7 @@ interface: # Interface (node-to-link attachment) attributes ipv6: { type: ipv6, use: interface } ifindex: int ifname: str - type: { type: str, valid_values: [ p2p, loopback, svi, lag ] } + type: { type: str, valid_values: [ p2p, lan, stub, loopback, svi, lag ] } node: name: str # Validity of node name is checked in the nodes module From cc539f053053f0147e689acbb3b7ea0488df5e8c Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Thu, 12 Dec 2024 22:17:09 -0600 Subject: [PATCH 03/36] Rename to 'virtual_lag' --- netsim/defaults/attributes.yml | 2 +- netsim/modules/lag.py | 6 +++--- tests/topology/expected/lag-l3.yml | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/netsim/defaults/attributes.yml b/netsim/defaults/attributes.yml index 9c4ecf4586..28475b173c 100644 --- a/netsim/defaults/attributes.yml +++ b/netsim/defaults/attributes.yml @@ -60,7 +60,7 @@ link: # Global link attributes _alt_types: [ bool_false, prefix_str, named_pfx ] role: id pool: id - type: { type: str, valid_values: [ lan, p2p, stub, loopback, tunnel, vlan_member, lag_temp ] } + type: { type: str, valid_values: [ lan, p2p, stub, loopback, tunnel, vlan_member, virtual_lag ] } unnumbered: bool interfaces: mtu: { type: int, min_value: 64, max_value: 65535 } diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index c9b8c6fa8a..610443078c 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -317,7 +317,7 @@ def process_lag_links(topology: Box) -> None: if not create_peer_links(l,topology): # Check for errors return else: - l.type = 'lag_temp' # Temporary virtual link, removed in module_post_link_transform + l.type = 'virtual_lag' # Temporary virtual link, removed in module_post_link_transform create_lag_member_links(l,topology) topology.links[l.linkindex-1].lag.pop("members",None) @@ -380,10 +380,10 @@ def module_pre_transform(self, topology: Box) -> None: process_lag_links(topology) # Expand lag.members into additional p2p links """ - Cleanup temporary 'lag_temp' links + Cleanup temporary 'virtual_lag' links """ def module_post_link_transform(self, topology: Box) -> None: - topology.links = [ link for link in topology.links if link.type != 'lag_temp' ] + topology.links = [ link for link in topology.links if link.type != 'virtual_lag' ] """ After attribute propagation and consolidation, verify that requested features are supported. diff --git a/tests/topology/expected/lag-l3.yml b/tests/topology/expected/lag-l3.yml index 4532d254cf..e7e6a2643e 100644 --- a/tests/topology/expected/lag-l3.yml +++ b/tests/topology/expected/lag-l3.yml @@ -50,7 +50,7 @@ nodes: interfaces: - ifindex: 30000 ifname: port-channel1 - ipv4: 172.16.0.1/24 + ipv4: 10.1.0.1/30 lag: ifindex: 1 lacp: fast @@ -64,7 +64,7 @@ nodes: name: r1 -> r2 neighbors: - ifname: port-channel1 - ipv4: 172.16.0.2/24 + ipv4: 10.1.0.2/30 node: r2 type: lag virtual_interface: true @@ -125,7 +125,7 @@ nodes: interfaces: - ifindex: 30000 ifname: port-channel1 - ipv4: 172.16.0.2/24 + ipv4: 10.1.0.2/30 lag: ifindex: 1 lacp: fast @@ -139,7 +139,7 @@ nodes: name: r2 -> r1 neighbors: - ifname: port-channel1 - ipv4: 172.16.0.1/24 + ipv4: 10.1.0.1/30 node: r1 type: lag virtual_interface: true From 02eb26c4c87527b4542b4f45a101adf413816de8 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Thu, 12 Dec 2024 22:31:27 -0600 Subject: [PATCH 04/36] Use '_peerlink' for peerlinks to make it more clear that those match on intf.linkindex, not intf.lag.ifindex --- netsim/ansible/templates/lag/dellos10.j2 | 2 +- netsim/ansible/templates/lag/eos.j2 | 2 +- netsim/modules/lag.py | 2 +- tests/topology/expected/lag-mlag.yml | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/netsim/ansible/templates/lag/dellos10.j2 b/netsim/ansible/templates/lag/dellos10.j2 index aece7c9457..161562b8fa 100644 --- a/netsim/ansible/templates/lag/dellos10.j2 +++ b/netsim/ansible/templates/lag/dellos10.j2 @@ -5,7 +5,7 @@ vlt-domain {{ intf.lag.mlag.peergroup }} backup destination {{ intf.lag.mlag.peer }} vlt-mac {{ intf.lag.mlag.mac | hwaddr('linux') }} discovery-interface {{ intf.ifname }} -{% for ch in interfaces if ch.lag._parentindex|default(False) == intf.linkindex %} +{% for ch in interfaces if ch.lag._peerlink|default(0) == intf.linkindex %} discovery-interface {{ ch.ifname }} {% endfor %} {% endfor %} diff --git a/netsim/ansible/templates/lag/eos.j2 b/netsim/ansible/templates/lag/eos.j2 index b40903d25e..86abb982fc 100644 --- a/netsim/ansible/templates/lag/eos.j2 +++ b/netsim/ansible/templates/lag/eos.j2 @@ -26,7 +26,7 @@ mlag peer-link port-channel {{ intf.lag.mlag.ifindex }} no shutdown ! -{% for ch in ([intf]+interfaces) if ch==intf or ch.lag._parentindex|default(False) == intf.lag.ifindex %} +{% for ch in ([intf]+interfaces) if ch==intf or ch.lag._peerlink|default(0) == intf.linkindex %} interface {{ ch.ifname }} description {{ ch.name }} (peerlink in channel-group {{intf.lag.mlag.ifindex }}) channel-group {{ intf.lag.mlag.ifindex }} mode active diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 610443078c..f1225489a6 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -286,7 +286,7 @@ def check_same_pair(member: Box) -> bool: if not check_same_pair(member): # Check that any additional links connect the same nodes return False member.linkindex = len(topology.links)+1 - member.lag._parentindex = l.linkindex # Keep track of parent + member.lag._peerlink = l.linkindex # Keep track of parent if log.debug_active('lag'): print(f'LAG create_peer_links -> adding link {member}') topology.links.append(member) diff --git a/tests/topology/expected/lag-mlag.yml b/tests/topology/expected/lag-mlag.yml index 63d5f78b27..13f680661f 100644 --- a/tests/topology/expected/lag-mlag.yml +++ b/tests/topology/expected/lag-mlag.yml @@ -40,7 +40,7 @@ links: ifname: ethernet1/1/2 node: s1 lag: - _parentindex: 1 + _peerlink: 1 linkindex: 6 node_count: 2 prefix: false @@ -702,7 +702,7 @@ nodes: ifindex: 2 ifname: ethernet1/1/2 lag: - _parentindex: 1 + _peerlink: 1 linkindex: 6 mtu: 1500 name: s1 -> s2 @@ -959,7 +959,7 @@ nodes: ifindex: 2 ifname: ethernet1/1/2 lag: - _parentindex: 1 + _peerlink: 1 linkindex: 6 mtu: 1500 name: s2 -> s1 From b99c6ac9c84f5a8311cdf341b9cdc6acc5d89590 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Thu, 12 Dec 2024 22:46:53 -0600 Subject: [PATCH 05/36] vlan_member is also an interface type --- netsim/defaults/attributes.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netsim/defaults/attributes.yml b/netsim/defaults/attributes.yml index 28475b173c..5592b8cb09 100644 --- a/netsim/defaults/attributes.yml +++ b/netsim/defaults/attributes.yml @@ -80,7 +80,7 @@ interface: # Interface (node-to-link attachment) attributes ipv6: { type: ipv6, use: interface } ifindex: int ifname: str - type: { type: str, valid_values: [ p2p, lan, stub, loopback, svi, lag ] } + type: { type: str, valid_values: [ p2p, lan, stub, loopback, vlan_member, svi, lag ] } node: name: str # Validity of node name is checked in the nodes module From 9f4eebd1559f67f3396b25b4ecf28bc1153b57fd Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Thu, 12 Dec 2024 22:54:24 -0600 Subject: [PATCH 06/36] Update error test --- tests/errors/link-invalid-type.log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/errors/link-invalid-type.log b/tests/errors/link-invalid-type.log index e47a24f608..10c80ea23d 100644 --- a/tests/errors/link-invalid-type.log +++ b/tests/errors/link-invalid-type.log @@ -1,4 +1,4 @@ IncorrectValue in links: attribute links[1].type has invalid value(s): wtf -... valid values are: lan,p2p,stub,loopback,tunnel,vlan_member,lag +... valid values are: lan,p2p,stub,loopback,tunnel,vlan_member,virtual_lag ... use 'netlab show attributes link' to display valid attributes Fatal error in netlab: Cannot proceed beyond this point due to errors, exiting From 4b062dba6d3fb0dc29f90a3e373f5b314f75e67c Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Fri, 13 Dec 2024 15:32:19 -0600 Subject: [PATCH 07/36] * Remove interface.type definition -> requires refactoring of when lag interfaces get created * Fix the moment lag interfaces get created: After interface attribute validation, but before vlan pre link transformation callbacks Some issue remains with IP addresses being allocated to lag interfaces instead of vlan SVI --- netsim/defaults/attributes.yml | 1 - netsim/modules/lag.py | 145 +++++++++------ .../topology/expected/lag-l3-access-vlan.yml | 72 +------- tests/topology/expected/lag-l3-vlan-trunk.yml | 168 +----------------- 4 files changed, 98 insertions(+), 288 deletions(-) diff --git a/netsim/defaults/attributes.yml b/netsim/defaults/attributes.yml index 5592b8cb09..b407de8936 100644 --- a/netsim/defaults/attributes.yml +++ b/netsim/defaults/attributes.yml @@ -80,7 +80,6 @@ interface: # Interface (node-to-link attachment) attributes ipv6: { type: ipv6, use: interface } ifindex: int ifname: str - type: { type: str, valid_values: [ p2p, lan, stub, loopback, vlan_member, svi, lag ] } node: name: str # Validity of node name is checked in the nodes module diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index f1225489a6..6ae5af05e0 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -144,28 +144,54 @@ def set_lag_ifindex(laglink: Box, intf: Box, is_mside: bool, topology: Box) -> b """ split_dual_mlag_link - Split dual-mlag pairs into 2 lag link groups, returns the new link """ -def split_dual_mlag_link(link: Box, topology: Box) -> Box: +def split_dual_mlag_link(link: Box, topology: Box) -> None: def no_peer(i: Box) -> Box: i.pop('_peer',None) # Remove internal _peer attribute - return i - + return i + split_copy = data.get_box(link) # Make a copy split_copy.linkindex = len(topology.links)+1 # Update its link index split_copy._linkname = split_copy._linkname + "-2" # Assign unique name - split_copy.lag.pop('members',None) # Clean up members first_pair = ( link.interfaces[0].node, link.interfaces[0]._peer ) split_copy.interfaces = [ no_peer(i) for i in link.interfaces if i.node in first_pair ] topology.links[link.linkindex-1].interfaces = [ no_peer(i) for i in link.interfaces if i.node not in first_pair ] + + for l in topology.links: + if 'lag' in l: + nodes = [ i.node for i in l.interfaces ] + if first_pair[0] in nodes and first_pair[1] in nodes: + print(f"Update _parentindex={split_copy.linkindex}") + l.lag._parentindex = split_copy.linkindex + if log.debug_active('lag'): print(f'LAG split_dual_mlag_links -> adding split link {split_copy}') print(f'LAG split_dual_mlag_links -> remaining link {topology.links[link.linkindex-1]}') topology.links.append(split_copy) - return split_copy """ create_lag_member_links -- expand lag.members for link l and create physical p2p links """ def create_lag_member_links(l: Box, topology: Box) -> None: + members = normalized_members(l,topology) # Build list of normalized member links + if not members: + return + l.lag.members = members # Update for create_lag_interfaces + + l2_ifdata = create_l2_link_base(l,topology) + keep_attr = list(topology.defaults.lag.attributes.lag_member_ifattr) + for member in members: + member = l2_ifdata + member # Copy L2 data into member link + member = data.get_box({ k:v for k,v in member.items() if k in keep_attr }) # Filter out things not needed + member.linkindex = len(topology.links)+1 + member.lag._parentindex = l.linkindex # Keep track of parent, updated to lag.ifindex below + if log.debug_active('lag'): + print(f'LAG create_lag_member_links -> adding link {member}') + topology.links.append(member) + +""" +create_lag_interfaces -- create interfaces of type "lag" for each link of type virtual_lag +""" +def create_lag_interfaces(l: Box, topology: Box) -> None: """ analyze_lag - figure out which type of LAG we're dealing with: @@ -175,19 +201,19 @@ def create_lag_member_links(l: Box, topology: Box) -> None: Returns updated node_count set, bool is_mlag, bool dual_mlag, string one_side """ - def analyze_lag(members: list, node_count: dict) -> typing.Tuple[bool,bool,str]: + def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple[bool,bool,str]: for m in members: for i in m.interfaces: if i.node in node_count: node_count[ i.node ] = node_count[ i.node ] + 1 else: node_count[ i.node ] = 1 - + if len(node_count)==2: # Regular LAG between 2 nodes return (False,False,"") elif len(node_count)==3: # 1:2 MLAG or weird MLAG triangle for node_name,count in node_count.items(): - if count==len(members): + if count==len(l.lag.members): return (True,False,node_name) # Found the 1-side node elif len(node_count)==4: # 2:2 dual MLAG return (True,True,"") @@ -207,6 +233,7 @@ def analyze_lag(members: list, node_count: dict) -> typing.Tuple[bool,bool,str]: return l.interfaces = [] # Build interface list for lag link + members = l.pop('lag.members',[]) # Remove lag.members skip_atts = list(topology.defaults.lag.attributes.lag_no_propagate) for node in node_count: ifatts = data.get_box({ 'node': node, 'type': 'lag' }) @@ -230,25 +257,13 @@ def analyze_lag(members: list, node_count: dict) -> typing.Tuple[bool,bool,str]: print(f'LAG create_lag_member_links for node {node} -> collected ifatts {ifatts}') l.interfaces.append( ifatts ) - _sl = split_dual_mlag_link(l,topology) if dual_mlag else None - split_nodes = [ i.node for i in _sl.interfaces ] if _sl else [] - - l2_ifdata = create_l2_link_base(l,topology) - keep_attr = list(topology.defaults.lag.attributes.lag_member_ifattr) - for member in members: - member = l2_ifdata + member # Copy L2 data into member link - member = data.get_box({ k:v for k,v in member.items() if k in keep_attr }) # Filter out things not needed - member.linkindex = len(topology.links)+1 - parent = _sl if _sl and member.interfaces[0].node in split_nodes else l - member.lag._parentindex = parent.linkindex # Keep track of parent, updated to lag.ifindex below - if log.debug_active('lag'): - print(f'LAG create_lag_member_links -> adding link {member}') - topology.links.append(member) + if dual_mlag: + split_dual_mlag_link(l,topology) """ create_peer_links -- creates and configures physical link(s) for given peer link """ -def create_peer_links(l: Box, topology: Box) -> bool: +def create_peer_links(l: Box, topology: Box) -> None: """ check_same_pair - Verifies that the given member connects the same pair of nodes as the first @@ -276,50 +291,46 @@ def check_same_pair(member: Box) -> bool: log.error(f'Nodes {first_pair} on MLAG peerlink {member._linkname} have different device types ({_devs})', category=log.IncorrectValue, module='lag') - return False + return for node in first_pair: if not check_mlag_support(node,l._linkname,topology): - return False + return if log.debug_active('lag'): print(f'LAG create_peer_links -> updated first link {l} from {member} -> {topology.links[l.linkindex-1]}') else: if not check_same_pair(member): # Check that any additional links connect the same nodes - return False + return member.linkindex = len(topology.links)+1 member.lag._peerlink = l.linkindex # Keep track of parent if log.debug_active('lag'): print(f'LAG create_peer_links -> adding link {member}') topology.links.append(member) - - return True + + l.pop("lag.members",None) # Cleanup, TODO may need to modify topology.links instead """ -process_lag_links - process all links with 'lag' attribute +process_lag_link - process link with 'lag' attribute to create links for lag.members """ -def process_lag_links(topology: Box) -> None: - for l in list(topology.links): # Make a copy of the list, gets modified - if 'lag' not in l: - continue - elif not 'members' in l.lag: - log.error(f'must define "lag.members" on LAG link {l._linkname}', - category=log.IncorrectAttr, - module='lag') - continue - elif not _types.must_be_list(parent=l.lag,key='members',path=l._linkname,module='lag'): - continue - - peerlink_id = l.get(PEERLINK_ID_ATT,None) # Turn internal MLAG links into p2p links - if peerlink_id: - if peerlink_id is True: # Auto-assign peerlink ID if requested - l[PEERLINK_ID_ATT] = _dataplane.get_next_id(PEERLINK_ID_SET) - l.type = 'p2p' - l.prefix = False # L2-only - if not create_peer_links(l,topology): # Check for errors - return - else: - l.type = 'virtual_lag' # Temporary virtual link, removed in module_post_link_transform - create_lag_member_links(l,topology) - topology.links[l.linkindex-1].lag.pop("members",None) +def process_lag_link(link: Box, topology: Box) -> None: + if not 'members' in link.lag: + log.error(f'must define "lag.members" on LAG link {link._linkname}', + category=log.IncorrectAttr, + module='lag') + return + elif not _types.must_be_list(parent=link.lag,key='members',path=link._linkname,module='lag'): + return + + peerlink_id = link.get(PEERLINK_ID_ATT,None) # Turn internal MLAG links into p2p links + if peerlink_id: + if peerlink_id is True: # Auto-assign peerlink ID if requested + link[PEERLINK_ID_ATT] = _dataplane.get_next_id(PEERLINK_ID_SET) + link.type = 'p2p' + link.prefix = False # L2-only + if not create_peer_links(link,topology): # Check for errors + return + else: + link.type = 'virtual_lag' # Temporary virtual link, removed in module_post_link_transform + create_lag_member_links(link,topology) # # populate_mlag_peer - Lookup the IPv4 loopback address for the mlag peer, and derive a virtual MAC to use @@ -369,20 +380,40 @@ def populate_mlag_peer(node: Box, intf: Box, topology: Box) -> None: class LAG(_Module): """ - module_pre_transform -- Add links listed in each lag.members to the topology + module_pre_transform -- Analyze any user provided lag.ifindex values and peerlink ids, convert lag.members to links """ def module_pre_transform(self, topology: Box) -> None: if log.debug_active('lag'): - print(f'LAG module_pre_transform') + print(f'LAG module_pre_transform: Convert lag.members into additional topology.links') + + if not 'links' in topology: + return + populate_lag_id_set(topology) populate_peerlink_id_set(topology) - process_lag_links(topology) # Expand lag.members into additional p2p links + for link in list(topology.links): # Make a copy, may get modified + if 'lag' in link: + process_lag_link(link,topology) """ - Cleanup temporary 'virtual_lag' links + module_pre_link_transform - Create 'lag' type interfaces for every temporary 'virtual_lag' link + + This has to be done after interface attribute validation, and before vlan link_pre_link_transform is called + """ + def module_pre_link_transform(self, topology: Box) -> None: + if log.debug_active('lag'): + print(f'LAG module_pre_link_transform: Create "lag" interfaces for every "virtual_lag"') + for link in list(topology.links): # Make a copy, links may get added + if link.get('type',None)=='virtual_lag': + create_lag_interfaces(link,topology) # Create lag interfaces + + """ + module_post_link_transform - remove temporary 'virtual_lag' links """ def module_post_link_transform(self, topology: Box) -> None: + if log.debug_active('lag'): + print(f'LAG module_post_link_transform: Cleanup "virtual_lag" links') topology.links = [ link for link in topology.links if link.type != 'virtual_lag' ] """ diff --git a/tests/topology/expected/lag-l3-access-vlan.yml b/tests/topology/expected/lag-l3-access-vlan.yml index 88190272d4..086d6f0c39 100644 --- a/tests/topology/expected/lag-l3-access-vlan.yml +++ b/tests/topology/expected/lag-l3-access-vlan.yml @@ -70,6 +70,7 @@ nodes: interfaces: - ifindex: 30000 ifname: bond1 + ipv4: 10.1.0.1/30 lag: ifindex: 1 lacp: 'off' @@ -80,16 +81,13 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: '[Access VLAN v1] r1 -> r2' + name: r1 -> r2 neighbors: - ifname: bond1 - ipv4: 172.16.0.2/24 + ipv4: 10.1.0.2/30 node: r2 type: lag virtual_interface: true - vlan: - access: v1 - access_id: 1000 - ifindex: 1 ifname: eth1 lag: @@ -123,20 +121,6 @@ nodes: - ifname: eth3 node: r2 type: p2p - - bridge_group: 1 - ifindex: 4 - ifname: vlan1000 - ipv4: 172.16.0.1/24 - name: VLAN v1 (1000) -> [r2] - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.2/24 - node: r2 - type: svi - virtual_interface: true - vlan: - mode: irb - name: v1 lag: lacp: fast lacp_mode: active @@ -156,16 +140,6 @@ nodes: - vlan mtu: 1500 name: r1 - vlan: - max_bridge_group: 1 - vlans: - v1: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 r2: af: ipv4: true @@ -184,6 +158,7 @@ nodes: interfaces: - ifindex: 30000 ifname: bond1 + ipv4: 10.1.0.2/30 lag: ifindex: 1 lacp: 'off' @@ -194,16 +169,13 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: '[Access VLAN v1] r2 -> r1' + name: r2 -> r1 neighbors: - ifname: bond1 - ipv4: 172.16.0.1/24 + ipv4: 10.1.0.1/30 node: r1 type: lag virtual_interface: true - vlan: - access: v1 - access_id: 1000 - ifindex: 1 ifname: eth1 lag: @@ -237,20 +209,6 @@ nodes: - ifname: eth3 node: r1 type: p2p - - bridge_group: 1 - ifindex: 4 - ifname: vlan1000 - ipv4: 172.16.0.2/24 - name: VLAN v1 (1000) -> [r1] - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.1/24 - node: r1 - type: svi - virtual_interface: true - vlan: - mode: irb - name: v1 lag: lacp: fast lacp_mode: active @@ -270,28 +228,10 @@ nodes: - vlan mtu: 1500 name: r2 - vlan: - max_bridge_group: 1 - vlans: - v1: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 provider: clab vlans: v1: - host_count: 0 id: 1000 - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.2/24 - node: r2 - - ifname: vlan1000 - ipv4: 172.16.0.1/24 - node: r1 prefix: allocation: id_based ipv4: 172.16.0.0/24 diff --git a/tests/topology/expected/lag-l3-vlan-trunk.yml b/tests/topology/expected/lag-l3-vlan-trunk.yml index 4f24367af6..cc01828ec0 100644 --- a/tests/topology/expected/lag-l3-vlan-trunk.yml +++ b/tests/topology/expected/lag-l3-vlan-trunk.yml @@ -70,6 +70,7 @@ nodes: interfaces: - ifindex: 30000 ifname: bond1 + ipv4: 10.1.0.1/30 lag: ifindex: 1 lacp: fast @@ -83,8 +84,8 @@ nodes: name: r1 -> r2 neighbors: - ifname: bond1 + ipv4: 10.1.0.2/30 node: r2 - subif_index: 2 type: lag virtual_interface: true - ifindex: 1 @@ -120,62 +121,6 @@ nodes: - ifname: eth3 node: r2 type: p2p - - ifindex: 4 - ifname: bond1.1000 - name: '[SubIf VLAN v1] r1 -> r2' - neighbors: - - ifname: eth4 - ipv4: 172.16.0.2/24 - node: r2 - parent_ifindex: 30000 - parent_ifname: bond1 - type: vlan_member - virtual_interface: true - vlan: - access: v1 - access_id: 1000 - - ifindex: 5 - ifname: bond1.1001 - name: '[SubIf VLAN v2] r1 -> r2' - neighbors: - - ifname: eth5 - ipv4: 172.16.1.2/24 - node: r2 - parent_ifindex: 30000 - parent_ifname: bond1 - type: vlan_member - virtual_interface: true - vlan: - access: v2 - access_id: 1001 - - bridge_group: 1 - ifindex: 6 - ifname: vlan1000 - ipv4: 172.16.0.1/24 - name: VLAN v1 (1000) -> [r2] - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.2/24 - node: r2 - type: svi - virtual_interface: true - vlan: - mode: irb - name: v1 - - bridge_group: 2 - ifindex: 7 - ifname: vlan1001 - ipv4: 172.16.1.1/24 - name: VLAN v2 (1001) -> [r2] - neighbors: - - ifname: vlan1001 - ipv4: 172.16.1.2/24 - node: r2 - type: svi - virtual_interface: true - vlan: - mode: irb - name: v2 lag: lacp: fast lacp_mode: active @@ -195,23 +140,6 @@ nodes: - vlan mtu: 1500 name: r1 - vlan: - max_bridge_group: 2 - vlans: - v1: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 - v2: - bridge_group: 2 - id: 1001 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.1.0/24 r2: af: ipv4: true @@ -230,6 +158,7 @@ nodes: interfaces: - ifindex: 30000 ifname: bond1 + ipv4: 10.1.0.2/30 lag: ifindex: 1 lacp: fast @@ -243,8 +172,8 @@ nodes: name: r2 -> r1 neighbors: - ifname: bond1 + ipv4: 10.1.0.1/30 node: r1 - subif_index: 2 type: lag virtual_interface: true - ifindex: 1 @@ -280,62 +209,6 @@ nodes: - ifname: eth3 node: r1 type: p2p - - ifindex: 4 - ifname: bond1.1000 - name: '[SubIf VLAN v1] r2 -> r1' - neighbors: - - ifname: eth4 - ipv4: 172.16.0.1/24 - node: r1 - parent_ifindex: 30000 - parent_ifname: bond1 - type: vlan_member - virtual_interface: true - vlan: - access: v1 - access_id: 1000 - - ifindex: 5 - ifname: bond1.1001 - name: '[SubIf VLAN v2] r2 -> r1' - neighbors: - - ifname: eth5 - ipv4: 172.16.1.1/24 - node: r1 - parent_ifindex: 30000 - parent_ifname: bond1 - type: vlan_member - virtual_interface: true - vlan: - access: v2 - access_id: 1001 - - bridge_group: 1 - ifindex: 6 - ifname: vlan1000 - ipv4: 172.16.0.2/24 - name: VLAN v1 (1000) -> [r1] - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.1/24 - node: r1 - type: svi - virtual_interface: true - vlan: - mode: irb - name: v1 - - bridge_group: 2 - ifindex: 7 - ifname: vlan1001 - ipv4: 172.16.1.2/24 - name: VLAN v2 (1001) -> [r1] - neighbors: - - ifname: vlan1001 - ipv4: 172.16.1.1/24 - node: r1 - type: svi - virtual_interface: true - vlan: - mode: irb - name: v2 lag: lacp: fast lacp_mode: active @@ -355,48 +228,15 @@ nodes: - vlan mtu: 1500 name: r2 - vlan: - max_bridge_group: 2 - vlans: - v1: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 - v2: - bridge_group: 2 - id: 1001 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.1.0/24 provider: clab vlans: v1: - host_count: 0 id: 1000 - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.2/24 - node: r2 - - ifname: vlan1000 - ipv4: 172.16.0.1/24 - node: r1 prefix: allocation: id_based ipv4: 172.16.0.0/24 v2: - host_count: 0 id: 1001 - neighbors: - - ifname: vlan1001 - ipv4: 172.16.1.2/24 - node: r2 - - ifname: vlan1001 - ipv4: 172.16.1.1/24 - node: r1 prefix: allocation: id_based ipv4: 172.16.1.0/24 From 85c0acc27e15166367d7de77d038453946a83b01 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Fri, 13 Dec 2024 20:03:25 -0600 Subject: [PATCH 08/36] Implement p2p pool selection logic TODO: Validate all VLAN cases with/without lag --- netsim/modules/lag.py | 18 +- netsim/modules/lag.yml | 7 + tests/topology/expected/lag-l2.yml | 2 + .../topology/expected/lag-l3-access-vlan.yml | 4 - tests/topology/expected/lag-l3-vlan-trunk.yml | 4 - tests/topology/expected/lag-mlag-m_to_m.yml | 246 +++++------------- tests/topology/expected/lag-mlag.yml | 197 +------------- .../expected/node.clone-plugin-lag.yml | 195 +++----------- .../expected/vrrp-interface-granularity.yml | 66 ++--- 9 files changed, 156 insertions(+), 583 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 6ae5af05e0..0cf42ac6f9 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -160,7 +160,6 @@ def no_peer(i: Box) -> Box: if 'lag' in l: nodes = [ i.node for i in l.interfaces ] if first_pair[0] in nodes and first_pair[1] in nodes: - print(f"Update _parentindex={split_copy.linkindex}") l.lag._parentindex = split_copy.linkindex if log.debug_active('lag'): @@ -232,16 +231,23 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple if one_side=="": # Check for errors return - l.interfaces = [] # Build interface list for lag link members = l.pop('lag.members',[]) # Remove lag.members skip_atts = list(topology.defaults.lag.attributes.lag_no_propagate) + copy_link_to_intf = list(topology.defaults.lag.attributes.copy_link_to_intf) + link_atts = { k:v for k,v in l.items() if k in copy_link_to_intf } + l.interfaces = [] # Build interface list for lag link for node in node_count: - ifatts = data.get_box({ 'node': node, 'type': 'lag' }) + ifatts = data.get_box({ 'node': node, 'type': 'lag', 'lag': {} }) for m in members: # Collect attributes from member links if node in [ i.node for i in m.interfaces ]:# ...in which is involved ifatts = ifatts + { k:v for k,v in m.items() if k not in skip_atts } if dual_mlag: ifatts._peer = [ i.node for i in m.interfaces if i.node!=node ][0] + if 'vlan' in l: # If there is a vlan, ignore any L3 config + ifatts.ipv4 = False + ifatts.ipv6 = False + else: + ifatts = link_atts + ifatts # else include gateway or prefix settings (done elsewhere?) is_mside = is_mlag and node!=one_side # Set flag if this node is the M: side if not set_lag_ifindex(l,ifatts,is_mside,topology): return @@ -254,10 +260,10 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple ifatts.lag._mlag = True # Set internal flag if log.debug_active('lag'): - print(f'LAG create_lag_member_links for node {node} -> collected ifatts {ifatts}') + print(f'LAG create_lag_interfaces for node {node} -> adding interface {ifatts}') l.interfaces.append( ifatts ) - if dual_mlag: + if dual_mlag: # After creating interfaces, check if we need to split them split_dual_mlag_link(l,topology) """ @@ -306,7 +312,7 @@ def check_same_pair(member: Box) -> bool: print(f'LAG create_peer_links -> adding link {member}') topology.links.append(member) - l.pop("lag.members",None) # Cleanup, TODO may need to modify topology.links instead + topology.links[l.linkindex-1].pop("lag.members",None) # Cleanup """ process_lag_link - process link with 'lag' attribute to create links for lag.members diff --git a/netsim/modules/lag.yml b/netsim/modules/lag.yml index 0653c0c7ac..cb86bf1149 100644 --- a/netsim/modules/lag.yml +++ b/netsim/modules/lag.yml @@ -57,3 +57,10 @@ attributes: interfaces: _linkname: name: + + # Copy these attributes from lag links into lag interface-on-link data (if not existing) + copy_link_to_intf: + gateway: + vlan: + prefix: + pool: diff --git a/tests/topology/expected/lag-l2.yml b/tests/topology/expected/lag-l2.yml index 6ebc45229a..af69a14a2d 100644 --- a/tests/topology/expected/lag-l2.yml +++ b/tests/topology/expected/lag-l2.yml @@ -70,6 +70,7 @@ nodes: neighbors: - ifname: port-channel1 node: r2 + prefix: false stp: enable: false type: lag @@ -151,6 +152,7 @@ nodes: neighbors: - ifname: port-channel1 node: r1 + prefix: false stp: enable: false type: lag diff --git a/tests/topology/expected/lag-l3-access-vlan.yml b/tests/topology/expected/lag-l3-access-vlan.yml index 086d6f0c39..6620a3c93a 100644 --- a/tests/topology/expected/lag-l3-access-vlan.yml +++ b/tests/topology/expected/lag-l3-access-vlan.yml @@ -70,7 +70,6 @@ nodes: interfaces: - ifindex: 30000 ifname: bond1 - ipv4: 10.1.0.1/30 lag: ifindex: 1 lacp: 'off' @@ -84,7 +83,6 @@ nodes: name: r1 -> r2 neighbors: - ifname: bond1 - ipv4: 10.1.0.2/30 node: r2 type: lag virtual_interface: true @@ -158,7 +156,6 @@ nodes: interfaces: - ifindex: 30000 ifname: bond1 - ipv4: 10.1.0.2/30 lag: ifindex: 1 lacp: 'off' @@ -172,7 +169,6 @@ nodes: name: r2 -> r1 neighbors: - ifname: bond1 - ipv4: 10.1.0.1/30 node: r1 type: lag virtual_interface: true diff --git a/tests/topology/expected/lag-l3-vlan-trunk.yml b/tests/topology/expected/lag-l3-vlan-trunk.yml index cc01828ec0..49c09da9d3 100644 --- a/tests/topology/expected/lag-l3-vlan-trunk.yml +++ b/tests/topology/expected/lag-l3-vlan-trunk.yml @@ -70,7 +70,6 @@ nodes: interfaces: - ifindex: 30000 ifname: bond1 - ipv4: 10.1.0.1/30 lag: ifindex: 1 lacp: fast @@ -84,7 +83,6 @@ nodes: name: r1 -> r2 neighbors: - ifname: bond1 - ipv4: 10.1.0.2/30 node: r2 type: lag virtual_interface: true @@ -158,7 +156,6 @@ nodes: interfaces: - ifindex: 30000 ifname: bond1 - ipv4: 10.1.0.2/30 lag: ifindex: 1 lacp: fast @@ -172,7 +169,6 @@ nodes: name: r2 -> r1 neighbors: - ifname: bond1 - ipv4: 10.1.0.1/30 node: r1 type: lag virtual_interface: true diff --git a/tests/topology/expected/lag-mlag-m_to_m.yml b/tests/topology/expected/lag-mlag-m_to_m.yml index cf82996dae..24c2bf71d5 100644 --- a/tests/topology/expected/lag-mlag-m_to_m.yml +++ b/tests/topology/expected/lag-mlag-m_to_m.yml @@ -64,8 +64,8 @@ links: ifindex: 20 node: b1 lag: - _parentindex: 4 - linkindex: 5 + _parentindex: 8 + linkindex: 4 node_count: 2 prefix: false type: p2p @@ -83,12 +83,12 @@ links: node: b2 lag: _parentindex: 3 - linkindex: 6 + linkindex: 5 node_count: 2 prefix: false type: p2p - _linkname: vlans.red.links[1] - bridge: input_7 + bridge: input_6 gateway: ipv4: 172.16.0.1/24 interfaces: @@ -103,7 +103,7 @@ links: ifname: eth1 ipv4: 172.16.0.5/24 node: h1 - linkindex: 7 + linkindex: 6 node_count: 2 prefix: allocation: id_based @@ -112,7 +112,7 @@ links: vlan: access: red - _linkname: vlans.red.links[2] - bridge: input_8 + bridge: input_7 gateway: ipv4: 172.16.0.4/24 interfaces: @@ -127,7 +127,7 @@ links: ifname: eth1 ipv4: 172.16.0.6/24 node: h2 - linkindex: 8 + linkindex: 7 node_count: 2 prefix: allocation: id_based @@ -162,44 +162,21 @@ nodes: - ifname: Ethernet1 node: a2 type: p2p - - ifindex: 30000 - ifname: port-channel1 - lag: - _mlag: true - ifindex: 1 - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 4 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) - name: a1 -> b1 - neighbors: - - ifname: port-channel1 - node: b1 - type: lag - virtual_interface: true - vlan: - trunk: - red: {} - trunk_id: - - 1000 - ifindex: 2 ifname: Ethernet2 lag: _parentindex: 1 ifindex: 10 - linkindex: 5 + linkindex: 4 name: a1 -> b1 neighbors: - ifname: Ethernet2 node: b1 type: p2p - - bridge: input_7 + - bridge: input_6 ifindex: 3 ifname: Ethernet3 - linkindex: 7 + linkindex: 6 name: '[Access VLAN red] a1 -> h1' neighbors: - ifname: eth1 @@ -209,27 +186,39 @@ nodes: vlan: access: red access_id: 1000 + - ifindex: 30000 + ifname: port-channel1 + lag: + _mlag: true + ifindex: 1 + lacp: fast + lacp_mode: active +<<<<<<< HEAD + linkindex: 4 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) + name: a1 -> b1 + neighbors: + - ifname: port-channel1 + node: b1 + type: lag + virtual_interface: true - bridge_group: 1 - ifindex: 5 + ifindex: 30001 ifname: Vlan1000 ipv4: 172.16.0.1/24 - name: VLAN red (1000) -> [h1,b1,b2,a2,h2] + name: VLAN red (1000) -> [h1,h2,b2] neighbors: - ifname: eth1 ipv4: 172.16.0.5/24 node: h1 - - ifname: Vlan1000 - ipv4: 172.16.0.3/24 - node: b1 - - ifname: Vlan1000 - ipv4: 172.16.0.4/24 - node: b2 - - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - node: a2 - ifname: eth1 ipv4: 172.16.0.6/24 node: h2 + - ifname: Vlan1000 + ipv4: 172.16.0.4/24 + node: b2 type: svi virtual_interface: true vlan: @@ -303,48 +292,17 @@ nodes: node: b2 type: lag virtual_interface: true - vlan: - trunk: - red: {} - trunk_id: - - 1000 - ifindex: 2 ifname: Ethernet2 lag: _parentindex: 1 ifindex: 10 - linkindex: 6 + linkindex: 5 name: a2 -> b2 neighbors: - ifname: Ethernet2 node: b2 type: p2p - - bridge_group: 1 - ifindex: 4 - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - name: VLAN red (1000) -> [h1,a1,b1,b2,h2] - neighbors: - - ifname: eth1 - ipv4: 172.16.0.5/24 - node: h1 - - ifname: Vlan1000 - ipv4: 172.16.0.1/24 - node: a1 - - ifname: Vlan1000 - ipv4: 172.16.0.3/24 - node: b1 - - ifname: Vlan1000 - ipv4: 172.16.0.4/24 - node: b2 - - ifname: eth1 - ipv4: 172.16.0.6/24 - node: h2 - type: svi - virtual_interface: true - vlan: - mode: irb - name: red lag: lacp: fast lacp_mode: active @@ -363,16 +321,6 @@ nodes: - lag - vlan name: a2 - vlan: - max_bridge_group: 1 - vlans: - red: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 b1: af: ipv4: true @@ -395,6 +343,17 @@ nodes: - ifname: Ethernet1 node: b2 type: p2p + - ifindex: 2 + ifname: Ethernet2 + lag: + _parentindex: 1 + ifindex: 20 + linkindex: 4 + name: b1 -> a1 + neighbors: + - ifname: Ethernet2 + node: a1 + type: p2p - ifindex: 30000 ifname: port-channel1 lag: @@ -413,48 +372,6 @@ nodes: node: a1 type: lag virtual_interface: true - vlan: - trunk: - red: {} - trunk_id: - - 1000 - - ifindex: 2 - ifname: Ethernet2 - lag: - _parentindex: 1 - ifindex: 20 - linkindex: 5 - name: b1 -> a1 - neighbors: - - ifname: Ethernet2 - node: a1 - type: p2p - - bridge_group: 1 - ifindex: 4 - ifname: Vlan1000 - ipv4: 172.16.0.3/24 - name: VLAN red (1000) -> [h1,a1,b2,a2,h2] - neighbors: - - ifname: eth1 - ipv4: 172.16.0.5/24 - node: h1 - - ifname: Vlan1000 - ipv4: 172.16.0.1/24 - node: a1 - - ifname: Vlan1000 - ipv4: 172.16.0.4/24 - node: b2 - - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - node: a2 - - ifname: eth1 - ipv4: 172.16.0.6/24 - node: h2 - type: svi - virtual_interface: true - vlan: - mode: irb - name: red lag: lacp: fast lacp_mode: active @@ -473,16 +390,6 @@ nodes: - lag - vlan name: b1 - vlan: - max_bridge_group: 1 - vlans: - red: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 b2: af: ipv4: true @@ -523,26 +430,21 @@ nodes: node: a2 type: lag virtual_interface: true - vlan: - trunk: - red: {} - trunk_id: - - 1000 - ifindex: 2 ifname: Ethernet2 lag: _parentindex: 1 ifindex: 20 - linkindex: 6 + linkindex: 5 name: b2 -> a2 neighbors: - ifname: Ethernet2 node: a2 type: p2p - - bridge: input_8 + - bridge: input_7 ifindex: 3 ifname: Ethernet3 - linkindex: 8 + linkindex: 7 name: '[Access VLAN red] b2 -> h2' neighbors: - ifname: eth1 @@ -553,10 +455,10 @@ nodes: access: red access_id: 1000 - bridge_group: 1 - ifindex: 5 + ifindex: 4 ifname: Vlan1000 ipv4: 172.16.0.4/24 - name: VLAN red (1000) -> [h1,a1,b1,a2,h2] + name: VLAN red (1000) -> [h1,a1,h2] neighbors: - ifname: eth1 ipv4: 172.16.0.5/24 @@ -564,12 +466,6 @@ nodes: - ifname: Vlan1000 ipv4: 172.16.0.1/24 node: a1 - - ifname: Vlan1000 - ipv4: 172.16.0.3/24 - node: b1 - - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - node: a2 - ifname: eth1 ipv4: 172.16.0.6/24 node: h2 @@ -613,30 +509,24 @@ nodes: device: linux id: 5 interfaces: - - bridge: input_7 + - bridge: input_6 gateway: ipv4: 172.16.0.1/24 ifindex: 1 ifname: eth1 ipv4: 172.16.0.5/24 - linkindex: 7 - name: h1 -> [a1,b1,b2,a2,h2] + linkindex: 6 + name: h1 -> [a1,h2,b2] neighbors: - ifname: Vlan1000 ipv4: 172.16.0.1/24 node: a1 - - ifname: Vlan1000 - ipv4: 172.16.0.3/24 - node: b1 - - ifname: Vlan1000 - ipv4: 172.16.0.4/24 - node: b2 - - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - node: a2 - ifname: eth1 ipv4: 172.16.0.6/24 node: h2 + - ifname: Vlan1000 + ipv4: 172.16.0.4/24 + node: b2 type: lan mgmt: ifname: eth0 @@ -673,14 +563,14 @@ nodes: device: linux id: 6 interfaces: - - bridge: input_8 + - bridge: input_7 gateway: ipv4: 172.16.0.4/24 ifindex: 1 ifname: eth1 ipv4: 172.16.0.6/24 - linkindex: 8 - name: h2 -> [h1,a1,b1,b2,a2] + linkindex: 7 + name: h2 -> [h1,a1,b2] neighbors: - ifname: eth1 ipv4: 172.16.0.5/24 @@ -688,15 +578,9 @@ nodes: - ifname: Vlan1000 ipv4: 172.16.0.1/24 node: a1 - - ifname: Vlan1000 - ipv4: 172.16.0.3/24 - node: b1 - ifname: Vlan1000 ipv4: 172.16.0.4/24 node: b2 - - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - node: a2 type: lan mgmt: ifname: eth0 @@ -738,18 +622,12 @@ vlans: - ifname: Vlan1000 ipv4: 172.16.0.1/24 node: a1 - - ifname: Vlan1000 - ipv4: 172.16.0.3/24 - node: b1 - - ifname: Vlan1000 - ipv4: 172.16.0.4/24 - node: b2 - - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - node: a2 - ifname: eth1 ipv4: 172.16.0.6/24 node: h2 + - ifname: Vlan1000 + ipv4: 172.16.0.4/24 + node: b2 prefix: allocation: id_based ipv4: 172.16.0.0/24 diff --git a/tests/topology/expected/lag-mlag.yml b/tests/topology/expected/lag-mlag.yml index 13f680661f..daac54d69c 100644 --- a/tests/topology/expected/lag-mlag.yml +++ b/tests/topology/expected/lag-mlag.yml @@ -246,19 +246,14 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: '[Access VLAN red] h1 -> [s1,s2]' + name: h1 -> [s1,s2] neighbors: - ifname: port-channel1 - ipv4: 172.16.0.1/24 node: s1 - ifname: port-channel1 - ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 30001 ifname: bond2 lag: @@ -344,26 +339,6 @@ nodes: - ifname: ethernet1/1/6 node: s1 type: p2p - - bridge_group: 1 - ifindex: 7 - ifname: vlan1000 - ipv4: 172.16.0.3/24 - name: VLAN red (1000) -> [s2,s1,h2] - neighbors: - - ifname: virtual-network1000 - ipv4: 172.16.0.2/24 - node: s2 - - ifname: virtual-network1000 - ipv4: 172.16.0.1/24 - node: s1 - - ifname: vlan1000 - ipv4: 172.16.0.4/24 - node: h2 - type: svi - virtual_interface: true - vlan: - mode: irb - name: red lag: lacp: fast lacp_mode: active @@ -383,16 +358,6 @@ nodes: - vlan mtu: 1500 name: h1 - vlan: - max_bridge_group: 1 - vlans: - red: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 h2: af: ipv4: true @@ -421,19 +386,14 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: '[Access VLAN red] h2 -> [s1,s2]' + name: h2 -> [s1,s2] neighbors: - ifname: port-channel3 - ipv4: 172.16.0.1/24 node: s1 - ifname: port-channel3 - ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 30001 ifname: bond2 lag: @@ -446,19 +406,14 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: '[Access VLAN red] h2 -> [s1,s2]' + name: h2 -> [s1,s2] neighbors: - ifname: port-channel4 - ipv4: 172.16.0.1/24 node: s1 - ifname: port-channel4 - ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 1 ifname: eth1 lag: @@ -525,26 +480,6 @@ nodes: - ifname: ethernet1/1/7 node: s2 type: p2p - - bridge_group: 1 - ifindex: 7 - ifname: vlan1000 - ipv4: 172.16.0.4/24 - name: VLAN red (1000) -> [h1,s2,s1] - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.3/24 - node: h1 - - ifname: virtual-network1000 - ipv4: 172.16.0.2/24 - node: s2 - - ifname: virtual-network1000 - ipv4: 172.16.0.1/24 - node: s1 - type: svi - virtual_interface: true - vlan: - mode: irb - name: red lag: lacp: fast lacp_mode: active @@ -564,16 +499,6 @@ nodes: - vlan mtu: 1500 name: h2 - vlan: - max_bridge_group: 1 - vlans: - red: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 s1: af: ipv4: true @@ -613,19 +538,14 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: '[Access VLAN red] s1 -> [h1,s2]' + name: s1 -> [h1,s2] neighbors: - ifname: bond1 - ipv4: 172.16.0.3/24 node: h1 - ifname: port-channel1 - ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 30001 ifname: port-channel2 lag: @@ -658,19 +578,14 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: '[Access VLAN red] s1 -> [h2,s2]' + name: s1 -> [h2,s2] neighbors: - ifname: bond1 - ipv4: 172.16.0.4/24 node: h2 - ifname: port-channel3 - ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 30003 ifname: port-channel4 lag: @@ -684,19 +599,14 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: '[Access VLAN red] s1 -> [h2,s2]' + name: s1 -> [h2,s2] neighbors: - ifname: bond2 - ipv4: 172.16.0.4/24 node: h2 - ifname: port-channel4 - ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - clab: name: eth2 ifindex: 2 @@ -801,26 +711,6 @@ nodes: - ifname: eth5 node: h2 type: p2p - - bridge_group: 1 - ifindex: 10 - ifname: virtual-network1000 - ipv4: 172.16.0.1/24 - name: VLAN red (1000) -> [h1,s2,h2] - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.3/24 - node: h1 - - ifname: virtual-network1000 - ipv4: 172.16.0.2/24 - node: s2 - - ifname: vlan1000 - ipv4: 172.16.0.4/24 - node: h2 - type: svi - virtual_interface: true - vlan: - mode: irb - name: red lag: lacp: fast lacp_mode: active @@ -840,16 +730,6 @@ nodes: - vlan mtu: 1500 name: s1 - vlan: - max_bridge_group: 1 - vlans: - red: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 s2: af: ipv4: true @@ -889,19 +769,14 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: '[Access VLAN red] s2 -> [h1,s1]' + name: s2 -> [h1,s1] neighbors: - ifname: bond1 - ipv4: 172.16.0.3/24 node: h1 - ifname: port-channel1 - ipv4: 172.16.0.1/24 node: s1 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 30001 ifname: port-channel3 lag: @@ -915,19 +790,14 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: '[Access VLAN red] s2 -> [h2,s1]' + name: s2 -> [h2,s1] neighbors: - ifname: bond1 - ipv4: 172.16.0.4/24 node: h2 - ifname: port-channel3 - ipv4: 172.16.0.1/24 node: s1 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 30002 ifname: port-channel4 lag: @@ -941,19 +811,14 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: '[Access VLAN red] s2 -> [h2,s1]' + name: s2 -> [h2,s1] neighbors: - ifname: bond2 - ipv4: 172.16.0.4/24 node: h2 - ifname: port-channel4 - ipv4: 172.16.0.1/24 node: s1 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - clab: name: eth2 ifindex: 2 @@ -1032,26 +897,6 @@ nodes: - ifname: eth6 node: h2 type: p2p - - bridge_group: 1 - ifindex: 8 - ifname: virtual-network1000 - ipv4: 172.16.0.2/24 - name: VLAN red (1000) -> [h1,s1,h2] - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.3/24 - node: h1 - - ifname: virtual-network1000 - ipv4: 172.16.0.1/24 - node: s1 - - ifname: vlan1000 - ipv4: 172.16.0.4/24 - node: h2 - type: svi - virtual_interface: true - vlan: - mode: irb - name: red lag: lacp: fast lacp_mode: active @@ -1071,34 +916,10 @@ nodes: - vlan mtu: 1500 name: s2 - vlan: - max_bridge_group: 1 - vlans: - red: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 provider: clab vlans: red: - host_count: 0 id: 1000 - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.3/24 - node: h1 - - ifname: virtual-network1000 - ipv4: 172.16.0.2/24 - node: s2 - - ifname: virtual-network1000 - ipv4: 172.16.0.1/24 - node: s1 - - ifname: vlan1000 - ipv4: 172.16.0.4/24 - node: h2 prefix: allocation: id_based ipv4: 172.16.0.0/24 diff --git a/tests/topology/expected/node.clone-plugin-lag.yml b/tests/topology/expected/node.clone-plugin-lag.yml index 1f936e8e99..a4c777c79d 100644 --- a/tests/topology/expected/node.clone-plugin-lag.yml +++ b/tests/topology/expected/node.clone-plugin-lag.yml @@ -421,20 +421,19 @@ nodes: linkindex: 6 ======= mode: 802.3ad +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] h2-01 -> [r1,r2]' +======= + name: h2-01 -> [r1,r2] +>>>>>>> 4293ef6c3 (Implement p2p pool selection logic) neighbors: - ifname: port-channel10 - ipv4: 172.16.0.1/24 node: r1 - ifname: port-channel10 - ipv4: 172.16.0.2/24 node: r2 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 1 ifname: eth1 lag: @@ -455,26 +454,6 @@ nodes: - ifname: Ethernet2 node: r2 type: p2p - - bridge_group: 1 - ifindex: 3 - ifname: vlan1000 - ipv4: 172.16.0.5/24 - name: VLAN red (1000) -> [r2,r1,h2-02] - neighbors: - - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - node: r2 - - ifname: Vlan1000 - ipv4: 172.16.0.1/24 - node: r1 - - ifname: vlan1000 - ipv4: 172.16.0.6/24 - node: h2-02 - type: svi - virtual_interface: true - vlan: - mode: irb - name: red lag: lacp: fast lacp_mode: active @@ -493,16 +472,6 @@ nodes: - lag - vlan name: h2-01 - vlan: - max_bridge_group: 1 - vlans: - red: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 h2-02: af: ipv4: true @@ -520,20 +489,19 @@ nodes: linkindex: 7 ======= mode: 802.3ad +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] h2-02 -> [r1,r2]' +======= + name: h2-02 -> [r1,r2] +>>>>>>> 4293ef6c3 (Implement p2p pool selection logic) neighbors: - ifname: port-channel11 - ipv4: 172.16.0.1/24 node: r1 - ifname: port-channel11 - ipv4: 172.16.0.2/24 node: r2 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 1 ifname: eth1 lag: @@ -554,26 +522,6 @@ nodes: - ifname: Ethernet3 node: r2 type: p2p - - bridge_group: 1 - ifindex: 3 - ifname: vlan1000 - ipv4: 172.16.0.6/24 - name: VLAN red (1000) -> [h2-01,r2,r1] - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.5/24 - node: h2-01 - - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - node: r2 - - ifname: Vlan1000 - ipv4: 172.16.0.1/24 - node: r1 - type: svi - virtual_interface: true - vlan: - mode: irb - name: red lag: lacp: fast lacp_mode: active @@ -592,16 +540,6 @@ nodes: - lag - vlan name: h2-02 - vlan: - max_bridge_group: 1 - vlans: - red: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 r1: af: ipv4: true @@ -671,20 +609,19 @@ nodes: linkindex: 6 ======= mode: 802.3ad +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r1 -> [h2-01,r2]' +======= + name: r1 -> [h2-01,r2] +>>>>>>> 4293ef6c3 (Implement p2p pool selection logic) neighbors: - ifname: bond1 - ipv4: 172.16.0.5/24 node: h2-01 - ifname: port-channel10 - ipv4: 172.16.0.2/24 node: r2 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 30003 ifname: port-channel11 lag: @@ -696,20 +633,19 @@ nodes: linkindex: 7 ======= mode: 802.3ad +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r1 -> [h2-02,r2]' +======= + name: r1 -> [h2-02,r2] +>>>>>>> 4293ef6c3 (Implement p2p pool selection logic) neighbors: - ifname: bond1 - ipv4: 172.16.0.6/24 node: h2-02 - ifname: port-channel11 - ipv4: 172.16.0.2/24 node: r2 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 2 ifname: Ethernet2 lag: @@ -770,26 +706,6 @@ nodes: - ifname: eth1 node: h2-02 type: p2p - - bridge_group: 1 - ifindex: 8 - ifname: Vlan1000 - ipv4: 172.16.0.1/24 - name: VLAN red (1000) -> [h2-01,r2,h2-02] - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.5/24 - node: h2-01 - - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - node: r2 - - ifname: vlan1000 - ipv4: 172.16.0.6/24 - node: h2-02 - type: svi - virtual_interface: true - vlan: - mode: irb - name: red lag: lacp: fast lacp_mode: active @@ -808,16 +724,6 @@ nodes: - lag - vlan name: r1 - vlan: - max_bridge_group: 1 - vlans: - red: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 r2: _set_ifindex: true af: @@ -861,26 +767,13 @@ nodes: - ifname: eth2 node: h2-02 type: p2p - - bridge_group: 1 - ifindex: 4 - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - name: VLAN red (1000) -> [h2-01,r1,h2-02] - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.5/24 - node: h2-01 - - ifname: Vlan1000 - ipv4: 172.16.0.1/24 - node: r1 - - ifname: vlan1000 - ipv4: 172.16.0.6/24 - node: h2-02 - type: svi - virtual_interface: true - vlan: - mode: irb - name: red + - ifindex: 4 + ifname: Ethernet4 + linkindex: 0 + neighbors: [] + remote_id: 2 + remote_ifindex: 666 + type: p2p - ifindex: 5 ifname: Ethernet5 linkindex: 0 @@ -975,20 +868,19 @@ nodes: linkindex: 6 ======= mode: 802.3ad +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r2 -> [h2-01,r1]' +======= + name: r2 -> [h2-01,r1] +>>>>>>> 4293ef6c3 (Implement p2p pool selection logic) neighbors: - ifname: bond1 - ipv4: 172.16.0.5/24 node: h2-01 - ifname: port-channel10 - ipv4: 172.16.0.1/24 node: r1 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 - ifindex: 30003 ifname: port-channel11 lag: @@ -1000,20 +892,19 @@ nodes: linkindex: 7 ======= mode: 802.3ad +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r2 -> [h2-02,r1]' +======= + name: r2 -> [h2-02,r1] +>>>>>>> 4293ef6c3 (Implement p2p pool selection logic) neighbors: - ifname: bond1 - ipv4: 172.16.0.6/24 node: h2-02 - ifname: port-channel11 - ipv4: 172.16.0.1/24 node: r1 type: lag virtual_interface: true - vlan: - access: red - access_id: 1000 lag: lacp: fast lacp_mode: active @@ -1034,36 +925,12 @@ nodes: - lag - vlan name: r2 - vlan: - max_bridge_group: 1 - vlans: - red: - bridge_group: 1 - id: 1000 - mode: irb - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 plugin: - node.clone provider: libvirt vlans: red: - host_count: 0 id: 1000 - neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.5/24 - node: h2-01 - - ifname: Vlan1000 - ipv4: 172.16.0.2/24 - node: r2 - - ifname: Vlan1000 - ipv4: 172.16.0.1/24 - node: r1 - - ifname: vlan1000 - ipv4: 172.16.0.6/24 - node: h2-02 prefix: allocation: id_based ipv4: 172.16.0.0/24 diff --git a/tests/topology/expected/vrrp-interface-granularity.yml b/tests/topology/expected/vrrp-interface-granularity.yml index f9b8400d52..b0a41fbf12 100644 --- a/tests/topology/expected/vrrp-interface-granularity.yml +++ b/tests/topology/expected/vrrp-interface-granularity.yml @@ -15,26 +15,26 @@ links: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 10.1.0.30/27 + ipv4: 172.16.0.254/24 protocol: vrrp vrrp: group: 1 interfaces: - gateway: - ipv4: 10.1.0.30/27 + ipv4: 172.16.0.254/24 ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.1/27 + ipv4: 172.16.0.1/24 node: r1 - gateway: false ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.2/27 + ipv4: 172.16.0.2/24 node: r2 linkindex: 1 node_count: 2 prefix: - ipv4: 10.1.0.0/27 + ipv4: 172.16.0.0/24 type: p2p - _linkname: links[2] gateway: @@ -42,7 +42,7 @@ links: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 10.1.0.62/27 + ipv4: 172.16.1.254/24 protocol: vrrp vrrp: group: 1 @@ -50,18 +50,18 @@ links: - gateway: false ifindex: 2 ifname: Ethernet2 - ipv4: 10.1.0.33/27 + ipv4: 172.16.1.1/24 node: r1 - gateway: - ipv4: 10.1.0.62/27 + ipv4: 172.16.1.254/24 ifindex: 2 ifname: Ethernet2 - ipv4: 10.1.0.34/27 + ipv4: 172.16.1.2/24 node: r2 linkindex: 2 node_count: 2 prefix: - ipv4: 10.1.0.32/27 + ipv4: 172.16.1.0/24 type: p2p - _linkname: links[3] gateway: @@ -69,28 +69,28 @@ links: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 10.1.0.94/27 + ipv4: 172.16.2.254/24 protocol: vrrp vrrp: group: 1 interfaces: - gateway: - ipv4: 10.1.0.94/27 + ipv4: 172.16.2.254/24 vrrp: priority: 100 ifindex: 3 ifname: Ethernet3 - ipv4: 10.1.0.65/27 + ipv4: 172.16.2.1/24 node: r1 - gateway: false ifindex: 3 ifname: Ethernet3 - ipv4: 10.1.0.66/27 + ipv4: 172.16.2.2/24 node: r2 linkindex: 3 node_count: 2 prefix: - ipv4: 10.1.0.64/27 + ipv4: 172.16.2.0/24 type: p2p module: - gateway @@ -108,24 +108,24 @@ nodes: interfaces: - gateway: id: -2 - ipv4: 10.1.0.30/27 + ipv4: 172.16.0.254/24 protocol: vrrp vrrp: group: 1 ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.1/27 + ipv4: 172.16.0.1/24 linkindex: 1 name: r1 -> r2 neighbors: - gateway: false ifname: Ethernet1 - ipv4: 10.1.0.2/27 + ipv4: 172.16.0.2/24 node: r2 type: p2p - ifindex: 2 ifname: Ethernet2 - ipv4: 10.1.0.33/27 + ipv4: 172.16.1.1/24 linkindex: 2 name: r1 -> r2 neighbors: @@ -134,30 +134,30 @@ nodes: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 10.1.0.62/27 + ipv4: 172.16.1.254/24 protocol: vrrp vrrp: group: 1 ifname: Ethernet2 - ipv4: 10.1.0.34/27 + ipv4: 172.16.1.2/24 node: r2 type: p2p - gateway: id: -2 - ipv4: 10.1.0.94/27 + ipv4: 172.16.2.254/24 protocol: vrrp vrrp: group: 1 priority: 100 ifindex: 3 ifname: Ethernet3 - ipv4: 10.1.0.65/27 + ipv4: 172.16.2.1/24 linkindex: 3 name: r1 -> r2 neighbors: - gateway: false ifname: Ethernet3 - ipv4: 10.1.0.66/27 + ipv4: 172.16.2.2/24 node: r2 type: p2p loopback: @@ -186,7 +186,7 @@ nodes: interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.2/27 + ipv4: 172.16.0.2/24 linkindex: 1 name: r2 -> r1 neighbors: @@ -195,34 +195,34 @@ nodes: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 10.1.0.30/27 + ipv4: 172.16.0.254/24 protocol: vrrp vrrp: group: 1 ifname: Ethernet1 - ipv4: 10.1.0.1/27 + ipv4: 172.16.0.1/24 node: r1 type: p2p - gateway: id: -2 - ipv4: 10.1.0.62/27 + ipv4: 172.16.1.254/24 protocol: vrrp vrrp: group: 1 ifindex: 2 ifname: Ethernet2 - ipv4: 10.1.0.34/27 + ipv4: 172.16.1.2/24 linkindex: 2 name: r2 -> r1 neighbors: - gateway: false ifname: Ethernet2 - ipv4: 10.1.0.33/27 + ipv4: 172.16.1.1/24 node: r1 type: p2p - ifindex: 3 ifname: Ethernet3 - ipv4: 10.1.0.66/27 + ipv4: 172.16.2.2/24 linkindex: 3 name: r2 -> r1 neighbors: @@ -231,13 +231,13 @@ nodes: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 10.1.0.94/27 + ipv4: 172.16.2.254/24 protocol: vrrp vrrp: group: 1 priority: 100 ifname: Ethernet3 - ipv4: 10.1.0.65/27 + ipv4: 172.16.2.1/24 node: r1 type: p2p loopback: From d4df2d46c7e64373b4a82af78aaedd0edb02001a Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sat, 14 Dec 2024 08:18:26 -0600 Subject: [PATCH 09/36] vlan: postpone 'link_pre_transform' to 'link_pre_link_transform', after lag interfaces are created --- netsim/modules/lag.py | 10 ++++------ netsim/modules/lag.yml | 1 - netsim/modules/vlan.py | 9 ++++++++- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 0cf42ac6f9..7d74711dbb 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -233,7 +233,7 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple members = l.pop('lag.members',[]) # Remove lag.members skip_atts = list(topology.defaults.lag.attributes.lag_no_propagate) - copy_link_to_intf = list(topology.defaults.lag.attributes.copy_link_to_intf) + copy_link_to_intf = ['vlan'] if 'vlan' in l else list(topology.defaults.lag.attributes.copy_link_to_intf) link_atts = { k:v for k,v in l.items() if k in copy_link_to_intf } l.interfaces = [] # Build interface list for lag link for node in node_count: @@ -243,11 +243,9 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple ifatts = ifatts + { k:v for k,v in m.items() if k not in skip_atts } if dual_mlag: ifatts._peer = [ i.node for i in m.interfaces if i.node!=node ][0] - if 'vlan' in l: # If there is a vlan, ignore any L3 config - ifatts.ipv4 = False - ifatts.ipv6 = False - else: - ifatts = link_atts + ifatts # else include gateway or prefix settings (done elsewhere?) + if not 'vlan' in ifatts: # VLAN on interface overrides link IP settings + ifatts = link_atts + ifatts # include vlan, gateway or prefix settings from link + is_mside = is_mlag and node!=one_side # Set flag if this node is the M: side if not set_lag_ifindex(l,ifatts,is_mside,topology): return diff --git a/netsim/modules/lag.yml b/netsim/modules/lag.yml index cb86bf1149..0a54a1ecc6 100644 --- a/netsim/modules/lag.yml +++ b/netsim/modules/lag.yml @@ -61,6 +61,5 @@ attributes: # Copy these attributes from lag links into lag interface-on-link data (if not existing) copy_link_to_intf: gateway: - vlan: prefix: pool: diff --git a/netsim/modules/vlan.py b/netsim/modules/vlan.py index 973d2d77da..d541f1f110 100644 --- a/netsim/modules/vlan.py +++ b/netsim/modules/vlan.py @@ -1304,7 +1304,13 @@ def node_pre_transform(self, node: Box, topology: Box) -> None: validate_vlan_attributes(node,topology) - def link_pre_transform(self, link: Box, topology: Box) -> None: + # + # JvB: Needed to delay this processing with the introduction of the 'lag' module: + # + # * lag module cannot create link.interfaces of type 'lag' until after attribute validation -> done in module_pre_link_transform + # * this method processes link.interfaces -> must come after module_pre_link_transform, and cannot be in link_pre_transform + # + def _link_pre_link_transform(self, link: Box, topology: Box) -> None: if link.get('type','') == 'vlan_member': # Skip VLAN member links, we've been there... return @@ -1385,6 +1391,7 @@ def module_pre_link_transform(self, topology: Box) -> None: as those parameters would get ignored. """ def link_pre_link_transform(self, link: Box, topology: Box) -> None: + self._link_pre_link_transform(link,topology) # JvB: TODO - merge these 2 functions for intf in link.interfaces: vname = intf.get('vlan.access',None) if not vname: From 9bc299b0d684d88c581b36fe5734b4bdd7526db7 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sat, 14 Dec 2024 08:27:12 -0600 Subject: [PATCH 10/36] Correct ip indexes, restore test results --- tests/integration/lag/07-mlag-trunk.yml | 16 +- tests/topology/expected/bgp-vrf-local-as.yml | 126 +++++++---- tests/topology/expected/dhcp-vlan.yml | 89 ++------ .../expected/evpn-asymmetric-irb-ospf.yml | 24 +-- tests/topology/expected/group-data-vlan.yml | 120 +++++------ tests/topology/expected/groups-vlan-vrf.yml | 16 +- .../topology/expected/lag-l3-access-vlan.yml | 181 ++++++++++++---- tests/topology/expected/lag-l3-vlan-trunk.yml | 164 +++++++++++++++ tests/topology/expected/lag-mlag-m_to_m.yml | 152 ++++++++++++-- tests/topology/expected/lag-mlag.yml | 197 +++++++++++++++++- .../expected/libvirt-clab-complex.yml | 60 +++--- tests/topology/expected/link-tunnel.yml | 46 ++-- .../expected/node.clone-plugin-lag.yml | 195 ++++++++++++++++- .../expected/rt-vlan-mode-link-route.yml | 24 +-- tests/topology/expected/vlan-access-links.yml | 2 +- .../expected/vlan-access-neighbors.yml | 44 ++-- tests/topology/expected/vlan-access-node.yml | 74 ++++--- .../topology/expected/vlan-access-single.yml | 6 +- tests/topology/expected/vlan-coverage.yml | 12 +- tests/topology/expected/vlan-vrf-lite.yml | 64 +++--- tests/topology/expected/vlan-vrrp.yml | 14 +- tests/topology/expected/vrf-leaking-loop.yml | 16 +- .../expected/vrrp-interface-granularity.yml | 66 +++--- 23 files changed, 1221 insertions(+), 487 deletions(-) diff --git a/tests/integration/lag/07-mlag-trunk.yml b/tests/integration/lag/07-mlag-trunk.yml index 6791a61b71..d409bbf6bc 100644 --- a/tests/integration/lag/07-mlag-trunk.yml +++ b/tests/integration/lag/07-mlag-trunk.yml @@ -6,11 +6,11 @@ message: | groups: _auto_create: true switches: - members: [s1, s2] - module: [lag, vlan] + members: [ s1, s2 ] + module: [ lag, vlan ] hosts: - members: [h1, h2] - module: [lag, vlan] # Host side must support lag to present single MAC on both interfaces + members: [ h1, h2 ] + module: [ lag, vlan ] # Host side must support lag to present single MAC on both interfaces device: frr vlans: @@ -33,19 +33,19 @@ links: - h1: s2: ifindex: 5 - vlan.trunk: [red] + vlan.trunk: [ red ] - lag: - members: [h2-s1, h2-s2] + members: [ h2-s1, h2-s2 ] vlan.access: red validate: ping: description: Pinging H2 from H1 - nodes: [h1] + nodes: [ h1 ] wait_msg: Waiting for STP to enable the ports wait: 45 plugin: ping(nodes.h2.interfaces[-1].ipv4,af='ipv4') ping_gw: description: Pinging gateway from H1 - nodes: [h1] + nodes: [ h1 ] plugin: ping(nodes.s1.interfaces[-1].ipv4,af='ipv4') diff --git a/tests/topology/expected/bgp-vrf-local-as.yml b/tests/topology/expected/bgp-vrf-local-as.yml index 02f8b39818..c4a6cfd6fc 100644 --- a/tests/topology/expected/bgp-vrf-local-as.yml +++ b/tests/topology/expected/bgp-vrf-local-as.yml @@ -25,6 +25,7 @@ links: interfaces: - ifindex: 1 ifname: Ethernet1 + ipv4: 10.1.0.1/30 node: r1 vlan: trunk: @@ -32,6 +33,7 @@ links: red: {} - ifindex: 1 ifname: Ethernet1 + ipv4: 10.1.0.2/30 node: r2 vlan: trunk: @@ -39,7 +41,8 @@ links: red: {} linkindex: 1 node_count: 2 - prefix: {} + prefix: + ipv4: 10.1.0.0/30 role: external type: p2p vlan: @@ -50,6 +53,7 @@ links: interfaces: - ifindex: 2 ifname: Ethernet2 + ipv4: 10.1.0.5/30 node: r2 vlan: trunk: @@ -57,6 +61,7 @@ links: red: {} - ifindex: 1 ifname: Ethernet1 + ipv4: 10.1.0.6/30 node: r3 vlan: trunk: @@ -64,7 +69,8 @@ links: red: {} linkindex: 2 node_count: 2 - prefix: {} + prefix: + ipv4: 10.1.0.4/30 role: external type: p2p vlan: @@ -78,7 +84,7 @@ links: local_as: 65001 ifindex: 3 ifname: Ethernet3 - ipv4: 10.1.0.1/30 + ipv4: 10.1.0.9/30 node: r2 vlan: access: vrf-leak @@ -89,7 +95,7 @@ links: local_as: 65002 ifindex: 4 ifname: Ethernet4 - ipv4: 10.1.0.2/30 + ipv4: 10.1.0.10/30 node: r2 vlan: access: vrf-leak @@ -98,7 +104,7 @@ links: linkindex: 3 node_count: 2 prefix: - ipv4: 10.1.0.0/30 + ipv4: 10.1.0.8/30 type: p2p vlan: mode: route @@ -133,7 +139,14 @@ nodes: - large - extended ipv4: true - neighbors: [] + neighbors: + - activate: + ipv4: true + as: 65000 + ifindex: 1 + ipv4: 10.1.0.2 + name: r2 + type: ebgp next_hop_self: true router_id: 10.0.0.1 box: arista/veos @@ -142,10 +155,12 @@ nodes: interfaces: - ifindex: 1 ifname: Ethernet1 + ipv4: 10.1.0.1/30 linkindex: 1 name: r1 -> r2 neighbors: - ifname: Ethernet1 + ipv4: 10.1.0.2/30 node: r2 role: external subif_index: 2 @@ -153,16 +168,15 @@ nodes: - bridge_group: 1 ifindex: 2 ifname: Ethernet1.1 - ipv4: 10.1.0.5/30 + ipv4: 172.16.3.1/24 name: r1 -> r2 neighbors: - ifname: Ethernet1.1 - ipv4: 10.1.0.6/30 + ipv4: 172.16.3.2/24 node: r2 vrf: blue parent_ifindex: 1 parent_ifname: Ethernet1 - role: external type: vlan_member virtual_interface: true vlan: @@ -174,16 +188,15 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: Ethernet1.2 - ipv4: 10.1.0.9/30 + ipv4: 172.16.4.1/24 name: r1 -> r2 neighbors: - ifname: Ethernet1.2 - ipv4: 10.1.0.10/30 + ipv4: 172.16.4.2/24 node: r2 vrf: red parent_ifindex: 1 parent_ifname: Ethernet1 - role: external type: vlan_member virtual_interface: true vlan: @@ -240,7 +253,7 @@ nodes: neighbors: - as: 65000 ifindex: 2 - ipv4: 10.1.0.6 + ipv4: 172.16.3.2 name: r2 type: ebgp export: @@ -260,7 +273,7 @@ nodes: neighbors: - as: 65000 ifindex: 3 - ipv4: 10.1.0.10 + ipv4: 172.16.4.2 name: r2 type: ebgp export: @@ -295,7 +308,21 @@ nodes: - large - extended ipv4: true - neighbors: [] + neighbors: + - activate: + ipv4: true + as: 65100 + ifindex: 1 + ipv4: 10.1.0.1 + name: r1 + type: ebgp + - activate: + ipv4: true + as: 65101 + ifindex: 2 + ipv4: 10.1.0.6 + name: r3 + type: ebgp next_hop_self: true router_id: 10.0.0.2 box: arista/veos @@ -304,20 +331,24 @@ nodes: interfaces: - ifindex: 1 ifname: Ethernet1 + ipv4: 10.1.0.2/30 linkindex: 1 name: r2 -> r1 neighbors: - ifname: Ethernet1 + ipv4: 10.1.0.1/30 node: r1 role: external subif_index: 2 type: p2p - ifindex: 2 ifname: Ethernet2 + ipv4: 10.1.0.5/30 linkindex: 2 name: r2 -> r3 neighbors: - ifname: Ethernet1 + ipv4: 10.1.0.6/30 node: r3 role: external subif_index: 2 @@ -327,14 +358,14 @@ nodes: bridge_group: 1 ifindex: 3 ifname: Ethernet3 - ipv4: 10.1.0.1/30 + ipv4: 10.1.0.9/30 linkindex: 3 name: r2 -> r2 neighbors: - bgp: local_as: 65002 ifname: Ethernet4 - ipv4: 10.1.0.2/30 + ipv4: 10.1.0.10/30 node: r2 vrf: blue type: p2p @@ -346,14 +377,14 @@ nodes: bridge_group: 1 ifindex: 4 ifname: Ethernet4 - ipv4: 10.1.0.2/30 + ipv4: 10.1.0.10/30 linkindex: 3 name: r2 -> r2 neighbors: - bgp: local_as: 65001 ifname: Ethernet3 - ipv4: 10.1.0.1/30 + ipv4: 10.1.0.9/30 node: r2 vrf: red type: p2p @@ -363,16 +394,15 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: Ethernet1.1 - ipv4: 10.1.0.6/30 + ipv4: 172.16.3.2/24 name: r2 -> r1 neighbors: - ifname: Ethernet1.1 - ipv4: 10.1.0.5/30 + ipv4: 172.16.3.1/24 node: r1 vrf: blue parent_ifindex: 1 parent_ifname: Ethernet1 - role: external type: vlan_member virtual_interface: true vlan: @@ -384,16 +414,15 @@ nodes: - bridge_group: 3 ifindex: 6 ifname: Ethernet1.2 - ipv4: 10.1.0.10/30 + ipv4: 172.16.4.2/24 name: r2 -> r1 neighbors: - ifname: Ethernet1.2 - ipv4: 10.1.0.9/30 + ipv4: 172.16.4.1/24 node: r1 vrf: red parent_ifindex: 1 parent_ifname: Ethernet1 - role: external type: vlan_member virtual_interface: true vlan: @@ -405,16 +434,15 @@ nodes: - bridge_group: 2 ifindex: 7 ifname: Ethernet2.1 - ipv4: 10.1.0.13/30 + ipv4: 172.16.5.2/24 name: r2 -> r3 neighbors: - ifname: Ethernet1.1 - ipv4: 10.1.0.14/30 + ipv4: 172.16.5.3/24 node: r3 vrf: blue parent_ifindex: 2 parent_ifname: Ethernet2 - role: external type: vlan_member virtual_interface: true vlan: @@ -426,16 +454,15 @@ nodes: - bridge_group: 3 ifindex: 8 ifname: Ethernet2.2 - ipv4: 10.1.0.17/30 + ipv4: 172.16.6.2/24 name: r2 -> r3 neighbors: - ifname: Ethernet1.2 - ipv4: 10.1.0.18/30 + ipv4: 172.16.6.3/24 node: r3 vrf: red parent_ifindex: 2 parent_ifname: Ethernet2 - role: external type: vlan_member virtual_interface: true vlan: @@ -499,18 +526,18 @@ nodes: neighbors: - as: 65001 ifindex: 4 - ipv4: 10.1.0.1 + ipv4: 10.1.0.9 local_as: 65002 name: r2 type: ebgp - as: 65100 ifindex: 5 - ipv4: 10.1.0.5 + ipv4: 172.16.3.1 name: r1 type: ebgp - as: 65101 ifindex: 7 - ipv4: 10.1.0.14 + ipv4: 172.16.5.3 name: r3 type: ebgp router_id: 172.32.0.2 @@ -531,18 +558,18 @@ nodes: neighbors: - as: 65002 ifindex: 3 - ipv4: 10.1.0.2 + ipv4: 10.1.0.10 local_as: 65001 name: r2 type: ebgp - as: 65100 ifindex: 6 - ipv4: 10.1.0.9 + ipv4: 172.16.4.1 name: r1 type: ebgp - as: 65101 ifindex: 8 - ipv4: 10.1.0.18 + ipv4: 172.16.6.3 name: r3 type: ebgp router_id: 172.31.0.1 @@ -578,7 +605,14 @@ nodes: - large - extended ipv4: true - neighbors: [] + neighbors: + - activate: + ipv4: true + as: 65000 + ifindex: 1 + ipv4: 10.1.0.5 + name: r2 + type: ebgp next_hop_self: true router_id: 10.0.0.3 box: arista/veos @@ -587,10 +621,12 @@ nodes: interfaces: - ifindex: 1 ifname: Ethernet1 + ipv4: 10.1.0.6/30 linkindex: 2 name: r3 -> r2 neighbors: - ifname: Ethernet2 + ipv4: 10.1.0.5/30 node: r2 role: external subif_index: 2 @@ -598,16 +634,15 @@ nodes: - bridge_group: 1 ifindex: 2 ifname: Ethernet1.1 - ipv4: 10.1.0.14/30 + ipv4: 172.16.5.3/24 name: r3 -> r2 neighbors: - ifname: Ethernet2.1 - ipv4: 10.1.0.13/30 + ipv4: 172.16.5.2/24 node: r2 vrf: blue parent_ifindex: 1 parent_ifname: Ethernet1 - role: external type: vlan_member virtual_interface: true vlan: @@ -619,16 +654,15 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: Ethernet1.2 - ipv4: 10.1.0.18/30 + ipv4: 172.16.6.3/24 name: r3 -> r2 neighbors: - ifname: Ethernet2.2 - ipv4: 10.1.0.17/30 + ipv4: 172.16.6.2/24 node: r2 vrf: red parent_ifindex: 1 parent_ifname: Ethernet1 - role: external type: vlan_member virtual_interface: true vlan: @@ -685,7 +719,7 @@ nodes: neighbors: - as: 65000 ifindex: 2 - ipv4: 10.1.0.13 + ipv4: 172.16.5.2 name: r2 type: ebgp export: @@ -705,7 +739,7 @@ nodes: neighbors: - as: 65000 ifindex: 3 - ipv4: 10.1.0.17 + ipv4: 172.16.6.2 name: r2 type: ebgp export: diff --git a/tests/topology/expected/dhcp-vlan.yml b/tests/topology/expected/dhcp-vlan.yml index d74accbb03..229e4391f0 100644 --- a/tests/topology/expected/dhcp-vlan.yml +++ b/tests/topology/expected/dhcp-vlan.yml @@ -1,13 +1,5 @@ dhcp: pools: - - clean_name: vlan_red - excluded: - ipv4: - - 172.16.0.2 - gateway: - ipv4: 172.16.0.2 - ipv4: 172.16.0.0/24 - name: vlan_red - clean_name: vlan_blue excluded: ipv6: @@ -106,8 +98,6 @@ links: dhcp: client: ipv4: true - subnet: - ipv4: true gateway: ipv4: 172.16.0.2/24 interfaces: @@ -118,10 +108,7 @@ links: node: s1 vlan: access: red - - dhcp: - client: - ipv4: true - ifindex: 1 + - ifindex: 1 ifname: eth1 ipv4: 172.16.0.3/24 node: h1 @@ -138,8 +125,6 @@ links: dhcp: client: ipv4: true - subnet: - ipv4: true gateway: ipv4: 172.16.0.2/24 interfaces: @@ -150,10 +135,7 @@ links: node: s1 vlan: access: red - - dhcp: - client: - ipv4: true - ifindex: 1 + - ifindex: 1 ifname: eth1 ipv4: 172.16.0.4/24 node: h2 @@ -194,14 +176,6 @@ nodes: device: dnsmasq dhcp: pools: - - clean_name: vlan_red - excluded: - ipv4: - - 172.16.0.2 - gateway: - ipv4: 172.16.0.2 - ipv4: 172.16.0.0/24 - name: vlan_red - clean_name: vlan_blue excluded: ipv6: @@ -270,23 +244,18 @@ nodes: id: 3 interfaces: - bridge: input_3 - dhcp: - client: - ipv4: true gateway: ipv4: 172.16.0.2/24 ifindex: 1 ifname: eth1 + ipv4: 172.16.0.3/24 linkindex: 3 name: h1 -> [s1,h2] neighbors: - ifname: Vlan1000 ipv4: 172.16.0.2/24 node: s1 - - dhcp: - client: - ipv4: true - ifname: eth1 + - ifname: eth1 ipv4: 172.16.0.4/24 node: h2 role: stub @@ -295,8 +264,6 @@ nodes: ifname: eth0 ipv4: 192.168.121.103 mac: 08:4f:a9:00:00:03 - module: - - dhcp name: h1 role: host routing: @@ -329,20 +296,15 @@ nodes: id: 4 interfaces: - bridge: input_4 - dhcp: - client: - ipv4: true gateway: ipv4: 172.16.0.2/24 ifindex: 1 ifname: eth1 + ipv4: 172.16.0.4/24 linkindex: 4 name: h2 -> [h1,s1] neighbors: - - dhcp: - client: - ipv4: true - ifname: eth1 + - ifname: eth1 ipv4: 172.16.0.3/24 node: h1 - ifname: Vlan1000 @@ -354,8 +316,6 @@ nodes: ifname: eth0 ipv4: 192.168.121.104 mac: 08:4f:a9:00:00:04 - module: - - dhcp name: h2 role: host routing: @@ -460,10 +420,7 @@ nodes: linkindex: 3 name: '[Access VLAN red] s1 -> h1' neighbors: - - dhcp: - client: - ipv4: true - ifname: eth1 + - ifname: eth1 ipv4: 172.16.0.3/24 node: h1 type: lan @@ -476,10 +433,7 @@ nodes: linkindex: 4 name: '[Access VLAN red] s1 -> h2' neighbors: - - dhcp: - client: - ipv4: true - ifname: eth1 + - ifname: eth1 ipv4: 172.16.0.4/24 node: h2 type: lan @@ -502,7 +456,7 @@ nodes: id: 1 ipv6: 2001:db8:cafe:1::1/64 protocol: anycast - ifindex: 5 + ifindex: 7 ifname: Vlan1001 ipv6: 2001:db8:cafe:1::2/64 name: VLAN blue (1001) -> [h3] @@ -522,26 +476,17 @@ nodes: name: blue - bridge_group: 2 dhcp: - relay: - ipv4: - - 192.168.42.6 server: - dhs - ifindex: 6 + ifindex: 8 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,h2] neighbors: - - dhcp: - client: - ipv4: true - ifname: eth1 + - ifname: eth1 ipv4: 172.16.0.3/24 node: h1 - - dhcp: - client: - ipv4: true - ifname: eth1 + - ifname: eth1 ipv4: 172.16.0.4/24 node: h2 role: stub @@ -617,19 +562,13 @@ vlans: host_count: 2 id: 1000 neighbors: - - dhcp: - client: - ipv4: true - ifname: eth1 + - ifname: eth1 ipv4: 172.16.0.3/24 node: h1 - ifname: Vlan1000 ipv4: 172.16.0.2/24 node: s1 - - dhcp: - client: - ipv4: true - ifname: eth1 + - ifname: eth1 ipv4: 172.16.0.4/24 node: h2 prefix: diff --git a/tests/topology/expected/evpn-asymmetric-irb-ospf.yml b/tests/topology/expected/evpn-asymmetric-irb-ospf.yml index 2d663a7755..5057ac5853 100644 --- a/tests/topology/expected/evpn-asymmetric-irb-ospf.yml +++ b/tests/topology/expected/evpn-asymmetric-irb-ospf.yml @@ -463,7 +463,7 @@ nodes: passive: false type: p2p - bridge_group: 1 - ifindex: 5 + ifindex: 6 ifname: Vlan1000 ipv4: 172.16.0.1/24 name: VLAN red (1000) -> [h1,s2] @@ -483,7 +483,7 @@ nodes: - bgp: advertise: true bridge_group: 2 - ifindex: 6 + ifindex: 7 ifname: Vlan1002 ipv4: 172.16.2.1/24 name: VLAN green (1002) -> [h3] @@ -499,7 +499,7 @@ nodes: name: green vrf: tenant - bridge_group: 3 - ifindex: 7 + ifindex: 8 ifname: Vlan1001 ipv4: 172.16.1.1/24 name: VLAN blue (1001) -> [h2,s2] @@ -618,7 +618,7 @@ nodes: auto: true interfaces: - bridge_group: 1 - ifindex: 5 + ifindex: 6 ifname: Vlan1000 ipv4: 172.16.0.1/24 name: VLAN red (1000) -> [h1,s2] @@ -641,7 +641,7 @@ nodes: - bgp: advertise: true bridge_group: 2 - ifindex: 6 + ifindex: 7 ifname: Vlan1002 ipv4: 172.16.2.1/24 name: VLAN green (1002) -> [h3] @@ -661,7 +661,7 @@ nodes: name: green vrf: tenant - bridge_group: 3 - ifindex: 7 + ifindex: 8 ifname: Vlan1001 ipv4: 172.16.1.1/24 name: VLAN blue (1001) -> [h2,s2] @@ -781,7 +781,7 @@ nodes: passive: false type: p2p - bridge_group: 1 - ifindex: 5 + ifindex: 6 ifname: Vlan1001 ipv4: 172.16.1.2/24 name: VLAN blue (1001) -> [s1,h2] @@ -801,7 +801,7 @@ nodes: - bgp: advertise: true bridge_group: 2 - ifindex: 6 + ifindex: 7 ifname: Vlan1003 ipv4: 172.16.3.2/24 name: VLAN purple (1003) -> [h4] @@ -817,7 +817,7 @@ nodes: name: purple vrf: tenant - bridge_group: 3 - ifindex: 7 + ifindex: 8 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,s1] @@ -936,7 +936,7 @@ nodes: auto: true interfaces: - bridge_group: 1 - ifindex: 5 + ifindex: 6 ifname: Vlan1001 ipv4: 172.16.1.2/24 name: VLAN blue (1001) -> [s1,h2] @@ -959,7 +959,7 @@ nodes: - bgp: advertise: true bridge_group: 2 - ifindex: 6 + ifindex: 7 ifname: Vlan1003 ipv4: 172.16.3.2/24 name: VLAN purple (1003) -> [h4] @@ -979,7 +979,7 @@ nodes: name: purple vrf: tenant - bridge_group: 3 - ifindex: 7 + ifindex: 8 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,s1] diff --git a/tests/topology/expected/group-data-vlan.yml b/tests/topology/expected/group-data-vlan.yml index 0742d3f555..0bedc72cd0 100644 --- a/tests/topology/expected/group-data-vlan.yml +++ b/tests/topology/expected/group-data-vlan.yml @@ -111,49 +111,49 @@ nodes: - 1001 - 1000 - bridge_group: 1 - ifindex: 8 - ifname: Vlan1000 - ipv4: 172.16.1.1/24 - name: VLAN blue (1000) -> [r2,r3] + ifindex: 10 + ifname: Vlan1001 + ipv4: 172.16.0.1/24 + name: VLAN red (1001) -> [r2,r3] neighbors: - - ifname: Vlan1000 - ipv4: 172.16.1.2/24 + - ifname: Vlan1001 + ipv4: 172.16.0.2/24 node: r2 - - ifname: Vlan1000 - ipv4: 172.16.1.3/24 + - ifname: Vlan1001 + ipv4: 172.16.0.3/24 node: r3 ospf: area: 0.0.0.0 - cost: 20 + cost: 10 passive: false type: svi virtual_interface: true vlan: mode: irb - name: blue + name: red - bridge_group: 2 - ifindex: 9 - ifname: Vlan1001 - ipv4: 172.16.0.1/24 - name: VLAN red (1001) -> [r2,r3] + ifindex: 11 + ifname: Vlan1000 + ipv4: 172.16.1.1/24 + name: VLAN blue (1000) -> [r2,r3] neighbors: - - ifname: Vlan1001 - ipv4: 172.16.0.2/24 + - ifname: Vlan1000 + ipv4: 172.16.1.2/24 node: r2 - - ifname: Vlan1001 - ipv4: 172.16.0.3/24 + - ifname: Vlan1000 + ipv4: 172.16.1.3/24 node: r3 ospf: area: 0.0.0.0 - cost: 10 + cost: 20 passive: false type: svi virtual_interface: true vlan: mode: irb - name: red + name: blue - bridge_group: 3 - ifindex: 10 + ifindex: 12 ifname: Vlan1002 ipv4: 172.16.2.1/24 name: VLAN green (1002) -> [r2] @@ -197,7 +197,7 @@ nodes: max_bridge_group: 3 vlans: blue: - bridge_group: 1 + bridge_group: 2 id: 1000 mode: irb ospf: @@ -215,7 +215,7 @@ nodes: allocation: id_based ipv4: 172.16.2.0/24 red: - bridge_group: 2 + bridge_group: 1 id: 1001 mode: irb ospf: @@ -247,49 +247,49 @@ nodes: - 1001 - 1000 - bridge_group: 1 - ifindex: 5 - ifname: Vlan1000 - ipv4: 172.16.1.2/24 - name: VLAN blue (1000) -> [r1,r3] + ifindex: 7 + ifname: Vlan1001 + ipv4: 172.16.0.2/24 + name: VLAN red (1001) -> [r1,r3] neighbors: - - ifname: Vlan1000 - ipv4: 172.16.1.1/24 + - ifname: Vlan1001 + ipv4: 172.16.0.1/24 node: r1 - - ifname: Vlan1000 - ipv4: 172.16.1.3/24 + - ifname: Vlan1001 + ipv4: 172.16.0.3/24 node: r3 ospf: area: 0.0.0.0 - cost: 20 + cost: 10 passive: false type: svi virtual_interface: true vlan: mode: irb - name: blue + name: red - bridge_group: 2 - ifindex: 6 - ifname: Vlan1001 - ipv4: 172.16.0.2/24 - name: VLAN red (1001) -> [r1,r3] + ifindex: 8 + ifname: Vlan1000 + ipv4: 172.16.1.2/24 + name: VLAN blue (1000) -> [r1,r3] neighbors: - - ifname: Vlan1001 - ipv4: 172.16.0.1/24 + - ifname: Vlan1000 + ipv4: 172.16.1.1/24 node: r1 - - ifname: Vlan1001 - ipv4: 172.16.0.3/24 + - ifname: Vlan1000 + ipv4: 172.16.1.3/24 node: r3 ospf: area: 0.0.0.0 - cost: 10 + cost: 20 passive: false type: svi virtual_interface: true vlan: mode: irb - name: red + name: blue - bridge_group: 3 - ifindex: 7 + ifindex: 9 ifname: Vlan1002 ipv4: 172.16.2.2/24 name: VLAN green (1002) -> [r1] @@ -333,7 +333,7 @@ nodes: max_bridge_group: 3 vlans: blue: - bridge_group: 1 + bridge_group: 2 id: 1000 mode: irb ospf: @@ -351,7 +351,7 @@ nodes: allocation: id_based ipv4: 172.16.2.0/24 red: - bridge_group: 2 + bridge_group: 1 id: 1001 mode: irb ospf: @@ -386,14 +386,14 @@ nodes: ifindex: 4 ifname: Vlan1000 ipv4: 172.16.1.3/24 - name: VLAN blue (1000) -> [r2,r1] + name: VLAN blue (1000) -> [r1,r2] neighbors: - - ifname: Vlan1000 - ipv4: 172.16.1.2/24 - node: r2 - ifname: Vlan1000 ipv4: 172.16.1.1/24 node: r1 + - ifname: Vlan1000 + ipv4: 172.16.1.2/24 + node: r2 ospf: area: 0.0.0.0 passive: false @@ -406,14 +406,14 @@ nodes: ifindex: 5 ifname: Vlan1001 ipv4: 172.16.0.3/24 - name: VLAN red (1001) -> [r2,r1] + name: VLAN red (1001) -> [r1,r2] neighbors: - - ifname: Vlan1001 - ipv4: 172.16.0.2/24 - node: r2 - ifname: Vlan1001 ipv4: 172.16.0.1/24 node: r1 + - ifname: Vlan1001 + ipv4: 172.16.0.2/24 + node: r2 ospf: area: 0.0.0.0 passive: false @@ -470,12 +470,12 @@ vlans: host_count: 0 id: 1000 neighbors: - - ifname: Vlan1000 - ipv4: 172.16.1.2/24 - node: r2 - ifname: Vlan1000 ipv4: 172.16.1.1/24 node: r1 + - ifname: Vlan1000 + ipv4: 172.16.1.2/24 + node: r2 - ifname: Vlan1000 ipv4: 172.16.1.3/24 node: r3 @@ -499,12 +499,12 @@ vlans: host_count: 0 id: 1001 neighbors: - - ifname: Vlan1001 - ipv4: 172.16.0.2/24 - node: r2 - ifname: Vlan1001 ipv4: 172.16.0.1/24 node: r1 + - ifname: Vlan1001 + ipv4: 172.16.0.2/24 + node: r2 - ifname: Vlan1001 ipv4: 172.16.0.3/24 node: r3 diff --git a/tests/topology/expected/groups-vlan-vrf.yml b/tests/topology/expected/groups-vlan-vrf.yml index 8df26bda83..bed9137ae8 100644 --- a/tests/topology/expected/groups-vlan-vrf.yml +++ b/tests/topology/expected/groups-vlan-vrf.yml @@ -295,11 +295,11 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: eth1.1001 - ipv4: 10.1.0.1/30 + ipv4: 172.16.4.3/24 name: s1 -> s2 neighbors: - ifname: eth3.1001 - ipv4: 10.1.0.2/30 + ipv4: 172.16.4.4/24 node: s2 vrf: red_vrf parent_ifindex: 1 @@ -402,11 +402,11 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: eth1.1001 - ipv4: 10.1.0.1/30 + ipv4: 172.16.4.3/24 name: s1 -> s2 neighbors: - ifname: eth3.1001 - ipv4: 10.1.0.2/30 + ipv4: 172.16.4.4/24 node: s2 vrf: red_vrf ospf: @@ -527,11 +527,11 @@ nodes: - bridge_group: 1 ifindex: 5 ifname: eth3.1001 - ipv4: 10.1.0.2/30 + ipv4: 172.16.4.4/24 name: s2 -> s1 neighbors: - ifname: eth1.1001 - ipv4: 10.1.0.1/30 + ipv4: 172.16.4.3/24 node: s1 vrf: red_vrf parent_ifindex: 3 @@ -675,11 +675,11 @@ nodes: - bridge_group: 1 ifindex: 5 ifname: eth3.1001 - ipv4: 10.1.0.2/30 + ipv4: 172.16.4.4/24 name: s2 -> s1 neighbors: - ifname: eth1.1001 - ipv4: 10.1.0.1/30 + ipv4: 172.16.4.3/24 node: s1 vrf: red_vrf ospf: diff --git a/tests/topology/expected/lag-l3-access-vlan.yml b/tests/topology/expected/lag-l3-access-vlan.yml index 6620a3c93a..2b0dd3041f 100644 --- a/tests/topology/expected/lag-l3-access-vlan.yml +++ b/tests/topology/expected/lag-l3-access-vlan.yml @@ -6,52 +6,125 @@ lag: lacp_mode: active links: - _linkname: links[1].lag[1] + gateway: + ipv4: 172.16.0.1/24 interfaces: - - ifindex: 1 + - _vlan_mode: irb + ifindex: 1 ifname: eth1 + ipv4: 172.16.0.1/24 node: r1 + vlan: + access: v1 - ifindex: 1 ifname: eth1 - node: r2 + ipv4: 172.16.0.2/24 + node: h1 lag: _parentindex: 1 linkindex: 2 node_count: 2 - prefix: false + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 type: p2p - _linkname: links[1].lag[2] + gateway: + ipv4: 172.16.0.1/24 interfaces: - - ifindex: 2 + - _vlan_mode: irb + ifindex: 2 ifname: eth2 + ipv4: 172.16.0.1/24 node: r1 + vlan: + access: v1 - ifindex: 2 ifname: eth2 - node: r2 + ipv4: 172.16.0.2/24 + node: h1 lag: _parentindex: 1 linkindex: 3 node_count: 2 - prefix: false - type: p2p -- _linkname: links[1].lag[3] - interfaces: - - ifindex: 3 - ifname: eth3 - node: r2 - - ifindex: 3 - ifname: eth3 - node: r1 - lag: - _parentindex: 1 - linkindex: 4 - node_count: 2 - prefix: false + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 type: p2p module: - lag - vlan name: input nodes: + h1: + _lag_ifindex: 2 + af: + ipv4: true + box: quay.io/frrouting/frr:10.0.1 + clab: + binds: + - clab_files/h1/daemons:/etc/frr/daemons + - clab_files/h1/hosts:/etc/hosts + config_templates: + - daemons:/etc/frr/daemons + - hosts:/etc/hosts + kind: linux + device: frr + hostname: clab-input-h1 + id: 2 + interfaces: + - gateway: + ipv4: 10.1.0.1/30 + ifindex: 30000 + ifname: bond1 + ipv4: 10.1.0.2/30 + lag: + ifindex: 1 + linkindex: 1 + mtu: 1500 + name: h1 -> r1 + neighbors: + - ifname: bond1 + ipv4: 10.1.0.1/30 + node: r1 + role: stub + type: lag + virtual_interface: true + - gateway: + ipv4: 172.16.0.1/24 + ifindex: 1 + ifname: eth1 + ipv4: 172.16.0.2/24 + linkindex: 2 + mtu: 1500 + name: h1 -> [r1] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.1/24 + node: r1 + role: stub + type: p2p + - gateway: + ipv4: 172.16.0.1/24 + ifindex: 2 + ifname: eth2 + ipv4: 172.16.0.2/24 + linkindex: 3 + mtu: 1500 + name: h1 -> [r1] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.1/24 + node: r1 + role: stub + type: p2p + mgmt: + ifname: eth0 + ipv4: 192.168.121.102 + mac: 08:4f:a9:00:00:02 + mtu: 1500 + name: h1 + role: host r1: af: ipv4: true @@ -70,6 +143,7 @@ nodes: interfaces: - ifindex: 30000 ifname: bond1 + ipv4: 10.1.0.1/30 lag: ifindex: 1 lacp: 'off' @@ -80,10 +154,12 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: r1 -> r2 + name: r1 -> h1 neighbors: - ifname: bond1 - node: r2 + ipv4: 10.1.0.2/30 + node: h1 + role: stub type: lag virtual_interface: true - ifindex: 1 @@ -92,33 +168,45 @@ nodes: _parentindex: 1 linkindex: 2 mtu: 1500 - name: r1 -> r2 + name: '[Access VLAN v1] r1 -> h1' neighbors: - ifname: eth1 - node: r2 + ipv4: 172.16.0.2/24 + node: h1 type: p2p + vlan: + access: v1 + access_id: 1000 - ifindex: 2 ifname: eth2 lag: _parentindex: 1 linkindex: 3 mtu: 1500 - name: r1 -> r2 + name: '[Access VLAN v1] r1 -> h1' neighbors: - ifname: eth2 - node: r2 + ipv4: 172.16.0.2/24 + node: h1 type: p2p - - ifindex: 3 - ifname: eth3 - lag: - _parentindex: 1 - linkindex: 4 - mtu: 1500 - name: r1 -> r2 + vlan: + access: v1 + access_id: 1000 + - bridge_group: 1 + ifindex: 3 + ifname: vlan1000 + ipv4: 172.16.0.1/24 + name: VLAN v1 (1000) -> [h1] neighbors: - - ifname: eth3 - node: r2 - type: p2p + - ifname: eth1 + ipv4: 172.16.0.2/24 + node: h1 + role: stub + type: svi + virtual_interface: true + vlan: + mode: irb + name: v1 lag: lacp: fast lacp_mode: active @@ -138,6 +226,7 @@ nodes: - vlan mtu: 1500 name: r1 +<<<<<<< HEAD r2: af: ipv4: true @@ -224,10 +313,30 @@ nodes: - vlan mtu: 1500 name: r2 +======= + vlan: + max_bridge_group: 1 + vlans: + v1: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 +>>>>>>> b2de7636b (Correct ip indexes, restore test results) provider: clab vlans: v1: + host_count: 1 id: 1000 + neighbors: + - ifname: eth1 + ipv4: 172.16.0.2/24 + node: h1 + - ifname: vlan1000 + ipv4: 172.16.0.1/24 + node: r1 prefix: allocation: id_based ipv4: 172.16.0.0/24 diff --git a/tests/topology/expected/lag-l3-vlan-trunk.yml b/tests/topology/expected/lag-l3-vlan-trunk.yml index 49c09da9d3..4f24367af6 100644 --- a/tests/topology/expected/lag-l3-vlan-trunk.yml +++ b/tests/topology/expected/lag-l3-vlan-trunk.yml @@ -84,6 +84,7 @@ nodes: neighbors: - ifname: bond1 node: r2 + subif_index: 2 type: lag virtual_interface: true - ifindex: 1 @@ -119,6 +120,62 @@ nodes: - ifname: eth3 node: r2 type: p2p + - ifindex: 4 + ifname: bond1.1000 + name: '[SubIf VLAN v1] r1 -> r2' + neighbors: + - ifname: eth4 + ipv4: 172.16.0.2/24 + node: r2 + parent_ifindex: 30000 + parent_ifname: bond1 + type: vlan_member + virtual_interface: true + vlan: + access: v1 + access_id: 1000 + - ifindex: 5 + ifname: bond1.1001 + name: '[SubIf VLAN v2] r1 -> r2' + neighbors: + - ifname: eth5 + ipv4: 172.16.1.2/24 + node: r2 + parent_ifindex: 30000 + parent_ifname: bond1 + type: vlan_member + virtual_interface: true + vlan: + access: v2 + access_id: 1001 + - bridge_group: 1 + ifindex: 6 + ifname: vlan1000 + ipv4: 172.16.0.1/24 + name: VLAN v1 (1000) -> [r2] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.2/24 + node: r2 + type: svi + virtual_interface: true + vlan: + mode: irb + name: v1 + - bridge_group: 2 + ifindex: 7 + ifname: vlan1001 + ipv4: 172.16.1.1/24 + name: VLAN v2 (1001) -> [r2] + neighbors: + - ifname: vlan1001 + ipv4: 172.16.1.2/24 + node: r2 + type: svi + virtual_interface: true + vlan: + mode: irb + name: v2 lag: lacp: fast lacp_mode: active @@ -138,6 +195,23 @@ nodes: - vlan mtu: 1500 name: r1 + vlan: + max_bridge_group: 2 + vlans: + v1: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 + v2: + bridge_group: 2 + id: 1001 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.1.0/24 r2: af: ipv4: true @@ -170,6 +244,7 @@ nodes: neighbors: - ifname: bond1 node: r1 + subif_index: 2 type: lag virtual_interface: true - ifindex: 1 @@ -205,6 +280,62 @@ nodes: - ifname: eth3 node: r1 type: p2p + - ifindex: 4 + ifname: bond1.1000 + name: '[SubIf VLAN v1] r2 -> r1' + neighbors: + - ifname: eth4 + ipv4: 172.16.0.1/24 + node: r1 + parent_ifindex: 30000 + parent_ifname: bond1 + type: vlan_member + virtual_interface: true + vlan: + access: v1 + access_id: 1000 + - ifindex: 5 + ifname: bond1.1001 + name: '[SubIf VLAN v2] r2 -> r1' + neighbors: + - ifname: eth5 + ipv4: 172.16.1.1/24 + node: r1 + parent_ifindex: 30000 + parent_ifname: bond1 + type: vlan_member + virtual_interface: true + vlan: + access: v2 + access_id: 1001 + - bridge_group: 1 + ifindex: 6 + ifname: vlan1000 + ipv4: 172.16.0.2/24 + name: VLAN v1 (1000) -> [r1] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.1/24 + node: r1 + type: svi + virtual_interface: true + vlan: + mode: irb + name: v1 + - bridge_group: 2 + ifindex: 7 + ifname: vlan1001 + ipv4: 172.16.1.2/24 + name: VLAN v2 (1001) -> [r1] + neighbors: + - ifname: vlan1001 + ipv4: 172.16.1.1/24 + node: r1 + type: svi + virtual_interface: true + vlan: + mode: irb + name: v2 lag: lacp: fast lacp_mode: active @@ -224,15 +355,48 @@ nodes: - vlan mtu: 1500 name: r2 + vlan: + max_bridge_group: 2 + vlans: + v1: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 + v2: + bridge_group: 2 + id: 1001 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.1.0/24 provider: clab vlans: v1: + host_count: 0 id: 1000 + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.2/24 + node: r2 + - ifname: vlan1000 + ipv4: 172.16.0.1/24 + node: r1 prefix: allocation: id_based ipv4: 172.16.0.0/24 v2: + host_count: 0 id: 1001 + neighbors: + - ifname: vlan1001 + ipv4: 172.16.1.2/24 + node: r2 + - ifname: vlan1001 + ipv4: 172.16.1.1/24 + node: r1 prefix: allocation: id_based ipv4: 172.16.1.0/24 diff --git a/tests/topology/expected/lag-mlag-m_to_m.yml b/tests/topology/expected/lag-mlag-m_to_m.yml index 24c2bf71d5..fff5f56e70 100644 --- a/tests/topology/expected/lag-mlag-m_to_m.yml +++ b/tests/topology/expected/lag-mlag-m_to_m.yml @@ -204,21 +204,32 @@ nodes: node: b1 type: lag virtual_interface: true + vlan: + trunk: + red: {} + trunk_id: + - 1000 - bridge_group: 1 - ifindex: 30001 + ifindex: 5 ifname: Vlan1000 ipv4: 172.16.0.1/24 - name: VLAN red (1000) -> [h1,h2,b2] + name: VLAN red (1000) -> [h1,b1,b2,a2,h2] neighbors: - ifname: eth1 ipv4: 172.16.0.5/24 node: h1 - - ifname: eth1 - ipv4: 172.16.0.6/24 - node: h2 + - ifname: Vlan1000 + ipv4: 172.16.0.3/24 + node: b1 - ifname: Vlan1000 ipv4: 172.16.0.4/24 node: b2 + - ifname: Vlan1000 + ipv4: 172.16.0.2/24 + node: a2 + - ifname: eth1 + ipv4: 172.16.0.6/24 + node: h2 type: svi virtual_interface: true vlan: @@ -292,6 +303,11 @@ nodes: node: b2 type: lag virtual_interface: true + vlan: + trunk: + red: {} + trunk_id: + - 1000 - ifindex: 2 ifname: Ethernet2 lag: @@ -303,6 +319,32 @@ nodes: - ifname: Ethernet2 node: b2 type: p2p + - bridge_group: 1 + ifindex: 4 + ifname: Vlan1000 + ipv4: 172.16.0.2/24 + name: VLAN red (1000) -> [h1,a1,b1,b2,h2] + neighbors: + - ifname: eth1 + ipv4: 172.16.0.5/24 + node: h1 + - ifname: Vlan1000 + ipv4: 172.16.0.1/24 + node: a1 + - ifname: Vlan1000 + ipv4: 172.16.0.3/24 + node: b1 + - ifname: Vlan1000 + ipv4: 172.16.0.4/24 + node: b2 + - ifname: eth1 + ipv4: 172.16.0.6/24 + node: h2 + type: svi + virtual_interface: true + vlan: + mode: irb + name: red lag: lacp: fast lacp_mode: active @@ -321,6 +363,16 @@ nodes: - lag - vlan name: a2 + vlan: + max_bridge_group: 1 + vlans: + red: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 b1: af: ipv4: true @@ -372,6 +424,37 @@ nodes: node: a1 type: lag virtual_interface: true + vlan: + trunk: + red: {} + trunk_id: + - 1000 + - bridge_group: 1 + ifindex: 4 + ifname: Vlan1000 + ipv4: 172.16.0.3/24 + name: VLAN red (1000) -> [h1,a1,b2,a2,h2] + neighbors: + - ifname: eth1 + ipv4: 172.16.0.5/24 + node: h1 + - ifname: Vlan1000 + ipv4: 172.16.0.1/24 + node: a1 + - ifname: Vlan1000 + ipv4: 172.16.0.4/24 + node: b2 + - ifname: Vlan1000 + ipv4: 172.16.0.2/24 + node: a2 + - ifname: eth1 + ipv4: 172.16.0.6/24 + node: h2 + type: svi + virtual_interface: true + vlan: + mode: irb + name: red lag: lacp: fast lacp_mode: active @@ -390,6 +473,16 @@ nodes: - lag - vlan name: b1 + vlan: + max_bridge_group: 1 + vlans: + red: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 b2: af: ipv4: true @@ -430,6 +523,11 @@ nodes: node: a2 type: lag virtual_interface: true + vlan: + trunk: + red: {} + trunk_id: + - 1000 - ifindex: 2 ifname: Ethernet2 lag: @@ -455,10 +553,10 @@ nodes: access: red access_id: 1000 - bridge_group: 1 - ifindex: 4 + ifindex: 5 ifname: Vlan1000 ipv4: 172.16.0.4/24 - name: VLAN red (1000) -> [h1,a1,h2] + name: VLAN red (1000) -> [h1,a1,b1,a2,h2] neighbors: - ifname: eth1 ipv4: 172.16.0.5/24 @@ -466,6 +564,12 @@ nodes: - ifname: Vlan1000 ipv4: 172.16.0.1/24 node: a1 + - ifname: Vlan1000 + ipv4: 172.16.0.3/24 + node: b1 + - ifname: Vlan1000 + ipv4: 172.16.0.2/24 + node: a2 - ifname: eth1 ipv4: 172.16.0.6/24 node: h2 @@ -516,17 +620,23 @@ nodes: ifname: eth1 ipv4: 172.16.0.5/24 linkindex: 6 - name: h1 -> [a1,h2,b2] + name: h1 -> [a1,b1,b2,a2,h2] neighbors: - ifname: Vlan1000 ipv4: 172.16.0.1/24 node: a1 - - ifname: eth1 - ipv4: 172.16.0.6/24 - node: h2 + - ifname: Vlan1000 + ipv4: 172.16.0.3/24 + node: b1 - ifname: Vlan1000 ipv4: 172.16.0.4/24 node: b2 + - ifname: Vlan1000 + ipv4: 172.16.0.2/24 + node: a2 + - ifname: eth1 + ipv4: 172.16.0.6/24 + node: h2 type: lan mgmt: ifname: eth0 @@ -570,7 +680,7 @@ nodes: ifname: eth1 ipv4: 172.16.0.6/24 linkindex: 7 - name: h2 -> [h1,a1,b2] + name: h2 -> [h1,a1,b1,b2,a2] neighbors: - ifname: eth1 ipv4: 172.16.0.5/24 @@ -578,9 +688,15 @@ nodes: - ifname: Vlan1000 ipv4: 172.16.0.1/24 node: a1 + - ifname: Vlan1000 + ipv4: 172.16.0.3/24 + node: b1 - ifname: Vlan1000 ipv4: 172.16.0.4/24 node: b2 + - ifname: Vlan1000 + ipv4: 172.16.0.2/24 + node: a2 type: lan mgmt: ifname: eth0 @@ -622,12 +738,18 @@ vlans: - ifname: Vlan1000 ipv4: 172.16.0.1/24 node: a1 - - ifname: eth1 - ipv4: 172.16.0.6/24 - node: h2 + - ifname: Vlan1000 + ipv4: 172.16.0.3/24 + node: b1 - ifname: Vlan1000 ipv4: 172.16.0.4/24 node: b2 + - ifname: Vlan1000 + ipv4: 172.16.0.2/24 + node: a2 + - ifname: eth1 + ipv4: 172.16.0.6/24 + node: h2 prefix: allocation: id_based ipv4: 172.16.0.0/24 diff --git a/tests/topology/expected/lag-mlag.yml b/tests/topology/expected/lag-mlag.yml index daac54d69c..13f680661f 100644 --- a/tests/topology/expected/lag-mlag.yml +++ b/tests/topology/expected/lag-mlag.yml @@ -246,14 +246,19 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: h1 -> [s1,s2] + name: '[Access VLAN red] h1 -> [s1,s2]' neighbors: - ifname: port-channel1 + ipv4: 172.16.0.1/24 node: s1 - ifname: port-channel1 + ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 30001 ifname: bond2 lag: @@ -339,6 +344,26 @@ nodes: - ifname: ethernet1/1/6 node: s1 type: p2p + - bridge_group: 1 + ifindex: 7 + ifname: vlan1000 + ipv4: 172.16.0.3/24 + name: VLAN red (1000) -> [s2,s1,h2] + neighbors: + - ifname: virtual-network1000 + ipv4: 172.16.0.2/24 + node: s2 + - ifname: virtual-network1000 + ipv4: 172.16.0.1/24 + node: s1 + - ifname: vlan1000 + ipv4: 172.16.0.4/24 + node: h2 + type: svi + virtual_interface: true + vlan: + mode: irb + name: red lag: lacp: fast lacp_mode: active @@ -358,6 +383,16 @@ nodes: - vlan mtu: 1500 name: h1 + vlan: + max_bridge_group: 1 + vlans: + red: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 h2: af: ipv4: true @@ -386,14 +421,19 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: h2 -> [s1,s2] + name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: - ifname: port-channel3 + ipv4: 172.16.0.1/24 node: s1 - ifname: port-channel3 + ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 30001 ifname: bond2 lag: @@ -406,14 +446,19 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: h2 -> [s1,s2] + name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: - ifname: port-channel4 + ipv4: 172.16.0.1/24 node: s1 - ifname: port-channel4 + ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 1 ifname: eth1 lag: @@ -480,6 +525,26 @@ nodes: - ifname: ethernet1/1/7 node: s2 type: p2p + - bridge_group: 1 + ifindex: 7 + ifname: vlan1000 + ipv4: 172.16.0.4/24 + name: VLAN red (1000) -> [h1,s2,s1] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.3/24 + node: h1 + - ifname: virtual-network1000 + ipv4: 172.16.0.2/24 + node: s2 + - ifname: virtual-network1000 + ipv4: 172.16.0.1/24 + node: s1 + type: svi + virtual_interface: true + vlan: + mode: irb + name: red lag: lacp: fast lacp_mode: active @@ -499,6 +564,16 @@ nodes: - vlan mtu: 1500 name: h2 + vlan: + max_bridge_group: 1 + vlans: + red: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 s1: af: ipv4: true @@ -538,14 +613,19 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: s1 -> [h1,s2] + name: '[Access VLAN red] s1 -> [h1,s2]' neighbors: - ifname: bond1 + ipv4: 172.16.0.3/24 node: h1 - ifname: port-channel1 + ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 30001 ifname: port-channel2 lag: @@ -578,14 +658,19 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: s1 -> [h2,s2] + name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: - ifname: bond1 + ipv4: 172.16.0.4/24 node: h2 - ifname: port-channel3 + ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 30003 ifname: port-channel4 lag: @@ -599,14 +684,19 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: s1 -> [h2,s2] + name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: - ifname: bond2 + ipv4: 172.16.0.4/24 node: h2 - ifname: port-channel4 + ipv4: 172.16.0.2/24 node: s2 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - clab: name: eth2 ifindex: 2 @@ -711,6 +801,26 @@ nodes: - ifname: eth5 node: h2 type: p2p + - bridge_group: 1 + ifindex: 10 + ifname: virtual-network1000 + ipv4: 172.16.0.1/24 + name: VLAN red (1000) -> [h1,s2,h2] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.3/24 + node: h1 + - ifname: virtual-network1000 + ipv4: 172.16.0.2/24 + node: s2 + - ifname: vlan1000 + ipv4: 172.16.0.4/24 + node: h2 + type: svi + virtual_interface: true + vlan: + mode: irb + name: red lag: lacp: fast lacp_mode: active @@ -730,6 +840,16 @@ nodes: - vlan mtu: 1500 name: s1 + vlan: + max_bridge_group: 1 + vlans: + red: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 s2: af: ipv4: true @@ -769,14 +889,19 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: s2 -> [h1,s1] + name: '[Access VLAN red] s2 -> [h1,s1]' neighbors: - ifname: bond1 + ipv4: 172.16.0.3/24 node: h1 - ifname: port-channel1 + ipv4: 172.16.0.1/24 node: s1 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 30001 ifname: port-channel3 lag: @@ -790,14 +915,19 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: s2 -> [h2,s1] + name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: - ifname: bond1 + ipv4: 172.16.0.4/24 node: h2 - ifname: port-channel3 + ipv4: 172.16.0.1/24 node: s1 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 30002 ifname: port-channel4 lag: @@ -811,14 +941,19 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: s2 -> [h2,s1] + name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: - ifname: bond2 + ipv4: 172.16.0.4/24 node: h2 - ifname: port-channel4 + ipv4: 172.16.0.1/24 node: s1 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - clab: name: eth2 ifindex: 2 @@ -897,6 +1032,26 @@ nodes: - ifname: eth6 node: h2 type: p2p + - bridge_group: 1 + ifindex: 8 + ifname: virtual-network1000 + ipv4: 172.16.0.2/24 + name: VLAN red (1000) -> [h1,s1,h2] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.3/24 + node: h1 + - ifname: virtual-network1000 + ipv4: 172.16.0.1/24 + node: s1 + - ifname: vlan1000 + ipv4: 172.16.0.4/24 + node: h2 + type: svi + virtual_interface: true + vlan: + mode: irb + name: red lag: lacp: fast lacp_mode: active @@ -916,10 +1071,34 @@ nodes: - vlan mtu: 1500 name: s2 + vlan: + max_bridge_group: 1 + vlans: + red: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 provider: clab vlans: red: + host_count: 0 id: 1000 + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.3/24 + node: h1 + - ifname: virtual-network1000 + ipv4: 172.16.0.2/24 + node: s2 + - ifname: virtual-network1000 + ipv4: 172.16.0.1/24 + node: s1 + - ifname: vlan1000 + ipv4: 172.16.0.4/24 + node: h2 prefix: allocation: id_based ipv4: 172.16.0.0/24 diff --git a/tests/topology/expected/libvirt-clab-complex.yml b/tests/topology/expected/libvirt-clab-complex.yml index 5d60a5e907..d4cd11ceb1 100644 --- a/tests/topology/expected/libvirt-clab-complex.yml +++ b/tests/topology/expected/libvirt-clab-complex.yml @@ -65,11 +65,11 @@ links: interfaces: - ifindex: 3 ifname: GigabitEthernet0/3 - ipv4: 10.1.0.5/30 + ipv4: 172.16.1.2/24 node: r2 - ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.6/30 + ipv4: 172.16.1.3/24 node: r3 libvirt: provider: @@ -77,20 +77,20 @@ links: linkindex: 3 node_count: 2 prefix: - ipv4: 10.1.0.4/30 + ipv4: 172.16.1.0/24 type: lan - _linkname: links[4] bridge: input_4 gateway: - ipv4: 172.16.1.3/24 + ipv4: 172.16.2.3/24 interfaces: - ifindex: 2 ifname: Ethernet2 - ipv4: 172.16.1.3/24 + ipv4: 172.16.2.3/24 node: r3 - ifindex: 1 ifname: eth1 - ipv4: 172.16.1.5/24 + ipv4: 172.16.2.5/24 node: h2 libvirt: provider: @@ -98,25 +98,25 @@ links: linkindex: 4 node_count: 2 prefix: - ipv4: 172.16.1.0/24 + ipv4: 172.16.2.0/24 role: stub type: lan - _linkname: links[5] bridge: input_5 gateway: - ipv4: 172.16.2.3/24 + ipv4: 172.16.3.3/24 interfaces: - ifindex: 2 ifname: eth2 - ipv4: 172.16.2.4/24 + ipv4: 172.16.3.4/24 node: h1 - ifindex: 3 ifname: Ethernet3 - ipv4: 172.16.2.3/24 + ipv4: 172.16.3.3/24 node: r3 - ifindex: 2 ifname: eth2 - ipv4: 172.16.2.5/24 + ipv4: 172.16.3.5/24 node: h2 libvirt: provider: @@ -124,7 +124,7 @@ links: linkindex: 5 node_count: 3 prefix: - ipv4: 172.16.2.0/24 + ipv4: 172.16.3.0/24 role: stub type: lan module: @@ -169,16 +169,16 @@ nodes: ipv4: 172.16.2.3/24 ifindex: 2 ifname: eth2 - ipv4: 172.16.2.4/24 + ipv4: 172.16.3.4/24 linkindex: 5 mtu: 1500 name: h1 -> [r3,h2] neighbors: - ifname: Ethernet3 - ipv4: 172.16.2.3/24 + ipv4: 172.16.3.3/24 node: r3 - ifname: eth2 - ipv4: 172.16.2.5/24 + ipv4: 172.16.3.5/24 node: h2 role: stub type: lan @@ -230,16 +230,16 @@ nodes: interfaces: - bridge: input_4 gateway: - ipv4: 172.16.1.3/24 + ipv4: 172.16.2.3/24 ifindex: 1 ifname: eth1 - ipv4: 172.16.1.5/24 + ipv4: 172.16.2.5/24 linkindex: 4 mtu: 1500 name: h2 -> r3 neighbors: - ifname: Ethernet2 - ipv4: 172.16.1.3/24 + ipv4: 172.16.2.3/24 node: r3 role: stub type: lan @@ -248,16 +248,16 @@ nodes: ipv4: 172.16.2.3/24 ifindex: 2 ifname: eth2 - ipv4: 172.16.2.5/24 + ipv4: 172.16.3.5/24 linkindex: 5 mtu: 1500 name: h2 -> [h1,r3] neighbors: - ifname: eth2 - ipv4: 172.16.2.4/24 + ipv4: 172.16.3.4/24 node: h1 - ifname: Ethernet3 - ipv4: 172.16.2.3/24 + ipv4: 172.16.3.3/24 node: r3 role: stub type: lan @@ -391,12 +391,12 @@ nodes: - bridge: input_3 ifindex: 3 ifname: GigabitEthernet0/3 - ipv4: 10.1.0.5/30 + ipv4: 172.16.1.2/24 linkindex: 3 name: r2 -> r3 neighbors: - ifname: Ethernet1 - ipv4: 10.1.0.6/30 + ipv4: 172.16.1.3/24 node: r3 ospf: area: 0.0.0.0 @@ -444,12 +444,12 @@ nodes: name: et1 ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.6/30 + ipv4: 172.16.1.3/24 linkindex: 3 name: r3 -> r2 neighbors: - ifname: GigabitEthernet0/3 - ipv4: 10.1.0.5/30 + ipv4: 172.16.1.2/24 node: r2 ospf: area: 0.0.0.0 @@ -461,12 +461,12 @@ nodes: name: et2 ifindex: 2 ifname: Ethernet2 - ipv4: 172.16.1.3/24 + ipv4: 172.16.2.3/24 linkindex: 4 name: r3 -> h2 neighbors: - ifname: eth1 - ipv4: 172.16.1.5/24 + ipv4: 172.16.2.5/24 node: h2 ospf: area: 0.0.0.0 @@ -479,15 +479,15 @@ nodes: name: et3 ifindex: 3 ifname: Ethernet3 - ipv4: 172.16.2.3/24 + ipv4: 172.16.3.3/24 linkindex: 5 name: r3 -> [h1,h2] neighbors: - ifname: eth2 - ipv4: 172.16.2.4/24 + ipv4: 172.16.3.4/24 node: h1 - ifname: eth2 - ipv4: 172.16.2.5/24 + ipv4: 172.16.3.5/24 node: h2 ospf: area: 0.0.0.0 diff --git a/tests/topology/expected/link-tunnel.yml b/tests/topology/expected/link-tunnel.yml index fcaf2f5c38..ecd0cf4690 100644 --- a/tests/topology/expected/link-tunnel.yml +++ b/tests/topology/expected/link-tunnel.yml @@ -27,28 +27,28 @@ links: interfaces: - ifindex: 20001 ifname: Tunnel1 - ipv4: 10.1.0.1/30 + ipv4: 172.16.1.2/24 node: r2 - ifindex: 20001 ifname: Tunnel1 - ipv4: 10.1.0.2/30 + ipv4: 172.16.1.3/24 node: r3 linkindex: 2 node_count: 2 prefix: - ipv4: 10.1.0.0/30 + ipv4: 172.16.1.0/24 type: tunnel - _linkname: links[3] bridge: input_3 interfaces: - ifindex: 20002 ifname: Tunnel2 - ipv4: 172.16.1.3/24 + ipv4: 172.16.2.3/24 node: r3 linkindex: 3 node_count: 1 prefix: - ipv4: 172.16.1.0/24 + ipv4: 172.16.2.0/24 role: stub type: tunnel - _linkname: links[4] @@ -56,20 +56,20 @@ links: interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.2.1/24 + ipv4: 172.16.3.1/24 node: r1 - ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.2.2/24 + ipv4: 172.16.3.2/24 node: r2 - ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.3.3/24 node: r3 linkindex: 4 node_count: 3 prefix: - ipv4: 172.16.2.0/24 + ipv4: 172.16.3.0/24 type: lan name: input nodes: @@ -97,15 +97,15 @@ nodes: - bridge: input_4 ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.2.1/24 + ipv4: 172.16.3.1/24 linkindex: 4 name: r1 -> [r2,r3] neighbors: - ifname: GigabitEthernet0/1 - ipv4: 172.16.2.2/24 + ipv4: 172.16.3.2/24 node: r2 - ifname: GigabitEthernet0/1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.3.3/24 node: r3 type: lan loopback: @@ -143,27 +143,27 @@ nodes: virtual_interface: true - ifindex: 20001 ifname: Tunnel1 - ipv4: 10.1.0.1/30 + ipv4: 172.16.1.2/24 linkindex: 2 name: r2 -> r3 neighbors: - ifname: Tunnel1 - ipv4: 10.1.0.2/30 + ipv4: 172.16.1.3/24 node: r3 type: tunnel virtual_interface: true - bridge: input_4 ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.2.2/24 + ipv4: 172.16.3.2/24 linkindex: 4 name: r2 -> [r1,r3] neighbors: - ifname: Ethernet1 - ipv4: 172.16.2.1/24 + ipv4: 172.16.3.1/24 node: r1 - ifname: GigabitEthernet0/1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.3.3/24 node: r3 type: lan loopback: @@ -201,18 +201,18 @@ nodes: virtual_interface: true - ifindex: 20001 ifname: Tunnel1 - ipv4: 10.1.0.2/30 + ipv4: 172.16.1.3/24 linkindex: 2 name: r3 -> r2 neighbors: - ifname: Tunnel1 - ipv4: 10.1.0.1/30 + ipv4: 172.16.1.2/24 node: r2 type: tunnel virtual_interface: true - ifindex: 20002 ifname: Tunnel2 - ipv4: 172.16.1.3/24 + ipv4: 172.16.2.3/24 linkindex: 3 name: r3 -> stub neighbors: [] @@ -222,15 +222,15 @@ nodes: - bridge: input_4 ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.3.3/24 linkindex: 4 name: r3 -> [r1,r2] neighbors: - ifname: Ethernet1 - ipv4: 172.16.2.1/24 + ipv4: 172.16.3.1/24 node: r1 - ifname: GigabitEthernet0/1 - ipv4: 172.16.2.2/24 + ipv4: 172.16.3.2/24 node: r2 type: lan loopback: diff --git a/tests/topology/expected/node.clone-plugin-lag.yml b/tests/topology/expected/node.clone-plugin-lag.yml index a4c777c79d..34e50542f8 100644 --- a/tests/topology/expected/node.clone-plugin-lag.yml +++ b/tests/topology/expected/node.clone-plugin-lag.yml @@ -422,18 +422,27 @@ nodes: ======= mode: 802.3ad <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] h2-01 -> [r1,r2]' ======= name: h2-01 -> [r1,r2] >>>>>>> 4293ef6c3 (Implement p2p pool selection logic) +======= + name: '[Access VLAN red] h2-01 -> [r1,r2]' +>>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: port-channel10 + ipv4: 172.16.0.1/24 node: r1 - ifname: port-channel10 + ipv4: 172.16.0.2/24 node: r2 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 1 ifname: eth1 lag: @@ -454,6 +463,26 @@ nodes: - ifname: Ethernet2 node: r2 type: p2p + - bridge_group: 1 + ifindex: 3 + ifname: vlan1000 + ipv4: 172.16.0.5/24 + name: VLAN red (1000) -> [r2,r1,h2-02] + neighbors: + - ifname: Vlan1000 + ipv4: 172.16.0.2/24 + node: r2 + - ifname: Vlan1000 + ipv4: 172.16.0.1/24 + node: r1 + - ifname: vlan1000 + ipv4: 172.16.0.6/24 + node: h2-02 + type: svi + virtual_interface: true + vlan: + mode: irb + name: red lag: lacp: fast lacp_mode: active @@ -472,6 +501,16 @@ nodes: - lag - vlan name: h2-01 + vlan: + max_bridge_group: 1 + vlans: + red: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 h2-02: af: ipv4: true @@ -490,18 +529,27 @@ nodes: ======= mode: 802.3ad <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] h2-02 -> [r1,r2]' ======= name: h2-02 -> [r1,r2] >>>>>>> 4293ef6c3 (Implement p2p pool selection logic) +======= + name: '[Access VLAN red] h2-02 -> [r1,r2]' +>>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: port-channel11 + ipv4: 172.16.0.1/24 node: r1 - ifname: port-channel11 + ipv4: 172.16.0.2/24 node: r2 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 1 ifname: eth1 lag: @@ -522,6 +570,26 @@ nodes: - ifname: Ethernet3 node: r2 type: p2p + - bridge_group: 1 + ifindex: 3 + ifname: vlan1000 + ipv4: 172.16.0.6/24 + name: VLAN red (1000) -> [h2-01,r2,r1] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.5/24 + node: h2-01 + - ifname: Vlan1000 + ipv4: 172.16.0.2/24 + node: r2 + - ifname: Vlan1000 + ipv4: 172.16.0.1/24 + node: r1 + type: svi + virtual_interface: true + vlan: + mode: irb + name: red lag: lacp: fast lacp_mode: active @@ -540,6 +608,16 @@ nodes: - lag - vlan name: h2-02 + vlan: + max_bridge_group: 1 + vlans: + red: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 r1: af: ipv4: true @@ -610,18 +688,27 @@ nodes: ======= mode: 802.3ad <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r1 -> [h2-01,r2]' ======= name: r1 -> [h2-01,r2] >>>>>>> 4293ef6c3 (Implement p2p pool selection logic) +======= + name: '[Access VLAN red] r1 -> [h2-01,r2]' +>>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: bond1 + ipv4: 172.16.0.5/24 node: h2-01 - ifname: port-channel10 + ipv4: 172.16.0.2/24 node: r2 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 30003 ifname: port-channel11 lag: @@ -634,18 +721,27 @@ nodes: ======= mode: 802.3ad <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r1 -> [h2-02,r2]' ======= name: r1 -> [h2-02,r2] >>>>>>> 4293ef6c3 (Implement p2p pool selection logic) +======= + name: '[Access VLAN red] r1 -> [h2-02,r2]' +>>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: bond1 + ipv4: 172.16.0.6/24 node: h2-02 - ifname: port-channel11 + ipv4: 172.16.0.2/24 node: r2 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 2 ifname: Ethernet2 lag: @@ -706,6 +802,26 @@ nodes: - ifname: eth1 node: h2-02 type: p2p + - bridge_group: 1 + ifindex: 8 + ifname: Vlan1000 + ipv4: 172.16.0.1/24 + name: VLAN red (1000) -> [h2-01,r2,h2-02] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.5/24 + node: h2-01 + - ifname: Vlan1000 + ipv4: 172.16.0.2/24 + node: r2 + - ifname: vlan1000 + ipv4: 172.16.0.6/24 + node: h2-02 + type: svi + virtual_interface: true + vlan: + mode: irb + name: red lag: lacp: fast lacp_mode: active @@ -724,6 +840,16 @@ nodes: - lag - vlan name: r1 + vlan: + max_bridge_group: 1 + vlans: + red: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 r2: _set_ifindex: true af: @@ -767,13 +893,26 @@ nodes: - ifname: eth2 node: h2-02 type: p2p - - ifindex: 4 - ifname: Ethernet4 - linkindex: 0 - neighbors: [] - remote_id: 2 - remote_ifindex: 666 - type: p2p + - bridge_group: 1 + ifindex: 4 + ifname: Vlan1000 + ipv4: 172.16.0.2/24 + name: VLAN red (1000) -> [h2-01,r1,h2-02] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.5/24 + node: h2-01 + - ifname: Vlan1000 + ipv4: 172.16.0.1/24 + node: r1 + - ifname: vlan1000 + ipv4: 172.16.0.6/24 + node: h2-02 + type: svi + virtual_interface: true + vlan: + mode: irb + name: red - ifindex: 5 ifname: Ethernet5 linkindex: 0 @@ -869,18 +1008,27 @@ nodes: ======= mode: 802.3ad <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r2 -> [h2-01,r1]' ======= name: r2 -> [h2-01,r1] >>>>>>> 4293ef6c3 (Implement p2p pool selection logic) +======= + name: '[Access VLAN red] r2 -> [h2-01,r1]' +>>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: bond1 + ipv4: 172.16.0.5/24 node: h2-01 - ifname: port-channel10 + ipv4: 172.16.0.1/24 node: r1 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 - ifindex: 30003 ifname: port-channel11 lag: @@ -893,18 +1041,27 @@ nodes: ======= mode: 802.3ad <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) name: '[Access VLAN red] r2 -> [h2-02,r1]' ======= name: r2 -> [h2-02,r1] >>>>>>> 4293ef6c3 (Implement p2p pool selection logic) +======= + name: '[Access VLAN red] r2 -> [h2-02,r1]' +>>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: bond1 + ipv4: 172.16.0.6/24 node: h2-02 - ifname: port-channel11 + ipv4: 172.16.0.1/24 node: r1 type: lag virtual_interface: true + vlan: + access: red + access_id: 1000 lag: lacp: fast lacp_mode: active @@ -925,12 +1082,36 @@ nodes: - lag - vlan name: r2 + vlan: + max_bridge_group: 1 + vlans: + red: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 plugin: - node.clone provider: libvirt vlans: red: + host_count: 0 id: 1000 + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.5/24 + node: h2-01 + - ifname: Vlan1000 + ipv4: 172.16.0.2/24 + node: r2 + - ifname: Vlan1000 + ipv4: 172.16.0.1/24 + node: r1 + - ifname: vlan1000 + ipv4: 172.16.0.6/24 + node: h2-02 prefix: allocation: id_based ipv4: 172.16.0.0/24 diff --git a/tests/topology/expected/rt-vlan-mode-link-route.yml b/tests/topology/expected/rt-vlan-mode-link-route.yml index 90a03b1754..e31518beb2 100644 --- a/tests/topology/expected/rt-vlan-mode-link-route.yml +++ b/tests/topology/expected/rt-vlan-mode-link-route.yml @@ -406,11 +406,11 @@ nodes: - bridge_group: 2 ifindex: 12 ifname: eth4.1001 - ipv4: 10.1.0.6/30 + ipv4: 172.16.4.4/24 name: br -> sw neighbors: - ifname: eth4.1001 - ipv4: 10.1.0.5/30 + ipv4: 172.16.4.3/24 node: sw parent_ifindex: 4 parent_ifname: eth4 @@ -424,11 +424,11 @@ nodes: - bridge_group: 3 ifindex: 13 ifname: eth4.1002 - ipv4: 10.1.0.10/30 + ipv4: 172.16.5.4/24 name: br -> sw neighbors: - ifname: eth4.1002 - ipv4: 10.1.0.9/30 + ipv4: 172.16.5.3/24 node: sw parent_ifindex: 4 parent_ifname: eth4 @@ -442,11 +442,11 @@ nodes: - bridge_group: 1 ifindex: 14 ifname: eth4.1000 - ipv4: 10.1.0.14/30 + ipv4: 172.16.6.4/24 name: br -> sw neighbors: - ifname: eth4.1000 - ipv4: 10.1.0.13/30 + ipv4: 172.16.6.3/24 node: sw parent_ifindex: 4 parent_ifname: eth4 @@ -988,11 +988,11 @@ nodes: - bridge_group: 2 ifindex: 10 ifname: eth4.1001 - ipv4: 10.1.0.5/30 + ipv4: 172.16.4.3/24 name: sw -> br neighbors: - ifname: eth4.1001 - ipv4: 10.1.0.6/30 + ipv4: 172.16.4.4/24 node: br parent_ifindex: 4 parent_ifname: eth4 @@ -1006,11 +1006,11 @@ nodes: - bridge_group: 3 ifindex: 11 ifname: eth4.1002 - ipv4: 10.1.0.9/30 + ipv4: 172.16.5.3/24 name: sw -> br neighbors: - ifname: eth4.1002 - ipv4: 10.1.0.10/30 + ipv4: 172.16.5.4/24 node: br parent_ifindex: 4 parent_ifname: eth4 @@ -1024,11 +1024,11 @@ nodes: - bridge_group: 1 ifindex: 12 ifname: eth4.1000 - ipv4: 10.1.0.13/30 + ipv4: 172.16.6.3/24 name: sw -> br neighbors: - ifname: eth4.1000 - ipv4: 10.1.0.14/30 + ipv4: 172.16.6.4/24 node: br parent_ifindex: 4 parent_ifname: eth4 diff --git a/tests/topology/expected/vlan-access-links.yml b/tests/topology/expected/vlan-access-links.yml index a32293e5a9..785f5c465d 100644 --- a/tests/topology/expected/vlan-access-links.yml +++ b/tests/topology/expected/vlan-access-links.yml @@ -257,7 +257,7 @@ nodes: access: red access_id: 1000 - bridge_group: 1 - ifindex: 3 + ifindex: 4 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,s2...] diff --git a/tests/topology/expected/vlan-access-neighbors.yml b/tests/topology/expected/vlan-access-neighbors.yml index c54c65b0e9..1334640f9e 100644 --- a/tests/topology/expected/vlan-access-neighbors.yml +++ b/tests/topology/expected/vlan-access-neighbors.yml @@ -23,40 +23,38 @@ links: interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.0.1/24 + ipv4: 172.16.1.1/24 node: r1 - _vlan_mode: irb ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.0.2/24 + ipv4: 172.16.1.2/24 node: s1 vlan: access: red linkindex: 1 node_count: 2 prefix: - allocation: id_based - ipv4: 172.16.0.0/24 + ipv4: 172.16.1.0/24 type: lan - _linkname: links[2] bridge: input_2 interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.0.3/24 + ipv4: 172.16.2.3/24 node: r2 - _vlan_mode: irb ifindex: 2 ifname: Ethernet2 - ipv4: 172.16.0.2/24 + ipv4: 172.16.2.2/24 node: s1 vlan: access: red linkindex: 2 node_count: 2 prefix: - allocation: id_based - ipv4: 172.16.0.0/24 + ipv4: 172.16.2.0/24 type: lan module: - vlan @@ -92,7 +90,7 @@ nodes: ipv4: true as: 65001 ifindex: 1 - ipv4: 172.16.0.3 + ipv4: 172.16.2.3 name: r2 type: ebgp next_hop_self: true @@ -112,15 +110,15 @@ nodes: name: et1 ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.0.1/24 + ipv4: 172.16.1.1/24 linkindex: 1 name: r1 -> [s1,r2] neighbors: - ifname: Vlan1000 - ipv4: 172.16.0.2/24 + ipv4: 172.16.1.2/24 node: s1 - ifname: Ethernet1 - ipv4: 172.16.0.3/24 + ipv4: 172.16.2.3/24 node: r2 type: lan loopback: @@ -166,7 +164,7 @@ nodes: ipv4: true as: 65000 ifindex: 1 - ipv4: 172.16.0.1 + ipv4: 172.16.1.1 name: r1 type: ebgp next_hop_self: true @@ -186,15 +184,15 @@ nodes: name: et1 ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.0.3/24 + ipv4: 172.16.2.3/24 linkindex: 2 name: r2 -> [r1,s1] neighbors: - ifname: Ethernet1 - ipv4: 172.16.0.1/24 + ipv4: 172.16.1.1/24 node: r1 - ifname: Vlan1000 - ipv4: 172.16.0.2/24 + ipv4: 172.16.1.2/24 node: s1 type: lan loopback: @@ -233,7 +231,7 @@ nodes: name: '[Access VLAN red] s1 -> r1' neighbors: - ifname: Ethernet1 - ipv4: 172.16.0.1/24 + ipv4: 172.16.1.1/24 node: r1 type: lan vlan: @@ -248,23 +246,23 @@ nodes: name: '[Access VLAN red] s1 -> r2' neighbors: - ifname: Ethernet1 - ipv4: 172.16.0.3/24 + ipv4: 172.16.2.3/24 node: r2 type: lan vlan: access: red access_id: 1000 - bridge_group: 1 - ifindex: 3 + ifindex: 4 ifname: Vlan1000 - ipv4: 172.16.0.2/24 + ipv4: 172.16.1.2/24 name: VLAN red (1000) -> [r1,r2] neighbors: - ifname: Ethernet1 - ipv4: 172.16.0.1/24 + ipv4: 172.16.1.1/24 node: r1 - ifname: Ethernet1 - ipv4: 172.16.0.3/24 + ipv4: 172.16.2.3/24 node: r2 type: svi virtual_interface: true @@ -297,3 +295,5 @@ nodes: allocation: id_based ipv4: 172.16.0.0/24 provider: clab +vlans: + red: {} diff --git a/tests/topology/expected/vlan-access-node.yml b/tests/topology/expected/vlan-access-node.yml index 30e7755dd3..e25bcc2ad8 100644 --- a/tests/topology/expected/vlan-access-node.yml +++ b/tests/topology/expected/vlan-access-node.yml @@ -18,66 +18,63 @@ links: - _linkname: links[1] bridge: input_1 gateway: - ipv4: 172.16.0.1/24 + ipv4: 172.16.2.1/24 interfaces: - ifindex: 1 ifname: eth1 - ipv4: 172.16.0.3/24 + ipv4: 172.16.2.3/24 node: h1 - _vlan_mode: irb ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.0.1/24 + ipv4: 172.16.2.1/24 node: s1 vlan: access: red linkindex: 1 node_count: 2 prefix: - allocation: id_based - ipv4: 172.16.0.0/24 + ipv4: 172.16.2.0/24 type: lan - _linkname: links[2] bridge: input_2 interfaces: - ifindex: 2 ifname: GigabitEthernet0/2 - ipv4: 172.16.1.1/24 + ipv4: 172.16.3.1/24 node: s1 - _vlan_mode: irb ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.1.2/24 + ipv4: 172.16.3.2/24 node: s2 vlan: access: blue linkindex: 2 node_count: 2 prefix: - allocation: id_based - ipv4: 172.16.1.0/24 + ipv4: 172.16.3.0/24 type: lan - _linkname: links[3] bridge: input_3 gateway: - ipv4: 172.16.1.2/24 + ipv4: 172.16.4.2/24 interfaces: - _vlan_mode: irb ifindex: 2 ifname: GigabitEthernet0/2 - ipv4: 172.16.1.2/24 + ipv4: 172.16.4.2/24 node: s2 vlan: access: blue - ifindex: 1 ifname: eth1 - ipv4: 172.16.1.4/24 + ipv4: 172.16.4.4/24 node: h2 linkindex: 3 node_count: 2 prefix: - allocation: id_based - ipv4: 172.16.1.0/24 + ipv4: 172.16.4.0/24 type: lan module: - vlan @@ -92,15 +89,15 @@ nodes: interfaces: - bridge: input_1 gateway: - ipv4: 172.16.0.1/24 + ipv4: 172.16.2.1/24 ifindex: 1 ifname: eth1 - ipv4: 172.16.0.3/24 + ipv4: 172.16.2.3/24 linkindex: 1 name: h1 -> [s1] neighbors: - ifname: BVI1 - ipv4: 172.16.0.1/24 + ipv4: 172.16.2.1/24 node: s1 role: stub type: lan @@ -141,18 +138,18 @@ nodes: interfaces: - bridge: input_3 gateway: - ipv4: 172.16.1.2/24 + ipv4: 172.16.4.2/24 ifindex: 1 ifname: eth1 - ipv4: 172.16.1.4/24 + ipv4: 172.16.4.4/24 linkindex: 3 name: h2 -> [s1,s2] neighbors: - ifname: GigabitEthernet0/2 - ipv4: 172.16.1.1/24 + ipv4: 172.16.3.1/24 node: s1 - ifname: BVI1 - ipv4: 172.16.1.2/24 + ipv4: 172.16.3.2/24 node: s2 type: lan mgmt: @@ -197,8 +194,9 @@ nodes: name: '[Access VLAN red] s1 -> h1' neighbors: - ifname: eth1 - ipv4: 172.16.0.3/24 + ipv4: 172.16.2.3/24 node: h1 + parentindex: {} type: lan vlan: access: red @@ -206,26 +204,28 @@ nodes: - bridge: input_2 ifindex: 2 ifname: GigabitEthernet0/2 - ipv4: 172.16.1.1/24 + ipv4: 172.16.3.1/24 linkindex: 2 name: s1 -> [s2,h2] neighbors: - ifname: BVI1 - ipv4: 172.16.1.2/24 + ipv4: 172.16.3.2/24 node: s2 - ifname: eth1 - ipv4: 172.16.1.4/24 + ipv4: 172.16.4.4/24 node: h2 + parentindex: {} type: lan - bridge_group: 1 - ifindex: 3 + ifindex: 4 ifname: BVI1 - ipv4: 172.16.0.1/24 + ipv4: 172.16.2.1/24 name: VLAN red (1000) -> [h1] neighbors: - ifname: eth1 - ipv4: 172.16.0.3/24 + ipv4: 172.16.2.3/24 node: h1 + parentindex: {} role: stub type: svi virtual_interface: true @@ -271,8 +271,9 @@ nodes: name: '[Access VLAN blue] s2 -> s1' neighbors: - ifname: GigabitEthernet0/2 - ipv4: 172.16.1.1/24 + ipv4: 172.16.3.1/24 node: s1 + parentindex: {} type: lan vlan: access: blue @@ -284,24 +285,26 @@ nodes: name: '[Access VLAN blue] s2 -> h2' neighbors: - ifname: eth1 - ipv4: 172.16.1.4/24 + ipv4: 172.16.4.4/24 node: h2 + parentindex: {} type: lan vlan: access: blue access_id: 1001 - bridge_group: 1 - ifindex: 3 + ifindex: 4 ifname: BVI1 - ipv4: 172.16.1.2/24 + ipv4: 172.16.3.2/24 name: VLAN blue (1001) -> [s1,h2] neighbors: - ifname: GigabitEthernet0/2 - ipv4: 172.16.1.1/24 + ipv4: 172.16.3.1/24 node: s1 - ifname: eth1 - ipv4: 172.16.1.4/24 + ipv4: 172.16.4.4/24 node: h2 + parentindex: {} type: svi virtual_interface: true vlan: @@ -335,3 +338,6 @@ nodes: provider: libvirt vlan: mode: irb +vlans: + blue: {} + red: {} diff --git a/tests/topology/expected/vlan-access-single.yml b/tests/topology/expected/vlan-access-single.yml index 507b6e4117..d2df245339 100644 --- a/tests/topology/expected/vlan-access-single.yml +++ b/tests/topology/expected/vlan-access-single.yml @@ -298,7 +298,7 @@ nodes: access: red access_id: 1000 - bridge_group: 1 - ifindex: 4 + ifindex: 5 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,s2,s3,h2] @@ -402,7 +402,7 @@ nodes: access: red access_id: 1000 - bridge_group: 1 - ifindex: 3 + ifindex: 4 ifname: Vlan1000 ipv4: 172.16.0.3/24 name: VLAN red (1000) -> [h1,s1,s3,h2] @@ -491,7 +491,7 @@ nodes: access: red access_id: 1000 - bridge_group: 1 - ifindex: 2 + ifindex: 3 ifname: Vlan1000 ipv4: 172.16.0.42/24 name: VLAN red (1000) -> [h1,s1,s2,h2] diff --git a/tests/topology/expected/vlan-coverage.yml b/tests/topology/expected/vlan-coverage.yml index a8337d351c..4a56f7d11d 100644 --- a/tests/topology/expected/vlan-coverage.yml +++ b/tests/topology/expected/vlan-coverage.yml @@ -82,13 +82,12 @@ links: access: blue - ifindex: 2 ifname: eth2 - ipv4: 172.16.1.4/24 + ipv4: 172.16.2.4/24 node: h2 linkindex: 4 node_count: 2 prefix: - allocation: id_based - ipv4: 172.16.1.0/24 + ipv4: 172.16.2.0/24 type: lan - _linkname: links[5] interfaces: @@ -192,7 +191,7 @@ nodes: - bridge: input_4 ifindex: 2 ifname: eth2 - ipv4: 172.16.1.4/24 + ipv4: 172.16.2.4/24 linkindex: 4 name: h2 -> [s2] neighbors: @@ -355,7 +354,7 @@ nodes: name: '[Access VLAN blue] s2 -> h2' neighbors: - ifname: eth2 - ipv4: 172.16.1.4/24 + ipv4: 172.16.2.4/24 node: h2 type: lan vlan: @@ -397,7 +396,7 @@ nodes: name: VLAN blue (1000) -> [h2] neighbors: - ifname: eth2 - ipv4: 172.16.1.4/24 + ipv4: 172.16.2.4/24 node: h2 role: stub type: svi @@ -441,6 +440,7 @@ provider: libvirt vlan: mode: bridge vlans: + blue: {} red: host_count: 2 id: 1001 diff --git a/tests/topology/expected/vlan-vrf-lite.yml b/tests/topology/expected/vlan-vrf-lite.yml index a44ead9912..71d0d2aff3 100644 --- a/tests/topology/expected/vlan-vrf-lite.yml +++ b/tests/topology/expected/vlan-vrf-lite.yml @@ -495,11 +495,11 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: Ethernet1.1 - ipv4: 10.1.0.5/30 + ipv4: 172.16.6.1/24 name: r1 -> r2 neighbors: - ifname: Ethernet1.1 - ipv4: 10.1.0.6/30 + ipv4: 172.16.6.2/24 node: r2 vrf: blue parent_ifindex: 1 @@ -515,11 +515,11 @@ nodes: - bridge_group: 1 ifindex: 6 ifname: Ethernet1.2 - ipv4: 10.1.0.9/30 + ipv4: 172.16.7.1/24 name: r1 -> r2 neighbors: - ifname: Ethernet1.2 - ipv4: 10.1.0.10/30 + ipv4: 172.16.7.2/24 node: r2 vrf: red parent_ifindex: 1 @@ -612,11 +612,11 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: Ethernet1.1 - ipv4: 10.1.0.5/30 + ipv4: 172.16.6.1/24 name: r1 -> r2 neighbors: - ifname: Ethernet1.1 - ipv4: 10.1.0.6/30 + ipv4: 172.16.6.2/24 node: r2 vrf: blue ospf: @@ -694,11 +694,11 @@ nodes: - bridge_group: 1 ifindex: 6 ifname: Ethernet1.2 - ipv4: 10.1.0.9/30 + ipv4: 172.16.7.1/24 name: r1 -> r2 neighbors: - ifname: Ethernet1.2 - ipv4: 10.1.0.10/30 + ipv4: 172.16.7.2/24 node: r2 vrf: red ospf: @@ -779,11 +779,11 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: Ethernet1.1 - ipv4: 10.1.0.6/30 + ipv4: 172.16.6.2/24 name: r2 -> r1 neighbors: - ifname: Ethernet1.1 - ipv4: 10.1.0.5/30 + ipv4: 172.16.6.1/24 node: r1 vrf: blue parent_ifindex: 1 @@ -799,11 +799,11 @@ nodes: - bridge_group: 1 ifindex: 6 ifname: Ethernet1.2 - ipv4: 10.1.0.10/30 + ipv4: 172.16.7.2/24 name: r2 -> r1 neighbors: - ifname: Ethernet1.2 - ipv4: 10.1.0.9/30 + ipv4: 172.16.7.1/24 node: r1 vrf: red parent_ifindex: 1 @@ -819,11 +819,11 @@ nodes: - bridge_group: 2 ifindex: 7 ifname: Ethernet2.1 - ipv4: 10.1.0.13/30 + ipv4: 172.16.8.2/24 name: r2 -> r3 neighbors: - ifname: Ethernet1.1 - ipv4: 10.1.0.14/30 + ipv4: 172.16.8.3/24 node: r3 vrf: blue parent_ifindex: 2 @@ -839,11 +839,11 @@ nodes: - bridge_group: 1 ifindex: 8 ifname: Ethernet2.2 - ipv4: 10.1.0.17/30 + ipv4: 172.16.9.2/24 name: r2 -> r3 neighbors: - ifname: Ethernet1.2 - ipv4: 10.1.0.18/30 + ipv4: 172.16.9.3/24 node: r3 vrf: red parent_ifindex: 2 @@ -936,11 +936,11 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: Ethernet1.1 - ipv4: 10.1.0.6/30 + ipv4: 172.16.6.2/24 name: r2 -> r1 neighbors: - ifname: Ethernet1.1 - ipv4: 10.1.0.5/30 + ipv4: 172.16.6.1/24 node: r1 vrf: blue ospf: @@ -960,11 +960,11 @@ nodes: - bridge_group: 2 ifindex: 7 ifname: Ethernet2.1 - ipv4: 10.1.0.13/30 + ipv4: 172.16.8.2/24 name: r2 -> r3 neighbors: - ifname: Ethernet1.1 - ipv4: 10.1.0.14/30 + ipv4: 172.16.8.3/24 node: r3 vrf: blue ospf: @@ -1024,11 +1024,11 @@ nodes: - bridge_group: 1 ifindex: 6 ifname: Ethernet1.2 - ipv4: 10.1.0.10/30 + ipv4: 172.16.7.2/24 name: r2 -> r1 neighbors: - ifname: Ethernet1.2 - ipv4: 10.1.0.9/30 + ipv4: 172.16.7.1/24 node: r1 vrf: red ospf: @@ -1048,11 +1048,11 @@ nodes: - bridge_group: 1 ifindex: 8 ifname: Ethernet2.2 - ipv4: 10.1.0.17/30 + ipv4: 172.16.9.2/24 name: r2 -> r3 neighbors: - ifname: Ethernet1.2 - ipv4: 10.1.0.18/30 + ipv4: 172.16.9.3/24 node: r3 vrf: red ospf: @@ -1092,11 +1092,11 @@ nodes: - bridge_group: 1 ifindex: 2 ifname: Ethernet1.1 - ipv4: 10.1.0.14/30 + ipv4: 172.16.8.3/24 name: r3 -> r2 neighbors: - ifname: Ethernet2.1 - ipv4: 10.1.0.13/30 + ipv4: 172.16.8.2/24 node: r2 vrf: blue parent_ifindex: 1 @@ -1112,11 +1112,11 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: Ethernet1.2 - ipv4: 10.1.0.18/30 + ipv4: 172.16.9.3/24 name: r3 -> r2 neighbors: - ifname: Ethernet2.2 - ipv4: 10.1.0.17/30 + ipv4: 172.16.9.2/24 node: r2 vrf: red parent_ifindex: 1 @@ -1189,11 +1189,11 @@ nodes: - bridge_group: 1 ifindex: 2 ifname: Ethernet1.1 - ipv4: 10.1.0.14/30 + ipv4: 172.16.8.3/24 name: r3 -> r2 neighbors: - ifname: Ethernet2.1 - ipv4: 10.1.0.13/30 + ipv4: 172.16.8.2/24 node: r2 vrf: blue ospf: @@ -1233,11 +1233,11 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: Ethernet1.2 - ipv4: 10.1.0.18/30 + ipv4: 172.16.9.3/24 name: r3 -> r2 neighbors: - ifname: Ethernet2.2 - ipv4: 10.1.0.17/30 + ipv4: 172.16.9.2/24 node: r2 vrf: red ospf: diff --git a/tests/topology/expected/vlan-vrrp.yml b/tests/topology/expected/vlan-vrrp.yml index fdec239025..3860877050 100644 --- a/tests/topology/expected/vlan-vrrp.yml +++ b/tests/topology/expected/vlan-vrrp.yml @@ -313,7 +313,7 @@ nodes: vrrp: group: 1 priority: 100 - ifindex: 5 + ifindex: 7 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,s2,h2] @@ -349,7 +349,7 @@ nodes: protocol: vrrp vrrp: group: 1 - ifindex: 6 + ifindex: 8 ifname: Vlan1001 ipv4: 172.16.1.24/24 name: VLAN blue (1001) -> [s2] @@ -459,7 +459,7 @@ nodes: vrrp: group: 1 priority: 200 - ifindex: 5 + ifindex: 6 ifname: Vlan1000 ipv4: 172.16.0.3/24 name: VLAN red (1000) -> [h1,s1,h2] @@ -486,7 +486,7 @@ nodes: vrrp: group: 1 priority: 180 - ifindex: 6 + ifindex: 7 ifname: Vlan1001 ipv4: 172.16.1.3/24 name: VLAN blue (1001) -> [s1] @@ -547,6 +547,9 @@ vlans: host_count: 0 id: 1001 neighbors: + - ifname: Vlan1001 + ipv4: 172.16.1.24/24 + node: s1 - gateway: anycast: mac: 0200.cafe.00ff @@ -559,9 +562,6 @@ vlans: ifname: Vlan1001 ipv4: 172.16.1.3/24 node: s2 - - ifname: Vlan1001 - ipv4: 172.16.1.24/24 - node: s1 prefix: allocation: id_based ipv4: 172.16.1.0/24 diff --git a/tests/topology/expected/vrf-leaking-loop.yml b/tests/topology/expected/vrf-leaking-loop.yml index d11159eebf..8d6710f76e 100644 --- a/tests/topology/expected/vrf-leaking-loop.yml +++ b/tests/topology/expected/vrf-leaking-loop.yml @@ -81,11 +81,11 @@ nodes: - bridge_group: 1 ifindex: 3 ifname: eth1.1000 - ipv4: 10.1.0.1/30 + ipv4: 172.16.2.1/24 name: leaf1 -> leaf1 neighbors: - ifname: eth2.1000 - ipv4: 10.1.0.2/30 + ipv4: 172.16.2.2/24 node: leaf1 vrf: customer1 parent_ifindex: 1 @@ -101,11 +101,11 @@ nodes: - bridge_group: 1 ifindex: 4 ifname: eth2.1000 - ipv4: 10.1.0.2/30 + ipv4: 172.16.2.2/24 name: leaf1 -> leaf1 neighbors: - ifname: eth1.1000 - ipv4: 10.1.0.1/30 + ipv4: 172.16.2.1/24 node: leaf1 vrf: global parent_ifindex: 2 @@ -121,11 +121,11 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: eth1.1001 - ipv4: 10.1.0.5/30 + ipv4: 172.16.3.1/24 name: leaf1 -> leaf1 neighbors: - ifname: eth2.1001 - ipv4: 10.1.0.6/30 + ipv4: 172.16.3.2/24 node: leaf1 vrf: customer2 parent_ifindex: 1 @@ -141,11 +141,11 @@ nodes: - bridge_group: 2 ifindex: 6 ifname: eth2.1001 - ipv4: 10.1.0.6/30 + ipv4: 172.16.3.2/24 name: leaf1 -> leaf1 neighbors: - ifname: eth1.1001 - ipv4: 10.1.0.5/30 + ipv4: 172.16.3.1/24 node: leaf1 vrf: global parent_ifindex: 2 diff --git a/tests/topology/expected/vrrp-interface-granularity.yml b/tests/topology/expected/vrrp-interface-granularity.yml index b0a41fbf12..f9b8400d52 100644 --- a/tests/topology/expected/vrrp-interface-granularity.yml +++ b/tests/topology/expected/vrrp-interface-granularity.yml @@ -15,26 +15,26 @@ links: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 172.16.0.254/24 + ipv4: 10.1.0.30/27 protocol: vrrp vrrp: group: 1 interfaces: - gateway: - ipv4: 172.16.0.254/24 + ipv4: 10.1.0.30/27 ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.0.1/24 + ipv4: 10.1.0.1/27 node: r1 - gateway: false ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.0.2/24 + ipv4: 10.1.0.2/27 node: r2 linkindex: 1 node_count: 2 prefix: - ipv4: 172.16.0.0/24 + ipv4: 10.1.0.0/27 type: p2p - _linkname: links[2] gateway: @@ -42,7 +42,7 @@ links: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 172.16.1.254/24 + ipv4: 10.1.0.62/27 protocol: vrrp vrrp: group: 1 @@ -50,18 +50,18 @@ links: - gateway: false ifindex: 2 ifname: Ethernet2 - ipv4: 172.16.1.1/24 + ipv4: 10.1.0.33/27 node: r1 - gateway: - ipv4: 172.16.1.254/24 + ipv4: 10.1.0.62/27 ifindex: 2 ifname: Ethernet2 - ipv4: 172.16.1.2/24 + ipv4: 10.1.0.34/27 node: r2 linkindex: 2 node_count: 2 prefix: - ipv4: 172.16.1.0/24 + ipv4: 10.1.0.32/27 type: p2p - _linkname: links[3] gateway: @@ -69,28 +69,28 @@ links: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 172.16.2.254/24 + ipv4: 10.1.0.94/27 protocol: vrrp vrrp: group: 1 interfaces: - gateway: - ipv4: 172.16.2.254/24 + ipv4: 10.1.0.94/27 vrrp: priority: 100 ifindex: 3 ifname: Ethernet3 - ipv4: 172.16.2.1/24 + ipv4: 10.1.0.65/27 node: r1 - gateway: false ifindex: 3 ifname: Ethernet3 - ipv4: 172.16.2.2/24 + ipv4: 10.1.0.66/27 node: r2 linkindex: 3 node_count: 2 prefix: - ipv4: 172.16.2.0/24 + ipv4: 10.1.0.64/27 type: p2p module: - gateway @@ -108,24 +108,24 @@ nodes: interfaces: - gateway: id: -2 - ipv4: 172.16.0.254/24 + ipv4: 10.1.0.30/27 protocol: vrrp vrrp: group: 1 ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.0.1/24 + ipv4: 10.1.0.1/27 linkindex: 1 name: r1 -> r2 neighbors: - gateway: false ifname: Ethernet1 - ipv4: 172.16.0.2/24 + ipv4: 10.1.0.2/27 node: r2 type: p2p - ifindex: 2 ifname: Ethernet2 - ipv4: 172.16.1.1/24 + ipv4: 10.1.0.33/27 linkindex: 2 name: r1 -> r2 neighbors: @@ -134,30 +134,30 @@ nodes: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 172.16.1.254/24 + ipv4: 10.1.0.62/27 protocol: vrrp vrrp: group: 1 ifname: Ethernet2 - ipv4: 172.16.1.2/24 + ipv4: 10.1.0.34/27 node: r2 type: p2p - gateway: id: -2 - ipv4: 172.16.2.254/24 + ipv4: 10.1.0.94/27 protocol: vrrp vrrp: group: 1 priority: 100 ifindex: 3 ifname: Ethernet3 - ipv4: 172.16.2.1/24 + ipv4: 10.1.0.65/27 linkindex: 3 name: r1 -> r2 neighbors: - gateway: false ifname: Ethernet3 - ipv4: 172.16.2.2/24 + ipv4: 10.1.0.66/27 node: r2 type: p2p loopback: @@ -186,7 +186,7 @@ nodes: interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.0.2/24 + ipv4: 10.1.0.2/27 linkindex: 1 name: r2 -> r1 neighbors: @@ -195,34 +195,34 @@ nodes: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 172.16.0.254/24 + ipv4: 10.1.0.30/27 protocol: vrrp vrrp: group: 1 ifname: Ethernet1 - ipv4: 172.16.0.1/24 + ipv4: 10.1.0.1/27 node: r1 type: p2p - gateway: id: -2 - ipv4: 172.16.1.254/24 + ipv4: 10.1.0.62/27 protocol: vrrp vrrp: group: 1 ifindex: 2 ifname: Ethernet2 - ipv4: 172.16.1.2/24 + ipv4: 10.1.0.34/27 linkindex: 2 name: r2 -> r1 neighbors: - gateway: false ifname: Ethernet2 - ipv4: 172.16.1.1/24 + ipv4: 10.1.0.33/27 node: r1 type: p2p - ifindex: 3 ifname: Ethernet3 - ipv4: 172.16.2.2/24 + ipv4: 10.1.0.66/27 linkindex: 3 name: r2 -> r1 neighbors: @@ -231,13 +231,13 @@ nodes: mac: 0200.cafe.00ff unicast: true id: -2 - ipv4: 172.16.2.254/24 + ipv4: 10.1.0.94/27 protocol: vrrp vrrp: group: 1 priority: 100 ifname: Ethernet3 - ipv4: 172.16.2.1/24 + ipv4: 10.1.0.65/27 node: r1 type: p2p loopback: From 1032fcee7dcb08f2a46d6ffa1c71589482a932d4 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sat, 14 Dec 2024 08:30:34 -0600 Subject: [PATCH 11/36] No return type anymore --- netsim/modules/lag.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 7d74711dbb..dff33e8c94 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -330,8 +330,7 @@ def process_lag_link(link: Box, topology: Box) -> None: link[PEERLINK_ID_ATT] = _dataplane.get_next_id(PEERLINK_ID_SET) link.type = 'p2p' link.prefix = False # L2-only - if not create_peer_links(link,topology): # Check for errors - return + create_peer_links(link,topology) else: link.type = 'virtual_lag' # Temporary virtual link, removed in module_post_link_transform create_lag_member_links(link,topology) From c47a0df46140f4fab9c3aa4226c4134e5b300f42 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sat, 14 Dec 2024 08:45:02 -0600 Subject: [PATCH 12/36] Change in VLAN processing (delayed) alters the errors that get detected: * vlan-link-error: Now correctly identifying 'irb' as an invalid value, but hiding the mismatch in vlan.access name * vlan-trunk-attribute-error: Instead of identifying 'bgp' as being not enabled, 'bgp.as' is determined to be an invalid irb interface attribute --- tests/errors/vlan-link-error.log | 12 ++++++------ tests/errors/vlan-link-error.yml | 4 ++-- tests/errors/vlan-trunk-attribute-error.log | 11 ++++++++--- tests/errors/vlan-trunk-attribute-error.yml | 2 +- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/tests/errors/vlan-link-error.log b/tests/errors/vlan-link-error.log index b74e2df4bb..5ced1446bc 100644 --- a/tests/errors/vlan-link-error.log +++ b/tests/errors/vlan-link-error.log @@ -1,7 +1,7 @@ -IncorrectValue in vlan: VLAN wtf used in vlan.access in link links[1] is not defined -... {'_linkname': 'links[1]', 'vlan': {'access': 'wtf'}, 'interfaces': [{'node': -... 'n1'}, {'node': 'n2'}], 'linkindex': 1} -IncorrectValue in vlan: VLAN wtf used in vlan.access in node n1 on link links[7] is not defined -... {'_linkname': 'links[7]', 'interfaces': [{'vlan': {'access': 'wtf'}, 'node': -... 'n1'}, {'node': 'n2'}], 'linkindex': 7} +IncorrectValue in vlan: attribute links[2].vlan.mode has invalid value(s): irb +... valid values are: route +... use 'netlab show attributes --module vlan link' to display valid attributes +IncorrectValue in vlan: attribute links[4].n2.vlan.mode has invalid value(s): irb +... valid values are: route +... use 'netlab show attributes --module vlan' to display valid attributes Fatal error in netlab: Cannot proceed beyond this point due to errors, exiting diff --git a/tests/errors/vlan-link-error.yml b/tests/errors/vlan-link-error.yml index eb3eb4418f..55de267e86 100644 --- a/tests/errors/vlan-link-error.yml +++ b/tests/errors/vlan-link-error.yml @@ -20,7 +20,7 @@ links: - n1: n2: - vlan.mode: irb + vlan.mode: irb # Invalid, only 'route' allowed on link - n1: vlan.access: purple @@ -29,7 +29,7 @@ links: - n1: n2: - vlan.mode: irb + vlan.mode: irb # Invalid, only 'route' allowed on interface - n1: n2: diff --git a/tests/errors/vlan-trunk-attribute-error.log b/tests/errors/vlan-trunk-attribute-error.log index 61a937604c..7c0ed90dc6 100644 --- a/tests/errors/vlan-trunk-attribute-error.log +++ b/tests/errors/vlan-trunk-attribute-error.log @@ -1,4 +1,9 @@ -IncorrectAttr in links: links[1].blue uses an attribute from module bgp which is not enabled in topology -IncorrectAttr in links: links[1].blue.n1 uses an attribute from module bgp which is not enabled in nodes.n1 -IncorrectAttr in links: links[1].blue.n2 uses an attribute from module bgp which is not enabled in nodes.n2 +IncorrectValue in vlan: You must use 'nodes.n1.vlans.blue' dictionary to set VLAN interface attributes, +... Link links[1].blue, node n1, vlan blue +... Interface VLAN forwarding mode: irb, unexpected attributes bgp +... {'bgp': {'as': 65000}, 'node': 'n1', '_selfloop_ifindex': 0, 'vlan': {'access': 'blue'}, '_vlan_mode': 'irb'} +IncorrectValue in vlan: You must use 'nodes.n2.vlans.blue' dictionary to set VLAN interface attributes, +... Link links[1].blue, node n2, vlan blue +... Interface VLAN forwarding mode: irb, unexpected attributes bgp +... {'bgp': {'as': 65000}, 'node': 'n2', '_selfloop_ifindex': 1, 'vlan': {'access': 'blue'}, '_vlan_mode': 'irb'} Fatal error in netlab: Cannot proceed beyond this point due to errors, exiting diff --git a/tests/errors/vlan-trunk-attribute-error.yml b/tests/errors/vlan-trunk-attribute-error.yml index 5b0af5115f..481f3fb6a0 100644 --- a/tests/errors/vlan-trunk-attribute-error.yml +++ b/tests/errors/vlan-trunk-attribute-error.yml @@ -13,4 +13,4 @@ links: vlan.trunk: red: blue: - bgp.as: 65000 + bgp.as: 65000 # 2 issues here: bgp is not an enabled module, and "bgp.as" is not a valid interface attribute for irb vlans From 3341a5eb1bdfa0896616129af0d57c50376e3bad Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sat, 14 Dec 2024 09:29:03 -0600 Subject: [PATCH 13/36] Split error test cases, as they now hide each other --- netsim/modules/vlan.py | 52 ++++++------------- netsim/modules/vlan.yml | 6 +-- tests/errors/vlan-link-error-access-name.log | 9 ++++ ...or.yml => vlan-link-error-access-name.yml} | 8 --- tests/errors/vlan-link-error-vlan-mode.log | 7 +++ tests/errors/vlan-link-error-vlan-mode.yml | 18 +++++++ tests/errors/vlan-trunk-attribute-error.log | 9 ---- 7 files changed, 52 insertions(+), 57 deletions(-) create mode 100644 tests/errors/vlan-link-error-access-name.log rename tests/errors/{vlan-link-error.yml => vlan-link-error-access-name.yml} (68%) create mode 100644 tests/errors/vlan-link-error-vlan-mode.log create mode 100644 tests/errors/vlan-link-error-vlan-mode.yml diff --git a/netsim/modules/vlan.py b/netsim/modules/vlan.py index d541f1f110..95ebfee7e5 100644 --- a/netsim/modules/vlan.py +++ b/netsim/modules/vlan.py @@ -518,7 +518,7 @@ def get_vlan_interface_mode(intf: Box) -> typing.Optional[str]: if not vlan: return None - raise log.ErrorAbort('get_vlan_interface_mode called on an interface witout _vlan_mode') + raise log.ErrorAbort(f'get_vlan_interface_mode called on an interface without _vlan_mode: {intf}') """ set_link_vlan_prefix: copy link attributes from VLAN for access/native VLAN links @@ -788,8 +788,7 @@ def create_svi_interfaces(node: Box, topology: Box) -> dict: # VLAN attributes not copied into VLAN interface: we take the global defaults and remove # mode attribute from that list as it's needed to set interface VLAN mode # - svi_skipattr = [ k for k in list(topology.defaults.vlan.attributes.vlan_no_propagate or []) if k != "mode" ] + \ - list(topology.defaults.vlan.attributes.vlan_svi_no_propagate) + svi_skipattr = [ k for k in list(topology.defaults.vlan.attributes.vlan_no_propagate or []) if k != "mode" ] iflist_len = len(node.interfaces) for ifidx in range(0,iflist_len): @@ -1304,13 +1303,16 @@ def node_pre_transform(self, node: Box, topology: Box) -> None: validate_vlan_attributes(node,topology) + def module_pre_link_transform(self, topology: Box) -> None: + create_loopback_vlan_links(topology) + # # JvB: Needed to delay this processing with the introduction of the 'lag' module: # # * lag module cannot create link.interfaces of type 'lag' until after attribute validation -> done in module_pre_link_transform # * this method processes link.interfaces -> must come after module_pre_link_transform, and cannot be in link_pre_transform # - def _link_pre_link_transform(self, link: Box, topology: Box) -> None: + def link_pre_link_transform(self, link: Box, topology: Box) -> None: if link.get('type','') == 'vlan_member': # Skip VLAN member links, we've been there... return @@ -1345,13 +1347,13 @@ def _link_pre_link_transform(self, link: Box, topology: Box) -> None: svi_skipattr = list(topology.defaults.vlan.attributes.vlan_no_propagate) or [] # VLAN attributes not copied into link data link_vlan = get_link_access_vlan(v_attr) routed_vlan = False - if not link_vlan is None: + if link_vlan is not None: set_access_vlan_interface_mode(link,link_vlan,topology) routed_vlan = routed_access_vlan(link,topology,link_vlan) vlan_data = topology.get(f'vlans.{link_vlan}',None) # Get global VLAN data if isinstance(vlan_data,Box): vlan_data = data.get_box({ k:v for (k,v) in vlan_data.items() \ - if k not in svi_skipattr }) # Remove VLAN-specific data + if k not in svi_skipattr }) # Remove VLAN-specific data fix_vlan_mode_attribute(vlan_data) # ... and turn mode into vlan.mode for (k,v) in vlan_data.items(): # Now add the rest to link data if not k in link: # ... have to do the deep merge manually as @@ -1367,42 +1369,22 @@ def _link_pre_link_transform(self, link: Box, topology: Box) -> None: else: set_link_vlan_prefix(link,v_attr,topology) - # Disable IP addressing on access VLAN ports on bridged VLANs + # Disable IP addressing on access VLAN ports on bridged VLANs, copy IP attributes otherwise if link_vlan: # Are we dealing with an access VLAN? for intf in link.interfaces: # Iterate over all interfaces attached to the link + check_link_interface_attributes(link,intf,topology) # Check for non-vlan attributes that would get ignored intf_node = topology.nodes[intf.node] if 'vlan' in intf_node.get('module',[]): # ... is the node a VLAN-aware node? if get_vlan_interface_mode(intf) == 'bridge': # ... that is in bridge mode on the current access VLAN? intf.ipv4 = False # ... if so, disable addressing on this interface intf.ipv6 = False - - def module_pre_link_transform(self, topology: Box) -> None: - create_loopback_vlan_links(topology) - - """ - We have to copy a few attributes from node VLAN data into access link interface data, for example - the node IPv4/IPv6 address (to support static addressing) and "gateway" attribute to enable - selective VLAN gateway module activation - - This operation needs to be done when the link data structures have already been transformed into - the canonical "interfaces" list format, so we cannot do it any sooner than this point. - - We also have to check that the interfaces in bridge/irb mode do not have any non-VLAN parameters - as those parameters would get ignored. - """ - def link_pre_link_transform(self, link: Box, topology: Box) -> None: - self._link_pre_link_transform(link,topology) # JvB: TODO - merge these 2 functions - for intf in link.interfaces: - vname = intf.get('vlan.access',None) - if not vname: - continue - check_link_interface_attributes(link,intf,topology) - if vname not in topology.nodes[intf.node].get('vlans',{}): - continue - vdata = topology.nodes[intf.node].vlans[vname] - for attr in topology.defaults.vlan.attributes.copy_vlan_to_intf: - if attr in vdata: - intf[attr] = vdata[attr] + else: + if link_vlan not in intf_node.get('vlans',{}): + continue + vdata = intf_node.vlans[link_vlan] + for attr in topology.defaults.vlan.attributes.copy_vlan_to_intf: # else copy IP attributes + if attr in vdata: + intf[attr] = vdata[attr] """ We're almost done, but there's still some hard work to do: diff --git a/netsim/modules/vlan.yml b/netsim/modules/vlan.yml index 7608a8bea1..04e82b3a09 100644 --- a/netsim/modules/vlan.yml +++ b/netsim/modules/vlan.yml @@ -32,16 +32,12 @@ attributes: stp: lag: - # Copy these attributes from node VLAN data into interface-on-link data + # Copy these L3 attributes from node VLAN data into interface-on-link data copy_vlan_to_intf: ipv4: ipv6: gateway: - # - # Do not copy these VLAN attributes into SVI interfaces - #vlan_svi_no_propagate: - # gateway: # # Do not copy these attributes into SVI interfaces, and don't pop() them phy_ifattr: diff --git a/tests/errors/vlan-link-error-access-name.log b/tests/errors/vlan-link-error-access-name.log new file mode 100644 index 0000000000..d5b8a5d083 --- /dev/null +++ b/tests/errors/vlan-link-error-access-name.log @@ -0,0 +1,9 @@ +IncorrectValue in vlan: VLAN wtf used in vlan.access in link links[1] is not defined +... {'_linkname': 'links[1]', 'vlan': {'access': 'wtf'}, 'interfaces': [{'node': +... 'n1'}, {'node': 'n2'}], 'linkindex': 1} +IncorrectValue in vlan: Cannot use more than one global access VLAN on link links[2] +... Found purple,red +IncorrectValue in vlan: VLAN wtf used in vlan.access in node n1 on link links[5] is not defined +... {'_linkname': 'links[5]', 'interfaces': [{'vlan': {'access': 'wtf'}, 'node': +... 'n1'}, {'node': 'n2'}], 'linkindex': 5} +Fatal error in netlab: Cannot proceed beyond this point due to errors, exiting diff --git a/tests/errors/vlan-link-error.yml b/tests/errors/vlan-link-error-access-name.yml similarity index 68% rename from tests/errors/vlan-link-error.yml rename to tests/errors/vlan-link-error-access-name.yml index 55de267e86..597100c546 100644 --- a/tests/errors/vlan-link-error.yml +++ b/tests/errors/vlan-link-error-access-name.yml @@ -18,19 +18,11 @@ links: n2: vlan.access: wtf -- n1: - n2: - vlan.mode: irb # Invalid, only 'route' allowed on link - - n1: vlan.access: purple n2: vlan.access: red -- n1: - n2: - vlan.mode: irb # Invalid, only 'route' allowed on interface - - n1: n2: diff --git a/tests/errors/vlan-link-error-vlan-mode.log b/tests/errors/vlan-link-error-vlan-mode.log new file mode 100644 index 0000000000..683413cbe2 --- /dev/null +++ b/tests/errors/vlan-link-error-vlan-mode.log @@ -0,0 +1,7 @@ +IncorrectValue in vlan: attribute links[1].vlan.mode has invalid value(s): irb +... valid values are: route +... use 'netlab show attributes --module vlan link' to display valid attributes +IncorrectValue in vlan: attribute links[2].n2.vlan.mode has invalid value(s): irb +... valid values are: route +... use 'netlab show attributes --module vlan' to display valid attributes +Fatal error in netlab: Cannot proceed beyond this point due to errors, exiting diff --git a/tests/errors/vlan-link-error-vlan-mode.yml b/tests/errors/vlan-link-error-vlan-mode.yml new file mode 100644 index 0000000000..da9ddbae33 --- /dev/null +++ b/tests/errors/vlan-link-error-vlan-mode.yml @@ -0,0 +1,18 @@ +module: [ vlan ] +defaults.device: iosv + +vlans: + red: + +nodes: + n1: + n2: + +links: +- n1: + n2: + vlan.mode: irb # Invalid, only 'route' allowed on link + +- n1: + n2: + vlan.mode: irb # Invalid, only 'route' allowed on interface diff --git a/tests/errors/vlan-trunk-attribute-error.log b/tests/errors/vlan-trunk-attribute-error.log index 7c0ed90dc6..e69de29bb2 100644 --- a/tests/errors/vlan-trunk-attribute-error.log +++ b/tests/errors/vlan-trunk-attribute-error.log @@ -1,9 +0,0 @@ -IncorrectValue in vlan: You must use 'nodes.n1.vlans.blue' dictionary to set VLAN interface attributes, -... Link links[1].blue, node n1, vlan blue -... Interface VLAN forwarding mode: irb, unexpected attributes bgp -... {'bgp': {'as': 65000}, 'node': 'n1', '_selfloop_ifindex': 0, 'vlan': {'access': 'blue'}, '_vlan_mode': 'irb'} -IncorrectValue in vlan: You must use 'nodes.n2.vlans.blue' dictionary to set VLAN interface attributes, -... Link links[1].blue, node n2, vlan blue -... Interface VLAN forwarding mode: irb, unexpected attributes bgp -... {'bgp': {'as': 65000}, 'node': 'n2', '_selfloop_ifindex': 1, 'vlan': {'access': 'blue'}, '_vlan_mode': 'irb'} -Fatal error in netlab: Cannot proceed beyond this point due to errors, exiting From 7d30794fedb9272fe35e16bb5f0735da6db0e2b8 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sat, 14 Dec 2024 10:35:29 -0600 Subject: [PATCH 14/36] Deep merge when copying gateway attribute --- netsim/modules/vlan.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/netsim/modules/vlan.py b/netsim/modules/vlan.py index 95ebfee7e5..e5b6b9c474 100644 --- a/netsim/modules/vlan.py +++ b/netsim/modules/vlan.py @@ -1384,7 +1384,10 @@ def link_pre_link_transform(self, link: Box, topology: Box) -> None: vdata = intf_node.vlans[link_vlan] for attr in topology.defaults.vlan.attributes.copy_vlan_to_intf: # else copy IP attributes if attr in vdata: - intf[attr] = vdata[attr] + if not attr in intf: # ... have to do the deep merge manually as + intf[attr] = vdata[attr] # ... we cannot just replace interface data structure + elif isinstance(vdata[attr],Box) and isinstance(intf[attr],Box): + intf[attr] = vdata[attr] + intf[attr] # Sample case: gateway attribute (only one right now) """ We're almost done, but there's still some hard work to do: From 92f6b6016238dafcaf0f6a35e72dd2a398ee023b Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 07:58:42 -0600 Subject: [PATCH 15/36] Undo changes to vlan module --- netsim/modules/vlan.py | 60 +++++++++++++++++++++++------------------ netsim/modules/vlan.yml | 6 ++++- 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/netsim/modules/vlan.py b/netsim/modules/vlan.py index e5b6b9c474..973d2d77da 100644 --- a/netsim/modules/vlan.py +++ b/netsim/modules/vlan.py @@ -518,7 +518,7 @@ def get_vlan_interface_mode(intf: Box) -> typing.Optional[str]: if not vlan: return None - raise log.ErrorAbort(f'get_vlan_interface_mode called on an interface without _vlan_mode: {intf}') + raise log.ErrorAbort('get_vlan_interface_mode called on an interface witout _vlan_mode') """ set_link_vlan_prefix: copy link attributes from VLAN for access/native VLAN links @@ -788,7 +788,8 @@ def create_svi_interfaces(node: Box, topology: Box) -> dict: # VLAN attributes not copied into VLAN interface: we take the global defaults and remove # mode attribute from that list as it's needed to set interface VLAN mode # - svi_skipattr = [ k for k in list(topology.defaults.vlan.attributes.vlan_no_propagate or []) if k != "mode" ] + svi_skipattr = [ k for k in list(topology.defaults.vlan.attributes.vlan_no_propagate or []) if k != "mode" ] + \ + list(topology.defaults.vlan.attributes.vlan_svi_no_propagate) iflist_len = len(node.interfaces) for ifidx in range(0,iflist_len): @@ -1303,16 +1304,7 @@ def node_pre_transform(self, node: Box, topology: Box) -> None: validate_vlan_attributes(node,topology) - def module_pre_link_transform(self, topology: Box) -> None: - create_loopback_vlan_links(topology) - - # - # JvB: Needed to delay this processing with the introduction of the 'lag' module: - # - # * lag module cannot create link.interfaces of type 'lag' until after attribute validation -> done in module_pre_link_transform - # * this method processes link.interfaces -> must come after module_pre_link_transform, and cannot be in link_pre_transform - # - def link_pre_link_transform(self, link: Box, topology: Box) -> None: + def link_pre_transform(self, link: Box, topology: Box) -> None: if link.get('type','') == 'vlan_member': # Skip VLAN member links, we've been there... return @@ -1347,13 +1339,13 @@ def link_pre_link_transform(self, link: Box, topology: Box) -> None: svi_skipattr = list(topology.defaults.vlan.attributes.vlan_no_propagate) or [] # VLAN attributes not copied into link data link_vlan = get_link_access_vlan(v_attr) routed_vlan = False - if link_vlan is not None: + if not link_vlan is None: set_access_vlan_interface_mode(link,link_vlan,topology) routed_vlan = routed_access_vlan(link,topology,link_vlan) vlan_data = topology.get(f'vlans.{link_vlan}',None) # Get global VLAN data if isinstance(vlan_data,Box): vlan_data = data.get_box({ k:v for (k,v) in vlan_data.items() \ - if k not in svi_skipattr }) # Remove VLAN-specific data + if k not in svi_skipattr }) # Remove VLAN-specific data fix_vlan_mode_attribute(vlan_data) # ... and turn mode into vlan.mode for (k,v) in vlan_data.items(): # Now add the rest to link data if not k in link: # ... have to do the deep merge manually as @@ -1369,25 +1361,41 @@ def link_pre_link_transform(self, link: Box, topology: Box) -> None: else: set_link_vlan_prefix(link,v_attr,topology) - # Disable IP addressing on access VLAN ports on bridged VLANs, copy IP attributes otherwise + # Disable IP addressing on access VLAN ports on bridged VLANs if link_vlan: # Are we dealing with an access VLAN? for intf in link.interfaces: # Iterate over all interfaces attached to the link - check_link_interface_attributes(link,intf,topology) # Check for non-vlan attributes that would get ignored intf_node = topology.nodes[intf.node] if 'vlan' in intf_node.get('module',[]): # ... is the node a VLAN-aware node? if get_vlan_interface_mode(intf) == 'bridge': # ... that is in bridge mode on the current access VLAN? intf.ipv4 = False # ... if so, disable addressing on this interface intf.ipv6 = False - else: - if link_vlan not in intf_node.get('vlans',{}): - continue - vdata = intf_node.vlans[link_vlan] - for attr in topology.defaults.vlan.attributes.copy_vlan_to_intf: # else copy IP attributes - if attr in vdata: - if not attr in intf: # ... have to do the deep merge manually as - intf[attr] = vdata[attr] # ... we cannot just replace interface data structure - elif isinstance(vdata[attr],Box) and isinstance(intf[attr],Box): - intf[attr] = vdata[attr] + intf[attr] # Sample case: gateway attribute (only one right now) + + def module_pre_link_transform(self, topology: Box) -> None: + create_loopback_vlan_links(topology) + + """ + We have to copy a few attributes from node VLAN data into access link interface data, for example + the node IPv4/IPv6 address (to support static addressing) and "gateway" attribute to enable + selective VLAN gateway module activation + + This operation needs to be done when the link data structures have already been transformed into + the canonical "interfaces" list format, so we cannot do it any sooner than this point. + + We also have to check that the interfaces in bridge/irb mode do not have any non-VLAN parameters + as those parameters would get ignored. + """ + def link_pre_link_transform(self, link: Box, topology: Box) -> None: + for intf in link.interfaces: + vname = intf.get('vlan.access',None) + if not vname: + continue + check_link_interface_attributes(link,intf,topology) + if vname not in topology.nodes[intf.node].get('vlans',{}): + continue + vdata = topology.nodes[intf.node].vlans[vname] + for attr in topology.defaults.vlan.attributes.copy_vlan_to_intf: + if attr in vdata: + intf[attr] = vdata[attr] """ We're almost done, but there's still some hard work to do: diff --git a/netsim/modules/vlan.yml b/netsim/modules/vlan.yml index 04e82b3a09..7608a8bea1 100644 --- a/netsim/modules/vlan.yml +++ b/netsim/modules/vlan.yml @@ -32,12 +32,16 @@ attributes: stp: lag: - # Copy these L3 attributes from node VLAN data into interface-on-link data + # Copy these attributes from node VLAN data into interface-on-link data copy_vlan_to_intf: ipv4: ipv6: gateway: + # + # Do not copy these VLAN attributes into SVI interfaces + #vlan_svi_no_propagate: + # gateway: # # Do not copy these attributes into SVI interfaces, and don't pop() them phy_ifattr: From 8ddc042482d1a80ab4c1cafadc7398d8de62fb54 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 08:31:28 -0600 Subject: [PATCH 16/36] Refactored to temporarily rename interface.type to '_type' to bypass validation --- netsim/modules/lag.py | 54 ++-- netsim/modules/lag.yml | 7 +- tests/topology/expected/bgp-vrf-local-as.yml | 78 ++--- tests/topology/expected/dhcp-vlan.yml | 89 +++++- .../expected/evpn-asymmetric-irb-ospf.yml | 24 +- tests/topology/expected/group-data-vlan.yml | 120 ++++---- tests/topology/expected/lag-l2.yml | 18 ++ .../topology/expected/lag-l3-access-vlan.yml | 269 ++++++++++-------- tests/topology/expected/lag-l3-vlan-trunk.yml | 8 + tests/topology/expected/lag-l3.yml | 8 + tests/topology/expected/lag-mlag-m_to_m.yml | 72 +++-- tests/topology/expected/lag-mlag.yml | 92 ++++-- .../expected/node.clone-plugin-lag.yml | 104 +++++-- tests/topology/expected/vlan-access-links.yml | 2 +- .../expected/vlan-access-neighbors.yml | 44 +-- tests/topology/expected/vlan-access-node.yml | 74 +++-- .../topology/expected/vlan-access-single.yml | 6 +- tests/topology/expected/vlan-coverage.yml | 12 +- tests/topology/expected/vlan-vrrp.yml | 14 +- tests/topology/input/lag-l2.yml | 2 +- 20 files changed, 661 insertions(+), 436 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index dff33e8c94..cc631aef68 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -38,11 +38,11 @@ def populate_peerlink_id_set(topology: Box) -> None: create_l2_link_base - Create a L2 P2P link as base for member links """ def create_l2_link_base(l: Box, topology: Box) -> Box: - l2_ifdata = data.get_box({ 'type': "p2p", 'prefix': False, 'lag': {} }) # Construct an L2 member link + l2_linkdata = data.get_box({ 'type': "p2p", 'prefix': False, 'lag': {} }) # Construct an L2 member link for a in list(topology.defaults.lag.attributes.lag_l2_ifattr): if a in l: - l2_ifdata[a] = l[a] - return l2_ifdata + l2_linkdata[a] = l[a] + return l2_linkdata """ check_lag_config - check if the given node supports lag and has the module enabled @@ -170,22 +170,23 @@ def no_peer(i: Box) -> Box: """ create_lag_member_links -- expand lag.members for link l and create physical p2p links """ -def create_lag_member_links(l: Box, topology: Box) -> None: +def create_lag_member_links(l: Box, topology: Box) -> bool: members = normalized_members(l,topology) # Build list of normalized member links if not members: - return + return False l.lag.members = members # Update for create_lag_interfaces - l2_ifdata = create_l2_link_base(l,topology) - keep_attr = list(topology.defaults.lag.attributes.lag_member_ifattr) + l2_linkdata = create_l2_link_base(l,topology) + keep_attr = list(topology.defaults.lag.attributes.lag_member_linkattr) for member in members: - member = l2_ifdata + member # Copy L2 data into member link + member = l2_linkdata + member # Copy L2 data into member link member = data.get_box({ k:v for k,v in member.items() if k in keep_attr }) # Filter out things not needed member.linkindex = len(topology.links)+1 member.lag._parentindex = l.linkindex # Keep track of parent, updated to lag.ifindex below if log.debug_active('lag'): print(f'LAG create_lag_member_links -> adding link {member}') topology.links.append(member) + return True """ create_lag_interfaces -- create interfaces of type "lag" for each link of type virtual_lag @@ -237,7 +238,7 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple link_atts = { k:v for k,v in l.items() if k in copy_link_to_intf } l.interfaces = [] # Build interface list for lag link for node in node_count: - ifatts = data.get_box({ 'node': node, 'type': 'lag', 'lag': {} }) + ifatts = data.get_box({ 'node': node, '_type': 'lag', 'lag': {} }) # use '_type', not 'type' (!) for m in members: # Collect attributes from member links if node in [ i.node for i in m.interfaces ]:# ...in which is involved ifatts = ifatts + { k:v for k,v in m.items() if k not in skip_atts } @@ -283,10 +284,10 @@ def check_same_pair(member: Box) -> bool: return True members = normalized_members(l,topology,peerlink=True) - l2_ifdata = create_l2_link_base(l,topology) + l2_linkdata = create_l2_link_base(l,topology) for idx,member in enumerate(members): - member = l2_ifdata + member # Copy L2 data into member link + member = l2_linkdata + member # Copy L2 data into member link if idx==0: # For the first member, use the existing link topology.links[l.linkindex-1] = l + member # Update topology (l is a copy) first_pair = [ i.node for i in member.interfaces ] @@ -314,8 +315,9 @@ def check_same_pair(member: Box) -> bool: """ process_lag_link - process link with 'lag' attribute to create links for lag.members + Returns True iff a virtual_lag was created """ -def process_lag_link(link: Box, topology: Box) -> None: +def process_lag_link(link: Box, topology: Box) -> bool: if not 'members' in link.lag: log.error(f'must define "lag.members" on LAG link {link._linkname}', category=log.IncorrectAttr, @@ -331,9 +333,10 @@ def process_lag_link(link: Box, topology: Box) -> None: link.type = 'p2p' link.prefix = False # L2-only create_peer_links(link,topology) + return False else: link.type = 'virtual_lag' # Temporary virtual link, removed in module_post_link_transform - create_lag_member_links(link,topology) + return create_lag_member_links(link,topology) # # populate_mlag_peer - Lookup the IPv4 loopback address for the mlag peer, and derive a virtual MAC to use @@ -383,7 +386,10 @@ def populate_mlag_peer(node: Box, intf: Box, topology: Box) -> None: class LAG(_Module): """ - module_pre_transform -- Analyze any user provided lag.ifindex values and peerlink ids, convert lag.members to links + module_pre_transform -- Analyze any user provided lag.ifindex values and peerlink ids, + convert lag.members to links and create 'lag' type interfaces + + Note: link.interfaces must be populated before vlan.link_pre_transform is called """ def module_pre_transform(self, topology: Box) -> None: if log.debug_active('lag'): @@ -397,19 +403,21 @@ def module_pre_transform(self, topology: Box) -> None: for link in list(topology.links): # Make a copy, may get modified if 'lag' in link: - process_lag_link(link,topology) + if process_lag_link(link,topology): + create_lag_interfaces(link,topology) # Create lag interfaces """ - module_pre_link_transform - Create 'lag' type interfaces for every temporary 'virtual_lag' link + link_pre_link_transform - rename interface '_type' to 'type' (after validation) - This has to be done after interface attribute validation, and before vlan link_pre_link_transform is called + The interface 'type' attribute is added internally, and cannot be defined in the data model. + It should have been called '_type' to begin with, but that ship has sailed a while ago. This module + implements a workaround by calling it '_type' during validation (allowing it to be skipped), and then + renaming it to 'type' here """ - def module_pre_link_transform(self, topology: Box) -> None: - if log.debug_active('lag'): - print(f'LAG module_pre_link_transform: Create "lag" interfaces for every "virtual_lag"') - for link in list(topology.links): # Make a copy, links may get added - if link.get('type',None)=='virtual_lag': - create_lag_interfaces(link,topology) # Create lag interfaces + def link_pre_link_transform(self, link: Box, topology: Box) -> None: + for intf in link.interfaces: + if intf.get('_type',None)=='lag': + intf.type = intf.pop('_type') """ module_post_link_transform - remove temporary 'virtual_lag' links diff --git a/netsim/modules/lag.yml b/netsim/modules/lag.yml index 0a54a1ecc6..07f3252fff 100644 --- a/netsim/modules/lag.yml +++ b/netsim/modules/lag.yml @@ -44,13 +44,13 @@ attributes: bandwidth: # Keep only these attributes on member links - lag_member_ifattr: + lag_member_linkattr: mtu: bandwidth: - type: - prefix: _linkname: interfaces: + prefix: + type: # Don't copy these attributes to lag interfaces lag_no_propagate: @@ -61,5 +61,4 @@ attributes: # Copy these attributes from lag links into lag interface-on-link data (if not existing) copy_link_to_intf: gateway: - prefix: pool: diff --git a/tests/topology/expected/bgp-vrf-local-as.yml b/tests/topology/expected/bgp-vrf-local-as.yml index c4a6cfd6fc..f1b681b38e 100644 --- a/tests/topology/expected/bgp-vrf-local-as.yml +++ b/tests/topology/expected/bgp-vrf-local-as.yml @@ -25,7 +25,6 @@ links: interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.1/30 node: r1 vlan: trunk: @@ -33,7 +32,6 @@ links: red: {} - ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.2/30 node: r2 vlan: trunk: @@ -41,8 +39,7 @@ links: red: {} linkindex: 1 node_count: 2 - prefix: - ipv4: 10.1.0.0/30 + prefix: {} role: external type: p2p vlan: @@ -53,7 +50,6 @@ links: interfaces: - ifindex: 2 ifname: Ethernet2 - ipv4: 10.1.0.5/30 node: r2 vlan: trunk: @@ -61,7 +57,6 @@ links: red: {} - ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.6/30 node: r3 vlan: trunk: @@ -69,8 +64,7 @@ links: red: {} linkindex: 2 node_count: 2 - prefix: - ipv4: 10.1.0.4/30 + prefix: {} role: external type: p2p vlan: @@ -84,7 +78,7 @@ links: local_as: 65001 ifindex: 3 ifname: Ethernet3 - ipv4: 10.1.0.9/30 + ipv4: 10.1.0.1/30 node: r2 vlan: access: vrf-leak @@ -95,7 +89,7 @@ links: local_as: 65002 ifindex: 4 ifname: Ethernet4 - ipv4: 10.1.0.10/30 + ipv4: 10.1.0.2/30 node: r2 vlan: access: vrf-leak @@ -104,7 +98,7 @@ links: linkindex: 3 node_count: 2 prefix: - ipv4: 10.1.0.8/30 + ipv4: 10.1.0.0/30 type: p2p vlan: mode: route @@ -139,14 +133,7 @@ nodes: - large - extended ipv4: true - neighbors: - - activate: - ipv4: true - as: 65000 - ifindex: 1 - ipv4: 10.1.0.2 - name: r2 - type: ebgp + neighbors: [] next_hop_self: true router_id: 10.0.0.1 box: arista/veos @@ -155,12 +142,10 @@ nodes: interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.1/30 linkindex: 1 name: r1 -> r2 neighbors: - ifname: Ethernet1 - ipv4: 10.1.0.2/30 node: r2 role: external subif_index: 2 @@ -177,6 +162,7 @@ nodes: vrf: blue parent_ifindex: 1 parent_ifname: Ethernet1 + role: external type: vlan_member virtual_interface: true vlan: @@ -197,6 +183,7 @@ nodes: vrf: red parent_ifindex: 1 parent_ifname: Ethernet1 + role: external type: vlan_member virtual_interface: true vlan: @@ -308,21 +295,7 @@ nodes: - large - extended ipv4: true - neighbors: - - activate: - ipv4: true - as: 65100 - ifindex: 1 - ipv4: 10.1.0.1 - name: r1 - type: ebgp - - activate: - ipv4: true - as: 65101 - ifindex: 2 - ipv4: 10.1.0.6 - name: r3 - type: ebgp + neighbors: [] next_hop_self: true router_id: 10.0.0.2 box: arista/veos @@ -331,24 +304,20 @@ nodes: interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.2/30 linkindex: 1 name: r2 -> r1 neighbors: - ifname: Ethernet1 - ipv4: 10.1.0.1/30 node: r1 role: external subif_index: 2 type: p2p - ifindex: 2 ifname: Ethernet2 - ipv4: 10.1.0.5/30 linkindex: 2 name: r2 -> r3 neighbors: - ifname: Ethernet1 - ipv4: 10.1.0.6/30 node: r3 role: external subif_index: 2 @@ -358,14 +327,14 @@ nodes: bridge_group: 1 ifindex: 3 ifname: Ethernet3 - ipv4: 10.1.0.9/30 + ipv4: 10.1.0.1/30 linkindex: 3 name: r2 -> r2 neighbors: - bgp: local_as: 65002 ifname: Ethernet4 - ipv4: 10.1.0.10/30 + ipv4: 10.1.0.2/30 node: r2 vrf: blue type: p2p @@ -377,14 +346,14 @@ nodes: bridge_group: 1 ifindex: 4 ifname: Ethernet4 - ipv4: 10.1.0.10/30 + ipv4: 10.1.0.2/30 linkindex: 3 name: r2 -> r2 neighbors: - bgp: local_as: 65001 ifname: Ethernet3 - ipv4: 10.1.0.9/30 + ipv4: 10.1.0.1/30 node: r2 vrf: red type: p2p @@ -403,6 +372,7 @@ nodes: vrf: blue parent_ifindex: 1 parent_ifname: Ethernet1 + role: external type: vlan_member virtual_interface: true vlan: @@ -423,6 +393,7 @@ nodes: vrf: red parent_ifindex: 1 parent_ifname: Ethernet1 + role: external type: vlan_member virtual_interface: true vlan: @@ -443,6 +414,7 @@ nodes: vrf: blue parent_ifindex: 2 parent_ifname: Ethernet2 + role: external type: vlan_member virtual_interface: true vlan: @@ -463,6 +435,7 @@ nodes: vrf: red parent_ifindex: 2 parent_ifname: Ethernet2 + role: external type: vlan_member virtual_interface: true vlan: @@ -526,7 +499,7 @@ nodes: neighbors: - as: 65001 ifindex: 4 - ipv4: 10.1.0.9 + ipv4: 10.1.0.1 local_as: 65002 name: r2 type: ebgp @@ -558,7 +531,7 @@ nodes: neighbors: - as: 65002 ifindex: 3 - ipv4: 10.1.0.10 + ipv4: 10.1.0.2 local_as: 65001 name: r2 type: ebgp @@ -605,14 +578,7 @@ nodes: - large - extended ipv4: true - neighbors: - - activate: - ipv4: true - as: 65000 - ifindex: 1 - ipv4: 10.1.0.5 - name: r2 - type: ebgp + neighbors: [] next_hop_self: true router_id: 10.0.0.3 box: arista/veos @@ -621,12 +587,10 @@ nodes: interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 10.1.0.6/30 linkindex: 2 name: r3 -> r2 neighbors: - ifname: Ethernet2 - ipv4: 10.1.0.5/30 node: r2 role: external subif_index: 2 @@ -643,6 +607,7 @@ nodes: vrf: blue parent_ifindex: 1 parent_ifname: Ethernet1 + role: external type: vlan_member virtual_interface: true vlan: @@ -663,6 +628,7 @@ nodes: vrf: red parent_ifindex: 1 parent_ifname: Ethernet1 + role: external type: vlan_member virtual_interface: true vlan: diff --git a/tests/topology/expected/dhcp-vlan.yml b/tests/topology/expected/dhcp-vlan.yml index 229e4391f0..d74accbb03 100644 --- a/tests/topology/expected/dhcp-vlan.yml +++ b/tests/topology/expected/dhcp-vlan.yml @@ -1,5 +1,13 @@ dhcp: pools: + - clean_name: vlan_red + excluded: + ipv4: + - 172.16.0.2 + gateway: + ipv4: 172.16.0.2 + ipv4: 172.16.0.0/24 + name: vlan_red - clean_name: vlan_blue excluded: ipv6: @@ -98,6 +106,8 @@ links: dhcp: client: ipv4: true + subnet: + ipv4: true gateway: ipv4: 172.16.0.2/24 interfaces: @@ -108,7 +118,10 @@ links: node: s1 vlan: access: red - - ifindex: 1 + - dhcp: + client: + ipv4: true + ifindex: 1 ifname: eth1 ipv4: 172.16.0.3/24 node: h1 @@ -125,6 +138,8 @@ links: dhcp: client: ipv4: true + subnet: + ipv4: true gateway: ipv4: 172.16.0.2/24 interfaces: @@ -135,7 +150,10 @@ links: node: s1 vlan: access: red - - ifindex: 1 + - dhcp: + client: + ipv4: true + ifindex: 1 ifname: eth1 ipv4: 172.16.0.4/24 node: h2 @@ -176,6 +194,14 @@ nodes: device: dnsmasq dhcp: pools: + - clean_name: vlan_red + excluded: + ipv4: + - 172.16.0.2 + gateway: + ipv4: 172.16.0.2 + ipv4: 172.16.0.0/24 + name: vlan_red - clean_name: vlan_blue excluded: ipv6: @@ -244,18 +270,23 @@ nodes: id: 3 interfaces: - bridge: input_3 + dhcp: + client: + ipv4: true gateway: ipv4: 172.16.0.2/24 ifindex: 1 ifname: eth1 - ipv4: 172.16.0.3/24 linkindex: 3 name: h1 -> [s1,h2] neighbors: - ifname: Vlan1000 ipv4: 172.16.0.2/24 node: s1 - - ifname: eth1 + - dhcp: + client: + ipv4: true + ifname: eth1 ipv4: 172.16.0.4/24 node: h2 role: stub @@ -264,6 +295,8 @@ nodes: ifname: eth0 ipv4: 192.168.121.103 mac: 08:4f:a9:00:00:03 + module: + - dhcp name: h1 role: host routing: @@ -296,15 +329,20 @@ nodes: id: 4 interfaces: - bridge: input_4 + dhcp: + client: + ipv4: true gateway: ipv4: 172.16.0.2/24 ifindex: 1 ifname: eth1 - ipv4: 172.16.0.4/24 linkindex: 4 name: h2 -> [h1,s1] neighbors: - - ifname: eth1 + - dhcp: + client: + ipv4: true + ifname: eth1 ipv4: 172.16.0.3/24 node: h1 - ifname: Vlan1000 @@ -316,6 +354,8 @@ nodes: ifname: eth0 ipv4: 192.168.121.104 mac: 08:4f:a9:00:00:04 + module: + - dhcp name: h2 role: host routing: @@ -420,7 +460,10 @@ nodes: linkindex: 3 name: '[Access VLAN red] s1 -> h1' neighbors: - - ifname: eth1 + - dhcp: + client: + ipv4: true + ifname: eth1 ipv4: 172.16.0.3/24 node: h1 type: lan @@ -433,7 +476,10 @@ nodes: linkindex: 4 name: '[Access VLAN red] s1 -> h2' neighbors: - - ifname: eth1 + - dhcp: + client: + ipv4: true + ifname: eth1 ipv4: 172.16.0.4/24 node: h2 type: lan @@ -456,7 +502,7 @@ nodes: id: 1 ipv6: 2001:db8:cafe:1::1/64 protocol: anycast - ifindex: 7 + ifindex: 5 ifname: Vlan1001 ipv6: 2001:db8:cafe:1::2/64 name: VLAN blue (1001) -> [h3] @@ -476,17 +522,26 @@ nodes: name: blue - bridge_group: 2 dhcp: + relay: + ipv4: + - 192.168.42.6 server: - dhs - ifindex: 8 + ifindex: 6 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,h2] neighbors: - - ifname: eth1 + - dhcp: + client: + ipv4: true + ifname: eth1 ipv4: 172.16.0.3/24 node: h1 - - ifname: eth1 + - dhcp: + client: + ipv4: true + ifname: eth1 ipv4: 172.16.0.4/24 node: h2 role: stub @@ -562,13 +617,19 @@ vlans: host_count: 2 id: 1000 neighbors: - - ifname: eth1 + - dhcp: + client: + ipv4: true + ifname: eth1 ipv4: 172.16.0.3/24 node: h1 - ifname: Vlan1000 ipv4: 172.16.0.2/24 node: s1 - - ifname: eth1 + - dhcp: + client: + ipv4: true + ifname: eth1 ipv4: 172.16.0.4/24 node: h2 prefix: diff --git a/tests/topology/expected/evpn-asymmetric-irb-ospf.yml b/tests/topology/expected/evpn-asymmetric-irb-ospf.yml index 5057ac5853..2d663a7755 100644 --- a/tests/topology/expected/evpn-asymmetric-irb-ospf.yml +++ b/tests/topology/expected/evpn-asymmetric-irb-ospf.yml @@ -463,7 +463,7 @@ nodes: passive: false type: p2p - bridge_group: 1 - ifindex: 6 + ifindex: 5 ifname: Vlan1000 ipv4: 172.16.0.1/24 name: VLAN red (1000) -> [h1,s2] @@ -483,7 +483,7 @@ nodes: - bgp: advertise: true bridge_group: 2 - ifindex: 7 + ifindex: 6 ifname: Vlan1002 ipv4: 172.16.2.1/24 name: VLAN green (1002) -> [h3] @@ -499,7 +499,7 @@ nodes: name: green vrf: tenant - bridge_group: 3 - ifindex: 8 + ifindex: 7 ifname: Vlan1001 ipv4: 172.16.1.1/24 name: VLAN blue (1001) -> [h2,s2] @@ -618,7 +618,7 @@ nodes: auto: true interfaces: - bridge_group: 1 - ifindex: 6 + ifindex: 5 ifname: Vlan1000 ipv4: 172.16.0.1/24 name: VLAN red (1000) -> [h1,s2] @@ -641,7 +641,7 @@ nodes: - bgp: advertise: true bridge_group: 2 - ifindex: 7 + ifindex: 6 ifname: Vlan1002 ipv4: 172.16.2.1/24 name: VLAN green (1002) -> [h3] @@ -661,7 +661,7 @@ nodes: name: green vrf: tenant - bridge_group: 3 - ifindex: 8 + ifindex: 7 ifname: Vlan1001 ipv4: 172.16.1.1/24 name: VLAN blue (1001) -> [h2,s2] @@ -781,7 +781,7 @@ nodes: passive: false type: p2p - bridge_group: 1 - ifindex: 6 + ifindex: 5 ifname: Vlan1001 ipv4: 172.16.1.2/24 name: VLAN blue (1001) -> [s1,h2] @@ -801,7 +801,7 @@ nodes: - bgp: advertise: true bridge_group: 2 - ifindex: 7 + ifindex: 6 ifname: Vlan1003 ipv4: 172.16.3.2/24 name: VLAN purple (1003) -> [h4] @@ -817,7 +817,7 @@ nodes: name: purple vrf: tenant - bridge_group: 3 - ifindex: 8 + ifindex: 7 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,s1] @@ -936,7 +936,7 @@ nodes: auto: true interfaces: - bridge_group: 1 - ifindex: 6 + ifindex: 5 ifname: Vlan1001 ipv4: 172.16.1.2/24 name: VLAN blue (1001) -> [s1,h2] @@ -959,7 +959,7 @@ nodes: - bgp: advertise: true bridge_group: 2 - ifindex: 7 + ifindex: 6 ifname: Vlan1003 ipv4: 172.16.3.2/24 name: VLAN purple (1003) -> [h4] @@ -979,7 +979,7 @@ nodes: name: purple vrf: tenant - bridge_group: 3 - ifindex: 8 + ifindex: 7 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,s1] diff --git a/tests/topology/expected/group-data-vlan.yml b/tests/topology/expected/group-data-vlan.yml index 0bedc72cd0..0742d3f555 100644 --- a/tests/topology/expected/group-data-vlan.yml +++ b/tests/topology/expected/group-data-vlan.yml @@ -111,49 +111,49 @@ nodes: - 1001 - 1000 - bridge_group: 1 - ifindex: 10 - ifname: Vlan1001 - ipv4: 172.16.0.1/24 - name: VLAN red (1001) -> [r2,r3] + ifindex: 8 + ifname: Vlan1000 + ipv4: 172.16.1.1/24 + name: VLAN blue (1000) -> [r2,r3] neighbors: - - ifname: Vlan1001 - ipv4: 172.16.0.2/24 + - ifname: Vlan1000 + ipv4: 172.16.1.2/24 node: r2 - - ifname: Vlan1001 - ipv4: 172.16.0.3/24 + - ifname: Vlan1000 + ipv4: 172.16.1.3/24 node: r3 ospf: area: 0.0.0.0 - cost: 10 + cost: 20 passive: false type: svi virtual_interface: true vlan: mode: irb - name: red + name: blue - bridge_group: 2 - ifindex: 11 - ifname: Vlan1000 - ipv4: 172.16.1.1/24 - name: VLAN blue (1000) -> [r2,r3] + ifindex: 9 + ifname: Vlan1001 + ipv4: 172.16.0.1/24 + name: VLAN red (1001) -> [r2,r3] neighbors: - - ifname: Vlan1000 - ipv4: 172.16.1.2/24 + - ifname: Vlan1001 + ipv4: 172.16.0.2/24 node: r2 - - ifname: Vlan1000 - ipv4: 172.16.1.3/24 + - ifname: Vlan1001 + ipv4: 172.16.0.3/24 node: r3 ospf: area: 0.0.0.0 - cost: 20 + cost: 10 passive: false type: svi virtual_interface: true vlan: mode: irb - name: blue + name: red - bridge_group: 3 - ifindex: 12 + ifindex: 10 ifname: Vlan1002 ipv4: 172.16.2.1/24 name: VLAN green (1002) -> [r2] @@ -197,7 +197,7 @@ nodes: max_bridge_group: 3 vlans: blue: - bridge_group: 2 + bridge_group: 1 id: 1000 mode: irb ospf: @@ -215,7 +215,7 @@ nodes: allocation: id_based ipv4: 172.16.2.0/24 red: - bridge_group: 1 + bridge_group: 2 id: 1001 mode: irb ospf: @@ -247,49 +247,49 @@ nodes: - 1001 - 1000 - bridge_group: 1 - ifindex: 7 - ifname: Vlan1001 - ipv4: 172.16.0.2/24 - name: VLAN red (1001) -> [r1,r3] + ifindex: 5 + ifname: Vlan1000 + ipv4: 172.16.1.2/24 + name: VLAN blue (1000) -> [r1,r3] neighbors: - - ifname: Vlan1001 - ipv4: 172.16.0.1/24 + - ifname: Vlan1000 + ipv4: 172.16.1.1/24 node: r1 - - ifname: Vlan1001 - ipv4: 172.16.0.3/24 + - ifname: Vlan1000 + ipv4: 172.16.1.3/24 node: r3 ospf: area: 0.0.0.0 - cost: 10 + cost: 20 passive: false type: svi virtual_interface: true vlan: mode: irb - name: red + name: blue - bridge_group: 2 - ifindex: 8 - ifname: Vlan1000 - ipv4: 172.16.1.2/24 - name: VLAN blue (1000) -> [r1,r3] + ifindex: 6 + ifname: Vlan1001 + ipv4: 172.16.0.2/24 + name: VLAN red (1001) -> [r1,r3] neighbors: - - ifname: Vlan1000 - ipv4: 172.16.1.1/24 + - ifname: Vlan1001 + ipv4: 172.16.0.1/24 node: r1 - - ifname: Vlan1000 - ipv4: 172.16.1.3/24 + - ifname: Vlan1001 + ipv4: 172.16.0.3/24 node: r3 ospf: area: 0.0.0.0 - cost: 20 + cost: 10 passive: false type: svi virtual_interface: true vlan: mode: irb - name: blue + name: red - bridge_group: 3 - ifindex: 9 + ifindex: 7 ifname: Vlan1002 ipv4: 172.16.2.2/24 name: VLAN green (1002) -> [r1] @@ -333,7 +333,7 @@ nodes: max_bridge_group: 3 vlans: blue: - bridge_group: 2 + bridge_group: 1 id: 1000 mode: irb ospf: @@ -351,7 +351,7 @@ nodes: allocation: id_based ipv4: 172.16.2.0/24 red: - bridge_group: 1 + bridge_group: 2 id: 1001 mode: irb ospf: @@ -386,14 +386,14 @@ nodes: ifindex: 4 ifname: Vlan1000 ipv4: 172.16.1.3/24 - name: VLAN blue (1000) -> [r1,r2] + name: VLAN blue (1000) -> [r2,r1] neighbors: - - ifname: Vlan1000 - ipv4: 172.16.1.1/24 - node: r1 - ifname: Vlan1000 ipv4: 172.16.1.2/24 node: r2 + - ifname: Vlan1000 + ipv4: 172.16.1.1/24 + node: r1 ospf: area: 0.0.0.0 passive: false @@ -406,14 +406,14 @@ nodes: ifindex: 5 ifname: Vlan1001 ipv4: 172.16.0.3/24 - name: VLAN red (1001) -> [r1,r2] + name: VLAN red (1001) -> [r2,r1] neighbors: - - ifname: Vlan1001 - ipv4: 172.16.0.1/24 - node: r1 - ifname: Vlan1001 ipv4: 172.16.0.2/24 node: r2 + - ifname: Vlan1001 + ipv4: 172.16.0.1/24 + node: r1 ospf: area: 0.0.0.0 passive: false @@ -470,12 +470,12 @@ vlans: host_count: 0 id: 1000 neighbors: - - ifname: Vlan1000 - ipv4: 172.16.1.1/24 - node: r1 - ifname: Vlan1000 ipv4: 172.16.1.2/24 node: r2 + - ifname: Vlan1000 + ipv4: 172.16.1.1/24 + node: r1 - ifname: Vlan1000 ipv4: 172.16.1.3/24 node: r3 @@ -499,12 +499,12 @@ vlans: host_count: 0 id: 1001 neighbors: - - ifname: Vlan1001 - ipv4: 172.16.0.1/24 - node: r1 - ifname: Vlan1001 ipv4: 172.16.0.2/24 node: r2 + - ifname: Vlan1001 + ipv4: 172.16.0.1/24 + node: r1 - ifname: Vlan1001 ipv4: 172.16.0.3/24 node: r3 diff --git a/tests/topology/expected/lag-l2.yml b/tests/topology/expected/lag-l2.yml index af69a14a2d..7e250a4335 100644 --- a/tests/topology/expected/lag-l2.yml +++ b/tests/topology/expected/lag-l2.yml @@ -58,6 +58,7 @@ nodes: ifname: port-channel1 lag: ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -65,12 +66,20 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 1 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1600 name: r1 -> r2 neighbors: - ifname: port-channel1 node: r2 +<<<<<<< HEAD prefix: false +======= + stp: + enable: false +>>>>>>> f2eb98413 (Refactored to temporarily rename interface.type to '_type' to bypass validation) stp: enable: false type: lag @@ -140,6 +149,7 @@ nodes: ifname: port-channel1 lag: ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -147,12 +157,20 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 1 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1600 name: r2 -> r1 neighbors: - ifname: port-channel1 node: r1 +<<<<<<< HEAD prefix: false +======= + stp: + enable: false +>>>>>>> f2eb98413 (Refactored to temporarily rename interface.type to '_type' to bypass validation) stp: enable: false type: lag diff --git a/tests/topology/expected/lag-l3-access-vlan.yml b/tests/topology/expected/lag-l3-access-vlan.yml index 2b0dd3041f..13e1f4c1fe 100644 --- a/tests/topology/expected/lag-l3-access-vlan.yml +++ b/tests/topology/expected/lag-l3-access-vlan.yml @@ -6,144 +6,179 @@ lag: lacp_mode: active links: - _linkname: links[1].lag[1] - gateway: - ipv4: 172.16.0.1/24 interfaces: - - _vlan_mode: irb - ifindex: 1 + - ifindex: 1 ifname: eth1 - ipv4: 172.16.0.1/24 node: r1 - vlan: - access: v1 - ifindex: 1 ifname: eth1 - ipv4: 172.16.0.2/24 - node: h1 + node: r2 lag: _parentindex: 1 linkindex: 2 node_count: 2 - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 + prefix: false type: p2p - _linkname: links[1].lag[2] - gateway: - ipv4: 172.16.0.1/24 interfaces: - - _vlan_mode: irb - ifindex: 2 + - ifindex: 2 ifname: eth2 - ipv4: 172.16.0.1/24 node: r1 - vlan: - access: v1 - ifindex: 2 ifname: eth2 - ipv4: 172.16.0.2/24 - node: h1 + node: r2 lag: _parentindex: 1 linkindex: 3 node_count: 2 - prefix: - allocation: id_based - ipv4: 172.16.0.0/24 + prefix: false + type: p2p +- _linkname: links[1].lag[3] + interfaces: + - ifindex: 3 + ifname: eth3 + node: r2 + - ifindex: 3 + ifname: eth3 + node: r1 + lag: + _parentindex: 1 + linkindex: 4 + node_count: 2 + prefix: false type: p2p module: - lag - vlan name: input nodes: - h1: - _lag_ifindex: 2 + r1: af: ipv4: true box: quay.io/frrouting/frr:10.0.1 clab: binds: - - clab_files/h1/daemons:/etc/frr/daemons - - clab_files/h1/hosts:/etc/hosts + - clab_files/r1/daemons:/etc/frr/daemons + - clab_files/r1/hosts:/etc/hosts config_templates: - daemons:/etc/frr/daemons - hosts:/etc/hosts kind: linux device: frr - hostname: clab-input-h1 - id: 2 + hostname: clab-input-r1 + id: 1 interfaces: - - gateway: - ipv4: 10.1.0.1/30 - ifindex: 30000 + - ifindex: 30000 ifname: bond1 - ipv4: 10.1.0.2/30 lag: ifindex: 1 + lacp: 'off' +<<<<<<< HEAD + lacp_mode: active +<<<<<<< HEAD linkindex: 1 +======= + mode: 802.3ad +>>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 1 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 - name: h1 -> r1 + name: '[Access VLAN v1] r1 -> r2' neighbors: - ifname: bond1 - ipv4: 10.1.0.1/30 - node: r1 - role: stub + ipv4: 172.16.0.2/24 + node: r2 type: lag virtual_interface: true - - gateway: - ipv4: 172.16.0.1/24 - ifindex: 1 + vlan: + access: v1 + access_id: 1000 + - ifindex: 1 ifname: eth1 - ipv4: 172.16.0.2/24 + lag: + _parentindex: 1 linkindex: 2 mtu: 1500 - name: h1 -> [r1] + name: r1 -> r2 neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.1/24 - node: r1 - role: stub + - ifname: eth1 + node: r2 type: p2p - - gateway: - ipv4: 172.16.0.1/24 - ifindex: 2 + - ifindex: 2 ifname: eth2 - ipv4: 172.16.0.2/24 + lag: + _parentindex: 1 linkindex: 3 mtu: 1500 - name: h1 -> [r1] + name: r1 -> r2 neighbors: - - ifname: vlan1000 - ipv4: 172.16.0.1/24 - node: r1 - role: stub + - ifname: eth2 + node: r2 + type: p2p + - ifindex: 3 + ifname: eth3 + lag: + _parentindex: 1 + linkindex: 4 + mtu: 1500 + name: r1 -> r2 + neighbors: + - ifname: eth3 + node: r2 type: p2p + - bridge_group: 1 + ifindex: 4 + ifname: vlan1000 + ipv4: 172.16.0.1/24 + name: VLAN v1 (1000) -> [r2] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.2/24 + node: r2 + type: svi + virtual_interface: true + vlan: + mode: irb + name: v1 + lag: + lacp: fast + lacp_mode: active + loopback: + ifindex: 0 + ifname: lo + ipv4: 10.0.0.1/32 + neighbors: [] + type: loopback + virtual_interface: true mgmt: ifname: eth0 - ipv4: 192.168.121.102 - mac: 08:4f:a9:00:00:02 + ipv4: 192.168.121.101 + mac: 08:4f:a9:00:00:01 + module: + - lag + - vlan mtu: 1500 - name: h1 - role: host - r1: + name: r1 +<<<<<<< HEAD + r2: af: ipv4: true box: quay.io/frrouting/frr:10.0.1 clab: binds: - - clab_files/r1/daemons:/etc/frr/daemons - - clab_files/r1/hosts:/etc/hosts + - clab_files/r2/daemons:/etc/frr/daemons + - clab_files/r2/hosts:/etc/hosts config_templates: - daemons:/etc/frr/daemons - hosts:/etc/hosts kind: linux device: frr - hostname: clab-input-r1 - id: 1 + hostname: clab-input-r2 + id: 2 interfaces: - ifindex: 30000 ifname: bond1 - ipv4: 10.1.0.1/30 lag: ifindex: 1 lacp: 'off' @@ -154,12 +189,10 @@ nodes: mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: r1 -> h1 + name: r2 -> r1 neighbors: - ifname: bond1 - ipv4: 10.1.0.2/30 - node: h1 - role: stub + node: r1 type: lag virtual_interface: true - ifindex: 1 @@ -168,65 +201,66 @@ nodes: _parentindex: 1 linkindex: 2 mtu: 1500 - name: '[Access VLAN v1] r1 -> h1' + name: r2 -> r1 neighbors: - ifname: eth1 - ipv4: 172.16.0.2/24 - node: h1 + node: r1 type: p2p - vlan: - access: v1 - access_id: 1000 - ifindex: 2 ifname: eth2 lag: _parentindex: 1 linkindex: 3 mtu: 1500 - name: '[Access VLAN v1] r1 -> h1' + name: r2 -> r1 neighbors: - ifname: eth2 - ipv4: 172.16.0.2/24 - node: h1 + node: r1 type: p2p - vlan: - access: v1 - access_id: 1000 - - bridge_group: 1 - ifindex: 3 - ifname: vlan1000 - ipv4: 172.16.0.1/24 - name: VLAN v1 (1000) -> [h1] + - ifindex: 3 + ifname: eth3 + lag: + _parentindex: 1 + linkindex: 4 + mtu: 1500 + name: r2 -> r1 neighbors: - - ifname: eth1 - ipv4: 172.16.0.2/24 - node: h1 - role: stub - type: svi - virtual_interface: true - vlan: - mode: irb - name: v1 + - ifname: eth3 + node: r1 + type: p2p lag: lacp: fast lacp_mode: active loopback: ifindex: 0 ifname: lo - ipv4: 10.0.0.1/32 + ipv4: 10.0.0.2/32 neighbors: [] type: loopback virtual_interface: true mgmt: ifname: eth0 - ipv4: 192.168.121.101 - mac: 08:4f:a9:00:00:01 + ipv4: 192.168.121.102 + mac: 08:4f:a9:00:00:02 module: - lag - vlan mtu: 1500 - name: r1 + name: r2 +======= + vlan: + max_bridge_group: 1 + vlans: + v1: + bridge_group: 1 + id: 1000 + mode: irb + prefix: + allocation: id_based + ipv4: 172.16.0.0/24 <<<<<<< HEAD +>>>>>>> b2de7636b (Correct ip indexes, restore test results) +======= r2: af: ipv4: true @@ -248,19 +282,18 @@ nodes: lag: ifindex: 1 lacp: 'off' - lacp_mode: active -<<<<<<< HEAD linkindex: 1 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) mtu: 1500 - name: r2 -> r1 + name: '[Access VLAN v1] r2 -> r1' neighbors: - ifname: bond1 + ipv4: 172.16.0.1/24 node: r1 type: lag virtual_interface: true + vlan: + access: v1 + access_id: 1000 - ifindex: 1 ifname: eth1 lag: @@ -294,9 +327,24 @@ nodes: - ifname: eth3 node: r1 type: p2p + - bridge_group: 1 + ifindex: 4 + ifname: vlan1000 + ipv4: 172.16.0.2/24 + name: VLAN v1 (1000) -> [r1] + neighbors: + - ifname: vlan1000 + ipv4: 172.16.0.1/24 + node: r1 + type: svi + virtual_interface: true + vlan: + mode: irb + name: v1 lag: lacp: fast lacp_mode: active + mode: 802.3ad loopback: ifindex: 0 ifname: lo @@ -313,7 +361,6 @@ nodes: - vlan mtu: 1500 name: r2 -======= vlan: max_bridge_group: 1 vlans: @@ -324,16 +371,16 @@ nodes: prefix: allocation: id_based ipv4: 172.16.0.0/24 ->>>>>>> b2de7636b (Correct ip indexes, restore test results) +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) provider: clab vlans: v1: - host_count: 1 + host_count: 0 id: 1000 neighbors: - - ifname: eth1 + - ifname: vlan1000 ipv4: 172.16.0.2/24 - node: h1 + node: r2 - ifname: vlan1000 ipv4: 172.16.0.1/24 node: r1 diff --git a/tests/topology/expected/lag-l3-vlan-trunk.yml b/tests/topology/expected/lag-l3-vlan-trunk.yml index 4f24367af6..93258d4201 100644 --- a/tests/topology/expected/lag-l3-vlan-trunk.yml +++ b/tests/topology/expected/lag-l3-vlan-trunk.yml @@ -72,6 +72,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -79,6 +80,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 1 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: r1 -> r2 neighbors: @@ -232,6 +236,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -239,6 +244,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 1 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: r2 -> r1 neighbors: diff --git a/tests/topology/expected/lag-l3.yml b/tests/topology/expected/lag-l3.yml index e7e6a2643e..316937930d 100644 --- a/tests/topology/expected/lag-l3.yml +++ b/tests/topology/expected/lag-l3.yml @@ -53,6 +53,7 @@ nodes: ipv4: 10.1.0.1/30 lag: ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -60,6 +61,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 1 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: r1 -> r2 neighbors: @@ -128,6 +132,7 @@ nodes: ipv4: 10.1.0.2/30 lag: ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -135,6 +140,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 1 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: r2 -> r1 neighbors: diff --git a/tests/topology/expected/lag-mlag-m_to_m.yml b/tests/topology/expected/lag-mlag-m_to_m.yml index fff5f56e70..34cca6bd50 100644 --- a/tests/topology/expected/lag-mlag-m_to_m.yml +++ b/tests/topology/expected/lag-mlag-m_to_m.yml @@ -64,7 +64,7 @@ links: ifindex: 20 node: b1 lag: - _parentindex: 8 + _parentindex: 6 linkindex: 4 node_count: 2 prefix: false @@ -88,7 +88,7 @@ links: prefix: false type: p2p - _linkname: vlans.red.links[1] - bridge: input_6 + bridge: input_7 gateway: ipv4: 172.16.0.1/24 interfaces: @@ -103,7 +103,7 @@ links: ifname: eth1 ipv4: 172.16.0.5/24 node: h1 - linkindex: 6 + linkindex: 7 node_count: 2 prefix: allocation: id_based @@ -112,7 +112,7 @@ links: vlan: access: red - _linkname: vlans.red.links[2] - bridge: input_7 + bridge: input_8 gateway: ipv4: 172.16.0.4/24 interfaces: @@ -127,7 +127,7 @@ links: ifname: eth1 ipv4: 172.16.0.6/24 node: h2 - linkindex: 7 + linkindex: 8 node_count: 2 prefix: allocation: id_based @@ -165,7 +165,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 1 + _parentindex: 6 ifindex: 10 linkindex: 4 name: a1 -> b1 @@ -173,24 +173,12 @@ nodes: - ifname: Ethernet2 node: b1 type: p2p - - bridge: input_6 - ifindex: 3 - ifname: Ethernet3 - linkindex: 6 - name: '[Access VLAN red] a1 -> h1' - neighbors: - - ifname: eth1 - ipv4: 172.16.0.5/24 - node: h1 - type: lan - vlan: - access: red - access_id: 1000 - ifindex: 30000 ifname: port-channel1 lag: _mlag: true ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -198,6 +186,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 6 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: a1 -> b1 neighbors: - ifname: port-channel1 @@ -209,6 +200,19 @@ nodes: red: {} trunk_id: - 1000 + - bridge: input_7 + ifindex: 3 + ifname: Ethernet3 + linkindex: 7 + name: '[Access VLAN red] a1 -> h1' + neighbors: + - ifname: eth1 + ipv4: 172.16.0.5/24 + node: h1 + type: lan + vlan: + access: red + access_id: 1000 - bridge_group: 1 ifindex: 5 ifname: Vlan1000 @@ -290,6 +294,7 @@ nodes: lag: _mlag: true ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -297,6 +302,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 3 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: a2 -> b2 neighbors: - ifname: port-channel1 @@ -311,7 +319,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 1 + _parentindex: 3 ifindex: 10 linkindex: 5 name: a2 -> b2 @@ -398,7 +406,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 1 + _parentindex: 6 ifindex: 20 linkindex: 4 name: b1 -> a1 @@ -411,6 +419,7 @@ nodes: lag: _mlag: true ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -418,6 +427,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 6 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: b1 -> a1 neighbors: - ifname: port-channel1 @@ -510,6 +522,7 @@ nodes: lag: _mlag: true ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -517,6 +530,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 3 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: b2 -> a2 neighbors: - ifname: port-channel1 @@ -531,7 +547,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 1 + _parentindex: 3 ifindex: 20 linkindex: 5 name: b2 -> a2 @@ -539,10 +555,10 @@ nodes: - ifname: Ethernet2 node: a2 type: p2p - - bridge: input_7 + - bridge: input_8 ifindex: 3 ifname: Ethernet3 - linkindex: 7 + linkindex: 8 name: '[Access VLAN red] b2 -> h2' neighbors: - ifname: eth1 @@ -613,13 +629,13 @@ nodes: device: linux id: 5 interfaces: - - bridge: input_6 + - bridge: input_7 gateway: ipv4: 172.16.0.1/24 ifindex: 1 ifname: eth1 ipv4: 172.16.0.5/24 - linkindex: 6 + linkindex: 7 name: h1 -> [a1,b1,b2,a2,h2] neighbors: - ifname: Vlan1000 @@ -673,13 +689,13 @@ nodes: device: linux id: 6 interfaces: - - bridge: input_7 + - bridge: input_8 gateway: ipv4: 172.16.0.4/24 ifindex: 1 ifname: eth1 ipv4: 172.16.0.6/24 - linkindex: 7 + linkindex: 8 name: h2 -> [h1,a1,b1,b2,a2] neighbors: - ifname: eth1 diff --git a/tests/topology/expected/lag-mlag.yml b/tests/topology/expected/lag-mlag.yml index 13f680661f..46cdee3529 100644 --- a/tests/topology/expected/lag-mlag.yml +++ b/tests/topology/expected/lag-mlag.yml @@ -238,6 +238,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -245,6 +246,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 2 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: '[Access VLAN red] h1 -> [s1,s2]' neighbors: @@ -263,6 +267,7 @@ nodes: ifname: bond2 lag: ifindex: 2 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -270,6 +275,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 3 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: h1 -> s1 neighbors: @@ -281,7 +289,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 1 + _parentindex: 2 linkindex: 7 mtu: 1500 name: h1 -> s1 @@ -292,7 +300,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 1 + _parentindex: 2 linkindex: 8 mtu: 1500 name: h1 -> s1 @@ -303,7 +311,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 1 + _parentindex: 2 linkindex: 9 mtu: 1500 name: h1 -> s2 @@ -314,7 +322,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 1 + _parentindex: 2 linkindex: 10 mtu: 1500 name: h1 -> s2 @@ -325,7 +333,7 @@ nodes: - ifindex: 5 ifname: eth5 lag: - _parentindex: 2 + _parentindex: 3 linkindex: 11 mtu: 1500 name: h1 -> s1 @@ -336,7 +344,7 @@ nodes: - ifindex: 6 ifname: eth6 lag: - _parentindex: 2 + _parentindex: 3 linkindex: 12 mtu: 1500 name: h1 -> s1 @@ -413,6 +421,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -420,6 +429,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 4 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: @@ -438,6 +450,7 @@ nodes: ifname: bond2 lag: ifindex: 2 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -445,6 +458,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 5 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: @@ -462,7 +478,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 1 + _parentindex: 4 linkindex: 13 mtu: 1500 name: h2 -> s1 @@ -473,7 +489,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 1 + _parentindex: 4 linkindex: 14 mtu: 1500 name: h2 -> s1 @@ -484,7 +500,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 1 + _parentindex: 4 linkindex: 15 mtu: 1500 name: h2 -> s2 @@ -495,7 +511,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 1 + _parentindex: 4 linkindex: 16 mtu: 1500 name: h2 -> s2 @@ -506,7 +522,7 @@ nodes: - ifindex: 5 ifname: eth5 lag: - _parentindex: 2 + _parentindex: 5 linkindex: 17 mtu: 1500 name: h2 -> s1 @@ -517,7 +533,7 @@ nodes: - ifindex: 6 ifname: eth6 lag: - _parentindex: 2 + _parentindex: 5 linkindex: 18 mtu: 1500 name: h2 -> s2 @@ -605,6 +621,7 @@ nodes: lag: _mlag: true ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -612,6 +629,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 2 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: '[Access VLAN red] s1 -> [h1,s2]' neighbors: @@ -630,6 +650,7 @@ nodes: ifname: port-channel2 lag: ifindex: 2 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -637,6 +658,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 3 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: s1 -> h1 neighbors: @@ -650,6 +674,7 @@ nodes: lag: _mlag: true ifindex: 3 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -657,6 +682,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 4 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: @@ -676,6 +704,7 @@ nodes: lag: _mlag: true ifindex: 4 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -683,6 +712,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 5 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: @@ -715,7 +747,7 @@ nodes: ifindex: 3 ifname: ethernet1/1/3 lag: - _parentindex: 1 + _parentindex: 2 linkindex: 7 mtu: 1500 name: s1 -> h1 @@ -728,7 +760,7 @@ nodes: ifindex: 4 ifname: ethernet1/1/4 lag: - _parentindex: 1 + _parentindex: 2 linkindex: 8 mtu: 1500 name: s1 -> h1 @@ -741,7 +773,7 @@ nodes: ifindex: 5 ifname: ethernet1/1/5 lag: - _parentindex: 2 + _parentindex: 3 linkindex: 11 mtu: 1500 name: s1 -> h1 @@ -754,7 +786,7 @@ nodes: ifindex: 6 ifname: ethernet1/1/6 lag: - _parentindex: 2 + _parentindex: 3 linkindex: 12 mtu: 1500 name: s1 -> h1 @@ -767,7 +799,7 @@ nodes: ifindex: 7 ifname: ethernet1/1/7 lag: - _parentindex: 3 + _parentindex: 4 linkindex: 13 mtu: 1500 name: s1 -> h2 @@ -780,7 +812,7 @@ nodes: ifindex: 8 ifname: ethernet1/1/8 lag: - _parentindex: 3 + _parentindex: 4 linkindex: 14 mtu: 1500 name: s1 -> h2 @@ -793,7 +825,7 @@ nodes: ifindex: 9 ifname: ethernet1/1/9 lag: - _parentindex: 4 + _parentindex: 5 linkindex: 17 mtu: 1500 name: s1 -> h2 @@ -881,6 +913,7 @@ nodes: lag: _mlag: true ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -888,6 +921,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 2 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: '[Access VLAN red] s2 -> [h1,s1]' neighbors: @@ -907,6 +943,7 @@ nodes: lag: _mlag: true ifindex: 3 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -914,6 +951,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 4 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: @@ -933,6 +973,7 @@ nodes: lag: _mlag: true ifindex: 4 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -940,6 +981,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 5 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) mtu: 1500 name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: @@ -972,7 +1016,7 @@ nodes: ifindex: 3 ifname: ethernet1/1/3 lag: - _parentindex: 1 + _parentindex: 2 linkindex: 9 mtu: 1500 name: s2 -> h1 @@ -985,7 +1029,7 @@ nodes: ifindex: 4 ifname: ethernet1/1/4 lag: - _parentindex: 1 + _parentindex: 2 linkindex: 10 mtu: 1500 name: s2 -> h1 @@ -998,7 +1042,7 @@ nodes: ifindex: 5 ifname: ethernet1/1/5 lag: - _parentindex: 3 + _parentindex: 4 linkindex: 15 mtu: 1500 name: s2 -> h2 @@ -1011,7 +1055,7 @@ nodes: ifindex: 6 ifname: ethernet1/1/6 lag: - _parentindex: 3 + _parentindex: 4 linkindex: 16 mtu: 1500 name: s2 -> h2 @@ -1024,7 +1068,7 @@ nodes: ifindex: 7 ifname: ethernet1/1/7 lag: - _parentindex: 4 + _parentindex: 5 linkindex: 18 mtu: 1500 name: s2 -> h2 diff --git a/tests/topology/expected/node.clone-plugin-lag.yml b/tests/topology/expected/node.clone-plugin-lag.yml index 34e50542f8..7bd1739123 100644 --- a/tests/topology/expected/node.clone-plugin-lag.yml +++ b/tests/topology/expected/node.clone-plugin-lag.yml @@ -213,6 +213,7 @@ nodes: ifname: bond8 lag: ifindex: 8 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -220,6 +221,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 2 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: h-01 -> r1 neighbors: - ifname: port-channel8 @@ -231,6 +235,7 @@ nodes: ifname: bond9 lag: ifindex: 9 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -238,6 +243,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 4 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: h-01 -> r2 neighbors: - ifname: port-channel1 @@ -248,7 +256,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 8 + _parentindex: 2 linkindex: 8 name: h-01 -> r1 neighbors: @@ -258,7 +266,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 8 + _parentindex: 2 linkindex: 9 name: h-01 -> r1 neighbors: @@ -268,7 +276,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 9 + _parentindex: 4 linkindex: 12 name: h-01 -> r2 neighbors: @@ -278,7 +286,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 9 + _parentindex: 4 linkindex: 13 name: h-01 -> r2 neighbors: @@ -314,6 +322,7 @@ nodes: ifname: bond9 lag: ifindex: 9 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -321,6 +330,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 3 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: h-02 -> r1 neighbors: - ifname: port-channel9 @@ -332,6 +344,7 @@ nodes: ifname: bond10 lag: ifindex: 10 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -339,6 +352,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 5 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: h-02 -> r2 neighbors: - ifname: port-channel2 @@ -349,7 +365,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 9 + _parentindex: 3 linkindex: 10 name: h-02 -> r1 neighbors: @@ -359,7 +375,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 9 + _parentindex: 3 linkindex: 11 name: h-02 -> r1 neighbors: @@ -369,7 +385,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 10 + _parentindex: 5 linkindex: 14 name: h-02 -> r2 neighbors: @@ -379,7 +395,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 10 + _parentindex: 5 linkindex: 15 name: h-02 -> r2 neighbors: @@ -415,6 +431,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -424,6 +441,9 @@ nodes: <<<<<<< HEAD <<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 6 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: '[Access VLAN red] h2-01 -> [r1,r2]' ======= name: h2-01 -> [r1,r2] @@ -446,7 +466,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 1 + _parentindex: 6 linkindex: 16 name: h2-01 -> r1 neighbors: @@ -456,7 +476,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 1 + _parentindex: 6 linkindex: 17 name: h2-01 -> r2 neighbors: @@ -522,6 +542,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -531,6 +552,9 @@ nodes: <<<<<<< HEAD <<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 7 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: '[Access VLAN red] h2-02 -> [r1,r2]' ======= name: h2-02 -> [r1,r2] @@ -553,7 +577,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 1 + _parentindex: 7 linkindex: 18 name: h2-02 -> r1 neighbors: @@ -563,7 +587,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 1 + _parentindex: 7 linkindex: 19 name: h2-02 -> r2 neighbors: @@ -644,6 +668,7 @@ nodes: ifname: port-channel8 lag: ifindex: 8 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -651,6 +676,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 2 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: r1 -> h-01 neighbors: - ifname: bond8 @@ -662,6 +690,7 @@ nodes: ifname: port-channel9 lag: ifindex: 9 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -669,6 +698,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 3 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: r1 -> h-02 neighbors: - ifname: bond9 @@ -681,6 +713,7 @@ nodes: lag: _mlag: true ifindex: 10 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -690,6 +723,9 @@ nodes: <<<<<<< HEAD <<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 6 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: '[Access VLAN red] r1 -> [h2-01,r2]' ======= name: r1 -> [h2-01,r2] @@ -714,6 +750,7 @@ nodes: lag: _mlag: true ifindex: 11 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -723,6 +760,9 @@ nodes: <<<<<<< HEAD <<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 7 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: '[Access VLAN red] r1 -> [h2-02,r2]' ======= name: r1 -> [h2-02,r2] @@ -745,7 +785,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 8 + _parentindex: 2 linkindex: 8 name: r1 -> h-01 neighbors: @@ -755,7 +795,7 @@ nodes: - ifindex: 3 ifname: Ethernet3 lag: - _parentindex: 8 + _parentindex: 2 linkindex: 9 name: r1 -> h-01 neighbors: @@ -765,7 +805,7 @@ nodes: - ifindex: 4 ifname: Ethernet4 lag: - _parentindex: 9 + _parentindex: 3 linkindex: 10 name: r1 -> h-02 neighbors: @@ -775,7 +815,7 @@ nodes: - ifindex: 5 ifname: Ethernet5 lag: - _parentindex: 9 + _parentindex: 3 linkindex: 11 name: r1 -> h-02 neighbors: @@ -785,7 +825,7 @@ nodes: - ifindex: 6 ifname: Ethernet6 lag: - _parentindex: 10 + _parentindex: 6 linkindex: 16 name: r1 -> h2-01 neighbors: @@ -795,7 +835,7 @@ nodes: - ifindex: 7 ifname: Ethernet7 lag: - _parentindex: 11 + _parentindex: 7 linkindex: 18 name: r1 -> h2-02 neighbors: @@ -876,7 +916,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 10 + _parentindex: 6 linkindex: 17 name: r2 -> h2-01 neighbors: @@ -886,7 +926,7 @@ nodes: - ifindex: 3 ifname: Ethernet3 lag: - _parentindex: 11 + _parentindex: 7 linkindex: 19 name: r2 -> h2-02 neighbors: @@ -923,7 +963,7 @@ nodes: - ifindex: 6 ifname: Ethernet6 lag: - _parentindex: 1 + _parentindex: 4 linkindex: 12 name: r2 -> h-01 neighbors: @@ -933,7 +973,7 @@ nodes: - ifindex: 7 ifname: Ethernet7 lag: - _parentindex: 1 + _parentindex: 4 linkindex: 13 name: r2 -> h-01 neighbors: @@ -943,7 +983,7 @@ nodes: - ifindex: 8 ifname: Ethernet8 lag: - _parentindex: 2 + _parentindex: 5 linkindex: 14 name: r2 -> h-02 neighbors: @@ -953,7 +993,7 @@ nodes: - ifindex: 9 ifname: Ethernet9 lag: - _parentindex: 2 + _parentindex: 5 linkindex: 15 name: r2 -> h-02 neighbors: @@ -964,6 +1004,7 @@ nodes: ifname: port-channel1 lag: ifindex: 1 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -971,6 +1012,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 4 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: r2 -> h-01 neighbors: - ifname: bond9 @@ -982,6 +1026,7 @@ nodes: ifname: port-channel2 lag: ifindex: 2 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -989,6 +1034,9 @@ nodes: ======= mode: 802.3ad >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 5 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: r2 -> h-02 neighbors: - ifname: bond10 @@ -1001,6 +1049,7 @@ nodes: lag: _mlag: true ifindex: 10 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -1010,6 +1059,9 @@ nodes: <<<<<<< HEAD <<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 6 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: '[Access VLAN red] r2 -> [h2-01,r1]' ======= name: r2 -> [h2-01,r1] @@ -1034,6 +1086,7 @@ nodes: lag: _mlag: true ifindex: 11 +<<<<<<< HEAD lacp: fast lacp_mode: active <<<<<<< HEAD @@ -1043,6 +1096,9 @@ nodes: <<<<<<< HEAD <<<<<<< HEAD >>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) +======= + linkindex: 7 +>>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) name: '[Access VLAN red] r2 -> [h2-02,r1]' ======= name: r2 -> [h2-02,r1] diff --git a/tests/topology/expected/vlan-access-links.yml b/tests/topology/expected/vlan-access-links.yml index 785f5c465d..a32293e5a9 100644 --- a/tests/topology/expected/vlan-access-links.yml +++ b/tests/topology/expected/vlan-access-links.yml @@ -257,7 +257,7 @@ nodes: access: red access_id: 1000 - bridge_group: 1 - ifindex: 4 + ifindex: 3 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,s2...] diff --git a/tests/topology/expected/vlan-access-neighbors.yml b/tests/topology/expected/vlan-access-neighbors.yml index 1334640f9e..c54c65b0e9 100644 --- a/tests/topology/expected/vlan-access-neighbors.yml +++ b/tests/topology/expected/vlan-access-neighbors.yml @@ -23,38 +23,40 @@ links: interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.1.1/24 + ipv4: 172.16.0.1/24 node: r1 - _vlan_mode: irb ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.1.2/24 + ipv4: 172.16.0.2/24 node: s1 vlan: access: red linkindex: 1 node_count: 2 prefix: - ipv4: 172.16.1.0/24 + allocation: id_based + ipv4: 172.16.0.0/24 type: lan - _linkname: links[2] bridge: input_2 interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.0.3/24 node: r2 - _vlan_mode: irb ifindex: 2 ifname: Ethernet2 - ipv4: 172.16.2.2/24 + ipv4: 172.16.0.2/24 node: s1 vlan: access: red linkindex: 2 node_count: 2 prefix: - ipv4: 172.16.2.0/24 + allocation: id_based + ipv4: 172.16.0.0/24 type: lan module: - vlan @@ -90,7 +92,7 @@ nodes: ipv4: true as: 65001 ifindex: 1 - ipv4: 172.16.2.3 + ipv4: 172.16.0.3 name: r2 type: ebgp next_hop_self: true @@ -110,15 +112,15 @@ nodes: name: et1 ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.1.1/24 + ipv4: 172.16.0.1/24 linkindex: 1 name: r1 -> [s1,r2] neighbors: - ifname: Vlan1000 - ipv4: 172.16.1.2/24 + ipv4: 172.16.0.2/24 node: s1 - ifname: Ethernet1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.0.3/24 node: r2 type: lan loopback: @@ -164,7 +166,7 @@ nodes: ipv4: true as: 65000 ifindex: 1 - ipv4: 172.16.1.1 + ipv4: 172.16.0.1 name: r1 type: ebgp next_hop_self: true @@ -184,15 +186,15 @@ nodes: name: et1 ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.0.3/24 linkindex: 2 name: r2 -> [r1,s1] neighbors: - ifname: Ethernet1 - ipv4: 172.16.1.1/24 + ipv4: 172.16.0.1/24 node: r1 - ifname: Vlan1000 - ipv4: 172.16.1.2/24 + ipv4: 172.16.0.2/24 node: s1 type: lan loopback: @@ -231,7 +233,7 @@ nodes: name: '[Access VLAN red] s1 -> r1' neighbors: - ifname: Ethernet1 - ipv4: 172.16.1.1/24 + ipv4: 172.16.0.1/24 node: r1 type: lan vlan: @@ -246,23 +248,23 @@ nodes: name: '[Access VLAN red] s1 -> r2' neighbors: - ifname: Ethernet1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.0.3/24 node: r2 type: lan vlan: access: red access_id: 1000 - bridge_group: 1 - ifindex: 4 + ifindex: 3 ifname: Vlan1000 - ipv4: 172.16.1.2/24 + ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [r1,r2] neighbors: - ifname: Ethernet1 - ipv4: 172.16.1.1/24 + ipv4: 172.16.0.1/24 node: r1 - ifname: Ethernet1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.0.3/24 node: r2 type: svi virtual_interface: true @@ -295,5 +297,3 @@ nodes: allocation: id_based ipv4: 172.16.0.0/24 provider: clab -vlans: - red: {} diff --git a/tests/topology/expected/vlan-access-node.yml b/tests/topology/expected/vlan-access-node.yml index e25bcc2ad8..30e7755dd3 100644 --- a/tests/topology/expected/vlan-access-node.yml +++ b/tests/topology/expected/vlan-access-node.yml @@ -18,63 +18,66 @@ links: - _linkname: links[1] bridge: input_1 gateway: - ipv4: 172.16.2.1/24 + ipv4: 172.16.0.1/24 interfaces: - ifindex: 1 ifname: eth1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.0.3/24 node: h1 - _vlan_mode: irb ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.2.1/24 + ipv4: 172.16.0.1/24 node: s1 vlan: access: red linkindex: 1 node_count: 2 prefix: - ipv4: 172.16.2.0/24 + allocation: id_based + ipv4: 172.16.0.0/24 type: lan - _linkname: links[2] bridge: input_2 interfaces: - ifindex: 2 ifname: GigabitEthernet0/2 - ipv4: 172.16.3.1/24 + ipv4: 172.16.1.1/24 node: s1 - _vlan_mode: irb ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.3.2/24 + ipv4: 172.16.1.2/24 node: s2 vlan: access: blue linkindex: 2 node_count: 2 prefix: - ipv4: 172.16.3.0/24 + allocation: id_based + ipv4: 172.16.1.0/24 type: lan - _linkname: links[3] bridge: input_3 gateway: - ipv4: 172.16.4.2/24 + ipv4: 172.16.1.2/24 interfaces: - _vlan_mode: irb ifindex: 2 ifname: GigabitEthernet0/2 - ipv4: 172.16.4.2/24 + ipv4: 172.16.1.2/24 node: s2 vlan: access: blue - ifindex: 1 ifname: eth1 - ipv4: 172.16.4.4/24 + ipv4: 172.16.1.4/24 node: h2 linkindex: 3 node_count: 2 prefix: - ipv4: 172.16.4.0/24 + allocation: id_based + ipv4: 172.16.1.0/24 type: lan module: - vlan @@ -89,15 +92,15 @@ nodes: interfaces: - bridge: input_1 gateway: - ipv4: 172.16.2.1/24 + ipv4: 172.16.0.1/24 ifindex: 1 ifname: eth1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.0.3/24 linkindex: 1 name: h1 -> [s1] neighbors: - ifname: BVI1 - ipv4: 172.16.2.1/24 + ipv4: 172.16.0.1/24 node: s1 role: stub type: lan @@ -138,18 +141,18 @@ nodes: interfaces: - bridge: input_3 gateway: - ipv4: 172.16.4.2/24 + ipv4: 172.16.1.2/24 ifindex: 1 ifname: eth1 - ipv4: 172.16.4.4/24 + ipv4: 172.16.1.4/24 linkindex: 3 name: h2 -> [s1,s2] neighbors: - ifname: GigabitEthernet0/2 - ipv4: 172.16.3.1/24 + ipv4: 172.16.1.1/24 node: s1 - ifname: BVI1 - ipv4: 172.16.3.2/24 + ipv4: 172.16.1.2/24 node: s2 type: lan mgmt: @@ -194,9 +197,8 @@ nodes: name: '[Access VLAN red] s1 -> h1' neighbors: - ifname: eth1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.0.3/24 node: h1 - parentindex: {} type: lan vlan: access: red @@ -204,28 +206,26 @@ nodes: - bridge: input_2 ifindex: 2 ifname: GigabitEthernet0/2 - ipv4: 172.16.3.1/24 + ipv4: 172.16.1.1/24 linkindex: 2 name: s1 -> [s2,h2] neighbors: - ifname: BVI1 - ipv4: 172.16.3.2/24 + ipv4: 172.16.1.2/24 node: s2 - ifname: eth1 - ipv4: 172.16.4.4/24 + ipv4: 172.16.1.4/24 node: h2 - parentindex: {} type: lan - bridge_group: 1 - ifindex: 4 + ifindex: 3 ifname: BVI1 - ipv4: 172.16.2.1/24 + ipv4: 172.16.0.1/24 name: VLAN red (1000) -> [h1] neighbors: - ifname: eth1 - ipv4: 172.16.2.3/24 + ipv4: 172.16.0.3/24 node: h1 - parentindex: {} role: stub type: svi virtual_interface: true @@ -271,9 +271,8 @@ nodes: name: '[Access VLAN blue] s2 -> s1' neighbors: - ifname: GigabitEthernet0/2 - ipv4: 172.16.3.1/24 + ipv4: 172.16.1.1/24 node: s1 - parentindex: {} type: lan vlan: access: blue @@ -285,26 +284,24 @@ nodes: name: '[Access VLAN blue] s2 -> h2' neighbors: - ifname: eth1 - ipv4: 172.16.4.4/24 + ipv4: 172.16.1.4/24 node: h2 - parentindex: {} type: lan vlan: access: blue access_id: 1001 - bridge_group: 1 - ifindex: 4 + ifindex: 3 ifname: BVI1 - ipv4: 172.16.3.2/24 + ipv4: 172.16.1.2/24 name: VLAN blue (1001) -> [s1,h2] neighbors: - ifname: GigabitEthernet0/2 - ipv4: 172.16.3.1/24 + ipv4: 172.16.1.1/24 node: s1 - ifname: eth1 - ipv4: 172.16.4.4/24 + ipv4: 172.16.1.4/24 node: h2 - parentindex: {} type: svi virtual_interface: true vlan: @@ -338,6 +335,3 @@ nodes: provider: libvirt vlan: mode: irb -vlans: - blue: {} - red: {} diff --git a/tests/topology/expected/vlan-access-single.yml b/tests/topology/expected/vlan-access-single.yml index d2df245339..507b6e4117 100644 --- a/tests/topology/expected/vlan-access-single.yml +++ b/tests/topology/expected/vlan-access-single.yml @@ -298,7 +298,7 @@ nodes: access: red access_id: 1000 - bridge_group: 1 - ifindex: 5 + ifindex: 4 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,s2,s3,h2] @@ -402,7 +402,7 @@ nodes: access: red access_id: 1000 - bridge_group: 1 - ifindex: 4 + ifindex: 3 ifname: Vlan1000 ipv4: 172.16.0.3/24 name: VLAN red (1000) -> [h1,s1,s3,h2] @@ -491,7 +491,7 @@ nodes: access: red access_id: 1000 - bridge_group: 1 - ifindex: 3 + ifindex: 2 ifname: Vlan1000 ipv4: 172.16.0.42/24 name: VLAN red (1000) -> [h1,s1,s2,h2] diff --git a/tests/topology/expected/vlan-coverage.yml b/tests/topology/expected/vlan-coverage.yml index 4a56f7d11d..a8337d351c 100644 --- a/tests/topology/expected/vlan-coverage.yml +++ b/tests/topology/expected/vlan-coverage.yml @@ -82,12 +82,13 @@ links: access: blue - ifindex: 2 ifname: eth2 - ipv4: 172.16.2.4/24 + ipv4: 172.16.1.4/24 node: h2 linkindex: 4 node_count: 2 prefix: - ipv4: 172.16.2.0/24 + allocation: id_based + ipv4: 172.16.1.0/24 type: lan - _linkname: links[5] interfaces: @@ -191,7 +192,7 @@ nodes: - bridge: input_4 ifindex: 2 ifname: eth2 - ipv4: 172.16.2.4/24 + ipv4: 172.16.1.4/24 linkindex: 4 name: h2 -> [s2] neighbors: @@ -354,7 +355,7 @@ nodes: name: '[Access VLAN blue] s2 -> h2' neighbors: - ifname: eth2 - ipv4: 172.16.2.4/24 + ipv4: 172.16.1.4/24 node: h2 type: lan vlan: @@ -396,7 +397,7 @@ nodes: name: VLAN blue (1000) -> [h2] neighbors: - ifname: eth2 - ipv4: 172.16.2.4/24 + ipv4: 172.16.1.4/24 node: h2 role: stub type: svi @@ -440,7 +441,6 @@ provider: libvirt vlan: mode: bridge vlans: - blue: {} red: host_count: 2 id: 1001 diff --git a/tests/topology/expected/vlan-vrrp.yml b/tests/topology/expected/vlan-vrrp.yml index 3860877050..fdec239025 100644 --- a/tests/topology/expected/vlan-vrrp.yml +++ b/tests/topology/expected/vlan-vrrp.yml @@ -313,7 +313,7 @@ nodes: vrrp: group: 1 priority: 100 - ifindex: 7 + ifindex: 5 ifname: Vlan1000 ipv4: 172.16.0.2/24 name: VLAN red (1000) -> [h1,s2,h2] @@ -349,7 +349,7 @@ nodes: protocol: vrrp vrrp: group: 1 - ifindex: 8 + ifindex: 6 ifname: Vlan1001 ipv4: 172.16.1.24/24 name: VLAN blue (1001) -> [s2] @@ -459,7 +459,7 @@ nodes: vrrp: group: 1 priority: 200 - ifindex: 6 + ifindex: 5 ifname: Vlan1000 ipv4: 172.16.0.3/24 name: VLAN red (1000) -> [h1,s1,h2] @@ -486,7 +486,7 @@ nodes: vrrp: group: 1 priority: 180 - ifindex: 7 + ifindex: 6 ifname: Vlan1001 ipv4: 172.16.1.3/24 name: VLAN blue (1001) -> [s1] @@ -547,9 +547,6 @@ vlans: host_count: 0 id: 1001 neighbors: - - ifname: Vlan1001 - ipv4: 172.16.1.24/24 - node: s1 - gateway: anycast: mac: 0200.cafe.00ff @@ -562,6 +559,9 @@ vlans: ifname: Vlan1001 ipv4: 172.16.1.3/24 node: s2 + - ifname: Vlan1001 + ipv4: 172.16.1.24/24 + node: s1 prefix: allocation: id_based ipv4: 172.16.1.0/24 diff --git a/tests/topology/input/lag-l2.yml b/tests/topology/input/lag-l2.yml index eedd13a76f..fc15bef8a9 100644 --- a/tests/topology/input/lag-l2.yml +++ b/tests/topology/input/lag-l2.yml @@ -11,5 +11,5 @@ nodes: [r1, r2] links: - mtu: 1600 # Test that MTU is copied to member links lag.members: [r1-r2, r1-r2] - prefix: false # port-channel on EOS cannot have IP (quirk candidate) + prefix: false # port-channel on EOS cannot have IP (quirk) stp.enable: false # STP parameters apply to port-channel, not member links From c8ab81de87abdadfdfbf4d8bee7624d2c44bfa06 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 08:34:25 -0600 Subject: [PATCH 17/36] Undo test changes --- tests/errors/vlan-link-error-access-name.log | 9 --------- tests/errors/vlan-link-error-vlan-mode.log | 7 ------- tests/errors/vlan-link-error-vlan-mode.yml | 18 ------------------ tests/errors/vlan-link-error.log | 12 ++++++------ ...ror-access-name.yml => vlan-link-error.yml} | 8 ++++++++ 5 files changed, 14 insertions(+), 40 deletions(-) delete mode 100644 tests/errors/vlan-link-error-access-name.log delete mode 100644 tests/errors/vlan-link-error-vlan-mode.log delete mode 100644 tests/errors/vlan-link-error-vlan-mode.yml rename tests/errors/{vlan-link-error-access-name.yml => vlan-link-error.yml} (84%) diff --git a/tests/errors/vlan-link-error-access-name.log b/tests/errors/vlan-link-error-access-name.log deleted file mode 100644 index d5b8a5d083..0000000000 --- a/tests/errors/vlan-link-error-access-name.log +++ /dev/null @@ -1,9 +0,0 @@ -IncorrectValue in vlan: VLAN wtf used in vlan.access in link links[1] is not defined -... {'_linkname': 'links[1]', 'vlan': {'access': 'wtf'}, 'interfaces': [{'node': -... 'n1'}, {'node': 'n2'}], 'linkindex': 1} -IncorrectValue in vlan: Cannot use more than one global access VLAN on link links[2] -... Found purple,red -IncorrectValue in vlan: VLAN wtf used in vlan.access in node n1 on link links[5] is not defined -... {'_linkname': 'links[5]', 'interfaces': [{'vlan': {'access': 'wtf'}, 'node': -... 'n1'}, {'node': 'n2'}], 'linkindex': 5} -Fatal error in netlab: Cannot proceed beyond this point due to errors, exiting diff --git a/tests/errors/vlan-link-error-vlan-mode.log b/tests/errors/vlan-link-error-vlan-mode.log deleted file mode 100644 index 683413cbe2..0000000000 --- a/tests/errors/vlan-link-error-vlan-mode.log +++ /dev/null @@ -1,7 +0,0 @@ -IncorrectValue in vlan: attribute links[1].vlan.mode has invalid value(s): irb -... valid values are: route -... use 'netlab show attributes --module vlan link' to display valid attributes -IncorrectValue in vlan: attribute links[2].n2.vlan.mode has invalid value(s): irb -... valid values are: route -... use 'netlab show attributes --module vlan' to display valid attributes -Fatal error in netlab: Cannot proceed beyond this point due to errors, exiting diff --git a/tests/errors/vlan-link-error-vlan-mode.yml b/tests/errors/vlan-link-error-vlan-mode.yml deleted file mode 100644 index da9ddbae33..0000000000 --- a/tests/errors/vlan-link-error-vlan-mode.yml +++ /dev/null @@ -1,18 +0,0 @@ -module: [ vlan ] -defaults.device: iosv - -vlans: - red: - -nodes: - n1: - n2: - -links: -- n1: - n2: - vlan.mode: irb # Invalid, only 'route' allowed on link - -- n1: - n2: - vlan.mode: irb # Invalid, only 'route' allowed on interface diff --git a/tests/errors/vlan-link-error.log b/tests/errors/vlan-link-error.log index 5ced1446bc..b74e2df4bb 100644 --- a/tests/errors/vlan-link-error.log +++ b/tests/errors/vlan-link-error.log @@ -1,7 +1,7 @@ -IncorrectValue in vlan: attribute links[2].vlan.mode has invalid value(s): irb -... valid values are: route -... use 'netlab show attributes --module vlan link' to display valid attributes -IncorrectValue in vlan: attribute links[4].n2.vlan.mode has invalid value(s): irb -... valid values are: route -... use 'netlab show attributes --module vlan' to display valid attributes +IncorrectValue in vlan: VLAN wtf used in vlan.access in link links[1] is not defined +... {'_linkname': 'links[1]', 'vlan': {'access': 'wtf'}, 'interfaces': [{'node': +... 'n1'}, {'node': 'n2'}], 'linkindex': 1} +IncorrectValue in vlan: VLAN wtf used in vlan.access in node n1 on link links[7] is not defined +... {'_linkname': 'links[7]', 'interfaces': [{'vlan': {'access': 'wtf'}, 'node': +... 'n1'}, {'node': 'n2'}], 'linkindex': 7} Fatal error in netlab: Cannot proceed beyond this point due to errors, exiting diff --git a/tests/errors/vlan-link-error-access-name.yml b/tests/errors/vlan-link-error.yml similarity index 84% rename from tests/errors/vlan-link-error-access-name.yml rename to tests/errors/vlan-link-error.yml index 597100c546..eb3eb4418f 100644 --- a/tests/errors/vlan-link-error-access-name.yml +++ b/tests/errors/vlan-link-error.yml @@ -18,11 +18,19 @@ links: n2: vlan.access: wtf +- n1: + n2: + vlan.mode: irb + - n1: vlan.access: purple n2: vlan.access: red +- n1: + n2: + vlan.mode: irb + - n1: n2: From 6f51faffa4154cc4a191e3dd91042739750f2fe0 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 08:49:10 -0600 Subject: [PATCH 18/36] Fix _type check --- tests/topology/expected/lag-l2.yml | 12 ++ .../topology/expected/lag-l3-access-vlan.yml | 8 +- tests/topology/expected/lag-l3-vlan-trunk.yml | 12 ++ tests/topology/expected/lag-l3.yml | 12 ++ tests/topology/expected/lag-mlag-m_to_m.yml | 32 ++++- tests/topology/expected/lag-mlag.yml | 114 +++++++++++---- .../expected/node.clone-plugin-lag.yml | 132 ++++++++++++++---- 7 files changed, 269 insertions(+), 53 deletions(-) diff --git a/tests/topology/expected/lag-l2.yml b/tests/topology/expected/lag-l2.yml index 7e250a4335..f2180f41b1 100644 --- a/tests/topology/expected/lag-l2.yml +++ b/tests/topology/expected/lag-l2.yml @@ -58,6 +58,7 @@ nodes: ifname: port-channel1 lag: ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -69,6 +70,11 @@ nodes: ======= linkindex: 1 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1600 name: r1 -> r2 neighbors: @@ -149,6 +155,7 @@ nodes: ifname: port-channel1 lag: ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -160,6 +167,11 @@ nodes: ======= linkindex: 1 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1600 name: r2 -> r1 neighbors: diff --git a/tests/topology/expected/lag-l3-access-vlan.yml b/tests/topology/expected/lag-l3-access-vlan.yml index 13e1f4c1fe..be1497a301 100644 --- a/tests/topology/expected/lag-l3-access-vlan.yml +++ b/tests/topology/expected/lag-l3-access-vlan.yml @@ -73,6 +73,7 @@ nodes: lag: ifindex: 1 lacp: 'off' +<<<<<<< HEAD <<<<<<< HEAD lacp_mode: active <<<<<<< HEAD @@ -83,6 +84,10 @@ nodes: ======= linkindex: 1 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: '[Access VLAN v1] r1 -> r2' neighbors: @@ -282,7 +287,8 @@ nodes: lag: ifindex: 1 lacp: 'off' - linkindex: 1 + lacp_mode: active + mode: 802.3ad mtu: 1500 name: '[Access VLAN v1] r2 -> r1' neighbors: diff --git a/tests/topology/expected/lag-l3-vlan-trunk.yml b/tests/topology/expected/lag-l3-vlan-trunk.yml index 93258d4201..f2e7fb9578 100644 --- a/tests/topology/expected/lag-l3-vlan-trunk.yml +++ b/tests/topology/expected/lag-l3-vlan-trunk.yml @@ -72,6 +72,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -83,6 +84,11 @@ nodes: ======= linkindex: 1 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: r1 -> r2 neighbors: @@ -236,6 +242,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -247,6 +254,11 @@ nodes: ======= linkindex: 1 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: r2 -> r1 neighbors: diff --git a/tests/topology/expected/lag-l3.yml b/tests/topology/expected/lag-l3.yml index 316937930d..56d441dd4c 100644 --- a/tests/topology/expected/lag-l3.yml +++ b/tests/topology/expected/lag-l3.yml @@ -53,6 +53,7 @@ nodes: ipv4: 10.1.0.1/30 lag: ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -64,6 +65,11 @@ nodes: ======= linkindex: 1 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: r1 -> r2 neighbors: @@ -132,6 +138,7 @@ nodes: ipv4: 10.1.0.2/30 lag: ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -143,6 +150,11 @@ nodes: ======= linkindex: 1 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: r2 -> r1 neighbors: diff --git a/tests/topology/expected/lag-mlag-m_to_m.yml b/tests/topology/expected/lag-mlag-m_to_m.yml index 34cca6bd50..bb7ea79222 100644 --- a/tests/topology/expected/lag-mlag-m_to_m.yml +++ b/tests/topology/expected/lag-mlag-m_to_m.yml @@ -165,7 +165,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 6 + _parentindex: 1 ifindex: 10 linkindex: 4 name: a1 -> b1 @@ -178,6 +178,7 @@ nodes: lag: _mlag: true ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -189,6 +190,11 @@ nodes: ======= linkindex: 6 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: a1 -> b1 neighbors: - ifname: port-channel1 @@ -294,6 +300,7 @@ nodes: lag: _mlag: true ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -305,6 +312,11 @@ nodes: ======= linkindex: 3 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: a2 -> b2 neighbors: - ifname: port-channel1 @@ -319,7 +331,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 3 + _parentindex: 1 ifindex: 10 linkindex: 5 name: a2 -> b2 @@ -406,7 +418,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 6 + _parentindex: 1 ifindex: 20 linkindex: 4 name: b1 -> a1 @@ -419,6 +431,7 @@ nodes: lag: _mlag: true ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -430,6 +443,11 @@ nodes: ======= linkindex: 6 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: b1 -> a1 neighbors: - ifname: port-channel1 @@ -522,6 +540,7 @@ nodes: lag: _mlag: true ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -533,6 +552,11 @@ nodes: ======= linkindex: 3 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: b2 -> a2 neighbors: - ifname: port-channel1 @@ -547,7 +571,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 3 + _parentindex: 1 ifindex: 20 linkindex: 5 name: b2 -> a2 diff --git a/tests/topology/expected/lag-mlag.yml b/tests/topology/expected/lag-mlag.yml index 46cdee3529..e9346eed71 100644 --- a/tests/topology/expected/lag-mlag.yml +++ b/tests/topology/expected/lag-mlag.yml @@ -238,6 +238,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -249,6 +250,11 @@ nodes: ======= linkindex: 2 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: '[Access VLAN red] h1 -> [s1,s2]' neighbors: @@ -267,6 +273,7 @@ nodes: ifname: bond2 lag: ifindex: 2 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -278,6 +285,11 @@ nodes: ======= linkindex: 3 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: h1 -> s1 neighbors: @@ -289,7 +301,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 7 mtu: 1500 name: h1 -> s1 @@ -300,7 +312,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 8 mtu: 1500 name: h1 -> s1 @@ -311,7 +323,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 9 mtu: 1500 name: h1 -> s2 @@ -322,7 +334,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 10 mtu: 1500 name: h1 -> s2 @@ -333,7 +345,7 @@ nodes: - ifindex: 5 ifname: eth5 lag: - _parentindex: 3 + _parentindex: 2 linkindex: 11 mtu: 1500 name: h1 -> s1 @@ -344,7 +356,7 @@ nodes: - ifindex: 6 ifname: eth6 lag: - _parentindex: 3 + _parentindex: 2 linkindex: 12 mtu: 1500 name: h1 -> s1 @@ -421,6 +433,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -432,6 +445,11 @@ nodes: ======= linkindex: 4 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: @@ -450,6 +468,7 @@ nodes: ifname: bond2 lag: ifindex: 2 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -461,6 +480,11 @@ nodes: ======= linkindex: 5 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: @@ -478,7 +502,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 13 mtu: 1500 name: h2 -> s1 @@ -489,7 +513,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 14 mtu: 1500 name: h2 -> s1 @@ -500,7 +524,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 15 mtu: 1500 name: h2 -> s2 @@ -511,7 +535,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 16 mtu: 1500 name: h2 -> s2 @@ -522,7 +546,7 @@ nodes: - ifindex: 5 ifname: eth5 lag: - _parentindex: 5 + _parentindex: 2 linkindex: 17 mtu: 1500 name: h2 -> s1 @@ -533,7 +557,7 @@ nodes: - ifindex: 6 ifname: eth6 lag: - _parentindex: 5 + _parentindex: 2 linkindex: 18 mtu: 1500 name: h2 -> s2 @@ -621,6 +645,7 @@ nodes: lag: _mlag: true ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -632,6 +657,11 @@ nodes: ======= linkindex: 2 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: '[Access VLAN red] s1 -> [h1,s2]' neighbors: @@ -650,6 +680,7 @@ nodes: ifname: port-channel2 lag: ifindex: 2 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -661,6 +692,11 @@ nodes: ======= linkindex: 3 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: s1 -> h1 neighbors: @@ -674,6 +710,7 @@ nodes: lag: _mlag: true ifindex: 3 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -685,6 +722,11 @@ nodes: ======= linkindex: 4 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: @@ -704,6 +746,7 @@ nodes: lag: _mlag: true ifindex: 4 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -715,6 +758,11 @@ nodes: ======= linkindex: 5 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: @@ -747,7 +795,7 @@ nodes: ifindex: 3 ifname: ethernet1/1/3 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 7 mtu: 1500 name: s1 -> h1 @@ -760,7 +808,7 @@ nodes: ifindex: 4 ifname: ethernet1/1/4 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 8 mtu: 1500 name: s1 -> h1 @@ -773,7 +821,7 @@ nodes: ifindex: 5 ifname: ethernet1/1/5 lag: - _parentindex: 3 + _parentindex: 2 linkindex: 11 mtu: 1500 name: s1 -> h1 @@ -786,7 +834,7 @@ nodes: ifindex: 6 ifname: ethernet1/1/6 lag: - _parentindex: 3 + _parentindex: 2 linkindex: 12 mtu: 1500 name: s1 -> h1 @@ -799,7 +847,7 @@ nodes: ifindex: 7 ifname: ethernet1/1/7 lag: - _parentindex: 4 + _parentindex: 3 linkindex: 13 mtu: 1500 name: s1 -> h2 @@ -812,7 +860,7 @@ nodes: ifindex: 8 ifname: ethernet1/1/8 lag: - _parentindex: 4 + _parentindex: 3 linkindex: 14 mtu: 1500 name: s1 -> h2 @@ -825,7 +873,7 @@ nodes: ifindex: 9 ifname: ethernet1/1/9 lag: - _parentindex: 5 + _parentindex: 4 linkindex: 17 mtu: 1500 name: s1 -> h2 @@ -913,6 +961,7 @@ nodes: lag: _mlag: true ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -924,6 +973,11 @@ nodes: ======= linkindex: 2 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: '[Access VLAN red] s2 -> [h1,s1]' neighbors: @@ -943,6 +997,7 @@ nodes: lag: _mlag: true ifindex: 3 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -954,6 +1009,11 @@ nodes: ======= linkindex: 4 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: @@ -973,6 +1033,7 @@ nodes: lag: _mlag: true ifindex: 4 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -984,6 +1045,11 @@ nodes: ======= linkindex: 5 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: @@ -1016,7 +1082,7 @@ nodes: ifindex: 3 ifname: ethernet1/1/3 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 9 mtu: 1500 name: s2 -> h1 @@ -1029,7 +1095,7 @@ nodes: ifindex: 4 ifname: ethernet1/1/4 lag: - _parentindex: 2 + _parentindex: 1 linkindex: 10 mtu: 1500 name: s2 -> h1 @@ -1042,7 +1108,7 @@ nodes: ifindex: 5 ifname: ethernet1/1/5 lag: - _parentindex: 4 + _parentindex: 3 linkindex: 15 mtu: 1500 name: s2 -> h2 @@ -1055,7 +1121,7 @@ nodes: ifindex: 6 ifname: ethernet1/1/6 lag: - _parentindex: 4 + _parentindex: 3 linkindex: 16 mtu: 1500 name: s2 -> h2 @@ -1068,7 +1134,7 @@ nodes: ifindex: 7 ifname: ethernet1/1/7 lag: - _parentindex: 5 + _parentindex: 4 linkindex: 18 mtu: 1500 name: s2 -> h2 diff --git a/tests/topology/expected/node.clone-plugin-lag.yml b/tests/topology/expected/node.clone-plugin-lag.yml index 7bd1739123..da914ba296 100644 --- a/tests/topology/expected/node.clone-plugin-lag.yml +++ b/tests/topology/expected/node.clone-plugin-lag.yml @@ -213,6 +213,7 @@ nodes: ifname: bond8 lag: ifindex: 8 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -224,6 +225,11 @@ nodes: ======= linkindex: 2 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: h-01 -> r1 neighbors: - ifname: port-channel8 @@ -235,6 +241,7 @@ nodes: ifname: bond9 lag: ifindex: 9 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -246,6 +253,11 @@ nodes: ======= linkindex: 4 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: h-01 -> r2 neighbors: - ifname: port-channel1 @@ -256,7 +268,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 2 + _parentindex: 8 linkindex: 8 name: h-01 -> r1 neighbors: @@ -266,7 +278,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 2 + _parentindex: 8 linkindex: 9 name: h-01 -> r1 neighbors: @@ -276,7 +288,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 4 + _parentindex: 9 linkindex: 12 name: h-01 -> r2 neighbors: @@ -286,7 +298,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 4 + _parentindex: 9 linkindex: 13 name: h-01 -> r2 neighbors: @@ -322,6 +334,7 @@ nodes: ifname: bond9 lag: ifindex: 9 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -333,6 +346,11 @@ nodes: ======= linkindex: 3 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: h-02 -> r1 neighbors: - ifname: port-channel9 @@ -344,6 +362,7 @@ nodes: ifname: bond10 lag: ifindex: 10 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -355,6 +374,11 @@ nodes: ======= linkindex: 5 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: h-02 -> r2 neighbors: - ifname: port-channel2 @@ -365,7 +389,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 3 + _parentindex: 9 linkindex: 10 name: h-02 -> r1 neighbors: @@ -375,7 +399,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 3 + _parentindex: 9 linkindex: 11 name: h-02 -> r1 neighbors: @@ -385,7 +409,7 @@ nodes: - ifindex: 3 ifname: eth3 lag: - _parentindex: 5 + _parentindex: 10 linkindex: 14 name: h-02 -> r2 neighbors: @@ -395,7 +419,7 @@ nodes: - ifindex: 4 ifname: eth4 lag: - _parentindex: 5 + _parentindex: 10 linkindex: 15 name: h-02 -> r2 neighbors: @@ -431,6 +455,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -444,6 +469,11 @@ nodes: ======= linkindex: 6 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: '[Access VLAN red] h2-01 -> [r1,r2]' ======= name: h2-01 -> [r1,r2] @@ -466,7 +496,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 6 + _parentindex: 1 linkindex: 16 name: h2-01 -> r1 neighbors: @@ -476,7 +506,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 6 + _parentindex: 1 linkindex: 17 name: h2-01 -> r2 neighbors: @@ -542,6 +572,7 @@ nodes: ifname: bond1 lag: ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -555,6 +586,11 @@ nodes: ======= linkindex: 7 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: '[Access VLAN red] h2-02 -> [r1,r2]' ======= name: h2-02 -> [r1,r2] @@ -577,7 +613,7 @@ nodes: - ifindex: 1 ifname: eth1 lag: - _parentindex: 7 + _parentindex: 1 linkindex: 18 name: h2-02 -> r1 neighbors: @@ -587,7 +623,7 @@ nodes: - ifindex: 2 ifname: eth2 lag: - _parentindex: 7 + _parentindex: 1 linkindex: 19 name: h2-02 -> r2 neighbors: @@ -668,6 +704,7 @@ nodes: ifname: port-channel8 lag: ifindex: 8 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -679,6 +716,11 @@ nodes: ======= linkindex: 2 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: r1 -> h-01 neighbors: - ifname: bond8 @@ -690,6 +732,7 @@ nodes: ifname: port-channel9 lag: ifindex: 9 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -701,6 +744,11 @@ nodes: ======= linkindex: 3 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: r1 -> h-02 neighbors: - ifname: bond9 @@ -713,6 +761,7 @@ nodes: lag: _mlag: true ifindex: 10 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -726,6 +775,11 @@ nodes: ======= linkindex: 6 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: '[Access VLAN red] r1 -> [h2-01,r2]' ======= name: r1 -> [h2-01,r2] @@ -750,6 +804,7 @@ nodes: lag: _mlag: true ifindex: 11 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -763,6 +818,11 @@ nodes: ======= linkindex: 7 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: '[Access VLAN red] r1 -> [h2-02,r2]' ======= name: r1 -> [h2-02,r2] @@ -785,7 +845,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 2 + _parentindex: 8 linkindex: 8 name: r1 -> h-01 neighbors: @@ -795,7 +855,7 @@ nodes: - ifindex: 3 ifname: Ethernet3 lag: - _parentindex: 2 + _parentindex: 8 linkindex: 9 name: r1 -> h-01 neighbors: @@ -805,7 +865,7 @@ nodes: - ifindex: 4 ifname: Ethernet4 lag: - _parentindex: 3 + _parentindex: 9 linkindex: 10 name: r1 -> h-02 neighbors: @@ -815,7 +875,7 @@ nodes: - ifindex: 5 ifname: Ethernet5 lag: - _parentindex: 3 + _parentindex: 9 linkindex: 11 name: r1 -> h-02 neighbors: @@ -825,7 +885,7 @@ nodes: - ifindex: 6 ifname: Ethernet6 lag: - _parentindex: 6 + _parentindex: 10 linkindex: 16 name: r1 -> h2-01 neighbors: @@ -835,7 +895,7 @@ nodes: - ifindex: 7 ifname: Ethernet7 lag: - _parentindex: 7 + _parentindex: 11 linkindex: 18 name: r1 -> h2-02 neighbors: @@ -916,7 +976,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 6 + _parentindex: 10 linkindex: 17 name: r2 -> h2-01 neighbors: @@ -926,7 +986,7 @@ nodes: - ifindex: 3 ifname: Ethernet3 lag: - _parentindex: 7 + _parentindex: 11 linkindex: 19 name: r2 -> h2-02 neighbors: @@ -963,7 +1023,7 @@ nodes: - ifindex: 6 ifname: Ethernet6 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 12 name: r2 -> h-01 neighbors: @@ -973,7 +1033,7 @@ nodes: - ifindex: 7 ifname: Ethernet7 lag: - _parentindex: 4 + _parentindex: 1 linkindex: 13 name: r2 -> h-01 neighbors: @@ -983,7 +1043,7 @@ nodes: - ifindex: 8 ifname: Ethernet8 lag: - _parentindex: 5 + _parentindex: 2 linkindex: 14 name: r2 -> h-02 neighbors: @@ -993,7 +1053,7 @@ nodes: - ifindex: 9 ifname: Ethernet9 lag: - _parentindex: 5 + _parentindex: 2 linkindex: 15 name: r2 -> h-02 neighbors: @@ -1004,6 +1064,7 @@ nodes: ifname: port-channel1 lag: ifindex: 1 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -1015,6 +1076,11 @@ nodes: ======= linkindex: 4 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: r2 -> h-01 neighbors: - ifname: bond9 @@ -1026,6 +1092,7 @@ nodes: ifname: port-channel2 lag: ifindex: 2 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -1037,6 +1104,11 @@ nodes: ======= linkindex: 5 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: r2 -> h-02 neighbors: - ifname: bond10 @@ -1049,6 +1121,7 @@ nodes: lag: _mlag: true ifindex: 10 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -1062,6 +1135,11 @@ nodes: ======= linkindex: 6 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: '[Access VLAN red] r2 -> [h2-01,r1]' ======= name: r2 -> [h2-01,r1] @@ -1086,6 +1164,7 @@ nodes: lag: _mlag: true ifindex: 11 +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -1099,6 +1178,11 @@ nodes: ======= linkindex: 7 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) +======= + lacp: fast + lacp_mode: active + mode: 802.3ad +>>>>>>> 92dd8acd0 (Fix _type check) name: '[Access VLAN red] r2 -> [h2-02,r1]' ======= name: r2 -> [h2-02,r1] From 13f0b25ec74184a8dbc38148d952280dcfeb7698 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 08:51:33 -0600 Subject: [PATCH 19/36] Rename attribute --- netsim/modules/lag.py | 2 +- netsim/modules/lag.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index cc631aef68..c09a91ed0c 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -39,7 +39,7 @@ def populate_peerlink_id_set(topology: Box) -> None: """ def create_l2_link_base(l: Box, topology: Box) -> Box: l2_linkdata = data.get_box({ 'type': "p2p", 'prefix': False, 'lag': {} }) # Construct an L2 member link - for a in list(topology.defaults.lag.attributes.lag_l2_ifattr): + for a in list(topology.defaults.lag.attributes.lag_l2_linkattr): if a in l: l2_linkdata[a] = l[a] return l2_linkdata diff --git a/netsim/modules/lag.yml b/netsim/modules/lag.yml index 07f3252fff..7ad27e22fa 100644 --- a/netsim/modules/lag.yml +++ b/netsim/modules/lag.yml @@ -39,7 +39,7 @@ attributes: # _mlag: bool # Copy only these L2 attributes into LAG physical link members - lag_l2_ifattr: + lag_l2_linkattr: mtu: bandwidth: From e37c0ede13e229d17df5dc86d76fbd909c1f2ea5 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 09:48:05 -0600 Subject: [PATCH 20/36] * Add attribute inheritance tests to L2 test case * Fix interface attribute inheritance --- netsim/modules/lag.py | 10 +- tests/errors/vlan-trunk-attribute-error.log | 4 + tests/errors/vlan-trunk-attribute-error.yml | 2 +- tests/topology/expected/lag-l2.yml | 300 +++++++++++++++--- tests/topology/expected/lag-mlag-m_to_m.yml | 40 ++- .../expected/node.clone-plugin-lag.yml | 33 +- tests/topology/input/lag-l2.yml | 29 +- 7 files changed, 355 insertions(+), 63 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index c09a91ed0c..75d53c2aa2 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -240,10 +240,12 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple for node in node_count: ifatts = data.get_box({ 'node': node, '_type': 'lag', 'lag': {} }) # use '_type', not 'type' (!) for m in members: # Collect attributes from member links - if node in [ i.node for i in m.interfaces ]:# ...in which is involved - ifatts = ifatts + { k:v for k,v in m.items() if k not in skip_atts } - if dual_mlag: - ifatts._peer = [ i.node for i in m.interfaces if i.node!=node ][0] + node_ifs = [ i for i in m.interfaces if i.node==node ] + if not node_ifs: # ...in which is involved + continue + ifatts = ifatts + { k:v for k,v in m.items() if k not in skip_atts } + node_ifs[0] + if dual_mlag: + ifatts._peer = [ i.node for i in m.interfaces if i.node!=node ][0] if not 'vlan' in ifatts: # VLAN on interface overrides link IP settings ifatts = link_atts + ifatts # include vlan, gateway or prefix settings from link diff --git a/tests/errors/vlan-trunk-attribute-error.log b/tests/errors/vlan-trunk-attribute-error.log index e69de29bb2..61a937604c 100644 --- a/tests/errors/vlan-trunk-attribute-error.log +++ b/tests/errors/vlan-trunk-attribute-error.log @@ -0,0 +1,4 @@ +IncorrectAttr in links: links[1].blue uses an attribute from module bgp which is not enabled in topology +IncorrectAttr in links: links[1].blue.n1 uses an attribute from module bgp which is not enabled in nodes.n1 +IncorrectAttr in links: links[1].blue.n2 uses an attribute from module bgp which is not enabled in nodes.n2 +Fatal error in netlab: Cannot proceed beyond this point due to errors, exiting diff --git a/tests/errors/vlan-trunk-attribute-error.yml b/tests/errors/vlan-trunk-attribute-error.yml index 481f3fb6a0..5b0af5115f 100644 --- a/tests/errors/vlan-trunk-attribute-error.yml +++ b/tests/errors/vlan-trunk-attribute-error.yml @@ -13,4 +13,4 @@ links: vlan.trunk: red: blue: - bgp.as: 65000 # 2 issues here: bgp is not an enabled module, and "bgp.as" is not a valid interface attribute for irb vlans + bgp.as: 65000 diff --git a/tests/topology/expected/lag-l2.yml b/tests/topology/expected/lag-l2.yml index f2180f41b1..a528e5a99b 100644 --- a/tests/topology/expected/lag-l2.yml +++ b/tests/topology/expected/lag-l2.yml @@ -8,14 +8,14 @@ links: - _linkname: links[1].lag[1] interfaces: - ifindex: 1 - ifname: Ethernet1 + ifname: ethernet1/1/1 node: r1 - ifindex: 1 - ifname: Ethernet1 + ifname: ethernet1/1/1 node: r2 lag: _parentindex: 1 - linkindex: 2 + linkindex: 4 mtu: 1600 node_count: 2 prefix: false @@ -23,18 +23,78 @@ links: - _linkname: links[1].lag[2] interfaces: - ifindex: 2 - ifname: Ethernet2 + ifname: ethernet1/1/2 node: r1 - ifindex: 2 - ifname: Ethernet2 + ifname: ethernet1/1/2 node: r2 lag: _parentindex: 1 - linkindex: 3 + linkindex: 5 mtu: 1600 node_count: 2 prefix: false type: p2p +- _linkname: links[2].lag[1] + interfaces: + - ifindex: 3 + ifname: ethernet1/1/3 + node: r1 + - ifindex: 3 + ifname: ethernet1/1/3 + node: r2 + lag: + _parentindex: 2 + linkindex: 6 + node_count: 2 + prefix: false + type: p2p +- _linkname: links[2].lag[2] + interfaces: + - ifindex: 4 + ifname: ethernet1/1/4 + node: r1 + - ifindex: 4 + ifname: ethernet1/1/4 + node: r2 + lag: + _parentindex: 2 + linkindex: 7 + node_count: 2 + prefix: false + type: p2p +- _linkname: links[3].lag[1] + interfaces: + - ifindex: 5 + ifname: ethernet1/1/5 + node: r1 + - ifindex: 5 + ifname: ethernet1/1/5 + lag: + lacp: fast + node: r2 + lag: + _parentindex: 3 + linkindex: 8 + node_count: 2 + prefix: false + type: p2p +- _linkname: links[3].lag[2] + interfaces: + - ifindex: 6 + ifname: ethernet1/1/6 + node: r1 + - ifindex: 6 + ifname: ethernet1/1/6 + lag: + lacp: fast + node: r2 + lag: + _parentindex: 3 + linkindex: 9 + node_count: 2 + prefix: false + type: p2p module: - lag - vlan @@ -44,13 +104,10 @@ nodes: r1: af: ipv4: true - box: ceos:4.32.1F + box: vrnetlab/vr-ftosv clab: - env: - CLAB_MGMT_VRF: management - INTFTYPE: et - kind: ceos - device: eos + kind: vr-ftosv + device: dellos10 hostname: clab-input-r1 id: 1 interfaces: @@ -90,30 +147,110 @@ nodes: enable: false type: lag virtual_interface: true + - ifindex: 30001 + ifname: port-channel2 + lag: + ifindex: 2 + lacp: slow + lacp_mode: active + mode: 802.3ad + mtu: 1500 + name: r1 -> r2 + neighbors: + - ifname: port-channel2 + node: r2 + type: lag + virtual_interface: true + - ifindex: 30002 + ifname: port-channel3 + lag: + ifindex: 3 + lacp: fast + lacp_mode: active + mode: 802.3ad + mtu: 1500 + name: r1 -> r2 + neighbors: + - ifname: port-channel3 + node: r2 + type: lag + virtual_interface: true - clab: - name: et1 + name: eth1 ifindex: 1 - ifname: Ethernet1 + ifname: ethernet1/1/1 lag: _parentindex: 1 - linkindex: 2 + linkindex: 4 mtu: 1600 name: r1 -> r2 neighbors: - - ifname: Ethernet1 + - ifname: ethernet1/1/1 node: r2 type: p2p - clab: - name: et2 + name: eth2 ifindex: 2 - ifname: Ethernet2 + ifname: ethernet1/1/2 lag: _parentindex: 1 - linkindex: 3 + linkindex: 5 mtu: 1600 name: r1 -> r2 neighbors: - - ifname: Ethernet2 + - ifname: ethernet1/1/2 + node: r2 + type: p2p + - clab: + name: eth3 + ifindex: 3 + ifname: ethernet1/1/3 + lag: + _parentindex: 2 + linkindex: 6 + mtu: 1500 + name: r1 -> r2 + neighbors: + - ifname: ethernet1/1/3 + node: r2 + type: p2p + - clab: + name: eth4 + ifindex: 4 + ifname: ethernet1/1/4 + lag: + _parentindex: 2 + linkindex: 7 + mtu: 1500 + name: r1 -> r2 + neighbors: + - ifname: ethernet1/1/4 + node: r2 + type: p2p + - clab: + name: eth5 + ifindex: 5 + ifname: ethernet1/1/5 + lag: + _parentindex: 3 + linkindex: 8 + mtu: 1500 + name: r1 -> r2 + neighbors: + - ifname: ethernet1/1/5 + node: r2 + type: p2p + - clab: + name: eth6 + ifindex: 6 + ifname: ethernet1/1/6 + lag: + _parentindex: 3 + linkindex: 9 + mtu: 1500 + name: r1 -> r2 + neighbors: + - ifname: ethernet1/1/6 node: r2 type: p2p lag: @@ -121,19 +258,20 @@ nodes: lacp_mode: active loopback: ifindex: 0 - ifname: Loopback0 + ifname: loopback0 ipv4: 10.0.0.1/32 neighbors: [] type: loopback virtual_interface: true mgmt: - ifname: Management0 + ifname: mgmt1/1/1 ipv4: 192.168.121.101 mac: 08:4f:a9:00:00:01 module: - lag - vlan - stp + mtu: 1500 name: r1 stp: enable: true @@ -141,13 +279,10 @@ nodes: r2: af: ipv4: true - box: ceos:4.32.1F + box: vrnetlab/vr-ftosv clab: - env: - CLAB_MGMT_VRF: management - INTFTYPE: et - kind: ceos - device: eos + kind: vr-ftosv + device: dellos10 hostname: clab-input-r2 id: 2 interfaces: @@ -156,6 +291,7 @@ nodes: lag: ifindex: 1 <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD lacp: fast lacp_mode: active @@ -169,6 +305,9 @@ nodes: >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) ======= lacp: fast +======= + lacp: slow +>>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) lacp_mode: active mode: 802.3ad >>>>>>> 92dd8acd0 (Fix _type check) @@ -187,50 +326,133 @@ nodes: enable: false type: lag virtual_interface: true + - ifindex: 30001 + ifname: port-channel2 + lag: + ifindex: 2 + lacp: slow + lacp_mode: active + mode: 802.3ad + mtu: 1500 + name: r2 -> r1 + neighbors: + - ifname: port-channel2 + node: r1 + type: lag + virtual_interface: true + - ifindex: 30002 + ifname: port-channel3 + lag: + ifindex: 3 + lacp: fast + lacp_mode: active + mode: 802.3ad + mtu: 1500 + name: r2 -> r1 + neighbors: + - ifname: port-channel3 + node: r1 + type: lag + virtual_interface: true - clab: - name: et1 + name: eth1 ifindex: 1 - ifname: Ethernet1 + ifname: ethernet1/1/1 lag: _parentindex: 1 - linkindex: 2 + linkindex: 4 mtu: 1600 name: r2 -> r1 neighbors: - - ifname: Ethernet1 + - ifname: ethernet1/1/1 node: r1 type: p2p - clab: - name: et2 + name: eth2 ifindex: 2 - ifname: Ethernet2 + ifname: ethernet1/1/2 lag: _parentindex: 1 - linkindex: 3 + linkindex: 5 mtu: 1600 name: r2 -> r1 neighbors: - - ifname: Ethernet2 + - ifname: ethernet1/1/2 + node: r1 + type: p2p + - clab: + name: eth3 + ifindex: 3 + ifname: ethernet1/1/3 + lag: + _parentindex: 2 + linkindex: 6 + mtu: 1500 + name: r2 -> r1 + neighbors: + - ifname: ethernet1/1/3 + node: r1 + type: p2p + - clab: + name: eth4 + ifindex: 4 + ifname: ethernet1/1/4 + lag: + _parentindex: 2 + linkindex: 7 + mtu: 1500 + name: r2 -> r1 + neighbors: + - ifname: ethernet1/1/4 + node: r1 + type: p2p + - clab: + name: eth5 + ifindex: 5 + ifname: ethernet1/1/5 + lag: + _parentindex: 3 + lacp: fast + linkindex: 8 + mtu: 1500 + name: r2 -> r1 + neighbors: + - ifname: ethernet1/1/5 + node: r1 + type: p2p + - clab: + name: eth6 + ifindex: 6 + ifname: ethernet1/1/6 + lag: + _parentindex: 3 + lacp: fast + linkindex: 9 + mtu: 1500 + name: r2 -> r1 + neighbors: + - ifname: ethernet1/1/6 node: r1 type: p2p lag: - lacp: fast + lacp: slow lacp_mode: active loopback: ifindex: 0 - ifname: Loopback0 + ifname: loopback0 ipv4: 10.0.0.2/32 neighbors: [] type: loopback virtual_interface: true mgmt: - ifname: Management0 + ifname: mgmt1/1/1 ipv4: 192.168.121.102 mac: 08:4f:a9:00:00:02 module: - lag - vlan - stp + mtu: 1500 name: r2 stp: enable: true diff --git a/tests/topology/expected/lag-mlag-m_to_m.yml b/tests/topology/expected/lag-mlag-m_to_m.yml index bb7ea79222..ca8f302675 100644 --- a/tests/topology/expected/lag-mlag-m_to_m.yml +++ b/tests/topology/expected/lag-mlag-m_to_m.yml @@ -165,7 +165,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 1 + _parentindex: 10 ifindex: 10 linkindex: 4 name: a1 -> b1 @@ -174,9 +174,10 @@ nodes: node: b1 type: p2p - ifindex: 30000 - ifname: port-channel1 + ifname: port-channel10 lag: _mlag: true +<<<<<<< HEAD ifindex: 1 <<<<<<< HEAD <<<<<<< HEAD @@ -191,13 +192,16 @@ nodes: linkindex: 6 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) ======= +======= + ifindex: 10 +>>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) lacp: fast lacp_mode: active mode: 802.3ad >>>>>>> 92dd8acd0 (Fix _type check) name: a1 -> b1 neighbors: - - ifname: port-channel1 + - ifname: port-channel20 node: b1 type: lag virtual_interface: true @@ -296,9 +300,10 @@ nodes: node: a1 type: p2p - ifindex: 30000 - ifname: port-channel1 + ifname: port-channel10 lag: _mlag: true +<<<<<<< HEAD ifindex: 1 <<<<<<< HEAD <<<<<<< HEAD @@ -313,13 +318,16 @@ nodes: linkindex: 3 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) ======= +======= + ifindex: 10 +>>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) lacp: fast lacp_mode: active mode: 802.3ad >>>>>>> 92dd8acd0 (Fix _type check) name: a2 -> b2 neighbors: - - ifname: port-channel1 + - ifname: port-channel20 node: b2 type: lag virtual_interface: true @@ -331,7 +339,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 1 + _parentindex: 10 ifindex: 10 linkindex: 5 name: a2 -> b2 @@ -418,7 +426,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 1 + _parentindex: 20 ifindex: 20 linkindex: 4 name: b1 -> a1 @@ -427,9 +435,10 @@ nodes: node: a1 type: p2p - ifindex: 30000 - ifname: port-channel1 + ifname: port-channel20 lag: _mlag: true +<<<<<<< HEAD ifindex: 1 <<<<<<< HEAD <<<<<<< HEAD @@ -444,13 +453,16 @@ nodes: linkindex: 6 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) ======= +======= + ifindex: 20 +>>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) lacp: fast lacp_mode: active mode: 802.3ad >>>>>>> 92dd8acd0 (Fix _type check) name: b1 -> a1 neighbors: - - ifname: port-channel1 + - ifname: port-channel10 node: a1 type: lag virtual_interface: true @@ -536,9 +548,10 @@ nodes: node: b1 type: p2p - ifindex: 30000 - ifname: port-channel1 + ifname: port-channel20 lag: _mlag: true +<<<<<<< HEAD ifindex: 1 <<<<<<< HEAD <<<<<<< HEAD @@ -553,13 +566,16 @@ nodes: linkindex: 3 >>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) ======= +======= + ifindex: 20 +>>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) lacp: fast lacp_mode: active mode: 802.3ad >>>>>>> 92dd8acd0 (Fix _type check) name: b2 -> a2 neighbors: - - ifname: port-channel1 + - ifname: port-channel10 node: a2 type: lag virtual_interface: true @@ -571,7 +587,7 @@ nodes: - ifindex: 2 ifname: Ethernet2 lag: - _parentindex: 1 + _parentindex: 20 ifindex: 20 linkindex: 5 name: b2 -> a2 diff --git a/tests/topology/expected/node.clone-plugin-lag.yml b/tests/topology/expected/node.clone-plugin-lag.yml index da914ba296..5eed3f3888 100644 --- a/tests/topology/expected/node.clone-plugin-lag.yml +++ b/tests/topology/expected/node.clone-plugin-lag.yml @@ -1030,6 +1030,20 @@ nodes: - ifname: eth3 node: h-01 type: p2p + - ifindex: 7 + ifname: port-channel1 + lag: + ifindex: 1 + lacp: fast + lacp_mode: active + mode: 802.3ad + name: r2 -> h-01 + neighbors: + - ifname: bond9 + node: h-01 + pool: l2only + type: lag + virtual_interface: true - ifindex: 7 ifname: Ethernet7 lag: @@ -1051,6 +1065,7 @@ nodes: node: h-02 type: p2p - ifindex: 9 +<<<<<<< HEAD ifname: Ethernet9 lag: _parentindex: 2 @@ -1089,6 +1104,8 @@ nodes: type: lag virtual_interface: true - ifindex: 30001 +======= +>>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) ifname: port-channel2 lag: ifindex: 2 @@ -1116,7 +1133,17 @@ nodes: pool: l2only type: lag virtual_interface: true - - ifindex: 30002 + - ifindex: 9 + ifname: Ethernet9 + lag: + _parentindex: 2 + linkindex: 15 + name: r2 -> h-02 + neighbors: + - ifname: eth4 + node: h-02 + type: p2p + - ifindex: 30000 ifname: port-channel10 lag: _mlag: true @@ -1159,7 +1186,7 @@ nodes: vlan: access: red access_id: 1000 - - ifindex: 30003 + - ifindex: 30001 ifname: port-channel11 lag: _mlag: true @@ -1206,7 +1233,7 @@ nodes: lacp: fast lacp_mode: active libvirt: - nic_adapter_count: 10 + nic_adapter_count: 12 loopback: ifindex: 0 ifname: Loopback0 diff --git a/tests/topology/input/lag-l2.yml b/tests/topology/input/lag-l2.yml index fc15bef8a9..dccb13f766 100644 --- a/tests/topology/input/lag-l2.yml +++ b/tests/topology/input/lag-l2.yml @@ -1,15 +1,36 @@ # # Basic L2 LAG example - single lag with 2 member links and custom MTU and STP settings # - defaults: provider: clab - device: eos + device: dellos10 module: [lag, stp, vlan] -nodes: [r1, r2] + +addressing: + p2p: + ipv4: False + +nodes: + r1: + + r2: + lag.lacp: slow # Test node level lag attribute + links: - mtu: 1600 # Test that MTU is copied to member links lag.members: [r1-r2, r1-r2] - prefix: false # port-channel on EOS cannot have IP (quirk) stp.enable: false # STP parameters apply to port-channel, not member links + +- lag: + members: [r1-r2, r1-r2] + lacp: slow # Link level override + +- lag: + members: + - r1: + r2: + lag.lacp: fast # Interface level override + - r1: + r2: + lag.lacp: fast # Interface level override (one suffices, last one wins) From 6c8b6bff7e7418abcb5d9712305fb3e4977adf76 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 10:05:30 -0600 Subject: [PATCH 21/36] Remove unused attributes from member interfaces --- netsim/modules/lag.py | 2 ++ tests/topology/expected/lag-l2.yml | 6 ------ tests/topology/expected/lag-mlag-m_to_m.yml | 12 ------------ 3 files changed, 2 insertions(+), 18 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 75d53c2aa2..2bdf1347e3 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -178,10 +178,12 @@ def create_lag_member_links(l: Box, topology: Box) -> bool: l2_linkdata = create_l2_link_base(l,topology) keep_attr = list(topology.defaults.lag.attributes.lag_member_linkattr) + keep_if = ['node','ifindex'] # Keep only 'node' and optional 'ifindex' for member in members: member = l2_linkdata + member # Copy L2 data into member link member = data.get_box({ k:v for k,v in member.items() if k in keep_attr }) # Filter out things not needed member.linkindex = len(topology.links)+1 + member.interfaces = [ { k:v for k,v in i.items() if k in keep_if } for i in member.interfaces ] member.lag._parentindex = l.linkindex # Keep track of parent, updated to lag.ifindex below if log.debug_active('lag'): print(f'LAG create_lag_member_links -> adding link {member}') diff --git a/tests/topology/expected/lag-l2.yml b/tests/topology/expected/lag-l2.yml index a528e5a99b..5b4750f311 100644 --- a/tests/topology/expected/lag-l2.yml +++ b/tests/topology/expected/lag-l2.yml @@ -70,8 +70,6 @@ links: node: r1 - ifindex: 5 ifname: ethernet1/1/5 - lag: - lacp: fast node: r2 lag: _parentindex: 3 @@ -86,8 +84,6 @@ links: node: r1 - ifindex: 6 ifname: ethernet1/1/6 - lag: - lacp: fast node: r2 lag: _parentindex: 3 @@ -412,7 +408,6 @@ nodes: ifname: ethernet1/1/5 lag: _parentindex: 3 - lacp: fast linkindex: 8 mtu: 1500 name: r2 -> r1 @@ -426,7 +421,6 @@ nodes: ifname: ethernet1/1/6 lag: _parentindex: 3 - lacp: fast linkindex: 9 mtu: 1500 name: r2 -> r1 diff --git a/tests/topology/expected/lag-mlag-m_to_m.yml b/tests/topology/expected/lag-mlag-m_to_m.yml index ca8f302675..4758d1430e 100644 --- a/tests/topology/expected/lag-mlag-m_to_m.yml +++ b/tests/topology/expected/lag-mlag-m_to_m.yml @@ -55,13 +55,9 @@ links: interfaces: - ifindex: 2 ifname: Ethernet2 - lag: - ifindex: 10 node: a1 - ifindex: 2 ifname: Ethernet2 - lag: - ifindex: 20 node: b1 lag: _parentindex: 6 @@ -73,13 +69,9 @@ links: interfaces: - ifindex: 2 ifname: Ethernet2 - lag: - ifindex: 10 node: a2 - ifindex: 2 ifname: Ethernet2 - lag: - ifindex: 20 node: b2 lag: _parentindex: 3 @@ -166,7 +158,6 @@ nodes: ifname: Ethernet2 lag: _parentindex: 10 - ifindex: 10 linkindex: 4 name: a1 -> b1 neighbors: @@ -340,7 +331,6 @@ nodes: ifname: Ethernet2 lag: _parentindex: 10 - ifindex: 10 linkindex: 5 name: a2 -> b2 neighbors: @@ -427,7 +417,6 @@ nodes: ifname: Ethernet2 lag: _parentindex: 20 - ifindex: 20 linkindex: 4 name: b1 -> a1 neighbors: @@ -588,7 +577,6 @@ nodes: ifname: Ethernet2 lag: _parentindex: 20 - ifindex: 20 linkindex: 5 name: b2 -> a2 neighbors: From c5fe939fc65a5bc323eadb8f328e5693b32ec0b5 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 10:06:55 -0600 Subject: [PATCH 22/36] Add missing returns --- netsim/modules/lag.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 2bdf1347e3..6a2559878c 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -326,9 +326,9 @@ def process_lag_link(link: Box, topology: Box) -> bool: log.error(f'must define "lag.members" on LAG link {link._linkname}', category=log.IncorrectAttr, module='lag') - return + return False elif not _types.must_be_list(parent=link.lag,key='members',path=link._linkname,module='lag'): - return + return False peerlink_id = link.get(PEERLINK_ID_ATT,None) # Turn internal MLAG links into p2p links if peerlink_id: From ee234dcd670ce733f6146205761c6b20d6f1feca Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 10:39:21 -0600 Subject: [PATCH 23/36] Cleanup attribute copying --- netsim/modules/lag.py | 3 +-- netsim/modules/lag.yml | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 6a2559878c..ee17a46fa9 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -180,8 +180,7 @@ def create_lag_member_links(l: Box, topology: Box) -> bool: keep_attr = list(topology.defaults.lag.attributes.lag_member_linkattr) keep_if = ['node','ifindex'] # Keep only 'node' and optional 'ifindex' for member in members: - member = l2_linkdata + member # Copy L2 data into member link - member = data.get_box({ k:v for k,v in member.items() if k in keep_attr }) # Filter out things not needed + member = l2_linkdata + { k:v for k,v in member.items() if k in keep_attr } member.linkindex = len(topology.links)+1 member.interfaces = [ { k:v for k,v in i.items() if k in keep_if } for i in member.interfaces ] member.lag._parentindex = l.linkindex # Keep track of parent, updated to lag.ifindex below diff --git a/netsim/modules/lag.yml b/netsim/modules/lag.yml index 7ad27e22fa..a4d63b0ccd 100644 --- a/netsim/modules/lag.yml +++ b/netsim/modules/lag.yml @@ -50,7 +50,6 @@ attributes: _linkname: interfaces: prefix: - type: # Don't copy these attributes to lag interfaces lag_no_propagate: From b59ee838c6a118a8b676703a79705805022c26f5 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 11:00:17 -0600 Subject: [PATCH 24/36] * Remove MTU from lag interfaces * Expand L3 test case to include gateway and custom IP settings --- netsim/modules/lag.py | 10 +- netsim/modules/lag.yml | 3 +- tests/topology/expected/lag-l2.yml | 10 +- .../topology/expected/lag-l3-access-vlan.yml | 4 +- tests/topology/expected/lag-l3-vlan-trunk.yml | 6 + tests/topology/expected/lag-l3.yml | 160 +++++++++++++++++- tests/topology/expected/lag-mlag.yml | 33 ++++ tests/topology/input/lag-l3.yml | 11 +- 8 files changed, 216 insertions(+), 21 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index ee17a46fa9..3ae20fdecf 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -262,7 +262,7 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple ifatts.lag._mlag = True # Set internal flag if log.debug_active('lag'): - print(f'LAG create_lag_interfaces for node {node} -> adding interface {ifatts}') + print(f'LAG create_lag_interfaces for node {node} -> adding interface {ifatts} skip={skip_atts}') l.interfaces.append( ifatts ) if dual_mlag: # After creating interfaces, check if we need to split them @@ -446,17 +446,17 @@ def node_post_transform(self, node: Box, topology: Box) -> None: has_peerlink = True elif i.type=='lag': node_atts = { k:v for k,v in node.get('lag',{}).items() if k!='mlag'} - i.lag = node_atts + i.lag # Merge node level settings with interface overrides - # i.pop('mtu',None) # Next PR: Remove any MTU settings - inherited from members + i.lag = node_atts + i.lag # Merge node level settings with interface overrides + i.pop('mtu',None) # Remove any MTU settings - inherited from members if 'mode' in i.lag: log.error(f'lag.mode {i.lag.mode} used by node {node.name} is deprecated, use only 802.3ad', category=Warning, module='lag') if i.lag.mode!='802.3ad': - i.lag.lacp = 'off' # Disable LACP for other modes + i.lag.lacp = 'off' # Disable LACP for other modes - linkindex = i.pop('linkindex',None) # Remove linkindex (not sure why it's still in there?) + linkindex = i.pop('linkindex',None) # Remove linkindex (copied from link that no longer exists) for m in node.interfaces: # Update members to point to lag.ifindex, replacing linkindex if m.get('lag._parentindex',None)==linkindex: m.lag._parentindex = i.lag.ifindex # Make _parentindex point to lag.ifindex instead diff --git a/netsim/modules/lag.yml b/netsim/modules/lag.yml index a4d63b0ccd..4696404149 100644 --- a/netsim/modules/lag.yml +++ b/netsim/modules/lag.yml @@ -49,13 +49,14 @@ attributes: bandwidth: _linkname: interfaces: - prefix: + # prefix: # Don't copy these attributes to lag interfaces lag_no_propagate: interfaces: _linkname: name: + mtu: # Copy these attributes from lag links into lag interface-on-link data (if not existing) copy_link_to_intf: diff --git a/tests/topology/expected/lag-l2.yml b/tests/topology/expected/lag-l2.yml index 5b4750f311..0487d6438c 100644 --- a/tests/topology/expected/lag-l2.yml +++ b/tests/topology/expected/lag-l2.yml @@ -127,8 +127,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1600 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r1 -> r2 neighbors: - ifname: port-channel1 @@ -150,7 +153,6 @@ nodes: lacp: slow lacp_mode: active mode: 802.3ad - mtu: 1500 name: r1 -> r2 neighbors: - ifname: port-channel2 @@ -164,7 +166,6 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad - mtu: 1500 name: r1 -> r2 neighbors: - ifname: port-channel3 @@ -306,8 +307,11 @@ nodes: >>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1600 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r2 -> r1 neighbors: - ifname: port-channel1 @@ -329,7 +333,6 @@ nodes: lacp: slow lacp_mode: active mode: 802.3ad - mtu: 1500 name: r2 -> r1 neighbors: - ifname: port-channel2 @@ -343,7 +346,6 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad - mtu: 1500 name: r2 -> r1 neighbors: - ifname: port-channel3 diff --git a/tests/topology/expected/lag-l3-access-vlan.yml b/tests/topology/expected/lag-l3-access-vlan.yml index be1497a301..f8773f0c9a 100644 --- a/tests/topology/expected/lag-l3-access-vlan.yml +++ b/tests/topology/expected/lag-l3-access-vlan.yml @@ -87,8 +87,11 @@ nodes: ======= lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN v1] r1 -> r2' neighbors: - ifname: bond1 @@ -289,7 +292,6 @@ nodes: lacp: 'off' lacp_mode: active mode: 802.3ad - mtu: 1500 name: '[Access VLAN v1] r2 -> r1' neighbors: - ifname: bond1 diff --git a/tests/topology/expected/lag-l3-vlan-trunk.yml b/tests/topology/expected/lag-l3-vlan-trunk.yml index f2e7fb9578..28358e4929 100644 --- a/tests/topology/expected/lag-l3-vlan-trunk.yml +++ b/tests/topology/expected/lag-l3-vlan-trunk.yml @@ -88,8 +88,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r1 -> r2 neighbors: - ifname: bond1 @@ -258,8 +261,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r2 -> r1 neighbors: - ifname: bond1 diff --git a/tests/topology/expected/lag-l3.yml b/tests/topology/expected/lag-l3.yml index 56d441dd4c..7e7967f09e 100644 --- a/tests/topology/expected/lag-l3.yml +++ b/tests/topology/expected/lag-l3.yml @@ -1,3 +1,9 @@ +gateway: + anycast: + mac: 0200.cafe.00ff + unicast: true + vrrp: + group: 1 input: - topology/input/lag-l3.yml - package:topology-defaults.yml @@ -15,7 +21,7 @@ links: node: r2 lag: _parentindex: 1 - linkindex: 2 + linkindex: 3 node_count: 2 prefix: false type: p2p @@ -29,13 +35,41 @@ links: node: r2 lag: _parentindex: 1 - linkindex: 3 + linkindex: 4 + node_count: 2 + prefix: false + type: p2p +- _linkname: links[2].lag[1] + interfaces: + - ifindex: 3 + ifname: ethernet1/1/3 + node: r1 + - ifindex: 3 + ifname: ethernet1/1/3 + node: r2 + lag: + _parentindex: 2 + linkindex: 5 + node_count: 2 + prefix: false + type: p2p +- _linkname: links[2].lag[2] + interfaces: + - ifindex: 4 + ifname: ethernet1/1/4 + node: r1 + - ifindex: 4 + ifname: ethernet1/1/4 + node: r2 + lag: + _parentindex: 2 + linkindex: 6 node_count: 2 prefix: false type: p2p module: +- gateway - lag -- vlan name: input nodes: r1: @@ -45,6 +79,9 @@ nodes: clab: kind: vr-ftosv device: dellos10 + gateway: + vrrp: + group: 1 hostname: clab-input-r1 id: 1 interfaces: @@ -69,8 +106,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r1 -> r2 neighbors: - ifname: port-channel1 @@ -78,13 +118,35 @@ nodes: node: r2 type: lag virtual_interface: true + - gateway: + id: -2 + ipv4: 10.11.12.254/24 + protocol: vrrp + vrrp: + group: 1 + ifindex: 30001 + ifname: port-channel2 + ipv4: 10.11.12.12/24 + lag: + ifindex: 2 + lacp: fast + lacp_mode: active + mode: 802.3ad + name: r1 -> r2 + neighbors: + - gateway: false + ifname: port-channel2 + ipv4: 10.11.12.2/24 + node: r2 + type: lag + virtual_interface: true - clab: name: eth1 ifindex: 1 ifname: ethernet1/1/1 lag: _parentindex: 1 - linkindex: 2 + linkindex: 3 mtu: 1500 name: r1 -> r2 neighbors: @@ -97,13 +159,39 @@ nodes: ifname: ethernet1/1/2 lag: _parentindex: 1 - linkindex: 3 + linkindex: 4 mtu: 1500 name: r1 -> r2 neighbors: - ifname: ethernet1/1/2 node: r2 type: p2p + - clab: + name: eth3 + ifindex: 3 + ifname: ethernet1/1/3 + lag: + _parentindex: 2 + linkindex: 5 + mtu: 1500 + name: r1 -> r2 + neighbors: + - ifname: ethernet1/1/3 + node: r2 + type: p2p + - clab: + name: eth4 + ifindex: 4 + ifname: ethernet1/1/4 + lag: + _parentindex: 2 + linkindex: 6 + mtu: 1500 + name: r1 -> r2 + neighbors: + - ifname: ethernet1/1/4 + node: r2 + type: p2p lag: lacp: fast lacp_mode: active @@ -120,7 +208,7 @@ nodes: mac: 08:4f:a9:00:00:01 module: - lag - - vlan + - gateway mtu: 1500 name: r1 r2: @@ -130,6 +218,7 @@ nodes: clab: kind: vr-ftosv device: dellos10 + gateway: {} hostname: clab-input-r2 id: 2 interfaces: @@ -154,8 +243,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r2 -> r1 neighbors: - ifname: port-channel1 @@ -163,13 +255,37 @@ nodes: node: r1 type: lag virtual_interface: true + - ifindex: 30001 + ifname: port-channel2 + ipv4: 10.11.12.2/24 + lag: + ifindex: 2 + lacp: fast + lacp_mode: active + mode: 802.3ad + name: r2 -> r1 + neighbors: + - gateway: + anycast: + mac: 0200.cafe.00ff + unicast: true + id: -2 + ipv4: 10.11.12.254/24 + protocol: vrrp + vrrp: + group: 1 + ifname: port-channel2 + ipv4: 10.11.12.12/24 + node: r1 + type: lag + virtual_interface: true - clab: name: eth1 ifindex: 1 ifname: ethernet1/1/1 lag: _parentindex: 1 - linkindex: 2 + linkindex: 3 mtu: 1500 name: r2 -> r1 neighbors: @@ -182,13 +298,39 @@ nodes: ifname: ethernet1/1/2 lag: _parentindex: 1 - linkindex: 3 + linkindex: 4 mtu: 1500 name: r2 -> r1 neighbors: - ifname: ethernet1/1/2 node: r1 type: p2p + - clab: + name: eth3 + ifindex: 3 + ifname: ethernet1/1/3 + lag: + _parentindex: 2 + linkindex: 5 + mtu: 1500 + name: r2 -> r1 + neighbors: + - ifname: ethernet1/1/3 + node: r1 + type: p2p + - clab: + name: eth4 + ifindex: 4 + ifname: ethernet1/1/4 + lag: + _parentindex: 2 + linkindex: 6 + mtu: 1500 + name: r2 -> r1 + neighbors: + - ifname: ethernet1/1/4 + node: r1 + type: p2p lag: lacp: fast lacp_mode: active @@ -205,7 +347,7 @@ nodes: mac: 08:4f:a9:00:00:02 module: - lag - - vlan + - gateway mtu: 1500 name: r2 provider: clab diff --git a/tests/topology/expected/lag-mlag.yml b/tests/topology/expected/lag-mlag.yml index e9346eed71..a99a956a53 100644 --- a/tests/topology/expected/lag-mlag.yml +++ b/tests/topology/expected/lag-mlag.yml @@ -254,8 +254,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] h1 -> [s1,s2]' neighbors: - ifname: port-channel1 @@ -289,8 +292,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: h1 -> s1 neighbors: - ifname: port-channel2 @@ -449,8 +455,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: - ifname: port-channel3 @@ -484,8 +493,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: - ifname: port-channel4 @@ -661,8 +673,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s1 -> [h1,s2]' neighbors: - ifname: bond1 @@ -696,8 +711,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: s1 -> h1 neighbors: - ifname: bond2 @@ -726,8 +744,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: - ifname: bond1 @@ -762,8 +783,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: - ifname: bond2 @@ -977,8 +1001,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s2 -> [h1,s1]' neighbors: - ifname: bond1 @@ -1013,8 +1040,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: - ifname: bond1 @@ -1049,8 +1079,11 @@ nodes: lacp: fast lacp_mode: active mode: 802.3ad +<<<<<<< HEAD >>>>>>> 92dd8acd0 (Fix _type check) mtu: 1500 +======= +>>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: - ifname: bond2 diff --git a/tests/topology/input/lag-l3.yml b/tests/topology/input/lag-l3.yml index ca6961485b..d8fe1430f5 100644 --- a/tests/topology/input/lag-l3.yml +++ b/tests/topology/input/lag-l3.yml @@ -6,7 +6,16 @@ defaults: provider: clab device: dellos10 -module: [lag, vlan] +module: [lag,gateway] nodes: [r1, r2] links: - lag.members: [r1-r2, r1-r2] + +- prefix: 10.11.12.0/24 # Custom link prefix + lag.members: + - r1: + gateway.protocol: vrrp # Gateway enabled on interface + ipv4: 12 # Custom relative IP + r2: + - r1: + r2: From 2cce656c2a303a10fab777fdc1e3a57aba4ce170 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 11:11:27 -0600 Subject: [PATCH 25/36] Test both L2 and L3 VLANs in trunk --- ...g-l3-vlan-trunk.yml => lag-vlan-trunk.yml} | 64 +++++++++---------- ...g-l3-vlan-trunk.yml => lag-vlan-trunk.yml} | 9 ++- 2 files changed, 35 insertions(+), 38 deletions(-) rename tests/topology/expected/{lag-l3-vlan-trunk.yml => lag-vlan-trunk.yml} (90%) rename tests/topology/input/{lag-l3-vlan-trunk.yml => lag-vlan-trunk.yml} (67%) diff --git a/tests/topology/expected/lag-l3-vlan-trunk.yml b/tests/topology/expected/lag-vlan-trunk.yml similarity index 90% rename from tests/topology/expected/lag-l3-vlan-trunk.yml rename to tests/topology/expected/lag-vlan-trunk.yml index 28358e4929..cf11516611 100644 --- a/tests/topology/expected/lag-l3-vlan-trunk.yml +++ b/tests/topology/expected/lag-vlan-trunk.yml @@ -1,5 +1,5 @@ input: -- topology/input/lag-l3-vlan-trunk.yml +- topology/input/lag-vlan-trunk.yml - package:topology-defaults.yml lag: lacp: fast @@ -135,7 +135,7 @@ nodes: type: p2p - ifindex: 4 ifname: bond1.1000 - name: '[SubIf VLAN v1] r1 -> r2' + name: '[SubIf VLAN v1-irb] r1 -> r2' neighbors: - ifname: eth4 ipv4: 172.16.0.2/24 @@ -145,27 +145,26 @@ nodes: type: vlan_member virtual_interface: true vlan: - access: v1 + access: v1-irb access_id: 1000 - ifindex: 5 ifname: bond1.1001 - name: '[SubIf VLAN v2] r1 -> r2' + name: '[SubIf VLAN v2-bridge] r1 -> r2' neighbors: - ifname: eth5 - ipv4: 172.16.1.2/24 node: r2 parent_ifindex: 30000 parent_ifname: bond1 type: vlan_member virtual_interface: true vlan: - access: v2 + access: v2-bridge access_id: 1001 - bridge_group: 1 ifindex: 6 ifname: vlan1000 ipv4: 172.16.0.1/24 - name: VLAN v1 (1000) -> [r2] + name: VLAN v1-irb (1000) -> [r2] neighbors: - ifname: vlan1000 ipv4: 172.16.0.2/24 @@ -174,21 +173,19 @@ nodes: virtual_interface: true vlan: mode: irb - name: v1 + name: v1-irb - bridge_group: 2 ifindex: 7 ifname: vlan1001 - ipv4: 172.16.1.1/24 - name: VLAN v2 (1001) -> [r2] + name: VLAN v2-bridge (1001) -> [r2] neighbors: - ifname: vlan1001 - ipv4: 172.16.1.2/24 node: r2 type: svi virtual_interface: true vlan: - mode: irb - name: v2 + mode: bridge + name: v2-bridge lag: lacp: fast lacp_mode: active @@ -211,17 +208,17 @@ nodes: vlan: max_bridge_group: 2 vlans: - v1: + v1-irb: bridge_group: 1 id: 1000 mode: irb prefix: allocation: id_based ipv4: 172.16.0.0/24 - v2: + v2-bridge: bridge_group: 2 id: 1001 - mode: irb + mode: bridge prefix: allocation: id_based ipv4: 172.16.1.0/24 @@ -308,7 +305,7 @@ nodes: type: p2p - ifindex: 4 ifname: bond1.1000 - name: '[SubIf VLAN v1] r2 -> r1' + name: '[SubIf VLAN v1-irb] r2 -> r1' neighbors: - ifname: eth4 ipv4: 172.16.0.1/24 @@ -318,27 +315,26 @@ nodes: type: vlan_member virtual_interface: true vlan: - access: v1 + access: v1-irb access_id: 1000 - ifindex: 5 ifname: bond1.1001 - name: '[SubIf VLAN v2] r2 -> r1' + name: '[SubIf VLAN v2-bridge] r2 -> r1' neighbors: - ifname: eth5 - ipv4: 172.16.1.1/24 node: r1 parent_ifindex: 30000 parent_ifname: bond1 type: vlan_member virtual_interface: true vlan: - access: v2 + access: v2-bridge access_id: 1001 - bridge_group: 1 ifindex: 6 ifname: vlan1000 ipv4: 172.16.0.2/24 - name: VLAN v1 (1000) -> [r1] + name: VLAN v1-irb (1000) -> [r1] neighbors: - ifname: vlan1000 ipv4: 172.16.0.1/24 @@ -347,21 +343,19 @@ nodes: virtual_interface: true vlan: mode: irb - name: v1 + name: v1-irb - bridge_group: 2 ifindex: 7 ifname: vlan1001 - ipv4: 172.16.1.2/24 - name: VLAN v2 (1001) -> [r1] + name: VLAN v2-bridge (1001) -> [r1] neighbors: - ifname: vlan1001 - ipv4: 172.16.1.1/24 node: r1 type: svi virtual_interface: true vlan: - mode: irb - name: v2 + mode: bridge + name: v2-bridge lag: lacp: fast lacp_mode: active @@ -384,25 +378,26 @@ nodes: vlan: max_bridge_group: 2 vlans: - v1: + v1-irb: bridge_group: 1 id: 1000 mode: irb prefix: allocation: id_based ipv4: 172.16.0.0/24 - v2: + v2-bridge: bridge_group: 2 id: 1001 - mode: irb + mode: bridge prefix: allocation: id_based ipv4: 172.16.1.0/24 provider: clab vlans: - v1: + v1-irb: host_count: 0 id: 1000 + mode: irb neighbors: - ifname: vlan1000 ipv4: 172.16.0.2/24 @@ -413,15 +408,14 @@ vlans: prefix: allocation: id_based ipv4: 172.16.0.0/24 - v2: + v2-bridge: host_count: 0 id: 1001 + mode: bridge neighbors: - ifname: vlan1001 - ipv4: 172.16.1.2/24 node: r2 - ifname: vlan1001 - ipv4: 172.16.1.1/24 node: r1 prefix: allocation: id_based diff --git a/tests/topology/input/lag-l3-vlan-trunk.yml b/tests/topology/input/lag-vlan-trunk.yml similarity index 67% rename from tests/topology/input/lag-l3-vlan-trunk.yml rename to tests/topology/input/lag-vlan-trunk.yml index 4e61a6fb10..846fff11ad 100644 --- a/tests/topology/input/lag-l3-vlan-trunk.yml +++ b/tests/topology/input/lag-vlan-trunk.yml @@ -9,10 +9,13 @@ defaults: module: [lag, vlan] vlans: - v1: - v2: + v1-irb: + mode: irb + + v2-bridge: + mode: bridge nodes: [r1, r2] links: -- vlan.trunk: [v1, v2] +- vlan.trunk: [v1-irb, v2-bridge] lag.members: [r1-r2, r1-r2, r1-r2] From 44fd76ca14c8b8f94541f5d9933d035a9d51aca2 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 11:13:25 -0600 Subject: [PATCH 26/36] Fix YAML lint issues --- tests/topology/input/lag-l3.yml | 4 ++-- tests/topology/input/lag-vlan-trunk.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/topology/input/lag-l3.yml b/tests/topology/input/lag-l3.yml index d8fe1430f5..59197adad7 100644 --- a/tests/topology/input/lag-l3.yml +++ b/tests/topology/input/lag-l3.yml @@ -6,13 +6,13 @@ defaults: provider: clab device: dellos10 -module: [lag,gateway] +module: [lag, gateway] nodes: [r1, r2] links: - lag.members: [r1-r2, r1-r2] - prefix: 10.11.12.0/24 # Custom link prefix - lag.members: + lag.members: - r1: gateway.protocol: vrrp # Gateway enabled on interface ipv4: 12 # Custom relative IP diff --git a/tests/topology/input/lag-vlan-trunk.yml b/tests/topology/input/lag-vlan-trunk.yml index 846fff11ad..c0a953fbc8 100644 --- a/tests/topology/input/lag-vlan-trunk.yml +++ b/tests/topology/input/lag-vlan-trunk.yml @@ -11,7 +11,7 @@ module: [lag, vlan] vlans: v1-irb: mode: irb - + v2-bridge: mode: bridge From b59984d20c8bd06897fd6c092ffe6a38adb5218e Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Sun, 15 Dec 2024 11:47:12 -0600 Subject: [PATCH 27/36] Cleanup test case --- .../lag/10-mlag-m-to-m-different-vlans.yml | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/tests/integration/lag/10-mlag-m-to-m-different-vlans.yml b/tests/integration/lag/10-mlag-m-to-m-different-vlans.yml index 67f0218dc0..2e2d6f902b 100644 --- a/tests/integration/lag/10-mlag-m-to-m-different-vlans.yml +++ b/tests/integration/lag/10-mlag-m-to-m-different-vlans.yml @@ -1,7 +1,13 @@ message: | The device under test are two pairs of switches, interconnected through - dual-sided MLAG links each carrying a different set of vlans The hosts should - be able to ping each other and their gateway + dual-sided MLAG links each carrying a different set of vlans. + This illustrates the need for 'split_dual_mlag_link' in the lag module. + + The devices are only pairwise adjacent in OSPF, a1-a2 and b1-b2 + + The hosts should be able to ping each other and various gateways + +defaults.device: eos prefix: p2p1: @@ -9,7 +15,7 @@ prefix: allocation: p2p # Oddly needed p2p2: pool: p2p - allocation: p2p # Oddly needed + allocation: p2p vlans: ospf-pair1: @@ -32,7 +38,6 @@ groups: switches-a: members: [a1, a2] module: [lag, vlan, ospf] - device: eos vlans: ospf-pair1: @@ -40,7 +45,6 @@ groups: switches-b: members: [b1, b2] module: [lag, vlan, ospf] - device: eos vlans: ospf-pair2: @@ -60,15 +64,13 @@ links: mlag.peergroup: 2 vlan.trunk: [ospf-pair2] - lag: - # mlag: True members: - a1: b1: - vlan.trunk: [red] + vlan.trunk: [red] # Only 'red' - a2: b2: - vlan.trunk: [red, blue] - # vlan.trunk: [red] + vlan.trunk: [red, blue] # Both red and blue validate: ping: @@ -77,7 +79,11 @@ validate: wait_msg: Waiting for STP to enable the ports wait: 45 plugin: ping('h2') - ping_gw: - description: Pinging gateway from H1 + ping_gw_red: + description: Pinging red gateway on B1 from H1 nodes: [h1] - plugin: ping(nodes.b1.interfaces[4].ipv4,af='ipv4') + plugin: ping(nodes.b1.interfaces[-1].ipv4,af='ipv4') + ping_gw_blue: + description: Pinging blue gateway on A2 from H2 + nodes: [h2] + plugin: ping(nodes.a2.interfaces[-2].ipv4,af='ipv4') From 332b95fea5249f45b170f2c09e7d4b227a6f3f5b Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Fri, 27 Dec 2024 15:55:45 -0600 Subject: [PATCH 28/36] Update Aruba templates too Update test results --- netsim/ansible/templates/lag/arubacx.j2 | 4 +- netsim/modules/lag.py | 4 +- tests/topology/expected/bgp-vrf-local-as.yml | 48 +++++++------- tests/topology/expected/groups-vlan-vrf.yml | 16 ++--- tests/topology/expected/lag-l2.yml | 12 ---- .../expected/libvirt-clab-complex.yml | 60 ++++++++--------- tests/topology/expected/link-tunnel.yml | 46 ++++++------- .../expected/rt-vlan-mode-link-route.yml | 24 +++---- tests/topology/expected/vlan-vrf-lite.yml | 64 +++++++++---------- tests/topology/expected/vrf-leaking-loop.yml | 16 ++--- 10 files changed, 141 insertions(+), 153 deletions(-) diff --git a/netsim/ansible/templates/lag/arubacx.j2 b/netsim/ansible/templates/lag/arubacx.j2 index 57db5798eb..b6c335f53b 100644 --- a/netsim/ansible/templates/lag/arubacx.j2 +++ b/netsim/ansible/templates/lag/arubacx.j2 @@ -10,7 +10,7 @@ interface lag {{ intf.lag.mlag.ifindex }} description VSX ISL ! -{% for ch in ([intf]+interfaces) if ch==intf or ch.lag._parentindex|default(False) == intf.linkindex %} +{% for ch in ([intf]+interfaces) if ch==intf or ch.lag._peerlink|default(0) == intf.linkindex %} interface {{ ch.ifname }} no shutdown description {{ ch.name }} (ISL in lag {{intf.lag.mlag.ifindex }}) @@ -54,7 +54,7 @@ interface {{ intf.ifname }}{{ mclag_intf }}{{ mclag_intf_static }} no shutdown ! -{% for ch in interfaces if ch.lag._parentindex|default(False) == intf.linkindex %} +{% for ch in interfaces if ch.lag._parentindex|default(False) == intf.lag.ifindex %} ! interface {{ ch.ifname }} description {{ ch.name }} in lag {{ intf.lag.ifindex }} diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 3ae20fdecf..365a693bc9 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -214,7 +214,7 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple return (False,False,"") elif len(node_count)==3: # 1:2 MLAG or weird MLAG triangle for node_name,count in node_count.items(): - if count==len(l.lag.members): + if count==len(members): return (True,False,node_name) # Found the 1-side node elif len(node_count)==4: # 2:2 dual MLAG return (True,True,"") @@ -478,4 +478,4 @@ def node_post_transform(self, node: Box, topology: Box) -> None: category=log.IncorrectAttr, module='lag') - node.pop('_lag_ifindex',None) # Cleanup + node.pop('_lag_ifindex',None) # Cleanup diff --git a/tests/topology/expected/bgp-vrf-local-as.yml b/tests/topology/expected/bgp-vrf-local-as.yml index f1b681b38e..02f8b39818 100644 --- a/tests/topology/expected/bgp-vrf-local-as.yml +++ b/tests/topology/expected/bgp-vrf-local-as.yml @@ -153,11 +153,11 @@ nodes: - bridge_group: 1 ifindex: 2 ifname: Ethernet1.1 - ipv4: 172.16.3.1/24 + ipv4: 10.1.0.5/30 name: r1 -> r2 neighbors: - ifname: Ethernet1.1 - ipv4: 172.16.3.2/24 + ipv4: 10.1.0.6/30 node: r2 vrf: blue parent_ifindex: 1 @@ -174,11 +174,11 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: Ethernet1.2 - ipv4: 172.16.4.1/24 + ipv4: 10.1.0.9/30 name: r1 -> r2 neighbors: - ifname: Ethernet1.2 - ipv4: 172.16.4.2/24 + ipv4: 10.1.0.10/30 node: r2 vrf: red parent_ifindex: 1 @@ -240,7 +240,7 @@ nodes: neighbors: - as: 65000 ifindex: 2 - ipv4: 172.16.3.2 + ipv4: 10.1.0.6 name: r2 type: ebgp export: @@ -260,7 +260,7 @@ nodes: neighbors: - as: 65000 ifindex: 3 - ipv4: 172.16.4.2 + ipv4: 10.1.0.10 name: r2 type: ebgp export: @@ -363,11 +363,11 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: Ethernet1.1 - ipv4: 172.16.3.2/24 + ipv4: 10.1.0.6/30 name: r2 -> r1 neighbors: - ifname: Ethernet1.1 - ipv4: 172.16.3.1/24 + ipv4: 10.1.0.5/30 node: r1 vrf: blue parent_ifindex: 1 @@ -384,11 +384,11 @@ nodes: - bridge_group: 3 ifindex: 6 ifname: Ethernet1.2 - ipv4: 172.16.4.2/24 + ipv4: 10.1.0.10/30 name: r2 -> r1 neighbors: - ifname: Ethernet1.2 - ipv4: 172.16.4.1/24 + ipv4: 10.1.0.9/30 node: r1 vrf: red parent_ifindex: 1 @@ -405,11 +405,11 @@ nodes: - bridge_group: 2 ifindex: 7 ifname: Ethernet2.1 - ipv4: 172.16.5.2/24 + ipv4: 10.1.0.13/30 name: r2 -> r3 neighbors: - ifname: Ethernet1.1 - ipv4: 172.16.5.3/24 + ipv4: 10.1.0.14/30 node: r3 vrf: blue parent_ifindex: 2 @@ -426,11 +426,11 @@ nodes: - bridge_group: 3 ifindex: 8 ifname: Ethernet2.2 - ipv4: 172.16.6.2/24 + ipv4: 10.1.0.17/30 name: r2 -> r3 neighbors: - ifname: Ethernet1.2 - ipv4: 172.16.6.3/24 + ipv4: 10.1.0.18/30 node: r3 vrf: red parent_ifindex: 2 @@ -505,12 +505,12 @@ nodes: type: ebgp - as: 65100 ifindex: 5 - ipv4: 172.16.3.1 + ipv4: 10.1.0.5 name: r1 type: ebgp - as: 65101 ifindex: 7 - ipv4: 172.16.5.3 + ipv4: 10.1.0.14 name: r3 type: ebgp router_id: 172.32.0.2 @@ -537,12 +537,12 @@ nodes: type: ebgp - as: 65100 ifindex: 6 - ipv4: 172.16.4.1 + ipv4: 10.1.0.9 name: r1 type: ebgp - as: 65101 ifindex: 8 - ipv4: 172.16.6.3 + ipv4: 10.1.0.18 name: r3 type: ebgp router_id: 172.31.0.1 @@ -598,11 +598,11 @@ nodes: - bridge_group: 1 ifindex: 2 ifname: Ethernet1.1 - ipv4: 172.16.5.3/24 + ipv4: 10.1.0.14/30 name: r3 -> r2 neighbors: - ifname: Ethernet2.1 - ipv4: 172.16.5.2/24 + ipv4: 10.1.0.13/30 node: r2 vrf: blue parent_ifindex: 1 @@ -619,11 +619,11 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: Ethernet1.2 - ipv4: 172.16.6.3/24 + ipv4: 10.1.0.18/30 name: r3 -> r2 neighbors: - ifname: Ethernet2.2 - ipv4: 172.16.6.2/24 + ipv4: 10.1.0.17/30 node: r2 vrf: red parent_ifindex: 1 @@ -685,7 +685,7 @@ nodes: neighbors: - as: 65000 ifindex: 2 - ipv4: 172.16.5.2 + ipv4: 10.1.0.13 name: r2 type: ebgp export: @@ -705,7 +705,7 @@ nodes: neighbors: - as: 65000 ifindex: 3 - ipv4: 172.16.6.2 + ipv4: 10.1.0.17 name: r2 type: ebgp export: diff --git a/tests/topology/expected/groups-vlan-vrf.yml b/tests/topology/expected/groups-vlan-vrf.yml index bed9137ae8..8df26bda83 100644 --- a/tests/topology/expected/groups-vlan-vrf.yml +++ b/tests/topology/expected/groups-vlan-vrf.yml @@ -295,11 +295,11 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: eth1.1001 - ipv4: 172.16.4.3/24 + ipv4: 10.1.0.1/30 name: s1 -> s2 neighbors: - ifname: eth3.1001 - ipv4: 172.16.4.4/24 + ipv4: 10.1.0.2/30 node: s2 vrf: red_vrf parent_ifindex: 1 @@ -402,11 +402,11 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: eth1.1001 - ipv4: 172.16.4.3/24 + ipv4: 10.1.0.1/30 name: s1 -> s2 neighbors: - ifname: eth3.1001 - ipv4: 172.16.4.4/24 + ipv4: 10.1.0.2/30 node: s2 vrf: red_vrf ospf: @@ -527,11 +527,11 @@ nodes: - bridge_group: 1 ifindex: 5 ifname: eth3.1001 - ipv4: 172.16.4.4/24 + ipv4: 10.1.0.2/30 name: s2 -> s1 neighbors: - ifname: eth1.1001 - ipv4: 172.16.4.3/24 + ipv4: 10.1.0.1/30 node: s1 vrf: red_vrf parent_ifindex: 3 @@ -675,11 +675,11 @@ nodes: - bridge_group: 1 ifindex: 5 ifname: eth3.1001 - ipv4: 172.16.4.4/24 + ipv4: 10.1.0.2/30 name: s2 -> s1 neighbors: - ifname: eth1.1001 - ipv4: 172.16.4.3/24 + ipv4: 10.1.0.1/30 node: s1 vrf: red_vrf ospf: diff --git a/tests/topology/expected/lag-l2.yml b/tests/topology/expected/lag-l2.yml index 0487d6438c..10a39fcd8f 100644 --- a/tests/topology/expected/lag-l2.yml +++ b/tests/topology/expected/lag-l2.yml @@ -136,12 +136,6 @@ nodes: neighbors: - ifname: port-channel1 node: r2 -<<<<<<< HEAD - prefix: false -======= - stp: - enable: false ->>>>>>> f2eb98413 (Refactored to temporarily rename interface.type to '_type' to bypass validation) stp: enable: false type: lag @@ -316,12 +310,6 @@ nodes: neighbors: - ifname: port-channel1 node: r1 -<<<<<<< HEAD - prefix: false -======= - stp: - enable: false ->>>>>>> f2eb98413 (Refactored to temporarily rename interface.type to '_type' to bypass validation) stp: enable: false type: lag diff --git a/tests/topology/expected/libvirt-clab-complex.yml b/tests/topology/expected/libvirt-clab-complex.yml index d4cd11ceb1..5d60a5e907 100644 --- a/tests/topology/expected/libvirt-clab-complex.yml +++ b/tests/topology/expected/libvirt-clab-complex.yml @@ -65,11 +65,11 @@ links: interfaces: - ifindex: 3 ifname: GigabitEthernet0/3 - ipv4: 172.16.1.2/24 + ipv4: 10.1.0.5/30 node: r2 - ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.1.3/24 + ipv4: 10.1.0.6/30 node: r3 libvirt: provider: @@ -77,20 +77,20 @@ links: linkindex: 3 node_count: 2 prefix: - ipv4: 172.16.1.0/24 + ipv4: 10.1.0.4/30 type: lan - _linkname: links[4] bridge: input_4 gateway: - ipv4: 172.16.2.3/24 + ipv4: 172.16.1.3/24 interfaces: - ifindex: 2 ifname: Ethernet2 - ipv4: 172.16.2.3/24 + ipv4: 172.16.1.3/24 node: r3 - ifindex: 1 ifname: eth1 - ipv4: 172.16.2.5/24 + ipv4: 172.16.1.5/24 node: h2 libvirt: provider: @@ -98,25 +98,25 @@ links: linkindex: 4 node_count: 2 prefix: - ipv4: 172.16.2.0/24 + ipv4: 172.16.1.0/24 role: stub type: lan - _linkname: links[5] bridge: input_5 gateway: - ipv4: 172.16.3.3/24 + ipv4: 172.16.2.3/24 interfaces: - ifindex: 2 ifname: eth2 - ipv4: 172.16.3.4/24 + ipv4: 172.16.2.4/24 node: h1 - ifindex: 3 ifname: Ethernet3 - ipv4: 172.16.3.3/24 + ipv4: 172.16.2.3/24 node: r3 - ifindex: 2 ifname: eth2 - ipv4: 172.16.3.5/24 + ipv4: 172.16.2.5/24 node: h2 libvirt: provider: @@ -124,7 +124,7 @@ links: linkindex: 5 node_count: 3 prefix: - ipv4: 172.16.3.0/24 + ipv4: 172.16.2.0/24 role: stub type: lan module: @@ -169,16 +169,16 @@ nodes: ipv4: 172.16.2.3/24 ifindex: 2 ifname: eth2 - ipv4: 172.16.3.4/24 + ipv4: 172.16.2.4/24 linkindex: 5 mtu: 1500 name: h1 -> [r3,h2] neighbors: - ifname: Ethernet3 - ipv4: 172.16.3.3/24 + ipv4: 172.16.2.3/24 node: r3 - ifname: eth2 - ipv4: 172.16.3.5/24 + ipv4: 172.16.2.5/24 node: h2 role: stub type: lan @@ -230,16 +230,16 @@ nodes: interfaces: - bridge: input_4 gateway: - ipv4: 172.16.2.3/24 + ipv4: 172.16.1.3/24 ifindex: 1 ifname: eth1 - ipv4: 172.16.2.5/24 + ipv4: 172.16.1.5/24 linkindex: 4 mtu: 1500 name: h2 -> r3 neighbors: - ifname: Ethernet2 - ipv4: 172.16.2.3/24 + ipv4: 172.16.1.3/24 node: r3 role: stub type: lan @@ -248,16 +248,16 @@ nodes: ipv4: 172.16.2.3/24 ifindex: 2 ifname: eth2 - ipv4: 172.16.3.5/24 + ipv4: 172.16.2.5/24 linkindex: 5 mtu: 1500 name: h2 -> [h1,r3] neighbors: - ifname: eth2 - ipv4: 172.16.3.4/24 + ipv4: 172.16.2.4/24 node: h1 - ifname: Ethernet3 - ipv4: 172.16.3.3/24 + ipv4: 172.16.2.3/24 node: r3 role: stub type: lan @@ -391,12 +391,12 @@ nodes: - bridge: input_3 ifindex: 3 ifname: GigabitEthernet0/3 - ipv4: 172.16.1.2/24 + ipv4: 10.1.0.5/30 linkindex: 3 name: r2 -> r3 neighbors: - ifname: Ethernet1 - ipv4: 172.16.1.3/24 + ipv4: 10.1.0.6/30 node: r3 ospf: area: 0.0.0.0 @@ -444,12 +444,12 @@ nodes: name: et1 ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.1.3/24 + ipv4: 10.1.0.6/30 linkindex: 3 name: r3 -> r2 neighbors: - ifname: GigabitEthernet0/3 - ipv4: 172.16.1.2/24 + ipv4: 10.1.0.5/30 node: r2 ospf: area: 0.0.0.0 @@ -461,12 +461,12 @@ nodes: name: et2 ifindex: 2 ifname: Ethernet2 - ipv4: 172.16.2.3/24 + ipv4: 172.16.1.3/24 linkindex: 4 name: r3 -> h2 neighbors: - ifname: eth1 - ipv4: 172.16.2.5/24 + ipv4: 172.16.1.5/24 node: h2 ospf: area: 0.0.0.0 @@ -479,15 +479,15 @@ nodes: name: et3 ifindex: 3 ifname: Ethernet3 - ipv4: 172.16.3.3/24 + ipv4: 172.16.2.3/24 linkindex: 5 name: r3 -> [h1,h2] neighbors: - ifname: eth2 - ipv4: 172.16.3.4/24 + ipv4: 172.16.2.4/24 node: h1 - ifname: eth2 - ipv4: 172.16.3.5/24 + ipv4: 172.16.2.5/24 node: h2 ospf: area: 0.0.0.0 diff --git a/tests/topology/expected/link-tunnel.yml b/tests/topology/expected/link-tunnel.yml index ecd0cf4690..fcaf2f5c38 100644 --- a/tests/topology/expected/link-tunnel.yml +++ b/tests/topology/expected/link-tunnel.yml @@ -27,28 +27,28 @@ links: interfaces: - ifindex: 20001 ifname: Tunnel1 - ipv4: 172.16.1.2/24 + ipv4: 10.1.0.1/30 node: r2 - ifindex: 20001 ifname: Tunnel1 - ipv4: 172.16.1.3/24 + ipv4: 10.1.0.2/30 node: r3 linkindex: 2 node_count: 2 prefix: - ipv4: 172.16.1.0/24 + ipv4: 10.1.0.0/30 type: tunnel - _linkname: links[3] bridge: input_3 interfaces: - ifindex: 20002 ifname: Tunnel2 - ipv4: 172.16.2.3/24 + ipv4: 172.16.1.3/24 node: r3 linkindex: 3 node_count: 1 prefix: - ipv4: 172.16.2.0/24 + ipv4: 172.16.1.0/24 role: stub type: tunnel - _linkname: links[4] @@ -56,20 +56,20 @@ links: interfaces: - ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.3.1/24 + ipv4: 172.16.2.1/24 node: r1 - ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.3.2/24 + ipv4: 172.16.2.2/24 node: r2 - ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.3.3/24 + ipv4: 172.16.2.3/24 node: r3 linkindex: 4 node_count: 3 prefix: - ipv4: 172.16.3.0/24 + ipv4: 172.16.2.0/24 type: lan name: input nodes: @@ -97,15 +97,15 @@ nodes: - bridge: input_4 ifindex: 1 ifname: Ethernet1 - ipv4: 172.16.3.1/24 + ipv4: 172.16.2.1/24 linkindex: 4 name: r1 -> [r2,r3] neighbors: - ifname: GigabitEthernet0/1 - ipv4: 172.16.3.2/24 + ipv4: 172.16.2.2/24 node: r2 - ifname: GigabitEthernet0/1 - ipv4: 172.16.3.3/24 + ipv4: 172.16.2.3/24 node: r3 type: lan loopback: @@ -143,27 +143,27 @@ nodes: virtual_interface: true - ifindex: 20001 ifname: Tunnel1 - ipv4: 172.16.1.2/24 + ipv4: 10.1.0.1/30 linkindex: 2 name: r2 -> r3 neighbors: - ifname: Tunnel1 - ipv4: 172.16.1.3/24 + ipv4: 10.1.0.2/30 node: r3 type: tunnel virtual_interface: true - bridge: input_4 ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.3.2/24 + ipv4: 172.16.2.2/24 linkindex: 4 name: r2 -> [r1,r3] neighbors: - ifname: Ethernet1 - ipv4: 172.16.3.1/24 + ipv4: 172.16.2.1/24 node: r1 - ifname: GigabitEthernet0/1 - ipv4: 172.16.3.3/24 + ipv4: 172.16.2.3/24 node: r3 type: lan loopback: @@ -201,18 +201,18 @@ nodes: virtual_interface: true - ifindex: 20001 ifname: Tunnel1 - ipv4: 172.16.1.3/24 + ipv4: 10.1.0.2/30 linkindex: 2 name: r3 -> r2 neighbors: - ifname: Tunnel1 - ipv4: 172.16.1.2/24 + ipv4: 10.1.0.1/30 node: r2 type: tunnel virtual_interface: true - ifindex: 20002 ifname: Tunnel2 - ipv4: 172.16.2.3/24 + ipv4: 172.16.1.3/24 linkindex: 3 name: r3 -> stub neighbors: [] @@ -222,15 +222,15 @@ nodes: - bridge: input_4 ifindex: 1 ifname: GigabitEthernet0/1 - ipv4: 172.16.3.3/24 + ipv4: 172.16.2.3/24 linkindex: 4 name: r3 -> [r1,r2] neighbors: - ifname: Ethernet1 - ipv4: 172.16.3.1/24 + ipv4: 172.16.2.1/24 node: r1 - ifname: GigabitEthernet0/1 - ipv4: 172.16.3.2/24 + ipv4: 172.16.2.2/24 node: r2 type: lan loopback: diff --git a/tests/topology/expected/rt-vlan-mode-link-route.yml b/tests/topology/expected/rt-vlan-mode-link-route.yml index e31518beb2..90a03b1754 100644 --- a/tests/topology/expected/rt-vlan-mode-link-route.yml +++ b/tests/topology/expected/rt-vlan-mode-link-route.yml @@ -406,11 +406,11 @@ nodes: - bridge_group: 2 ifindex: 12 ifname: eth4.1001 - ipv4: 172.16.4.4/24 + ipv4: 10.1.0.6/30 name: br -> sw neighbors: - ifname: eth4.1001 - ipv4: 172.16.4.3/24 + ipv4: 10.1.0.5/30 node: sw parent_ifindex: 4 parent_ifname: eth4 @@ -424,11 +424,11 @@ nodes: - bridge_group: 3 ifindex: 13 ifname: eth4.1002 - ipv4: 172.16.5.4/24 + ipv4: 10.1.0.10/30 name: br -> sw neighbors: - ifname: eth4.1002 - ipv4: 172.16.5.3/24 + ipv4: 10.1.0.9/30 node: sw parent_ifindex: 4 parent_ifname: eth4 @@ -442,11 +442,11 @@ nodes: - bridge_group: 1 ifindex: 14 ifname: eth4.1000 - ipv4: 172.16.6.4/24 + ipv4: 10.1.0.14/30 name: br -> sw neighbors: - ifname: eth4.1000 - ipv4: 172.16.6.3/24 + ipv4: 10.1.0.13/30 node: sw parent_ifindex: 4 parent_ifname: eth4 @@ -988,11 +988,11 @@ nodes: - bridge_group: 2 ifindex: 10 ifname: eth4.1001 - ipv4: 172.16.4.3/24 + ipv4: 10.1.0.5/30 name: sw -> br neighbors: - ifname: eth4.1001 - ipv4: 172.16.4.4/24 + ipv4: 10.1.0.6/30 node: br parent_ifindex: 4 parent_ifname: eth4 @@ -1006,11 +1006,11 @@ nodes: - bridge_group: 3 ifindex: 11 ifname: eth4.1002 - ipv4: 172.16.5.3/24 + ipv4: 10.1.0.9/30 name: sw -> br neighbors: - ifname: eth4.1002 - ipv4: 172.16.5.4/24 + ipv4: 10.1.0.10/30 node: br parent_ifindex: 4 parent_ifname: eth4 @@ -1024,11 +1024,11 @@ nodes: - bridge_group: 1 ifindex: 12 ifname: eth4.1000 - ipv4: 172.16.6.3/24 + ipv4: 10.1.0.13/30 name: sw -> br neighbors: - ifname: eth4.1000 - ipv4: 172.16.6.4/24 + ipv4: 10.1.0.14/30 node: br parent_ifindex: 4 parent_ifname: eth4 diff --git a/tests/topology/expected/vlan-vrf-lite.yml b/tests/topology/expected/vlan-vrf-lite.yml index 71d0d2aff3..a44ead9912 100644 --- a/tests/topology/expected/vlan-vrf-lite.yml +++ b/tests/topology/expected/vlan-vrf-lite.yml @@ -495,11 +495,11 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: Ethernet1.1 - ipv4: 172.16.6.1/24 + ipv4: 10.1.0.5/30 name: r1 -> r2 neighbors: - ifname: Ethernet1.1 - ipv4: 172.16.6.2/24 + ipv4: 10.1.0.6/30 node: r2 vrf: blue parent_ifindex: 1 @@ -515,11 +515,11 @@ nodes: - bridge_group: 1 ifindex: 6 ifname: Ethernet1.2 - ipv4: 172.16.7.1/24 + ipv4: 10.1.0.9/30 name: r1 -> r2 neighbors: - ifname: Ethernet1.2 - ipv4: 172.16.7.2/24 + ipv4: 10.1.0.10/30 node: r2 vrf: red parent_ifindex: 1 @@ -612,11 +612,11 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: Ethernet1.1 - ipv4: 172.16.6.1/24 + ipv4: 10.1.0.5/30 name: r1 -> r2 neighbors: - ifname: Ethernet1.1 - ipv4: 172.16.6.2/24 + ipv4: 10.1.0.6/30 node: r2 vrf: blue ospf: @@ -694,11 +694,11 @@ nodes: - bridge_group: 1 ifindex: 6 ifname: Ethernet1.2 - ipv4: 172.16.7.1/24 + ipv4: 10.1.0.9/30 name: r1 -> r2 neighbors: - ifname: Ethernet1.2 - ipv4: 172.16.7.2/24 + ipv4: 10.1.0.10/30 node: r2 vrf: red ospf: @@ -779,11 +779,11 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: Ethernet1.1 - ipv4: 172.16.6.2/24 + ipv4: 10.1.0.6/30 name: r2 -> r1 neighbors: - ifname: Ethernet1.1 - ipv4: 172.16.6.1/24 + ipv4: 10.1.0.5/30 node: r1 vrf: blue parent_ifindex: 1 @@ -799,11 +799,11 @@ nodes: - bridge_group: 1 ifindex: 6 ifname: Ethernet1.2 - ipv4: 172.16.7.2/24 + ipv4: 10.1.0.10/30 name: r2 -> r1 neighbors: - ifname: Ethernet1.2 - ipv4: 172.16.7.1/24 + ipv4: 10.1.0.9/30 node: r1 vrf: red parent_ifindex: 1 @@ -819,11 +819,11 @@ nodes: - bridge_group: 2 ifindex: 7 ifname: Ethernet2.1 - ipv4: 172.16.8.2/24 + ipv4: 10.1.0.13/30 name: r2 -> r3 neighbors: - ifname: Ethernet1.1 - ipv4: 172.16.8.3/24 + ipv4: 10.1.0.14/30 node: r3 vrf: blue parent_ifindex: 2 @@ -839,11 +839,11 @@ nodes: - bridge_group: 1 ifindex: 8 ifname: Ethernet2.2 - ipv4: 172.16.9.2/24 + ipv4: 10.1.0.17/30 name: r2 -> r3 neighbors: - ifname: Ethernet1.2 - ipv4: 172.16.9.3/24 + ipv4: 10.1.0.18/30 node: r3 vrf: red parent_ifindex: 2 @@ -936,11 +936,11 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: Ethernet1.1 - ipv4: 172.16.6.2/24 + ipv4: 10.1.0.6/30 name: r2 -> r1 neighbors: - ifname: Ethernet1.1 - ipv4: 172.16.6.1/24 + ipv4: 10.1.0.5/30 node: r1 vrf: blue ospf: @@ -960,11 +960,11 @@ nodes: - bridge_group: 2 ifindex: 7 ifname: Ethernet2.1 - ipv4: 172.16.8.2/24 + ipv4: 10.1.0.13/30 name: r2 -> r3 neighbors: - ifname: Ethernet1.1 - ipv4: 172.16.8.3/24 + ipv4: 10.1.0.14/30 node: r3 vrf: blue ospf: @@ -1024,11 +1024,11 @@ nodes: - bridge_group: 1 ifindex: 6 ifname: Ethernet1.2 - ipv4: 172.16.7.2/24 + ipv4: 10.1.0.10/30 name: r2 -> r1 neighbors: - ifname: Ethernet1.2 - ipv4: 172.16.7.1/24 + ipv4: 10.1.0.9/30 node: r1 vrf: red ospf: @@ -1048,11 +1048,11 @@ nodes: - bridge_group: 1 ifindex: 8 ifname: Ethernet2.2 - ipv4: 172.16.9.2/24 + ipv4: 10.1.0.17/30 name: r2 -> r3 neighbors: - ifname: Ethernet1.2 - ipv4: 172.16.9.3/24 + ipv4: 10.1.0.18/30 node: r3 vrf: red ospf: @@ -1092,11 +1092,11 @@ nodes: - bridge_group: 1 ifindex: 2 ifname: Ethernet1.1 - ipv4: 172.16.8.3/24 + ipv4: 10.1.0.14/30 name: r3 -> r2 neighbors: - ifname: Ethernet2.1 - ipv4: 172.16.8.2/24 + ipv4: 10.1.0.13/30 node: r2 vrf: blue parent_ifindex: 1 @@ -1112,11 +1112,11 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: Ethernet1.2 - ipv4: 172.16.9.3/24 + ipv4: 10.1.0.18/30 name: r3 -> r2 neighbors: - ifname: Ethernet2.2 - ipv4: 172.16.9.2/24 + ipv4: 10.1.0.17/30 node: r2 vrf: red parent_ifindex: 1 @@ -1189,11 +1189,11 @@ nodes: - bridge_group: 1 ifindex: 2 ifname: Ethernet1.1 - ipv4: 172.16.8.3/24 + ipv4: 10.1.0.14/30 name: r3 -> r2 neighbors: - ifname: Ethernet2.1 - ipv4: 172.16.8.2/24 + ipv4: 10.1.0.13/30 node: r2 vrf: blue ospf: @@ -1233,11 +1233,11 @@ nodes: - bridge_group: 2 ifindex: 3 ifname: Ethernet1.2 - ipv4: 172.16.9.3/24 + ipv4: 10.1.0.18/30 name: r3 -> r2 neighbors: - ifname: Ethernet2.2 - ipv4: 172.16.9.2/24 + ipv4: 10.1.0.17/30 node: r2 vrf: red ospf: diff --git a/tests/topology/expected/vrf-leaking-loop.yml b/tests/topology/expected/vrf-leaking-loop.yml index 8d6710f76e..d11159eebf 100644 --- a/tests/topology/expected/vrf-leaking-loop.yml +++ b/tests/topology/expected/vrf-leaking-loop.yml @@ -81,11 +81,11 @@ nodes: - bridge_group: 1 ifindex: 3 ifname: eth1.1000 - ipv4: 172.16.2.1/24 + ipv4: 10.1.0.1/30 name: leaf1 -> leaf1 neighbors: - ifname: eth2.1000 - ipv4: 172.16.2.2/24 + ipv4: 10.1.0.2/30 node: leaf1 vrf: customer1 parent_ifindex: 1 @@ -101,11 +101,11 @@ nodes: - bridge_group: 1 ifindex: 4 ifname: eth2.1000 - ipv4: 172.16.2.2/24 + ipv4: 10.1.0.2/30 name: leaf1 -> leaf1 neighbors: - ifname: eth1.1000 - ipv4: 172.16.2.1/24 + ipv4: 10.1.0.1/30 node: leaf1 vrf: global parent_ifindex: 2 @@ -121,11 +121,11 @@ nodes: - bridge_group: 2 ifindex: 5 ifname: eth1.1001 - ipv4: 172.16.3.1/24 + ipv4: 10.1.0.5/30 name: leaf1 -> leaf1 neighbors: - ifname: eth2.1001 - ipv4: 172.16.3.2/24 + ipv4: 10.1.0.6/30 node: leaf1 vrf: customer2 parent_ifindex: 1 @@ -141,11 +141,11 @@ nodes: - bridge_group: 2 ifindex: 6 ifname: eth2.1001 - ipv4: 172.16.3.2/24 + ipv4: 10.1.0.6/30 name: leaf1 -> leaf1 neighbors: - ifname: eth1.1001 - ipv4: 172.16.3.1/24 + ipv4: 10.1.0.5/30 node: leaf1 vrf: global parent_ifindex: 2 From 4db412fedd40228061541dc39348f2e23e57072c Mon Sep 17 00:00:00 2001 From: J vanBemmel Date: Mon, 30 Dec 2024 09:21:41 -0600 Subject: [PATCH 29/36] Use internal flag to mark temporary virtual lag links In multi-provider scenario's, link.type is changed resulting in virtual lag links not being removed --- netsim/modules/lag.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 365a693bc9..57674744be 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -338,7 +338,7 @@ def process_lag_link(link: Box, topology: Box) -> bool: create_peer_links(link,topology) return False else: - link.type = 'virtual_lag' # Temporary virtual link, removed in module_post_link_transform + link._virtual_lag = True # Temporary virtual link, removed in module_post_link_transform return create_lag_member_links(link,topology) # @@ -428,7 +428,7 @@ def link_pre_link_transform(self, link: Box, topology: Box) -> None: def module_post_link_transform(self, topology: Box) -> None: if log.debug_active('lag'): print(f'LAG module_post_link_transform: Cleanup "virtual_lag" links') - topology.links = [ link for link in topology.links if link.type != 'virtual_lag' ] + topology.links = [ link for link in topology.links if '_virtual_lag' not in link ] """ After attribute propagation and consolidation, verify that requested features are supported. From 68a07015c3e6d11b2090c40054f86de37fa09d5b Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Wed, 1 Jan 2025 11:38:54 -0600 Subject: [PATCH 30/36] Remove 'virtual_lag' type, no longer used --- netsim/defaults/attributes.yml | 2 +- netsim/modules/lag.py | 2 +- tests/errors/link-invalid-type.log | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/netsim/defaults/attributes.yml b/netsim/defaults/attributes.yml index b407de8936..07d236fc42 100644 --- a/netsim/defaults/attributes.yml +++ b/netsim/defaults/attributes.yml @@ -60,7 +60,7 @@ link: # Global link attributes _alt_types: [ bool_false, prefix_str, named_pfx ] role: id pool: id - type: { type: str, valid_values: [ lan, p2p, stub, loopback, tunnel, vlan_member, virtual_lag ] } + type: { type: str, valid_values: [ lan, p2p, stub, loopback, tunnel, vlan_member ] } unnumbered: bool interfaces: mtu: { type: int, min_value: 64, max_value: 65535 } diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 57674744be..8eff9d3e43 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -190,7 +190,7 @@ def create_lag_member_links(l: Box, topology: Box) -> bool: return True """ -create_lag_interfaces -- create interfaces of type "lag" for each link of type virtual_lag +create_lag_interfaces -- create interfaces of type "lag" for each link marked as _virtual_lag """ def create_lag_interfaces(l: Box, topology: Box) -> None: diff --git a/tests/errors/link-invalid-type.log b/tests/errors/link-invalid-type.log index 10c80ea23d..e1f37082a0 100644 --- a/tests/errors/link-invalid-type.log +++ b/tests/errors/link-invalid-type.log @@ -1,4 +1,4 @@ IncorrectValue in links: attribute links[1].type has invalid value(s): wtf -... valid values are: lan,p2p,stub,loopback,tunnel,vlan_member,virtual_lag +... valid values are: lan,p2p,stub,loopback,tunnel,vlan_member ... use 'netlab show attributes link' to display valid attributes Fatal error in netlab: Cannot proceed beyond this point due to errors, exiting From 9bb92f3c1e378324154ccb17320b3d933d6b0adf Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Wed, 1 Jan 2025 11:43:23 -0600 Subject: [PATCH 31/36] Update gateway test result --- tests/topology/expected/lag-l3.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/topology/expected/lag-l3.yml b/tests/topology/expected/lag-l3.yml index 7e7967f09e..1898c27777 100644 --- a/tests/topology/expected/lag-l3.yml +++ b/tests/topology/expected/lag-l3.yml @@ -218,7 +218,6 @@ nodes: clab: kind: vr-ftosv device: dellos10 - gateway: {} hostname: clab-input-r2 id: 2 interfaces: @@ -347,7 +346,6 @@ nodes: mac: 08:4f:a9:00:00:02 module: - lag - - gateway mtu: 1500 name: r2 provider: clab From 13bf9855fffe76c0fd216e3197b5cb558620f1cd Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Thu, 2 Jan 2025 16:43:25 -0600 Subject: [PATCH 32/36] Updated test results --- tests/topology/expected/lag-l2.yml | 46 --- .../topology/expected/lag-l3-access-vlan.yml | 112 ------- tests/topology/expected/lag-l3.yml | 40 --- tests/topology/expected/lag-mlag-m_to_m.yml | 76 ----- tests/topology/expected/lag-mlag.yml | 209 ------------- tests/topology/expected/lag-vlan-trunk.yml | 38 --- .../expected/node.clone-plugin-lag.yml | 285 ------------------ 7 files changed, 806 deletions(-) diff --git a/tests/topology/expected/lag-l2.yml b/tests/topology/expected/lag-l2.yml index 10a39fcd8f..4372611841 100644 --- a/tests/topology/expected/lag-l2.yml +++ b/tests/topology/expected/lag-l2.yml @@ -111,27 +111,8 @@ nodes: ifname: port-channel1 lag: ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 1 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 1 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1600 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r1 -> r2 neighbors: - ifname: port-channel1 @@ -146,7 +127,6 @@ nodes: ifindex: 2 lacp: slow lacp_mode: active - mode: 802.3ad name: r1 -> r2 neighbors: - ifname: port-channel2 @@ -159,7 +139,6 @@ nodes: ifindex: 3 lacp: fast lacp_mode: active - mode: 802.3ad name: r1 -> r2 neighbors: - ifname: port-channel3 @@ -281,31 +260,8 @@ nodes: ifname: port-channel1 lag: ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 1 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 1 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast -======= lacp: slow ->>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1600 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r2 -> r1 neighbors: - ifname: port-channel1 @@ -320,7 +276,6 @@ nodes: ifindex: 2 lacp: slow lacp_mode: active - mode: 802.3ad name: r2 -> r1 neighbors: - ifname: port-channel2 @@ -333,7 +288,6 @@ nodes: ifindex: 3 lacp: fast lacp_mode: active - mode: 802.3ad name: r2 -> r1 neighbors: - ifname: port-channel3 diff --git a/tests/topology/expected/lag-l3-access-vlan.yml b/tests/topology/expected/lag-l3-access-vlan.yml index f8773f0c9a..34c8f83b91 100644 --- a/tests/topology/expected/lag-l3-access-vlan.yml +++ b/tests/topology/expected/lag-l3-access-vlan.yml @@ -73,25 +73,7 @@ nodes: lag: ifindex: 1 lacp: 'off' -<<<<<<< HEAD -<<<<<<< HEAD lacp_mode: active -<<<<<<< HEAD - linkindex: 1 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 1 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN v1] r1 -> r2' neighbors: - ifname: bond1 @@ -168,94 +150,6 @@ nodes: - vlan mtu: 1500 name: r1 -<<<<<<< HEAD - r2: - af: - ipv4: true - box: quay.io/frrouting/frr:10.0.1 - clab: - binds: - - clab_files/r2/daemons:/etc/frr/daemons - - clab_files/r2/hosts:/etc/hosts - config_templates: - - daemons:/etc/frr/daemons - - hosts:/etc/hosts - kind: linux - device: frr - hostname: clab-input-r2 - id: 2 - interfaces: - - ifindex: 30000 - ifname: bond1 - lag: - ifindex: 1 - lacp: 'off' - lacp_mode: active -<<<<<<< HEAD - linkindex: 1 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) - mtu: 1500 - name: r2 -> r1 - neighbors: - - ifname: bond1 - node: r1 - type: lag - virtual_interface: true - - ifindex: 1 - ifname: eth1 - lag: - _parentindex: 1 - linkindex: 2 - mtu: 1500 - name: r2 -> r1 - neighbors: - - ifname: eth1 - node: r1 - type: p2p - - ifindex: 2 - ifname: eth2 - lag: - _parentindex: 1 - linkindex: 3 - mtu: 1500 - name: r2 -> r1 - neighbors: - - ifname: eth2 - node: r1 - type: p2p - - ifindex: 3 - ifname: eth3 - lag: - _parentindex: 1 - linkindex: 4 - mtu: 1500 - name: r2 -> r1 - neighbors: - - ifname: eth3 - node: r1 - type: p2p - lag: - lacp: fast - lacp_mode: active - loopback: - ifindex: 0 - ifname: lo - ipv4: 10.0.0.2/32 - neighbors: [] - type: loopback - virtual_interface: true - mgmt: - ifname: eth0 - ipv4: 192.168.121.102 - mac: 08:4f:a9:00:00:02 - module: - - lag - - vlan - mtu: 1500 - name: r2 -======= vlan: max_bridge_group: 1 vlans: @@ -266,9 +160,6 @@ nodes: prefix: allocation: id_based ipv4: 172.16.0.0/24 -<<<<<<< HEAD ->>>>>>> b2de7636b (Correct ip indexes, restore test results) -======= r2: af: ipv4: true @@ -291,7 +182,6 @@ nodes: ifindex: 1 lacp: 'off' lacp_mode: active - mode: 802.3ad name: '[Access VLAN v1] r2 -> r1' neighbors: - ifname: bond1 @@ -352,7 +242,6 @@ nodes: lag: lacp: fast lacp_mode: active - mode: 802.3ad loopback: ifindex: 0 ifname: lo @@ -379,7 +268,6 @@ nodes: prefix: allocation: id_based ipv4: 172.16.0.0/24 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) provider: clab vlans: v1: diff --git a/tests/topology/expected/lag-l3.yml b/tests/topology/expected/lag-l3.yml index 1898c27777..e28790d2be 100644 --- a/tests/topology/expected/lag-l3.yml +++ b/tests/topology/expected/lag-l3.yml @@ -90,27 +90,8 @@ nodes: ipv4: 10.1.0.1/30 lag: ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 1 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 1 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r1 -> r2 neighbors: - ifname: port-channel1 @@ -131,7 +112,6 @@ nodes: ifindex: 2 lacp: fast lacp_mode: active - mode: 802.3ad name: r1 -> r2 neighbors: - gateway: false @@ -226,27 +206,8 @@ nodes: ipv4: 10.1.0.2/30 lag: ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 1 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 1 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r2 -> r1 neighbors: - ifname: port-channel1 @@ -261,7 +222,6 @@ nodes: ifindex: 2 lacp: fast lacp_mode: active - mode: 802.3ad name: r2 -> r1 neighbors: - gateway: diff --git a/tests/topology/expected/lag-mlag-m_to_m.yml b/tests/topology/expected/lag-mlag-m_to_m.yml index 4758d1430e..20cdc2c557 100644 --- a/tests/topology/expected/lag-mlag-m_to_m.yml +++ b/tests/topology/expected/lag-mlag-m_to_m.yml @@ -168,28 +168,9 @@ nodes: ifname: port-channel10 lag: _mlag: true -<<<<<<< HEAD - ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 4 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 6 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= -======= ifindex: 10 ->>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) lacp: fast lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: a1 -> b1 neighbors: - ifname: port-channel20 @@ -294,28 +275,9 @@ nodes: ifname: port-channel10 lag: _mlag: true -<<<<<<< HEAD - ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 3 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 3 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= -======= ifindex: 10 ->>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) lacp: fast lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: a2 -> b2 neighbors: - ifname: port-channel20 @@ -427,28 +389,9 @@ nodes: ifname: port-channel20 lag: _mlag: true -<<<<<<< HEAD - ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 4 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 6 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= -======= ifindex: 20 ->>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) lacp: fast lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: b1 -> a1 neighbors: - ifname: port-channel10 @@ -540,28 +483,9 @@ nodes: ifname: port-channel20 lag: _mlag: true -<<<<<<< HEAD - ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 3 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 3 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= -======= ifindex: 20 ->>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) lacp: fast lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: b2 -> a2 neighbors: - ifname: port-channel10 diff --git a/tests/topology/expected/lag-mlag.yml b/tests/topology/expected/lag-mlag.yml index a99a956a53..8744f7dabd 100644 --- a/tests/topology/expected/lag-mlag.yml +++ b/tests/topology/expected/lag-mlag.yml @@ -238,27 +238,8 @@ nodes: ifname: bond1 lag: ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 2 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 2 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] h1 -> [s1,s2]' neighbors: - ifname: port-channel1 @@ -276,27 +257,8 @@ nodes: ifname: bond2 lag: ifindex: 2 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 3 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 3 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: h1 -> s1 neighbors: - ifname: port-channel2 @@ -439,27 +401,8 @@ nodes: ifname: bond1 lag: ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 4 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 4 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: - ifname: port-channel3 @@ -477,27 +420,8 @@ nodes: ifname: bond2 lag: ifindex: 2 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 5 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 5 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] h2 -> [s1,s2]' neighbors: - ifname: port-channel4 @@ -657,27 +581,8 @@ nodes: lag: _mlag: true ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 2 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 2 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s1 -> [h1,s2]' neighbors: - ifname: bond1 @@ -695,27 +600,8 @@ nodes: ifname: port-channel2 lag: ifindex: 2 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 3 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 3 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: s1 -> h1 neighbors: - ifname: bond2 @@ -728,27 +614,8 @@ nodes: lag: _mlag: true ifindex: 3 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 4 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 4 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: - ifname: bond1 @@ -767,27 +634,8 @@ nodes: lag: _mlag: true ifindex: 4 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 5 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 5 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s1 -> [h2,s2]' neighbors: - ifname: bond2 @@ -985,27 +833,8 @@ nodes: lag: _mlag: true ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 2 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 2 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s2 -> [h1,s1]' neighbors: - ifname: bond1 @@ -1024,27 +853,8 @@ nodes: lag: _mlag: true ifindex: 3 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 4 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 4 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: - ifname: bond1 @@ -1063,27 +873,8 @@ nodes: lag: _mlag: true ifindex: 4 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 5 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 5 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: '[Access VLAN red] s2 -> [h2,s1]' neighbors: - ifname: bond2 diff --git a/tests/topology/expected/lag-vlan-trunk.yml b/tests/topology/expected/lag-vlan-trunk.yml index cf11516611..bca6c0e858 100644 --- a/tests/topology/expected/lag-vlan-trunk.yml +++ b/tests/topology/expected/lag-vlan-trunk.yml @@ -72,27 +72,8 @@ nodes: ifname: bond1 lag: ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 1 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 1 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r1 -> r2 neighbors: - ifname: bond1 @@ -242,27 +223,8 @@ nodes: ifname: bond1 lag: ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 1 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 1 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad -<<<<<<< HEAD ->>>>>>> 92dd8acd0 (Fix _type check) - mtu: 1500 -======= ->>>>>>> 7a565fa3d (* Remove MTU from lag interfaces) name: r2 -> r1 neighbors: - ifname: bond1 diff --git a/tests/topology/expected/node.clone-plugin-lag.yml b/tests/topology/expected/node.clone-plugin-lag.yml index 5eed3f3888..2e8566bd35 100644 --- a/tests/topology/expected/node.clone-plugin-lag.yml +++ b/tests/topology/expected/node.clone-plugin-lag.yml @@ -213,23 +213,8 @@ nodes: ifname: bond8 lag: ifindex: 8 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 2 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 2 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: h-01 -> r1 neighbors: - ifname: port-channel8 @@ -241,23 +226,8 @@ nodes: ifname: bond9 lag: ifindex: 9 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 4 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 4 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: h-01 -> r2 neighbors: - ifname: port-channel1 @@ -334,23 +304,8 @@ nodes: ifname: bond9 lag: ifindex: 9 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 3 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 3 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: h-02 -> r1 neighbors: - ifname: port-channel9 @@ -362,23 +317,8 @@ nodes: ifname: bond10 lag: ifindex: 10 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 5 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 5 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: h-02 -> r2 neighbors: - ifname: port-channel2 @@ -455,32 +395,9 @@ nodes: ifname: bond1 lag: ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 6 -======= - mode: 802.3ad -<<<<<<< HEAD -<<<<<<< HEAD ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 6 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: '[Access VLAN red] h2-01 -> [r1,r2]' -======= - name: h2-01 -> [r1,r2] ->>>>>>> 4293ef6c3 (Implement p2p pool selection logic) -======= - name: '[Access VLAN red] h2-01 -> [r1,r2]' ->>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: port-channel10 ipv4: 172.16.0.1/24 @@ -572,32 +489,9 @@ nodes: ifname: bond1 lag: ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 7 -======= - mode: 802.3ad -<<<<<<< HEAD -<<<<<<< HEAD ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 7 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) - name: '[Access VLAN red] h2-02 -> [r1,r2]' -======= - name: h2-02 -> [r1,r2] ->>>>>>> 4293ef6c3 (Implement p2p pool selection logic) -======= name: '[Access VLAN red] h2-02 -> [r1,r2]' ->>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: port-channel11 ipv4: 172.16.0.1/24 @@ -704,23 +598,8 @@ nodes: ifname: port-channel8 lag: ifindex: 8 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 2 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 2 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: r1 -> h-01 neighbors: - ifname: bond8 @@ -732,23 +611,8 @@ nodes: ifname: port-channel9 lag: ifindex: 9 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 3 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 3 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: r1 -> h-02 neighbors: - ifname: bond9 @@ -761,32 +625,9 @@ nodes: lag: _mlag: true ifindex: 10 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 6 -======= - mode: 802.3ad -<<<<<<< HEAD -<<<<<<< HEAD ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 6 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) - name: '[Access VLAN red] r1 -> [h2-01,r2]' -======= - name: r1 -> [h2-01,r2] ->>>>>>> 4293ef6c3 (Implement p2p pool selection logic) -======= name: '[Access VLAN red] r1 -> [h2-01,r2]' ->>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: bond1 ipv4: 172.16.0.5/24 @@ -804,32 +645,9 @@ nodes: lag: _mlag: true ifindex: 11 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 7 -======= - mode: 802.3ad -<<<<<<< HEAD -<<<<<<< HEAD ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 7 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) - name: '[Access VLAN red] r1 -> [h2-02,r2]' -======= - name: r1 -> [h2-02,r2] ->>>>>>> 4293ef6c3 (Implement p2p pool selection logic) -======= name: '[Access VLAN red] r1 -> [h2-02,r2]' ->>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: bond1 ipv4: 172.16.0.6/24 @@ -1036,7 +854,6 @@ nodes: ifindex: 1 lacp: fast lacp_mode: active - mode: 802.3ad name: r2 -> h-01 neighbors: - ifname: bond9 @@ -1065,67 +882,11 @@ nodes: node: h-02 type: p2p - ifindex: 9 -<<<<<<< HEAD - ifname: Ethernet9 - lag: - _parentindex: 2 - linkindex: 15 - name: r2 -> h-02 - neighbors: - - ifname: eth4 - node: h-02 - type: p2p - - ifindex: 30000 - ifname: port-channel1 - lag: - ifindex: 1 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 4 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 4 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) - name: r2 -> h-01 - neighbors: - - ifname: bond9 - node: h-01 - pool: l2only - type: lag - virtual_interface: true - - ifindex: 30001 -======= ->>>>>>> e51f14535 (* Add attribute inheritance tests to L2 test case) ifname: port-channel2 lag: ifindex: 2 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 5 -======= - mode: 802.3ad ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 5 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) name: r2 -> h-02 neighbors: - ifname: bond10 @@ -1148,32 +909,9 @@ nodes: lag: _mlag: true ifindex: 10 -<<<<<<< HEAD -<<<<<<< HEAD - lacp: fast - lacp_mode: active -<<<<<<< HEAD - linkindex: 6 -======= - mode: 802.3ad -<<<<<<< HEAD -<<<<<<< HEAD ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 6 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= lacp: fast lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) - name: '[Access VLAN red] r2 -> [h2-01,r1]' -======= - name: r2 -> [h2-01,r1] ->>>>>>> 4293ef6c3 (Implement p2p pool selection logic) -======= name: '[Access VLAN red] r2 -> [h2-01,r1]' ->>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: bond1 ipv4: 172.16.0.5/24 @@ -1191,32 +929,9 @@ nodes: lag: _mlag: true ifindex: 11 -<<<<<<< HEAD -<<<<<<< HEAD lacp: fast lacp_mode: active -<<<<<<< HEAD - linkindex: 7 -======= - mode: 802.3ad -<<<<<<< HEAD -<<<<<<< HEAD ->>>>>>> ada79b0d6 (* Remove 'lag' as a link.type, but leave it as an interface.type) -======= - linkindex: 7 ->>>>>>> 131592a47 (Refactored to temporarily rename interface.type to '_type' to bypass validation) -======= - lacp: fast - lacp_mode: active - mode: 802.3ad ->>>>>>> 92dd8acd0 (Fix _type check) - name: '[Access VLAN red] r2 -> [h2-02,r1]' -======= - name: r2 -> [h2-02,r1] ->>>>>>> 4293ef6c3 (Implement p2p pool selection logic) -======= name: '[Access VLAN red] r2 -> [h2-02,r1]' ->>>>>>> b2de7636b (Correct ip indexes, restore test results) neighbors: - ifname: bond1 ipv4: 172.16.0.6/24 From 31a2ba13986f3f8c8cdc79315b25aacde66796a3 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Thu, 2 Jan 2025 16:46:53 -0600 Subject: [PATCH 33/36] Fix peerlink matching on Cumulus NVUE --- netsim/ansible/templates/lag/cumulus_nvue.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netsim/ansible/templates/lag/cumulus_nvue.j2 b/netsim/ansible/templates/lag/cumulus_nvue.j2 index 97d19ae251..b3e5bc4db8 100644 --- a/netsim/ansible/templates/lag/cumulus_nvue.j2 +++ b/netsim/ansible/templates/lag/cumulus_nvue.j2 @@ -6,7 +6,7 @@ member: {% for intf in interfaces if intf.lag.mlag.peergroup is defined %} {{ intf.ifname }}: {} -{% for ch in interfaces if ch.lag._parentindex|default(False) == intf.linkindex %} +{% for ch in interfaces if ch.lag._peerlink|default(0) == intf.linkindex %} {{ ch.ifname }}: {} {% endfor %} {% endfor %} From aaa413d318f67016c4148190c0f3c29510718847 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Thu, 2 Jan 2025 16:57:49 -0600 Subject: [PATCH 34/36] Fix Linux template --- netsim/ansible/templates/lag/linux.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netsim/ansible/templates/lag/linux.j2 b/netsim/ansible/templates/lag/linux.j2 index 005fb07f12..c886debf8f 100644 --- a/netsim/ansible/templates/lag/linux.j2 +++ b/netsim/ansible/templates/lag/linux.j2 @@ -12,7 +12,7 @@ ethtool -s {{ l.ifname }} autoneg off speed 1000 duplex full {% endif %} ip link set dev {{ l.ifname }} down ip link set dev {{ l.ifname }} master {% - for i in interfaces if i.type=='lag' and i.linkindex==l.lag._parentindex %}{{ i.ifname }} + for i in interfaces if i.type=='lag' and i.lag.ifindex==l.lag._parentindex %}{{ i.ifname }} {% endfor %} {% endif %} ip link set dev {{ l.ifname }} up From 5b0a8ef54370041da397cd76c006bc32a63d8e75 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Thu, 2 Jan 2025 17:42:00 -0600 Subject: [PATCH 35/36] Do not copy VLAN attributes, the VLAN module will handle that --- netsim/modules/lag.py | 6 +++--- netsim/modules/lag.yml | 2 +- tests/integration/lag/04-host-mlag.yml | 2 -- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 8eff9d3e43..6369e4c352 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -235,7 +235,7 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple members = l.pop('lag.members',[]) # Remove lag.members skip_atts = list(topology.defaults.lag.attributes.lag_no_propagate) - copy_link_to_intf = ['vlan'] if 'vlan' in l else list(topology.defaults.lag.attributes.copy_link_to_intf) + copy_link_to_intf = [] if 'vlan' in l else list(topology.defaults.lag.attributes.copy_link_to_intf) link_atts = { k:v for k,v in l.items() if k in copy_link_to_intf } l.interfaces = [] # Build interface list for lag link for node in node_count: @@ -247,8 +247,8 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple ifatts = ifatts + { k:v for k,v in m.items() if k not in skip_atts } + node_ifs[0] if dual_mlag: ifatts._peer = [ i.node for i in m.interfaces if i.node!=node ][0] - if not 'vlan' in ifatts: # VLAN on interface overrides link IP settings - ifatts = link_atts + ifatts # include vlan, gateway or prefix settings from link + if not 'vlan' in ifatts: # If not overridden by a VLAN + ifatts = link_atts + ifatts # include gateway or prefix settings from link is_mside = is_mlag and node!=one_side # Set flag if this node is the M: side if not set_lag_ifindex(l,ifatts,is_mside,topology): diff --git a/netsim/modules/lag.yml b/netsim/modules/lag.yml index 4696404149..0dd4b1c8ec 100644 --- a/netsim/modules/lag.yml +++ b/netsim/modules/lag.yml @@ -58,7 +58,7 @@ attributes: name: mtu: - # Copy these attributes from lag links into lag interface-on-link data (if not existing) + # Copy these attributes from lag links without a VLAN into lag interface-on-link data (if not existing) copy_link_to_intf: gateway: pool: diff --git a/tests/integration/lag/04-host-mlag.yml b/tests/integration/lag/04-host-mlag.yml index b1c2b97b68..62099b85f5 100644 --- a/tests/integration/lag/04-host-mlag.yml +++ b/tests/integration/lag/04-host-mlag.yml @@ -22,11 +22,9 @@ links: # On OS10 in case of mlag, vlan.trunk is implied for all vlans - other platforms? - lag: members: [h1-s1, h1-s2] - # mlag: True vlan.access: red - lag: members: [h2-s1, h2-s2] - # mlag: True vlan.access: red validate: From f9734ddbf48d3ffaeab0be51215eeadea9dae7a1 Mon Sep 17 00:00:00 2001 From: Jeroen van Bemmel Date: Thu, 2 Jan 2025 18:09:34 -0600 Subject: [PATCH 36/36] Don't bother copying attributes, other modules will take care of that --- netsim/modules/lag.py | 4 ---- netsim/modules/lag.yml | 5 ----- 2 files changed, 9 deletions(-) diff --git a/netsim/modules/lag.py b/netsim/modules/lag.py index 6369e4c352..ea03d16136 100644 --- a/netsim/modules/lag.py +++ b/netsim/modules/lag.py @@ -235,8 +235,6 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple members = l.pop('lag.members',[]) # Remove lag.members skip_atts = list(topology.defaults.lag.attributes.lag_no_propagate) - copy_link_to_intf = [] if 'vlan' in l else list(topology.defaults.lag.attributes.copy_link_to_intf) - link_atts = { k:v for k,v in l.items() if k in copy_link_to_intf } l.interfaces = [] # Build interface list for lag link for node in node_count: ifatts = data.get_box({ 'node': node, '_type': 'lag', 'lag': {} }) # use '_type', not 'type' (!) @@ -247,8 +245,6 @@ def analyze_lag(members: list, node_count: typing.Dict[str,int]) -> typing.Tuple ifatts = ifatts + { k:v for k,v in m.items() if k not in skip_atts } + node_ifs[0] if dual_mlag: ifatts._peer = [ i.node for i in m.interfaces if i.node!=node ][0] - if not 'vlan' in ifatts: # If not overridden by a VLAN - ifatts = link_atts + ifatts # include gateway or prefix settings from link is_mside = is_mlag and node!=one_side # Set flag if this node is the M: side if not set_lag_ifindex(l,ifatts,is_mside,topology): diff --git a/netsim/modules/lag.yml b/netsim/modules/lag.yml index 0dd4b1c8ec..1e005f980d 100644 --- a/netsim/modules/lag.yml +++ b/netsim/modules/lag.yml @@ -57,8 +57,3 @@ attributes: _linkname: name: mtu: - - # Copy these attributes from lag links without a VLAN into lag interface-on-link data (if not existing) - copy_link_to_intf: - gateway: - pool: