summaryrefslogtreecommitdiff
path: root/src/conf_mode/protocols_static.py
diff options
context:
space:
mode:
authorViacheslav Hletenko <v.gletenko@vyos.io>2025-10-22 15:39:18 +0300
committerGitHub <noreply@github.com>2025-10-22 15:39:18 +0300
commitc284938df61b5e970dd13cde03e0693254e89211 (patch)
tree8339e1bbe531ac5caffb80938b48fdce4743cbba /src/conf_mode/protocols_static.py
parentd272b2509836403682c6c8ab4096ccf4be003bcb (diff)
parentc4632bb6ad6c055fb7fe5a5c055354c6895ba8e5 (diff)
downloadvyos-1x-c284938df61b5e970dd13cde03e0693254e89211.tar.gz
vyos-1x-c284938df61b5e970dd13cde03e0693254e89211.zip
Merge pull request #4622 from MattKobayashi/T3680
T3680: protocols: add dhclient hooks for dhcp-interface static routes
Diffstat (limited to 'src/conf_mode/protocols_static.py')
-rwxr-xr-xsrc/conf_mode/protocols_static.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/conf_mode/protocols_static.py b/src/conf_mode/protocols_static.py
index 7c730ca81..6310be13d 100755
--- a/src/conf_mode/protocols_static.py
+++ b/src/conf_mode/protocols_static.py
@@ -17,6 +17,7 @@
from ipaddress import IPv4Network
from sys import exit
from sys import argv
+import os
from vyos.config import Config
from vyos.configverify import has_frr_protocol_in_dict
@@ -25,12 +26,15 @@ from vyos.configverify import verify_vrf
from vyos.frrender import FRRender
from vyos.frrender import get_frrender_dict
from vyos.utils.process import is_systemd_service_running
+from vyos.utils.file import write_file
from vyos.template import render
from vyos import ConfigError
from vyos import airbag
+from vyos import defaults
airbag.enable()
config_file = '/etc/iproute2/rt_tables.d/vyos-static.conf'
+DHCP_HOOK_IFLIST = defaults.static_route_dhcp_interfaces_path
def get_config(config=None):
if config:
@@ -92,6 +96,22 @@ def generate(config_dict):
# eqivalent of the C foo ? 'a' : 'b' statement
static = vrf and config_dict['vrf']['name'][vrf]['protocols']['static'] or config_dict['static']
+ # Collect interfaces that have DHCP configuration for DHCP hooks
+ dhcp_interfaces = set()
+
+ # Check for DHCP interfaces in route configurations
+ if 'route' in static:
+ for prefix, prefix_options in static['route'].items():
+ if 'dhcp_interface' in prefix_options:
+ for interface_name in prefix_options['dhcp_interface']:
+ dhcp_interfaces.add(interface_name)
+
+ # Write the interface list for DHCP hooks or clean up if empty
+ if dhcp_interfaces:
+ write_file(DHCP_HOOK_IFLIST, " ".join(dhcp_interfaces))
+ elif os.path.exists(DHCP_HOOK_IFLIST):
+ os.unlink(DHCP_HOOK_IFLIST)
+
# Put routing table names in /etc/iproute2/rt_tables
render(config_file, 'iproute2/static.conf.j2', static)