From a561dc64b1081b89f065f7ef18a2c27ecadcc969 Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Sun, 3 Apr 2022 15:40:21 +0000 Subject: [PATCH] Correctly prune addresses from untagged and tagged VXLAN tunnels --- .gitignore | 2 +- intest/hippo13.yaml | 101 ++++++++++++++++++++++++++++++++++++++++++++ vpp/reconciler.py | 11 +++-- 3 files changed, 109 insertions(+), 5 deletions(-) create mode 100644 intest/hippo13.yaml diff --git a/.gitignore b/.gitignore index dc9d102..1095786 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,5 @@ build/ dist/ *.swp *.out -*.exec +*exec __pycache__ diff --git a/intest/hippo13.yaml b/intest/hippo13.yaml new file mode 100644 index 0000000..9bb3efc --- /dev/null +++ b/intest/hippo13.yaml @@ -0,0 +1,101 @@ +bondethernets: + BondEthernet0: + interfaces: [ GigabitEthernet3/0/0, GigabitEthernet3/0/1 ] + +interfaces: + GigabitEthernet3/0/0: + mtu: 9000 + description: "LAG #1" + GigabitEthernet3/0/1: + mtu: 9000 + description: "LAG #2" + + HundredGigabitEthernet12/0/0: + lcp: "ice0" + mtu: 9000 + addresses: [ 192.0.2.17/30, 2001:db8:3::1/64 ] + sub-interfaces: + 1234: + mtu: 1500 + lcp: "ice0.1234" + encapsulation: + dot1q: 1234 + exact-match: True + 1235: + mtu: 1500 + lcp: "ice0.1234.1000" + encapsulation: + dot1q: 1234 + inner-dot1q: 1000 + exact-match: True + + HundredGigabitEthernet12/0/1: + mtu: 2000 + description: "Bridged" + + BondEthernet0: + mtu: 9000 + lcp: "bond0" + sub-interfaces: + 10: + lcp: "bond0.10" + mtu: 3000 + 100: + mtu: 2500 + l2xc: BondEthernet0.200 + encapsulation: + dot1q: 100 + exact-match: False + 200: + mtu: 2500 + l2xc: BondEthernet0.100 + encapsulation: + dot1q: 200 + exact-match: False + 500: + mtu: 2000 + encapsulation: + dot1ad: 500 + exact-match: False + 501: + mtu: 2000 + encapsulation: + dot1ad: 501 + exact-match: False + vxlan_tunnel0: + mtu: 1500 + addresses: [ 192.0.2.1/29, 2001:db8:1:1::1/64 ] + lcp: "vxlan0" + sub-interfaces: + 100: + lcp: "vxlan0.100" + addresses: [ 192.0.2.33/29, 2001:db8:1:2::1/64 ] + + vxlan_tunnel1: + mtu: 2000 + +loopbacks: + loop0: + lcp: "lo0" + addresses: [ 10.0.0.1/32, 2001:db8::1/128 ] + loop1: + lcp: "bvi1" + addresses: [ 10.0.1.1/24, 2001:db8:1::1/64 ] + +bridgedomains: + bd1: + mtu: 2000 + bvi: loop1 + interfaces: [ BondEthernet0.500, BondEthernet0.501, HundredGigabitEthernet12/0/1, vxlan_tunnel1 ] + bd11: + mtu: 1500 + +vxlan_tunnels: + vxlan_tunnel0: + local: 2001:db8::1 + remote: 2001:db8::2 + vni: 100 + vxlan_tunnel1: + local: 192.0.2.1 + remote: 192.0.2.2 + vni: 101 diff --git a/vpp/reconciler.py b/vpp/reconciler.py index 9e6b073..3ae41d8 100644 --- a/vpp/reconciler.py +++ b/vpp/reconciler.py @@ -283,6 +283,7 @@ class Reconciler(): vpp_ifname = self.vpp.cache['interfaces'][idx].interface_name config_ifname, config_iface = vxlan_tunnel.get_by_name(self.cfg, vpp_ifname) if not config_iface: + self.prune_addresses(vpp_ifname, []) cli="create vxlan tunnel instance %d src %s dst %s vni %d del" % (vpp_vxlan.instance, vpp_vxlan.src_address, vpp_vxlan.dst_address, vpp_vxlan.vni) self.cli['prune'].append(cli); @@ -294,10 +295,12 @@ class Reconciler(): self.cli['prune'].append(cli); removed_interfaces.append(vpp_ifname) continue - addresses = [] - if 'addresses' in config_iface: - addresses = config_iface['addresses'] - self.prune_addresses(vpp_ifname, addresses) + config_ifname, config_iface = interface.get_by_name(self.cfg, vpp_ifname) + if config_iface: + addresses = [] + if 'addresses' in config_iface: + addresses = config_iface['addresses'] + self.prune_addresses(vpp_ifname, addresses) self.logger.debug("VXLAN Tunnel OK: %s" % (vpp_ifname)) for ifname in removed_interfaces: