summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNataliia Solomko <natalirs1985@gmail.com>2026-09-09 12:35:03 +0300
committerNataliia Solomko <natalirs1985@gmail.com>2026-09-09 13:01:45 +0300
commit30ac19fd30f0d6f1396ea2fc2facdbe06bdfeee4 (patch)
tree9246d24379db426a22f5fb9a66f90730a52dc9f4 /src
parente152d756fdd9d43c31e3ce3a79c64370f2df9615 (diff)
downloadvyos-1x-30ac19fd30f0d6f1396ea2fc2facdbe06bdfeee4.tar.gz
vyos-1x-30ac19fd30f0d6f1396ea2fc2facdbe06bdfeee4.zip
static_arp: T9268: Fix deletion of static ARP entries
Diffstat (limited to 'src')
-rwxr-xr-xsrc/conf_mode/protocols_static_arp.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/conf_mode/protocols_static_arp.py b/src/conf_mode/protocols_static_arp.py
index 87dc5229e..2b5570ab0 100755
--- a/src/conf_mode/protocols_static_arp.py
+++ b/src/conf_mode/protocols_static_arp.py
@@ -32,10 +32,18 @@ def get_config(config=None):
base = ['protocols', 'static', 'arp']
arp = conf.get_config_dict(base, get_first_key=True)
- if 'interface' in arp:
- for interface in arp['interface']:
- tmp = node_changed(conf, base + ['interface', interface, 'address'], recursive=True)
- if tmp: arp['interface'][interface].update({'address_old' : tmp})
+ # Collect both configured interfaces and interfaces removed in this commit
+ # (e.g. deleting the whole node), so their old ARP entries get cleaned up.
+ interfaces = set(arp.get('interface', {}))
+ interfaces.update(node_changed(conf, base + ['interface']))
+
+ for interface in interfaces:
+ tmp = node_changed(
+ conf, base + ['interface', interface, 'address'], recursive=True
+ )
+ if tmp:
+ arp.setdefault('interface', {}).setdefault(interface, {})
+ arp['interface'][interface].update({'address_old': tmp})
return arp