diff options
| author | David Vølker <david@voelker.dk> | 2025-08-15 09:31:49 +0200 |
|---|---|---|
| committer | David Vølker <david@voelker.dk> | 2025-08-15 09:31:49 +0200 |
| commit | 974f9a5d5e13241e2b4ea54152bf835db6b7feff (patch) | |
| tree | b816d2c6c6bea3e670f44e880f32b10d311d353e /python | |
| parent | 862817a7207c5b5d17c67451bac602d296b88230 (diff) | |
| download | vyos-1x-974f9a5d5e13241e2b4ea54152bf835db6b7feff.tar.gz vyos-1x-974f9a5d5e13241e2b4ea54152bf835db6b7feff.zip | |
kea: T6211: add VRF support for KEA dhcp server
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/kea.py | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/python/vyos/kea.py b/python/vyos/kea.py index 5eecbbaad..4a8a8b4c8 100644 --- a/python/vyos/kea.py +++ b/python/vyos/kea.py @@ -60,7 +60,7 @@ kea6_options = { 'capwap_controller': 'capwap-ac-v6', } -kea_ctrl_socket = '/run/kea/dhcp{inet}-ctrl-socket' +kea_ctrl_socket = '/run/kea/dhcp{inet}{vrf_append}-ctrl-socket' def _format_hex_string(in_str): @@ -403,8 +403,13 @@ def kea_parse_ddns_settings(config): return data -def _ctrl_socket_command(inet, command, args=None): - path = kea_ctrl_socket.format(inet=inet) +def _ctrl_socket_command(inet, vrf_name, command, args=None): + if vrf_name: + vrf_append = f'-{vrf_name}' + else: + vrf_append = '' + + path = kea_ctrl_socket.format(inet=inet, vrf_append=vrf_append) if not os.path.exists(path): return None @@ -430,8 +435,8 @@ def _ctrl_socket_command(inet, command, args=None): return json.loads(result.decode('utf-8')) -def kea_get_leases(inet): - leases = _ctrl_socket_command(inet, f'lease{inet}-get-all') +def kea_get_leases(inet, vrf_name): + leases = _ctrl_socket_command(inet, vrf_name, f'lease{inet}-get-all') if not leases or 'result' not in leases or leases['result'] != 0: return [] @@ -441,6 +446,7 @@ def kea_get_leases(inet): def kea_add_lease( inet, + vrf_name, ip_address, host_name=None, mac_address=None, @@ -466,7 +472,7 @@ def kea_add_lease( if inet == '6' and iaid: args['iaid'] = iaid - result = _ctrl_socket_command(inet, f'lease{inet}-add', args) + result = _ctrl_socket_command(inet, vrf_name, f'lease{inet}-add', args) if result and 'result' in result: return result['result'] == 0 @@ -474,10 +480,10 @@ def kea_add_lease( return False -def kea_delete_lease(inet, ip_address): +def kea_delete_lease(inet, ip_address, vrf_name=''): args = {'ip-address': ip_address} - result = _ctrl_socket_command(inet, f'lease{inet}-del', args) + result = _ctrl_socket_command(inet, vrf_name, f'lease{inet}-del', args) if result and 'result' in result: return result['result'] == 0 @@ -485,8 +491,8 @@ def kea_delete_lease(inet, ip_address): return False -def kea_get_active_config(inet): - config = _ctrl_socket_command(inet, 'config-get') +def kea_get_active_config(inet, vrf_name): + config = _ctrl_socket_command(inet, vrf_name, 'config-get') if not config or 'result' not in config or config['result'] != 0: return None @@ -580,12 +586,12 @@ def kea_get_static_mappings(config, inet, pools=[]) -> list: return mappings -def kea_get_server_leases(config, inet, pools=[], state=[], origin=None) -> list: +def kea_get_server_leases(config, inet, vrf_name, pools=[], state=[], origin=None) -> list: """ Get DHCP server leases from active Kea DHCPv4 or DHCPv6 configuration :return list """ - leases = kea_get_leases(inet) + leases = kea_get_leases(inet, vrf_name) data = [] for lease in leases: |
