Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 6 additions & 16 deletions interface-definitions/include/dhcp-interface-multi.xml.i
Original file line number Diff line number Diff line change
@@ -1,18 +1,8 @@
<!-- include start from dhcp-interface-multi.xml.i -->
<leafNode name="dhcp-interface">
<properties>
<help>DHCP interface supplying next-hop IP address</help>
<completionHelp>
<script>${vyos_completion_dir}/list_interfaces</script>
</completionHelp>
<valueHelp>
<format>txt</format>
<description>DHCP interface name</description>
</valueHelp>
<constraint>
#include <include/constraint/interface-name.xml.i>
</constraint>
<multi/>
</properties>
<leafNode name="dhcp-interface">
<properties>
#include <include/dhcp-interface-properties.xml.i>
<multi/>
</properties>
</leafNode>
<!-- include end -->
<!-- include end -->
13 changes: 13 additions & 0 deletions interface-definitions/include/dhcp-interface-properties.xml.i
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- include end -->
<help>DHCP interface supplying next-hop IP address</help>
<completionHelp>
<script>${vyos_completion_dir}/list_interfaces</script>
</completionHelp>
<valueHelp>
<format>txt</format>
<description>DHCP interface name</description>
</valueHelp>
<constraint>
#include <include/constraint/interface-name.xml.i>
</constraint>
<!-- include end -->
14 changes: 3 additions & 11 deletions interface-definitions/include/dhcp-interface.xml.i
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
<!-- include start from dhcp-interface.xml.i -->
<leafNode name="dhcp-interface">
<properties>
<help>DHCP interface supplying next-hop IP address</help>
<completionHelp>
<script>${vyos_completion_dir}/list_interfaces</script>
</completionHelp>
<valueHelp>
<format>txt</format>
<description>DHCP interface name</description>
</valueHelp>
<constraint>
#include <include/constraint/interface-name.xml.i>
</constraint>
#include <include/dhcp-interface-properties.xml.i>
</properties>
</leafNode>
<!-- include end -->
105 changes: 105 additions & 0 deletions interface-definitions/include/failover/common-failover.xml.i
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
<!-- include start from include/failover/common-failover.xml.i -->
<children>
<node name="check">
<properties>
<help>Check target options</help>
</properties>
<children>
<leafNode name="policy">
<properties>
<help>Policy for check targets</help>
<completionHelp>
<list>any-available all-available</list>
</completionHelp>
<valueHelp>
<format>all-available</format>
<description>All targets must be alive</description>
</valueHelp>
<valueHelp>
<format>any-available</format>
<description>Any target must be alive</description>
</valueHelp>
<constraint>
<regex>(all-available|any-available)</regex>
</constraint>
</properties>
<defaultValue>any-available</defaultValue>
</leafNode>
#include <include/port-number.xml.i>
<tagNode name="target">
<properties>
<help>Check target address</help>
<valueHelp>
<format>ipv4</format>
<description>Address to check</description>
</valueHelp>
<constraint>
<validator name="ipv4-address"/>
</constraint>
</properties>
<children>
#include <include/interface/vrf.xml.i>
#include <include/generic-interface.xml.i>
</children>
</tagNode>
<leafNode name="timeout">
<properties>
<help>Timeout between checks</help>
<valueHelp>
<format>u32:1-300</format>
<description>Timeout in seconds between checks</description>
</valueHelp>
<constraint>
<validator name="numeric" argument="--range 1-255"/>
</constraint>
</properties>
<defaultValue>10</defaultValue>
</leafNode>
<leafNode name="type">
<properties>
<help>Check type</help>
<completionHelp>
<list>arp icmp tcp</list>
</completionHelp>
<valueHelp>
<format>arp</format>
<description>Check target by ARP</description>
</valueHelp>
<valueHelp>
<format>icmp</format>
<description>Check target by ICMP</description>
</valueHelp>
<valueHelp>
<format>tcp</format>
<description>Check target by TCP</description>
</valueHelp>
<constraint>
<regex>(arp|icmp|tcp)</regex>
</constraint>
</properties>
<defaultValue>icmp</defaultValue>
</leafNode>
</children>
</node>
#include <include/generic-interface.xml.i>
<leafNode name="metric">
<properties>
<help>Route metric for this gateway</help>
<valueHelp>
<format>u32:1-255</format>
<description>Route metric</description>
</valueHelp>
<constraint>
<validator name="numeric" argument="--range 1-255"/>
</constraint>
</properties>
<defaultValue>1</defaultValue>
</leafNode>
<leafNode name="onlink">
<properties>
<help>The next hop is directly connected to the interface, even if it does not match interface prefix</help>
<valueless/>
</properties>
</leafNode>
</children>
<!-- include end -->
110 changes: 7 additions & 103 deletions interface-definitions/include/failover/protocol-common-config.xml.i
Original file line number Diff line number Diff line change
Expand Up @@ -22,109 +22,13 @@
<validator name="ipv4-address"/>
</constraint>
</properties>
<children>
<node name="check">
<properties>
<help>Check target options</help>
</properties>
<children>
<leafNode name="policy">
<properties>
<help>Policy for check targets</help>
<completionHelp>
<list>any-available all-available</list>
</completionHelp>
<valueHelp>
<format>all-available</format>
<description>All targets must be alive</description>
</valueHelp>
<valueHelp>
<format>any-available</format>
<description>Any target must be alive</description>
</valueHelp>
<constraint>
<regex>(all-available|any-available)</regex>
</constraint>
</properties>
<defaultValue>any-available</defaultValue>
</leafNode>
#include <include/port-number.xml.i>
<tagNode name="target">
<properties>
<help>Check target address</help>
<valueHelp>
<format>ipv4</format>
<description>Address to check</description>
</valueHelp>
<constraint>
<validator name="ipv4-address"/>
</constraint>
</properties>
<children>
#include <include/interface/vrf.xml.i>
#include <include/generic-interface.xml.i>
</children>
</tagNode>
<leafNode name="timeout">
<properties>
<help>Timeout between checks</help>
<valueHelp>
<format>u32:1-300</format>
<description>Timeout in seconds between checks</description>
</valueHelp>
<constraint>
<validator name="numeric" argument="--range 1-255"/>
</constraint>
</properties>
<defaultValue>10</defaultValue>
</leafNode>
<leafNode name="type">
<properties>
<help>Check type</help>
<completionHelp>
<list>arp icmp tcp</list>
</completionHelp>
<valueHelp>
<format>arp</format>
<description>Check target by ARP</description>
</valueHelp>
<valueHelp>
<format>icmp</format>
<description>Check target by ICMP</description>
</valueHelp>
<valueHelp>
<format>tcp</format>
<description>Check target by TCP</description>
</valueHelp>
<constraint>
<regex>(arp|icmp|tcp)</regex>
</constraint>
</properties>
<defaultValue>icmp</defaultValue>
</leafNode>
</children>
</node>
#include <include/generic-interface.xml.i>
<leafNode name="metric">
<properties>
<help>Route metric for this gateway</help>
<valueHelp>
<format>u32:1-255</format>
<description>Route metric</description>
</valueHelp>
<constraint>
<validator name="numeric" argument="--range 1-255"/>
</constraint>
</properties>
<defaultValue>1</defaultValue>
</leafNode>
<leafNode name="onlink">
<properties>
<help>The next hop is directly connected to the interface, even if it does not match interface prefix</help>
<valueless/>
</properties>
</leafNode>
</children>
#include <include/failover/common-failover.xml.i>
</tagNode>
<tagNode name="dhcp-interface">
<properties>
#include <include/dhcp-interface-properties.xml.i>
</properties>
#include <include/failover/common-failover.xml.i>
</tagNode>
</children>
</tagNode>
Expand Down
16 changes: 10 additions & 6 deletions python/vyos/template.py
Original file line number Diff line number Diff line change
Expand Up @@ -422,21 +422,25 @@ def is_file(filename):

@register_filter('get_dhcp_router')
def get_dhcp_router(interface):
""" Static routes can point to a router received by a DHCP reply. This
"""Static routes can point to a router received by a DHCP reply. This
helper is used to get the current default router from the DHCP reply.

Returns False of no router is found, returns the IP address as string if
Returns None if no router is found, returns the IP address as string if
a router is found.
"""
lease_file = directories['isc_dhclient_dir'] + f'/dhclient_{interface}.leases'
lease_file = directories['isc_dhclient_dir'] + f'/dhclient_{interface}.lease'
if not os.path.exists(lease_file):
return None

from vyos.utils.file import read_file
for line in read_file(lease_file).splitlines():
if 'option routers' in line:
(_, _, address) = line.split()
return address.rstrip(';')
if 'new_routers' in line:
(_, address, _) = line.split("'")
if not address:
return None
# Take first one if there are several
address = address.split()[0]
return address

@register_filter('natural_sort')
def natural_sort(iterable):
Expand Down
Loading
Loading