Skip to content

Commit 5113949

Browse files
author
David Vølker
committed
Merge branch 'vrf-dhcp' of https://github.com/davi2367/vyos-1x into vrf-dhcp
2 parents c62fea6 + 0447d7b commit 5113949

File tree

3 files changed

+67
-7
lines changed

3 files changed

+67
-7
lines changed

interface-definitions/vrf.xml.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@
108108
</children>
109109
</node>
110110
<node name="service">
111+
<properties>
112+
<help>Enable services in the vrf itself</help>
113+
</properties>
111114
<children>
112115
<node name="dhcp-server" owner="${vyos_conf_scripts_dir}/service_dhcp-server.py $VAR(../../@)">
113116
<properties>

op-mode-definitions/dhcp.xml.in

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
<command>${vyos_op_scripts_dir}/dhcp.py clear_dhcp_server_lease --family inet --address $4</command>
1515
</tagNode>
1616
<tagNode name="vrf">
17+
<properties>
18+
<help>Clear DHCP server lease for vrf</help>
19+
<completionHelp>
20+
<path>vrf name</path>
21+
<list>all</list>
22+
</completionHelp>
23+
</properties>
1724
<children>
1825
<tagNode name="lease">
1926
<properties>
@@ -37,6 +44,13 @@
3744
<command>${vyos_op_scripts_dir}/dhcp.py clear_dhcp_server_lease --family inet6 --address $4</command>
3845
</tagNode>
3946
<tagNode name="vrf">
47+
<properties>
48+
<help>Clear DHCPv6 server lease for vrf</help>
49+
<completionHelp>
50+
<path>vrf name</path>
51+
<list>all</list>
52+
</completionHelp>
53+
</properties>
4054
<children>
4155
<tagNode name="lease">
4256
<properties>
@@ -174,6 +188,13 @@
174188
</children>
175189
</node>
176190
<tagNode name="vrf">
191+
<properties>
192+
<help>Show DHCP (Dynamic Host Configuration Protocol) information for vrf</help>
193+
<completionHelp>
194+
<path>vrf name</path>
195+
<list>all</list>
196+
</completionHelp>
197+
</properties>
177198
<children>
178199
<node name="leases">
179200
<properties>
@@ -357,6 +378,13 @@
357378
</children>
358379
</node>
359380
<tagNode name="vrf">
381+
<properties>
382+
<help>Show DHCPv6 (IPv6 Dynamic Host Configuration Protocol) information for vrf</help>
383+
<completionHelp>
384+
<path>vrf name</path>
385+
<list>all</list>
386+
</completionHelp>
387+
</properties>
360388
<children>
361389
<node name="leases">
362390
<properties>
@@ -458,6 +486,13 @@
458486
<command>sudo ${vyos_op_scripts_dir}/restart.py restart_service --name dhcp</command>
459487
<children>
460488
<tagNode name="vrf">
489+
<properties>
490+
<help>Restart DHCP server on vrf</help>
491+
<completionHelp>
492+
<path>vrf name</path>
493+
<list>all</list>
494+
</completionHelp>
495+
</properties>
461496
<command>sudo ${vyos_op_scripts_dir}/restart.py restart_service --name dhcp --vrf $5</command>
462497
</tagNode>
463498
</children>
@@ -482,6 +517,13 @@
482517
<command>sudo ${vyos_op_scripts_dir}/restart.py restart_service --name dhcpv6</command>
483518
<children>
484519
<tagNode name="vrf">
520+
<properties>
521+
<help>Restart DHCPv6 server on vrf</help>
522+
<completionHelp>
523+
<path>vrf name</path>
524+
<list>all</list>
525+
</completionHelp>
526+
</properties>
485527
<command>sudo ${vyos_op_scripts_dir}/restart.py restart_service --name dhcpv6 --vrf $5</command>
486528
</tagNode>
487529
</children>

src/op_mode/dhcp.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,13 @@ def _get_formatted_server_leases(raw_data, family='inet'):
166166
return output
167167

168168

169-
def _get_pool_size(pool, family='inet'):
169+
def _get_pool_size(pool, family='inet', vrf=''):
170170
v = 'v6' if family == 'inet6' else ''
171-
base = f'service dhcp{v}-server shared-network-name {pool}'
171+
# if vrf is set get the correct base for config
172+
if vrf:
173+
base = f'vrf name {vrf} service dhcp{v}-server shared-network-name {pool}'
174+
else:
175+
base = f'service dhcp{v}-server shared-network-name {pool}'
172176
size = 0
173177
subnets = config.list_nodes(f'{base} subnet')
174178
for subnet in subnets:
@@ -185,7 +189,7 @@ def _get_pool_size(pool, family='inet'):
185189
return size
186190

187191

188-
def _get_raw_server_pool_statistics(config, family='inet', pool=None):
192+
def _get_raw_server_pool_statistics(config, family='inet', vrf='', pool=None):
189193
inet_suffix = '6' if family == 'inet6' else '4'
190194
pools = [pool] if pool else kea_get_dhcp_pools(config, inet_suffix)
191195

@@ -269,11 +273,20 @@ def _verify_server(func):
269273
def _wrapper(*args, **kwargs):
270274
config = ConfigTreeQuery()
271275
family = kwargs.get('family')
276+
vrf = kwargs.get('vrf')
272277
v = 'v6' if family == 'inet6' else ''
273-
unconf_message = f'DHCP{v} server is not configured'
278+
274279
# Check if config does not exist
275-
if not config.exists(f'service dhcp{v}-server'):
276-
raise vyos.opmode.UnconfiguredSubsystem(unconf_message)
280+
if vrf:
281+
unconf_message = f'DHCP{v} server is not configured for VRF {vrf}'
282+
if not config.exists(f'vrf name {vrf} service dhcp{v}-server'):
283+
raise vyos.opmode.UnconfiguredSubsystem(unconf_message)
284+
else:
285+
unconf_message = f'DHCP{v} server is not configured'
286+
if not config.exists(f'service dhcp{v}-server'):
287+
raise vyos.opmode.UnconfiguredSubsystem(unconf_message)
288+
289+
# return
277290
return func(*args, **kwargs)
278291

279292
return _wrapper
@@ -326,7 +339,9 @@ def show_server_pool_statistics(
326339
if pool and active_pools and pool not in active_pools:
327340
raise vyos.opmode.IncorrectValue(f'DHCP{v} pool "{pool}" does not exist!')
328341

329-
pool_data = _get_raw_server_pool_statistics(active_config, family=family, pool=pool)
342+
pool_data = _get_raw_server_pool_statistics(
343+
active_config, family=family, vrf=vrf, pool=pool
344+
)
330345
if raw:
331346
return pool_data
332347
else:

0 commit comments

Comments
 (0)